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);
740 LOCAL VOID subjectoptionwindow_redisp(subjectoptionwindow_t *window)
744 if (wsta_dsp(window->wid, &r, NULL) == 0) {
747 wera_wnd(window->wid, &r);
748 subjectoptionwindow_draw(window, &r);
749 } while (wend_dsp(window->wid) > 0);
752 EXPORT W subjectoptionwindow_requestredisp(subjectoptionwindow_t *window)
754 return wreq_dsp(window->wid);
757 EXPORT GID subjectoptionwindow_getGID(subjectoptionwindow_t *window)
759 return wget_gid(window->wid);
762 EXPORT WID subjectoptionwindow_getWID(subjectoptionwindow_t *window)
767 EXPORT W subjectoptionwindow_settitle(subjectoptionwindow_t *window, TC *title)
769 tc_strncpy(window->title, title, 256);
770 window->title[256] = TNULL;
771 return wset_tit(window->wid, -1, window->title, 0);
774 EXPORT Bool subjectoptionwindow_isactive(subjectoptionwindow_t *window)
777 wid = wget_act(NULL);
778 if (window->wid == wid) {
784 LOCAL VOID subjectoptionwindow_butdnwork(subjectoptionwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
789 ret = cfnd_par(window->wid, wev->s.pos, &id);
793 if (id == window->filter.id) {
794 memcpy(&window->savedwev, wev, sizeof(WEVENT));
795 subjectoptionwindow_actionfilter(window, wev, evt);
798 if (id == window->order.id) {
799 subjectoptionwindow_actionorder(window, wev, evt);
802 if (id == window->orderby.id) {
803 subjectoptionwindow_actionorderby(window, wev, evt);
808 EXPORT W subjectoptionwindow_open(subjectoptionwindow_t *window)
812 if (window->wid > 0) {
816 wid = wopn_wnd(WA_STD|WA_SUBW, window->parent->wid, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
818 DP_ER("wopn_wnd: subjectoption error", wid);
822 window->gid = wget_gid(wid);
824 window->filter.id = copn_par(wid, window->filter.dnum, NULL);
825 if (window->filter.id < 0) {
826 DP_ER("ccre_xxx filter error:", window->filter.id);
828 cset_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
829 window->order.id = copn_par(wid, window->order.dnum, NULL);
830 if (window->order.id < 0) {
831 DP_ER("ccre_xxx order error:", window->order.id);
833 cset_val(window->order.id, 1, (W*)(&window->order.value));
834 window->orderby.id = copn_par(wid, window->orderby.dnum, NULL);
835 if (window->orderby.id < 0) {
836 DP_ER("ccre_xxx orderby error:", window->orderby.id);
838 cset_val(window->orderby.id, 1, (W*)(&window->orderby.value));
845 EXPORT VOID subjectoptionwindow_close(subjectoptionwindow_t *window)
850 if (window->wid < 0) {
855 err = wget_sts(window->wid, &stat, NULL);
859 err = cget_val(window->orderby.id, 1, (W*)(&window->orderby.value));
860 err = cget_val(window->order.id, 1, (W*)(&window->order.value));
861 err = cget_val(window->filter.id, 1000, (W*)(window->filter.buf+7));
863 window->filter.buf_written = err;
865 cdel_pwd(window->wid, NOCLR);
866 wcls_wnd(window->wid, CLR);
871 #define REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST 0x00000001
872 #define REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT 0x0000000f
873 #define REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION 0x00000010
875 #define registerexternalwindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
876 #define registerexternalwindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
877 #define registerexternalwindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
879 EXPORT W registerexternalwindow_setboradnametext(registerexternalwindow_t *window, TC *str, W len)
888 memcpy(window->boradname.buf+7, str, cp_len * sizeof(TC));
889 window->boradname.buf[7 + cp_len] = TNULL;
890 window->boradname.buf_written = cp_len;
891 if (window->wid < 0) {
895 return cset_val(window->boradname.id, cp_len, (W*)(window->boradname.buf+7));
898 EXPORT W registerexternalwindow_getboradnametext(registerexternalwindow_t *window, TC *str, W len)
902 if (window->wid > 0) {
903 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
907 window->boradname.buf_written = err;
910 if (len < window->boradname.buf_written) {
913 cp_len = window->boradname.buf_written;
915 memcpy(str, window->boradname.buf + 7, cp_len * sizeof(TC));
920 EXPORT W registerexternalwindow_cutboradnametext(registerexternalwindow_t *window, TC *str, W len, Bool cut)
924 len0 = ccut_txt(window->boradname.id, len, str, cut == False ? 0 : 1);
930 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
934 window->boradname.buf_written = err;
941 EXPORT W registerexternalwindow_insertboradnametext(registerexternalwindow_t *window, TC *str, W len)
945 err = cins_txt(window->boradname.id, (PNT){0x8000, 0x8000}, str);
950 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
954 window->boradname.buf_written = err;
959 LOCAL VOID registerexternalwindow_actionboradname(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
963 i = cact_par(window->boradname.id, wev);
965 window->boradname.nextaction = True;
968 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
969 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_KEYMENU;
970 evt->data.registerexternalwindow_boradname_keymenu.keycode = wev->e.data.key.code;
972 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MENU;
973 evt->data.registerexternalwindow_boradname_menu.pos = wev->s.pos;
975 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
979 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
984 window->boradname.nextaction = False;
986 len = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
988 window->boradname.buf_written = len;
993 cchg_par(window->boradname.id, P_INACT);
994 cchg_par(window->boradname.id, P_ACT);
1001 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_DETERMINE;
1002 evt->data.registerexternalwindow_boradname_determine.value = window->boradname.buf+7;
1003 evt->data.registerexternalwindow_boradname_determine.len = window->boradname.buf_written;
1006 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_MOVE;
1007 evt->data.registerexternalwindow_boradname_move.rel_wid = wev->s.wid;
1008 evt->data.registerexternalwindow_boradname_move.pos = wev->s.pos;
1011 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_BORADNAME_COPY;
1012 evt->data.registerexternalwindow_boradname_copy.rel_wid = wev->s.wid;
1013 evt->data.registerexternalwindow_boradname_copy.pos = wev->s.pos;
1018 EXPORT W registerexternalwindow_seturltext(registerexternalwindow_t *window, TC *str, W len)
1027 memcpy(window->url.buf+7, str, cp_len * sizeof(TC));
1028 window->url.buf[7 + cp_len] = TNULL;
1029 window->url.buf_written = cp_len;
1030 if (window->wid < 0) {
1034 return cset_val(window->url.id, cp_len, (W*)(window->url.buf+7));
1037 EXPORT W registerexternalwindow_geturltext(registerexternalwindow_t *window, TC *str, W len)
1041 if (window->wid > 0) {
1042 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1046 window->url.buf_written = err;
1049 if (len < window->url.buf_written) {
1052 cp_len = window->url.buf_written;
1054 memcpy(str, window->url.buf + 7, cp_len * sizeof(TC));
1059 EXPORT W registerexternalwindow_cuturltext(registerexternalwindow_t *window, TC *str, W len, Bool cut)
1063 len0 = ccut_txt(window->url.id, len, str, cut == False ? 0 : 1);
1069 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1073 window->url.buf_written = err;
1080 EXPORT W registerexternalwindow_inserturltext(registerexternalwindow_t *window, TC *str, W len)
1084 err = cins_txt(window->url.id, (PNT){0x8000, 0x8000}, str);
1089 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1093 window->url.buf_written = err;
1098 LOCAL VOID registerexternalwindow_actionurl(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1102 i = cact_par(window->url.id, wev);
1104 window->url.nextaction = True;
1107 if ((wev->s.type == EV_KEYDWN)&&(wev->s.stat & ES_CMD)) {
1108 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_KEYMENU;
1109 evt->data.registerexternalwindow_url_keymenu.keycode = wev->e.data.key.code;
1111 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MENU;
1112 evt->data.registerexternalwindow_url_menu.pos = wev->s.pos;
1114 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
1118 registerexternalwindow_setflag(window, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
1123 window->url.nextaction = False;
1125 len = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1127 window->url.buf_written = len;
1132 cchg_par(window->url.id, P_INACT);
1133 cchg_par(window->url.id, P_ACT);
1140 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_DETERMINE;
1141 evt->data.registerexternalwindow_url_determine.value = window->url.buf+7;
1142 evt->data.registerexternalwindow_url_determine.len = window->url.buf_written;
1145 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_MOVE;
1146 evt->data.registerexternalwindow_url_move.rel_wid = wev->s.wid;
1147 evt->data.registerexternalwindow_url_move.pos = wev->s.pos;
1150 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_URL_COPY;
1151 evt->data.registerexternalwindow_url_copy.rel_wid = wev->s.wid;
1152 evt->data.registerexternalwindow_url_copy.pos = wev->s.pos;
1157 EXPORT Bool registerexternalwindow_isopen(registerexternalwindow_t *window)
1159 if (window->wid < 0) {
1165 LOCAL VOID registerexternalwindow_draw(registerexternalwindow_t *window, RECT *r)
1167 cdsp_pwd(window->wid, r, P_RDISP);
1170 LOCAL VOID registerexternalwindow_redisp(registerexternalwindow_t *window)
1174 if (wsta_dsp(window->wid, &r, NULL) == 0) {
1177 wera_wnd(window->wid, &r);
1178 registerexternalwindow_draw(window, &r);
1179 } while (wend_dsp(window->wid) > 0);
1182 EXPORT W registerexternalwindow_requestredisp(registerexternalwindow_t *window)
1184 return wreq_dsp(window->wid);
1187 EXPORT GID registerexternalwindow_getGID(registerexternalwindow_t *window)
1189 return wget_gid(window->wid);
1192 EXPORT WID registerexternalwindow_getWID(registerexternalwindow_t *window)
1197 EXPORT W registerexternalwindow_settitle(registerexternalwindow_t *window, TC *title)
1199 tc_strncpy(window->title, title, 256);
1200 window->title[256] = TNULL;
1201 return wset_tit(window->wid, -1, window->title, 0);
1204 EXPORT Bool registerexternalwindow_isactive(registerexternalwindow_t *window)
1207 wid = wget_act(NULL);
1208 if (window->wid == wid) {
1214 LOCAL VOID registerexternalwindow_butdnwork(registerexternalwindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1219 ret = cfnd_par(window->wid, wev->s.pos, &id);
1223 if (id == window->boradname.id) {
1224 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1225 registerexternalwindow_actionboradname(window, wev, evt);
1228 if (id == window->url.id) {
1229 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1230 registerexternalwindow_actionurl(window, wev, evt);
1233 if (id == window->determine.id) {
1234 ret = cact_par(window->determine.id, wev);
1235 if ((ret & 0x5000) != 0x5000) {
1238 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_DETERMINE_PUSH;
1241 if (id == window->cancel.id) {
1242 ret = cact_par(window->cancel.id, wev);
1243 if ((ret & 0x5000) != 0x5000) {
1246 evt->type = BCHANLHMIEVENT_TYPE_REGISTEREXTERNALWINDOW_PARTS_CANCEL_PUSH;
1251 EXPORT W registerexternalwindow_open(registerexternalwindow_t *window)
1256 if (window->wid > 0) {
1260 wid = wopn_wnd(WA_STD, window->parent, &(window->r), NULL, 2, window->title, &window->bgpat, NULL);
1262 DP_ER("wopn_wnd: subjectoption error", wid);
1266 window->gid = wget_gid(wid);
1268 r = (RECT){{8, 8, 368, 34}};
1269 window->boradname.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->boradname.buf, NULL);
1270 if (window->boradname.id < 0) {
1271 DP_ER("ccre_xxx boradname error:", window->boradname.id);
1273 r = (RECT){{8, 38, 368, 64}};
1274 window->url.id = ccre_tbx(wid, TB_PARTS|P_DISP, &r, 1000, window->url.buf, NULL);
1275 if (window->url.id < 0) {
1276 DP_ER("ccre_xxx url error:", window->url.id);
1278 r = (RECT){{158, 108, 300, 134}};
1279 window->determine.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x3768, 0x446a, TNULL}, NULL);
1280 if (window->determine.id < 0) {
1281 DP_ER("ccre_xxx determine error:", window->determine.id);
1283 r = (RECT){{8, 108, 150, 134}};
1284 window->cancel.id = ccre_msw(wid, MS_PARTS|P_DISP, &r, (TC[]){MC_STR, 0x3c68, 0x246a, 0x3e43, 0x2437, TNULL}, NULL);
1285 if (window->cancel.id < 0) {
1286 DP_ER("ccre_xxx cancel error:", window->cancel.id);
1294 EXPORT VOID registerexternalwindow_close(registerexternalwindow_t *window)
1299 if (window->wid < 0) {
1304 err = wget_sts(window->wid, &stat, NULL);
1308 err = cget_val(window->url.id, 1000, (W*)(window->url.buf+7));
1310 window->url.buf_written = err;
1312 err = cget_val(window->boradname.id, 1000, (W*)(window->boradname.buf+7));
1314 window->boradname.buf_written = err;
1316 cdel_pwd(window->wid, NOCLR);
1317 wcls_wnd(window->wid, CLR);
1322 #define EXTERNALBBSWINDOW_FLAG_DRAWREQUEST 0x00000001
1323 #define EXTERNALBBSWINDOW_FLAG_RSCROLLING 0x00000002
1324 #define EXTERNALBBSWINDOW_FLAG_BSCROLLING 0x00000004
1326 #define externalbbswindow_setflag(window, flagx) (window)->flag = (window)->flag | (flagx)
1327 #define externalbbswindow_clearflag(window, flagx) (window)->flag = (window)->flag & ~(flagx)
1328 #define externalbbswindow_issetflag(window, flagx) (((window)->flag & (flagx)) == 0 ? False : True)
1330 EXPORT VOID externalbbswindow_scrollbyvalue(externalbbswindow_t *window, W dh, W dv)
1332 hmi_windowscroll_scrollworkrect(&window->wscr, dh, dv);
1335 EXPORT W externalbbswindow_setdrawrect(externalbbswindow_t *window, W l, W t, W r, W b)
1337 return hmi_windowscroll_setdrawrect(&window->wscr, l, t, r, b);
1340 EXPORT W externalbbswindow_setworkrect(externalbbswindow_t *window, W l, W t, W r, W b)
1342 return hmi_windowscroll_setworkrect(&window->wscr, l, t, r, b);
1345 EXPORT W externalbbswindow_scrollworkarea(externalbbswindow_t *window, W dh, W dv)
1348 err = wscr_wnd(window->wid, NULL, dh, dv, W_MOVE|W_RDSET);
1352 if ((err & W_RDSET) != 0) {
1353 externalbbswindow_setflag(window, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
1358 EXPORT W externalbbswindow_getworkrect(externalbbswindow_t *window, RECT *r)
1360 return wget_wrk(window->wid, r);
1363 EXPORT Bool externalbbswindow_isopen(externalbbswindow_t *window)
1365 if (window->wid < 0) {
1371 EXPORT VOID externalbbswindow_responsepasterequest(externalbbswindow_t *window, W nak, PNT *pos)
1374 window->savedwev.r.r.p.rightbot.x = pos->x;
1375 window->savedwev.r.r.p.rightbot.y = pos->y;
1377 wrsp_evt(&window->savedwev, nak);
1380 EXPORT W externalbbswindow_startredisp(externalbbswindow_t *window, RECT *r)
1382 return wsta_dsp(window->wid, r, NULL);
1385 EXPORT W externalbbswindow_endredisp(externalbbswindow_t *window)
1387 return wend_dsp(window->wid);
1390 EXPORT W externalbbswindow_eraseworkarea(externalbbswindow_t *window, RECT *r)
1392 return wera_wnd(window->wid, r);
1395 EXPORT W externalbbswindow_requestredisp(externalbbswindow_t *window)
1397 return wreq_dsp(window->wid);
1400 EXPORT GID externalbbswindow_startdrag(externalbbswindow_t *window)
1402 return wsta_drg(window->wid, 0);
1405 EXPORT W externalbbswindow_getdrag(externalbbswindow_t *window, PNT *pos, WID *wid, PNT *pos_butup)
1409 etype = wget_drg(pos, &window->savedwev);
1410 *wid = window->savedwev.s.wid;
1411 if (etype == EV_BUTUP) {
1412 *pos_butup = window->savedwev.s.pos;
1418 EXPORT VOID externalbbswindow_enddrag(externalbbswindow_t *window)
1423 EXPORT GID externalbbswindow_getGID(externalbbswindow_t *window)
1425 return wget_gid(window->wid);
1428 EXPORT WID externalbbswindow_getWID(externalbbswindow_t *window)
1433 EXPORT W externalbbswindow_settitle(externalbbswindow_t *window, TC *title)
1435 tc_strncpy(window->title, title, 256);
1436 window->title[256] = TNULL;
1437 return wset_tit(window->wid, -1, window->title, 0);
1440 EXPORT Bool externalbbswindow_isactive(externalbbswindow_t *window)
1443 wid = wget_act(NULL);
1444 if (window->wid == wid) {
1450 LOCAL VOID externalbbswindow_butdnwork(externalbbswindow_t *window, WEVENT *wev, bchanlhmievent_t *evt)
1452 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_BUTDN;
1453 evt->data.externalbbswindow_butdn.type = wchk_dck(wev->s.time);
1454 evt->data.externalbbswindow_butdn.pos = wev->s.pos;
1455 memcpy(&window->savedwev, wev, sizeof(WEVENT));
1458 LOCAL VOID externalbbswindow_resize(externalbbswindow_t *window, SIZE *sz)
1461 Bool workchange = False;
1463 wget_wrk(window->wid, &work);
1464 if (work.c.left != 0) {
1468 if (work.c.top != 0) {
1472 wset_wrk(window->wid, &work);
1473 gset_vis(window->gid, work);
1475 if (workchange == True) {
1476 wera_wnd(window->wid, NULL);
1477 wreq_dsp(window->wid);
1480 sz->v = work.c.bottom - work.c.top;
1481 sz->h = work.c.right - work.c.left;
1484 EXPORT W externalbbswindow_open(externalbbswindow_t *window)
1488 if (window->wid > 0) {
1492 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);
1494 DP_ER("wopn_wnd: subjectoption error", wid);
1498 window->gid = wget_gid(wid);
1499 hmi_windowscroll_settarget(&window->wscr, wid);
1507 EXPORT VOID externalbbswindow_close(externalbbswindow_t *window)
1512 if (window->wid < 0) {
1517 err = wget_sts(window->wid, &stat, NULL);
1521 wcls_wnd(window->wid, CLR);
1526 LOCAL VOID bchanlhmi_setswitchbutdnflag(bchanlhmi_t *hmi)
1528 hmi->flag = hmi->flag | BCHANLHMI_FLAG_SWITCHBUTDN;
1531 LOCAL VOID bchanlhmi_clearswitchbutdnflag(bchanlhmi_t *hmi)
1533 hmi->flag = hmi->flag & ~BCHANLHMI_FLAG_SWITCHBUTDN;
1536 LOCAL Bool bchanlhmi_issetswitchbutdnflag(bchanlhmi_t *hmi)
1538 if ((hmi->flag & BCHANLHMI_FLAG_SWITCHBUTDN) == 0) {
1544 LOCAL Bool bchanlhmi_issubjectwindowWID(bchanlhmi_t *hmi, WID wid)
1546 if (hmi->subjectwindow->wid == wid) {
1552 LOCAL Bool bchanlhmi_isbbsmenuwindowWID(bchanlhmi_t *hmi, WID wid)
1554 if (hmi->bbsmenuwindow->wid == wid) {
1560 LOCAL Bool bchanlhmi_issubjectoptionwindowWID(bchanlhmi_t *hmi, WID wid)
1562 if (hmi->subjectoptionwindow->wid == wid) {
1568 LOCAL Bool bchanlhmi_isregisterexternalwindowWID(bchanlhmi_t *hmi, WID wid)
1570 if (hmi->registerexternalwindow->wid == wid) {
1576 LOCAL Bool bchanlhmi_isexternalbbswindowWID(bchanlhmi_t *hmi, WID wid)
1578 if (hmi->externalbbswindow->wid == wid) {
1584 LOCAL VOID bchanlhmi_weventnull(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1586 cidl_par(wev->s.wid, &wev->s.pos);
1587 if (wev->s.cmd != W_WORK)
1588 return; /*ºî¶ÈÎΰ賰*/
1589 if (wev->s.stat & ES_CMD)
1590 return; /*Ì¿Îᥡ¼¤¬²¡¤µ¤ì¤Æ¤¤¤ë*/
1591 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1592 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_MOUSEMOVE;
1593 hmi->evt.data.subjectwindow_mousemove.pos = wev->s.pos;
1594 hmi->evt.data.subjectwindow_mousemove.stat = wev->s.stat;
1597 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1598 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_MOUSEMOVE;
1599 hmi->evt.data.bbsmenuwindow_mousemove.pos = wev->s.pos;
1600 hmi->evt.data.bbsmenuwindow_mousemove.stat = wev->s.stat;
1603 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1604 cidl_par(wev->s.wid, &wev->s.pos);
1607 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1608 cidl_par(wev->s.wid, &wev->s.pos);
1611 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1612 gset_ptr(PS_SELECT, NULL, -1, -1);
1616 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_MOUSEMOVE;
1617 hmi->evt.data.common_mousemove.pos = wev->s.pos;
1620 LOCAL VOID bchanlhmi_weventrequest(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1622 switch (wev->g.cmd) {
1623 case W_REDISP: /*ºÆɽ¼¨Í×µá*/
1624 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1625 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1628 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1629 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1632 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1633 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1636 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1637 registerexternalwindow_redisp(hmi->registerexternalwindow);
1640 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1641 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1645 case W_PASTE: /*Ž¹þ¤ßÍ×µá*/
1646 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1647 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_PASTE;
1648 memcpy(&hmi->subjectwindow->savedwev, wev, sizeof(WEVENT));
1651 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1652 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_PASTE;
1653 memcpy(&hmi->externalbbswindow->savedwev, wev, sizeof(WEVENT));
1656 wrsp_evt(wev, 1); /*NACK*/
1658 case W_DELETE: /*Êݸ½ªÎ»*/
1659 wrsp_evt(wev, 0); /*ACK*/
1660 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1661 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1662 evt->data.subjectwindow_close.save = True;
1665 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1666 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1667 evt->data.bbsmenuwindow_close.save = True;
1670 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1671 subjectoptionwindow_close(hmi->subjectoptionwindow);
1674 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1675 registerexternalwindow_close(hmi->registerexternalwindow);
1678 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1679 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1680 evt->data.externalbbswindow_close.save = True;
1684 case W_FINISH: /*ÇÑ´þ½ªÎ»*/
1685 wrsp_evt(wev, 0); /*ACK*/
1686 if (bchanlhmi_issubjectwindowWID(hmi, wev->g.wid) == True) {
1687 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1688 evt->data.subjectwindow_close.save = False;
1691 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->g.wid) == True) {
1692 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1693 evt->data.bbsmenuwindow_close.save = False;
1696 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->g.wid) == True) {
1697 subjectoptionwindow_close(hmi->subjectoptionwindow);
1700 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->g.wid) == True) {
1701 registerexternalwindow_close(hmi->registerexternalwindow);
1704 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->g.wid) == True) {
1705 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1706 evt->data.externalbbswindow_close.save = False;
1713 LOCAL VOID bchanlhmi_weventbutdn(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1716 W dh, dv; /* TODO: add check for exist scrollable window */
1718 switch (wev->s.cmd) {
1720 switch (wchk_dck(wev->s.time)) {
1722 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1723 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_CLOSE;
1724 evt->data.subjectwindow_close.save = True; /* TODO: tmp value */
1727 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1728 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_CLOSE;
1729 evt->data.bbsmenuwindow_close.save = True; /* TODO: tmp value */
1732 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1733 subjectoptionwindow_close(hmi->subjectoptionwindow);
1736 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1737 registerexternalwindow_close(hmi->registerexternalwindow);
1740 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1741 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_CLOSE;
1742 evt->data.externalbbswindow_close.save = True; /* TODO: tmp value */
1753 if (wmov_drg(wev, NULL) > 0) {
1754 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1755 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1758 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1759 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1762 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1763 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1766 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1767 registerexternalwindow_redisp(hmi->registerexternalwindow);
1770 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1771 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1780 switch (wchk_dck(wev->s.time)) {
1782 i = wchg_wnd(wev->s.wid, NULL, W_MOVE);
1785 i = wrsz_drg(wev, NULL, NULL);
1791 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1792 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_RESIZE;
1793 subjectwindow_resize(hmi->subjectwindow, &evt->data.subjectwindow_resize.work_sz);
1794 hmi_windowscroll_updatebar(&hmi->subjectwindow->wscr);
1796 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST);
1800 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1801 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_RESIZE;
1802 bbsmenuwindow_resize(hmi->bbsmenuwindow, &evt->data.bbsmenuwindow_resize.work_sz);
1803 hmi_windowscroll_updatebar(&hmi->bbsmenuwindow->wscr);
1805 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST);
1809 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1810 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_RESIZE;
1811 externalbbswindow_resize(hmi->externalbbswindow, &evt->data.externalbbswindow_resize.work_sz);
1812 hmi_windowscroll_updatebar(&hmi->externalbbswindow->wscr);
1814 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
1820 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1821 err = hmi_windowscroll_weventrbar(&hmi->subjectwindow->wscr, wev, &dh, &dv);
1826 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1828 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1830 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
1831 evt->data.subjectwindow_scroll.dh = dh;
1832 evt->data.subjectwindow_scroll.dv = dv;
1835 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1836 err = hmi_windowscroll_weventrbar(&hmi->bbsmenuwindow->wscr, wev, &dh, &dv);
1841 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
1843 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
1845 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
1846 evt->data.bbsmenuwindow_scroll.dh = dh;
1847 evt->data.bbsmenuwindow_scroll.dv = dv;
1850 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1851 err = hmi_windowscroll_weventrbar(&hmi->externalbbswindow->wscr, wev, &dh, &dv);
1856 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
1858 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
1860 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
1861 evt->data.externalbbswindow_scroll.dh = dh;
1862 evt->data.externalbbswindow_scroll.dv = dv;
1867 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1868 err = hmi_windowscroll_weventbbar(&hmi->subjectwindow->wscr, wev, &dh, &dv);
1873 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
1875 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
1877 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
1878 evt->data.subjectwindow_scroll.dh = dh;
1879 evt->data.subjectwindow_scroll.dv = dv;
1882 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1883 err = hmi_windowscroll_weventbbar(&hmi->bbsmenuwindow->wscr, wev, &dh, &dv);
1888 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
1890 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
1892 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
1893 evt->data.bbsmenuwindow_scroll.dh = dh;
1894 evt->data.bbsmenuwindow_scroll.dv = dv;
1897 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1898 err = hmi_windowscroll_weventbbar(&hmi->externalbbswindow->wscr, wev, &dh, &dv);
1903 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
1905 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
1907 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
1908 evt->data.externalbbswindow_scroll.dh = dh;
1909 evt->data.externalbbswindow_scroll.dv = dv;
1914 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1915 subjectwindow_butdnwork(hmi->subjectwindow, wev, evt);
1918 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1919 bbsmenuwindow_butdnwork(hmi->bbsmenuwindow, wev, evt);
1922 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1923 subjectoptionwindow_butdnwork(hmi->subjectoptionwindow, wev, evt);
1926 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1927 registerexternalwindow_butdnwork(hmi->registerexternalwindow, wev, evt);
1930 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1931 externalbbswindow_butdnwork(hmi->externalbbswindow, wev, evt);
1940 LOCAL VOID bchanlhmi_weventswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1942 bchanlhmi_setswitchbutdnflag(hmi);
1945 LOCAL VOID bchanlhmi_weventreswitch(bchanlhmi_t *hmi, WEVENT *wev, bchanlhmievent_t *evt)
1947 bchanlhmi_setswitchbutdnflag(hmi);
1948 if (bchanlhmi_issubjectwindowWID(hmi, wev->s.wid) == True) {
1949 evt->type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
1951 if (bchanlhmi_isbbsmenuwindowWID(hmi, wev->s.wid) == True) {
1952 evt->type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
1954 if (bchanlhmi_issubjectoptionwindowWID(hmi, wev->s.wid) == True) {
1955 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
1958 if (bchanlhmi_isregisterexternalwindowWID(hmi, wev->s.wid) == True) {
1959 registerexternalwindow_redisp(hmi->registerexternalwindow);
1962 if (bchanlhmi_isexternalbbswindowWID(hmi, wev->s.wid) == True) {
1963 evt->type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
1967 LOCAL VOID bchanlhmi_receivemessage(bchanlhmi_t *hmi, bchanlhmievent_t *evt)
1972 err = rcv_msg(MM_ALL, &msg, sizeof(MESSAGE), WAIT|NOCLR);
1974 if (msg.msg_type == MS_TMOUT) { /* should be use other type? */
1975 evt->type = BCHANLHMIEVENT_TYPE_COMMON_TIMEOUT;
1976 evt->data.common_timeout.code = msg.msg_body.TMOUT.code;
1979 clr_msg(MM_ALL, MM_ALL);
1982 LOCAL Bool bchanlhmi_checkflag(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
1986 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING) == True) {
1987 err = hmi_windowscroll_weventrbar(&hmi->subjectwindow->wscr, &hmi->wev, &dh, &dv);
1989 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1993 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1995 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_RSCROLLING);
1997 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
1998 hmi->evt.data.subjectwindow_scroll.dh = dh;
1999 hmi->evt.data.subjectwindow_scroll.dv = dv;
2002 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING) == True) {
2003 err = hmi_windowscroll_weventbbar(&hmi->subjectwindow->wscr, &hmi->wev, &dh, &dv);
2005 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2009 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2011 subjectwindow_setflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_BSCROLLING);
2013 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_SCROLL;
2014 hmi->evt.data.subjectwindow_scroll.dh = dh;
2015 hmi->evt.data.subjectwindow_scroll.dv = dv;
2018 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING) == True) {
2019 err = hmi_windowscroll_weventrbar(&hmi->bbsmenuwindow->wscr, &hmi->wev, &dh, &dv);
2021 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2025 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2027 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_RSCROLLING);
2029 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
2030 hmi->evt.data.bbsmenuwindow_scroll.dh = dh;
2031 hmi->evt.data.bbsmenuwindow_scroll.dv = dv;
2034 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING) == True) {
2035 err = hmi_windowscroll_weventbbar(&hmi->bbsmenuwindow->wscr, &hmi->wev, &dh, &dv);
2037 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2041 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2043 bbsmenuwindow_setflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_BSCROLLING);
2045 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_SCROLL;
2046 hmi->evt.data.bbsmenuwindow_scroll.dh = dh;
2047 hmi->evt.data.bbsmenuwindow_scroll.dv = dv;
2050 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING) == True) {
2051 err = hmi_windowscroll_weventrbar(&hmi->externalbbswindow->wscr, &hmi->wev, &dh, &dv);
2053 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2057 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2059 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_RSCROLLING);
2061 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
2062 hmi->evt.data.externalbbswindow_scroll.dh = dh;
2063 hmi->evt.data.externalbbswindow_scroll.dv = dv;
2066 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING) == True) {
2067 err = hmi_windowscroll_weventbbar(&hmi->externalbbswindow->wscr, &hmi->wev, &dh, &dv);
2069 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2073 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2075 externalbbswindow_setflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_BSCROLLING);
2077 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_SCROLL;
2078 hmi->evt.data.externalbbswindow_scroll.dh = dh;
2079 hmi->evt.data.externalbbswindow_scroll.dv = dv;
2082 if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT) == True) {
2083 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_OTHEREVENT);
2084 subjectoptionwindow_setflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION);
2086 } else if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION) == True) {
2087 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_PARTS_NEXTACTION);
2088 if (hmi->subjectoptionwindow->filter.nextaction == True) {
2089 hmi->wev.s.type = EV_NULL;
2090 subjectoptionwindow_actionfilter(hmi->subjectoptionwindow, &hmi->wev, &hmi->evt);
2094 if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT) == True) {
2095 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_OTHEREVENT);
2096 registerexternalwindow_setflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
2098 } else if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION) == True) {
2099 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_PARTS_NEXTACTION);
2100 if (hmi->registerexternalwindow->boradname.nextaction == True) {
2101 hmi->wev.s.type = EV_NULL;
2102 registerexternalwindow_actionboradname(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
2105 if (hmi->registerexternalwindow->url.nextaction == True) {
2106 hmi->wev.s.type = EV_NULL;
2107 registerexternalwindow_actionurl(hmi->registerexternalwindow, &hmi->wev, &hmi->evt);
2115 EXPORT W bchanlhmi_getevent(bchanlhmi_t *hmi, bchanlhmievent_t **evt)
2120 hmi->evt.type = BCHANLHMIEVENT_TYPE_NONE;
2124 ok = bchanlhmi_issetswitchbutdnflag(hmi);
2126 bchanlhmi_weventbutdn(hmi, wev0, &hmi->evt);
2127 bchanlhmi_clearswitchbutdnflag(hmi);
2131 if (subjectwindow_issetflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST) == True) {
2132 hmi->evt.type = BCHANLHMIEVENT_TYPE_SUBJECTWINDOW_DRAW;
2133 subjectwindow_clearflag(hmi->subjectwindow, SUBJECTWINDOW_FLAG_DRAWREQUEST);
2136 if (bbsmenuwindow_issetflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST) == True) {
2137 hmi->evt.type = BCHANLHMIEVENT_TYPE_BBSMENUWINDOW_DRAW;
2138 bbsmenuwindow_clearflag(hmi->bbsmenuwindow, BBSMENUWINDOW_FLAG_DRAWREQUEST);
2141 if (subjectoptionwindow_issetflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST) == True) {
2142 subjectoptionwindow_redisp(hmi->subjectoptionwindow);
2143 subjectoptionwindow_clearflag(hmi->subjectoptionwindow, SUBJECTOPTIONWINDOW_FLAG_DRAWREQUEST);
2146 if (registerexternalwindow_issetflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST) == True) {
2147 registerexternalwindow_redisp(hmi->registerexternalwindow);
2148 registerexternalwindow_clearflag(hmi->registerexternalwindow, REGISTEREXTERNALWINDOW_FLAG_DRAWREQUEST);
2151 if (externalbbswindow_issetflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST) == True) {
2152 hmi->evt.type = BCHANLHMIEVENT_TYPE_EXTERNALBBSWINDOW_DRAW;
2153 externalbbswindow_clearflag(hmi->externalbbswindow, EXTERNALBBSWINDOW_FLAG_DRAWREQUEST);
2157 ok = bchanlhmi_checkflag(hmi, evt);
2162 wget_evt(wev0, WAIT);
2163 switch (wev0->s.type) {
2165 bchanlhmi_weventnull(hmi, wev0, &hmi->evt);
2168 bchanlhmi_weventrequest(hmi, wev0, &hmi->evt);
2171 bchanlhmi_weventreswitch(hmi, wev0, &hmi->evt);
2174 bchanlhmi_weventswitch(hmi, wev0, &hmi->evt);
2177 bchanlhmi_weventbutdn(hmi, wev0, &hmi->evt);
2181 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_KEYDOWN;
2182 hmi->evt.data.common_keydown.keycode = wev0->e.data.key.code;
2183 hmi->evt.data.common_keydown.keytop = wev0->e.data.key.keytop;
2184 hmi->evt.data.common_keydown.stat = wev0->e.stat;
2190 oprc_dev(&wev0->e, NULL, 0);
2193 bchanlhmi_receivemessage(hmi, &hmi->evt);
2196 hmi->evt.type = BCHANLHMIEVENT_TYPE_COMMON_MENU;
2197 hmi->evt.data.common_menu.pos = wev0->s.pos;
2204 EXPORT subjectwindow_t* subjectwindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2206 subjectwindow_t *window;
2209 window = (subjectwindow_t*)malloc(sizeof(subjectwindow_t));
2210 if (window == NULL) {
2216 window->parent = parent;
2218 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2224 err = subjectwindow_open(window, title);
2226 hmi_windowscroll_finalize(&window->wscr);
2234 LOCAL VOID subjectwindow_delete(subjectwindow_t *window)
2236 if (window->wid > 0) {
2237 wcls_wnd(window->wid, CLR);
2239 hmi_windowscroll_finalize(&window->wscr);
2243 EXPORT bbsmenuwindow_t* bbsmenuwindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2245 bbsmenuwindow_t *window;
2248 window = (bbsmenuwindow_t*)malloc(sizeof(bbsmenuwindow_t));
2249 if (window == NULL) {
2255 window->parent = parent;
2257 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2263 err = bbsmenuwindow_open(window, title);
2265 hmi_windowscroll_finalize(&window->wscr);
2273 LOCAL VOID bbsmenuwindow_delete(bbsmenuwindow_t *window)
2275 if (window->wid > 0) {
2276 wcls_wnd(window->wid, CLR);
2278 hmi_windowscroll_finalize(&window->wscr);
2282 EXPORT subjectoptionwindow_t* subjectoptionwindow_new(PNT *p, subjectwindow_t *parent, TC *title, PAT *bgpat, W dnum_filter, W dnum_order, W dnum_orderby)
2284 subjectoptionwindow_t *window;
2286 window = (subjectoptionwindow_t*)malloc(sizeof(subjectoptionwindow_t));
2287 if (window == NULL) {
2292 window->parent = parent;
2293 window->r.c.left = p->x;
2294 window->r.c.top = p->y;
2295 window->r.c.right = p->x + 400;
2296 window->r.c.bottom = p->y + 200;
2297 tc_strset(window->title, TNULL, 256+1);
2299 tc_strncpy(window->title, title, 256);
2301 window->title[0] = 0x2539;
2302 window->title[1] = 0x256c;
2303 window->title[2] = 0x306c;
2304 window->title[3] = 0x4d77;
2305 window->title[4] = 0x405f;
2306 window->title[5] = 0x446a;
2308 window->filter.id = -1;
2309 window->filter.dnum = dnum_filter;
2310 memset(window->filter.buf, 0, sizeof(TC)*1000);
2311 window->filter.buf[0] = MC_ATTR;
2312 *(COLOR*)(window->filter.buf + 1) = -1;
2313 window->filter.buf[3] = -1;
2314 window->filter.buf[4] = 0;
2315 window->filter.buf[5] = 16;
2316 window->filter.buf[6] = 16;
2317 window->filter.buf[7] = TNULL;
2318 window->filter.nextaction = False;
2319 window->order.id = -1;
2320 window->order.dnum = dnum_order;
2321 window->order.value = 0;
2322 window->orderby.id = -1;
2323 window->orderby.dnum = dnum_orderby;
2324 window->orderby.value = 0;
2330 LOCAL VOID subjectoptionwindow_delete(subjectoptionwindow_t *window)
2332 if (window->wid > 0) {
2333 cdel_pwd(window->wid, NOCLR);
2334 wcls_wnd(window->wid, CLR);
2339 EXPORT registerexternalwindow_t* registerexternalwindow_new(PNT *p, WID parent, TC *title, PAT *bgpat)
2341 registerexternalwindow_t *window;
2343 window = (registerexternalwindow_t*)malloc(sizeof(registerexternalwindow_t));
2344 if (window == NULL) {
2349 window->parent = parent;
2350 window->r.c.left = p->x;
2351 window->r.c.top = p->y;
2352 window->r.c.right = p->x + 400;
2353 window->r.c.bottom = p->y + 200;
2354 tc_strset(window->title, TNULL, 256+1);
2356 tc_strncpy(window->title, title, 256);
2358 window->title[0] = 0x3330;
2359 window->title[1] = 0x4974;
2360 window->title[2] = 0x4844;
2361 window->title[3] = 0x244e;
2362 window->title[4] = 0x4449;
2363 window->title[5] = 0x3243;
2365 window->boradname.id = -1;
2366 memset(window->boradname.buf, 0, sizeof(TC)*1000);
2367 window->boradname.buf[0] = MC_ATTR;
2368 *(COLOR*)(window->boradname.buf + 1) = -1;
2369 window->boradname.buf[3] = -1;
2370 window->boradname.buf[4] = 0;
2371 window->boradname.buf[5] = 16;
2372 window->boradname.buf[6] = 16;
2373 window->boradname.buf[7] = TNULL;
2374 window->boradname.nextaction = False;
2375 window->url.id = -1;
2376 memset(window->url.buf, 0, sizeof(TC)*1000);
2377 window->url.buf[0] = MC_ATTR;
2378 *(COLOR*)(window->url.buf + 1) = -1;
2379 window->url.buf[3] = -1;
2380 window->url.buf[4] = 0;
2381 window->url.buf[5] = 8;
2382 window->url.buf[6] = 16;
2383 window->url.buf[7] = TNULL;
2384 window->url.nextaction = False;
2385 window->determine.id = -1;
2386 window->cancel.id = -1;
2392 LOCAL VOID registerexternalwindow_delete(registerexternalwindow_t *window)
2394 if (window->wid > 0) {
2395 cdel_pwd(window->wid, NOCLR);
2396 wcls_wnd(window->wid, CLR);
2401 EXPORT externalbbswindow_t* externalbbswindow_new(RECT *r, WID parent, TC *title, PAT *bgpat)
2403 externalbbswindow_t *window;
2406 window = (externalbbswindow_t*)malloc(sizeof(externalbbswindow_t));
2407 if (window == NULL) {
2413 window->parent = parent;
2415 err = hmi_windowscroll_initialize(&window->wscr, window->wid);
2420 tc_strset(window->title, TNULL, 256+1);
2422 tc_strncpy(window->title, title, 256);
2424 window->title[0] = 0x3330;
2425 window->title[1] = 0x4974;
2426 window->title[2] = 0x4844;
2433 LOCAL VOID externalbbswindow_delete(externalbbswindow_t *window)
2435 if (window->wid > 0) {
2436 wcls_wnd(window->wid, CLR);
2438 hmi_windowscroll_finalize(&window->wscr);
2442 EXPORT subjectwindow_t* bchanlhmi_newsubjectwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2444 if (hmi->subjectwindow != NULL) {
2447 hmi->subjectwindow = subjectwindow_new(r, parent, title, bgpat);
2448 return hmi->subjectwindow;
2451 EXPORT VOID bchanlhmi_deletesubjectwindow(bchanlhmi_t *hmi, subjectwindow_t *window)
2453 subjectwindow_delete(hmi->subjectwindow);
2454 hmi->subjectwindow = NULL;
2457 EXPORT bbsmenuwindow_t* bchanlhmi_newbbsmenuwindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2459 if (hmi->bbsmenuwindow != NULL) {
2462 hmi->bbsmenuwindow = bbsmenuwindow_new(r, parent, title, bgpat);
2463 return hmi->bbsmenuwindow;
2466 EXPORT VOID bchanlhmi_deletebbsmenuwindow(bchanlhmi_t *hmi, bbsmenuwindow_t *window)
2468 bbsmenuwindow_delete(hmi->bbsmenuwindow);
2469 hmi->bbsmenuwindow = NULL;
2472 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)
2474 if (parent == NULL) {
2477 if (hmi->subjectoptionwindow != NULL) {
2480 hmi->subjectoptionwindow = subjectoptionwindow_new(p, parent, title, bgpat, dnum_filter, dnum_order, dnum_orderby);
2481 return hmi->subjectoptionwindow;
2484 EXPORT VOID bchanlhmi_deletesubjectoptionwindow(bchanlhmi_t *hmi, subjectoptionwindow_t *window)
2486 subjectoptionwindow_delete(hmi->subjectoptionwindow);
2487 hmi->subjectoptionwindow = NULL;
2490 EXPORT registerexternalwindow_t* bchanlhmi_newregisterexternalwindow(bchanlhmi_t *hmi, PNT *p, WID parent, TC *title, PAT *bgpat)
2492 if (hmi->registerexternalwindow != NULL) {
2495 hmi->registerexternalwindow = registerexternalwindow_new(p, parent, title, bgpat);
2496 return hmi->registerexternalwindow;
2499 EXPORT VOID bchanlhmi_deleteregisterexternalwindow(bchanlhmi_t *hmi, registerexternalwindow_t *window)
2501 registerexternalwindow_delete(hmi->registerexternalwindow);
2502 hmi->registerexternalwindow = NULL;
2505 EXPORT externalbbswindow_t* bchanlhmi_newexternalbbswindow(bchanlhmi_t *hmi, RECT *r, WID parent, TC *title, PAT *bgpat)
2507 if (hmi->externalbbswindow != NULL) {
2510 hmi->externalbbswindow = externalbbswindow_new(r, parent, title, bgpat);
2511 return hmi->externalbbswindow;
2514 EXPORT VOID bchanlhmi_deleteexternalbbswindow(bchanlhmi_t *hmi, externalbbswindow_t *window)
2516 externalbbswindow_delete(hmi->externalbbswindow);
2517 hmi->externalbbswindow = NULL;
2521 EXPORT bchanlhmi_t* bchanlhmi_new()
2525 hmi = (bchanlhmi_t *)malloc(sizeof(bchanlhmi_t));
2530 hmi->subjectwindow = NULL;
2531 hmi->bbsmenuwindow = NULL;
2532 hmi->subjectoptionwindow = NULL;
2533 hmi->registerexternalwindow = NULL;
2534 hmi->externalbbswindow = NULL;
2539 EXPORT VOID bchanlhmi_delete(bchanlhmi_t *hmi)
2541 if (hmi->subjectwindow != NULL) {
2542 subjectwindow_delete(hmi->subjectwindow);
2544 if (hmi->bbsmenuwindow != NULL) {
2545 bbsmenuwindow_delete(hmi->bbsmenuwindow);
2547 if (hmi->subjectoptionwindow != NULL) {
2548 subjectoptionwindow_delete(hmi->subjectoptionwindow);
2550 if (hmi->registerexternalwindow != NULL) {
2551 registerexternalwindow_delete(hmi->registerexternalwindow);
2553 if (hmi->externalbbswindow != NULL) {
2554 externalbbswindow_delete(hmi->externalbbswindow);