4 * Copyright (c) 2012 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
27 /* This file is automatically generated. */
29 #include "bchanl_hmi.h"
30 #include "hmi/hmi_windowscroll.h"
36 #include <btron/btron.h>
37 #include <btron/hmi.h>
38 #include <btron/vobj.h>
41 # define DP(arg) printf arg
42 # define DP_ER(msg, err) printf("%s (%d/%x)\n", msg, err>>16, err)
45 # define DP_ER(msg, err) /**/
48 struct subjectwindow_t_ {
55 hmi_windowscroll_t wscr;
59 struct bbsmenuwindow_t_ {
66 hmi_windowscroll_t wscr;
70 struct subjectoptionwindow_t_ {
74 subjectwindow_t *parent;
90 SUBJECTOPTIONWINDOW_ORDERVALUE_T value;
95 SUBJECTOPTIONWINDOW_ORDERBYVALUE_T value;
99 struct registerexternalwindow_t_ {
134 struct externalbbswindow_t_ {
141 hmi_windowscroll_t wscr;
146 #define BCHANLHMI_FLAG_SWITCHBUTDN 0x00000001
148 struct bchanlhmi_t_ {
150 bchanlhmievent_t evt;
152 subjectwindow_t *subjectwindow;
153 bbsmenuwindow_t *bbsmenuwindow;
154 subjectoptionwindow_t *subjectoptionwindow;
155 registerexternalwindow_t *registerexternalwindow;
156 externalbbswindow_t *externalbbswindow;
159 #define SUBJECTWINDOW_FLAG_DRAWREQUEST 0x00000001
160 #define SUBJECTWINDOW_FLAG_RSCROLLING 0x00000002
161 #define SUBJECTWINDOW_FLAG_BSCROLLING 0x00000004
163 #define subjectwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
164 #define subjectwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
165 #define subjectwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
167 EXPORT VOID subjectwindow_scrollbyvalue(subjectwindow_t *window, W dh, W dv)
169 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
172 EXPORT W subjectwindow_setdrawrect(subjectwindow_t *window, W l, W t, W r, W b)
174 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
177 EXPORT W subjectwindow_setworkrect(subjectwindow_t *window, W l, W t, W r, W b)
179 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
182 EXPORT W subjectwindow_scrollworkarea(subjectwindow_t *window, W dh, W dv)
185 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
189 if ((err & W_RDSET) != 0) {
190 subjectwindow_setflag(window, SUBJECTWINDOW_FLAG_DRAWREQUEST);
195 EXPORT W subjectwindow_getworkrect(subjectwindow_t *window, RECT *r)
197 return wget_wrk(window->wid, r);
200 EXPORT VOID subjectwindow_responsepasterequest(subjectwindow_t *window, W nak, PNT *pos)
203 window->savedwev.r.r.p.rightbot.x = pos->x;
204 window->savedwev.r.r.p.rightbot.y = pos->y;
206 wrsp_evt(&window->savedwev, nak);
209 EXPORT W subjectwindow_startredisp(subjectwindow_t *window, RECT *r)
211 return wsta_dsp(window->wid, r, NULL);
214 EXPORT W subjectwindow_endredisp(subjectwindow_t *window)
216 return wend_dsp(window->wid);
219 EXPORT W subjectwindow_eraseworkarea(subjectwindow_t *window, RECT *r)
221 return wera_wnd(window->wid, r);
224 EXPORT W subjectwindow_requestredisp(subjectwindow_t *window)
226 return wreq_dsp(window->wid);
229 EXPORT GID subjectwindow_startdrag(subjectwindow_t *window)
231 return wsta_drg(window->wid, 0);
234 EXPORT W subjectwindow_getdrag(subjectwindow_t *window, PNT *pos, WID *wid, PNT *pos_butup)
238 etype = wget_drg(pos, &window->savedwev);
239 *wid = window->savedwev.s.wid;
240 if (etype == EV_BUTUP) {
241 *pos_butup = window->savedwev.s.pos;
247 EXPORT VOID subjectwindow_enddrag(subjectwindow_t *window)
252 EXPORT GID subjectwindow_getGID(subjectwindow_t *window)
254 return wget_gid(window->wid);
257 EXPORT WID subjectwindow_getWID(subjectwindow_t *window)
262 EXPORT W subjectwindow_settitle(subjectwindow_t *window, TC *title)
264 return wset_tit(window->wid, -1, title, 0);
267 EXPORT Bool subjectwindow_isactive(subjectwindow_t *window)
270 wid = wget_act(NULL);
271 if (window->wid == wid) {
277 LOCAL VOID subjectwindow_butdnwork(subjectwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
279 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_BUTDN;
280 evt->data.subjectwindow_butdn.type = wchk_dck(wev->s.time);
281 evt->data.subjectwindow_butdn.pos = wev->s.pos;
282 memcpy(&window->savedwev, wev, sizeof(WEVENT));
285 LOCAL VOID subjectwindow_resize(subjectwindow_t *window, SIZE *sz)
288 Bool workchange = False;
290 wget_wrk(window->wid, &work);
291 if (work.c.left != 0) {
295 if (work.c.top != 0) {
299 wset_wrk(window->wid, &work);
300 gset_vis(window->gid, work);
302 if (workchange == True) {
303 wera_wnd(window->wid, NULL);
304 wreq_dsp(window->wid);
307 sz->v = work.c.bottom - work.c.top;
308 sz->h = work.c.right - work.c.left;
311 LOCAL W subjectwindow_open(subjectwindow_t *window, TC *title)
315 if (window->wid > 0) {
319 wid = wopn_wnd(WA_STD|WA_SIZE|WA_HHDL|WA_VHDL|WA_BBAR|WA_RBAR, window->parent, &(window->r), NULL, 2, title, &window->bgpat, NULL);
321 DP_ER("wopn_wnd: subjectoption error", wid);
325 window->gid = wget_gid(wid);
326 hmi_windowscroll_settarget(&window->wscr, wid);
334 #define BBSMENUWINDOW_FLAG_DRAWREQUEST 0x00000001
335 #define BBSMENUWINDOW_FLAG_RSCROLLING 0x00000002
336 #define BBSMENUWINDOW_FLAG_BSCROLLING 0x00000004
338 #define bbsmenuwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
339 #define bbsmenuwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
340 #define bbsmenuwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
342 EXPORT VOID bbsmenuwindow_scrollbyvalue(bbsmenuwindow_t *window, W dh, W dv)
344 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
347 EXPORT W bbsmenuwindow_setdrawrect(bbsmenuwindow_t *window, W l, W t, W r, W b)
349 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
352 EXPORT W bbsmenuwindow_setworkrect(bbsmenuwindow_t *window, W l, W t, W r, W b)
354 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
357 EXPORT W bbsmenuwindow_scrollworkarea(bbsmenuwindow_t *window, W dh, W dv)
360 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
364 if ((err & W_RDSET) != 0) {
365 bbsmenuwindow_setflag(window, BBSMENUWINDOW_FLAG_DRAWREQUEST);
370 EXPORT W bbsmenuwindow_getworkrect(bbsmenuwindow_t *window, RECT *r)
372 return wget_wrk(window->wid, r);
375 EXPORT W bbsmenuwindow_startredisp(bbsmenuwindow_t *window, RECT *r)
377 return wsta_dsp(window->wid, r, NULL);
380 EXPORT W bbsmenuwindow_endredisp(bbsmenuwindow_t *window)
382 return wend_dsp(window->wid);
385 EXPORT W bbsmenuwindow_eraseworkarea(bbsmenuwindow_t *window, RECT *r)
387 return wera_wnd(window->wid, r);
390 EXPORT W bbsmenuwindow_requestredisp(bbsmenuwindow_t *window)
392 return wreq_dsp(window->wid);
395 EXPORT GID bbsmenuwindow_startdrag(bbsmenuwindow_t *window)
397 return wsta_drg(window->wid, 0);
400 EXPORT W bbsmenuwindow_getdrag(bbsmenuwindow_t *window, PNT *pos, WID *wid, PNT *pos_butup)
404 etype = wget_drg(pos, &window->savedwev);
405 *wid = window->savedwev.s.wid;
406 if (etype == EV_BUTUP) {
407 *pos_butup = window->savedwev.s.pos;
413 EXPORT VOID bbsmenuwindow_enddrag(bbsmenuwindow_t *window)
418 EXPORT GID bbsmenuwindow_getGID(bbsmenuwindow_t *window)
420 return wget_gid(window->wid);
423 EXPORT WID bbsmenuwindow_getWID(bbsmenuwindow_t *window)
428 EXPORT W bbsmenuwindow_settitle(bbsmenuwindow_t *window, TC *title)
430 return wset_tit(window->wid, -1, title, 0);
433 EXPORT Bool bbsmenuwindow_isactive(bbsmenuwindow_t *window)
436 wid = wget_act(NULL);
437 if (window->wid == wid) {
443 LOCAL VOID bbsmenuwindow_butdnwork(bbsmenuwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
445 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_BUTDN;
446 evt->data.bbsmenuwindow_butdn.type = wchk_dck(wev->s.time);
447 evt->data.bbsmenuwindow_butdn.pos = wev->s.pos;
448 memcpy(&window->savedwev, wev, sizeof(WEVENT));
451 LOCAL VOID bbsmenuwindow_resize(bbsmenuwindow_t *window, SIZE *sz)
454 Bool workchange = False;
456 wget_wrk(window->wid, &work);
457 if (work.c.left != 0) {
461 if (work.c.top != 0) {
465 wset_wrk(window->wid, &work);
466 gset_vis(window->gid, work);
468 if (workchange == True) {
469 wera_wnd(window->wid, NULL);
470 wreq_dsp(window->wid);
473 sz->v = work.c.bottom - work.c.top;
474 sz->h = work.c.right - work.c.left;
477 LOCAL W bbsmenuwindow_open(bbsmenuwindow_t *window, TC *title)
481 if (window->wid > 0) {
485 wid = wopn_wnd(WA_STD|WA_SIZE|WA_HHDL|WA_VHDL|WA_BBAR|WA_RBAR, window->parent, &(window->r), NULL, 2, title, &window->bgpat, NULL);
487 DP_ER("wopn_wnd: subjectoption error", wid);
491 window->gid = wget_gid(wid);
492 hmi_windowscroll_settarget(&window->wscr, wid);
500 #define SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST 0x00000001
501 #define SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT 0x0000000f
502 #define SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION 0x00000010
504 #define subjectoptionwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
505 #define subjectoptionwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
506 #define subjectoptionwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
508 EXPORT W subjectoptionwindow_setfiltertext(subjectoptionwindow_t *window, TC *str, W len)
517 memcpy(window->filter.buf+7, str, cp_len * sizeof(TC));
518 window->filter.buf[7 + cp_len] = TNULL;
519 window->filter.buf_written = cp_len;
520 if (window->wid < 0) {
524 return cset_val(window->filter.id, cp_len, (W*)(window->filter.buf+7));
527 EXPORT W subjectoptionwindow_getfiltertext(subjectoptionwindow_t *window, TC *str, W len)
531 if (window->wid > 0) {
532 err = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
536 window->filter.buf_written = err;
539 if (len < window->filter.buf_written) {
542 cp_len = window->filter.buf_written;
544 memcpy(str, window->filter.buf + 7, cp_len * sizeof(TC));
549 EXPORT W subjectoptionwindow_cutfiltertext(subjectoptionwindow_t *window, TC *str, W len, Bool cut)
553 len0 = ccut_txt(window->filter.id, len, str, cut == False ? 0 : 1);
559 err = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
563 window->filter.buf_written = err;
570 EXPORT W subjectoptionwindow_insertfiltertext(subjectoptionwindow_t *window, TC *str, W len)
574 err = cins_txt(window->filter.id, (PNT){0x8000, 0x8000}, str);
579 err = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
583 window->filter.buf_written = err;
588 LOCAL VOID subjectoptionwindow_actionfilter(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
592 i = cact_par(window->filter.id, wev);
594 window->filter.nextaction = True;
597 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
598 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_KEYMENU;
599 evt->data.subjectoptionwindow_filter_keymenu.keycode = wev->e.data.key.code;
601 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_MENU;
602 evt->data.subjectoptionwindow_filter_menu.pos = wev->s.pos;
604 subjectoptionwindow_setflag(window, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION);
608 subjectoptionwindow_setflag(window, SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT);
613 window->filter.nextaction = False;
615 len = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
617 window->filter.buf_written = len;
622 cchg_par(window->filter.id, P_INACT);
623 cchg_par(window->filter.id, P_ACT);
630 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_DETERMINE;
631 evt->data.subjectoptionwindow_filter_determine.value = window->filter.buf+7;
632 evt->data.subjectoptionwindow_filter_determine.len = window->filter.buf_written;
635 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_MOVE;
636 evt->data.subjectoptionwindow_filter_move.rel_wid = wev->s.wid;
637 evt->data.subjectoptionwindow_filter_move.pos = wev->s.pos;
640 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_FILTER_COPY;
641 evt->data.subjectoptionwindow_filter_copy.rel_wid = wev->s.wid;
642 evt->data.subjectoptionwindow_filter_copy.pos = wev->s.pos;
647 EXPORT W subjectoptionwindow_setordervalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERVALUE_T value)
651 val = window->order.value = value;
652 if (window->wid < 0) {
656 return cset_val(window->order.id, 1, (W*)(&val));
659 EXPORT W subjectoptionwindow_getordervalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERVALUE_T *value)
663 if (window->wid > 0) {
664 err = cget_val(window->order.id, 1, (W*)(&val));
669 *value = window->order.value = val;
674 LOCAL VOID subjectoptionwindow_actionorder(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
678 i = cact_par(window->order.id, wev);
679 if ((i & 0x5000) != 0x5000) {
682 window->order.value = i & 0xfff;
683 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_ORDER_CHANGE;
684 evt->data.subjectoptionwindow_order_change.value = window->order.value;
687 EXPORT W subjectoptionwindow_setorderbyvalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERBYVALUE_T value)
691 val = window->orderby.value = value;
692 if (window->wid < 0) {
696 return cset_val(window->orderby.id, 1, (W*)(&val));
699 EXPORT W subjectoptionwindow_getorderbyvalue(subjectoptionwindow_t *window, SUBJECTOPTIONWINDOW_ORDERBYVALUE_T *value)
703 if (window->wid > 0) {
704 err = cget_val(window->orderby.id, 1, (W*)(&val));
709 *value = window->orderby.value = val;
714 LOCAL VOID subjectoptionwindow_actionorderby(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
718 i = cact_par(window->orderby.id, wev);
719 if ((i & 0x5000) != 0x5000) {
722 window->orderby.value = i & 0xfff;
723 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTOPTIONWINDOW_PARTS_ORDERBY_CHANGE;
724 evt->data.subjectoptionwindow_orderby_change.value = window->orderby.value;
727 EXPORT Bool subjectoptionwindow_isopen(subjectoptionwindow_t *window)
729 if (window->wid < 0) {
735 LOCAL VOID subjectoptionwindow_draw(subjectoptionwindow_t *window, RECT *r)
737 cdsp_pwd(window->wid, r, P_RDISP);
738 gset_chc(window->gid, 0x10000000, -1);
739 gdra_stp(window->gid, 8, 26, (TC[]){0x2555, 0x2523, 0x256b, 0x253f, 0x2127, TNULL}, 5, G_STORE);
740 gset_chc(window->gid, 0x10000000, -1);
741 gdra_stp(window->gid, 8, 58, (TC[]){0x4a42, 0x2459, 0x3d67, 0x2127, TNULL}, 4, G_STORE);
744 LOCAL VOID subjectoptionwindow_redisp(subjectoptionwindow_t *window)
748 if (wsta_dsp(window->wid, &r, NULL) == 0) {
751 wera_wnd(window->wid, &r);
752 subjectoptionwindow_draw(window, &r);
753 } while (wend_dsp(window->wid) > 0);
756 EXPORT W subjectoptionwindow_requestredisp(subjectoptionwindow_t *window)
758 return wreq_dsp(window->wid);
761 EXPORT GID subjectoptionwindow_getGID(subjectoptionwindow_t *window)
763 return wget_gid(window->wid);
766 EXPORT WID subjectoptionwindow_getWID(subjectoptionwindow_t *window)
771 EXPORT W subjectoptionwindow_settitle(subjectoptionwindow_t *window, TC *title)
773 tc_strncpy(window->title, title, 256);
774 window->title[256] = TNULL;
775 return wset_tit(window->wid, -1, window->title, 0);
778 EXPORT Bool subjectoptionwindow_isactive(subjectoptionwindow_t *window)
781 wid = wget_act(NULL);
782 if (window->wid == wid) {
788 LOCAL VOID subjectoptionwindow_butdnwork(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
793 ret = cfnd_par(window->wid, wev->s.pos, &id);
797 if (id == window->filter.id) {
798 memcpy(&window->savedwev, wev, sizeof(WEVENT));
799 subjectoptionwindow_actionfilter(window, wev, evt);
802 if (id == window->order.id) {
803 subjectoptionwindow_actionorder(window, wev, evt);
806 if (id == window->orderby.id) {
807 subjectoptionwindow_actionorderby(window, wev, evt);
812 EXPORT W subjectoptionwindow_open(subjectoptionwindow_t *window)
816 if (window->wid > 0) {
820 wid = wopn_wnd(WA_STD|WA_SUBW, window->parent->wid, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
822 DP_ER("wopn_wnd: subjectoption error", wid);
826 window->gid = wget_gid(wid);
828 window->filter.id = copn_par(wid, window->filter.dnum, NULL);
829 if (window->filter.id < 0) {
830 DP_ER("ccre_xxx filter error:", window->filter.id);
832 cset_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
833 window->order.id = copn_par(wid, window->order.dnum, NULL);
834 if (window->order.id < 0) {
835 DP_ER("ccre_xxx order error:", window->order.id);
837 cset_val(window->order.id, 1, (W*)(&window->order.value));
838 window->orderby.id = copn_par(wid, window->orderby.dnum, NULL);
839 if (window->orderby.id < 0) {
840 DP_ER("ccre_xxx orderby error:", window->orderby.id);
842 cset_val(window->orderby.id, 1, (W*)(&window->orderby.value));
849 EXPORT VOID subjectoptionwindow_close(subjectoptionwindow_t *window)
854 if (window->wid < 0) {
859 err = wget_sts(window->wid, &stat, NULL);
863 err = cget_val(window->orderby.id, 1, (W*)(&window->orderby.value));
864 err = cget_val(window->order.id, 1, (W*)(&window->order.value));
865 err = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
867 window->filter.buf_written = err;
869 cdel_pwd(window->wid, NOCLR);
870 wcls_wnd(window->wid, CLR);
875 #define REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST 0x00000001
876 #define REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT 0x0000000f
877 #define REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION 0x00000010
879 #define registerexternalwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
880 #define registerexternalwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
881 #define registerexternalwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
883 EXPORT W registerexternalwindow_setboradnametext(registerexternalwindow_t *window, TC *str, W len)
892 memcpy(window->boradname.buf+7, str, cp_len * sizeof(TC));
893 window->boradname.buf[7 + cp_len] = TNULL;
894 window->boradname.buf_written = cp_len;
895 if (window->wid < 0) {
899 return cset_val(window->boradname.id, cp_len, (W*)(window->boradname.buf+7));
902 EXPORT W registerexternalwindow_getboradnametext(registerexternalwindow_t *window, TC *str, W len)
906 if (window->wid > 0) {
907 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
911 window->boradname.buf_written = err;
914 if (len < window->boradname.buf_written) {
917 cp_len = window->boradname.buf_written;
919 memcpy(str, window->boradname.buf + 7, cp_len * sizeof(TC));
924 EXPORT W registerexternalwindow_cutboradnametext(registerexternalwindow_t *window, TC *str, W len, Bool cut)
928 len0 = ccut_txt(window->boradname.id, len, str, cut == False ? 0 : 1);
934 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
938 window->boradname.buf_written = err;
945 EXPORT W registerexternalwindow_insertboradnametext(registerexternalwindow_t *window, TC *str, W len)
949 err = cins_txt(window->boradname.id, (PNT){0x8000, 0x8000}, str);
954 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
958 window->boradname.buf_written = err;
963 LOCAL VOID registerexternalwindow_actionboradname(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
967 i = cact_par(window->boradname.id, wev);
969 window->boradname.nextaction = True;
972 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
973 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_KEYMENU;
974 evt->data.registerexternalwindow_boradname_keymenu.keycode = wev->e.data.key.code;
976 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MENU;
977 evt->data.registerexternalwindow_boradname_menu.pos = wev->s.pos;
979 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
983 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
988 window->boradname.nextaction = False;
990 len = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
992 window->boradname.buf_written = len;
997 cchg_par(window->boradname.id, P_INACT);
998 cchg_par(window->boradname.id, P_ACT);
1005 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_DETERMINE;
1006 evt->data.registerexternalwindow_boradname_determine.value = window->boradname.buf+7;
1007 evt->data.registerexternalwindow_boradname_determine.len = window->boradname.buf_written;
1010 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MOVE;
1011 evt->data.registerexternalwindow_boradname_move.rel_wid = wev->s.wid;
1012 evt->data.registerexternalwindow_boradname_move.pos = wev->s.pos;
1015 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_COPY;
1016 evt->data.registerexternalwindow_boradname_copy.rel_wid = wev->s.wid;
1017 evt->data.registerexternalwindow_boradname_copy.pos = wev->s.pos;
1022 EXPORT W registerexternalwindow_seturltext(registerexternalwindow_t *window, TC *str, W len)
1031 memcpy(window->url.buf+7, str, cp_len * sizeof(TC));
1032 window->url.buf[7 + cp_len] = TNULL;
1033 window->url.buf_written = cp_len;
1034 if (window->wid < 0) {
1038 return cset_val(window->url.id, cp_len, (W*)(window->url.buf+7));
1041 EXPORT W registerexternalwindow_geturltext(registerexternalwindow_t *window, TC *str, W len)
1045 if (window->wid > 0) {
1046 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1050 window->url.buf_written = err;
1053 if (len < window->url.buf_written) {
1056 cp_len = window->url.buf_written;
1058 memcpy(str, window->url.buf + 7, cp_len * sizeof(TC));
1063 EXPORT W registerexternalwindow_cuturltext(registerexternalwindow_t *window, TC *str, W len, Bool cut)
1067 len0 = ccut_txt(window->url.id, len, str, cut == False ? 0 : 1);
1073 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1077 window->url.buf_written = err;
1084 EXPORT W registerexternalwindow_inserturltext(registerexternalwindow_t *window, TC *str, W len)
1088 err = cins_txt(window->url.id, (PNT){0x8000, 0x8000}, str);
1093 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1097 window->url.buf_written = err;
1102 LOCAL VOID registerexternalwindow_actionurl(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1106 i = cact_par(window->url.id, wev);
1108 window->url.nextaction = True;
1111 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
1112 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_KEYMENU;
1113 evt->data.registerexternalwindow_url_keymenu.keycode = wev->e.data.key.code;
1115 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MENU;
1116 evt->data.registerexternalwindow_url_menu.pos = wev->s.pos;
1118 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
1122 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
1127 window->url.nextaction = False;
1129 len = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1131 window->url.buf_written = len;
1136 cchg_par(window->url.id, P_INACT);
1137 cchg_par(window->url.id, P_ACT);
1144 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_DETERMINE;
1145 evt->data.registerexternalwindow_url_determine.value = window->url.buf+7;
1146 evt->data.registerexternalwindow_url_determine.len = window->url.buf_written;
1149 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MOVE;
1150 evt->data.registerexternalwindow_url_move.rel_wid = wev->s.wid;
1151 evt->data.registerexternalwindow_url_move.pos = wev->s.pos;
1154 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_COPY;
1155 evt->data.registerexternalwindow_url_copy.rel_wid = wev->s.wid;
1156 evt->data.registerexternalwindow_url_copy.pos = wev->s.pos;
1161 EXPORT Bool registerexternalwindow_isopen(registerexternalwindow_t *window)
1163 if (window->wid < 0) {
1169 LOCAL VOID registerexternalwindow_draw(registerexternalwindow_t *window, RECT *r)
1171 cdsp_pwd(window->wid, r, P_RDISP);
1172 gset_chc(window->gid, 0x10000000, -1);
1173 gdra_stp(window->gid, 8, 26, (TC[]){0x4844, 0x4c3e, 0x2127, TNULL}, 3, G_STORE);
1174 gset_chc(window->gid, 0x10000000, -1);
1175 gdra_stp(window->gid, 8, 58, (TC[]){0x2355, 0x2352, 0x234c, 0x2127, TNULL}, 4, G_STORE);
1178 LOCAL VOID registerexternalwindow_redisp(registerexternalwindow_t *window)
1182 if (wsta_dsp(window->wid, &r, NULL) == 0) {
1185 wera_wnd(window->wid, &r);
1186 registerexternalwindow_draw(window, &r);
1187 } while (wend_dsp(window->wid) > 0);
1190 EXPORT W registerexternalwindow_requestredisp(registerexternalwindow_t *window)
1192 return wreq_dsp(window->wid);
1195 EXPORT GID registerexternalwindow_getGID(registerexternalwindow_t *window)
1197 return wget_gid(window->wid);
1200 EXPORT WID registerexternalwindow_getWID(registerexternalwindow_t *window)
1205 EXPORT W registerexternalwindow_settitle(registerexternalwindow_t *window, TC *title)
1207 tc_strncpy(window->title, title, 256);
1208 window->title[256] = TNULL;
1209 return wset_tit(window->wid, -1, window->title, 0);
1212 EXPORT Bool registerexternalwindow_isactive(registerexternalwindow_t *window)
1215 wid = wget_act(NULL);
1216 if (window->wid == wid) {
1222 LOCAL VOID registerexternalwindow_butdnwork(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1227 ret = cfnd_par(window->wid, wev->s.pos, &id);
1231 if (id == window->boradname.id) {
1232 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1233 registerexternalwindow_actionboradname(window, wev, evt);
1236 if (id == window->url.id) {
1237 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1238 registerexternalwindow_actionurl(window, wev, evt);
1241 if (id == window->determine.id) {
1242 ret = cact_par(window->determine.id, wev);
1243 if ((ret & 0x5000) != 0x5000) {
1246 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_DETERMINE_PUSH;
1249 if (id == window->cancel.id) {
1250 ret = cact_par(window->cancel.id, wev);
1251 if ((ret & 0x5000) != 0x5000) {
1254 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_CANCEL_PUSH;
1259 EXPORT W registerexternalwindow_open(registerexternalwindow_t *window)
1264 if (window->wid > 0) {
1268 wid = wopn_wnd(WA_STD, window->parent, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
1270 DP_ER("wopn_wnd: subjectoption error", wid);
1274 window->gid = wget_gid(wid);
1276 r = (RECT){{80, 8, 368, 34}};
1277 window->boradname.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->boradname.buf, NULL);
1278 if (window->boradname.id < 0) {
1279 DP_ER("ccre_xxx boradname error:", window->boradname.id);
1281 r = (RECT){{80, 38, 368, 64}};
1282 window->url.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->url.buf, NULL);
1283 if (window->url.id < 0) {
1284 DP_ER("ccre_xxx url error:", window->url.id);
1286 r = (RECT){{226, 72, 368, 98}};
1287 window->determine.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x4449, 0x3243, TNULL}, NULL);
1288 if (window->determine.id < 0) {
1289 DP_ER("ccre_xxx determine error:", window->determine.id);
1291 r = (RECT){{8, 72, 150, 98}};
1292 window->cancel.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x3c68, 0x246a, 0x3e43, 0x2437, TNULL}, NULL);
1293 if (window->cancel.id < 0) {
1294 DP_ER("ccre_xxx cancel error:", window->cancel.id);
1302 EXPORT VOID registerexternalwindow_close(registerexternalwindow_t *window)
1307 if (window->wid < 0) {
1312 err = wget_sts(window->wid, &stat, NULL);
1316 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1318 window->url.buf_written = err;
1320 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
1322 window->boradname.buf_written = err;
1324 cdel_pwd(window->wid, NOCLR);
1325 wcls_wnd(window->wid, CLR);
1330 #define EXTERNALBBSWINDOW_FLAG_DRAWREQUEST 0x00000001
1331 #define EXTERNALBBSWINDOW_FLAG_RSCROLLING 0x00000002
1332 #define EXTERNALBBSWINDOW_FLAG_BSCROLLING 0x00000004
1334 #define externalbbswindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
1335 #define externalbbswindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
1336 #define externalbbswindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
1338 EXPORT VOID externalbbswindow_scrollbyvalue(externalbbswindow_t *window, W dh, W dv)
1340 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
1343 EXPORT W externalbbswindow_setdrawrect(externalbbswindow_t *window, W l, W t, W r, W b)
1345 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
1348 EXPORT W externalbbswindow_setworkrect(externalbbswindow_t *window, W l, W t, W r, W b)
1350 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
1353 EXPORT W externalbbswindow_scrollworkarea(externalbbswindow_t *window, W dh, W dv)
1356 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
1360 if ((err & W_RDSET) != 0) {
1361 externalbbswindow_setflag(window, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
1366 EXPORT W externalbbswindow_getworkrect(externalbbswindow_t *window, RECT *r)
1368 return wget_wrk(window->wid, r);
1371 EXPORT Bool externalbbswindow_isopen(externalbbswindow_t *window)
1373 if (window->wid < 0) {
1379 EXPORT VOID externalbbswindow_responsepasterequest(externalbbswindow_t *window, W nak, PNT *pos)
1382 window->savedwev.r.r.p.rightbot.x = pos->x;
1383 window->savedwev.r.r.p.rightbot.y = pos->y;
1385 wrsp_evt(&window->savedwev, nak);
1388 EXPORT W externalbbswindow_startredisp(externalbbswindow_t *window, RECT *r)
1390 return wsta_dsp(window->wid, r, NULL);
1393 EXPORT W externalbbswindow_endredisp(externalbbswindow_t *window)
1395 return wend_dsp(window->wid);
1398 EXPORT W externalbbswindow_eraseworkarea(externalbbswindow_t *window, RECT *r)
1400 return wera_wnd(window->wid, r);
1403 EXPORT W externalbbswindow_requestredisp(externalbbswindow_t *window)
1405 return wreq_dsp(window->wid);
1408 EXPORT GID externalbbswindow_startdrag(externalbbswindow_t *window)
1410 return wsta_drg(window->wid, 0);
1413 EXPORT W externalbbswindow_getdrag(externalbbswindow_t *window, PNT *pos, WID *wid, PNT *pos_butup)
1417 etype = wget_drg(pos, &window->savedwev);
1418 *wid = window->savedwev.s.wid;
1419 if (etype == EV_BUTUP) {
1420 *pos_butup = window->savedwev.s.pos;
1426 EXPORT VOID externalbbswindow_enddrag(externalbbswindow_t *window)
1431 EXPORT GID externalbbswindow_getGID(externalbbswindow_t *window)
1433 return wget_gid(window->wid);
1436 EXPORT WID externalbbswindow_getWID(externalbbswindow_t *window)
1441 EXPORT W externalbbswindow_settitle(externalbbswindow_t *window, TC *title)
1443 tc_strncpy(window->title, title, 256);
1444 window->title[256] = TNULL;
1445 return wset_tit(window->wid, -1, window->title, 0);
1448 EXPORT Bool externalbbswindow_isactive(externalbbswindow_t *window)
1451 wid = wget_act(NULL);
1452 if (window->wid == wid) {
1458 LOCAL VOID externalbbswindow_butdnwork(externalbbswindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1460 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_BUTDN;
1461 evt->data.externalbbswindow_butdn.type = wchk_dck(wev->s.time);
1462 evt->data.externalbbswindow_butdn.pos = wev->s.pos;
1463 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1466 LOCAL VOID externalbbswindow_resize(externalbbswindow_t *window, SIZE *sz)
1469 Bool workchange = False;
1471 wget_wrk(window->wid, &work);
1472 if (work.c.left != 0) {
1476 if (work.c.top != 0) {
1480 wset_wrk(window->wid, &work);
1481 gset_vis(window->gid, work);
1483 if (workchange == True) {
1484 wera_wnd(window->wid, NULL);
1485 wreq_dsp(window->wid);
1488 sz->v = work.c.bottom - work.c.top;
1489 sz->h = work.c.right - work.c.left;
1492 EXPORT W externalbbswindow_open(externalbbswindow_t *window)
1496 if (window->wid > 0) {
1500 wid = wopn_wnd(WA_STD|WA_SIZE|WA_HHDL|WA_VHDL|WA_BBAR|WA_RBAR, window->parent, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
1502 DP_ER("wopn_wnd: subjectoption error", wid);
1506 window->gid = wget_gid(wid);
1507 hmi_windowscroll_settarget(&window->wscr, wid);
1515 EXPORT VOID externalbbswindow_close(externalbbswindow_t *window)
1520 if (window->wid < 0) {
1525 err = wget_sts(window->wid, &stat, NULL);
1529 wcls_wnd(window->wid, CLR);
1534 LOCAL VOID bchanlhmi_setswitchbutdnflag(bchanlhmi_t *hmi)
1536 hmi->flag = hmi->flag | BCHANLHMI_FLAG_SWITCHBUTDN;
1539 LOCAL VOID bchanlhmi_clearswitchbutdnflag(bchanlhmi_t *hmi)
1541 hmi->flag = hmi->flag & ~BCHANLHMI_FLAG_SWITCHBUTDN;
1544 LOCAL Bool bchanlhmi_issetswitchbutdnflag(bchanlhmi_t *hmi)
1546 if ((hmi->flag & BCHANLHMI_FLAG_SWITCHBUTDN) == 0) {
1552 LOCAL Bool bchanlhmi_issubjectwindowWID(bchanlhmi_t *hmi, WID wid)
1554 if (hmi->subjectwindow->wid == wid) {
1560 LOCAL Bool bchanlhmi_isbbsmenuwindowWID(bchanlhmi_t *hmi, WID wid)
1562 if (hmi->bbsmenuwindow->wid == wid) {
1568 LOCAL Bool bchanlhmi_issubjectoptionwindowWID(bchanlhmi_t *hmi, WID wid)
1570 if (hmi->subjectoptionwindow->wid == wid) {
1576 LOCAL Bool bchanlhmi_isregisterexternalwindowWID(bchanlhmi_t *hmi, WID wid)
1578 if (hmi->registerexternalwindow->wid == wid) {
1584 LOCAL Bool bchanlhmi_isexternalbbswindowWID(bchanlhmi_t *hmi, WID wid)
1586 if (hmi->externalbbswindow->wid == wid) {
1592 LOCAL VOID bchanlhmi_weventnull(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1594 cidl_par(wev->s.wid, &wev->s.pos);
1595 if (wev->s.cmd != W_WORK)
1596 return; /*ºî¶ÈÎΰ賰*/
1597 if (wev->s.stat & ES_CMD)
1598 return; /*Ì¿Îᥡ¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë*/
1599 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1600 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_MOUSEMOVE;
1601 hmi->evt.data.subjectwindow_mousemove.pos = wev->s.pos;
1602 hmi->evt.data.subjectwindow_mousemove.stat = wev->s.stat;
1605 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1606 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_MOUSEMOVE;
1607 hmi->evt.data.bbsmenuwindow_mousemove.pos = wev->s.pos;
1608 hmi->evt.data.bbsmenuwindow_mousemove.stat = wev->s.stat;
1611 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1612 cidl_par(wev->s.wid, &wev->s.pos);
1615 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1616 cidl_par(wev->s.wid, &wev->s.pos);
1619 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1620 gset_ptr(PS_SELECT, NULL, -1, -1);
1624 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_MOUSEMOVE;
1625 hmi->evt.data.common_mousemove.pos = wev->s.pos;
1628 LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1630 switch (wev->g.cmd) {
1631 case W_REDISP: /*ºÆɽ¼¨Í×µá*/
1632 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1633 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1636 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1637 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1640 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1641 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1644 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1645 registerexternalwindow_redisp(hmi->registerexternalwindow);
1648 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1649 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1653 case W_PASTE: /*Ž¹þ¤ßÍ×µá*/
1654 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1655 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_PASTE;
1656 memcpy(&hmi->subjectwindow->savedwev, wev, sizeof(WEVENT));
1659 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1660 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_PASTE;
1661 memcpy(&hmi->externalbbswindow->savedwev, wev, sizeof(WEVENT));
1664 wrsp_evt(wev, 1); /*NACK*/
1666 case W_DELETE: /*Êݸ½ªÎ»*/
1667 wrsp_evt(wev, 0); /*ACK*/
1668 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1669 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1670 evt->data.subjectwindow_close.save = True;
1673 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1674 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1675 evt->data.bbsmenuwindow_close.save = True;
1678 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1679 subjectoptionwindow_close(hmi->subjectoptionwindow);
1682 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1683 registerexternalwindow_close(hmi->registerexternalwindow);
1686 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1687 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1688 evt->data.externalbbswindow_close.save = True;
1692 case W_FINISH: /*ÇÑ´þ½ªÎ»*/
1693 wrsp_evt(wev, 0); /*ACK*/
1694 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1695 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1696 evt->data.subjectwindow_close.save = False;
1699 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1700 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1701 evt->data.bbsmenuwindow_close.save = False;
1704 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1705 subjectoptionwindow_close(hmi->subjectoptionwindow);
1708 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1709 registerexternalwindow_close(hmi->registerexternalwindow);
1712 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1713 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1714 evt->data.externalbbswindow_close.save = False;
1721 LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1724 W dh, dv; /* TODO: add check for exist scrollable window */
1726 switch (wev->s.cmd) {
1728 switch (wchk_dck(wev->s.time)) {
1730 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1731 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1732 evt->data.subjectwindow_close.save = True; /* TODO: tmp value */
1735 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1736 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1737 evt->data.bbsmenuwindow_close.save = True; /* TODO: tmp value */
1740 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1741 subjectoptionwindow_close(hmi->subjectoptionwindow);
1744 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1745 registerexternalwindow_close(hmi->registerexternalwindow);
1748 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1749 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1750 evt->data.externalbbswindow_close.save = True; /* TODO: tmp value */
1761 if (wmov_drg(wev, NULL) > 0) {
1762 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1763 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1766 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1767 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1770 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1771 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1774 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1775 registerexternalwindow_redisp(hmi->registerexternalwindow);
1778 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1779 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1788 switch (wchk_dck(wev->s.time)) {
1790 i = wchg_wnd(wev->s.wid, NULL, W_MOVE);
1793 i = wrsz_drg(wev, NULL, NULL);
1799 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1800 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_RESIZE;
1801 subjectwindow_resize(hmi->subjectwindow, &evt->data.subjectwindow_resize.work_sz);
1802 hmi_windowscroll_updatebar(&hmi->subjectwindow->wscr);
1804 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST);
1808 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1809 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_RESIZE;
1810 bbsmenuwindow_resize(hmi->bbsmenuwindow, &evt->data.bbsmenuwindow_resize.work_sz);
1811 hmi_windowscroll_updatebar(&hmi->bbsmenuwindow->wscr);
1813 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST);
1817 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1818 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_RESIZE;
1819 externalbbswindow_resize(hmi->externalbbswindow, &evt->data.externalbbswindow_resize.work_sz);
1820 hmi_windowscroll_updatebar(&hmi->externalbbswindow->wscr);
1822 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
1828 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1829 err = hmi_windowscroll_weventrbar(&hmi->subjectwindow->wscr, wev, &dh, &dv);
1834 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1836 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1838 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
1839 evt->data.subjectwindow_scroll.dh = dh;
1840 evt->data.subjectwindow_scroll.dv = dv;
1843 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1844 err = hmi_windowscroll_weventrbar(&hmi->bbsmenuwindow->wscr, wev, &dh, &dv);
1849 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
1851 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
1853 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
1854 evt->data.bbsmenuwindow_scroll.dh = dh;
1855 evt->data.bbsmenuwindow_scroll.dv = dv;
1858 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1859 err = hmi_windowscroll_weventrbar(&hmi->externalbbswindow->wscr, wev, &dh, &dv);
1864 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
1866 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
1868 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
1869 evt->data.externalbbswindow_scroll.dh = dh;
1870 evt->data.externalbbswindow_scroll.dv = dv;
1875 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1876 err = hmi_windowscroll_weventbbar(&hmi->subjectwindow->wscr, wev, &dh, &dv);
1881 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
1883 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
1885 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
1886 evt->data.subjectwindow_scroll.dh = dh;
1887 evt->data.subjectwindow_scroll.dv = dv;
1890 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1891 err = hmi_windowscroll_weventbbar(&hmi->bbsmenuwindow->wscr, wev, &dh, &dv);
1896 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
1898 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
1900 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
1901 evt->data.bbsmenuwindow_scroll.dh = dh;
1902 evt->data.bbsmenuwindow_scroll.dv = dv;
1905 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1906 err = hmi_windowscroll_weventbbar(&hmi->externalbbswindow->wscr, wev, &dh, &dv);
1911 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
1913 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
1915 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
1916 evt->data.externalbbswindow_scroll.dh = dh;
1917 evt->data.externalbbswindow_scroll.dv = dv;
1922 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1923 subjectwindow_butdnwork(hmi->subjectwindow, wev, evt);
1926 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1927 bbsmenuwindow_butdnwork(hmi->bbsmenuwindow, wev, evt);
1930 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1931 subjectoptionwindow_butdnwork(hmi->subjectoptionwindow, wev, evt);
1934 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1935 registerexternalwindow_butdnwork(hmi->registerexternalwindow, wev, evt);
1938 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1939 externalbbswindow_butdnwork(hmi->externalbbswindow, wev, evt);
1948 LOCAL VOID bchanlhmi_weventswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1950 bchanlhmi_setswitchbutdnflag(hmi);
1953 LOCAL VOID bchanlhmi_weventreswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1955 bchanlhmi_setswitchbutdnflag(hmi);
1956 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1957 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1959 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1960 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1962 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1963 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1966 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1967 registerexternalwindow_redisp(hmi->registerexternalwindow);
1970 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1971 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1975 LOCAL VOID bchanlhmi_receivemessage(bchanlhmi_t *hmi, bchanlhmievent_t *evt)
1980 err = rcv_msg(MM_ALL, &msg, sizeof(MESSAGE), WAIT|NOCLR);
1982 if (msg.msg_type == MS_TMOUT) { /* should be use other type? */
1983 evt->type = BCHANLHMIEVENT_TYPE_COMMON_TIMEOUT;
1984 evt->data.common_timeout.code = msg.msg_body.TMOUT.code;
1987 clr_msg(MM_ALL, MM_ALL);
1990 LOCAL Bool bchanlhmi_checkflag(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
1994 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING) == True) {
1995 err = hmi_windowscroll_weventrbar(&hmi->subjectwindow->wscr, &hmi->wev, &dh, &dv);
1997 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
2001 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
2003 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
2005 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
2006 hmi->evt.data.subjectwindow_scroll.dh = dh;
2007 hmi->evt.data.subjectwindow_scroll.dv = dv;
2010 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING) == True) {
2011 err = hmi_windowscroll_weventbbar(&hmi->subjectwindow->wscr, &hmi->wev, &dh, &dv);
2013 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2017 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2019 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2021 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
2022 hmi->evt.data.subjectwindow_scroll.dh = dh;
2023 hmi->evt.data.subjectwindow_scroll.dv = dv;
2026 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING) == True) {
2027 err = hmi_windowscroll_weventrbar(&hmi->bbsmenuwindow->wscr, &hmi->wev, &dh, &dv);
2029 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2033 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2035 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2037 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
2038 hmi->evt.data.bbsmenuwindow_scroll.dh = dh;
2039 hmi->evt.data.bbsmenuwindow_scroll.dv = dv;
2042 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING) == True) {
2043 err = hmi_windowscroll_weventbbar(&hmi->bbsmenuwindow->wscr, &hmi->wev, &dh, &dv);
2045 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2049 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2051 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2053 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
2054 hmi->evt.data.bbsmenuwindow_scroll.dh = dh;
2055 hmi->evt.data.bbsmenuwindow_scroll.dv = dv;
2058 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING) == True) {
2059 err = hmi_windowscroll_weventrbar(&hmi->externalbbswindow->wscr, &hmi->wev, &dh, &dv);
2061 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2065 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2067 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2069 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
2070 hmi->evt.data.externalbbswindow_scroll.dh = dh;
2071 hmi->evt.data.externalbbswindow_scroll.dv = dv;
2074 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING) == True) {
2075 err = hmi_windowscroll_weventbbar(&hmi->externalbbswindow->wscr, &hmi->wev, &dh, &dv);
2077 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2081 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2083 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2085 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
2086 hmi->evt.data.externalbbswindow_scroll.dh = dh;
2087 hmi->evt.data.externalbbswindow_scroll.dv = dv;
2090 if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT) == True) {
2091 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT);
2092 subjectoptionwindow_setflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION);
2094 } else if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION) == True) {
2095 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION);
2096 if (hmi->subjectoptionwindow->filter.nextaction == True) {
2097 hmi->wev.s.type = EV_NULL;
2098 subjectoptionwindow_actionfilter(hmi->subjectoptionwindow, &hmi->wev, &hmi->evt);
2102 if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT) == True) {
2103 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
2104 registerexternalwindow_setflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
2106 } else if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION) == True) {
2107 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
2108 if (hmi->registerexternalwindow->boradname.nextaction == True) {
2109 hmi->wev.s.type = EV_NULL;
2110 registerexternalwindow_actionboradname(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
2113 if (hmi->registerexternalwindow->url.nextaction == True) {
2114 hmi->wev.s.type = EV_NULL;
2115 registerexternalwindow_actionurl(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
2123 EXPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
2128 hmi->evt.type = BCHANLHMIEVENT_TYPE_NONE;
2132 ok = bchanlhmi_issetswitchbutdnflag(hmi);
2134 bchanlhmi_weventbutdn(hmi, wev0, &hmi->evt);
2135 bchanlhmi_clearswitchbutdnflag(hmi);
2139 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST) == True) {
2140 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
2141 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST);
2144 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST) == True) {
2145 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
2146 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST);
2149 if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST) == True) {
2150 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
2151 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST);
2154 if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST) == True) {
2155 registerexternalwindow_redisp(hmi->registerexternalwindow);
2156 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST);
2159 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST) == True) {
2160 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
2161 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
2165 ok = bchanlhmi_checkflag(hmi, evt);
2170 wget_evt(wev0, WAIT);
2171 switch (wev0->s.type) {
2173 bchanlhmi_weventnull(hmi, wev0, &hmi->evt);
2176 bchanlhmi_weventrequest(hmi, wev0, &hmi->evt);
2179 bchanlhmi_weventreswitch(hmi, wev0, &hmi->evt);
2182 bchanlhmi_weventswitch(hmi, wev0, &hmi->evt);
2185 bchanlhmi_weventbutdn(hmi, wev0, &hmi->evt);
2189 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_KEYDOWN;
2190 hmi->evt.data.common_keydown.keycode = wev0->e.data.key.code;
2191 hmi->evt.data.common_keydown.keytop = wev0->e.data.key.keytop;
2192 hmi->evt.data.common_keydown.stat = wev0->e.stat;
2198 oprc_dev(&wev0->e, NULL, 0);
2201 bchanlhmi_receivemessage(hmi, &hmi->evt);
2204 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_MENU;
2205 hmi->evt.data.common_menu.pos = wev0->s.pos;
2212 EXPORT subjectwindow_t* subjectwindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2214 subjectwindow_t *window;
2217 window = (subjectwindow_t*)malloc(sizeof(subjectwindow_t));
2218 if (window == NULL) {
2224 window->parent = parent;
2226 if (bgpat != NULL) {
2227 window->bgpat = *bgpat;
2229 window->bgpat = (PAT){{0, 16, 16, 0x10ffffff, 0, FILL100}};
2231 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2237 err = subjectwindow_open(window, title);
2239 hmi_windowscroll_finalize(&window->wscr);
2247 LOCAL VOID subjectwindow_delete(subjectwindow_t *window)
2249 if (window->wid > 0) {
2250 wcls_wnd(window->wid, CLR);
2252 hmi_windowscroll_finalize(&window->wscr);
2256 EXPORT bbsmenuwindow_t* bbsmenuwindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2258 bbsmenuwindow_t *window;
2261 window = (bbsmenuwindow_t*)malloc(sizeof(bbsmenuwindow_t));
2262 if (window == NULL) {
2268 window->parent = parent;
2270 if (bgpat != NULL) {
2271 window->bgpat = *bgpat;
2273 window->bgpat = (PAT){{0, 16, 16, 0x10ffffff, 0, FILL100}};
2275 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2281 err = bbsmenuwindow_open(window, title);
2283 hmi_windowscroll_finalize(&window->wscr);
2291 LOCAL VOID bbsmenuwindow_delete(bbsmenuwindow_t *window)
2293 if (window->wid > 0) {
2294 wcls_wnd(window->wid, CLR);
2296 hmi_windowscroll_finalize(&window->wscr);
2300 EXPORT subjectoptionwindow_t* subjectoptionwindow_new(PNT *p, subjectwindow_t *parent, TC *title, PAT *bgpat, W dnum_filter, W dnum_order, W dnum_orderby)
2302 subjectoptionwindow_t *window;
2304 window = (subjectoptionwindow_t*)malloc(sizeof(subjectoptionwindow_t));
2305 if (window == NULL) {
2310 window->parent = parent;
2311 window->r.c.left = p->x;
2312 window->r.c.top = p->y;
2313 window->r.c.right = p->x + 384;
2314 window->r.c.bottom = p->y + 160;
2315 if (bgpat != NULL) {
2316 window->bgpat = *bgpat;
2318 window->bgpat = (PAT){{0, 16, 16, 0x10ffffff, 0, FILL100}};
2320 tc_strset(window->title, TNULL, 256+1);
2322 tc_strncpy(window->title, title, 256);
2324 window->title[0] = 0x2539;
2325 window->title[1] = 0x256c;
2326 window->title[2] = 0x306c;
2327 window->title[3] = 0x4d77;
2328 window->title[4] = 0x405f;
2329 window->title[5] = 0x446a;
2331 window->filter.id = -1;
2332 window->filter.dnum = dnum_filter;
2333 memset(window->filter.buf, 0, sizeof(TC)*1000);
2334 window->filter.buf[0] = MC_ATTR;
2335 *(COLOR*)(window->filter.buf + 1) = -1;
2336 window->filter.buf[3] = -1;
2337 window->filter.buf[4] = 0;
2338 window->filter.buf[5] = 16;
2339 window->filter.buf[6] = 16;
2340 window->filter.buf[7] = TNULL;
2341 window->filter.nextaction = False;
2342 window->order.id = -1;
2343 window->order.dnum = dnum_order;
2344 window->order.value = 0;
2345 window->orderby.id = -1;
2346 window->orderby.dnum = dnum_orderby;
2347 window->orderby.value = 0;
2353 LOCAL VOID subjectoptionwindow_delete(subjectoptionwindow_t *window)
2355 if (window->wid > 0) {
2356 cdel_pwd(window->wid, NOCLR);
2357 wcls_wnd(window->wid, CLR);
2362 EXPORT registerexternalwindow_t* registerexternalwindow_new(PNT *p, WID parent, TC *title, PAT *bgpat)
2364 registerexternalwindow_t *window;
2366 window = (registerexternalwindow_t*)malloc(sizeof(registerexternalwindow_t));
2367 if (window == NULL) {
2372 window->parent = parent;
2373 window->r.c.left = p->x;
2374 window->r.c.top = p->y;
2375 window->r.c.right = p->x + 384;
2376 window->r.c.bottom = p->y + 138;
2377 if (bgpat != NULL) {
2378 window->bgpat = *bgpat;
2380 window->bgpat = (PAT){{0, 16, 16, 0x10ffffff, 0, FILL100}};
2382 tc_strset(window->title, TNULL, 256+1);
2384 tc_strncpy(window->title, title, 256);
2386 window->title[0] = 0x3330;
2387 window->title[1] = 0x4974;
2388 window->title[2] = 0x4844;
2389 window->title[3] = 0x244e;
2390 window->title[4] = 0x4449;
2391 window->title[5] = 0x3243;
2393 window->boradname.id = -1;
2394 memset(window->boradname.buf, 0, sizeof(TC)*1000);
2395 window->boradname.buf[0] = MC_ATTR;
2396 *(COLOR*)(window->boradname.buf + 1) = -1;
2397 window->boradname.buf[3] = -1;
2398 window->boradname.buf[4] = 0;
2399 window->boradname.buf[5] = 16;
2400 window->boradname.buf[6] = 16;
2401 window->boradname.buf[7] = TNULL;
2402 window->boradname.nextaction = False;
2403 window->url.id = -1;
2404 memset(window->url.buf, 0, sizeof(TC)*1000);
2405 window->url.buf[0] = MC_ATTR;
2406 *(COLOR*)(window->url.buf + 1) = -1;
2407 window->url.buf[3] = -1;
2408 window->url.buf[4] = 0;
2409 window->url.buf[5] = 8;
2410 window->url.buf[6] = 16;
2411 window->url.buf[7] = TNULL;
2412 window->url.nextaction = False;
2413 window->determine.id = -1;
2414 window->cancel.id = -1;
2420 LOCAL VOID registerexternalwindow_delete(registerexternalwindow_t *window)
2422 if (window->wid > 0) {
2423 cdel_pwd(window->wid, NOCLR);
2424 wcls_wnd(window->wid, CLR);
2429 EXPORT externalbbswindow_t* externalbbswindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2431 externalbbswindow_t *window;
2434 window = (externalbbswindow_t*)malloc(sizeof(externalbbswindow_t));
2435 if (window == NULL) {
2441 window->parent = parent;
2443 if (bgpat != NULL) {
2444 window->bgpat = *bgpat;
2446 window->bgpat = (PAT){{0, 16, 16, 0x10ffffff, 0, FILL100}};
2448 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2453 tc_strset(window->title, TNULL, 256+1);
2455 tc_strncpy(window->title, title, 256);
2457 window->title[0] = 0x3330;
2458 window->title[1] = 0x4974;
2459 window->title[2] = 0x4844;
2466 LOCAL VOID externalbbswindow_delete(externalbbswindow_t *window)
2468 if (window->wid > 0) {
2469 wcls_wnd(window->wid, CLR);
2471 hmi_windowscroll_finalize(&window->wscr);
2475 EXPORT subjectwindow_t* bchanlhmi_newsubjectwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2477 if (hmi->subjectwindow != NULL) {
2480 hmi->subjectwindow = subjectwindow_new(r, parent, title, bgpat);
2481 return hmi->subjectwindow;
2484 EXPORT VOID bchanlhmi_deletesubjectwindow(bchanlhmi_t *hmi, subjectwindow_t *window)
2486 subjectwindow_delete(hmi->subjectwindow);
2487 hmi->subjectwindow = NULL;
2490 EXPORT bbsmenuwindow_t* bchanlhmi_newbbsmenuwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2492 if (hmi->bbsmenuwindow != NULL) {
2495 hmi->bbsmenuwindow = bbsmenuwindow_new(r, parent, title, bgpat);
2496 return hmi->bbsmenuwindow;
2499 EXPORT VOID bchanlhmi_deletebbsmenuwindow(bchanlhmi_t *hmi, bbsmenuwindow_t *window)
2501 bbsmenuwindow_delete(hmi->bbsmenuwindow);
2502 hmi->bbsmenuwindow = NULL;
2505 EXPORT subjectoptionwindow_t* bchanlhmi_newsubjectoptionwindow(bchanlhmi_t *hmi, PNT *p, subjectwindow_t *parent, TC *title, PAT *bgpat, W dnum_filter, W dnum_order, W dnum_orderby)
2507 if (parent == NULL) {
2510 if (hmi->subjectoptionwindow != NULL) {
2513 hmi->subjectoptionwindow = subjectoptionwindow_new(p, parent, title, bgpat, dnum_filter, dnum_order, dnum_orderby);
2514 return hmi->subjectoptionwindow;
2517 EXPORT VOID bchanlhmi_deletesubjectoptionwindow(bchanlhmi_t *hmi, subjectoptionwindow_t *window)
2519 subjectoptionwindow_delete(hmi->subjectoptionwindow);
2520 hmi->subjectoptionwindow = NULL;
2523 EXPORT registerexternalwindow_t* bchanlhmi_newregisterexternalwindow(bchanlhmi_t *hmi, PNT *p, WID parent, TC *title, PAT *bgpat)
2525 if (hmi->registerexternalwindow != NULL) {
2528 hmi->registerexternalwindow = registerexternalwindow_new(p, parent, title, bgpat);
2529 return hmi->registerexternalwindow;
2532 EXPORT VOID bchanlhmi_deleteregisterexternalwindow(bchanlhmi_t *hmi, registerexternalwindow_t *window)
2534 registerexternalwindow_delete(hmi->registerexternalwindow);
2535 hmi->registerexternalwindow = NULL;
2538 EXPORT externalbbswindow_t* bchanlhmi_newexternalbbswindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2540 if (hmi->externalbbswindow != NULL) {
2543 hmi->externalbbswindow = externalbbswindow_new(r, parent, title, bgpat);
2544 return hmi->externalbbswindow;
2547 EXPORT VOID bchanlhmi_deleteexternalbbswindow(bchanlhmi_t *hmi, externalbbswindow_t *window)
2549 externalbbswindow_delete(hmi->externalbbswindow);
2550 hmi->externalbbswindow = NULL;
2554 EXPORT bchanlhmi_t* bchanlhmi_new()
2558 hmi = (bchanlhmi_t *)malloc(sizeof(bchanlhmi_t));
2563 hmi->subjectwindow = NULL;
2564 hmi->bbsmenuwindow = NULL;
2565 hmi->subjectoptionwindow = NULL;
2566 hmi->registerexternalwindow = NULL;
2567 hmi->externalbbswindow = NULL;
2572 EXPORT VOID bchanlhmi_delete(bchanlhmi_t *hmi)
2574 if (hmi->subjectwindow != NULL) {
2575 subjectwindow_delete(hmi->subjectwindow);
2577 if (hmi->bbsmenuwindow != NULL) {
2578 bbsmenuwindow_delete(hmi->bbsmenuwindow);
2580 if (hmi->subjectoptionwindow != NULL) {
2581 subjectoptionwindow_delete(hmi->subjectoptionwindow);
2583 if (hmi->registerexternalwindow != NULL) {
2584 registerexternalwindow_delete(hmi->registerexternalwindow);
2586 if (hmi->externalbbswindow != NULL) {
2587 externalbbswindow_delete(hmi->externalbbswindow);