B-right/V sample application - WALLCHG(ɻѹʪ)


1. Ϥ

 sample program ɻŪѹ application Ǥ
äˡʲҲ𤹤٤ΤΤǤ

	1. application εư
	2. sub task Ѥ
	3. libapp  panel ɴؿ
	4. C++ ˤ BTRON  application γȯ

ʤ application  window ʤ FEP ȤʤäƤޤ




2. application γ

 application μŪϡɻŪǤդΤΤѹȤȤˤޤͰʲ߷׻ؿˤȤޤ

	1. ɻϸɽƤΰʳǤդΤΤˤ롣
	2. Ūɻѹ롣
	   ֤ñ̤ǻ꤬ǽǺ 59ʬ59 Ȥ롣
	3. ˵ưƤϡѥͥ򳫤ѹǤ褦ˤ롣
	   ޤ˵ưƤĤ夫鵯ưλ롣
	4. ʪ application Ȥ롣
	5. window ϳʤ(ѤΥѥͥϳ)
	6.  00ʬ00 ξ硢ɻѹ򤹤Ǥ˽λ롣
	7. Ƥ䵸ͭǡ˵롣
	8. ưϼ֤Υѥͥ뤬
	   ޤưˤϳʤ褦ꤹ뤳ȤǽȤ롣
	9. ư¨¤ɻѹǤ褦ˤ(Τޤ޼)
	10.ɻϥƥĶϿΤѤ롣
	11.ѹɻϥƥĶˤȿǤ褦ˤ롣

ʾ顢 application ϴĤ̤ʬ䤹뤳ȤǤޤ

	1. ɻڤؤ
	2. (Ūʻ֤η¬)
	3. ѥͥ

̤ȰʾΤ褦ˤʤޤ[2. ] ϼ¤ʤȤ򤷤ʤФʤޤ
ñˡŪưʤ餤ΤǤ˵ưƤĤƸ夫鵯ưλȤȤߤȤƤȤ(ޤХ̾Ѥ١Τ褦ʻȤߤȤƤޤ)κݤѥͥ򳫤Ȥ򤹤ɬפꡢñˤϹԤޤ
Ūưʤ顢wai_prc() ǰԤĤ褦ˤǤΤǤʣưԵ֤ѤäˡнǤޤ(wai_prc()  process ߤƤޤǤ)ޤߤλơ֤ηвȽꤹȤˡͤޤξ硢⤵ưޤ
ǤϤɤΤȤޤȡ֤¬ʬȡƤνʬȤʬΥ뤳Ȥˤޤ֤ˤΤʬȡΤƤ򳫻ϤʬȤʬΥȤȤˤʤޤ
Ǥ֤η¬˴ؤƤƤǤˤϡϤ wai_prc() Ѥޤʬ sub task ʬΥޤΤ褦ˤƤȡѹɬפäˡter_tsk()  sub task λ뤳ȤǤбǽȤʤޤ
ΤˡǤflag Ǥ⤤ΤǤȤ flag ΩĤΤ狼ޤ󤷡ޤOS  application (ȯ) event ȤΤꡢؤξΩפ뤿ˡmessage ѤˡΤޤޤȤ鵯ư panel 򳫤򤹤ȤȤˤʤäƤޤpanel 򳫤ƻ֤ꤹΤϤϤꡢ˵ưƤ¦Ԥ٤ǤΤǡξ׵ˤĤƤ⡢message ̵Ǥ

ʤߤˡ;̤Ǥʪ [ͤ] ʣư褦Ȥȥѥͥ򳫤ޤwindow γʤ FEP ȤʤäƤޤΤ application ǤϼϤޤ褦ˤʤäƤޤʬ pointing device(PD) ˴Ť˺ؤС[ͤ] Ʊ褦ʤȤ򤷤Ƥ뤳ȤˤʤȸǤ礦(ͤϲ̤ؤ active window δ֤ηв̲ʤɡʣʽ򤷤ƤޤΤǡ쳵Ʊȸ櫓ǤϤޤ)




3. ƴ program ή

3.1. application εư

3.1.1. startup 

 application Ͼʪ application Ǥꡢʪư(ʪ˥塼εư)䵤Υץư(ʪȢ䵤εư)бƤޤ
Τᡢ¾εưˡˤĤƤϡapplication εưȽꤷưˡȤƸǤ뤳ȤΤɬפޤ

ޤmain.cc  MAIN() ꡢ application ϤޤλǻȤƴĤΤȤ򤹤ɬפޤ
MAIN() ΰǤMESSAGE* msg ȤʤäƤꡢǡư message 褦ˤƤޤ(Ū C main ΰȤϰۤʤޤΤȤˤĤƤϡ[BTRON3ͽ][2 OS][ ճ][1.1 ץ/][1.1.6 ץ]) ˤƽҤ٤Ƥޤ)ޤ_StartupError ȤѿƤɾƤޤѿ libmain Ƥꡢstartup ˾㳲ȯƤ error code ֤ޤ(ͭ饤֥ν˼ԤƤʤ)
³ơư message  application μºݤνϤޤʬ WALLCHG_APPL Ȥ class 򤷡 constructor  ư message ϤȤƤޤ
ޤ class  new ˼Ԥ뤳Ȥ⤢ޤΤǡɬ try - catch ߤ褦ˤƤޤ礦

WALLCHG_APPL  constructor Ǥϡư message ɾ򤷤ޤ GUI application μ¹ԤɬפʴŪʽԤޤgetscreen()  SCREEN Фɬפʾμ򤷤ޤ
ޤ application ¿Ȥ LINK μ򤷤ƤޤѤƤ prc_inf()  B-right/V R2.000 ɲä줿 API ǤB-right/V R1.x  1B ʤɤξѤ뤳ȤǤޤ󡣤ξϻͤ˰ʲؽ󤲤ޤ

	1. ofnd_apg() Ѥˡ
	  ˡǤϡ application ¿Ȥ application ID äƤơapplication ϿƤɬפޤ
	  Ǥϡnamespace CAVL  APPID_0, APPID_1, APPID_2  application ID Ƥޤ
		VLINK	vlnk;

		mydat.pid = prc_sts(0, NULL, NULL);
		vlnk.fs_name[0] = TNULL;
		vlnk.appl[0] = CVAL::APPID_0;
		vlnk.appl[1] = CVAL::APPID_1;
		vlnk.appl[2] = CVAL::APPID_2;
		ofnd_apg(&vlnk, (LINK*)&mydat.lnk, NULL, 1);

	2. get_lnk() Ѥˡ
	  ˡ install path ǤƼˡǤ
	  path ꤵˡȤΤϤޤɤˡȤϸޤ󤬡ʤȤѤ뤳Ȥޤ
	  (/SYS/$$PROGRAM.BOX/WALLCHG Ȥ path ȲꤷƤޤ)
		TC	path[] = {TC_FDLM, TK_S, TK_Y, TK_S, 
				  TC_FDLM, TK_DLLR, TK_DLLR, TK_P, TK_R, TK_O, TK_G, TK_R, TK_A, TK_M, TK_PROD, TK_B, TK_O, TK_X, 
				  TC_FDLM, TK_W, TK_A, TK_L, TK_L, TK_C, TK_H, TK_G,
				  TNULL};

		get_lnk(path, &mydat.lnk, F_NORM);

 application Ǥ panel 䡢¾δĤξ databox ˻Ƥޤޤθν error panel 򳫤礬١ʤ٤ᤤ databox  open 褦ˤƤޤʤߤˡ˼ application ¿Ȥ LINK Ƥޤ databox 򳫤ݤɬפʤᡢΤ褦ʽäƤޤޤ¿Ȳȥޥ͡Ƥ뵯ưˡξ硢ư message ˼ application ¿ȤΤؤ LINK äƤΤǤcli ưʤɤξΰ١äǤΰ̲ޤơ嵭Τ褦ˡΤäƤޤ
(ʤ libapp ˤ databox  open 򤷤硢Ʊ system databox open ޤsystem databox  open Ƥʤȡwindow Υԥȥ system databox ΤΤȤʤʤɤξ㳲θˤʤޤ)
³ơưˡγǧ򤷤ޤapplication εưˡˤ͡ʷꡢޤ줾ˡ˱ˡۤʤäƤޤΤǡְ㤨ʤ褦դƤưˡϡMESSAGE.msg_type Ƚꤹ褦ˤʤäƤޤϡ[BTRON3ͽ][2 OS][軰 ][3.8 ¿/ȥޥ͡][3.8.3 ¿/ȥޥ͡ξܺ][3.8.3.3 ץꥱץεư]ˤƽҤ٤Ƥޤ
Ƥʤˡξϡexception ֤褦ˤƤޤ

3.1.2. event loop ޤǤν

ơWALLCHG_APPL 顢WALLCHG_APPL.main() ƤӽФ褦ˤƤޤޤǤνϽȤƤΤΤǤꡢϵưƤºݤ event loop ޤǤνˤʤޤ

ޤ application  window ޤ󤷡ʣưǧ뤳ȤˤƤޤΤǡ¿Ȳȥޥ͡ФơưΤԤޤ
ʤosta_prc() ǵư ID  window ID Ϥ褦ˤƤΤǤwindow ID ͤȤƤ硢ʪ¿ŵưǧ뤳Ȥˤʤޤ
ˡ˵ưƤɤȤ process ID(PID) μߤޤˤϡХ̾ѤƤޤ(ˡξ硢Ʊ̾ΤѤ¾ application ȡư򤷤ʤʤޤΤǡդɬפǤ application Ǥ ף̣̣ãȣ Ȥ̾ΤѤ̾Τ PID 񤭹褦ˤƤޤ)
˵ưƤϡѥͥ򳫤褦׵ФʬȤϽλ褦ˤƤޤǤʤС³ޤ
 
 application ϡƤ䵸ͭǡݴɤ褦ˤƤޤΤǡƱǡν򤹤ɬפޤǡ䵤 class Ԥ碌뤳ȤȤޤ(䵸ͭǡɤ߹ߡ񤭹ߡʤɤƤ class ˰Ǥ褦ˤƤޤ)
FUSEN Ȥ class ˵ư message Ϥ褦ˤƤΤǤϡȤΥץư䵤ΥץưȤǤϽ㤨ɬפꡢդν FUSEN ¦˰礷ƹԤäƤ餦褦ˤ٤Ǥޤ䵤ν˼Ԥ硢θν³ΤǤϤޤΤǡexception ꤲƤäơλ褦ˤǤ礦ʤ䵸ͭǡɤ߹ߤˤĤƤϸޤ
䵸ͭǡɤ߹ߤԤä塢εƤ˽ä򤷤ƤޤˤĤƤϤǤϳ䰦ޤ(ȤǤ줾εǽˤĤƤޤ)
ƼλСmain task  event loop 褦ˤʤäƤޤ⤷ޤǤ error ȯƤϡexception ꤲơWALLCHG_APPL ȴ褦ˤƤޤ

3.1.3. 䵸ͭǡɤ߹

䵸ͭǡϵưΤˤäơˡ礭Ѳޤܤ[BTRON3ͽ][2 OS][軰 ][3.8 ¿/ȥޥ͡][3.8.3 ¿/ȥޥ͡ξܺ][3.8.3.3 ץꥱץεư]ǵҤƤޤǤɬפʬƤޤ
ޤ䵸ͭǡδΰ٤ˡFUSEN Ȥ class ΤǤ class ϡ䵸ͭǡɤ߹ߡ񤭹ߤȡͤμȤĤ̤ޤԤϼºݤ file access 򤷤ꤷޤԤ class interface Ȥ󶡤ƤޤǤԤˤĤ򤹤뤳ȤˤƤޤ

3.1.3.1. ǽ䵤䵸ͭǡ

䵸ͭǡϰʲι¤ΤȤޤ

typedef struct {
	UH	dlen;			// ǡĹ(byte ñ)
	UH	ver;			// 䵤 version ֹ
	UH	min;			// Ե(ʬ)
	UH	sec;			// Ե()
	UW	opt;			// option
} WALLCHG_FUSEN;

䵸ͭǡν񤭹ߤκݤˤ⿨ƤޤǡĹ䵸ͭǡ˴ޤƤǤ礦(񤭹ߤˤĤƤϡapplication νλʬƤޤ)
ver ǤäɬפʤΤǤϤޤ󤬡ص塢Ƥޤ
min / sec Ե֤Ǥopt  option ǤϹ¤ΤǤ⤤ΤǤӤϤǤΤǡUW ˤޤ

3.1.3.2. 䵸ͭǡɤ߹

ɤ߹ߤ constructor ǹԤ褦ˤƤޤ
ޤФˡǤȤΥץư䵤ΥץưȤǤϰۤʤޤˡȤΥץưǤϼ¹Եǽ䵤ɤ߹ߤǡfile access 򶴤ȤǤʤȤ̤Ƥޤ
ޤfile access 򤷤Ƽϡɤ߹ߤʤ⡼(F_READ  F_UPDATE)ǵưȤλؤ¿Ȥ open Ƥξ oget_fsn() Ǽ褦ˤƤޤ
ޤendian αƶ顢䵸ͭǡФʤ礬뤿ᡢö buffer ˼ФƤ顢endian ѴƼ褦ˤƤޤ
(ʤ䵸ͭǡ㤦Ȥ¾ξ㳲äΰ٤ˤ⡢ľܡ䵸ͭǡƤ򤽤Τޤ޵⡢ö buffer ̤ƤˤǤ礦)
ǸˡƤ򵭲褦ˤƤޤϡλ䵸ͭǡ򹹿ݡΤ򤹤뤫ɤ˴ؤäƤޤ


3.2. sub task ˤ

߷׻ؿˤǿƤޤ applicotion Ǥϡmain task  sub task ȤʬƤޤԤϰŪ event loop бԤ event ΰĤȤƼ event ȯô褦ˤƤޤ
main task ϼ event ȡɻѹ褦ˤƤޤ
ޤ main task ϡOS Τνô褦ˤƤޤΤᡢmain task  event loop бΤȸ櫓Ǥ

main task  application εư֤˸ƤФƤ event loop ǡŪñʽήθˤޤФ sub task ϡmain task Ȥ̤ task 褦ˤƤޤ
ʤξȤ⡢줾 class ʬƤޤmain task  class ϤλѴȡapplication νλ褦ˤƤޤФsub task  class ѴƤ class ȴƤ sub task ʤʤǡapplication Ͻλޤ󡣤ϸȡsub task δ class  object Ѵǡ event ߤ뤳Ȥ̣ޤΤ褦ˤơλؿˤǽҤ٤֤ưŪưؤб¸Ƥޤ

3.2.1. main taskν

main task  class  MAINTSK ȤΤǤǤñ wget_evt() ƤӽФ loop 뤰餤ȤʤäƤޤ
Ǥconstructor  wdef_fep(1) ԤäƤޤϡwindow ʤ window event ݤɬפǤꡢƤΤ褦ˤƤޤ(window event 褦ˤƤΤϡؤǤOS ׵ʤɤƼνǼƤ⤤ΤǤƤǤϤƤޤ)
ƱˡMAINTSK Ѵ֤ȤΤϡevent loop ȴ뤳Ȥ̣ޤΤǡwdef_fep(0)  destructor ˽񤤤Ƥޤ

ơο event loop Ǥ application 塢ǤʤΤȤƤޤޤFEP 塢message  event ȤƼǤʤᡢnull event ǡrcv_msg() Ԥäơߤ褦ˤƤޤ
ޤEV_REQUEST ɬ褦ˤƤʤФʤޤ󡣤 application ǤäˡOS  application νλ׵٤ˤޤ(׵ʤȡOS νλ˱ƶڤܤޤ)

main task Ǥ message ȡ message ƤɾޤȽˡñ memory compare ȤƤޤ
ɻѹ̣ event ξ硢ɻѹ class ѹԤ碌ޤѹ˼Ԥ硢application νλ򤹤褦ˤƤޤޤsub task ϼ event 򵯤 slp_tsk() ȯԤơ̲֤褦ˤƤޤΤǡμԤ碌뤿ˡsub task 򵯾褦ˤƤޤ
ʣưˤѥͥ message ׵᤬١panel νԤ碌褦ˤƤޤ class  object 뤳ȤˤäƼ¸Ƥޤξ⡢panel ν˼ԤƤ application νλ褦ˤƤޤ

ʤ application 餿 message ϡɬפǤʤʤäɬ clr_msg ʤˤäơɬפޤǤʤС event μκݤˡƱ message 뤳ȤˤʤäƤޤޤ

FEP ξ硢¾ΰ̤ window  application ͥ褷 event ȤΤǤդʤФʤʤΤϡ event β˺ƤϤʤʤȤǤ
FEP Ǥ window event βù䡢event ̵Ǥ褦ˤʤäƤΤǤŪ˲ʤȡ¾ window  event ʤȤɸŪʾ֤ȤʤäƤޤ
Τᡢevent βɬפʾϡɬ wpas_evt() ˤäơ event 򼡤ʤФʤޤ(ʤɬפΤʤΤޤǲȡƤ¦Ǥ event ưʤʤޤΤǡɬפʤΡɬפǤʤΤȤΤ˶̤ɬפޤ)
ʤߤˡڤβػߤ(wpas_evt() ȯԤʤä)ǤʤʤޤΤǡդƤ

3.2.2. ȯ sub task ν

 sub task  class  SUBTSK ȤΤǤ class ȡconstructor  sub task Ԥޤsub task ˼Ԥ硢exception ꤲơ̤Τޤ
ޤ class  object Ѵȡdestructor  sub task (λ)ޤ
ʾΤȤ顢 SUBTSK Ȥ class  object ¸ߤƤ֤ϡsub task ¸ߤƤ뤳Ȥ򼨤 class  object ¸ߤƤʤ֤ϡsub task ¸ߤƤʤȤ򼨤ȤȤʤޤ

ޤsub task ǤϡԤİ٤ˡwai_prc() Ե褦ˤƤޤ
ȡ event ȯȤơ application Ф message ꤲޤʤߤˡmessage μʬ main task ¸ߤʤ١main task  event loop  message ơ褦ˤʤäƤޤ
message ꤲȡ sub task  slp_tsk(-1) ǵ̲֤ޤΤʤꡢ̲褦ˤƤΤϡɻѹƤ鼡μʤȡϢ³ message ꤲ֤Ǥ event ٤Ǥ
ΤᡢΤϡmain task 餷Ԥʤ褦ˤƤޤ(main task Ǥɻѹ夫餷ʤ褦ˤƤޤ)

ʤߤˡcre_tsk() ˤä줿 sub task  exception ȯȡߤμǤ abort ȯΤդޤ礦

3.2.3. ɻѹ

ɻѹôʬ WALLCHG Ȥ class ˤޤ
 class  object ȡconstructor ǤɻΤ¿Ȥ open ޤ(/SYS/$$BGSCREEN.BOX Ȥ¿ȤǤ)ɻνϾ open ֤ȤƤꡢλơobject Ѵ줿ǡdestructor ˤä close 褦ˤƤޤ

ɻѹκݡ$$BGSCREEN.BOX Ƥɤ߽񤭤ԤޤϡƥĶǤƱ֤ˤ٤ɬפʤΤǤ
Ūʽϼޤ󤬡$$BGSCREEN.BOX ι¤Ĵ٤ݤˤϡsource 򻲹ͤˤƤäˡWALLCHG::set_bgpat() ʬɻɤ߹ߤϿԤäƤޤʬνϳͥƥĶǤɻǤ


3.3. libapp ˤ panel ɴؿ

libapp ˤϡpanel ɴؿ󶡤Ƥޤ databox Ƥ API ˽򤷤Ƥɤľơpanel 򳫤롦򤹤ȤȤԤ褦ˤǤƤޤ
Τᡢdatabox Ǥν񼰤򲱤ɬפޤ
ޤ library Ѥȡ񤭤 panel γƼѿ񤭤⡢ panel κǤ褦˹θƤޤ(񤭤ξ硢parts 礭䡢֤ʤɤꤷͤǷǤΤФ library ǤŪʰִطǼᡢ֤η꤬ŪڤˤǤ褦ˤʤޤޤpanel  item ɲáʤɤ library ѤнǤޤ)

3.3.1. databox ε

ޤdatabox Τεˡ鸫ƤȻפޤ
libapp Ѥ硢databox ˵ҤƤϴĤꤵƤޤ
databox ζŪ()Ȥơstddef.d ȤΤޤɬǽȤ߹٤Ƥȸޤ panel 䡢¾͡κݤˤ褯ȤͤƤޤ
ޤ᤿ǡdatabox ǤƤݴ򼨤ȥơ֥򵭽Ҥޤλȥơ֥ǤϴĤθꤷͤѤʬ櫓Ƥޤ

	1. ɸѥͥ(Ǥ SPNL = 0x8000 ȤƤ)
		Ƽѥͥ򵭽Ҥޤ
	2. ѥͥʸХåե(Ǥ PSTR = 0x9000 ȤƤ)
		ѥͥʸݴΰȤޤ
		äˡʸκݤѤ뤳ȤȤޤ
	3. ˥塼(Ǥ MENU = 0xa000 ȤƤ)
		˥塼Ѥޤ( application ǤϻȤޤ)
	4. ƥå(Ǥ SMSG = 0xb000 ȤƤ)
		ƥåѥͥɽʸѤޤ
	5. ¾(Ǥ MISC = 0xf000 ȤƤ)
		¿Ƥݴɤ˳Ƥޤ
		ʤǡֹ椬 0xf0ff(= MISC+255) ξ硢黲ȤƤ local databox Ͽޤ

ơǡdatabox εҤκݤդʤФʤʤΤǤdatabox οϰʲΤ褦ˤʤФʤޤ

	1. ͤδ֤˶򤬤äƤϤʤʤ
		1 + 1 ȤϽ񤱤ޤ
		̡ιܤȤƤޤޤΤǡ1+1 Ƚ񤭤ޤ
	2. 黻ҤϻȤʤ
		ͱ黻 + - * / Ѥޤ
	3. §黻ǤϤʤ
		Ƭ֤˱黻Ƥޤ
		2+4*6 Ƚ񤯤ȡ36 Ȥͤˤʤޤ(4 * 6 + 2 ȤϤ(2 + 4) * 6 ȲᤷȤˤʤޤ)

ʳˤ⡢񼰾󤬤ޤ[Ķ(B-right/V)ͽ][6 ȯġ][5 ǡܥåѥ] 򻲹ͤˤƤäˡBASE  ALIGN ˤĤƤϵդƤְͤ㤨ȡdatabox ƤȤǤʤʤޤ(ȤСѥͥ뤬ʤäꤷޤ)

ˡlibapp.i ڤӡlibapp.d ȤΤ褦ˤƤޤĶ application ξɬפǤϤޤ(source ߴΰ١ޤƤޤ)
³ơ application ǤȼԤƤޤͤϺѤΤǤϤޤ󤬡̤εήѤʤɤƤ

3.3.1.1. ñ message panel / error panel ε

panel ƤǤpanel ĤηϤʬ褦ˤƤ塹˴ڤˤʤȻפޤΰ١ǤϰʲΤΤʬΥ뤳ȤȤޤ

	1. ̾Υѥͥ
		˥ѥͥȤпΤΤλؤƤޤ
	2. ٹѥͥ
		˥ѥͥȤȹ󿧤μǡΥѥͥ뤬ˤϡbeep ʤ褦ˤƤޤ
	3. ¾Υѥͥ
		message ãӰʳΤ¾Τ̤ؤƤޤ
		 application Ǥϡ֤ѥͥ뤬ʬवޤ

ʤصʬΥǡºݤΥѥͥν񼰤ϤɤΥѥͥǤƱǤηˤٶ̤Ƥ뤿ᡢʬΥƤޤ
ΥѥͥƤν񼰤Ǥϡܤμࡦ°ȤƤߤ˽񤯤褦ˤʤäƤޤ
ŪˤϡʲΤ褦ˤʤޤ

.BASE = 0L				-- base  L(long) ˤƤޤ
--		<ܤμࡦ°>			<ܤ>
.epnl_system:
		TEXT+pMID+pERR				str_system
		TEXT+pMID+pINE				err_dmy
		PART+pMID+pDEF+pEND			sw_cnfm

ޤTEXT+pMID+pERR Ǥϰʲΰ̣ޤ

		TEXT : ιܤʸǤǤ
		pMID : ιܤοʿ֤ϥѥͥ˳Ĥ褦ˤ
		pERR : ΥѥͥϷٹѥͥǤ

μ str_system ȤΤϡɽʸΤؤ offset 򼨤ޤ
μιԤϡ

		TEXT : ιܤʸǤǤ
		pMID : ιܤοʿ֤ϥѥͥ˳Ĥ褦ˤ
		pINE : ιܤƤϾܺ٥å˻Ȥ

Ȥ̣ˤʤޤpINE 硢ΥѥͥٹѥͥȤƳȡerror ͤ˱ơʬɽʸư褦ˤʤäƤޤޤξɬ err_dmy ȤΤܤƤȤʤФʤޤ󡣤ξܺ٥åɽϡlibapp  errpanel() ˤä󶡤뵡ǽǤ
ǸιԤϰʲΰ̣ޤ

		PART : ιܤϥѡĤ֤
		pMID : ιܤοʿ֤ϥѥͥ˳Ĥ褦ˤ
		pDEF : ιܤ default switch Ȥ(ưŪˡP_EMPHAS Ĥ parts Ȥʤޤ)
		pEND : ιܤǥѥͥϽλ

pEND ǥѥͥΤҤȳ򽪤褦ˤƤޤΤᡢǸιܤǤɬܤǤޤιܤƤ sw_cnfm ȤʤäƤޤб parts ؤƤޤparts ν񼰤ϳͥѡĥޥ͡ν񼰤˽򤷤ޤΤǡǤϳ䰦ޤ(ɬפǤС[BTRON3ͽ][2 OS][3 ][3.3 ѡĥޥ͡][3.3.2 ѡĤμ] 򻲹ͤˤƤ)

ޤܤμ°ѤƤͤǤ stddef.d 줿ΤѤƤޤ(Ƥͤ libapp  panel ɴؿѤͤȶ̤ˤʤäƤޤΤᡢͤѹ뤳ȤϤǤޤ)
 application ɬפƤˤĤƤϤ줾줳μǤޤ¾ͤˤĤƤϳ䰦ޤ

3.3.1.2. parts ֤ panel ε

Ūʽ̾ΥѥͥˡƱǤҤݤˡparts ˰ۤʤä°ͿʤФʤޤäˡ parts Фֹ(ֹ)ŬڤͿɬפޤǤʤС parts ŬڤǤʤʤäƤޤޤ
Ǥ opnl_setup Ƥ༡夲뤳ȤȤޤ

.opnl_setup:	FTXT+pMID				tit_setup
--			FTXT : ˸ԥåʸȤʸ򻻽Ф(TEXT ξ硢ѥͥν񼰤˰¸ޤ)
--			pMID : ιܤοʿ֤դȤ

		-- Ե
		Vpos					6
--			Vpos : ιܤοľ֤򤺤餹(ιܤΤߤŬ)
		FTXT+pFIL+pNXT				str_setup_time
--			FTXT : ˸ԥåʸȤʸ򻻽Ф
--			pFIL : ʿ³ܤȤδ֤ˡʤ(λ꤬ʤС̤δַ򳫤)
--			pNXT : ιܤοľ֤Ʊ(ʿ¤)
		PART+pIN3+pNXT+pFIL			sb_setup_min
--			PART : ιܤ parts Ǥ
--			pIN3 : ֹ 3
--			pNXT : ιܤοľ֤Ʊ
--			pFIL : ʿ³ܤȤδ֤ˡʤ
		Vpos					6
--			Vpos : ιܤοľ֤򤺤餹
		FTXT+pFIL+pNXT				str_setup_min
--			FTXT : ˸ԥåʸȤʸ򻻽Ф
--			pFIL : ʿ³ܤȤδ֤ˡʤ
--			pNXT : ιܤοľ֤Ʊ
		PART+pIN4+pNXT+pFIL			sb_setup_sec
--			PART : ιܤ parts Ǥ
--			pIN4 : ֹ 4
--			pNXT : ιܤοľ֤Ʊ
--			pFIL : ʿ³ܤȤδ֤ˡʤ
		Vpos					6
--			Vpos : ιܤοľ֤򤺤餹
		FTXT					str_setup_sec
--			FTXT : ˸ԥåʸȤʸ򻻽Ф

		-- [ưΥѥͥ]
		PART+pIN5+pNXT				as_setup_pnl
--			PART : ιܤ parts Ǥ
--			pIN5 : ֹ 5
--			pNXT : ιܤοľ֤Ʊ

		-- [ưˤɻѹ]
		PART+pIN6				as_setup_chg
--			PART : ιܤ parts Ǥ
--			pIN6 : ֹ 6

		-- [λ][]
		PART+pNXT+pIN1				sw_exit
--			PART : ιܤ parts Ǥ
--			pIN1 : ֹ 1
--			pNXT : ιܤοľ֤Ʊ
		PART+pRIT+pIN2+pDEF+pEND		sw_set
--			PART : ιܤ parts Ǥ
--			pRIT : ιܤϱü֤
--			pIN2 : ֹ 2
--			pDEF : ιܤ default switch Ȥ
--			pEND : ιܤǥѥͥϽλ

libapp  panel ɴؿѤ硢panel γƹܤ̤ˤϡֹ𤷤ƽޤäˡparts ξϳ parts μ¹Է̤ơpanel νư褦ˤ뤳Ȥ¿ǤΤǡparts ФƤֹͿ褦ˤƤޤ
ʤֹϹܤ̤٤ΤΤǤΤǡʸιܤǤäꡢ¾ι(ζΰ)ǤäꤷƤ⹽ޤ󡣤ȤСpanel ѥ˥塼֤ꤹˤϡRECT(ΰ)ܤμȤŬֹͿꤷơpanel ɴؿ갷褦ˤꤷޤ

3.3.2. panel μ¹

libapp ˤ롢panel μ¹ˡˤϴĤޤ
줾ʲ˵󤲤ޤ

	1. opnstdpnl() - exstdpnl() - clsstdpnl() 缡ƤӽФ
		ˡϡlibapp ˤ panel Ǥϡʤ٤ʤΤȤʤޤ
		줾졢API бդȤȰʲΤ褦ˤʤޤ
		(ºݤˤϡlibrary ȤƤμλٱ絡ǽϤޤޤΤǡ̩˰абƤ櫓ǤϤޤ)

			opnstdpnl() : pcre_pnl() (ѥͥ)
			exstdpnl()  : pact_pnl() (ѥͥɸư)
			clsstdpnl() : pdel_pnl() (ѥͥκ)

		ǤΤǡĤǡºݤ panel ư٤ code ɬפޤ갷˴СǤʽǽȤʤޤ

	2. dostdpnl() Ѥ
		ϡ opnstdpnl() - exstdpnl() - clsstdpnl() 缡ƤӽФˡĤˤޤȤ᤿ΤǤ
		ǤΤǡĤνʤȤǽǤޤ̾ӤǤС缡ƤӽФˡä˵ǽŪʺۤϤޤ
	3. panel() Ѥ
		ϡǤñʥѥͥμ¹ˡǤ
		ĤˡǤ panel γƹܤư򵭽ҤɬפΤǤ(exstdpnl()  panel ؿȤϤɬפޤ)ˡǤϤäɬפޤ
		panel ˥ƥȥܥå䥷ꥢܥåʤɤΥܥåϥѡĤ䡢쥯ϤΥѡĤȡ갷ȤǤޤ
		ˡǤϡΥåѤΥѥͥ뤫⡼󥿥ꥹåΤߤ֤ѤΥѥͥ(ȤСλǧѥͥʤ)ˤбǤޤ
	4. errpanel() Ѥ
		ˡ⤫ʤñˡǤerror panel ѤΤΤȤʤäƤޤ
		Ūˤϡ error code ϤޤƤ˱ơܺ٤ message ɵݤѤޤ

̾ message Ӥ panel ξϡpanel()  errpanel() Ѥޤ
 application ǸСѥͥΤ褦ˡparts ̣ͤ(parts ƤǤɬפ)ˤϡdostdpnl() Ͻ缡ƤӽФˡ򤷤ʤФʤޤ

3.3.2.1. panel() / errpanel() ν

ϴŪˡdatabox  panel λֹϤǵǽ̤ޤ
databox Ƭǡȥơ֥Ƥޤʬǡ panel ֹ(Ǥդֹ椬Ǥޤ)ȡбƤ褦ˤʤäƤޤ
ȤСepnl_system  SPNL+50(= 0x8032) ȤֹͿƤޤ
panel()  errpanel() Ϥݤϡ 0x8032 Ȥֹ򤽤ΤޤϤޤʤ application Ǥϡnamespace DBOX ǡ panel λֹ enum Ѥ褦ˤƤޤ
ǤΤǡepnl_system 򳫤 panel(DBOX::EPNL_SYSTEM) ʤ errpanel(DBOX::EPNL_SYSTEM, er) Ȥޤ(er  error code)
ʤdatabox ȥơ֥(ֹ)ȡnamespace DBOX ǤֹȤɬפƤʤФʤޤ

ޤ application ǤѤƤޤ󤬡δؿ֤ͤ panel  item ֹ򤽤Τޤ֤ȤǤ褦ˤʤäƤޤǤΤǡȤСλǧѥͥǡ[ä][Ѵƽλ][ƽλ] Ȥꡢɤ switch 򲡤ưʬϡʲΤ褦˵Ҥޤ

-- databox  panel 
.BASE = 0H
.str_saveexit:	"ߤƤϸƤȰۤʤäƤޤɤޤ\0"

.sw_cancel:	MS_PARTS
		{0+CU	0	16*6+8	16+8}
		0L	OFFSET:L+4
		MC_STR	"ä\0"
.sw_destexit:	MS_PARTS
		{0+CU	0	16*7	16+8}
		0L	OFFSET:L+4
		MC_STR	"Ѵƽλ\0"
.sw_saveexit:	MS_PARTS
		{0+CU	0	16*7	16+8}
		0L	OFFSET:L+4
		MC_STR	"ƽλ\0"

.BASE = 0L
.pnl_saveexit:	-- å
		TEXT+pMID			str_saveexit

		-- ѡ
		PART+pIN0+pNXT			sw_cancel
		PART+pIN1+pMID+pNXT		sw_destexit
		PART+pIN2+pRIT+pDEF+pEND	sw_saveexit

// panel() α
void	exit_panel()
{
	switch (panel(DBOX::PNL_SAVEEXIT)) {
		case 0:			// [ä]
			break;
		case 1:			// [Ѵƽλ]
			break;
		case 2:			// [ƽλ]
			break;
	}

	return;
}

3.3.2.2. opnstdpnl() - exstdpnl() - clsstdpnl() ν

dostdpnl() Ǥ⤤ΤǤpanel Ѥ class ǡobject ¸ߤ panel μ¹ԤȤаб뤿ˡƽ缡ƤӽФˡѤޤ
ޤ application μѥͥ SETUPPNL Ȥ class Ǵ褦ˤƤޤ class  object 줿ݤ˸ƤӽФ constructor  opnstdpnl() ƤӽФޤ paenl ˼Ԥȡexception ꤲơpenel νǤޤ
panel ȡ parts ˰ܤޤν opnstdpnl()  panel ɴؿǹԤ碌Ƥ⤤ΤǤparts θĿ˽ݤˤʤΤȡɴؿ C δؿ( static δؿ)Ȥɬפ١ǤϸƤӽФʤ(ꤷʤ)褦ˤƤޤ
ˡ顢panel ¹ԤƤӽФޤ SETUPPNL::exec() ǹԤޤ exstdpnl() ƤӽФޤλ panel ɴؿͿޤʤȡpanel  parts Ǥʤʤޤ
exstdpnl()  panel ɴؿ֤ͤ򤽤Τޤ֤ȤǤ褦ˤʤäƤޤǤΤǡpanel ɴؿǲ餫֤ͭͤơθν³ȤȤǽǤ(panel() ǽλǧѥͥ򼨤ޤƱȤ panel ɴؿѤƼ¸뤳ȤǽǤ)
Ƥ panel ɴؿǤ libapp ǰʲΤΤȤ褦Ƥޤ

//
// panel ɴؿ
//
// W pnid : panel ID
// W ino  : panel  item ֹ桢 event ׵ֹ
// W val  : pact_pnl() ֤(parts ξ cact_par() η̤Ǥäꤹ)
//
W	panel_fn(W pnid, W ino, W val)
{
	W	rv;			// panel ɴؿν

	rv = -1;			// ͤξ硢panel ³
	switch (ino) {
		case -2:		// 
					// panel  panel ʳƤɽƤ硢׵κݤŪ褷ʤФʤʤ
			break;
		case -1:		// 
					// opnstdpnl()  panel ľ˸ƤФ
			break;
		case 0:			// 
					// opnstdpnl()  panel ƤƤФ
			break;
		default:
			if (ino > 0) {
				// panel β餫 item μ¹
				// item μ¹Է̤Ȥơpanel 򽪤餻ϴؿ֤ͤ 0 ʾͤȤ
			}
			break;
	}

	return rv;
}

δؿ֤ͤ 0x8000 ʳ 0 ʾͤȤȡ֤ͤͤȤ exstdpnl() ȴޤλ panel  clsstdpnl() ǺƤȴƤޤޤ֤ͤ 0x8000 Ȥȡexstdpnl()  panel äʤȴ뤳ȤǤޤλ clsstdpnl() ϸƤӽФޤ󡣤λ֤ͤ panel ID Ȥʤޤ(Τᡢopnstdpnl() ֤ͤϵƤɬפޤ)
ΰ㤤ϡpanel ɴؿǡpanel  parts ꤷͤɾ뤫(Фꤹ뤫) panel 򽪤餻ͤɾ뤫Ȥä㤤ݤѤޤ application ǤԤˡѤƤޤӤˤäƸԤˡѤ褤⤢ޤ
ޤ0x8000 ȴ clsstdpnl() ƤФƤ餺ɬŪ clsstdpnl() ˤäơpanel Ĥɬפޤ

 application Ǥ [λ]  [] ФưƤޤޤ parts ¹Ԥ줿硢¾ parts ƤFUSEN Ϥ褦ˤƤޤ(䵸ͭǡбι򤷤Ƥޤ)

 class  destructor Ǥ panel ID ͤξ硢clsstdpnl() Ƥ֤褦ˤƤޤϡ餫θ exstdpnl() ̤ȴ褦ʤȤäؤкǤ(ȤСͽ exception ʤ)ʤɬפ clsstdpnl() Ƥ֤ȡطΤʤ panel ޤĤ뤳ȤޤΤդƤ
( application Ǥ panel ɴؿ 0x8000 ʳ 0 ʾͤΰ١exstdpnl() ¦ clsstdpnl() ƤФޤΰ١pnid  ͤˤ destructor  clsstdpnl() ƤФʤ褦ˤƤޤ)


3.4. application νλ

λˤϡ¿Ȳȥޥ͡Фơλɬפޤλ䵸ͭǡιԤɬפ硢νԤ褦ˤʤФʤޤ󡣤λoend_prc() ȯԤ뤳Ȥˤʤޤ
ޤ䵸ͭǡƤϤʤ٤application ˽λˤΤ߹褦ˤƤɤǤΤǡդλȤߤɬפޤ
äˡWALLCHG_APPL  exception ȴƤ硢 class  application Τ礹ΤǤΤǡ餫ˡ۾ȴȤ̣ޤޤ㳰ȯ oend_prc() ȯԤƤΤǤϡcode λ򾷤ޤΤǡWALLCHG_APPL  destructor ǰ礷ȯԤ褦ˤƤޤ礦
˽äơWALLCHG_APPL ̤Ѵˤ destructor ϸƤФޤΤǡλoend_prc() νʣȯԤ򤱤٤Ǥޤ˽λƤϡ䵸ͭǡι򤷤Ƥꡢ䵸ͭǡν FUSEN ˰Ǥ뤳ȤˤƤޤ
ĤξΩˡǤｪλȰ۾ｪλȤ٤ flag ۾ｪλˤΤ䵸ͭǡ򹹿ʤ oend_prc() ȯԤ褦ˤƤޤ

ʤؤɤξ硢databox  open 줿֤ WALLCHG_APPL Ѵ褦ȤޤΤǡdestructor ǰ礷ơclosedbox() ȯԤ褦ˤƤޤ礦

3.4.1 䵸ͭǡν񤭹()

䵸ͭǡιϲȤΥץư䵤ΥץưȤǰۤʤˡȤˤʤޤȤΥץưξϡ¹Եǽ䵤θͭǡ򹹿ɬפޤ
λoput_fsn() ѤޤоݤȤʤ벾Ȥλؤ¿Ȥ򹹿⡼(F_UPDATE) open ɬפޤ(ʤoput_fsn() оݤȤʤ벾Ȥ(̤ɽǤϲȤֳݤ֤ȤʤäƤ)Ǥɬפꡢoend_prc() ȯԸǤϽ񤭹ߤǤޤ(oend_prc() ϲȤν֤٤Ǥ))

䵸ͭǡƤΤΤˡ䵸ͭǡ(byte ñ)ɬɬפޤϤ䵸ͭǡĹޤơ䵸ͭǡȤΤǤְͤ㤨Ƥȡ䵸ͭǡ갷ʤʤޤΤǡդɬפǤ(褯ΰĤǤʤߤˡ application Ǥ䵸ͭǡϸĹʤΤǡFUSEN  constructor ǴͤꤷƤޤ)

ޤ application Ǥ䵸ͭǡι application νλ˹Ԥ褦ˤƤޤΤǡoend_prc() ȯԤ򤷤ޤǤϡưβȤꤷޤ񤭹䵸ͭǡϡۤɤβȤΥץưǤƤƱΤΤѤޤʤλϵưȤλؤ¿Ȥ open ƤɬפϤޤ
(ʤߤˡ application Ͼʪ application ʤΤǹθɬפϤޤ󤬡淿 application ξ硢ưȤȤξϤɽƤ򹹿ʤФʤʤ⤢ޤξ硢oend_prc()  1 ʾͤȤʤꡢоݤȤĶ ID 򼨤Ƥޤ)


3.5. C++ ˤ BTRON  application γȯ

ߤγȯĶǤϡC++ Ѥ뤳ȤϤǤޤBTRON γ API  ɸ library  C ǵҤ줿ΤȤʤäƤޤ(ȯĶ sample  libcpp ȤΤ⤢ޤ application ǤϻѤƤʤᡢǤϼ夲ޤ)
Τᡢ㤨 C++ ȤäƤȤϸ¾ʬ C Ǥʾ塢ΤȤ˽ʬդɬפޤ
 application ϡ API  ɸ library ȤȤȤƺƤޤ(C++  library 򿷤뤳ȤŪȤƤޤ)ޤŪʲ˵󤲤ޤ( application ƳƤޤߤޤ)

	1. evt_loop()  exception ȴʤ
		libapp ˤ롢evt_loop() (ϡevt_proc())  C ǵҤƤޤΤᡢevent ؿ exception ȯƤ⡢ catch Ǥʤᡢevent loop ȴƤޤޤ
		԰դ event loop ζλˤʤޤΤǡ㳰ȯǽϡդɬפǤ
	2. panel ν exception ȴʤ
		⡢evt_loop() ξȳƱȤǤlibapp  panel ؿξ clsstdpnl() Ū˸Ƥɬפޤ(panel  system modal ǤꡢĤʤ¾Υɥ event Ϥʤ٤Ǥ)
		Τᡢclsstdpnl() ƤФʤ exception ȯȡpanel ĤäƤޤޤΤǡդǤ
	3. sub task  exception ȴʤ
		(Ķ¸Τޤ)cre_tsk() 줿 sub task  exception ȴȡ㳰 catch Ǥޤ
		Τᡢabort() ȯޤΤդɬפǤ

ɤ exception ФƤȤʤäƤޤC ǵҤƤ¤ꡢexception  catch ǤޤΤǡ԰դ loop νλȯƤޤޤǤ event ξȤƵҤƤޤevent ʳ library Ǥ C ǵҤƤΤФǤΤǡ library  callback ؿνϽʬդʤФʤޤ

3.5.1.  source  class ΰ̣礤

 source ڤ class ϰʲΤ褦ʬवƤޤ

main.h / main.cc
	C  MAIN() ʬˤʤޤMAIN() ΤߤȤƤ뤿ᡢclass ϻޤ󤬡application δʬԤޤ

appl.h / appl.cc
	WALLCHG_APPL Ȥ class ФʬǤ class  application δʬǤꡢMAIN() 椫졢¹Ԥޤ
	 class Ѵ줿硢 application λ뤳Ȥ̣褦ˤƤޤ
	ޤ application 롢ĤưŪ class object ϡ class 졢褦ˤƤޤ

fusen.h / fusen.cc
	FUSEN Ȥ class ФʬǤ class 䵸ͭǡνԤ٤ʬǤ
	 class ȡ䵸ͭǡưεǽ䵤ޤ䵸ͭǡؤν񤭹ߤŪ˸ƤӽФɬפ褦ˤƤޤ(destructor ǽ񤭹ߤϤޤ󤷡destructor μݤȿޤ)
	ޤ䵸ͭǡγƤ¾ application γƴؿǼѹݤ interface ޤ(ؤɤξ硢inline ؿ褦ˤƤޤ)

maintsk.h / maintsk.cc
	MAINTSK Ȥ class ФʬǤ class  main task ʬǤꡢevent loop Ԥ碌褦ˤƤޤ
	Ƽ window event μ䡢process  message μԤ褦ˤƤޤ

subtsk.h / subtsk.cc
	SUBTSK Ȥ class ФʬǤ class ϼ event ȯѤ sub task ʬǤ
	 class  object ¸ߤ event  sub task ¸ߤ̣褦ˤƤޤ

wallchg.h / wallchg.cc
	WALLCHG Ȥ class ФʬǤ class ɻѹˤΤ졢¹ԤΤȤƤޤ
	 MAINTSK 椫ΤߤǤꡢŪ졢Ѵ褦ˤƤޤ
	 class Ǥ /SYS/$$BGSCREEN.BOX ɤ߹ߤ䡢ξν񤭴wset_inf() ȯԤˤɻѹʤɤνԤ褦ˤƤޤ
	ޤɤ߹ʬǤϡstd::vector<T> Ѥ뤳ȤȤƤޤ(٤ʤ顢malloc() ΤޤޤΨȻפޤ)

sendmsg.h / sendmsg.cc
	SENDMSG Ȥ class ФʬǤ class  process  message Ԥ٤ʬǡstatic 줿Τޤ(Ū object ɬפȤޤ)
	 application ɬפ message ƹԤ褦ˤƤޤ

setuppnl.h / setuppnl.cc
	SETUPPNL Ȥ class ФʬǤ class ϼѥͥδԤ٤ʬǤꡢ class ¸ߤƤ¤ϡƱ panel ¸Ƥꡢpanel ȤƤ event ԤƤ֤Ǥ뤳Ȥ̣褦ˤƤޤ
	(libapp  panel ؿФ wrapper Τ褦ʷȤƤޤ)

cval.h
	CVAL Ȥ namespace ФʬǤ namespace ˤΤѤΤǤ

struct.h
	Ĥ struct ԤʬǤŪˡC δؿؤΰϤ(library ؤΰϤ)ԤɬפꡢĹŪ˻ȤƤǤˡ header 褦ˤƤޤ

val.h
	ѿѤޤ
	 application Ǥ WALLCHG_APPL  object ؤ pointer Τߤ򤷤Ƥޤ

dbox.h
	DBOX Ȥ namespace ФʬǤ namespace Ǥϡdatabox λֹ򡢳ʬ enum Ƕʬ褦ˤƤޤ

err.h
	WALLERR Ȥ namespace ФʬǤ namespace Ǥϡ application Ǥ error code ȤƹԤȤˤƤޤ

except.h
	Ƽ㳰Ԥޤ application Ǥϡʲ㳰Ƥޤ
	WALLCHG_EXCEPT
		 application Ǥ㳰δ class
	EXCEPT_EXECMSG
		ưˡ
	EXCEPT_INITERR
		application νǤ㳰
	EXCEPT_FUSEN
		䵸ͭǡ㳰
	EXCEPT_MAINTSK
		main task Ǥ㳰
	EXCEPT_SUBTSK
		 event ȯ sub task Ǥ㳰
	EXCEPT_WALLCHG
		ɻѹǤ㳰
	EXCEPT_SETUP
		ѥͥǤ㳰

macro.h
	macro Ǥ application Ǥϡ䵸ͭǡνͤΤߤƤޤ

debug.h
	debug  macro ʤɤǤdebug mesage ɽѤ printf() Ф macro 򤷤Ƥޤ
	compile option  -DDEBUG Ƥʤȡdebug message Фʤ褦ˤƤޤ




4. 䵭

 application Ͼʪ application Ǥ١ưνˤĤƤϡٸŪ˹Ԥ褦ˤƤޤ
淿 application ξ硢Ȥξν䡢ǡŽߵưξʤɡʪ٤Ƶưˡʣˤʤޤ application бǤϤդ [бʤưˡ] ȤƽʬƤޤϾʪ application ȸꤷƤ뤫餳Τ֤Ǥ

 application εưνλǡ淿 application ŬƤ⡢ưϤޤְ㤤ǤϤޤ(ʪưɤȽѹɬפޤ(WALLCHG_APPL  constructor ν))ǤȤν䡢ǡŽߵưξʤɤؤбϰڹθƤޤΤǡʬϿ˽񤭵ɬפޤ(ư񤭴ɬפޤ)
ǤΤǡ application ˤĤƤϡȤΥץưΤߤбμȤªƤ

