4 * Copyright (c) 2009-2010 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
36 #include <btron/btron.h>
38 #include <btron/hmi.h>
39 #include <btron/vobj.h>
40 #include <btron/libapp.h>
41 #include <btron/bsocket.h>
49 #include "layoutarray.h"
51 #include "retriever.h"
54 #include "sjisstring.h"
55 #include "bchan_vobj.h"
56 #include "bchan_panels.h"
57 #include "bchan_menus.h"
59 #ifdef BCHAN_CONFIG_DEBUG
60 # define DP(arg) printf arg
61 # define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err)
64 # define DP_ER(msg, err) /**/
67 #define BCHAN_DBX_MENU_TEST 20
68 #define BCHAN_DBX_TEXT_MLIST0 21
69 #define BCHAN_DBX_TEXT_MLIST1 22
70 #define BCHAN_DBX_TEXT_MLIST2 23
71 #define BCHAN_DBX_MSGTEXT_RETRIEVING 24
72 #define BCHAN_DBX_MSGTEXT_NOTMODIFIED 25
73 #define BCHAN_DBX_MSGTEXT_POSTSUCCEED 26
74 #define BCHAN_DBX_MSGTEXT_POSTDENIED 27
75 #define BCHAN_DBX_MSGTEXT_POSTERROR 28
76 #define BCHAN_DBX_MS_CONFIRM_POST 29
77 #define BCHAN_DBX_MS_CONFIRM_CANCEL 30
78 #define BCHAN_DBX_TEXT_CONFIRM_TITLE 31
79 #define BCHAN_DBX_MSGTEXT_NONAUTHORITATIVE 32
80 #define BCHAN_DBX_MSGTEXT_NETWORKERROR 33
81 #define BCHAN_DBX_FFUSEN_BBB 34
82 #define BCHAN_DBX_FFUSEN_TEXEDIT 35
83 #define BCHAN_DBX_FFUSEN_VIEWER 36
84 #define BCHAN_DBX_MSGTEXT_NOTFOUND 37
85 #define BCHAN_DBX_MSGTEXT_CANTRETRIEVE 44
86 #define BCHAN_DBX_GMENU_RESNUMBER 45
87 #define BCHAN_DBX_GMENU_RESID 47
89 #define BCHAN_MENU_WINDOW 4
91 typedef struct bchan_hmistate_t_ bchan_hmistate_t;
92 struct bchan_hmistate_t_ {
97 TC *msg_nonauthoritative;
101 TC *msg_networkerror;
103 TC *msg_cantretrieve;
106 LOCAL VOID bchan_hmistate_updateptrstyle(bchan_hmistate_t *hmistate, PTRSTL ptr)
108 if (hmistate->ptr == ptr) {
112 gset_ptr(hmistate->ptr, NULL, -1, -1);
115 LOCAL VOID bchan_hmistate_display_postdenied(bchan_hmistate_t *hmistate, TC *str, W len)
120 size = tc_strlen(hmistate->msg_postdenied);
121 msg_len = size + len + 2;
122 msg = malloc((msg_len + 1)*sizeof(TC));
124 pdsp_msg(hmistate->msg_postdenied);
127 tc_strcpy(msg, hmistate->msg_postdenied);
129 memcpy((UB*)(msg + size + 1), str, len * sizeof(TC));
130 msg[msg_len - 1] = TK_RPAR;
131 msg[msg_len] = TNULL;
138 typedef struct bchan_t_ bchan_t;
147 Bool request_confirm_open; /* TODO: should be other implememt? */
152 bchan_hmistate_t hmistate;
153 bchan_resnumbermenu_t resnumbermenu;
154 bchan_residmenu_t residmenu;
156 datretriever_t *retriever;
159 datlayoutarray_t *layoutarray;
160 datlayoutstyle_t style;
165 cfrmwindow_t *confirm;
167 postresdata_t *resdata;
170 #define BCHAN_MESSAGE_RETRIEVER_UPDATE 1
171 #define BCHAN_MESSAGE_RETRIEVER_RELAYOUT 2
172 #define BCHAN_MESSAGE_RETRIEVER_NOTMODIFIED 3
173 #define BCHAN_MESSAGE_RETRIEVER_NONAUTHORITATIVE 4
174 #define BCHAN_MESSAGE_RETRIEVER_NOTFOUND 5
175 #define BCHAN_MESSAGE_RETRIEVER_ERROR -1
179 void killme(bchan_t *bchan)
181 gset_ptr(PS_BUSY, NULL, -1, -1);
183 bchan_residmenu_finalize(&bchan->residmenu);
184 bchan_resnumbermenu_finalize(&bchan->resnumbermenu);
185 if (bchan->exectype == EXECREQ) {
186 oend_prc(bchan->vid, NULL, 0);
188 if (bchan->wid > 0) {
189 wcls_wnd(bchan->wid, CLR);
194 LOCAL VOID bchan_scroll(VP arg, W dh, W dv)
196 bchan_t *bchan = (bchan_t*)arg;
197 datdraw_scrollviewrect(bchan->draw, dh, dv);
198 wscr_wnd(bchan->wid, NULL, -dh, -dv, W_MOVE|W_RDSET);
201 LOCAL VOID bchan_draw(VP arg, RECT *r)
203 bchan_t *bchan = (bchan_t*)arg;
204 datdraw_draw(bchan->draw, r);
207 LOCAL VOID bchan_resize(VP arg)
209 bchan_t *bchan = (bchan_t*)arg;
212 Bool workchange = False;
214 wget_wrk(bchan->wid, &work);
215 if (work.c.left != 0) {
219 if (work.c.top != 0) {
223 wset_wrk(bchan->wid, &work);
224 gset_vis(bchan->gid, work);
226 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
228 r = l + work.c.right - work.c.left;
229 b = t + work.c.bottom - work.c.top;
231 datdraw_setviewrect(bchan->draw, l, t, r, b);
232 datwindow_setworkrect(bchan->window, l, t, r, b);
234 if (workchange == True) {
235 wera_wnd(bchan->wid, NULL);
236 wreq_dsp(bchan->wid);
240 LOCAL VOID bchan_close(VP arg)
242 bchan_t *bchan = (bchan_t*)arg;
243 /* TODO: guard request event W_DELETE and W_FINISH. */
244 datcache_writefile(bchan->cache);
248 LOCAL VOID bchan_pushstringtotray(TC *str, W len)
253 TADSEG *base = (TADSEG*)bin;
254 TEXTSEG *textseg = (TEXTSEG*)(bin + 4);
258 textseg->view = (RECT){{0, 0, 0, 0}};
259 textseg->draw = (RECT){{0, 0, 0, 0}};
260 textseg->h_unit = -120;
261 textseg->v_unit = -120;
262 textseg->lang = 0x21;
265 trayrec[0].id = 0xE1;
268 trayrec[1].id = TR_TEXT;
269 trayrec[1].len = len * sizeof(TC);
270 trayrec[1].dt = (B*)str;
272 err = tpsh_dat(trayrec, 2, NULL);
274 DP_ER("tpsh_dat", err);
278 LOCAL VOID bchan_pushthreadtitle(bchan_t *bchan)
283 str = datlayout_gettitle(bchan->layout);
284 len = datlayout_gettitlelen(bchan->layout);
285 bchan_pushstringtotray(str, len);
288 LOCAL VOID bchan_pushthreadurl(bchan_t *bchan)
290 W host_len, board_len, thread_len, len, i, ret;
291 UB *host, *board, *thread;
294 datcache_gethost(bchan->cache, &host, &host_len);
295 datcache_getborad(bchan->cache, &board, &board_len);
296 datcache_getthread(bchan->cache, &thread, &thread_len);
298 len = 7 + host_len + 15 + board_len + 1 + thread_len + 1;
299 str = malloc(sizeof(TC)*len);
308 for (i = 0; i < host_len; i++) {
309 ret = sjtotc(str + 7 + i, host + i);
311 DP(("invalid charactor\n"));
316 str[7 + host_len] = TK_SLSH;
317 str[7 + host_len + 1] = TK_t;
318 str[7 + host_len + 2] = TK_e;
319 str[7 + host_len + 3] = TK_s;
320 str[7 + host_len + 4] = TK_t;
321 str[7 + host_len + 5] = TK_SLSH;
322 str[7 + host_len + 6] = TK_r;
323 str[7 + host_len + 7] = TK_e;
324 str[7 + host_len + 8] = TK_a;
325 str[7 + host_len + 9] = TK_d;
326 str[7 + host_len + 10] = TK_PROD;
327 str[7 + host_len + 11] = TK_c;
328 str[7 + host_len + 12] = TK_g;
329 str[7 + host_len + 13] = TK_i;
330 str[7 + host_len + 14] = TK_SLSH;
331 for (i = 0; i < board_len; i++) {
332 ret = sjtotc(str + 7 + host_len + 15 + i, board + i);
334 DP(("invalid charactor\n"));
339 str[7 + host_len + 15 + board_len] = TK_SLSH;
340 for (i = 0; i < thread_len; i++) {
341 ret = sjtotc(str + 7 + host_len + 15 + board_len + 1 + i, thread + i);
343 DP(("invalid charactor\n"));
348 str[7 + host_len + 15 + board_len + 1 + thread_len] = TK_SLSH;
350 bchan_pushstringtotray(str, len);
355 LOCAL Bool bchan_is_bbs_url(UB *data, W data_len)
358 W str_len, cmp, i, n_slsh = 0;
360 if ((tadurl_cmpscheme(data, data_len, "http", 4) != 0)
361 &&(tadurl_cmpscheme(data, data_len, "ttp", 3) != 0)) {
365 cmp = tadurl_cmppath(data, data_len, "test/read.cgi/", 14);
371 str_len = data_len/2;
380 if (str[i] == TK_SLSH) {
389 if (str[i] == TK_SLSH) {
392 if (tc_isdigit(str[i]) == 0) {
400 LOCAL W bchan_createvobj_allocate_url(UB *data, W data_len, TC **url, W *url_len)
405 if (tadurl_cmpscheme(data, data_len, "http", 4) == 0) {
409 return -1; /* TODO */
411 memcpy(str, data, data_len);
412 } else if (tadurl_cmpscheme(data, data_len, "ttp", 3) == 0) {
413 len = data_len + sizeof(TC)*1;
416 return -1; /* TODO */
418 memcpy(str + 1, data, data_len);
420 } else if (tadurl_cmpscheme(data, data_len, "sssp", 4) == 0) {
424 return -1; /* TODO */
426 memcpy(str + 4, data + 8, data_len - 8);
432 return -1; /* TODO */
436 *url_len = len/sizeof(TC);
441 LOCAL VOID bchan_separete_bbs_url(UB *url, W url_len, UB **host, W *host_len, UB **board, W *board_len, UB **thread, W *thread_len)
445 for (i=0; i < url_len; i++) {
455 for (; i < url_len; i++) {
465 for (; i < url_len; i++) {
475 for (; i < url_len; i++) {
487 for (; i < url_len; i++) {
499 #define BCHAN_CREATEVOBJ_CANCELED 0
500 #define BCHAN_CREATEVOBJ_CREATED 1
502 LOCAL W bchan_createvobj(bchan_t *bchan, UB *data, W data_len, VOBJSEG *vseg, LINK *lnk)
504 W err, fsn_bbb_len, fsn_texedit_len, fsn_viewer_len, url_len, ascii_url_len;
506 void *fsn_bbb, *fsn_texedit, *fsn_viewer;
508 UB *host, *board, *thread;
509 W host_len, board_len, thread_len;
512 TC title[] = {TK_T, TK_h, TK_r, TK_e, TK_a, TK_d, TNULL}; /* tmp */
514 err = dget_dtp(64, BCHAN_DBX_FFUSEN_BBB, (void**)&fsn_bbb);
516 DP_ER("dget_dtp: BCHAN_DBX_FFUSEN_BBB", err);
519 fsn_bbb_len = dget_siz((B*)fsn_bbb);
520 err = dget_dtp(64, BCHAN_DBX_FFUSEN_TEXEDIT, (void**)&fsn_texedit);
522 DP_ER("dget_dtp: BCHAN_DBX_FFUSEN_TEXEDIT", err);
525 fsn_texedit_len = dget_siz((B*)fsn_texedit);
526 err = dget_dtp(64, BCHAN_DBX_FFUSEN_VIEWER, (void**)&fsn_viewer);
528 DP_ER("dget_dtp: BCHAN_DBX_FFUSEN_VIEWER", err);
531 fsn_viewer_len = dget_siz((B*)fsn_viewer);
534 if(((*(UH*)data) & 0xFF80) == 0xFF80) {
535 lseg = (LTADSEG*)(data);
536 if (lseg->len == 0xffff) {
537 data += lseg->llen + 8;
538 data_len -= lseg->llen + 8;
540 data += lseg->len + 4;
541 data_len -= lseg->len + 4;
548 is_bbs = bchan_is_bbs_url(data, data_len);
549 if (is_bbs == True) {
552 err = sjstring_appendconvartingTCstring(&ascii_url, &ascii_url_len, (TC*)data, data_len/2);
557 bchan_separete_bbs_url(ascii_url, ascii_url_len, &host, &host_len, &board, &board_len, &thread, &thread_len);
558 err = bchan_createviewervobj(title, fsn_viewer, fsn_viewer_len, host, host_len, board, board_len, thread, thread_len, vseg, lnk);
565 err = bchan_createvobj_allocate_url(data, data_len, &url, &url_len);
567 DP_ER("bchan_createvobj_allocate_url", err);
571 err = bchan_createbbbvobj(fsn_bbb, fsn_bbb_len, fsn_texedit, fsn_texedit_len, (UB*)url, url_len*2, vseg, lnk);
573 DP_ER("bchan_createbbbvobj", err);
580 return BCHAN_CREATEVOBJ_CREATED;
583 LOCAL VOID bchan_scrollbyahcnor(bchan_t *bchan, UB *data, W data_len)
589 W cl, ct, cr, cb, tl, tt, tr, tb;
592 if(((*(UH*)data) & 0xFF80) == 0xFF80) {
593 lseg = (LTADSEG*)(data);
594 if (lseg->len == 0xffff) {
595 data += lseg->llen + 8;
596 data_len -= lseg->llen + 8;
598 data += lseg->len + 4;
599 data_len -= lseg->len + 4;
609 num = tc_atoi(str + 2);
610 DP(("num = %d\n", num));
612 fnd = datlayout_getthreadviewrectbyindex(bchan->layout, num - 1, &tl, &tt, &tr, &tb);
616 datdraw_getviewrect(bchan->draw, &cl, &ct, &cr, &cb);
617 datwindow_scrollbyvalue(bchan->window, 0 - cl, tt - ct);
620 LOCAL VOID bchan_layout_res_updateattrbyindex(datlayout_res_t *layout_res, UW attr, COLOR color)
622 if ((attr & DATCACHE_RESINDEXDATA_FLAG_NG) != 0) {
623 datlayout_res_enableindexNG(layout_res);
625 datlayout_res_disableindexNG(layout_res);
627 if ((attr & DATCACHE_RESINDEXDATA_FLAG_COLOR) != 0) {
628 datlayout_res_enableindexcolor(layout_res);
630 datlayout_res_disableindexcolor(layout_res);
632 datlayout_res_setindexcolor(layout_res, color);
635 LOCAL VOID bchan_layout_res_updateattrbyid(datlayout_res_t *layout_res, UW attr, COLOR color)
637 if ((attr & DATCACHE_RESIDDATA_FLAG_NG) != 0) {
638 datlayout_res_enableidNG(layout_res);
640 datlayout_res_disableidNG(layout_res);
642 if ((attr & DATCACHE_RESIDDATA_FLAG_COLOR) != 0) {
643 datlayout_res_enableidcolor(layout_res);
645 datlayout_res_disableidcolor(layout_res);
647 datlayout_res_setidcolor(layout_res, color);
650 LOCAL VOID bchan_butdn_updatedisplayinfobyindex(bchan_t *bchan, W resindex, UW attr, COLOR color)
652 datlayout_res_t *layout_res;
655 found = datlayoutarray_getresbyindex(bchan->layoutarray, resindex, &layout_res);
656 if (found == False) {
660 bchan_layout_res_updateattrbyindex(layout_res, attr, color);
662 wreq_dsp(bchan->wid);
665 LOCAL VOID bchan_butdn_updatedisplayinfobyid(bchan_t *bchan, TC *id, W id_len, UW attr, COLOR color)
667 datlayout_res_t *layout_res;
671 len = datlayoutarray_length(bchan->layoutarray);
672 for (i = 0; i < len; i++) {
673 found = datlayoutarray_getresbyindex(bchan->layoutarray, i, &layout_res);
674 if (found == False) {
678 issame = datlayout_res_issameid(layout_res, id, id_len);
679 if (issame != True) {
683 bchan_layout_res_updateattrbyid(layout_res, attr, color);
686 wreq_dsp(bchan->wid);
689 LOCAL VOID bchan_butdn_pressnumber(bchan_t *bchan, WEVENT *wev, W resindex)
697 DP(("press DATDRAW_FINDACTION_TYPE_NUMBER: %d\n", resindex + 1));
698 err = datcache_searchresindexdata(bchan->cache, resindex, &attr, &color);
699 if (err == DATCACHE_SEARCHRESINDEXDATA_FOUND) {
700 if ((attr & DATCACHE_RESINDEXDATA_FLAG_NG) != 0) {
701 err = bchan_resnumbermenu_setngselected(&bchan->resnumbermenu, True);
703 err = bchan_resnumbermenu_setngselected(&bchan->resnumbermenu, False);
707 err = bchan_resnumbermenu_setngselected(&bchan->resnumbermenu, False);
710 pos.x = wev->s.pos.x;
711 pos.y = wev->s.pos.y;
712 gcnv_abs(bchan->gid, &pos);
713 err = bchan_resnumbermenu_select(&bchan->resnumbermenu, pos);
714 if (err == BCHAN_RESNUMBERMENU_SELECT_PUSHTRAY) {
715 size = datlayout_resindextotraytextdata(bchan->layout, resindex, NULL, 0);
720 datlayout_resindextotraytextdata(bchan->layout, resindex, data, size);
721 bchan_pushstringtotray((TC*)data, size/2);
723 } if (err == BCHAN_RESNUMBERMENU_SELECT_NG) {
724 if ((attr & DATCACHE_RESINDEXDATA_FLAG_NG) != 0) {
725 datcache_removeresindexdata(bchan->cache, resindex);
728 err = datcache_addresindexdata(bchan->cache, resindex, DATCACHE_RESINDEXDATA_FLAG_NG, 0x10000000);
729 attr = DATCACHE_RESINDEXDATA_FLAG_NG;
731 bchan_butdn_updatedisplayinfobyindex(bchan, resindex, attr, color);
735 LOCAL VOID bchan_butdn_pressresheaderid(bchan_t *bchan, WEVENT *wev, W resindex)
744 DP(("press DATDRAW_FINDACTION_TYPE_ID\n"));
746 datlayout_getidfromindex(bchan->layout, resindex, &id, &id_len);
748 DP((" id is not exist\n"));
752 err = datcache_searchresiddata(bchan->cache, id, id_len, &attr, &color);
753 if (err == DATCACHE_SEARCHRESIDDATA_FOUND) {
754 if ((attr & DATCACHE_RESIDDATA_FLAG_NG) != 0) {
755 err = bchan_residmenu_setngselected(&bchan->residmenu, True);
757 err = bchan_residmenu_setngselected(&bchan->residmenu, False);
761 err = bchan_residmenu_setngselected(&bchan->residmenu, False);
764 pos.x = wev->s.pos.x;
765 pos.y = wev->s.pos.y;
766 gcnv_abs(bchan->gid, &pos);
767 err = bchan_residmenu_select(&bchan->residmenu, pos);
768 if (err == BCHAN_RESIDMENU_SELECT_PUSHTRAY) {
769 size = datlayout_idtotraytextdata(bchan->layout, id, id_len, NULL, 0);
774 datlayout_idtotraytextdata(bchan->layout, id, id_len, data, size);
775 bchan_pushstringtotray((TC*)data, size/2);
777 } if (err == BCHAN_RESIDMENU_SELECT_NG) {
778 if ((attr & DATCACHE_RESIDDATA_FLAG_NG) != 0) {
779 datcache_removeresiddata(bchan->cache, id, id_len);
782 err = datcache_addresiddata(bchan->cache, id, id_len, DATCACHE_RESIDDATA_FLAG_NG, 0x10000000);
783 attr = DATCACHE_RESIDDATA_FLAG_NG;
785 bchan_butdn_updatedisplayinfobyid(bchan, id, id_len, attr, color);
789 LOCAL VOID bchan_butdn(VP arg, WEVENT *wev)
791 bchan_t *bchan = (bchan_t*)arg;
792 W fnd, event_type, type, len, dx, dy, err, size, resindex;
803 /* TODO: change to same as bchanl's commonwindow */
804 switch (wchk_dck(wev->s.time)) {
806 fnd = datdraw_findaction(bchan->draw, wev->s.pos, &r, &type, &start, &len, &resindex);
810 if (type != DATDRAW_FINDACTION_TYPE_ANCHOR) {
813 bchan_scrollbyahcnor(bchan, start, len);
822 fnd = datdraw_findaction(bchan->draw, wev->s.pos, &r, &type, &start, &len, &resindex);
826 if (type == DATDRAW_FINDACTION_TYPE_NUMBER) {
827 bchan_butdn_pressnumber(bchan, wev, resindex);
830 if (type == DATDRAW_FINDACTION_TYPE_RESID) {
831 bchan_butdn_pressresheaderid(bchan, wev, resindex);
834 if (type != DATDRAW_FINDACTION_TYPE_URL) {
838 gid = wsta_drg(bchan->wid, 0);
840 DP_ER("wsta_drg error:", gid);
847 dx = r.c.left - wev->s.pos.x;
848 dy = r.c.top - wev->s.pos.y;
852 sel.rgn.r.c.left = r.c.left;
853 sel.rgn.r.c.top = r.c.top;
854 sel.rgn.r.c.right = r.c.right;
855 sel.rgn.r.c.bottom = r.c.bottom;
856 adsp_sel(gid, &sel, 1);
858 gset_ptr(PS_GRIP, NULL, -1, -1);
860 event_type = wget_drg(&pos, wev);
861 if (event_type == EV_BUTUP) {
862 wid_butup = wev->s.wid;
865 if (event_type != EV_NULL) {
868 if ((pos.x == p1.x)&&(pos.y == p1.y)) {
871 adsp_sel(gid, &sel, 0);
872 sel.rgn.r.c.left += pos.x - p1.x;
873 sel.rgn.r.c.top += pos.y - p1.y;
874 sel.rgn.r.c.right += pos.x - p1.x;
875 sel.rgn.r.c.bottom += pos.y - p1.y;
876 adsp_sel(gid, &sel, 1);
879 gset_ptr(PS_SELECT, NULL, -1, -1);
880 adsp_sel(gid, &sel, 0);
883 /* BUTUP on self window or no window or system message panel */
884 if ((wid_butup == bchan->wid)||(wid_butup == 0)||(wid_butup == -1)) {
888 err = oget_vob(-wid_butup, &vrec.vlnk, NULL, 0, &size);
893 err = bchan_createvobj(bchan, start, len, &vrec.vseg, (LINK*)&vrec.vlnk);
895 DP_ER("bchan_createvobj error", err);
898 if (err == BCHAN_CREATEVOBJ_CANCELED) {
904 tr_rec.len = sizeof(TR_VOBJREC);
905 tr_rec.dt = (B*)&vrec;
906 err = tset_dat(&tr_rec, 1);
908 err = del_fil(NULL, (LINK*)&vrec.vlnk, 0);
910 DP_ER("error del_fil:", err);
915 paste_ev.r.type = EV_REQUEST;
916 paste_ev.r.r.p.rightbot.x = wev->s.pos.x + dx;
917 paste_ev.r.r.p.rightbot.y = wev->s.pos.y + dy;
918 paste_ev.r.cmd = W_PASTE;
919 paste_ev.r.wid = wid_butup;
920 err = wsnd_evt(&paste_ev);
923 err = del_fil(NULL, (LINK*)&vrec.vlnk, 0);
925 DP_ER("error del_fil:", err);
929 err = wwai_rsp(NULL, W_PASTE, 60000);
932 err = del_fil(NULL, (LINK*)&vrec.vlnk, 0);
934 DP_ER("error del_fil:", err);
938 wswi_wnd(wid_butup, NULL);
940 /* temporary fix. to fix canceling layout. */
941 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_UPDATE);
944 LOCAL W bchan_paste(VP arg, WEVENT *wev)
946 bchan_t *bchan = (bchan_t*)arg;
948 postresdata_t *post = NULL;
950 err = poptray_gettraydata(&post);
955 wev->r.r.p.rightbot.x = 0x8000;
956 wev->r.r.p.rightbot.y = 0x8000;
959 if (bchan->resdata != NULL) {
960 postresdata_delete(bchan->resdata);
962 bchan->resdata = post;
963 cfrmwindow_setpostresdata(bchan->confirm, post);
964 bchan->request_confirm_open = True;
970 LOCAL VOID bchan_recieveclose(VP arg, W send)
972 bchan_t *bchan = (bchan_t*)arg;
976 DP(("bchan_recieveclose = %d\n", send));
978 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_BUSY);
979 err = ressubmit_respost(bchan->submit, bchan->resdata, &dmsg, &dmsg_len);
980 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
982 case RESSUBMIT_RESPOST_SUCCEED:
983 pdsp_msg(bchan->hmistate.msg_postsucceed);
985 case RESSUBMIT_RESPOST_DENIED:
986 bchan_hmistate_display_postdenied(&bchan->hmistate, dmsg, dmsg_len);
988 case RESSUBMIT_RESPOST_ERROR_CLIENT:
989 case RESSUBMIT_RESPOST_ERROR_STATUS:
990 case RESSUBMIT_RESPOST_ERROR_CONTENT:
992 pdsp_msg(bchan->hmistate.msg_posterror);
1001 LOCAL VOID bchan_hmistate_initialize(bchan_hmistate_t *hmistate)
1005 hmistate->ptr = PS_SELECT;
1007 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_RETRIEVING, (void**)&hmistate->msg_retrieving);
1009 DP_ER("dget_dtp: message retrieving error", err);
1010 hmistate->msg_retrieving = NULL;
1012 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_NOTMODIFIED, (void**)&hmistate->msg_notmodified);
1014 DP_ER("dget_dtp: message not modified error", err);
1015 hmistate->msg_notmodified = NULL;
1017 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_NONAUTHORITATIVE, (void**)&hmistate->msg_nonauthoritative);
1019 DP_ER("dget_dtp: message non-authoritative error", err);
1020 hmistate->msg_nonauthoritative = NULL;
1022 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_POSTSUCCEED, (void**)&hmistate->msg_postsucceed);
1024 DP_ER("dget_dtp: message post succeed error", err);
1025 hmistate->msg_postsucceed = NULL;
1027 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_POSTDENIED, (void**)&hmistate->msg_postdenied);
1029 DP_ER("dget_dtp: message post denied error", err);
1030 hmistate->msg_postdenied = NULL;
1032 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_POSTERROR, (void**)&hmistate->msg_posterror);
1034 DP_ER("dget_dtp: message post error error", err);
1035 hmistate->msg_posterror = NULL;
1037 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_NETWORKERROR, (void**)&hmistate->msg_networkerror);
1039 DP_ER("dget_dtp: message network error error", err);
1040 hmistate->msg_networkerror = NULL;
1042 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_NOTFOUND, (void**)&hmistate->msg_notfound);
1044 DP_ER("dget_dtp: message notfound error", err);
1045 hmistate->msg_notfound = NULL;
1047 err = dget_dtp(TEXT_DATA, BCHAN_DBX_MSGTEXT_CANTRETRIEVE, (void**)&hmistate->msg_cantretrieve);
1049 DP_ER("dget_dtp: message cantretrieve error", err);
1050 hmistate->msg_cantretrieve = NULL;
1054 LOCAL W bchan_initialize(bchan_t *bchan, VID vid, WID wid, W exectype)
1058 datparser_t *parser;
1059 datlayoutarray_t *layoutarray;
1060 datlayout_t *layout;
1062 datwindow_t *window;
1063 datretriever_t *retriever;
1064 ressubmit_t *submit;
1065 cfrmwindow_t *confirm;
1066 MENUITEM *mnitem_dbx, *mnitem;
1068 static RECT r0 = {{200, 80, 500+7, 230+30}};
1072 gid = wget_gid(wid);
1074 cache = datcache_new(vid);
1075 if (cache == NULL) {
1076 DP_ER("datcache_new error", 0);
1079 parser = datparser_new(cache);
1080 if (parser == NULL) {
1081 DP_ER("datparser_new error", 0);
1084 layoutarray = datlayoutarray_new();
1085 if (layoutarray == NULL) {
1086 DP_ER("datlayoutarray_new error", 0);
1087 goto error_layoutarray;
1089 /* TODO: style initialize. */
1090 layout = datlayout_new(gid, &bchan->style, layoutarray);
1091 if (layout == NULL) {
1092 DP_ER("datlayout_new error", 0);
1095 draw = datdraw_new(gid, &bchan->style, layoutarray);
1097 DP_ER("datdraw_new error", 0);
1100 window = datwindow_new(wid, bchan_scroll, bchan_draw, bchan_resize, bchan_close, bchan_butdn, bchan_paste, bchan);
1101 if (window == NULL) {
1102 DP_ER("datwindow_new error", 0);
1105 retriever = datretriever_new(cache);
1106 if (retriever == NULL) {
1107 DP_ER("datretriever_new error", 0);
1108 goto error_retriever;
1110 submit = ressubmit_new(cache);
1111 if (submit == NULL) {
1112 DP_ER("ressubmit_new error", 0);
1115 confirm = cfrmwindow_new(&r0, wid, bchan_recieveclose, bchan, BCHAN_DBX_TEXT_CONFIRM_TITLE, BCHAN_DBX_MS_CONFIRM_POST, BCHAN_DBX_MS_CONFIRM_CANCEL);
1116 if (confirm == NULL) {
1117 DP_ER("dfrmwindow_new error", 0);
1120 err = dget_dtp(8, BCHAN_DBX_MENU_TEST, (void**)&mnitem_dbx);
1122 DP_ER("dget_dtp error:", err);
1123 goto error_dget_dtp;
1125 len = dget_siz((B*)mnitem_dbx);
1126 mnitem = malloc(len);
1127 if (mnitem == NULL) {
1128 DP_ER("mallod error", err);
1131 memcpy(mnitem, mnitem_dbx, len);
1132 mnid = mcre_men(BCHAN_MENU_WINDOW+2, mnitem, NULL);
1134 DP_ER("mcre_men error", mnid);
1135 goto error_mcre_men;
1137 err = bchan_resnumbermenu_initialize(&bchan->resnumbermenu, BCHAN_DBX_GMENU_RESNUMBER);
1139 DP_ER("bchan_resnumbermenu_initialize", err);
1140 goto error_resnumbermenu_initialize;
1142 err = bchan_residmenu_initialize(&bchan->residmenu, BCHAN_DBX_GMENU_RESID);
1144 DP_ER("bchan_residmenu_initialize", err);
1145 goto error_residmenu_initialize;
1148 bchan_hmistate_initialize(&bchan->hmistate);
1150 wget_wrk(wid, &w_work);
1151 datdraw_setviewrect(draw, 0, 0, w_work.c.right, w_work.c.bottom);
1152 datwindow_setworkrect(window, 0, 0, w_work.c.right, w_work.c.bottom);
1154 if (exectype == EXECREQ) {
1163 bchan->exectype = exectype;
1164 bchan->request_confirm_open = False;
1165 bchan->cache = cache;
1166 bchan->parser = parser;
1167 bchan->layoutarray = layoutarray;
1168 bchan->layout = layout;
1170 bchan->window = window;
1171 bchan->retriever = retriever;
1172 bchan->submit = submit;
1173 bchan->confirm = confirm;
1174 bchan->resdata = NULL;
1175 bchan->mnitem = mnitem;
1180 error_residmenu_initialize:
1181 bchan_resnumbermenu_finalize(&bchan->resnumbermenu);
1182 error_resnumbermenu_initialize:
1188 cfrmwindow_delete(confirm);
1190 ressubmit_delete(submit);
1192 datretriever_delete(retriever);
1194 datwindow_delete(window);
1196 datdraw_delete(draw);
1198 datlayout_delete(layout);
1200 datlayoutarray_delete(layoutarray);
1202 datparser_delete(parser);
1204 datcache_delete(cache);
1206 return -1; /* TODO */
1209 #define BCHAN_LAYOUT_MAXBLOCKING 20
1211 LOCAL W bchan_layout_appendres(bchan_t *bchan, datparser_res_t *res)
1213 W err, ret, index, id_len;
1218 datlayout_res_t *layout_res;
1220 err = datlayout_appendres(bchan->layout, res);
1225 found = datlayoutarray_getreslast(bchan->layoutarray, &layout_res);
1226 if (found == False) {
1229 index = datlayoutarray_length(bchan->layoutarray) - 1;
1231 datlayout_res_getid(layout_res, &id, &id_len);
1232 ret = datcache_searchresiddata(bchan->cache, id, id_len, &attr, &color);
1233 if (ret == DATCACHE_SEARCHRESIDDATA_FOUND) {
1234 bchan_layout_res_updateattrbyid(layout_res, attr, color);
1236 ret = datcache_searchresindexdata(bchan->cache, index, &attr, &color);
1237 if (ret == DATCACHE_SEARCHRESINDEXDATA_FOUND) {
1238 bchan_layout_res_updateattrbyindex(layout_res, attr, color);
1244 LOCAL VOID bchan_relayout(bchan_t *bchan)
1246 datparser_res_t *res = NULL;
1248 W i, err, l, t, r, b;
1251 datlayout_clear(bchan->layout);
1252 datparser_clear(bchan->parser);
1255 if (i >= BCHAN_LAYOUT_MAXBLOCKING) {
1256 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_UPDATE);
1260 err = datparser_getnextres(bchan->parser, &res);
1267 bchan_layout_appendres(bchan, res);
1270 wget_wrk(bchan->wid, &w_work);
1272 datlayout_getdrawrect(bchan->layout, &l, &t, &r, &b);
1273 datwindow_setdrawrect(bchan->window, l, t, r, b);
1275 title = datlayout_gettitle(bchan->layout);
1276 wset_tit(bchan->wid, -1, title, 0);
1278 wreq_dsp(bchan->wid);
1281 LOCAL VOID bchan_update(bchan_t *bchan)
1283 datparser_res_t *res = NULL;
1285 W i, err, l, t, r, b;
1288 if (i >= BCHAN_LAYOUT_MAXBLOCKING) {
1289 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_UPDATE);
1293 err = datparser_getnextres(bchan->parser, &res);
1300 bchan_layout_appendres(bchan, res);
1303 wget_wrk(bchan->wid, &w_work);
1305 datlayout_getdrawrect(bchan->layout, &l, &t, &r, &b);
1306 datwindow_setdrawrect(bchan->window, l, t, r, b);
1308 wreq_dsp(bchan->wid);
1311 LOCAL VOID bchan_retriever_task(W arg)
1314 datretriever_t *retr;
1317 bchan = (bchan_t*)arg;
1318 retr = bchan->retriever;
1321 DP(("before rcv_mbf %d\n", bchan->mbfid));
1322 err = rcv_mbf(bchan->mbfid, (VP)&msg, T_FOREVER);
1323 DP_ER("rcv_mbf", err);
1328 err = datretriever_request(retr);
1331 case DATRETRIEVER_REQUEST_ALLRELOAD:
1332 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_RELAYOUT);
1334 case DATRETRIEVER_REQUEST_PARTIAL_CONTENT:
1335 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_UPDATE);
1337 case DATRETRIEVER_REQUEST_NOT_MODIFIED:
1338 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_NOTMODIFIED);
1340 case DATRETRIEVER_REQUEST_NON_AUTHORITATIVE:
1341 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_NONAUTHORITATIVE);
1343 case DATRETRIEVER_REQUEST_NOT_FOUND:
1344 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_NOTFOUND);
1346 case DATRETRIEVER_REQUEST_UNEXPECTED:
1348 DP_ER("datretreiver_request error:",err);
1349 DATRETRIEVER_DP(retr);
1350 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_ERROR);
1358 LOCAL W bchan_prepare_network(bchan_t *bchan)
1360 if (bchan->retriever == NULL) {
1363 if (datretriever_isenablenetwork(bchan->retriever) == False) {
1367 bchan->mbfid = cre_mbf(sizeof(W), sizeof(W), DELEXIT);
1368 if (bchan->mbfid < 0) {
1369 DP_ER("cre_mbf error:", bchan->mbfid);
1372 bchan->taskid = cre_tsk(bchan_retriever_task, -1, (W)bchan);
1373 if (bchan->taskid < 0) {
1374 del_mbf(bchan->mbfid);
1376 DP_ER("cre_tsk error:", bchan->taskid);
1383 LOCAL W bchan_networkrequest(bchan_t *bchan)
1386 static UW lastrequest = 0;
1389 if (datretriever_isenablenetwork(bchan->retriever) == False) {
1390 pdsp_msg(bchan->hmistate.msg_cantretrieve);
1393 if (bchan->mbfid < 0) {
1397 err = get_etm(&etime);
1399 DP_ER("get_etm error:", err);
1402 if (lastrequest + 10000 > etime) {
1405 lastrequest = etime;
1407 err = snd_mbf(bchan->mbfid, &msg, sizeof(W), T_FOREVER);
1409 DP_ER("snd_mbf error:", err);
1413 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_BUSY);
1414 pdsp_msg(bchan->hmistate.msg_retrieving);
1419 LOCAL VOID keydwn(bchan_t *bchan, UH keycode, TC ch)
1421 W l,t,r,b,l1,t1,r1,b1,scr;
1425 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1431 datwindow_scrollbyvalue(bchan->window, 0, scr);
1434 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1435 datlayout_getdrawrect(bchan->layout, &l1, &t1, &r1, &b1);
1442 datwindow_scrollbyvalue(bchan->window, 0, scr);
1446 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1447 datlayout_getdrawrect(bchan->layout, &l1, &t1, &r1, &b1);
1454 datwindow_scrollbyvalue(bchan->window, scr, 0);
1458 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1464 datwindow_scrollbyvalue(bchan->window, scr, 0);
1467 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1473 datwindow_scrollbyvalue(bchan->window, 0, scr);
1476 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1477 datlayout_getdrawrect(bchan->layout, &l1, &t1, &r1, &b1);
1478 if (b + (b - t) > b1) {
1484 datwindow_scrollbyvalue(bchan->window, 0, scr);
1488 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1489 datlayout_getdrawrect(bchan->layout, &l1, &t1, &r1, &b1);
1490 if (r + (r - l) > r1) {
1496 datwindow_scrollbyvalue(bchan->window, scr, 0);
1500 datdraw_getviewrect(bchan->draw, &l, &t, &r, &b);
1506 datwindow_scrollbyvalue(bchan->window, scr, 0);
1509 bchan_networkrequest(bchan);
1514 LOCAL VOID bchan_setupmenu(bchan_t *bchan)
1518 /* [Áàºî] -> [¥¹¥ì¥¿¥¤¤ò¥È¥ì¡¼¤ËÊ£¼Ì] */
1519 str = datlayout_gettitle(bchan->layout);
1521 mchg_atr(bchan->mnid, (2 << 8)|1, M_INACT);
1523 mchg_atr(bchan->mnid, (2 << 8)|1, M_ACT);
1526 /* [ɽ¼¨] -> [¥¹¥ì¥Ã¥É¾ðÊó¤òɽ¼¨] */
1527 /* [ÊÔ½¸] -> [¥¹¥ì¥Ã¥É£Õ£Ò£Ì¤ò¥È¥ì¡¼¤ËÊ£¼Ì] */
1528 /* [Áàºî] -> [¥¹¥ì¥Ã¥É¼èÆÀ] */
1529 if (datretriever_isenablenetwork(bchan->retriever) == False) {
1530 mchg_atr(bchan->mnid, (1 << 8)|2, M_INACT);
1531 mchg_atr(bchan->mnid, (2 << 8)|2, M_INACT);
1532 mchg_atr(bchan->mnid, (3 << 8)|1, M_INACT);
1534 mchg_atr(bchan->mnid, (1 << 8)|2, M_ACT);
1535 mchg_atr(bchan->mnid, (2 << 8)|2, M_ACT);
1536 mchg_atr(bchan->mnid, (3 << 8)|1, M_ACT);
1539 wget_dmn(&(bchan->mnitem[BCHAN_MENU_WINDOW].ptr));
1540 mset_itm(bchan->mnid, BCHAN_MENU_WINDOW, bchan->mnitem+BCHAN_MENU_WINDOW);
1541 oget_men(0, NULL, &(bchan->mnitem[BCHAN_MENU_WINDOW+1].ptr), NULL, NULL);
1542 mset_itm(bchan->mnid, BCHAN_MENU_WINDOW+1, bchan->mnitem+BCHAN_MENU_WINDOW+1);
1545 LOCAL VOID bchan_selectmenu(bchan_t *bchan, W i)
1547 UB *host, *board, *thread;
1548 W host_len, board_len, thread_len;
1551 case 0: /* [½ªÎ»] */
1554 case 1: /* [ɽ¼¨] */
1556 case 1: /* [ºÆɽ¼¨] */
1557 wreq_dsp(bchan->wid);
1559 case 2: /* [¥¹¥ì¥Ã¥É¾ðÊó¤òɽ¼¨] */
1560 datcache_gethost(bchan->cache, &host, &host_len);
1561 datcache_getborad(bchan->cache, &board, &board_len);
1562 datcache_getthread(bchan->cache, &thread, &thread_len);
1563 bchan_panels_threadinfo(host, host_len, board, board_len, thread, thread_len);
1567 case 2: /* [Áàºî] */
1569 case 1: /* [¥¹¥ì¥¿¥¤¤ò¥È¥ì¡¼¤ËÊ£¼Ì] */
1570 bchan_pushthreadtitle(bchan);
1572 case 2: /* [¥¹¥ì¥Ã¥É£Õ£Ò£Ì¤ò¥È¥ì¡¼¤ËÊ£¼Ì] */
1573 bchan_pushthreadurl(bchan);
1577 case 3: /* [Áàºî] */
1579 case 1: /* [¥¹¥ì¥Ã¥É¼èÆÀ] */
1580 bchan_networkrequest(bchan);
1584 case BCHAN_MENU_WINDOW: /* [¥¦¥£¥ó¥É¥¦] */
1587 case BCHAN_MENU_WINDOW+1: /* [¾®Êª] */
1594 LOCAL VOID bchan_popupmenu(bchan_t *bchan, PNT pos)
1598 bchan_setupmenu(bchan);
1599 gset_ptr(PS_SELECT, NULL, -1, -1);
1600 i = msel_men(bchan->mnid, pos);
1602 bchan_selectmenu(bchan, i);
1606 LOCAL VOID receive_message(bchan_t *bchan)
1611 err = rcv_msg(MM_ALL, &msg, sizeof(MESSAGE), WAIT|NOCLR);
1613 if (msg.msg_type == MS_TMOUT) { /* should be use other type? */
1614 code = msg.msg_body.TMOUT.code;
1616 case BCHAN_MESSAGE_RETRIEVER_UPDATE:
1617 bchan_update(bchan);
1618 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1621 case BCHAN_MESSAGE_RETRIEVER_RELAYOUT:
1622 bchan_relayout(bchan);
1623 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1626 case BCHAN_MESSAGE_RETRIEVER_NOTMODIFIED:
1627 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1628 pdsp_msg(bchan->hmistate.msg_notmodified);
1630 case BCHAN_MESSAGE_RETRIEVER_NONAUTHORITATIVE:
1631 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1632 pdsp_msg(bchan->hmistate.msg_nonauthoritative);
1634 case BCHAN_MESSAGE_RETRIEVER_NOTFOUND:
1635 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1636 pdsp_msg(bchan->hmistate.msg_notfound);
1638 case BCHAN_MESSAGE_RETRIEVER_ERROR:
1639 bchan_hmistate_updateptrstyle(&bchan->hmistate, PS_SELECT);
1640 pdsp_msg(bchan->hmistate.msg_networkerror);
1645 clr_msg(MM_ALL, MM_ALL);
1648 typedef struct _arg {
1653 LOCAL CLI_arg MESSAGEtoargv(const MESSAGE *src)
1660 len = src->msg_size / sizeof(TC);
1661 str = (TC*)(src->msg_body.ANYMSG.msg_str);
1664 if(str[i] == TK_KSP){
1670 if(str[i] == TK_KSP){
1677 argv = (TC**)malloc(sizeof(TC*)*ac);
1681 if(str[i] == TNULL){
1687 if(str[i] == TNULL){
1700 EXPORT W MAIN(MESSAGE *msg)
1702 static RECT r0 = {{100, 100, 650+7, 400+30}};
1704 static PAT pat0 = {{
1717 datwindow_t *window;
1721 0x10000000, 0x10000000, 0x10FFFFFF, 0x10FFFFFF,
1725 err = dopn_dat(NULL);
1730 switch (msg->msg_type) {
1732 arg = MESSAGEtoargv(msg);
1736 err = get_lnk(arg.argv[1], &lnk, F_NORM);
1738 DP_ER("get_lnk error", err);
1741 vid = oreg_vob((VLINK*)&lnk, (VP)&vseg, -1, V_NODISP);
1743 DP_ER("error oreq_vob", vid);
1746 err = get_lnk((TC[]){TK_b, TK_c, TK_h, TK_a, TK_n, TK_PROD, TK_d, TK_b, TK_x,TNULL}, &dbx, F_NORM);
1748 DP_ER("get_lnk error", err);
1751 err = dopn_dat(&dbx);
1753 DP_ER("dopn_dat error", err);
1756 fil_sts(&lnk, tit0, NULL, NULL);
1759 oend_req(((M_DISPREQ*)msg)->vid, -1);
1763 oend_req(((M_PASTEREQ*)msg)->vid, -1);
1767 if ((((M_EXECREQ*)msg)->mode & 2) != 0) {
1770 err = dopn_dat(&((M_EXECREQ*)msg)->self);
1774 fil_sts(&((M_EXECREQ*)msg)->lnk, tit0, NULL, NULL);
1775 vid = ((M_EXECREQ*)msg)->vid;
1782 wid = wopn_wnd(WA_SIZE|WA_HHDL|WA_VHDL|WA_BBAR|WA_RBAR, 0, &r0, NULL, 1, tit0, &pat0, NULL);
1787 err = bchan_initialize(&bchan, vid, wid, msg->msg_type);
1789 DP_ER("bchan_initialize error", err);
1792 window = bchan.window;
1794 err = bchan_prepare_network(&bchan);
1796 DP_ER("bchan_prepare_network error:", err);
1800 size = datcache_datasize(bchan.cache);
1801 if ((msg->msg_type == EXECREQ)&&(size == 0)) {
1802 bchan_networkrequest(&bchan);
1804 req_tmg(0, BCHAN_MESSAGE_RETRIEVER_RELAYOUT);
1807 wreq_dsp(bchan.wid);
1811 wget_evt(&wev0, WAIT);
1812 switch (wev0.s.type) {
1814 if ((wev0.s.wid != wid)
1815 &&(cfrmwindow_compairwid(bchan.confirm, wev0.s.wid) == False)) {
1816 gset_ptr(bchan.hmistate.ptr, NULL, -1, -1);
1817 break; /*¥¦¥£¥ó¥É¥¦³°*/
1819 if (wev0.s.cmd != W_WORK)
1820 break; /*ºî¶ÈÎΰ賰*/
1821 if (wev0.s.stat & ES_CMD)
1822 break; /*Ì¿Îᥡ¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë*/
1823 gset_ptr(bchan.hmistate.ptr, NULL, -1, -1);
1826 if (wev0.g.wid == wid) {
1827 datwindow_weventrequest(window, &wev0);
1829 if (cfrmwindow_compairwid(bchan.confirm, wev0.s.wid)) {
1830 cfrmwindow_weventrequest(bchan.confirm, &wev0);
1834 if (wev0.s.wid == wid) {
1835 datwindow_weventreswitch(window, &wev0);
1836 if (bchan.request_confirm_open == True) {
1837 cfrmwindow_open(bchan.confirm);
1838 bchan.request_confirm_open = False;
1841 if (cfrmwindow_compairwid(bchan.confirm, wev0.s.wid)) {
1842 cfrmwindow_weventreswitch(bchan.confirm, &wev0);
1846 if (wev0.s.wid == wid) {
1847 datwindow_weventswitch(window, &wev0);
1848 if (bchan.request_confirm_open == True) {
1849 cfrmwindow_open(bchan.confirm);
1850 bchan.request_confirm_open = False;
1853 if (cfrmwindow_compairwid(bchan.confirm, wev0.s.wid)) {
1854 cfrmwindow_weventswitch(bchan.confirm, &wev0);
1858 if (wev0.g.wid == wid) {
1859 datwindow_weventbutdn(window, &wev0);
1861 if (cfrmwindow_compairwid(bchan.confirm, wev0.s.wid)) {
1862 cfrmwindow_weventbutdn(bchan.confirm, &wev0);
1866 if (wev0.s.stat & ES_CMD) { /*Ì¿Îᥡ¼*/
1867 bchan_setupmenu(&bchan);
1868 i = mfnd_key(bchan.mnid, wev0.e.data.key.code);
1870 bchan_selectmenu(&bchan, i);
1875 keydwn(&bchan, wev0.e.data.key.keytop, wev0.e.data.key.code);
1881 oprc_dev(&wev0.e, NULL, 0);
1884 receive_message(&bchan);
1887 bchan_popupmenu(&bchan, wev0.s.pos);