diff options
224 files changed, 20554 insertions, 16946 deletions
diff --git a/HOWTO/INSTALL.md b/HOWTO/INSTALL.md index 551ecdd224..447a23128f 100644 --- a/HOWTO/INSTALL.md +++ b/HOWTO/INSTALL.md @@ -568,6 +568,10 @@ as before, but the build process will take a much longer time. > automatically when `make` is invoked from `$ERL_TOP` with either the > `clean` target, or the default target. It is also automatically invoked > if `./otp_build remove_prebuilt_files` is invoked. +> +> If you need to verify the bootstrap beam files match the provided +> source files, use `./otp_build update_primary` to create a new commit that +> contains differences, if any exist. #### How to Build a Debug Enabled Erlang RunTime System #### diff --git a/OTP_VERSION b/OTP_VERSION index 3af035ac64..87c0f53ffe 100644 --- a/OTP_VERSION +++ b/OTP_VERSION @@ -1 +1 @@ -19.1.4 +19.1.6 diff --git a/configure.in b/configure.in index 6db83124be..a149acbb55 100644 --- a/configure.in +++ b/configure.in @@ -2,7 +2,7 @@ dnl Process this file with autoconf to produce a configure script. dnl %CopyrightBegin% dnl -dnl Copyright Ericsson AB 1998-2014. All Rights Reserved. +dnl Copyright Ericsson AB 1998-2016. All Rights Reserved. dnl dnl Licensed under the Apache License, Version 2.0 (the "License"); dnl you may not use this file except in compliance with the License. @@ -228,7 +228,10 @@ AS_HELP_STRING([--enable-kernel-poll], [enable kernel poll support]) AS_HELP_STRING([--disable-kernel-poll], [disable kernel poll support])) AC_ARG_ENABLE(sctp, -AS_HELP_STRING([--enable-sctp], [enable sctp support]) +AS_HELP_STRING([--enable-sctp], [enable sctp support (default) +to on demand load the SCTP library in runtime]) +AS_HELP_STRING([--enable-sctp=lib], [enable sctp support +to link against the SCTP library]) AS_HELP_STRING([--disable-sctp], [disable sctp support])) AC_ARG_ENABLE(hipe, diff --git a/erts/configure.in b/erts/configure.in index 69b9af3c8c..ad9a66126f 100644 --- a/erts/configure.in +++ b/erts/configure.in @@ -196,12 +196,18 @@ AS_HELP_STRING([--disable-kernel-poll], [disable kernel poll support]), AC_ARG_ENABLE(sctp, -AS_HELP_STRING([--enable-sctp], [enable sctp support (default)]) +AS_HELP_STRING([--enable-sctp], [enable sctp support (default) +to on demand load the SCTP library in runtime if needed]) +AS_HELP_STRING([--enable-sctp=lib], [enable sctp support +to link against the SCTP library]) AS_HELP_STRING([--disable-sctp], [disable sctp support]), -[ case "$enableval" in - no) enable_sctp=no ;; - *) enable_sctp=yes ;; - esac ], enable_sctp=unknown) +[ case "x$enableval" in + xno|xyes|xlib|x) + ;; + x*) + AC_MSG_ERROR("invalid value --enable-sctp=$enableval") + ;; + esac ]) AC_ARG_ENABLE(hipe, AS_HELP_STRING([--enable-hipe], [enable hipe support]) @@ -1726,8 +1732,9 @@ if test "x$enable_sctp" != "xno" ; then fi if test x"$ac_cv_header_netinet_sctp_h" = x"yes"; then - AC_CHECK_LIB(sctp, sctp_bindx) - AC_CHECK_FUNCS([sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs]) + AS_IF([test "x$enable_sctp" = "xlib"], + AC_CHECK_LIB(sctp, sctp_bindx)) + AC_CHECK_FUNCS([sctp_bindx sctp_peeloff sctp_getladdrs sctp_freeladdrs sctp_getpaddrs sctp_freepaddrs]) AC_CHECK_DECLS([SCTP_UNORDERED, SCTP_ADDR_OVER, SCTP_ABORT, SCTP_EOF, SCTP_SENDALL, SCTP_ADDR_CONFIRMED, SCTP_DELAYED_ACK_TIME, @@ -2787,6 +2794,23 @@ if test "$cross_compiling" != "yes" && test X${enable_hipe} != Xno; then fi fi +dnl Check to disable -fPIE and friends for HiPE on amd64 +if test X${enable_hipe} = Xyes && test X$ARCH = Xamd64; then + AC_TRY_COMPILE(, [#if defined(__pie__) || defined(__PIE__) + #error -fPIE is enabled by default + #endif], + [AC_MSG_NOTICE([No -fPIE enabled by default])], + [AC_MSG_WARN([Security feature -fPIE will be disabled for HiPE]) + STATIC_CFLAGS="-fno-PIE $STATIC_CFLAGS" + saved_LDFLAGS=$LDFLAGS + LDFLAGS="-no-pie $LDFLAGS" + AC_TRY_LINK(,, [], + [AC_MSG_WARN([Linked does not accept option -no-pie]) + LDFLAGS=$saved_LDFLAGS])]) + +fi + + if test X${enable_fp_exceptions} = Xauto ; then case $host_os in *linux*) diff --git a/erts/doc/src/erl.xml b/erts/doc/src/erl.xml index eb1d24cf12..f39b640c7e 100644 --- a/erts/doc/src/erl.xml +++ b/erts/doc/src/erl.xml @@ -250,6 +250,11 @@ environment variable <c><![CDATA[DISPLAY]]></c> set to <c><![CDATA[gin:0]]></c>.</p> </item> + <tag><c><![CDATA[-epmd_module Module]]></c> (init flag)</tag> + <item> + <p>Configures the module responsible to communicate to + <seealso marker="epmd">epmd</seealso>. Defaults to <c>erl_epmd</c>.</p> + </item> <tag><c><![CDATA[-eval Expr]]></c> (init flag)</tag> <item> <p>Makes <c><![CDATA[init]]></c> evaluate the expression diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml index 836a58a676..d8bf45c523 100644 --- a/erts/doc/src/erl_driver.xml +++ b/erts/doc/src/erl_driver.xml @@ -1916,9 +1916,9 @@ r = driver_async(myPort, &myKey, myData, myFunc); ]]></code> returned. Another thread can still be using the event object internally. To safely close an event object, call <c>driver_select</c> with <c>ERL_DRV_USE</c> and <c>on==0</c>, which - clears all events. Then call - <seealso marker="driver_entry#stop_select"> - <c>stop_select</c></seealso> when it is safe to close the event + clears all events and then either calls + <seealso marker="driver_entry#stop_select"><c>stop_select</c></seealso> + or schedules it to be called when it is safe to close the event object. <c>ERL_DRV_USE</c> is to be set together with the first event for an event object. It is harmless to set <c>ERL_DRV_USE</c> even if it already has been done. Clearing all events but keeping @@ -2039,7 +2039,7 @@ r = driver_async(myPort, &myKey, myData, myFunc); ]]></code> <fsummary>Set and get limits for busy port message queue.</fsummary> <desc> <marker id="erl_drv_busy_msgq_limits"></marker> - <p>Sets and gets limits that will be used for controling the + <p>Sets and gets limits that will be used for controlling the busy state of the port message queue.</p> <p>The port message queue is set into a busy state when the amount of command data queued on the @@ -2112,7 +2112,7 @@ r = driver_async(myPort, &myKey, myData, myFunc); ]]></code> It is used to identify the condition variable in planned future debug functionality.</p> <p>Returns <c>NULL</c> on failure. The driver - creating the condition variable is responsibile for + creating the condition variable is responsible for destroying it before the driver is unloaded.</p> <p>This function is thread-safe.</p> </desc> diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml index b0d25389fd..9646953518 100644 --- a/erts/doc/src/erlang.xml +++ b/erts/doc/src/erlang.xml @@ -9529,6 +9529,10 @@ timestamp() -> <type name="trace_info_item_result"/> <type name="trace_info_flag"/> <type name="trace_match_spec"/> + <type name="match_variable"/> + <type_desc name="match_variable"> + Approximation of '$1' | '$2' | '$3' | ... + </type_desc> <desc> <p>Returns trace information about a port, process, function, or event.</p> @@ -9660,6 +9664,10 @@ timestamp() -> </fsummary> <type name="trace_pattern_mfa"/> <type name="trace_match_spec"/> + <type_desc name="match_variable"> + Approximation of '$1' | '$2' | '$3' | ... + </type_desc> + <type name="match_variable"/> <desc> <p>The same as <seealso marker="#trace_pattern/3"> @@ -9672,6 +9680,10 @@ timestamp() -> <name name="trace_pattern" arity="3" clause_i="1"/> <fsummary>Set trace pattern for message sending.</fsummary> <type name="trace_match_spec"/> + <type name="match_variable"/> + <type_desc name="match_variable"> + Approximation of '$1' | '$2' | '$3' | ... + </type_desc> <desc> <p>Sets trace pattern for <em>message sending</em>. Must be combined with @@ -9739,6 +9751,10 @@ timestamp() -> <name name="trace_pattern" arity="3" clause_i="2"/> <fsummary>Set trace pattern for tracing of message receiving.</fsummary> <type name="trace_match_spec"/> + <type name="match_variable"/> + <type_desc name="match_variable"> + Approximation of '$1' | '$2' | '$3' | ... + </type_desc> <desc> <p>Sets trace pattern for <em>message receiving</em>. Must be combined with @@ -9809,6 +9825,10 @@ timestamp() -> <type name="trace_pattern_mfa"/> <type name="trace_match_spec"/> <type name="trace_pattern_flag"/> + <type name="match_variable"/> + <type_desc name="match_variable"> + Approximation of '$1' | '$2' | '$3' | ... + </type_desc> <desc> <p>Enables or disables <em>call tracing</em> for one or more functions. Must be combined with diff --git a/erts/doc/src/notes.xml b/erts/doc/src/notes.xml index 412675fd2b..dd260f2d1f 100644 --- a/erts/doc/src/notes.xml +++ b/erts/doc/src/notes.xml @@ -32,6 +32,50 @@ <p>This document describes the changes made to the ERTS application.</p> +<section><title>Erts 8.1.1</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + The emulator got a dynamic library dependency towards + libsctp, which on Linux was not intended since the + emulator there loads and resolves the needed sctp + functions in runtime. This has been fixed and a configure + switch --enable-sctp=lib has been added for those who + want such a library dependency.</p> + <p> + Own Id: OTP-13956 Aux Id: ERL-262, ERL-133 </p> + </item> + <item> + <p> + Fix SIGUSR1 crashdump generation</p> + <p> + Do not generate a core when a crashdump is asked for.</p> + <p> + Own Id: OTP-13997</p> + </item> + <item> + <p>The new functions in <c>code</c> that allows loading + of many modules at once had a performance problem. While + executing a helper function in the <c>erl_prim_loader</c> + process, garbage messages were produced. The garbages + messages were ignored and ultimately discarded, but there + would be a negative impact on performance and memory + usage. The number of garbage message depended on both the + number of modules to be loaded and the length of the code + path.</p> + <p>The functions affected of this problem were: + <c>atomic_load/1</c>, <c>ensure_modules_loaded/1</c>, and + <c>prepare_loading/1</c>.</p> + <p> + Own Id: OTP-14009</p> + </item> + </list> + </section> + +</section> + <section><title>Erts 8.1</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in index e0260205e3..8772befe27 100644 --- a/erts/emulator/Makefile.in +++ b/erts/emulator/Makefile.in @@ -49,6 +49,7 @@ CREATE_DIRS= LDFLAGS=@LDFLAGS@ ARFLAGS=rc OMIT_OMIT_FP=no +TYPE_LIBS= DIRTY_SCHEDULER_SUPPORT=@DIRTY_SCHEDULER_SUPPORT@ NEW_PURGE_STRATEGY=@NEW_PURGE_STRATEGY@ @@ -90,7 +91,7 @@ PURIFY = TYPEMARKER = .gcov TYPE_FLAGS = $(DEBUG_CFLAGS) -DERTS_GCOV -DNO_JUMP_TABLE -fprofile-arcs -ftest-coverage -O0 -DERTS_CAN_INLINE=0 -DERTS_INLINE= ifneq ($(findstring solaris,$(TARGET)),solaris) -LIBS += -lgcov +TYPE_LIBS = -lgcov endif ENABLE_ALLOC_TYPE_VARS += debug else @@ -146,6 +147,8 @@ endif endif endif +LIBS += $(TYPE_LIBS) + comma:=, space:= space+= @@ -931,7 +934,7 @@ $(OBJDIR)/%.o: hipe/%.c $(V_CC) $(subst O2,O3, $(CFLAGS)) $(INCLUDES) -c $< -o $@ $(BINDIR)/hipe_mkliterals$(TF_MARKER): $(OBJDIR)/hipe_mkliterals.o - $(ld_verbose)$(CC) $(CFLAGS) $(INCLUDES) -o $@ $< + $(ld_verbose)$(CC) $(LDFLAGS) -o $@ $< $(TYPE_LIBS) $(OBJDIR)/hipe_mkliterals.o: $(HIPE_ASM) $(TTF_DIR)/erl_alloc_types.h $(DTRACE_HEADERS) \ $(TTF_DIR)/OPCODES-GENERATED $(TARGET)/TABLES-GENERATED diff --git a/erts/emulator/beam/beam_bif_load.c b/erts/emulator/beam/beam_bif_load.c index 5969197168..8af7703f51 100644 --- a/erts/emulator/beam/beam_bif_load.c +++ b/erts/emulator/beam/beam_bif_load.c @@ -1623,10 +1623,10 @@ erts_purge_state_add_fun(ErlFunEntry *fe) } Export * -erts_suspend_process_on_pending_purge_lambda(Process *c_p) +erts_suspend_process_on_pending_purge_lambda(Process *c_p, ErlFunEntry* fe) { erts_smp_mtx_lock(&purge_state.mtx); - if (is_value(purge_state.module)) { + if (purge_state.module == fe->module) { /* * The process c_p is about to call a fun in the code * that we are trying to purge. Suspend it and call diff --git a/erts/emulator/beam/beam_emu.c b/erts/emulator/beam/beam_emu.c index ef4cdf9d5a..3be5c0d24c 100644 --- a/erts/emulator/beam/beam_emu.c +++ b/erts/emulator/beam/beam_emu.c @@ -6555,7 +6555,7 @@ call_fun(Process* p, /* Current process. */ * and let it try again when the purge operation is * done (may succeed or not). */ - ep = erts_suspend_process_on_pending_purge_lambda(p); + ep = erts_suspend_process_on_pending_purge_lambda(p, fe); ASSERT(ep); } else { diff --git a/erts/emulator/beam/beam_load.h b/erts/emulator/beam/beam_load.h index 1200bb9c6f..9be5e14e40 100644 --- a/erts/emulator/beam/beam_load.h +++ b/erts/emulator/beam/beam_load.h @@ -124,7 +124,8 @@ int erts_is_module_native(BeamCodeHeader* code); void erts_beam_bif_load_init(void); struct erl_fun_entry; void erts_purge_state_add_fun(struct erl_fun_entry *fe); -Export *erts_suspend_process_on_pending_purge_lambda(Process *c_p); +Export *erts_suspend_process_on_pending_purge_lambda(Process *c_p, + struct erl_fun_entry*); /* * Layout of the line table. diff --git a/erts/emulator/beam/erl_bif_trace.c b/erts/emulator/beam/erl_bif_trace.c index 66e5146da0..96275eb228 100644 --- a/erts/emulator/beam/erl_bif_trace.c +++ b/erts/emulator/beam/erl_bif_trace.c @@ -512,7 +512,7 @@ start_trace(Process *c_p, ErtsTracer tracer, && !ERTS_TRACER_COMPARE(ERTS_TRACER(port), tracer)) { /* This tracee is already being traced, and not by the * tracer to be */ - if (erts_is_tracer_enabled(tracer, common)) { + if (erts_is_tracer_enabled(ERTS_TRACER(port), common)) { /* The tracer is still in use */ return 1; } @@ -715,8 +715,8 @@ Eterm erts_internal_trace_3(BIF_ALIST_3) Process* tracee_p = erts_pix2proc(i); if (! tracee_p) continue; - start_trace(p, tracer, &tracee_p->common, on, mask); - matches++; + if (!start_trace(p, tracer, &tracee_p->common, on, mask)) + matches++; } } if (ports || mods) { @@ -730,8 +730,8 @@ Eterm erts_internal_trace_3(BIF_ALIST_3) state = erts_atomic32_read_nob(&tracee_port->state); if (state & ERTS_PORT_SFLGS_DEAD) continue; - start_trace(p, tracer, &tracee_port->common, on, mask); - matches++; + if (!start_trace(p, tracer, &tracee_port->common, on, mask)) + matches++; } } } diff --git a/erts/emulator/beam/erl_fun.c b/erts/emulator/beam/erl_fun.c index c639ba623f..5258d83a18 100644 --- a/erts/emulator/beam/erl_fun.c +++ b/erts/emulator/beam/erl_fun.c @@ -236,7 +236,6 @@ erts_fun_purge_abort_prepare(ErlFunEntry **funs, Uint no) ErlFunEntry *fe = funs[ix]; if (fe->address == unloaded_fun) fe->address = fe->pend_purge_address; - fe->pend_purge_address = NULL; } } diff --git a/erts/emulator/hipe/hipe_bif0.c b/erts/emulator/hipe/hipe_bif0.c index 3336fded7a..dcb6c35bfa 100644 --- a/erts/emulator/hipe/hipe_bif0.c +++ b/erts/emulator/hipe/hipe_bif0.c @@ -1476,6 +1476,10 @@ int hipe_find_mfa_from_ra(const void *ra, Eterm *m, Eterm *f, unsigned int *a) struct hipe_mfa_info **bucket; unsigned int i, nrbuckets; + if (hipe_is_ra_mode_switch(ra)) { + return 0; + } + /* Note about locking: the table is only updated from the loader, which runs with the rest of the system suspended. */ /* XXX: alas not true; see comment at hipe_mfa_info_table.lock */ diff --git a/erts/emulator/hipe/hipe_mode_switch.h b/erts/emulator/hipe/hipe_mode_switch.h index c40077d558..e54b81cf78 100644 --- a/erts/emulator/hipe/hipe_mode_switch.h +++ b/erts/emulator/hipe/hipe_mode_switch.h @@ -64,6 +64,7 @@ Eterm hipe_build_stacktrace(Process *p, struct StackTrace *s); ERTS_GLB_INLINE void hipe_reserve_beam_trap_frame(Process*, Eterm reg[], unsigned arity); ERTS_GLB_INLINE void hipe_unreserve_beam_trap_frame(Process*); +ERTS_GLB_INLINE int hipe_is_ra_mode_switch(const void* ra); extern Uint hipe_beam_pc_return[]; extern Uint hipe_beam_pc_throw[]; @@ -112,6 +113,11 @@ ERTS_GLB_INLINE void hipe_unreserve_beam_trap_frame(Process *p) p->stop += 2; } +ERTS_GLB_INLINE int hipe_is_ra_mode_switch(const void* ra) +{ + return ra == nbif_return; +} + #endif /* ERTS_GLB_INLINE_INCL_FUNC_DEF */ #endif /* ASM */ diff --git a/erts/emulator/sys/unix/sys.c b/erts/emulator/sys/unix/sys.c index b0e623a5b9..99e0aea4b5 100644 --- a/erts/emulator/sys/unix/sys.c +++ b/erts/emulator/sys/unix/sys.c @@ -672,7 +672,7 @@ sigusr1_exit(void) } prepare_crash_dump(secs); - erts_exit(ERTS_ERROR_EXIT, "Received SIGUSR1\n"); + erts_exit(ERTS_DUMP_EXIT, "Received SIGUSR1\n"); } #ifdef ETHR_UNUSABLE_SIGUSRX diff --git a/erts/emulator/test/port_SUITE.erl b/erts/emulator/test/port_SUITE.erl index 4323849465..d4e77d634a 100644 --- a/erts/emulator/test/port_SUITE.erl +++ b/erts/emulator/test/port_SUITE.erl @@ -976,21 +976,21 @@ try_bad_env(Env) -> %% Test that we can handle a very very large environment gracefully. huge_env(Config) when is_list(Config) -> ct:timetrap({minutes, 2}), - Vars = case os:type() of - {win32,_} -> 500; - _ -> - %% We create a huge environment, - %% 20000 variables is about 25MB - %% which seems to be the limit on Linux. - 20000 - end, + {Vars, Cmd} = case os:type() of + {win32,_} -> {500, "cmd /q /c ls"}; + _ -> + %% We create a huge environment, + %% 20000 variables is about 25MB + %% which seems to be the limit on Linux. + {20000, "ls"} + end, Env = [{[$a + I div (25*25*25*25) rem 25, $a + I div (25*25*25) rem 25, $a + I div (25*25) rem 25, $a+I div 25 rem 25, $a+I rem 25], lists:duplicate(100,$a+I rem 25)} || I <- lists:seq(1,Vars)], - try erlang:open_port({spawn,"ls"},[exit_status, {env, Env}]) of + try erlang:open_port({spawn,Cmd},[exit_status, {env, Env}]) of P -> receive {P, {exit_status,N}} = M -> @@ -1009,7 +1009,10 @@ huge_env(Config) when is_list(Config) -> %% Test to spawn program with command payload buffer %% just around pipe capacity (9f779819f6bda734c5953468f7798) pipe_limit_env(Config) when is_list(Config) -> - Cmd = "true", + Cmd = case os:type() of + {win32,_} -> "cmd /q /c true"; + _ -> "true" + end, CmdSize = command_payload_size(Cmd), Limits = [4096, 16384, 65536], % Try a couple of common pipe buffer sizes @@ -1026,7 +1029,7 @@ pipe_limit_env_do(Bytes, Cmd, CmdSize) -> try erlang:open_port({spawn,Cmd},[exit_status, {env, Env}]) of P -> receive - {P, {exit_status,N}} = M -> + {P, {exit_status,N}} -> %% Bug caused exit_status 150 (EINVAL+128) 0 = N end diff --git a/erts/emulator/test/trace_SUITE.erl b/erts/emulator/test/trace_SUITE.erl index da6a6bdea4..f846b0f4b9 100644 --- a/erts/emulator/test/trace_SUITE.erl +++ b/erts/emulator/test/trace_SUITE.erl @@ -30,7 +30,7 @@ procs_trace/1, dist_procs_trace/1, procs_new_trace/1, suspend/1, mutual_suspend/1, suspend_exit/1, suspender_exit/1, suspend_system_limit/1, suspend_opts/1, suspend_waiting/1, - new_clear/1, existing_clear/1, + new_clear/1, existing_clear/1, tracer_die/1, set_on_spawn/1, set_on_first_spawn/1, cpu_timestamp/1, set_on_link/1, set_on_first_link/1, system_monitor_args/1, more_system_monitor_args/1, @@ -54,7 +54,7 @@ all() -> send_trace, procs_trace, dist_procs_trace, suspend, mutual_suspend, suspend_exit, suspender_exit, suspend_system_limit, suspend_opts, suspend_waiting, - new_clear, existing_clear, set_on_spawn, + new_clear, existing_clear, tracer_die, set_on_spawn, set_on_first_spawn, set_on_link, set_on_first_link, system_monitor_args, more_system_monitor_args, system_monitor_long_gc_1, @@ -1636,6 +1636,34 @@ existing_clear(Config) when is_list(Config) -> ok. +%% Test that erlang:trace/3 can be called on processes where the +%% tracer has died. OTP-13928 +tracer_die(Config) when is_list(Config) -> + Proc = spawn(fun receiver/0), + + Tracer = spawn(fun receiver/0), + timer:sleep(1), + N = erlang:trace(existing, true, [send, {tracer, Tracer}]), + {flags, [send]} = erlang:trace_info(Proc, flags), + {tracer, Tracer} = erlang:trace_info(Proc, tracer), + exit(Tracer, die), + + Tracer2 = spawn(fun receiver/0), + timer:sleep(1), + N = erlang:trace(existing, true, [send, {tracer, Tracer2}]), + {flags, [send]} = erlang:trace_info(Proc, flags), + {tracer, Tracer2} = erlang:trace_info(Proc, tracer), + exit(Tracer2, die), + + Tracer3 = spawn(fun receiver/0), + timer:sleep(1), + 1 = erlang:trace(Proc, true, [send, {tracer, Tracer3}]), + {flags, [send]} = erlang:trace_info(Proc, flags), + {tracer, Tracer3} = erlang:trace_info(Proc, tracer), + exit(Tracer3, die), + + ok. + %% Test that an invalid flag cause badarg bad_flag(Config) when is_list(Config) -> %% A bad flag could deadlock the SMP emulator in erts-5.5 diff --git a/erts/etc/unix/etp-commands.in b/erts/etc/unix/etp-commands.in index e2bf302cca..1a4f641301 100644 --- a/erts/etc/unix/etp-commands.in +++ b/erts/etc/unix/etp-commands.in @@ -52,7 +52,7 @@ document etp-help % etpf-cons, etpf-boxed, % % Special commands for not really terms: -% etp-mfa, etp-cp, +% etp-mfa, etp-cp, etp-disasm, % etp-msgq, etpf-msgq, % etp-stacktrace, etp-stackdump, etpf-stackdump, etp-dictdump % etp-process-info, etp-process-memory-info @@ -1090,12 +1090,10 @@ document etp-mfa %--------------------------------------------------------------------------- end - - -define etp-cp-1 +define etp-cp-func-info-1 # Args: Eterm cp # -# Non-reentrant +# Non-reentrant, takes cp, sets $etp_cp_p to MFA in func_info # set $etp_cp = (Eterm)($arg0) set $etp_ranges = &r[(int)the_active_code_index] @@ -1137,8 +1135,21 @@ define etp-cp-1 end end if $etp_cp_p + set $cp_cp_p_offset = ($etp_cp-((Eterm)($etp_cp_p-2))) + else + set $cp_cp_p_offset = 0 + end +end + +define etp-cp-1 +# Args: Eterm cp +# +# Non-reentrant +# + etp-cp-func-info-1 $arg0 + if $etp_cp_p printf "#Cp" - etp-mfa-1 ($etp_cp_p) ($etp_cp-((Eterm)($etp_cp_p-2))) + etp-mfa-1 $etp_cp_p $cp_cp_p_offset else if $etp_cp == beam_apply+1 printf "#Cp<terminate process normally>" @@ -2478,11 +2489,58 @@ end document etp-schedulers %--------------------------------------------------------------------------- % etp-schedulers -% +% % Print misc info about all schedulers %--------------------------------------------------------------------------- end +define etp-disasm-1 + set $code_ptr = ((BeamInstr*)$arg0) + set $addr = *$code_ptr + set $i = 0 + while $i < (sizeof(opc) / sizeof(OpEntry)) + if $addr == beam_ops[$i] + printf "%s %d", opc[$i].name, opc[$i].sz + set $next_i = $code_ptr + opc[$i].sz + set $i += 4999 + end + set $i++ + end +end + +define etp-disasm + etp-cp-func-info-1 $arg0 + if $etp_cp_p == 0 + printf "invalid argument" + else + etp-mfa-1 $etp_cp_p $cp_cp_p_offset + printf ": " + etp-disasm-1 $arg0 + printf "\r\n" + while $next_i < ((BeamInstr*)$arg1) + set $prev_i = $next_i + etp-cp-func-info-1 $next_i + etp-mfa-1 $etp_cp_p $cp_cp_p_offset + printf ": " + etp-disasm-1 $next_i + if $prev_i == $next_i + # ptr did not advance, we are inside some strange opcode with argument + set $next_i++ + printf "instr argument" + end + printf "\r\n" + end + end +end + +document etp-disasm +%--------------------------------------------------------------------------- +% etp-disasm StartI EndI +% +% Disassemble the code inbetween StartI and EndI +%--------------------------------------------------------------------------- +end + define etp-migration-info set $minfo = (ErtsMigrationPaths *) *((UWord *) &erts_migration_paths) set $rq_ix = 0 diff --git a/erts/preloaded/ebin/erl_prim_loader.beam b/erts/preloaded/ebin/erl_prim_loader.beam Binary files differindex 796cbd74c5..64d1a70e61 100644 --- a/erts/preloaded/ebin/erl_prim_loader.beam +++ b/erts/preloaded/ebin/erl_prim_loader.beam diff --git a/erts/preloaded/ebin/erlang.beam b/erts/preloaded/ebin/erlang.beam Binary files differindex c68debeabc..fbbfefa462 100644 --- a/erts/preloaded/ebin/erlang.beam +++ b/erts/preloaded/ebin/erlang.beam diff --git a/erts/preloaded/ebin/erts_internal.beam b/erts/preloaded/ebin/erts_internal.beam Binary files differindex 227b62b7d3..2a7bfb8b86 100644 --- a/erts/preloaded/ebin/erts_internal.beam +++ b/erts/preloaded/ebin/erts_internal.beam diff --git a/erts/preloaded/src/erl_prim_loader.erl b/erts/preloaded/src/erl_prim_loader.erl index b3ec73a60e..1d09aeded9 100644 --- a/erts/preloaded/src/erl_prim_loader.erl +++ b/erts/preloaded/src/erl_prim_loader.erl @@ -555,17 +555,18 @@ efile_gm_get(Paths, Mod, ParentRef, Process) -> efile_gm_get_1([P|Ps], File0, Mod, {Parent,Ref}=PR, Process) -> File = join(P, File0), - Res = try prim_file:read_file(File) of - {ok,Bin} -> - gm_process(Mod, File, Bin, Process); - Error -> - _ = check_file_result(get_modules, File, Error), - efile_gm_get_1(Ps, File0, Mod, PR, Process) - catch - _:Reason -> - {error,{crash,Reason}} - end, - Parent ! {Ref,Mod,Res}; + try prim_file:read_file(File) of + {ok,Bin} -> + Res = gm_process(Mod, File, Bin, Process), + Parent ! {Ref,Mod,Res}; + Error -> + _ = check_file_result(get_modules, File, Error), + efile_gm_get_1(Ps, File0, Mod, PR, Process) + catch + _:Reason -> + Res = {error,{crash,Reason}}, + Parent ! {Ref,Mod,Res} + end; efile_gm_get_1([], _, Mod, {Parent,Ref}, _Process) -> Parent ! {Ref,Mod,{error,enoent}}. diff --git a/erts/preloaded/src/erlang.erl b/erts/preloaded/src/erlang.erl index 652a954807..8771089b65 100644 --- a/erts/preloaded/src/erlang.erl +++ b/erts/preloaded/src/erlang.erl @@ -2408,10 +2408,11 @@ term_to_binary(_Term, _Options) -> tl(_List) -> erlang:nif_error(undefined). +-type match_variable() :: atom(). % Approximation of '$1' | '$2' | ... -type trace_pattern_mfa() :: {atom(),atom(),arity() | '_'} | on_load. -type trace_match_spec() :: - [{[term()] | '_' ,[term()],[term()]}]. + [{[term()] | '_' | match_variable() ,[term()],[term()]}]. -spec erlang:trace_pattern(MFA, MatchSpec) -> non_neg_integer() when MFA :: trace_pattern_mfa() | send | 'receive', diff --git a/erts/preloaded/src/erts_internal.erl b/erts/preloaded/src/erts_internal.erl index 6aae5ba38c..f4518c4008 100644 --- a/erts/preloaded/src/erts_internal.erl +++ b/erts/preloaded/src/erts_internal.erl @@ -438,10 +438,11 @@ microstate_accounting(Ref, Threads) -> trace(_PidSpec, _How, _FlagList) -> erlang:nif_error(undefined). +-type match_variable() :: atom(). % Approximation of '$1' | '$2' | ... -type trace_pattern_mfa() :: {atom(),atom(),arity() | '_'} | on_load. -type trace_match_spec() :: - [{[term()] | '_' ,[term()],[term()]}]. + [{[term()] | '_' | match_variable() ,[term()],[term()]}]. -spec trace_pattern(MFA, MatchSpec, FlagList) -> non_neg_integer() when MFA :: trace_pattern_mfa(), diff --git a/erts/vsn.mk b/erts/vsn.mk index ad9148f61f..317d731cd7 100644 --- a/erts/vsn.mk +++ b/erts/vsn.mk @@ -18,7 +18,7 @@ # %CopyrightEnd% # -VSN = 8.1 +VSN = 8.1.1 # Port number 4365 in 4.2 # Port number 4366 in 4.3 diff --git a/lib/common_test/src/Makefile b/lib/common_test/src/Makefile index 0f9e044f9e..9d751996ad 100644 --- a/lib/common_test/src/Makefile +++ b/lib/common_test/src/Makefile @@ -80,6 +80,7 @@ MODULES= \ ct_groups \ ct_property_test \ ct_release_test \ + ct_default_gl \ erl2html2 \ test_server_ctrl \ test_server_gl \ diff --git a/lib/common_test/src/ct_default_gl.erl b/lib/common_test/src/ct_default_gl.erl new file mode 100644 index 0000000000..d1b52e5f4f --- /dev/null +++ b/lib/common_test/src/ct_default_gl.erl @@ -0,0 +1,83 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012-2016. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% + +-module(ct_default_gl). +-export([start_link/1, stop/0]). + +-export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2]). + +%% start_link() +%% Start a new group leader process. +start_link(ParentGL) -> + do_start(ParentGL, 3). + +do_start(_ParentGL, 0) -> + exit({?MODULE,startup}); +do_start(ParentGL, Retries) -> + case whereis(?MODULE) of + undefined -> + case gen_server:start_link(?MODULE, [ParentGL], []) of + {ok,Pid} -> + {ok,Pid}; + Other -> + Other + end; + Pid -> + exit(Pid, kill), + timer:sleep(1000), + do_start(ParentGL, Retries-1) + end. + +%% stop(Pid) +%% Stop a group leader process. +stop() -> + gen_server:cast(whereis(?MODULE), stop). + + +%%% Internal functions. + +init([ParentGL]) -> + register(?MODULE, self()), + {ok,#{parent_gl_pid => ParentGL, + parent_gl_monitor => erlang:monitor(process,ParentGL)}}. + +handle_cast(stop, St) -> + {stop,normal,St}. + +%% If the parent group leader dies, fall back on using the local user process +handle_info({'DOWN',Ref,process,_,_Reason}, #{parent_gl_monitor := Ref} = St) -> + User = whereis(user), + {noreply,St#{parent_gl_pid => User, + parent_gl_monitor => erlang:monitor(process,User)}}; + +handle_info({io_request,_From,_ReplyAs,_Req} = IoReq, + #{parent_gl_pid := ParentGL} = St) -> + ParentGL ! IoReq, + {noreply,St}; + +handle_info(Msg, St) -> + io:format(user, "Common Test Group Leader process got: ~tp~n", [Msg]), + {noreply,St}. + +handle_call(_Req, _From, St) -> + {reply,ok,St}. + +terminate(_, _) -> + ok. diff --git a/lib/common_test/src/ct_framework.erl b/lib/common_test/src/ct_framework.erl index 104515e57e..291a4d716c 100644 --- a/lib/common_test/src/ct_framework.erl +++ b/lib/common_test/src/ct_framework.erl @@ -307,7 +307,7 @@ add_defaults(Mod,Func, GroupPath) -> "~w:suite/0 failed: ~p~n", [Suite,Reason]), io:format(ErrStr, []), - io:format(user, ErrStr, []), + io:format(?def_gl, ErrStr, []), {suite0_failed,{exited,Reason}}; SuiteInfo when is_list(SuiteInfo) -> case lists:all(fun(E) when is_tuple(E) -> true; @@ -330,7 +330,7 @@ add_defaults(Mod,Func, GroupPath) -> "~w:suite/0: ~p~n", [Suite,SuiteInfo]), io:format(ErrStr, []), - io:format(user, ErrStr, []), + io:format(?def_gl, ErrStr, []), {suite0_failed,bad_return_value} end; SuiteInfo -> @@ -338,7 +338,7 @@ add_defaults(Mod,Func, GroupPath) -> "Invalid return value from " "~w:suite/0: ~p~n", [Suite,SuiteInfo]), io:format(ErrStr, []), - io:format(user, ErrStr, []), + io:format(?def_gl, ErrStr, []), {suite0_failed,bad_return_value} end. @@ -366,7 +366,7 @@ add_defaults1(Mod,Func, GroupPath, SuiteInfo) -> "~w:group(~w): ~p~n", [Mod,GrName,BadGr0Val]), io:format(Gr0ErrStr, []), - io:format(user, Gr0ErrStr, []), + io:format(?def_gl, Gr0ErrStr, []), {group0_failed,bad_return_value}; _ -> Args = if Func == init_per_group ; Func == end_per_group -> @@ -388,7 +388,7 @@ add_defaults1(Mod,Func, GroupPath, SuiteInfo) -> "~w:~w/0: ~p~n", [Mod,Func,BadTC0Val]), io:format(TC0ErrStr, []), - io:format(user, TC0ErrStr, []), + io:format(?def_gl, TC0ErrStr, []), {testcase0_failed,bad_return_value}; _ -> %% let test case info (also for all config funcs) override @@ -927,7 +927,7 @@ error_notification(Mod,Func,_Args,{Error,Loc}) -> Div = "~n- - - - - - - - - - - - - - - - - - - " "- - - - - - - - - - - - - - - - - - - - -~n", ErrorStr2 = io_lib:format(ErrorFormat, ErrorArgs), - io:format(user, lists:concat([Div,ErrorStr2,Div,"~n"]), + io:format(?def_gl, lists:concat([Div,ErrorStr2,Div,"~n"]), []), Link = "\n\n<a href=\"#end\">" @@ -1133,7 +1133,7 @@ get_all(Mod, ConfTests) -> ErrStr = io_lib:format("~n*** ERROR *** " "~w:all/0 failed: ~p~n", [Mod,ExitReason]), - io:format(user, ErrStr, []), + io:format(?def_gl, ErrStr, []), %% save the error info so it doesn't get printed twice ct_util:set_testdata_async({{error_in_suite,Mod}, ExitReason}); diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl index 9282a9f81d..0daed60dba 100644 --- a/lib/common_test/src/ct_logs.erl +++ b/lib/common_test/src/ct_logs.erl @@ -531,8 +531,13 @@ tc_print(Category,Importance,Format,Args) -> Val end, if Importance >= (100-VLvl) -> - Head = get_heading(Category), - io:format(user, lists:concat([Head,Format,"\n\n"]), Args), + Str = lists:concat([get_heading(Category),Format,"\n\n"]), + try + io:format(?def_gl, Str, Args) + catch + %% default group leader probably not started, or has stopped + _:_ -> io:format(user, Str, Args) + end, ok; true -> ok @@ -679,7 +684,7 @@ logger(Parent, Mode, Verbosity) -> PrivFilesDestRun = [filename:join(AbsDir, F) || F <- PrivFiles], case copy_priv_files(PrivFilesSrc, PrivFilesDestTop) of {error,Src1,Dest1,Reason1} -> - io:format(user, "ERROR! "++ + io:format(?def_gl, "ERROR! "++ "Priv file ~p could not be copied to ~p. "++ "Reason: ~p~n", [Src1,Dest1,Reason1]), @@ -687,7 +692,7 @@ logger(Parent, Mode, Verbosity) -> ok -> case copy_priv_files(PrivFilesSrc, PrivFilesDestRun) of {error,Src2,Dest2,Reason2} -> - io:format(user, + io:format(?def_gl, "ERROR! "++ "Priv file ~p could not be copied to ~p. " ++"Reason: ~p~n", diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl index fbb9c7ab60..a049ef5695 100644 --- a/lib/common_test/src/ct_run.erl +++ b/lib/common_test/src/ct_run.erl @@ -2155,8 +2155,8 @@ continue(_MakeErrors, true) -> false; continue(_MakeErrors, _AbortIfMissingSuites) -> io:nl(), - OldGl = group_leader(), - case set_group_leader_same_as_shell() of + OldGL = group_leader(), + case set_group_leader_same_as_shell(OldGL) of true -> S = self(), io:format("Failed to compile or locate one " @@ -2172,7 +2172,7 @@ continue(_MakeErrors, _AbortIfMissingSuites) -> S ! false end end), - group_leader(OldGl, self()), + group_leader(OldGL, self()), receive R when R==true; R==false -> R after 15000 -> @@ -2184,7 +2184,9 @@ continue(_MakeErrors, _AbortIfMissingSuites) -> true end. -set_group_leader_same_as_shell() -> +set_group_leader_same_as_shell(OldGL) -> + %% find the group leader process on the node in a dirty fashion + %% (check initial function call and look in the process dictionary) GS2or3 = fun(P) -> case process_info(P,initial_call) of {initial_call,{group,server,X}} when X == 2 ; X == 3 -> @@ -2197,7 +2199,10 @@ set_group_leader_same_as_shell() -> true == lists:keymember(shell,1, element(2,process_info(P,dictionary)))] of [GL|_] -> - group_leader(GL, self()); + %% check if started from remote node (skip interaction) + if node(OldGL) /= node(GL) -> false; + true -> group_leader(GL, self()) + end; [] -> false end. diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl index 82a8743cf0..4d3a2ae7e3 100644 --- a/lib/common_test/src/ct_util.erl +++ b/lib/common_test/src/ct_util.erl @@ -188,6 +188,8 @@ do_start(Parent, Mode, LogDir, Verbosity) -> ok end, + ct_default_gl:start_link(group_leader()), + {StartTime,TestLogDir} = ct_logs:init(Mode, Verbosity), ct_event:notify(#event{name=test_start, @@ -474,6 +476,7 @@ loop(Mode,TestData,StartDir) -> ct_logs:close(Info, StartDir), ct_event:stop(), ct_config:stop(), + ct_default_gl:stop(), ok = file:set_cwd(StartDir), return(From, Info); {Ref, _Msg} when is_reference(Ref) -> @@ -926,7 +929,8 @@ warn_duplicates(Suites) -> [] -> ok; _ -> - io:format(user,"~nWARNING! Deprecated function: ~w:sequences/0.~n" + io:format(?def_gl, + "~nWARNING! Deprecated function: ~w:sequences/0.~n" " Use group with sequence property instead.~n",[Mod]) end end, @@ -980,12 +984,12 @@ get_profile_data(Profile, Key, StartDir) -> end, case Result of {error,enoent} when Profile /= default -> - io:format(user, "~nERROR! Missing profile file ~p~n", [File]), + io:format(?def_gl, "~nERROR! Missing profile file ~p~n", [File]), undefined; {error,enoent} when Profile == default -> undefined; {error,Reason} -> - io:format(user,"~nERROR! Error in profile file ~p: ~p~n", + io:format(?def_gl,"~nERROR! Error in profile file ~p: ~p~n", [WhichFile,Reason]), undefined; {ok,Data} -> @@ -995,7 +999,7 @@ get_profile_data(Profile, Key, StartDir) -> _ when is_list(Data) -> Data; _ -> - io:format(user, + io:format(?def_gl, "~nERROR! Invalid profile data in ~p~n", [WhichFile]), [] @@ -1082,10 +1086,10 @@ open_url(iexplore, Args, URL) -> Path = proplists:get_value(default, Paths), [Cmd | _] = string:tokens(Path, "%"), Cmd1 = Cmd ++ " " ++ Args ++ " " ++ URL, - io:format(user, "~nOpening ~ts with command:~n ~ts~n", [URL,Cmd1]), + io:format(?def_gl, "~nOpening ~ts with command:~n ~ts~n", [URL,Cmd1]), open_port({spawn,Cmd1}, []); _ -> - io:format("~nNo path to iexplore.exe~n",[]) + io:format(?def_gl, "~nNo path to iexplore.exe~n",[]) end, win32reg:close(R), ok; @@ -1095,6 +1099,6 @@ open_url(Prog, Args, URL) -> is_list(Prog) -> Prog end, Cmd = ProgStr ++ " " ++ Args ++ " " ++ URL, - io:format(user, "~nOpening ~ts with command:~n ~ts~n", [URL,Cmd]), + io:format(?def_gl, "~nOpening ~ts with command:~n ~ts~n", [URL,Cmd]), open_port({spawn,Cmd},[]), ok. diff --git a/lib/common_test/src/ct_util.hrl b/lib/common_test/src/ct_util.hrl index d7efa26863..039c8168ec 100644 --- a/lib/common_test/src/ct_util.hrl +++ b/lib/common_test/src/ct_util.hrl @@ -23,6 +23,7 @@ -define(board_table,ct_boards). -define(suite_table,ct_suite_data). -define(verbosity_table,ct_verbosity_table). +-define(def_gl, ct_default_gl). -record(conn, {handle, targetref, diff --git a/lib/compiler/src/sys_core_fold.erl b/lib/compiler/src/sys_core_fold.erl index 08b02101a6..4922953407 100644 --- a/lib/compiler/src/sys_core_fold.erl +++ b/lib/compiler/src/sys_core_fold.erl @@ -734,7 +734,7 @@ call(#c_call{args=As}=Call, #c_literal{val=M}=M0, #c_literal{val=N}=N0, Sub) -> false -> case sys_core_fold_lists:call(Call, M, N, As) of none -> - call_1(Call, M, N, As, Sub); + call_1(Call, M0, N0, As, Sub); Core -> expr(Core, Sub) end @@ -1130,7 +1130,13 @@ clause_1(#c_clause{guard=G0,body=B0}=Cl, Ps1, Cexpr, Ctxt, Sub1) -> %% %% case A of NewVar when true -> ... %% - sub_set_var(Var, Cexpr, Sub2); + case cerl:is_c_fname(Cexpr) of + false -> + sub_set_var(Var, Cexpr, Sub2); + true -> + %% We must not copy funs, and especially not into guards. + Sub2 + end; _ -> Sub2 end, diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl index 6302f82f29..429d6b79e0 100644 --- a/lib/compiler/test/guard_SUITE.erl +++ b/lib/compiler/test/guard_SUITE.erl @@ -87,6 +87,7 @@ misc(Config) when is_list(Config) -> {ok,buf,<<>>} = get_data({o,true,0}, 42, buf), {ok,buf,<<>>} = get_data({o,false,0}, 0, buf), error = get_data({o,false,0}, 42, buf), + ok. @@ -343,6 +344,11 @@ complex_semicolon(Config) when is_list(Config) -> ok = csemi7(#{a=>1}, 3, 3), ok = csemi7(#{a=>1, b=>3}, 0, 0), + %% 8: Make sure that funs cannot be copied into guards. + ok = csemi8(true), + error = csemi8(false), + error = csemi8(42), + ok. csemi1(Type, Val) when is_list(Val), Type == float; @@ -457,6 +463,13 @@ csemi6(_, _) -> error. csemi7(A, B, C) when A#{a:=B} > #{a=>1}; abs(C) > 2 -> ok; csemi7(_, _, _) -> error. +csemi8(Together) -> + case fun csemi8/1 of + Typically when Together; Typically, Together -> ok; + _ -> error + end. + + comma(Config) when is_list(Config) -> %% ',' combinations of literal true/false. diff --git a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl index 50fc1d8471..08e55a78bd 100644 --- a/lib/dialyzer/src/dialyzer_analysis_callgraph.erl +++ b/lib/dialyzer/src/dialyzer_analysis_callgraph.erl @@ -406,24 +406,28 @@ compile_common(File, AbstrCode, CompOpts, Callgraph, CServer, {ok, RecInfo} -> CServer1 = dialyzer_codeserver:store_temp_records(Mod, RecInfo, CServer), - MetaFunInfo = - dialyzer_utils:get_fun_meta_info(Mod, AbstrCode, LegalWarnings), - CServer2 = - dialyzer_codeserver:insert_fun_meta_info(MetaFunInfo, CServer1), - case UseContracts of - true -> - case dialyzer_utils:get_spec_info(Mod, AbstrCode, RecInfo) of - {error, _} = Error -> Error; - {ok, SpecInfo, CallbackInfo} -> - CServer3 = - dialyzer_codeserver:store_temp_contracts(Mod, SpecInfo, - CallbackInfo, - CServer2), - store_core(Mod, Core, Callgraph, CServer3) - end; - false -> - store_core(Mod, Core, Callgraph, CServer2) - end + case + dialyzer_utils:get_fun_meta_info(Mod, AbstrCode, LegalWarnings) + of + {error, _} = Error -> Error; + MetaFunInfo -> + CServer2 = + dialyzer_codeserver:insert_fun_meta_info(MetaFunInfo, CServer1), + case UseContracts of + true -> + case dialyzer_utils:get_spec_info(Mod, AbstrCode, RecInfo) of + {error, _} = Error -> Error; + {ok, SpecInfo, CallbackInfo} -> + CServer3 = + dialyzer_codeserver:store_temp_contracts(Mod, SpecInfo, + CallbackInfo, + CServer2), + store_core(Mod, Core, Callgraph, CServer3) + end; + false -> + store_core(Mod, Core, Callgraph, CServer2) + end + end end end. diff --git a/lib/dialyzer/src/dialyzer_utils.erl b/lib/dialyzer/src/dialyzer_utils.erl index 76a5cf3d0b..1f2d3e3aaa 100644 --- a/lib/dialyzer/src/dialyzer_utils.erl +++ b/lib/dialyzer/src/dialyzer_utils.erl @@ -514,16 +514,21 @@ get_spec_info([], SpecDict, CallbackDict, {ok, SpecDict, CallbackDict}. -spec get_fun_meta_info(module(), abstract_code(), [dial_warn_tag()]) -> - dialyzer_codeserver:fun_meta_info(). + dialyzer_codeserver:fun_meta_info() | {'error', string()}. get_fun_meta_info(M, Abs, LegalWarnings) -> - NoWarn = get_nowarn_unused_function(M, Abs), - FuncSupp = get_func_suppressions(M, Abs), - Warnings0 = get_options(Abs, LegalWarnings), - Warnings = ordsets:to_list(Warnings0), - ModuleWarnings = [{M, W} || W <- Warnings], - RawProps = lists:append([NoWarn, FuncSupp, ModuleWarnings]), - process_options(dialyzer_utils:family(RawProps), Warnings0). + try + {get_nowarn_unused_function(M, Abs), get_func_suppressions(M, Abs)} + of + {NoWarn, FuncSupp} -> + Warnings0 = get_options(Abs, LegalWarnings), + Warnings = ordsets:to_list(Warnings0), + ModuleWarnings = [{M, W} || W <- Warnings], + RawProps = lists:append([NoWarn, FuncSupp, ModuleWarnings]), + process_options(dialyzer_utils:family(RawProps), Warnings0) + catch throw:{error, _} = Error -> + Error + end. process_options([{M, _}=Mod|Left], Warnings) when is_atom(M) -> [Mod|process_options(Left, Warnings)]; diff --git a/lib/dialyzer/test/plt_SUITE.erl b/lib/dialyzer/test/plt_SUITE.erl index 6ebe23b54b..460d4e2240 100644 --- a/lib/dialyzer/test/plt_SUITE.erl +++ b/lib/dialyzer/test/plt_SUITE.erl @@ -8,13 +8,15 @@ -export([suite/0, all/0, build_plt/1, beam_tests/1, update_plt/1, local_fun_same_as_callback/1, - remove_plt/1, run_plt_check/1, run_succ_typings/1]). + remove_plt/1, run_plt_check/1, run_succ_typings/1, + bad_dialyzer_attr/1]). suite() -> [{timetrap, ?plt_timeout}]. all() -> [build_plt, beam_tests, update_plt, run_plt_check, - remove_plt, run_succ_typings, local_fun_same_as_callback]. + remove_plt, run_succ_typings, local_fun_same_as_callback, + bad_dialyzer_attr]. build_plt(Config) -> OutDir = ?config(priv_dir, Config), @@ -249,6 +251,30 @@ remove_plt(Config) -> {init_plt, Plt}] ++ Opts), ok. +bad_dialyzer_attr(Config) -> + PrivDir = ?config(priv_dir, Config), + + Prog1 = <<"-module(dial). + -dialyzer({no_return, [undef/0]}).">>, + {ok, Beam1} = compile(Config, Prog1, dial, []), + Plt = filename:join(PrivDir, "bad_attr.plt"), + {dialyzer_error, + "Analysis failed with error:\n" + "Could not scan the following file(s):\n" + " Unknown function undef/0 in line " ++ _} = + (catch run_dialyzer(plt_build, [Beam1], [])), + + Prog2 = <<"-module(dial). + -dialyzer({no_return, [{undef,1,2}]}).">>, + {ok, Beam2} = compile(Config, Prog2, dial, []), + {dialyzer_error, + "Analysis failed with error:\n" + "Could not scan the following file(s):\n" + " Bad function {undef,1,2} in line " ++ _} = + (catch run_dialyzer(plt_build, [Beam2], [])), + + ok. + compile(Config, Prog, Module, CompileOpts) -> Source = lists:concat([Module, ".erl"]), PrivDir = ?config(priv_dir,Config), diff --git a/lib/dialyzer/test/small_SUITE_data/src/ms.erl b/lib/dialyzer/test/small_SUITE_data/src/ms.erl new file mode 100644 index 0000000000..47a5e886cf --- /dev/null +++ b/lib/dialyzer/test/small_SUITE_data/src/ms.erl @@ -0,0 +1,8 @@ +-module(ms). +-export([t/0]). + +-include_lib("stdlib/include/ms_transform.hrl"). + +t() -> + MS = dbg:fun2ms(fun(All) -> message(All) end), + erlang:trace_pattern({m, f, '_'}, MS). diff --git a/lib/eldap/doc/src/eldap.xml b/lib/eldap/doc/src/eldap.xml index 43873e44e2..f2c7889e58 100644 --- a/lib/eldap/doc/src/eldap.xml +++ b/lib/eldap/doc/src/eldap.xml @@ -197,7 +197,7 @@ </type> <desc> <p> Add an entry. The entry must not exist.</p> - <pre> + <code> add(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com", [{"objectclass", ["person"]}, @@ -205,7 +205,7 @@ {"sn", ["Valentine"]}, {"telephoneNumber", ["545 555 00"]}] ) - </pre> + </code> </desc> </func> <func> @@ -216,9 +216,9 @@ </type> <desc> <p> Delete an entry.</p> - <pre> + <code> delete(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com") - </pre> + </code> </desc> </func> @@ -259,11 +259,11 @@ </type> <desc> <p> Modify an entry.</p> - <pre> + <code> modify(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com", [eldap:mod_replace("telephoneNumber", ["555 555 00"]), eldap:mod_add("description", ["LDAP Hacker"]) ]) - </pre> + </code> </desc> </func> <func> @@ -320,10 +320,10 @@ whether the current RDN should be removed from the attribute list after the after operation. <c>NewSupDN</c> is the new parent that the RDN shall be moved to. If the old parent should remain as parent, <c>NewSupDN</c> shall be "".</p> - <pre> + <code> modify_dn(Handle, "cn=Bill Valentine, ou=people, o=Example Org, dc=example, dc=com ", "cn=Bill Jr Valentine", true, "") - </pre> + </code> </desc> </func> <func> @@ -342,10 +342,10 @@ Default values: scope is <c>wholeSubtree()</c>, deref is <c>derefAlways()</c>, types_only is <c>false</c> and timeout is <c>0</c> (meaning infinity). </p> - <pre> + <code> Filter = eldap:substrings("cn", [{any,"V"}]), search(Handle, [{base, "dc=example, dc=com"}, {filter, Filter}, {attributes, ["cn"]}]), - </pre> + </code> <p>The <c>timeout</c> option in the <c>SearchOptions</c> is for the ldap server, while the timeout in <seealso marker="#open/2">eldap:open/2</seealso> is used for each individual request in the search operation. @@ -454,7 +454,7 @@ </type> <desc> <p>Creates an extensible match filter. For example, </p> <code> - eldap:extensibleMatch("Bar", [{type,"sn"}, {matchingRule,"caseExactMatch"}])) + eldap:extensibleMatch("Bar", [{type,"sn"}, {matchingRule,"caseExactMatch"}])) </code> <p>creates a filter which performs a <c>caseExactMatch</c> on the attribute <c>sn</c> and matches with the value <c>"Bar"</c>. The default value of <c>dnAttributes</c> is <c>false</c>.</p> </desc> </func> diff --git a/lib/erl_interface/doc/src/book.xml b/lib/erl_interface/doc/src/book.xml index c9194d96ff..94bfef7455 100644 --- a/lib/erl_interface/doc/src/book.xml +++ b/lib/erl_interface/doc/src/book.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,19 +19,19 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> - <title>Erlang Interface</title> + <title>Erl_Interface</title> <prepared>Gordon Beaton</prepared> <docno></docno> <date>1998-11-30</date> <rev>1.2</rev> - <file>book.sgml</file> + <file>book.xml</file> </header> <insidecover> </insidecover> - <pagetext>Erlang Interface</pagetext> + <pagetext>Erl_Interface</pagetext> <preamble> <contents level="2"></contents> </preamble> @@ -47,4 +47,3 @@ <listofterms></listofterms> <index></index> </book> - diff --git a/lib/erl_interface/doc/src/ei.xml b/lib/erl_interface/doc/src/ei.xml index 1177954eb9..ddfb4d88a8 100644 --- a/lib/erl_interface/doc/src/ei.xml +++ b/lib/erl_interface/doc/src/ei.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -30,361 +30,508 @@ <checked></checked> <date>2000-11-27</date> <rev>PA1</rev> - <file>ei.sgml</file> + <file>ei.xml</file> </header> <lib>ei</lib> - <libsummary>routines for handling the erlang binary term format</libsummary> + <libsummary>Routines for handling the Erlang binary term format.</libsummary> <description> - <p>The library <c><![CDATA[ei]]></c> contains macros and functions to encode - and decode the erlang binary term format.</p> - <p>With <c><![CDATA[ei]]></c>, you can convert atoms, lists, numbers and + <p>The library <c>ei</c> contains macros and functions to encode + and decode the Erlang binary term format.</p> + + <p><c>ei</c> allows you to convert atoms, lists, numbers, and binaries to and from the binary format. This is useful when - writing port programs and drivers. <c><![CDATA[ei]]></c> uses a given - buffer, and no dynamic memory (with the exception of - <c><![CDATA[ei_decode_fun()]]></c>), and is often quite fast.</p> - <p>It also handles C-nodes, C-programs that talks erlang - distribution with erlang nodes (or other C-nodes) using the - erlang distribution format. The difference between <c><![CDATA[ei]]></c> and - <c><![CDATA[erl_interface]]></c> is that <c><![CDATA[ei]]></c> uses the binary format - directly when sending and receiving terms. It is also thread - safe, and using threads, one process can handle multiple - C-nodes. The <c><![CDATA[erl_interface]]></c> library is built on top of - <c><![CDATA[ei]]></c>, but of legacy reasons, it doesn't allow for multiple - C-nodes. In general, <c><![CDATA[ei]]></c> is the preferred way of doing - C-nodes.</p> - <p>The decode and encode functions use a buffer an index into the + writing port programs and drivers. <c>ei</c> uses a given + buffer, no dynamic memory (except + <c>ei_decode_fun()</c>) and is often quite fast.</p> + + <p><c>ei</c> also handles C-nodes, C-programs that talks Erlang + distribution with Erlang nodes (or other C-nodes) using the + Erlang distribution format. The difference between <c>ei</c> + and <c>erl_interface</c> is that <c>ei</c> uses + the binary format directly when sending and receiving terms. It is also + thread safe, and using threads, one process can handle multiple + C-nodes. The <c>erl_interface</c> library is built on top of + <c>ei</c>, but of legacy reasons, it does not allow for + multiple C-nodes. In general, <c>ei</c> is the preferred way + of doing C-nodes.</p> + + <p>The decode and encode functions use a buffer and an index into the buffer, which points at the point where to encode and decode. The index is updated to point right after the term encoded/decoded. No checking is done whether the term fits in the buffer or not. If encoding goes outside the buffer, the - program may crash.</p> - <p>All functions takes two parameter, <c><![CDATA[buf]]></c> is a pointer to - the buffer where the binary data is / will be, <c><![CDATA[index]]></c> is a - pointer to an index into the buffer. This parameter will be - incremented with the size of the term decoded / encoded. The - data is thus at <c><![CDATA[buf[*index]]]></c> when an <c><![CDATA[ei]]></c> function is - called.</p> - <p>The encode functions all assumes that the <c><![CDATA[buf]]></c> and - <c><![CDATA[index]]></c> parameters points to a buffer big enough for the - data. To get the size of an encoded term, without encoding it, - pass <c><![CDATA[NULL]]></c> instead of a buffer pointer. The <c><![CDATA[index]]></c> - parameter will be incremented, but nothing will be encoded. This - is the way in <c><![CDATA[ei]]></c> to "preflight" term encoding.</p> - <p>There are also encode-functions that uses a dynamic buffer. It + program can crash.</p> + + <p>All functions take two parameters:</p> + + <list type="bulleted"> + <item><p><c>buf</c> is a pointer to + the buffer where the binary data is or will be.</p> + </item> + <item><p><c>index</c> is a pointer to an index into the + buffer. This parameter is incremented with the size of the term + decoded/encoded.</p> + </item> + </list> + + <p>The data is thus at <c>buf[*index]</c> when an + <c>ei</c> function is called.</p> + + <p>All encode functions assume that the <c>buf</c> and + <c>index</c> parameters point to a buffer large enough for + the data. To get the size of an encoded term, without encoding it, + pass <c>NULL</c> instead of a buffer pointer. Parameter + <c>index</c> is incremented, but nothing will be encoded. This + is the way in <c>ei</c> to "preflight" term encoding.</p> + + <p>There are also encode functions that use a dynamic buffer. It is often more convenient to use these to encode data. All encode - functions comes in two versions: those starting with <c><![CDATA[ei_x]]></c>, - uses a dynamic buffer.</p> - <p>All functions return <c><![CDATA[0]]></c> if successful, and <c><![CDATA[-1]]></c> if - not. (For instance, if a term is not of the expected type, or - the data to decode is not a valid erlang term.)</p> - <p>Some of the decode-functions needs a preallocated buffer. This - buffer must be allocated big enough, and for non compound types - the <c><![CDATA[ei_get_type()]]></c> - function returns the size required (note that for strings an - extra byte is needed for the 0 string terminator).</p> + functions comes in two versions; those starting with + <c>ei_x</c> use a dynamic buffer.</p> + + <p>All functions return <c>0</c> if successful, otherwise + <c>-1</c> (for example, if a term is not of the expected + type, or the data to decode is an invalid Erlang term).</p> + + <p>Some of the decode functions need a pre-allocated buffer. This + buffer must be allocated large enough, and for non-compound types + the <c>ei_get_type()</c> + function returns the size required (notice that for strings an + extra byte is needed for the <c>NULL</c>-terminator).</p> </description> - <section> - <title>DATA TYPES</title> + <section> + <title>Data Types</title> <taglist> <tag><marker id="erlang_char_encoding"/>erlang_char_encoding</tag> <item> - <p/> <code type="none"> typedef enum { ERLANG_ASCII = 1, ERLANG_LATIN1 = 2, ERLANG_UTF8 = 4 -}erlang_char_encoding; -</code> - <p>The character encodings used for atoms. <c>ERLANG_ASCII</c> represents 7-bit ASCII. - Latin1 and UTF8 are different extensions of 7-bit ASCII. All 7-bit ASCII characters - are valid Latin1 and UTF8 characters. ASCII and Latin1 both represent each character - by one byte. A UTF8 character can consist of one to four bytes. Note that these - constants are bit-flags and can be combined with bitwise-or.</p> +} erlang_char_encoding;</code> + <p>The character encodings used for atoms. <c>ERLANG_ASCII</c> + represents 7-bit ASCII. Latin-1 and UTF-8 are different extensions + of 7-bit ASCII. All 7-bit ASCII characters are valid Latin-1 and + UTF-8 characters. ASCII and Latin-1 both represent each character + by one byte. An UTF-8 character can consist of 1-4 bytes. + Notice that these constants are bit-flags and can be combined with + bitwise OR.</p> </item> </taglist> </section> + <funcs> + <func> + <name><ret>int</ret><nametext>ei_decode_atom(const char *buf, int *index, char *p)</nametext></name> + <fsummary>Decode an atom.</fsummary> + <desc> + <p>Decodes an atom from the binary format. The <c>NULL</c>-terminated + name of the atom is placed at <c>p</c>. At most + <c>MAXATOMLEN</c> bytes can be placed in the buffer.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_atom_as(const char *buf, int *index, char *p, int plen, erlang_char_encoding want, erlang_char_encoding* was, erlang_char_encoding* result)</nametext></name> + <fsummary>Decode an atom.</fsummary> + <desc> + <p>Decodes an atom from the binary format. The <c>NULL</c>-terminated + name of the atom is placed in buffer at <c>p</c> of length <c>plen</c> + bytes.</p> + <p>The wanted string encoding is specified by + <seealso marker="#erlang_char_encoding"><c>want</c></seealso>. + The original encoding used in the binary format (Latin-1 or UTF-8) can + be obtained from <c>*was</c>. The encoding of the resulting string + (7-bit ASCII, Latin-1, or UTF-8) can be obtained from <c>*result</c>. + Both <c>was</c> and <c>result</c> can be <c>NULL</c>. <c>*result</c> + can differ from <c>want</c> if <c>want</c> is a bitwise OR'd + combination like <c>ERLANG_LATIN1|ERLANG_UTF8</c> or if + <c>*result</c> turns out to be pure 7-bit ASCII + (compatible with both Latin-1 and UTF-8).</p> + <p>This function fails if the atom is too long for the buffer + or if it cannot be represented with encoding <c>want</c>.</p> + <p>This function was introduced in Erlang/OTP R16 as part of a first + step to support UTF-8 atoms.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_bignum(const char *buf, int *index, mpz_t obj)</nametext></name> + <fsummary>Decode a GMP arbitrary precision integer.</fsummary> + <desc> + <p>Decodes an integer in the binary format to a GMP + <c>mpz_t</c> integer. To use this function, the <c>ei</c> + library must be configured and compiled to use the GMP library.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_binary(const char *buf, int *index, void *p, long *len)</nametext></name> + <fsummary>Decode a binary.</fsummary> + <desc> + <p>Decodes a binary from the binary format. Parameter + <c>len</c> is set to the actual size of the + binary. Notice that <c>ei_decode_binary()</c> assumes that + there is enough room for the binary. The size required can be + fetched by <c>ei_get_type()</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_boolean(const char *buf, int *index, int *p)</nametext></name> + <fsummary>Decode a boolean.</fsummary> + <desc> + <p>Decodes a boolean value from the binary format. + A boolean is actually an atom, <c>true</c> decodes 1 + and <c>false</c> decodes 0.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_char(const char *buf, int *index, char *p)</nametext></name> + <fsummary>Decode an 8-bit integer between 0-255.</fsummary> + <desc> + <p>Decodes a char (8-bit) integer between 0-255 from the binary format. + For historical reasons the returned integer is of + type <c>char</c>. Your C code is to consider the + returned value to be of type <c>unsigned char</c> even if + the C compilers and system can define <c>char</c> to be + signed.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_double(const char *buf, int *index, double *p)</nametext></name> + <fsummary>Decode a double.</fsummary> + <desc> + <p>Decodes a double-precision (64-bit) floating + point number from the binary format.</p> + </desc> + </func> + <func> - <name><ret>void</ret><nametext>ei_set_compat_rel(release_number)</nametext></name> - <fsummary>Set the ei library in compatibility mode</fsummary> - <type> - <v>unsigned release_number;</v> - </type> + <name><ret>int</ret><nametext>ei_decode_ei_term(const char* buf, int* index, ei_term* term)</nametext></name> + <fsummary>Decode a term, without previous knowledge of type.</fsummary> + <desc> + <p>Decodes any term, or at least tries to. If the term + pointed at by <c>*index</c> in <c>buf</c> fits + in the <c>term</c> union, it is decoded, and the + appropriate field in <c>term->value</c> is set, and + <c>*index</c> is incremented by the term size.</p> + <p>The function returns <c>1</c> on successful decoding, <c>-1</c> on + error, and <c>0</c> if the term seems alright, but does not fit in the + <c>term</c> structure. If <c>1</c> is returned, the + <c>index</c> is incremented, and <c>term</c> + contains the decoded term.</p> + <p>The <c>term</c> structure contains the arity for a tuple + or list, size for a binary, string, or atom. It contains + a term if it is any of the following: integer, float, atom, + pid, port, or ref.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_fun(const char *buf, int *index, erlang_fun *p)</nametext></name> + <name><ret>void</ret><nametext>free_fun(erlang_fun* f)</nametext></name> + <fsummary>Decode a fun.</fsummary> <desc> - <marker id="ei_set_compat_rel"></marker> - <p>By default, the <c><![CDATA[ei]]></c> library is only guaranteed - to be compatible with other Erlang/OTP components from the same - release as the <c><![CDATA[ei]]></c> library itself. For example, <c><![CDATA[ei]]></c> from - the OTP R10 release is not compatible with an Erlang emulator - from the OTP R9 release by default.</p> - <p>A call to <c><![CDATA[ei_set_compat_rel(release_number)]]></c> sets the - <c><![CDATA[ei]]></c> library in compatibility mode of release - <c><![CDATA[release_number]]></c>. Valid range of <c><![CDATA[release_number]]></c> - is [7, current release]. This makes it possible to - communicate with Erlang/OTP components from earlier releases.</p> - <note> - <p>If this function is called, it may only be called once - and must be called before any other functions in the <c><![CDATA[ei]]></c> - library is called.</p> - </note> - <warning> - <p>You may run into trouble if this feature is used - carelessly. Always make sure that all communicating - components are either from the same Erlang/OTP release, or - from release X and release Y where all components - from release Y are in compatibility mode of release X.</p> - </warning> + <p>Decodes a fun from the binary format. Parameter + <c>p</c> is to be <c>NULL</c> or point to an + <c>erlang_fun</c> structure. This is the only decode + function that allocates memory. When the <c>erlang_fun</c> + is no longer needed, it is to be freed with + <c>free_fun</c>. (This has to do with the arbitrary size + of the environment for a fun.)</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_version(char *buf, int *index)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_version(ei_x_buff* x)</nametext></name> - <fsummary>Encode version</fsummary> + <name><ret>int</ret><nametext>ei_decode_list_header(const char *buf, int *index, int *arity)</nametext></name> + <fsummary>Decode a list.</fsummary> <desc> - <p>Encodes a version magic number for the binary format. Must - be the first token in a binary term.</p> + <p>Decodes a list header from the binary + format. The number of elements is returned in + <c>arity</c>. The <c>arity+1</c> elements + follow (the last one is the tail of the list, normally an empty list). + If <c>arity</c> is <c>0</c>, it is an empty + list.</p> + <p>Notice that lists are encoded as strings if they consist + entirely of integers in the range 0..255. This function do + not decode such strings, use <c>ei_decode_string()</c> + instead.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_long(char *buf, int *index, long p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_long(ei_x_buff* x, long p)</nametext></name> - <fsummary>Encode integer</fsummary> + <name><ret>int</ret><nametext>ei_decode_long(const char *buf, int *index, long *p)</nametext></name> + <fsummary>Decode integer.</fsummary> <desc> - <p>Encodes a long integer in the binary format. - Note that if the code is 64 bits the function ei_encode_long() is - exactly the same as ei_encode_longlong().</p> + <p>Decodes a long integer from the binary format. + If the code is 64 bits, the function <c>ei_decode_long()</c> is + the same as <c>ei_decode_longlong()</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_ulong(char *buf, int *index, unsigned long p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_ulong(ei_x_buff* x, unsigned long p)</nametext></name> - <fsummary>Encode unsigned integer</fsummary> + <name><ret>int</ret><nametext>ei_decode_longlong(const char *buf, int *index, long long *p)</nametext></name> + <fsummary>Decode integer.</fsummary> <desc> - <p>Encodes an unsigned long integer in the binary format. - Note that if the code is 64 bits the function ei_encode_ulong() is - exactly the same as ei_encode_ulonglong().</p> + <p>Decodes a GCC <c>long long</c> or Visual C++ + <c>__int64</c> + (64-bit) integer from the binary format. This + function is missing in the VxWorks port.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_longlong(char *buf, int *index, long long p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_longlong(ei_x_buff* x, long long p)</nametext></name> - <fsummary>Encode integer</fsummary> + <name><ret>int</ret><nametext>ei_decode_map_header(const char *buf, int *index, int *arity)</nametext></name> + <fsummary>Decode a map.</fsummary> <desc> - <p>Encodes a GCC <c><![CDATA[long long]]></c> or Visual C++ <c><![CDATA[__int64]]></c> (64 bit) - integer in the binary format. Note that this function is missing - in the VxWorks port.</p> + <p>Decodes a map header from the binary + format. The number of key-value pairs is returned in + <c>*arity</c>. Keys and values follow in this order: + <c>K1, V1, K2, V2, ..., Kn, Vn</c>. This makes a total of + <c>arity*2</c> terms. If <c>arity</c> is zero, it is an empty map. + A correctly encoded map does not have duplicate keys.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_ulonglong(char *buf, int *index, unsigned long long p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_ulonglong(ei_x_buff* x, unsigned long long p)</nametext></name> - <fsummary>Encode unsigned integer</fsummary> + <name><ret>int</ret><nametext>ei_decode_pid(const char *buf, int *index, erlang_pid *p)</nametext></name> + <fsummary>Decode a <c>pid</c>.</fsummary> <desc> - <p>Encodes a GCC <c><![CDATA[unsigned long long]]></c> or Visual C++ <c><![CDATA[unsigned __int64]]></c> (64 bit) integer in the binary format. Note that - this function is missing in the VxWorks port.</p> + <p>Decodes a process identifier (pid) from the binary format.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_bignum(char *buf, int *index, mpz_t obj)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_bignum(ei_x_buff *x, mpz_t obj)</nametext></name> - <fsummary>Encode an arbitrary precision integer</fsummary> + <name><ret>int</ret><nametext>ei_decode_port(const char *buf, int *index, erlang_port *p)</nametext></name> + <fsummary>Decode a port.</fsummary> <desc> - <p>Encodes a GMP <c><![CDATA[mpz_t]]></c> integer to binary format. - To use this function the ei library needs to be configured and compiled - to use the GMP library. </p> + <p>Decodes a port identifier from the binary format.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_double(char *buf, int *index, double p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_double(ei_x_buff* x, double p)</nametext></name> - <fsummary>Encode a double float</fsummary> + <name><ret>int</ret><nametext>ei_decode_ref(const char *buf, int *index, erlang_ref *p)</nametext></name> + <fsummary>Decode a reference.</fsummary> <desc> - <p>Encodes a double-precision (64 bit) floating point number in - the binary format.</p> - <p> - The function returns <c><![CDATA[-1]]></c> if the floating point number is not finite. - </p> + <p>Decodes a reference from the binary format.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_boolean(char *buf, int *index, int p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_boolean(ei_x_buff* x, int p)</nametext></name> - <fsummary>Encode a boolean</fsummary> + <name><ret>int</ret><nametext>ei_decode_string(const char *buf, int *index, char *p)</nametext></name> + <fsummary>Decode a string.</fsummary> <desc> - <p>Encodes a boolean value, as the atom <c><![CDATA[true]]></c> if p is not - zero or <c><![CDATA[false]]></c> if p is zero.</p> + <p>Decodes a string from the binary format. A + string in Erlang is a list of integers between 0 and + 255. Notice that as the string is just a list, sometimes + lists are encoded as strings by <c>term_to_binary/1</c>, + even if it was not intended.</p> + <p>The string is copied to <c>p</c>, and enough space must + be allocated. The returned string is <c>NULL</c>-terminated, so you + must add an extra byte to the memory requirement.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_char(char *buf, int *index, char p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_char(ei_x_buff* x, char p)</nametext></name> - <fsummary>Encode an 8-bit integer between 0-255</fsummary> + <name><ret>int</ret><nametext>ei_decode_term(const char *buf, int *index, void *t)</nametext></name> + <fsummary>Decode a <c>ETERM</c>.</fsummary> + <desc> + <p>Decodes a term from the binary format. The term + is return in <c>t</c> as a <c>ETERM*</c>, so + <c>t</c> is actually an <c>ETERM**</c> (see + <seealso marker="erl_eterm"><c>erl_eterm</c></seealso>). + The term is later to be deallocated.</p> + <p>Notice that this function is located in the <c>Erl_Interface</c> + library.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_trace(const char *buf, int *index, erlang_trace *p)</nametext></name> + <fsummary>Decode a trace token.</fsummary> <desc> - <p>Encodes a char (8-bit) as an integer between 0-255 in the binary format. - Note that for historical reasons the integer argument is of - type <c><![CDATA[char]]></c>. Your C code should consider the - given argument to be of type <c><![CDATA[unsigned char]]></c> even if - the C compilers and system may define <c><![CDATA[char]]></c> to be - signed.</p> + <p>Decodes an Erlang trace token from the binary format.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_string(char *buf, int *index, const char *p)</nametext></name> - <name><ret>int</ret><nametext>ei_encode_string_len(char *buf, int *index, const char *p, int len)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_string(ei_x_buff* x, const char *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_string_len(ei_x_buff* x, const char* s, int len)</nametext></name> - <fsummary>Encode a string</fsummary> + <name><ret>int</ret><nametext>ei_decode_tuple_header(const char *buf, int *index, int *arity)</nametext></name> + <fsummary>Decode a tuple.</fsummary> <desc> - <p>Encodes a string in the binary format. (A string in erlang - is a list, but is encoded as a character array in the binary - format.) The string should be zero-terminated, except for - the <c><![CDATA[ei_x_encode_string_len()]]></c> function.</p> + <p>Decodes a tuple header, the number of elements + is returned in <c>arity</c>. The tuple elements follow + in order in the buffer.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_ulong(const char *buf, int *index, unsigned long *p)</nametext></name> + <fsummary>Decode unsigned integer.</fsummary> + <desc> + <p>Decodes an unsigned long integer from the binary format. + If the code is 64 bits, the function <c>ei_decode_ulong()</c> is + the same as <c>ei_decode_ulonglong()</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_ulonglong(const char *buf, int *index, unsigned long long *p)</nametext></name> + <fsummary>Decode unsigned integer.</fsummary> + <desc> + <p>Decodes a GCC <c>unsigned long long</c> or Visual C++ + <c>unsigned __int64</c> (64-bit) integer from the binary + format. This function is missing in the VxWorks port.</p> </desc> </func> + + <func> + <name><ret>int</ret><nametext>ei_decode_version(const char *buf, int *index, int *version)</nametext></name> + <fsummary>Decode an empty list (<c>nil</c>).</fsummary> + <desc> + <p>Decodes the version magic number for the + Erlang binary term format. It must be the first token in a + binary term.</p> + </desc> + </func> + <func> <name><ret>int</ret><nametext>ei_encode_atom(char *buf, int *index, const char *p)</nametext></name> <name><ret>int</ret><nametext>ei_encode_atom_len(char *buf, int *index, const char *p, int len)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_atom(ei_x_buff* x, const char *p)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_atom_len(ei_x_buff* x, const char *p, int len)</nametext></name> - <fsummary>Encode an atom</fsummary> + <fsummary>Encode an atom.</fsummary> <desc> - <p>Encodes an atom in the binary format. The <c><![CDATA[p]]></c> parameter - is the name of the atom in latin1 encoding. Only upto <c>MAXATOMLEN-1</c> bytes - are encoded. The name should be zero-terminated, except for - the <c><![CDATA[ei_x_encode_atom_len()]]></c> function.</p> + <p>Encodes an atom in the binary format. Parameter <c>p</c> + is the name of the atom in Latin-1 encoding. Only up to + <c>MAXATOMLEN-1</c> bytes + are encoded. The name is to be <c>NULL</c>-terminated, except for + the <c>ei_x_encode_atom_len()</c> function.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_encode_atom_as(char *buf, int *index, const char *p, erlang_char_encoding from_enc, erlang_char_encoding to_enc)</nametext></name> <name><ret>int</ret><nametext>ei_encode_atom_len_as(char *buf, int *index, const char *p, int len, erlang_char_encoding from_enc, erlang_char_encoding to_enc)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_atom_as(ei_x_buff* x, const char *p, erlang_char_encoding from_enc, erlang_char_encoding to_enc)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_atom_len_as(ei_x_buff* x, const char *p, int len, erlang_char_encoding from_enc, erlang_char_encoding to_enc)</nametext></name> - <fsummary>Encode an atom</fsummary> + <fsummary>Encode an atom.</fsummary> <desc> <p>Encodes an atom in the binary format with character encoding - <seealso marker="#erlang_char_encoding"><c>to_enc</c></seealso> (latin1 or utf8). - The <c>p</c> parameter is the name of the atom with character encoding - <seealso marker="#erlang_char_encoding"><c>from_enc</c></seealso> (ascii, latin1 or utf8). - The name must either be zero-terminated or a function variant with a <c>len</c> - parameter must be used. If <c>to_enc</c> is set to the bitwise-or'd combination - <c>(ERLANG_LATIN1|ERLANG_UTF8)</c>, utf8 encoding is only used if the atom string - can not be represented in latin1 encoding.</p> - <p>The encoding will fail if <c>p</c> is not a valid string in encoding <c>from_enc</c>, - if the string is too long or if it can not be represented with character encoding <c>to_enc</c>.</p> - <p>These functions were introduced in R16 release of Erlang/OTP as part of a first step - to support UTF8 atoms. Atoms encoded with <c>ERLANG_UTF8</c> - can not be decoded by earlier releases than R16.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_encode_binary(char *buf, int *index, const void *p, long len)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_binary(ei_x_buff* x, const void *p, long len)</nametext></name> - <fsummary>Encode a binary</fsummary> - <desc> - <p>Encodes a binary in the binary format. The data is at - <c><![CDATA[p]]></c>, of <c><![CDATA[len]]></c> bytes length.</p> + <seealso marker="#erlang_char_encoding"><c>to_enc</c></seealso> + (Latin-1 or UTF-8). Parameter <c>p</c> is the name of the atom with + character encoding + <seealso marker="#erlang_char_encoding"><c>from_enc</c></seealso> + (ASCII, Latin-1, or UTF-8). The name must either be <c>NULL</c>-terminated or + a function variant with a <c>len</c> parameter must be used. + If <c>to_enc</c> is set to the bitwise OR'd combination + <c>(ERLANG_LATIN1|ERLANG_UTF8)</c>, UTF-8 encoding is only used if the + atom string cannot be represented in Latin-1 encoding.</p> + <p>The encoding fails if <c>p</c> is an invalid string in encoding + <c>from_enc</c>, if the string is too long, or if it cannot be + represented with character encoding <c>to_enc</c>.</p> + <p>These functions were introduced in Erlang/OTP R16 as part of a first + step to support UTF-8 atoms. Atoms encoded with <c>ERLANG_UTF8</c> + cannot be decoded by earlier releases than R16.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_pid(char *buf, int *index, const erlang_pid *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_pid(ei_x_buff* x, const erlang_pid *p)</nametext></name> - <fsummary>Encode a pid</fsummary> + <name><ret>int</ret><nametext>ei_encode_bignum(char *buf, int *index, mpz_t obj)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_bignum(ei_x_buff *x, mpz_t obj)</nametext></name> + <fsummary>Encode an arbitrary precision integer.</fsummary> <desc> - <p>Encodes an erlang process identifier, pid, in the binary - format. The <c><![CDATA[p]]></c> parameter points to an - <c><![CDATA[erlang_pid]]></c> structure (which should have been obtained - earlier with <c><![CDATA[ei_decode_pid()]]></c>).</p> + <p>Encodes a GMP <c>mpz_t</c> integer to binary format. + To use this function, the <c>ei</c> library must be configured and + compiled to use the GMP library.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_fun(char *buf, int *index, const erlang_fun *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_fun(ei_x_buff* x, const erlang_fun* fun)</nametext></name> - <fsummary>Encode a fun</fsummary> + <name><ret>int</ret><nametext>ei_encode_binary(char *buf, int *index, const void *p, long len)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_binary(ei_x_buff* x, const void *p, long len)</nametext></name> + <fsummary>Encode a binary.</fsummary> <desc> - <p>Encodes a fun in the binary format. The <c><![CDATA[p]]></c> parameter - points to an <c><![CDATA[erlang_fun]]></c> structure. The - <c><![CDATA[erlang_fun]]></c> is not freed automatically, the - <c><![CDATA[free_fun]]></c> should be called if the fun is not needed - after encoding.</p> + <p>Encodes a binary in the binary format. The data is at + <c>p</c>, of <c>len</c> bytes length.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_port(char *buf, int *index, const erlang_port *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_port(ei_x_buff* x, const erlang_port *p)</nametext></name> - <fsummary>Encodes a port</fsummary> + <name><ret>int</ret><nametext>ei_encode_boolean(char *buf, int *index, int p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_boolean(ei_x_buff* x, int p)</nametext></name> + <fsummary>Encode a boolean.</fsummary> <desc> - <p>Encodes an erlang port in the binary format. The <c><![CDATA[p]]></c> - parameter points to a <c><![CDATA[erlang_port]]></c> structure (which - should have been obtained earlier with - <c><![CDATA[ei_decode_port()]]></c>.</p> + <p>Encodes a boolean value as the atom <c>true</c> if + <c>p</c> is not zero, or <c>false</c> if <c>p</c> is + zero.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_ref(char *buf, int *index, const erlang_ref *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_ref(ei_x_buff* x, const erlang_ref *p)</nametext></name> - <fsummary>Encodes a ref</fsummary> + <name><ret>int</ret><nametext>ei_encode_char(char *buf, int *index, char p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_char(ei_x_buff* x, char p)</nametext></name> + <fsummary>Encode an 8-bit integer between 0-255.</fsummary> <desc> - <p>Encodes an erlang reference in the binary format. The - <c><![CDATA[p]]></c> parameter points to a <c><![CDATA[erlang_ref]]></c> structure - (which should have been obtained earlier with - <c><![CDATA[ei_decode_ref()]]></c>.</p> + <p>Encodes a char (8-bit) as an integer between 0-255 in the binary + format. For historical reasons the integer argument is of + type <c>char</c>. Your C code is to consider the specified + argument to be of type <c>unsigned char</c> even if + the C compilers and system may define <c>char</c> to be + signed.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_term(char *buf, int *index, void *t)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_term(ei_x_buff* x, void *t)</nametext></name> - <fsummary>Encode an <c><![CDATA[erl_interface]]></c>term</fsummary> + <name><ret>int</ret><nametext>ei_encode_double(char *buf, int *index, double p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_double(ei_x_buff* x, double p)</nametext></name> + <fsummary>Encode a double float.</fsummary> <desc> - <p>This function encodes an <c><![CDATA[ETERM]]></c>, as obtained from - <c><![CDATA[erl_interface]]></c>. The <c><![CDATA[t]]></c> parameter is actually an - <c><![CDATA[ETERM]]></c> pointer. This function doesn't free the - <c><![CDATA[ETERM]]></c>.</p> + <p>Encodes a double-precision (64-bit) floating point number in + the binary format.</p> + <p>Returns <c>-1</c> if the floating point + number is not finite.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_trace(char *buf, int *index, const erlang_trace *p)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_trace(ei_x_buff* x, const erlang_trace *p)</nametext></name> - <fsummary>Encode a trace token</fsummary> + <name><ret>int</ret><nametext>ei_encode_empty_list(char* buf, int* index)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_empty_list(ei_x_buff* x)</nametext></name> + <fsummary>Encode an empty list (<c>nil</c>).</fsummary> <desc> - <p>This function encodes an erlang trace token in the binary - format. The <c><![CDATA[p]]></c> parameter points to a - <c><![CDATA[erlang_trace]]></c> structure (which should have been - obtained earlier with <c><![CDATA[ei_decode_trace()]]></c>.</p> + <p>Encodes an empty list. It is often used at the tail of a list.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_tuple_header(char *buf, int *index, int arity)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_tuple_header(ei_x_buff* x, int arity)</nametext></name> - <fsummary>Encode a tuple</fsummary> + <name><ret>int</ret><nametext>ei_encode_fun(char *buf, int *index, const erlang_fun *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_fun(ei_x_buff* x, const erlang_fun* fun)</nametext></name> + <fsummary>Encode a fun.</fsummary> <desc> - <p>This function encodes a tuple header, with a specified - arity. The next <c><![CDATA[arity]]></c> terms encoded will be the - elements of the tuple. Tuples and lists are encoded - recursively, so that a tuple may contain another tuple or - list.</p> - <p>E.g. to encode the tuple <c><![CDATA[{a, {b, {}}}]]></c>:</p> - <pre> -ei_encode_tuple_header(buf, &i, 2); -ei_encode_atom(buf, &i, "a"); -ei_encode_tuple_header(buf, &i, 2); -ei_encode_atom(buf, &i, "b"); -ei_encode_tuple_header(buf, &i, 0); - </pre> + <p>Encodes a fun in the binary format. Parameter <c>p</c> + points to an <c>erlang_fun</c> structure. The + <c>erlang_fun</c> is not freed automatically, the + <c>free_fun</c> is to be called if the fun is not needed + after encoding.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_encode_list_header(char *buf, int *index, int arity)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_list_header(ei_x_buff* x, int arity)</nametext></name> - <fsummary>Encode a list</fsummary> + <fsummary>Encode a list.</fsummary> <desc> - <p>This function encodes a list header, with a specified - arity. The next <c><![CDATA[arity+1]]></c> terms are the elements - (actually its <c><![CDATA[arity]]></c> cons cells) and the tail of the + <p>Encodes a list header, with a specified + arity. The next <c>arity+1</c> terms are the elements + (actually its <c>arity</c> cons cells) and the tail of the list. Lists and tuples are encoded recursively, so that a - list may contain another list or tuple.</p> - <p>E.g. to encode the list <c><![CDATA[[c, d, [e | f]]]]></c>:</p> + list can contain another list or tuple.</p> + <p>For example, to encode the list + <c>[c, d, [e | f]]</c>:</p> <pre> ei_encode_list_header(buf, &i, 3); ei_encode_atom(buf, &i, "c"); @@ -392,14 +539,13 @@ ei_encode_atom(buf, &i, "d"); ei_encode_list_header(buf, &i, 1); ei_encode_atom(buf, &i, "e"); ei_encode_atom(buf, &i, "f"); -ei_encode_empty_list(buf, &i); - </pre> +ei_encode_empty_list(buf, &i);</pre> <note> <p>It may seem that there is no way to create a list without knowing the number of elements in advance. But indeed - there is a way. Note that the list <c><![CDATA[[a, b, c]]]></c> can be - written as <c><![CDATA[[a | [b | [c]]]]]></c>. Using this, a list can - be written as conses.</p> + there is a way. Notice that the list <c>[a, b, c]</c> + can be written as <c>[a | [b | [c]]]</c>. + Using this, a list can be written as conses.</p> </note> <p>To encode a list, without knowing the arity in advance:</p> <pre> @@ -407,425 +553,350 @@ while (something()) { ei_x_encode_list_header(&x, 1); ei_x_encode_ulong(&x, i); /* just an example */ } -ei_x_encode_empty_list(&x); - </pre> +ei_x_encode_empty_list(&x);</pre> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_encode_empty_list(char* buf, int* index)</nametext></name> - <name><ret>int</ret><nametext>ei_x_encode_empty_list(ei_x_buff* x)</nametext></name> - <fsummary>Encode an empty list (<c><![CDATA[nil]]></c>)</fsummary> + <name><ret>int</ret><nametext>ei_encode_long(char *buf, int *index, long p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_long(ei_x_buff* x, long p)</nametext></name> + <fsummary>Encode integer.</fsummary> <desc> - <p>This function encodes an empty list. It's often used at the - tail of a list.</p> + <p>Encodes a long integer in the binary format. + If the code is 64 bits, the function <c>ei_encode_long()</c> is + the same as <c>ei_encode_longlong()</c>.</p> </desc> </func> + + <func> + <name><ret>int</ret><nametext>ei_encode_longlong(char *buf, int *index, long long p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_longlong(ei_x_buff* x, long long p)</nametext></name> + <fsummary>Encode integer.</fsummary> + <desc> + <p>Encodes a GCC <c>long long</c> or Visual C++ + <c>__int64</c> (64-bit) integer in the binary format. + This function is missing in the VxWorks port.</p> + </desc> + </func> + <func> <name><ret>int</ret><nametext>ei_encode_map_header(char *buf, int *index, int arity)</nametext></name> <name><ret>int</ret><nametext>ei_x_encode_map_header(ei_x_buff* x, int arity)</nametext></name> - <fsummary>Encode a map</fsummary> + <fsummary>Encode a map.</fsummary> <desc> - <p>This function encodes a map header, with a specified arity. The next + <p>Encodes a map header, with a specified arity. The next <c>arity*2</c> terms encoded will be the keys and values of the map encoded in the following order: <c>K1, V1, K2, V2, ..., Kn, Vn</c>. </p> - <p>E.g. to encode the map <c>#{a => "Apple", b => "Banana"}</c>:</p> + <p>For example, to encode the map <c>#{a => "Apple", b => + "Banana"}</c>:</p> <pre> ei_x_encode_map_header(&x, 2); ei_x_encode_atom(&x, "a"); ei_x_encode_string(&x, "Apple"); ei_x_encode_atom(&x, "b"); -ei_x_encode_string(&x, "Banana"); - </pre> - <p>A correctly encoded map can not have duplicate keys.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_get_type(const char *buf, const int *index, int *type, int *size)</nametext></name> - <fsummary>Fetch the type and size of an encoded term</fsummary> - <desc> - <p>This function returns the type in <c><![CDATA[type]]></c> and size in - <c><![CDATA[size]]></c> of the encoded term. - For strings and atoms, size - is the number of characters <em>not</em> including the - terminating 0. For binaries, <c><![CDATA[size]]></c> is the number of - bytes. For lists and tuples, <c><![CDATA[size]]></c> is the arity of the - object. For other types, <c><![CDATA[size]]></c> is 0. In all cases, - <c><![CDATA[index]]></c> is left unchanged.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_version(const char *buf, int *index, int *version)</nametext></name> - <fsummary>Encode an empty list (<c><![CDATA[nil]]></c>)</fsummary> - <desc> - <p>This function decodes the version magic number for the - erlang binary term format. It must be the first token in a - binary term.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_long(const char *buf, int *index, long *p)</nametext></name> - <fsummary>Decode integer</fsummary> - <desc> - <p>This function decodes a long integer from the binary format. - Note that if the code is 64 bits the function ei_decode_long() is - exactly the same as ei_decode_longlong().</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_ulong(const char *buf, int *index, unsigned long *p)</nametext></name> - <fsummary>Decode unsigned integer</fsummary> - <desc> - <p>This function decodes an unsigned long integer from - the binary format. - Note that if the code is 64 bits the function ei_decode_ulong() is - exactly the same as ei_decode_ulonglong().</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_longlong(const char *buf, int *index, long long *p)</nametext></name> - <fsummary>Decode integer</fsummary> - <desc> - <p>This function decodes a GCC <c><![CDATA[long long]]></c> or Visual C++ <c><![CDATA[__int64]]></c> - (64 bit) integer from the binary format. Note that this - function is missing in the VxWorks port.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_ulonglong(const char *buf, int *index, unsigned long long *p)</nametext></name> - <fsummary>Decode unsigned integer</fsummary> - <desc> - <p>This function decodes a GCC <c><![CDATA[unsigned long long]]></c> or Visual C++ - <c><![CDATA[unsigned __int64]]></c> (64 bit) integer from the binary format. - Note that this function is missing in the VxWorks port.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_bignum(const char *buf, int *index, mpz_t obj)</nametext></name> - <fsummary>Decode a GMP arbitrary precision integer</fsummary> - <desc> - <p>This function decodes an integer in the binary format to a GMP <c><![CDATA[mpz_t]]></c> integer. - To use this function the ei library needs to be configured and compiled - to use the GMP library. </p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_double(const char *buf, int *index, double *p)</nametext></name> - <fsummary>Decode a double</fsummary> - <desc> - <p>This function decodes an double-precision (64 bit) floating - point number from the binary format.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_boolean(const char *buf, int *index, int *p)</nametext></name> - <fsummary>Decode a boolean</fsummary> - <desc> - <p>This function decodes a boolean value from the binary - format. A boolean is actually an atom, <c><![CDATA[true]]></c> decodes 1 - and <c><![CDATA[false]]></c> decodes 0.</p> +ei_x_encode_string(&x, "Banana");</pre> + <p>A correctly encoded map cannot have duplicate keys.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_char(const char *buf, int *index, char *p)</nametext></name> - <fsummary>Decode an 8-bit integer between 0-255</fsummary> + <name><ret>int</ret><nametext>ei_encode_pid(char *buf, int *index, const erlang_pid *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_pid(ei_x_buff* x, const erlang_pid *p)</nametext></name> + <fsummary>Encode a pid.</fsummary> <desc> - <p>This function decodes a char (8-bit) integer between 0-255 - from the binary format. - Note that for historical reasons the returned integer is of - type <c><![CDATA[char]]></c>. Your C code should consider the - returned value to be of type <c><![CDATA[unsigned char]]></c> even if - the C compilers and system may define <c><![CDATA[char]]></c> to be - signed.</p> + <p>Encodes an Erlang process identifier (pid) in the binary + format. Parameter <c>p</c> points to an + <c>erlang_pid</c> structure (which should have been + obtained earlier with <c>ei_decode_pid()</c>).</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_string(const char *buf, int *index, char *p)</nametext></name> - <fsummary>Decode a string</fsummary> + <name><ret>int</ret><nametext>ei_encode_port(char *buf, int *index, const erlang_port *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_port(ei_x_buff* x, const erlang_port *p)</nametext></name> + <fsummary>Encode a port.</fsummary> <desc> - <p>This function decodes a string from the binary format. A - string in erlang is a list of integers between 0 and - 255. Note that since the string is just a list, sometimes - lists are encoded as strings by <c><![CDATA[term_to_binary/1]]></c>, - even if it was not intended.</p> - <p>The string is copied to <c><![CDATA[p]]></c>, and enough space must be - allocated. The returned string is null terminated so you - need to add an extra byte to the memory requirement.</p> + <p>Encodes an Erlang port in the binary format. Parameter + <c>p</c> points to a <c>erlang_port</c> + structure (which should have been obtained earlier with + <c>ei_decode_port()</c>).</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_atom(const char *buf, int *index, char *p)</nametext></name> - <fsummary>Decode an atom</fsummary> + <name><ret>int</ret><nametext>ei_encode_ref(char *buf, int *index, const erlang_ref *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_ref(ei_x_buff* x, const erlang_ref *p)</nametext></name> + <fsummary>Encode a ref.</fsummary> <desc> - <p>This function decodes an atom from the binary format. The - null terminated name of the atom is placed at <c><![CDATA[p]]></c>. There can be at most - <c><![CDATA[MAXATOMLEN]]></c> bytes placed in the buffer.</p> + <p>Encodes an Erlang reference in the binary format. Parameter + <c>p</c> points to a <c>erlang_ref</c> + structure (which should have been obtained earlier with + <c>ei_decode_ref()</c>).</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_atom_as(const char *buf, int *index, char *p, int plen, erlang_char_encoding want, erlang_char_encoding* was, erlang_char_encoding* result)</nametext></name> - <fsummary>Decode an atom</fsummary> + <name><ret>int</ret><nametext>ei_encode_string(char *buf, int *index, const char *p)</nametext></name> + <name><ret>int</ret><nametext>ei_encode_string_len(char *buf, int *index, const char *p, int len)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_string(ei_x_buff* x, const char *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_string_len(ei_x_buff* x, const char* s, int len)</nametext></name> + <fsummary>Encode a string.</fsummary> <desc> - <p>This function decodes an atom from the binary format. The - null terminated name of the atom is placed in buffer at <c>p</c> of length - <c>plen</c> bytes.</p> - <p>The wanted string encoding is specified by <seealso marker="#erlang_char_encoding"> - <c>want</c></seealso>. The original encoding used in the - binary format (latin1 or utf8) can be obtained from <c>*was</c>. The actual encoding of the resulting string - (7-bit ascii, latin1 or utf8) can be obtained from <c>*result</c>. Both <c>was</c> and <c>result</c> can be <c>NULL</c>. - - <c>*result</c> may differ from <c>want</c> if <c>want</c> is a bitwise-or'd combination like - <c>ERLANG_LATIN1|ERLANG_UTF8</c> or if <c>*result</c> turn out to be pure 7-bit ascii - (compatible with both latin1 and utf8).</p> - <p>This function fails if the atom is too long for the buffer - or if it can not be represented with encoding <c>want</c>.</p> - <p>This function was introduced in R16 release of Erlang/OTP as part of a first step - to support UTF8 atoms.</p> + <p>Encodes a string in the binary format. (A string in Erlang + is a list, but is encoded as a character array in the binary + format.) The string is to be <c>NULL</c>-terminated, except for + the <c>ei_x_encode_string_len()</c> function.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_binary(const char *buf, int *index, void *p, long *len)</nametext></name> - <fsummary>Decode a binary</fsummary> + <name><ret>int</ret><nametext>ei_encode_term(char *buf, int *index, void *t)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_term(ei_x_buff* x, void *t)</nametext></name> + <fsummary>Encode an <c>erl_interface</c> term.</fsummary> <desc> - <p>This function decodes a binary from the binary format. The - <c><![CDATA[len]]></c> parameter is set to the actual size of the - binary. Note that <c><![CDATA[ei_decode_binary()]]></c> assumes that there - are enough room for the binary. The size required can be - fetched by <c><![CDATA[ei_get_type()]]></c>.</p> + <p>Encodes an <c>ETERM</c>, as obtained from + <c>erl_interface</c>. Parameter <c>t</c> is + actually an <c>ETERM</c> pointer. This function + does not free the <c>ETERM</c>.</p> </desc> </func> <func> - <name><ret>int</ret><nametext>ei_decode_fun(const char *buf, int *index, erlang_fun *p)</nametext></name> - <name><ret>void</ret><nametext>free_fun(erlang_fun* f)</nametext></name> - <fsummary>Decode a fun</fsummary> + <name><ret>int</ret><nametext>ei_encode_trace(char *buf, int *index, const erlang_trace *p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_trace(ei_x_buff* x, const erlang_trace *p)</nametext></name> + <fsummary>Encode a trace token.</fsummary> <desc> - <p>This function decodes a fun from the binary format. The - <c><![CDATA[p]]></c> parameter should be NULL or point to an - <c><![CDATA[erlang_fun]]></c> structure. This is the only decode - function that allocates memory; when the <c><![CDATA[erlang_fun]]></c> - is no longer needed, it should be freed with - <c><![CDATA[free_fun]]></c>. (This has to do with the arbitrary size of - the environment for a fun.)</p> + <p>Encodes an Erlang trace token in the binary format. + Parameter <c>p</c> points to a + <c>erlang_trace</c> structure (which should have been + obtained earlier with <c>ei_decode_trace()</c>).</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_pid(const char *buf, int *index, erlang_pid *p)</nametext></name> - <fsummary>Decode a <c><![CDATA[pid]]></c></fsummary> + <name><ret>int</ret><nametext>ei_encode_tuple_header(char *buf, int *index, int arity)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_tuple_header(ei_x_buff* x, int arity)</nametext></name> + <fsummary>Encode a tuple.</fsummary> <desc> - <p>Decodes a pid, process identifier, from the binary format.</p> + <p>Encodes a tuple header, with a specified + arity. The next <c>arity</c> terms encoded will be the + elements of the tuple. Tuples and lists are encoded + recursively, so that a tuple can contain another tuple or list.</p> + <p>For example, to encode the tuple <c>{a, {b, {}}}</c>:</p> + <pre> +ei_encode_tuple_header(buf, &i, 2); +ei_encode_atom(buf, &i, "a"); +ei_encode_tuple_header(buf, &i, 2); +ei_encode_atom(buf, &i, "b"); +ei_encode_tuple_header(buf, &i, 0);</pre> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_port(const char *buf, int *index, erlang_port *p)</nametext></name> - <fsummary>Decode a port</fsummary> + <name><ret>int</ret><nametext>ei_encode_ulong(char *buf, int *index, unsigned long p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_ulong(ei_x_buff* x, unsigned long p)</nametext></name> + <fsummary>Encode unsigned integer.</fsummary> <desc> - <p>This function decodes a port identifier from the binary - format.</p> + <p>Encodes an unsigned long integer in the binary format. + If the code is 64 bits, the function <c>ei_encode_ulong()</c> is + the same as <c>ei_encode_ulonglong()</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_ref(const char *buf, int *index, erlang_ref *p)</nametext></name> - <fsummary>Decode a reference</fsummary> + <name><ret>int</ret><nametext>ei_encode_ulonglong(char *buf, int *index, unsigned long long p)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_ulonglong(ei_x_buff* x, unsigned long long p)</nametext></name> + <fsummary>Encode unsigned integer.</fsummary> <desc> - <p>This function decodes a reference from the binary format.</p> + <p>Encodes a GCC <c>unsigned long long</c> or Visual C++ + <c>unsigned __int64</c> (64-bit) integer in the binary + format. This function is missing in the VxWorks port.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_trace(const char *buf, int *index, erlang_trace *p)</nametext></name> - <fsummary>Decode a trace token</fsummary> + <name><ret>int</ret><nametext>ei_encode_version(char *buf, int *index)</nametext></name> + <name><ret>int</ret><nametext>ei_x_encode_version(ei_x_buff* x)</nametext></name> + <fsummary>Encode version.</fsummary> <desc> - <p>Decodes an erlang trace token from the binary format.</p> + <p>Encodes a version magic number for the binary format. Must + be the first token in a binary term.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_tuple_header(const char *buf, int *index, int *arity)</nametext></name> - <fsummary>Decode a tuple</fsummary> + <name><ret>int</ret><nametext>ei_get_type(const char *buf, const int *index, int *type, int *size)</nametext></name> + <fsummary>Fetch the type and size of an encoded term.</fsummary> <desc> - <p>This function decodes a tuple header, the number of elements - is returned in <c><![CDATA[arity]]></c>. The tuple elements follows in order in - the buffer.</p> + <p>Returns the type in <c>type</c> and size in + <c>size</c> of the encoded term. For strings and atoms, + size is the number of characters <em>not</em> including the + terminating <c>NULL</c>. For binaries, <c>size</c> is the number of + bytes. For lists and tuples, <c>size</c> is the arity of + the object. For other types, <c>size</c> is 0. In all + cases, <c>index</c> is left unchanged.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_list_header(const char *buf, int *index, int *arity)</nametext></name> - <fsummary>Decode a list</fsummary> - <desc> - <p>This function decodes a list header from the binary - format. The number of elements is returned in - <c><![CDATA[arity]]></c>. The <c><![CDATA[arity+1]]></c> elements follows (the last - one is the tail of the list, normally an empty list.) If - <c><![CDATA[arity]]></c> is <c><![CDATA[0]]></c>, it's an empty list.</p> - <p>Note that lists are encoded as strings, if they consist - entirely of integers in the range 0..255. This function will - not decode such strings, use <c><![CDATA[ei_decode_string()]]></c> - instead.</p> + <name><ret>int</ret><nametext>ei_print_term(FILE* fp, const char* buf, int* index)</nametext></name> + <name><ret>int</ret><nametext>ei_s_print_term(char** s, const char* buf, int* index)</nametext></name> + <fsummary>Print a term in clear text.</fsummary> + <desc> + <p>Prints a term, in clear text, to the file + specified by <c>fp</c>, or the buffer pointed to by + <c>s</c>. It + tries to resemble the term printing in the Erlang shell.</p> + <p>In <c>ei_s_print_term()</c>, parameter + <c>s</c> is to + point to a dynamically (malloc) allocated string of + <c>BUFSIZ</c> bytes or a <c>NULL</c> pointer. The string + can be reallocated (and <c>*s</c> can be updated) by this + function if the result is more than <c>BUFSIZ</c> + characters. The string returned is <c>NULL</c>-terminated.</p> + <p>The return value is the number of characters written to the file + or string, or <c>-1</c> if <c>buf[index]</c> does not + contain a valid term. + Unfortunately, I/O errors on <c>fp</c> is not checked.</p> + <p>Argument <c>index</c> is updated, that is, this function + can be viewed as a decode function that decodes a term into a + human-readable format.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_map_header(const char *buf, int *index, int *arity)</nametext></name> - <fsummary>Decode a map</fsummary> + <name><ret>void</ret><nametext>ei_set_compat_rel(release_number)</nametext></name> + <fsummary>Set the ei library in compatibility mode.</fsummary> + <type> + <v>unsigned release_number;</v> + </type> <desc> - <p>This function decodes a map header from the binary - format. The number of key-value pairs is returned in - <c>*arity</c>. Keys and values follow in the following order: - <c>K1, V1, K2, V2, ..., Kn, Vn</c>. This makes a total of - <c>arity*2</c> terms. If <c>arity</c> is zero, it's an empty map. - A correctly encoded map does not have duplicate keys.</p> + <marker id="ei_set_compat_rel"></marker> + <p>By default, the <c>ei</c> library is only guaranteed + to be compatible with other Erlang/OTP components from the same + release as the <c>ei</c> library itself. For example, + <c>ei</c> from + Erlang/OTP R10 is not compatible with an Erlang emulator + from Erlang/OTP R9 by default.</p> + <p>A call to <c>ei_set_compat_rel(release_number)</c> sets + the <c>ei</c> library in compatibility mode of release + <c>release_number</c>. Valid range of + <c>release_number</c> + is <c>[7, current release]</c>. This makes it possible to + communicate with Erlang/OTP components from earlier releases.</p> + <note> + <p>If this function is called, it can only be called once + and must be called before any other functions in the + <c>ei</c> library are called.</p> + </note> + <warning> + <p>You can run into trouble if this feature is used + carelessly. Always ensure that all communicating + components are either from the same Erlang/OTP release, or + from release X and release Y where all components + from release Y are in compatibility mode of release X.</p> + </warning> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_decode_ei_term(const char* buf, int* index, ei_term* term)</nametext></name> - <fsummary>Decode a term, without prior knowledge of type</fsummary> + <name><ret>int</ret><nametext>ei_skip_term(const char* buf, int* index)</nametext></name> + <fsummary>Skip a term.</fsummary> <desc> - <p>This function decodes any term, or at least tries to. If the - term pointed at by <c><![CDATA[*index]]></c> in <c><![CDATA[buf]]></c> fits in the - <c><![CDATA[term]]></c> union, it is decoded, and the appropriate field - in <c><![CDATA[term->value]]></c> is set, and <c><![CDATA[*index]]></c> is - incremented by the term size.</p> - <p>The function returns 1 on successful decoding, -1 on error, - and 0 if the term seems alright, but does not fit in the - <c><![CDATA[term]]></c> structure. If it returns 1, the <c><![CDATA[index]]></c> - will be incremented, and the <c><![CDATA[term]]></c> contains the - decoded term.</p> - <p>The <c><![CDATA[term]]></c> structure will contain the arity for a tuple - or list, size for a binary, string or atom. It will contains - a term if it's any of the following: integer, float, atom, - pid, port or ref.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_decode_term(const char *buf, int *index, void *t)</nametext></name> - <fsummary>Decode a <c><![CDATA[ETERM]]></c></fsummary> - <desc> - <p>This function decodes a term from the binary format. The - term is return in <c><![CDATA[t]]></c> as a <c><![CDATA[ETERM*]]></c>, so <c><![CDATA[t]]></c> - is actually an <c><![CDATA[ETERM**]]></c> (see - <c><![CDATA[erl_interface(3)]]></c>. The term should later be - deallocated.</p> - <p>Note that this function is located in the erl_interface - library.</p> + <p>Skips a term in the specified buffer; + recursively skips elements of lists and tuples, so that a + full term is skipped. This is a way to get the size of an + Erlang term.</p> + <p><c>buf</c> is the buffer.</p> + <p><c>index</c> is updated to point right after the term + in the buffer.</p> + <note> + <p>This can be useful when you want to hold arbitrary + terms: skip them and copy the binary term data to some + buffer.</p> + </note> + <p>Returns <c>0</c> on success, otherwise + <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_print_term(FILE* fp, const char* buf, int* index)</nametext></name> - <name><ret>int</ret><nametext>ei_s_print_term(char** s, const char* buf, int* index)</nametext></name> - <fsummary>Print a term in clear text</fsummary> + <name><ret>int</ret><nametext>ei_x_append(ei_x_buff* x, const ei_x_buff* x2)</nametext></name> + <name><ret>int</ret><nametext>ei_x_append_buf(ei_x_buff* x, const char* buf, int len)</nametext></name> + <fsummary>Append a buffer at the end.</fsummary> <desc> - <p>This function prints a term, in clear text, to the file - given by <c><![CDATA[fp]]></c>, or the buffer pointed to by <c><![CDATA[s]]></c>. It - tries to resemble the term printing in the erlang shell.</p> - <p>In <c><![CDATA[ei_s_print_term()]]></c>, the parameter <c><![CDATA[s]]></c> should - point to a dynamically (malloc) allocated string of - <c><![CDATA[BUFSIZ]]></c> bytes or a NULL pointer. The string may be - reallocated (and <c><![CDATA[*s]]></c> may be updated) by this function - if the result is more than <c><![CDATA[BUFSIZ]]></c> characters. The - string returned is zero-terminated.</p> - <p>The return value is the number of characters written to the - file or string, or -1 if <c><![CDATA[buf[index]]]></c> doesn't contain a - valid term. Unfortunately, I/O errors on <c><![CDATA[fp]]></c> is not - checked.</p> - <p>The argument <c><![CDATA[index]]></c> is updated, i.e. this function can - be viewed as en decode function that decodes a term into a - human readable format.</p> + <p>Appends data at the end of buffer <c>x</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_x_format(ei_x_buff* x, const char* fmt, ...)</nametext></name> <name><ret>int</ret><nametext>ei_x_format_wo_ver(ei_x_buff* x, const char *fmt, ... )</nametext></name> <fsummary>Format a term from a format string and parameters.</fsummary> <desc> - <p>Format a term, given as a string, to a buffer. This - functions works like a sprintf for erlang terms. The - <c><![CDATA[fmt]]></c> contains a format string, with arguments like - <c><![CDATA[~d]]></c>, to insert terms from variables. The following + <p>Formats a term, given as a string, to a buffer. + Works like a sprintf for Erlang terms. + <c>fmt</c> contains a format string, with arguments like + <c>~d</c>, to insert terms from variables. The following formats are supported (with the C types given):</p> - <p></p> <pre> -~a - an atom, char* -~c - a character, char -~s - a string, char* -~i - an integer, int -~l - a long integer, long int -~u - a unsigned long integer, unsigned long int -~f - a float, float -~d - a double float, double float -~p - an Erlang PID, erlang_pid* - </pre> - <p>For instance, to encode a tuple with some stuff:</p> +~a An atom, char* +~c A character, char +~s A string, char* +~i An integer, int +~l A long integer, long int +~u A unsigned long integer, unsigned long int +~f A float, float +~d A double float, double float +~p An Erlang pid, erlang_pid*</pre> + <p>For example, to encode a tuple with some stuff:</p> <pre> ei_x_format("{~a,~i,~d}", "numbers", 12, 3.14159) -encodes the tuple {numbers,12,3.14159} - </pre> - <p>The <c><![CDATA[ei_x_format_wo_ver()]]></c> formats into a buffer, without - the initial version byte.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_x_new(ei_x_buff* x)</nametext></name> - <name><ret>int</ret><nametext>ei_x_new_with_version(ei_x_buff* x)</nametext></name> - <fsummary>Allocate a new buffer</fsummary> - <desc> - <p>This function allocates a new <c><![CDATA[ei_x_buff]]></c> buffer. The - fields of the structure pointed to by <c><![CDATA[x]]></c> parameter is - filled in, and a default buffer is allocated. The - <c><![CDATA[ei_x_new_with_version()]]></c> also puts an initial version - byte, that is used in the binary format. (So that - <c><![CDATA[ei_x_encode_version()]]></c> won't be needed.)</p> +encodes the tuple {numbers,12,3.14159}</pre> + <p><c>ei_x_format_wo_ver()</c> formats into a buffer, + without the initial version byte.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_x_free(ei_x_buff* x)</nametext></name> - <fsummary>Frees a buffer</fsummary> - <desc> - <p>This function frees an <c><![CDATA[ei_x_buff]]></c> buffer. The memory - used by the buffer is returned to the OS.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_x_append(ei_x_buff* x, const ei_x_buff* x2)</nametext></name> - <name><ret>int</ret><nametext>ei_x_append_buf(ei_x_buff* x, const char* buf, int len)</nametext></name> - <fsummary>Appends a buffer at the end</fsummary> + <fsummary>Free a buffer.</fsummary> <desc> - <p>These functions appends data at the end of the buffer <c><![CDATA[x]]></c>.</p> + <p>Frees an <c>ei_x_buff</c> buffer. + The memory used by the buffer is returned to the OS.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_skip_term(const char* buf, int* index)</nametext></name> - <fsummary>skip a term</fsummary> + <name><ret>int</ret><nametext>ei_x_new(ei_x_buff* x)</nametext></name> + <name><ret>int</ret><nametext>ei_x_new_with_version(ei_x_buff* x)</nametext></name> + <fsummary>Allocate a new buffer.</fsummary> <desc> - <p>This function skips a term in the given buffer, it - recursively skips elements of lists and tuples, so that a - full term is skipped. This is a way to get the size of an - erlang term.</p> - <p><c><![CDATA[buf]]></c> is the buffer.</p> - <p><c><![CDATA[index]]></c> is updated to point right after the term in the - buffer.</p> - <note> - <p>This can be useful when you want to hold arbitrary - terms: just skip them and copy the binary term data to some - buffer.</p> - </note> - <p>The function returns <c><![CDATA[0]]></c> on success and <c><![CDATA[-1]]></c> on - failure.</p> + <p>Allocates a new <c>ei_x_buff</c> buffer. The + fields of the structure pointed to by parameter <c>x</c> + is filled in, and a default buffer is allocated. + <c>ei_x_new_with_version()</c> also puts an initial + version byte, which is used in the binary format (so that + <c>ei_x_encode_version()</c> will not be needed.)</p> </desc> </func> </funcs> <section> <title>Debug Information</title> - <p>Some tips on what to check when the emulator doesn't seem to - receive the terms that you send.</p> + <p>Some tips on what to check when the emulator does not seem to + receive the terms that you send:</p> + <list type="bulleted"> - <item>be careful with the version header, use - <c><![CDATA[ei_x_new_with_version()]]></c> when appropriate</item> - <item>turn on distribution tracing on the erlang node</item> - <item>check the result codes from ei_decode_-calls</item> + <item>Be careful with the version header, use + <c>ei_x_new_with_version()</c> when appropriate.</item> + <item>Turn on distribution tracing on the Erlang node.</item> + <item>Check the result codes from <c>ei_decode_-calls</c>.</item> </list> </section> <section> <title>See Also</title> - <p>erl_interface(3)</p> + <p><seealso marker="erl_eterm"><c>erl_eterm</c></seealso></p> </section> </cref> - diff --git a/lib/erl_interface/doc/src/ei_connect.xml b/lib/erl_interface/doc/src/ei_connect.xml index 516357b6a3..607a7cbff4 100644 --- a/lib/erl_interface/doc/src/ei_connect.xml +++ b/lib/erl_interface/doc/src/ei_connect.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,100 +19,233 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>ei_connect</title> <prepared>Jakob Cederlund</prepared> <docno></docno> - <approved>?</approved> - <checked>?</checked> + <approved></approved> + <checked></checked> <date>2001-09-01</date> <rev>A</rev> - <file>ei_connect.sgml</file> + <file>ei_connect.xml</file> </header> <lib>ei_connect</lib> - <libsummary>Communicate with distributed erlang</libsummary> + <libsummary>Communicate with distributed Erlang.</libsummary> <description> - <p>This module enables C programs to communicate with erlang nodes, - using the erlang distribution over TCP/IP.</p> - <p>A C node appears to Erlang as a - <em>hidden node</em>. + <p>This module enables C-programs to communicate with Erlang nodes, + using the Erlang distribution over TCP/IP.</p> + + <p>A C-node appears to Erlang as a <em>hidden node</em>. That is, Erlang processes that know the name of the - C node are able to communicate with it in a normal manner, but - the node name will not appear in the listing provided by the - Erlang function <c><![CDATA[nodes/0]]></c>.</p> - <p>The environment variable <c><![CDATA[ERL_EPMD_PORT]]></c> can be used - to indicate which logical cluster a C node belongs to.</p> + C-node can communicate with it in a normal manner, but + the node name is not shown in the listing provided by + <seealso marker="erts:erlang#nodes/0"><c>erlang:nodes/0</c></seealso> + in <c>ERTS</c>.</p> + + <p>The environment variable <c>ERL_EPMD_PORT</c> can be used + to indicate which logical cluster a C-node belongs to.</p> </description> <section> - <title>Timeout functions</title> + <title>Time-Out Functions</title> <p>Most functions appear in a version with the suffix - <c><![CDATA[_tmo]]></c> appended to the function name. Those function take - an additional argument, a timeout in <em>milliseconds</em>. The - semantics is this; for each communication primitive involved in + <c>_tmo</c> appended to the function name. Those functions + take an extra argument, a time-out in <em>milliseconds</em>. The + semantics is this: for each communication primitive involved in the operation, if the primitive does not complete within the time - specified, the function will return an error and - <c><![CDATA[erl_errno]]></c> will be set to <c><![CDATA[ETIMEDOUT]]></c>. With - communication primitive is meant an operation on the socket, like - <c><![CDATA[connect]]></c>, <c><![CDATA[accept]]></c>, <c><![CDATA[recv]]></c> or <c><![CDATA[send]]></c>.</p> - <p>Obviously the timeouts are for implementing fault tolerance, - not to keep hard realtime promises. The <c><![CDATA[_tmo]]></c> functions + specified, the function returns an error and + <c>erl_errno</c> is set to <c>ETIMEDOUT</c>. + With communication primitive is meant an operation on the socket, like + <c>connect</c>, <c>accept</c>, + <c>recv</c>, or <c>send</c>.</p> + + <p>Clearly the time-outs are for implementing fault tolerance, + not to keep hard real-time promises. The <c>_tmo</c> functions are for detecting non-responsive peers and to avoid blocking on - socket operations. </p> - <p>A timeout value of <c><![CDATA[0]]></c> (zero), means that timeouts are - disabled. Calling a <c><![CDATA[_tmo]]></c>-function with the last argument as - <c><![CDATA[0]]></c> is therefore exactly the same thing as calling the - function without the <c><![CDATA[_tmo]]></c> suffix.</p> - <p>As with all other ei functions, you are <em>not</em> expected - to put the socket in non blocking mode yourself in the program. Every - use of non blocking mode is embedded inside the timeout + socket operations.</p> + + <p>A time-out value of <c>0</c> (zero) means that time-outs are + disabled. Calling a <c>_tmo</c> function with the last + argument as <c>0</c> is therefore the same thing as calling + the function without the <c>_tmo</c> suffix.</p> + + <p>As with all other functions starting with <c>ei_</c>, + you are <em>not</em> expected + to put the socket in non-blocking mode yourself in the program. Every + use of non-blocking mode is embedded inside the time-out functions. The socket will always be back in blocking mode after the operations are completed (regardless of the result). To - avoid problems, leave the socket options alone. Ei will handle + avoid problems, leave the socket options alone. <c>ei</c> handles any socket options that need modification.</p> - <p>In all other senses, the <c><![CDATA[_tmo]]></c> functions inherit all - the return values and the semantics from the functions without - the <c><![CDATA[_tmo]]></c> suffix.</p> + + <p>In all other senses, the <c>_tmo</c> functions inherit all + the return values and the semantics from the functions without + the <c>_tmo</c> suffix.</p> </section> + <funcs> <func> + <name><ret>struct hostent</ret><nametext>*ei_gethostbyaddr(const char *addr, int len, int type)</nametext></name> + <name><ret>struct hostent</ret><nametext>*ei_gethostbyaddr_r(const char *addr, int length, int type, struct hostent *hostp, char *buffer, int buflen, int *h_errnop)</nametext></name> + <name><ret>struct hostent</ret><nametext>*ei_gethostbyname(const char *name)</nametext></name> + <name><ret>struct hostent</ret><nametext>*ei_gethostbyname_r(const char *name, struct hostent *hostp, char *buffer, int buflen, int *h_errnop)</nametext></name> + <fsummary>Name lookup functions.</fsummary> + <desc> + <p>Convenience functions for some common name lookup functions.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_accept(ei_cnode *ec, int listensock, ErlConnect *conp)</nametext></name> + <fsummary>Accept a connection from another node.</fsummary> + <desc> + <p>Used by a server process to accept a + connection from a client process.</p> + <list type="bulleted"> + <item> + <p><c>ec</c> is the C-node structure.</p> + </item> + <item> + <p><c>listensock</c> is an open socket descriptor on + which <c>listen()</c> has previously been called.</p> + </item> + <item> + <p><c>conp</c> is a pointer to an + <c>ErlConnect</c> struct, described as follows:</p> + <code type="none"><![CDATA[ +typedef struct { + char ipadr[4]; + char nodename[MAXNODELEN]; +} ErlConnect; + ]]></code> + </item> + </list> + <p>On success, <c>conp</c> is filled in with the address and + node name of the connecting client and a file descriptor is + returned. On failure, <c>ERL_ERROR</c> is returned and + <c>erl_errno</c> is set to <c>EIO</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_accept_tmo(ei_cnode *ec, int listensock, ErlConnect *conp, unsigned timeout_ms)</nametext></name> + <fsummary>Accept a connection from another node with optional + time-out.</fsummary> + <desc> + <p>Equivalent to + <c>ei_accept</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_connect(ei_cnode* ec, char *nodename)</nametext></name> + <name><ret>int</ret><nametext>ei_xconnect(ei_cnode* ec, Erl_IpAddr adr, char *alivename)</nametext></name> + <fsummary>Establish a connection to an Erlang node.</fsummary> + <desc> + <p>Sets up a connection to an Erlang node.</p> + <p><c>ei_xconnect()</c> requires the IP address of the + remote host and the alive name of the remote node to be + specified. <c>ei_connect()</c> provides an alternative + interface and determines the information from the node name + provided.</p> + <list type="bulleted"> + <item><c>addr</c> is the 32-bit IP address of the remote + host.</item> + <item><c>alive</c> is the alivename of the remote node. + </item> + <item><c>node</c> is the name of the remote node.</item> + </list> + <p>These functions return an open file descriptor on success, or + a negative value indicating that an error occurred. In the latter + case they set <c>erl_errno</c> to one of the + following:</p> + <taglist> + <tag><c>EHOSTUNREACH</c></tag> + <item>The remote host <c>node</c> is unreachable.</item> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> + <item>I/O error.</item> + </taglist> + <p>Also, <c>errno</c> values from + <c>socket</c><em>(2)</em> and + <c>connect</c><em>(2)</em> + system calls may be propagated into <c>erl_errno</c>.</p> + <p><em>Example:</em></p> + <code type="none"><![CDATA[ +#define NODE "[email protected]" +#define ALIVE "madonna" +#define IP_ADDR "150.236.14.75" + +/*** Variant 1 ***/ +int fd = ei_connect(&ec, NODE); + +/*** Variant 2 ***/ +struct in_addr addr; +addr.s_addr = inet_addr(IP_ADDR); +fd = ei_xconnect(&ec, &addr, ALIVE); + ]]></code> + </desc> + </func> + + <func> <name><ret>int</ret><nametext>ei_connect_init(ei_cnode* ec, const char* this_node_name, const char *cookie, short creation)</nametext></name> <name><ret>int</ret><nametext>ei_connect_xinit(ei_cnode* ec, const char *thishostname, const char *thisalivename, const char *thisnodename, Erl_IpAddr thisipaddr, const char *cookie, short creation)</nametext></name> <fsummary>Initialize for a connection.</fsummary> <desc> - <p>These function initializes the <c><![CDATA[ec]]></c> structure, to + <p>Initializes the <c>ec</c> structure, to identify the node name and cookie of the server. One of them - has to be called before other functions that works on the - type <c><![CDATA[ei_cnode]]></c> or a file descriptor associated with a - connection to another node are used.</p> - <p><c><![CDATA[ec]]></c> is a structure containing information about the - C-node. It is used in other <c><![CDATA[ei]]></c> functions for - connecting and receiving data.</p> - <p><c><![CDATA[this_node_name]]></c> is the registered name of the process - (the name before '@').</p> - <p><c><![CDATA[cookie]]></c> is the cookie for the node.</p> - <p><c><![CDATA[creation]]></c> identifies a specific instance of a C - node. It can help prevent the node from receiving messages - sent to an earlier process with the same registered name.</p> - <p><c><![CDATA[thishostname]]></c> is the name of the machine we're running - on. If long names are to be used, it should be fully - qualified (i.e. <c><![CDATA[durin.erix.ericsson.se]]></c> instead of - <c><![CDATA[durin]]></c>).</p> - <p><c><![CDATA[thisalivename]]></c> is the registered name of the process.</p> - <p><c><![CDATA[thisnodename]]></c> is the full name of the node, - i.e. <c><![CDATA[einode@durin]]></c>.</p> - <p><c><![CDATA[thispaddr]]></c> if the IP address of the host.</p> - <p>A C node acting as a server will be assigned a creation - number when it calls <c><![CDATA[ei_publish()]]></c>.</p> - <p>A connection is closed by simply closing the socket. Refer - to system documentation to close the socket gracefully (when - there are outgoing packets before close).</p> - <p>This function return a negative value indicating that an error + must be called before other functions that works on the + <c>ei_cnode</c> type or a file descriptor associated with + a connection to another node is used.</p> + <list type="bulleted"> + <item> + <p><c>ec</c> is a structure containing information about + the C-node. It is used in other <c>ei</c> functions + for connecting and receiving data.</p> + </item> + <item> + <p><c>this_node_name</c> is the registered name of the + process (the name before '@').</p> + </item> + <item> + <p><c>cookie</c> is the cookie for the node.</p> + </item> + <item> + <p><c>creation</c> identifies a specific instance of a + C-node. It can help prevent the node from receiving messages + sent to an earlier process with the same registered name.</p> + </item> + <item> + <p><c>thishostname</c> is the name of the machine we are + running on. If long names are to be used, they are to be fully + qualified (that is, <c>durin.erix.ericsson.se</c> + instead of <c>durin</c>).</p> + </item> + <item> + <p><c>thisalivename</c> is the registered name of the + process.</p> + </item> + <item> + <p><c>thisnodename</c> is the full name of the node, + that is, <c>einode@durin</c>.</p> + </item> + <item> + <p><c>thispaddr</c> if the IP address of the host.</p> + </item> + </list> + <p>A C-node acting as a server is assigned a creation + number when it calls <c>ei_publish()</c>.</p> + <p>A connection is closed by simply closing the socket. + For information about how to close the socket gracefully (when + there are outgoing packets before close), see the relevant system + documentation.</p> + <p>These functions return a negative value indicating that an error occurred.</p> - <p>Example 1: - </p> + <p><em>Example 1:</em></p> <code type="none"><![CDATA[ int n = 0; struct in_addr addr; @@ -129,8 +262,7 @@ if (ei_connect_xinit(&ec, exit(-1); } ]]></code> - <p>Example 2: - </p> + <p><em>Example 2:</em></p> <code type="none"><![CDATA[ if (ei_connect_init(&ec, "madonna", "cookie...", n++) < 0) { fprintf(stderr,"ERROR when initializing: %d",erl_errno); @@ -139,114 +271,184 @@ if (ei_connect_init(&ec, "madonna", "cookie...", n++) < 0) { ]]></code> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_connect(ei_cnode* ec, char *nodename)</nametext></name> - <name><ret>int</ret><nametext>ei_xconnect(ei_cnode* ec, Erl_IpAddr adr, char *alivename)</nametext></name> - <fsummary>Establishe a connection to an Erlang node</fsummary> + <name><ret>int</ret><nametext>ei_connect_tmo(ei_cnode* ec, char *nodename, unsigned timeout_ms)</nametext></name> + <name><ret>int</ret><nametext>ei_xconnect_tmo(ei_cnode* ec, Erl_IpAddr adr, char *alivename, unsigned timeout_ms)</nametext></name> + <fsummary>Establish a connection to an Erlang node with optional + time-out.</fsummary> <desc> - <p>These functions set up a connection to an Erlang node.</p> - <p><c><![CDATA[ei_xconnect()]]></c> requires the IP address of the remote - host and the alive name of the remote node - to be specified. <c><![CDATA[ei_connect()]]></c> provides an alternative - interface, and determines the information from the node name - provided.</p> - <p><c><![CDATA[addr]]></c> is the 32-bit IP address of the remote host.</p> - <p><c><![CDATA[alive]]></c> is the alivename of the remote node.</p> - <p><c><![CDATA[node]]></c> is the name of the remote node.</p> - <p>These functions return an open file descriptor on success, or - a negative value indicating that an error occurred --- in - which case they will set <c><![CDATA[erl_errno]]></c> to one of:</p> - <taglist> - <tag><c><![CDATA[EHOSTUNREACH]]></c></tag> - <item>The remote host <c><![CDATA[node]]></c> is unreachable</item> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> - <item>I/O error.</item> - </taglist> - <p>Additionally, <c><![CDATA[errno]]></c> values from - <c><![CDATA[socket]]></c><em>(2)</em> and <c><![CDATA[connect]]></c><em>(2)</em> - system calls may be propagated into <c><![CDATA[erl_errno]]></c>.</p> - <p>Example:</p> - <code type="none"><![CDATA[ -#define NODE "[email protected]" -#define ALIVE "madonna" -#define IP_ADDR "150.236.14.75" + <p>Equivalent to + <c>ei_connect</c> and <c>ei_xconnect</c> with an optional time-out + argument, see the description at the beginning of this manual + page.</p> + </desc> + </func> -/*** Variant 1 ***/ -int fd = ei_connect(&ec, NODE); + <func> + <name><ret>int</ret><nametext>ei_get_tracelevel(void)</nametext></name> + <name><ret>void</ret><nametext>ei_set_tracelevel(int level)</nametext></name> + <fsummary>Get and set functions for tracing.</fsummary> + <desc> + <p>Used to set tracing on the distribution. The levels are different + verbosity levels. A higher level means more information. See also + section <seealso marker="#debug_information"> + Debug Information</seealso>.</p> + <p>These functions are not thread safe.</p> + </desc> + </func> -/*** Variant 2 ***/ -struct in_addr addr; -addr.s_addr = inet_addr(IP_ADDR); -fd = ei_xconnect(&ec, &addr, ALIVE); - ]]></code> + <func> + <name><ret>int</ret><nametext>ei_publish(ei_cnode *ec, int port)</nametext></name> + <fsummary>Publish a node name.</fsummary> + <desc> + <p>Used by a server process to register + with the local name server EPMD, thereby allowing + other processes to send messages by using the registered name. + Before calling either of these functions, the process should + have called <c>bind()</c> and <c>listen()</c> + on an open socket.</p> + <list type="bulleted"> + <item> + <p><c>ec</c> is the C-node structure.</p> + </item> + <item> + <p><c>port</c> is the local name to register, and is to + be the same as the port number that was previously bound to the + socket.</p> + </item> + <item> + <p><c>addr</c> is the 32-bit IP address of the local + host.</p> + </item> + </list> + <p>To unregister with EPMD, simply close the returned descriptor. Do + not use <c>ei_unpublish()</c>, which is deprecated + anyway.</p> + <p>On success, the function returns a descriptor connecting the + calling process to EPMD. On failure, <c>-1</c> is returned and + <c>erl_errno</c> is set to <c>EIO</c>.</p> + <p>Also, <c>errno</c> values from + <c>socket</c><em>(2)</em> and + <c>connect</c><em>(2)</em> system calls may be propagated + into <c>erl_errno</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_connect_tmo(ei_cnode* ec, char *nodename, unsigned timeout_ms)</nametext></name> - <name><ret>int</ret><nametext>ei_xconnect_tmo(ei_cnode* ec, Erl_IpAddr adr, char *alivename, unsigned timeout_ms)</nametext></name> - <fsummary>Establish a connection to an Erlang node with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_publish_tmo(ei_cnode *ec, int port, unsigned timeout_ms)</nametext></name> + <fsummary>Publish a node name with optional time-out.</fsummary> <desc> - <p>ei_connect and ei_xconnect with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Equivalent to + <c>ei_publish</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_receive(int fd, unsigned char* bufp, int bufsize)</nametext></name> - <fsummary>Receive a message</fsummary> + <fsummary>Receive a message.</fsummary> <desc> - <p>This function receives a message consisting of a sequence + <p>Receives a message consisting of a sequence of bytes in the Erlang external format.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection. It - is obtained from a previous <c><![CDATA[ei_connect]]></c> or - <c><![CDATA[ei_accept]]></c>.</p> - <p><c><![CDATA[bufp]]></c> is a buffer large enough to hold the expected - message. </p> - <p><c><![CDATA[bufsize]]></c> indicates the size of <c><![CDATA[bufp]]></c>.</p> - <p>If a <em>tick</em> occurs, i.e., the Erlang node on the + <list type="bulleted"> + <item> + <p><c>fd</c> is an open descriptor to an Erlang + connection. It is obtained from a previous + <c>ei_connect</c> or <c>ei_accept</c>.</p> + </item> + <item> + <p><c>bufp</c> is a buffer large enough to hold the + expected message.</p> + </item> + <item> + <p><c>bufsize</c> indicates the size of + <c>bufp</c>.</p> + </item> + </list> + <p>If a <em>tick</em> occurs, that is, the Erlang node on the other end of the connection has polled this node to see if it - is still alive, the function will return <c><![CDATA[ERL_TICK]]></c> and - no message will be placed in the buffer. Also, - <c><![CDATA[erl_errno]]></c> will be set to <c><![CDATA[EAGAIN]]></c>.</p> + is still alive, the function returns <c>ERL_TICK</c> and + no message is placed in the buffer. Also, + <c>erl_errno</c> is set to <c>EAGAIN</c>.</p> <p>On success, the message is placed in the specified buffer and the function returns the number of bytes actually read. On - failure, the function returns <c><![CDATA[ERL_ERROR]]></c> and will set - <c><![CDATA[erl_errno]]></c> to one of:</p> + failure, the function returns <c>ERL_ERROR</c> and sets + <c>erl_errno</c> to one of the following:</p> <taglist> - <tag><c><![CDATA[EAGAIN]]></c></tag> + <tag><c>EAGAIN</c></tag> <item>Temporary error: Try again.</item> - <tag><c><![CDATA[EMSGSIZE]]></c></tag> - <item>Buffer too small.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>EMSGSIZE</c></tag> + <item>Buffer is too small.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> </taglist> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_receive_tmo(int fd, unsigned char* bufp, int bufsize, unsigned timeout_ms)</nametext></name> - <fsummary>Receive a message with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_receive_encoded(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen)</nametext></name> + <fsummary>Obsolete function for receiving a message.</fsummary> <desc> - <p>ei_receive with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>This function is retained for compatibility with code + generated by the interface compiler and with code following + examples in the same application.</p> + <p>In essence, the function performs the same operation as + <c>ei_xreceive_msg</c>, but instead of using an + <c>ei_x_buff</c>, the function expects a pointer to a character + pointer (<c>mbufp</c>), where the character pointer + is to point to a memory area allocated by <c>malloc</c>. + Argument <c>bufsz</c> is to be a pointer to an integer + containing the exact size (in bytes) of the memory area. The function + may reallocate the memory area and will in such cases put the new + size in <c>*bufsz</c> and update + <c>*mbufp</c>.</p> + <p>Returns either <c>ERL_TICK</c> or the + <c>msgtype</c> field of the + <c>erlang_msg *msg</c>. The length + of the message is put in <c>*msglen</c>. On error + a value <c>< 0</c> is returned.</p> + <p>It is recommended to use <c>ei_xreceive_msg</c> instead when + possible, for the sake of readability. However, the function will + be retained in the interface for compatibility and + will <em>not</em> be removed in future releases without prior + notice.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_receive_encoded_tmo(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen, unsigned timeout_ms)</nametext></name> + <fsummary>Obsolete function for receiving a message with time-out. + </fsummary> + <desc> + <p>Equivalent to + <c>ei_receive_encoded</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_receive_msg(int fd, erlang_msg* msg, ei_x_buff* x)</nametext></name> <name><ret>int</ret><nametext>ei_xreceive_msg(int fd, erlang_msg* msg, ei_x_buff* x)</nametext></name> - <fsummary>Receive a message</fsummary> + <fsummary>Receive a message.</fsummary> <desc> - <p>These functions receives a message to the buffer in - <c><![CDATA[x]]></c>. <c><![CDATA[ei_xreceive_msg]]></c> allows the buffer in - <c><![CDATA[x]]></c> to grow, but <c><![CDATA[ei_receive_msg]]></c> fails if the - message is bigger than the preallocated buffer in <c><![CDATA[x]]></c>.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[msg]]></c> is a pointer to an <c><![CDATA[erlang_msg]]></c> structure - and contains information on the message received.</p> - <p><c><![CDATA[x]]></c> is buffer obtained from <c><![CDATA[ei_x_new]]></c>.</p> - <p>On success, the function returns <c><![CDATA[ERL_MSG]]></c> and the - <c><![CDATA[msg]]></c> struct will be initialized. <c><![CDATA[erlang_msg]]></c> - is defined as follows:</p> + <p>Receives a message to the buffer in <c>x</c>. + <c>ei_xreceive_msg</c> allows the buffer in + <c>x</c> to grow, but <c>ei_receive_msg</c> + fails if the message is larger than the pre-allocated buffer in + <c>x</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>msg</c> is a pointer to an + <c>erlang_msg</c> structure + and contains information on the message received.</item> + <item><c>x</c> is buffer obtained from + <c>ei_x_new</c>.</item> + </list> + <p>On success, the functions return <c>ERL_MSG</c> and the + <c>msg</c> struct is initialized. + <c>erlang_msg</c> is defined as follows:</p> <code type="none"><![CDATA[ typedef struct { long msgtype; @@ -257,125 +459,82 @@ typedef struct { erlang_trace token; } erlang_msg; ]]></code> - <p><c><![CDATA[msgtype]]></c> identifies the type of message, and is one of - <c><![CDATA[ERL_SEND]]></c>, <c><![CDATA[ERL_REG_SEND]]></c>, <c><![CDATA[ERL_LINK]]></c>, - <c><![CDATA[ERL_UNLINK]]></c> and <c><![CDATA[ERL_EXIT]]></c>.</p> - <p>If <c><![CDATA[msgtype]]></c> is <c><![CDATA[ERL_SEND]]></c> this indicates that an - ordinary send operation has taken place, and <c><![CDATA[msg->to]]></c> - contains the Pid of the recipient (the C-node). If - <c><![CDATA[type]]></c> is <c><![CDATA[ERL_REG_SEND]]></c> then a registered send - operation took place, and <c><![CDATA[msg->from]]></c> contains the Pid - of the sender.</p> - <p>If <c><![CDATA[msgtype]]></c> is <c><![CDATA[ERL_LINK]]></c> or <c><![CDATA[ERL_UNLINK]]></c>, then - <c><![CDATA[msg->to]]></c> and <c><![CDATA[msg->from]]></c> contain the pids of the - sender and recipient of the link or unlink.</p> - <p>If <c><![CDATA[msgtype]]></c> is <c><![CDATA[ERL_EXIT]]></c>, then this indicates that - a link has been broken. In this case, <c><![CDATA[msg->to]]></c> and - <c><![CDATA[msg->from]]></c> contain the pids of the linked processes.</p> - <p>The return value is the same as for <c><![CDATA[ei_receive]]></c>, see - above.</p> + <p><c>msgtype</c> identifies the type of message, and is + one of the following:</p> + <taglist> + <tag><c>ERL_SEND</c></tag> + <item> + <p>Indicates that an ordinary send operation has occurred. + <c>msg->to</c> contains the pid of the recipient (the + C-node).</p> + </item> + <tag><c>ERL_REG_SEND</c></tag> + <item> + <p>A registered send operation occurred. + <c>msg->from</c> contains the pid of the sender.</p> + </item> + <tag><c>ERL_LINK</c> or + <c>ERL_UNLINK</c></tag> + <item> + <p><c>msg->to</c> and + <c>msg->from</c> contain the pids of the + sender and recipient of the link or unlink.</p> + </item> + <tag><c>ERL_EXIT</c></tag> + <item> + <p>Indicates a broken link. <c>msg->to</c> and + <c>msg->from</c> contain the pids of the linked + processes.</p> + </item> + </taglist> + <p>The return value is the same as for + <seealso marker="#ei_receive"><c>ei_receive</c></seealso>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_receive_msg_tmo(int fd, erlang_msg* msg, ei_x_buff* x, unsigned imeout_ms)</nametext></name> <name><ret>int</ret><nametext>ei_xreceive_msg_tmo(int fd, erlang_msg* msg, ei_x_buff* x, unsigned timeout_ms)</nametext></name> - <fsummary>Receive a message with optional timeout</fsummary> - <desc> - <p>ei_receive_msg and ei_xreceive_msg with an optional timeout argument, - see the description at the beginning of this document.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_receive_encoded(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen)</nametext></name> - <fsummary>Obsolete function for receiving a message</fsummary> - <desc> - <p>This function is retained for compatibility with code - generated by the interface compiler and with code following - examples in the same application.</p> - <p>In essence the function performs the same operation as - <c><![CDATA[ei_xreceive_msg]]></c>, but instead of using an ei_x_buff, the - function expects a pointer to a character pointer - (<c><![CDATA[mbufp]]></c>), where the character pointer should point to a - memory area allocated by <c><![CDATA[malloc]]></c>. The argument - <c><![CDATA[bufsz]]></c> should be a pointer to an integer containing the - exact size (in bytes) of the memory area. The function may - reallocate the memory area and will in such cases put the new - size in <c><![CDATA[*bufsz]]></c> and update <c><![CDATA[*mbufp]]></c>.</p> - <p>Furthermore the function returns either ERL_TICK or the - <c><![CDATA[msgtype]]></c> field of the <c><![CDATA[erlang_msg *msg]]></c>. The actual - length of the message is put in <c><![CDATA[*msglen]]></c>. On error it - will return a value <c><![CDATA[< 0]]></c>.</p> - <p>It is recommended to use ei_xreceive_msg instead when - possible, for the sake of readability. The function will - however be retained in the interface for compatibility and - will <em>not</em> be removed not be removed in future releases - without notice.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_receive_encoded_tmo(int fd, char **mbufp, int *bufsz, erlang_msg *msg, int *msglen, unsigned timeout_ms)</nametext></name> - <fsummary>Obsolete function for receiving a message with timeout</fsummary> - <desc> - <p>ei_receive_encoded with an optional timeout argument, - see the description at the beginning of this document.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_send(int fd, erlang_pid* to, char* buf, int len)</nametext></name> - <fsummary>Send a message</fsummary> - <desc> - <p>This function sends an Erlang term to a process.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[to]]></c> is the Pid of the intended recipient of the - message.</p> - <p><c><![CDATA[buf]]></c> is the buffer containing the term in binary - format.</p> - <p><c><![CDATA[len]]></c> is the length of the message in bytes.</p> - <p>The function returns 0 if successful, otherwise -1, in the - latter case it will set <c><![CDATA[erl_errno]]></c> to <c><![CDATA[EIO]]></c>.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_send_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)</nametext></name> - <fsummary>Send a message with optional timeout</fsummary> + <fsummary>Receive a message with optional time-out.</fsummary> <desc> - <p>ei_send with an optional timeout argument, - see the description at the beginning of this document.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_send_encoded(int fd, erlang_pid* to, char* buf, int len)</nametext></name> - <fsummary>Obsolete function to send a message</fsummary> - <desc> - <p>Works exactly as ei_send, the alternative name retained for - backward compatibility. The function will <em>not</em> be - removed without notice.</p> + <p>Equivalent to <c>ei_receive_msg</c> and <c>ei_xreceive_msg</c> + with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_send_encoded_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)</nametext></name> - <fsummary>Obsolete function to send a message with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_receive_tmo(int fd, unsigned char* bufp, int bufsize, unsigned timeout_ms)</nametext></name> + <fsummary>Receive a message with optional time-out.</fsummary> <desc> - <p>ei_send_encoded with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Equivalent to + <c>ei_receive</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_reg_send(ei_cnode* ec, int fd, char* server_name, char* buf, int len)</nametext></name> - <fsummary>Send a message to a registered name</fsummary> + <fsummary>Send a message to a registered name.</fsummary> <desc> - <p>This function sends an Erlang term to a registered process. - </p> - <p>This function sends an Erlang term to a process.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[server_name]]></c> is the registered name of the intended - recipient.</p> - <p><c><![CDATA[buf]]></c> is the buffer containing the term in binary - format.</p> - <p><c><![CDATA[len]]></c> is the length of the message in bytes.</p> - <p>The function returns 0 if successful, otherwise -1, in the - latter case it will set <c><![CDATA[erl_errno]]></c> to <c><![CDATA[EIO]]></c>.</p> - <p>Example, send the atom "ok" to the process "worker":</p> + <p>Sends an Erlang term to a registered process.</p> + <list type="bulleted"> + <item> + <p><c>fd</c> is an open descriptor to an Erlang + connection.</p> + </item> + <item><c>server_name</c> is the registered name of the + intended recipient.</item> + <item><c>buf</c> is the buffer containing the term in + binary format.</item> + <item><c>len</c> is the length of the message in bytes. + </item> + </list> + <p>Returns <c>0</c> if successful, otherwise <c>-1</c>. In + the latter case it sets <c>erl_errno</c> to + <c>EIO</c>.</p> + <p><em>Example:</em></p> + <p>Send the atom "ok" to the process "worker":</p> <code type="none"><![CDATA[ ei_x_buff x; ei_x_new_with_version(&x); @@ -385,96 +544,98 @@ if (ei_reg_send(&ec, fd, x.buff, x.index) < 0) ]]></code> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_reg_send_tmo(ei_cnode* ec, int fd, char* server_name, char* buf, int len, unsigned timeout_ms)</nametext></name> - <fsummary>Send a message to a registered name with optional timeout</fsummary> - <desc> - <p>ei_reg_send with an optional timeout argument, - see the description at the beginning of this document.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_send_reg_encoded(int fd, const erlang_pid *from, const char *to, const char *buf, int len)</nametext></name> - <fsummary>Obsolete function to send a message to a registered name</fsummary> - <desc> - <p>This function is retained for compatibility with code - generated by the interface compiler and with code following - examples in the same application.</p> - <p>The function works as <c><![CDATA[ei_reg_send]]></c> with one - exception. Instead of taking the <c><![CDATA[ei_cnode]]></c> as a first - argument, it takes a second argument, an <c><![CDATA[erlang_pid]]></c> - which should be the process identifier of the sending process - (in the erlang distribution protocol). </p> - <p>A suitable <c><![CDATA[erlang_pid]]></c> can be constructed from the - <c><![CDATA[ei_cnode]]></c> structure by the following example code:</p> - <code type="none"><![CDATA[ - ei_cnode ec; - erlang_pid *self; - int fd; /* the connection fd */ - ... - self = ei_self(&ec); - self->num = fd; - ]]></code> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_send_reg_encoded_tmo(int fd, const erlang_pid *from, const char *to, const char *buf, int len)</nametext></name> - <fsummary>Obsolete function to send a message to a registered name with timeout</fsummary> + <fsummary>Send a message to a registered name with optional time-out + </fsummary> <desc> - <p>ei_send_reg_encoded with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Equivalent to + <c>ei_reg_send</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_rpc(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen, ei_x_buff *x)</nametext></name> <name><ret>int</ret><nametext>ei_rpc_to(ei_cnode *ec, int fd, char *mod, char *fun, const char *argbuf, int argbuflen)</nametext></name> <name><ret>int</ret><nametext>ei_rpc_from(ei_cnode *ec, int fd, int timeout, erlang_msg *msg, ei_x_buff *x)</nametext></name> - <fsummary>Remote Procedure Call from C to Erlang</fsummary> + <fsummary>Remote Procedure Call from C to Erlang.</fsummary> <desc> - <p>These functions support calling Erlang functions on remote nodes. - <c><![CDATA[ei_rpc_to()]]></c> sends an rpc request to a remote node and - <c><![CDATA[ei_rpc_from()]]></c> receives the results of such a call. - <c><![CDATA[ei_rpc()]]></c> combines the functionality of these two functions - by sending an rpc request and waiting for the results. See also - <c><![CDATA[rpc:call/4]]></c>. </p> - <p><c><![CDATA[ec]]></c> is the C-node structure previously initiated by a - call to <c><![CDATA[ei_connect_init()]]></c> or - <c><![CDATA[ei_connect_xinit()]]></c></p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[timeout]]></c> is the maximum time (in ms) to wait for - results. Specify <c><![CDATA[ERL_NO_TIMEOUT]]></c> to wait forever. - <c><![CDATA[ei_rpc()]]></c> will wait infinitely for the answer, - i.e. the call will never time out.</p> - <p><c><![CDATA[mod]]></c> is the name of the module containing the function - to be run on the remote node.</p> - <p><c><![CDATA[fun]]></c> is the name of the function to run.</p> - <p><c><![CDATA[argbuf]]></c> is a pointer to a buffer with an encoded - Erlang list, without a version magic number, containing the - arguments to be passed to the function.</p> - <p><c><![CDATA[argbuflen]]></c> is the length of the buffer containing the - encoded Erlang list.</p> - <p><c><![CDATA[msg]]></c> structure of type <c><![CDATA[erlang_msg]]></c> and contains - information on the message received. See <c><![CDATA[ei_receive_msg()]]></c> - for a description of the <c><![CDATA[erlang_msg]]></c> format.</p> - <p><c><![CDATA[x]]></c> points to the dynamic buffer that receives the - result. For for <c><![CDATA[ei_rpc()]]></c> this will be the result - without the version magic number. For <c><![CDATA[ei_rpc_from()]]></c> - the result will return a version magic number and a 2-tuple - <c><![CDATA[{rex,Reply}]]></c>.</p> - <p><c><![CDATA[ei_rpc()]]></c> returns the number of bytes in the result - on success and -1 on failure. <c><![CDATA[ei_rpc_from()]]></c> returns - number of bytes or one of <c><![CDATA[ERL_TICK]]></c>, <c><![CDATA[ERL_TIMEOUT]]></c> - and <c><![CDATA[ERL_ERROR]]></c> otherwise. When failing, - all three functions set <c><![CDATA[erl_errno]]></c> to one of:</p> + <p>Supports calling Erlang functions on remote nodes. + <c>ei_rpc_to()</c> sends an RPC request to a remote node + and <c>ei_rpc_from()</c> receives the results of such a + call. <c>ei_rpc()</c> combines the functionality of these + two functions by sending an RPC request and waiting for the results. + See also <seealso marker="kernel:rpc#call/4"> + <c>rpc:call/4</c></seealso> in Kernel.</p> + <list type="bulleted"> + <item> + <p><c>ec</c> is the C-node structure previously + initiated by a call to <c>ei_connect_init()</c> or + <c>ei_connect_xinit()</c>.</p> + </item> + <item> + <p><c>fd</c> is an open descriptor to an Erlang + connection.</p> + </item> + <item> + <p><c>timeout</c> is the maximum time (in milliseconds) + to wait for results. Specify <c>ERL_NO_TIMEOUT</c> to + wait forever. + <c>ei_rpc()</c> waits infinitely for the answer, + that is, the call will never time out.</p> + </item> + <item> + <p><c>mod</c> is the name of the module containing the + function to be run on the remote node.</p> + </item> + <item> + <p><c>fun</c> is the name of the function to run.</p> + </item> + <item> + <p><c>argbuf</c> is a pointer to a buffer with an + encoded Erlang list, without a version magic number, containing + the arguments to be passed to the function.</p> + </item> + <item> + <p><c>argbuflen</c> is the length of the buffer + containing the encoded Erlang list.</p> + </item> + <item> + <p><c>msg</c> is structure of type + <c>erlang_msg</c> and contains information on the + message + received. For a description of the <c>erlang_msg</c> + format, see <seealso marker="#ei_receive_msg"> + <c>ei_receive_msg</c></seealso>.</p> + </item> + <item> + <p><c>x</c> points to the dynamic buffer that receives + the result. For <c>ei_rpc()</c> this is the result + without the version magic number. For + <c>ei_rpc_from()</c> the result returns a version + magic number and a 2-tuple <c>{rex,Reply}</c>.</p> + </item> + </list> + <p><c>ei_rpc()</c> returns the number of bytes in the + result on success and <c>-1</c> on failure. + <c>ei_rpc_from()</c> returns the + number of bytes, otherwise one of <c>ERL_TICK</c>, + <c>ERL_TIMEOUT</c>, + and <c>ERL_ERROR</c>. When failing, all three + functions set <c>erl_errno</c> to one of the + following:</p> <taglist> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>EIO</c></tag> <item>I/O error.</item> - <tag><c><![CDATA[ETIMEDOUT]]></c></tag> - <item>Timeout expired.</item> - <tag><c><![CDATA[EAGAIN]]></c></tag> + <tag><c>ETIMEDOUT</c></tag> + <item>Time-out expired.</item> + <tag><c>EAGAIN</c></tag> <item>Temporary error: Try again.</item> </taglist> - <p>Example, check to see if an erlang process is alive:</p> + <p><em>Example:</em></p> + <p>Check to see if an Erlang process is alive:</p> <code type="none"><![CDATA[ int index = 0, is_alive; ei_x_buff args, result; @@ -495,170 +656,190 @@ if (ei_decode_version(result.buff, &index) < 0 ]]></code> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_publish(ei_cnode *ec, int port)</nametext></name> - <fsummary>Publish a node name</fsummary> + <name><ret>erlang_pid *</ret><nametext>ei_self(ei_cnode *ec)</nametext></name> + <fsummary>Retrieve the pid of the C-node.</fsummary> <desc> - <p>These functions are used by a server process to register - with the local name server <em>epmd</em>, thereby allowing - other processes to send messages by using the registered name. - Before calling either of these functions, the process should - have called <c><![CDATA[bind()]]></c> and <c><![CDATA[listen()]]></c> on an open socket.</p> - <p><c><![CDATA[ec]]></c> is the C-node structure.</p> - <p><c><![CDATA[port]]></c> is the local name to register, and should be the - same as the port number that was previously bound to the socket.</p> - <p><c><![CDATA[addr]]></c> is the 32-bit IP address of the local host.</p> - <p>To unregister with epmd, simply close the returned - descriptor. Do not use <c><![CDATA[ei_unpublish()]]></c>, which is deprecated anyway.</p> - <p>On success, the functions return a descriptor connecting the - calling process to epmd. On failure, they return -1 and set - <c><![CDATA[erl_errno]]></c> to <c><![CDATA[EIO]]></c>.</p> - <p>Additionally, <c><![CDATA[errno]]></c> values from <c><![CDATA[socket]]></c><em>(2)</em> - and <c><![CDATA[connect]]></c><em>(2)</em> system calls may be propagated - into <c><![CDATA[erl_errno]]></c>.</p> + <p>Retrieves the pid of the C-node. Every C-node + has a (pseudo) pid used in <c>ei_send_reg</c>, + <c>ei_rpc</c>, + and others. This is contained in a field in the <c>ec</c> + structure. It will be safe for a long time to fetch this + field directly from the <c>ei_cnode</c> structure.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_publish_tmo(ei_cnode *ec, int port, unsigned timeout_ms)</nametext></name> - <fsummary>Publish a node name with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_send(int fd, erlang_pid* to, char* buf, int len)</nametext></name> + <fsummary>Send a message.</fsummary> <desc> - <p>ei_publish with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Sends an Erlang term to a process.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>to</c> is the pid of the intended recipient of + the message.</item> + <item><c>buf</c> is the buffer containing the term in + binary format.</item> + <item><c>len</c> is the length of the message in bytes. + </item> + </list> + <p>Returns <c>0</c> if successful, otherwise <c>-1</c>. In + the latter case it sets <c>erl_errno</c> to + <c>EIO</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_accept(ei_cnode *ec, int listensock, ErlConnect *conp)</nametext></name> - <fsummary>Accept a connection from another node</fsummary> + <name><ret>int</ret><nametext>ei_send_encoded(int fd, erlang_pid* to, char* buf, int len)</nametext></name> + <fsummary>Obsolete function to send a message.</fsummary> <desc> - <p>This function is used by a server process to accept a - connection from a client process.</p> - <p><c><![CDATA[ec]]></c> is the C-node structure.</p> - <p><c><![CDATA[listensock]]></c> is an open socket descriptor on which - <c><![CDATA[listen()]]></c> has previously been called.</p> - <p><c><![CDATA[conp]]></c> is a pointer to an <c><![CDATA[ErlConnect]]></c> struct, - described as follows:</p> - <code type="none"><![CDATA[ -typedef struct { - char ipadr[4]; - char nodename[MAXNODELEN]; -} ErlConnect; - ]]></code> - <p>On success, <c><![CDATA[conp]]></c> is filled in with the address and - node name of the connecting client and a file descriptor is - returned. On failure, <c><![CDATA[ERL_ERROR]]></c> is returned and - <c><![CDATA[erl_errno]]></c> is set to <c><![CDATA[EIO]]></c>.</p> + <p>Works exactly as <c>ei_send</c>, the alternative name is retained for + backward compatibility. The function will <em>not</em> be + removed without prior notice.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_accept_tmo(ei_cnode *ec, int listensock, ErlConnect *conp, unsigned timeout_ms)</nametext></name> - <fsummary>Accept a connection from another node with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_send_encoded_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)</nametext></name> + <fsummary>Obsolete function to send a message with optional time-out. + </fsummary> <desc> - <p>ei_accept with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Equivalent to + <c>ei_send_encoded</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_unpublish(ei_cnode *ec)</nametext></name> - <fsummary>Forcefully unpublish a node name</fsummary> + <name><ret>int</ret><nametext>ei_send_reg_encoded(int fd, const erlang_pid *from, const char *to, const char *buf, int len)</nametext></name> + <fsummary>Obsolete function to send a message to a registered name. + </fsummary> <desc> - <p>This function can be called by a process to unregister a - specified node from epmd on the localhost. This is however usually not - allowed, unless epmd was started with the -relaxed_command_check - flag, which it normally isn't.</p> - - <p>To unregister a node you have published, you should - close the descriptor that was returned by - <c><![CDATA[ei_publish()]]></c>.</p> + <p>This function is retained for compatibility with code + generated by the interface compiler and with code following + examples in the same application.</p> + <p>The function works as <c>ei_reg_send</c> with one + exception. Instead of taking <c>ei_cnode</c> as first + argument, it takes a second argument, an + <c>erlang_pid</c>, + which is to be the process identifier of the sending process + (in the Erlang distribution protocol).</p> + <p>A suitable <c>erlang_pid</c> can be constructed from the + <c>ei_cnode</c> structure by the following example + code:</p> + <code type="none"><![CDATA[ +ei_cnode ec; +erlang_pid *self; +int fd; /* the connection fd */ +... +self = ei_self(&ec); +self->num = fd; + ]]></code> + </desc> + </func> - <warning> - <p>This function is deprecated and will be removed in a future - release.</p> - </warning> - <p><c><![CDATA[ec]]></c> is the node structure of the node to unregister.</p> - <p>If the node was successfully unregistered from epmd, the - function returns 0. Otherwise, it returns -1 and sets - <c><![CDATA[erl_errno]]></c> is to <c><![CDATA[EIO]]></c>.</p> + <func> + <name><ret>int</ret><nametext>ei_send_reg_encoded_tmo(int fd, const erlang_pid *from, const char *to, const char *buf, int len)</nametext></name> + <fsummary>Obsolete function to send a message to a registered name with + time-out.</fsummary> + <desc> + <p>Equivalent to + <c>ei_send_reg_encoded</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_unpublish_tmo(ei_cnode *ec, unsigned timeout_ms)</nametext></name> - <fsummary>Unpublish a node name with optional timeout</fsummary> + <name><ret>int</ret><nametext>ei_send_tmo(int fd, erlang_pid* to, char* buf, int len, unsigned timeout_ms)</nametext></name> + <fsummary>Send a message with optional time-out.</fsummary> <desc> - <p>ei_unpublish with an optional timeout argument, - see the description at the beginning of this document.</p> + <p>Equivalent to + <c>ei_send</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> + <func> <name><ret>const char *</ret><nametext>ei_thisnodename(ei_cnode *ec)</nametext></name> <name><ret>const char *</ret><nametext>ei_thishostname(ei_cnode *ec)</nametext></name> <name><ret>const char *</ret><nametext>ei_thisalivename(ei_cnode *ec)</nametext></name> - <fsummary>Retrieve some values</fsummary> + <fsummary>Retrieve some values.</fsummary> <desc> - <p>These functions can be used to retrieve information about - the C Node. These values are initially set with - <c><![CDATA[ei_connect_init()]]></c> or <c><![CDATA[ei_connect_xinit()]]></c>.</p> - <p>They simply fetches the appropriate field from the <c><![CDATA[ec]]></c> + <p>Can be used to retrieve information about + the C-node. These values are initially set with + <c>ei_connect_init()</c> or + <c>ei_connect_xinit()</c>.</p> + <p>These function simply fetch the appropriate field from the + <c>ec</c> structure. Read the field directly will probably be safe for a long time, so these functions are not really needed.</p> </desc> </func> + <func> - <name><ret>erlang_pid *</ret><nametext>ei_self(ei_cnode *ec)</nametext></name> - <fsummary>Retrieve the Pid of the C-node</fsummary> - <desc> - <p>This function retrieves the Pid of the C-node. Every C-node - has a (pseudo) pid used in <c><![CDATA[ei_send_reg]]></c>, <c><![CDATA[ei_rpc]]></c> - and others. This is contained in a field in the <c><![CDATA[ec]]></c> - structure. It will be safe for a long time to fetch this - field directly from the <c><![CDATA[ei_cnode]]></c> structure.</p> - </desc> - </func> - <func> - <name><ret>struct hostent</ret><nametext>*ei_gethostbyname(const char *name)</nametext></name> - <name><ret>struct hostent</ret><nametext>*ei_gethostbyaddr(const char *addr, int len, int type)</nametext></name> - <name><ret>struct hostent</ret><nametext>*ei_gethostbyname_r(const char *name, struct hostent *hostp, char *buffer, int buflen, int *h_errnop)</nametext></name> - <name><ret>struct hostent</ret><nametext>*ei_gethostbyaddr_r(const char *addr, int length, int type, struct hostent *hostp, char *buffer, int buflen, int *h_errnop)</nametext></name> - <fsummary>Name lookup functions</fsummary> + <name><ret>int</ret><nametext>ei_unpublish(ei_cnode *ec)</nametext></name> + <fsummary>Forcefully unpublish a node name.</fsummary> <desc> - <p>These are convenience functions for some common name lookup functions.</p> + <p>Can be called by a process to unregister a + specified node from EPMD on the local host. This is, however, usually + not allowed, unless EPMD was started with flag + <c>-relaxed_command_check</c>, which it normally is not.</p> + <p>To unregister a node you have published, you should + close the descriptor that was returned by + <c>ei_publish()</c>.</p> + <warning> + <p>This function is deprecated and will be removed in a future + release.</p> + </warning> + <p><c>ec</c> is the node structure of the node to + unregister.</p> + <p>If the node was successfully unregistered from EPMD, the + function returns <c>0</c>. Otherwise, <c>-1</c> is returned and + <c>erl_errno</c> is set to <c>EIO</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_get_tracelevel(void)</nametext></name> - <name><ret>void</ret><nametext>ei_set_tracelevel(int level)</nametext></name> - <fsummary>Get and set functions for tracing.</fsummary> + <name><ret>int</ret><nametext>ei_unpublish_tmo(ei_cnode *ec, unsigned timeout_ms)</nametext></name> + <fsummary>Unpublish a node name with optional time-out.</fsummary> <desc> - <p>These functions are used to set tracing on the distribution. The levels are different verbosity levels. A higher level means more information. - See also Debug Information and <c><![CDATA[EI_TRACELEVEL]]></c> below. </p> - <p> <c><![CDATA[ei_set_tracelevel]]></c> and <c><![CDATA[ei_get_tracelevel]]></c> are not thread safe. </p> + <p>Equivalent to + <c>ei_unpublish</c> with an optional time-out argument, + see the description at the beginning of this manual page.</p> </desc> </func> </funcs> <section> + <marker id="debug_information"></marker> <title>Debug Information</title> <p>If a connection attempt fails, the following can be checked:</p> + <list type="bulleted"> - <item><c><![CDATA[erl_errno]]></c></item> - <item>that the right cookie was used</item> - <item>that <em>epmd</em> is running</item> - <item>the remote Erlang node on the other side is running the - same version of Erlang as the <c><![CDATA[ei]]></c> - library.</item> - <item>the environment variable <c><![CDATA[ERL_EPMD_PORT]]></c> - is set correctly.</item> + <item><c>erl_errno</c>.</item> + <item>That the correct cookie was used</item> + <item>That EPMD is running</item> + <item>That the remote Erlang node on the other side is running the + same version of Erlang as the <c>ei</c> library</item> + <item>That environment variable <c>ERL_EPMD_PORT</c> + is set correctly</item> </list> - <p>The connection attempt can be traced by setting a tracelevel by either using - <c><![CDATA[ei_set_tracelevel]]></c> or by setting the environment variable <c><![CDATA[EI_TRACELEVEL]]></c>. - The different tracelevels has the following messages:</p> + + <p>The connection attempt can be traced by setting a trace level by either + using <c>ei_set_tracelevel</c> or by setting environment + variable <c>EI_TRACELEVEL</c>. + The trace levels have the following messages:</p> + <list> - <item>1: Verbose error messages</item> - <item>2: Above messages and verbose warning messages </item> - <item>3: Above messages and progress reports for connection handling</item> - <item>4: Above messages and progress reports for communication</item> - <item>5: Above messages and progress reports for data conversion</item> + <item>1: Verbose error messages</item> + <item>2: Above messages and verbose warning messages</item> + <item>3: Above messages and progress reports for connection handling + </item> + <item>4: Above messages and progress reports for communication</item> + <item>5: Above messages and progress reports for data conversion</item> </list> </section> </cref> - diff --git a/lib/erl_interface/doc/src/ei_users_guide.xml b/lib/erl_interface/doc/src/ei_users_guide.xml index 4b9809aee4..0eed50b50b 100644 --- a/lib/erl_interface/doc/src/ei_users_guide.xml +++ b/lib/erl_interface/doc/src/ei_users_guide.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,10 +19,10 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> - <title>The El Library User's Guide</title> + <title>Erl_Interface User's Guide</title> <prepared>Kent Boortz</prepared> <responsible>Kent Boortz</responsible> <docno></docno> @@ -32,100 +32,158 @@ <rev></rev> <file>ei_users_guide.xml</file> </header> - <p>The Erl_Interface library contains functions. which help you - integrate programs written in C and Erlang. The functions in - Erl_Interface support the following:</p> - <list type="bulleted"> - <item>manipulation of data represented as Erlang data types</item> - <item>conversion of data between C and Erlang formats</item> - <item>encoding and decoding of Erlang data types for transmission or storage</item> - <item>communication between C nodes and Erlang processes</item> - <item>backup and restore of C node state to and from Mnesia</item> - </list> - <p>In the following sections, these topics are described:</p> - <list type="bulleted"> - <item>compiling your code for use with Erl_Interface</item> - <item>initializing Erl_Interface</item> - <item>encoding, decoding, and sending Erlang terms</item> - <item>building terms and patterns</item> - <item>pattern matching</item> - <item>connecting to a distributed Erlang node</item> - <item>using EPMD</item> - <item>sending and receiving Erlang messages</item> - <item>remote procedure calls</item> - <item>global names</item> - <item>the registry</item> - </list> + + <section> + <title>Introduction</title> + <p>The <c>Erl_Interface</c> library contains functions that help you + integrate programs written in C and Erlang. The functions in + <c>Erl_Interface</c> support the following:</p> + <list type="bulleted"> + <item>Manipulation of data represented as Erlang data types</item> + <item>Conversion of data between C and Erlang formats</item> + <item>Encoding and decoding of Erlang data types for transmission or + storage</item> + <item>Communication between C nodes and Erlang processes</item> + <item>Backup and restore of C node state to and from + <seealso marker="mnesia:mnesia">Mnesia</seealso></item> + </list> + <note> + <p>By default, the <c>Erl_Interface</c> libraries are only guaranteed + to be compatible with other Erlang/OTP components from the same + release as the libraries themselves. For information about how to + communicate with Erlang/OTP components from earlier releases, see + function <seealso marker="ei#ei_set_compat_rel"> + <c>ei:ei_set_compat_rel</c></seealso> and + <seealso marker="erl_eterm#erl_set_compat_rel"> + <c>erl_eterm:erl_set_compat_rel</c></seealso>.</p> + </note> + + <section> + <title>Scope</title> + <p>In the following sections, these topics are described:</p> + <list type="bulleted"> + <item>Compiling your code for use with <c>Erl_Interface</c></item> + <item>Initializing <c>Erl_Interface</c></item> + <item>Encoding, decoding, and sending Erlang terms</item> + <item>Building terms and patterns</item> + <item>Pattern matching</item> + <item>Connecting to a distributed Erlang node</item> + <item>Using the Erlang Port Mapper Daemon (EPMD)</item> + <item>Sending and receiving Erlang messages</item> + <item>Remote procedure calls</item> + <item>Using global names</item> + <item>Using the registry</item> + </list> + </section> + + <section> + <title>Prerequisites</title> + <p>It is assumed that the reader is familiar with the Erlang programming + language.</p> + </section> + </section> <section> <title>Compiling and Linking Your Code</title> - <p>In order to use any of the Erl_Interface functions, include the + <p>To use any of the <c>Erl_Interface</c> functions, include the following lines in your code:</p> + <code type="none"><![CDATA[ #include "erl_interface.h" #include "ei.h" ]]></code> - <p>Determine where the top directory of your OTP installation is. You - can find this out by starting Erlang and entering the following + + <p>Determine where the top directory of your OTP installation is. + To find this, start Erlang and enter the following command at the Eshell prompt:</p> + <code type="none"><![CDATA[ Eshell V4.7.4 (abort with ^G) 1> code:root_dir(). /usr/local/otp ]]></code> - <p>To compile your code, make sure that your C compiler knows where - to find <c><![CDATA[erl_interface.h]]></c> by specifying an appropriate <c><![CDATA[-I]]></c> - argument on the command line, or by adding it to the <c><![CDATA[CFLAGS]]></c> - definition in your <c><![CDATA[Makefile]]></c>. The correct value for this path is - <c><![CDATA[$OTPROOT/lib/erl_interface]]></c><em>Vsn</em><c><![CDATA[/include]]></c>, where <c><![CDATA[$OTPROOT]]></c> is the path - reported by <c><![CDATA[code:root_dir/0]]></c> in the above example, and <em>Vsn</em> is - the version of the Erl_interface application, for example - <c><![CDATA[erl_interface-3.2.3]]></c></p> + + <p>To compile your code, ensure that your C compiler knows where + to find <c>erl_interface.h</c> by specifying an appropriate + <c>-I</c> argument on the command line, or add it to + the <c>CFLAGS</c> definition in your + <c>Makefile</c>. The correct value for this path is + <c>$OTPROOT/lib/erl_interface-$EIVSN/include</c>, + where:</p> + + <list type="bulleted"> + <item> + <p><c>$OTPROOT</c> is the path reported by + <c>code:root_dir/0</c> in the example above.</p> + </item> + <item> + <p><c>$EIVSN</c> is the version of the <c>Erl_Interface</c> application, + for example, <c>erl_interface-3.2.3</c>.</p> + </item> + </list> + + <p>Compiling the code:</p> + <code type="none"><![CDATA[ $ cc -c -I/usr/local/otp/lib/erl_interface-3.2.3/include myprog.c ]]></code> - <p>When linking, you will need to specify the path to - <c><![CDATA[liberl_interface.a]]></c> and <c><![CDATA[libei.a]]></c> with - <c><![CDATA[-L$OTPROOT/lib/erl_interface-3.2.3/lib]]></c>, and you will need to specify the - name of the libraries with <c><![CDATA[-lerl_interface -lei]]></c>. You can do - this on the command line or by adding the flags to the <c><![CDATA[LDFLAGS]]></c> - definition in your <c><![CDATA[Makefile]]></c>.</p> + + <p>When linking:</p> + + <list type="bulleted"> + <item>Specify the path to <c>liberl_interface.a</c> and + <c>libei.a</c> with + <c>-L$OTPROOT/lib/erl_interface-3.2.3/lib</c>.</item> + <item>Specify the name of the libraries with + <c>-lerl_interface -lei</c>.</item> + </list> + + <p>Do this on the command line or add the flags to the + <c>LDFLAGS</c> definition in your + <c>Makefile</c>.</p> + + <p>Linking the code:</p> + <code type="none"><![CDATA[ $ ld -L/usr/local/otp/lib/erl_interface-3.2.3/ lib myprog.o -lerl_interface -lei -o myprog ]]></code> - <p>Also, on some systems it may be necessary to link with some - additional libraries (e.g. <c><![CDATA[libnsl.a]]></c> and <c><![CDATA[libsocket.a]]></c> on - Solaris, or <c><![CDATA[wsock32.lib]]></c> on Windows) in order to use the - communication facilities of Erl_Interface.</p> - <p>If you are using Erl_Interface functions in a threaded + + <p>On some systems it can be necessary to link with some more + libraries (for example, <c>libnsl.a</c> and + <c>libsocket.a</c> on Solaris, or + <c>wsock32.lib</c> on Windows) to use the + communication facilities of <c>Erl_Interface</c>.</p> + + <p>If you use the <c>Erl_Interface</c> functions in a threaded application based on POSIX threads or Solaris threads, then - Erl_Interface needs access to some of the synchronization - facilities in your threads package, and you will need to specify - additional compiler flags in order to indicate which of the packages - you are using. Define <c><![CDATA[_REENTRANT]]></c> and either <c><![CDATA[STHREADS]]></c> or - <c><![CDATA[PTHREADS]]></c>. The default is to use POSIX threads if - <c><![CDATA[_REENTRANT]]></c> is specified.</p> + <c>Erl_Interface</c> needs access to some of the synchronization + facilities in your threads package. You must specify extra + compiler flags to indicate which of the packages you use. Define + <c>_REENTRANT</c> and either <c>STHREADS</c> or + <c>PTHREADS</c>. The default is to use POSIX threads if + <c>_REENTRANT</c> is specified.</p> </section> <section> - <title>Initializing the erl_interface Library</title> - <p>Before calling any of the other Erl_Interface functions, you - must call <c><![CDATA[erl_init()]]></c> exactly once to initialize the library. - <c><![CDATA[erl_init()]]></c> takes two arguments, however the arguments are no - longer used by Erl_Interface, and should therefore be specified - as <c><![CDATA[erl_init(NULL,0)]]></c>.</p> + <title>Initializing the Erl_Interface Library</title> + <p>Before calling any of the other <c>Erl_Interface</c> functions, call + <c>erl_init()</c> exactly once to initialize the library. + <c>erl_init()</c> takes two arguments. However, the arguments + are no longer used by <c>Erl_Interface</c> and are therefore to be + specified as <c>erl_init(NULL,0)</c>.</p> </section> <section> - <title>Encoding, Decoding and Sending Erlang Terms</title> + <title>Encoding, Decoding, and Sending Erlang Terms</title> <p>Data sent between distributed Erlang nodes is encoded in the - Erlang external format. Consequently, you have to encode and decode + Erlang external format. You must therefore encode and decode Erlang terms into byte streams if you want to use the distribution - protocol to communicate between a C program and Erlang. </p> - <p>The Erl_Interface library supports this activity. It has a - number of C functions which create and manipulate Erlang data + protocol to communicate between a C program and Erlang.</p> + + <p>The <c>Erl_Interface</c> library supports this activity. It has + several C functions that create and manipulate Erlang data structures. The library also contains an encode and a decode function. - The example below shows how to create and encode an Erlang tuple - <c><![CDATA[{tobbe,3928}]]></c>:</p> - <code type="none"><![CDATA[ + The following example shows how to create and encode an Erlang tuple + <c>{tobbe,3928}</c>:</p> + <code type="none"><![CDATA[ ETERM *arr[2], *tuple; char buf[BUFSIZ]; int i; @@ -134,58 +192,70 @@ arr[0] = erl_mk_atom("tobbe"); arr[1] = erl_mk_integer(3928); tuple = erl_mk_tuple(arr, 2); i = erl_encode(tuple, buf); ]]></code> - <p>Alternatively, you can use <c><![CDATA[erl_send()]]></c> and - <c><![CDATA[erl_receive_msg]]></c>, which handle the encoding and decoding of - messages transparently.</p> - <p>Refer to the Reference Manual for a complete description of the - following modules:</p> + + <p>Alternatively, you can use <c>erl_send()</c> and + <c>erl_receive_msg</c>, which handle the encoding and + decoding of messages transparently.</p> + + <p>For a complete description, see the following modules:</p> <list type="bulleted"> - <item>the <c><![CDATA[erl_eterm]]></c> module for creating Erlang terms</item> - <item>the <c><![CDATA[erl_marshal]]></c> module for encoding and decoding routines.</item> + <item><seealso marker="erl_eterm"><c>erl_eterm</c></seealso> + for creating Erlang terms</item> + <item><seealso marker="erl_marshal"><c>erl_marshal</c></seealso> + for encoding and decoding routines</item> </list> </section> <section> + <marker id="building_terms_and_patterns"/> <title>Building Terms and Patterns</title> - <p>The previous example can be simplified by using - <c><![CDATA[erl_format()]]></c> to create an Erlang term.</p> - <code type="none"><![CDATA[ + <p>The previous example can be simplified by using the + <seealso marker="erl_format"><c>erl_format</c></seealso> module + to create an Erlang term:</p> + <code type="none"><![CDATA[ ETERM *ep; ep = erl_format("{~a,~i}", "tobbe", 3928); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_format]]></c> module, for a - full description of the different format directives. The following - example is more complex:</p> - <code type="none"><![CDATA[ + <p>For a complete description of the different format directives, see + the <seealso marker="erl_format"><c>erl_format</c></seealso> module.</p> + + <p>The following example is more complex:</p> + + <code type="none"><![CDATA[ ETERM *ep; ep = erl_format("[{name,~a},{age,~i},{data,~w}]", "madonna", 21, erl_format("[{adr,~s,~i}]", "E-street", 42)); erl_free_compound(ep); ]]></code> - <p>As in previous examples, it is your responsibility to free the - memory allocated for Erlang terms. In this example, - <c><![CDATA[erl_free_compound()]]></c> ensures that the complete term pointed to - by <c><![CDATA[ep]]></c> is released. This is necessary, because the pointer from - the second call to <c><![CDATA[erl_format()]]></c> is lost. </p> - <p>The following - example shows a slightly different solution:</p> - <code type="none"><![CDATA[ + <p>As in the previous examples, it is your responsibility to free the + memory allocated for Erlang terms. In this example, + <c>erl_free_compound()</c> ensures that the complete term + pointed to by <c>ep</c> is released. This is necessary + because the pointer from the second call to <c>erl_format</c> is lost.</p> + + <p>The following example shows a slightly different solution:</p> + + <code type="none"><![CDATA[ ETERM *ep,*ep2; ep2 = erl_format("[{adr,~s,~i}]","E-street",42); ep = erl_format("[{name,~a},{age,~i},{data,~w}]", "madonna", 21, ep2); erl_free_term(ep); erl_free_term(ep2); ]]></code> + <p>In this case, you free the two terms independently. The order in - which you free the terms <c><![CDATA[ep]]></c> and <c><![CDATA[ep2]]></c> is not important, - because the Erl_Interface library uses reference counting to - determine when it is safe to actually remove objects. </p> - <p>If you are not sure whether you have freed the terms properly, you + which you free the terms <c>ep</c> and <c>ep2</c> + is not important, + because the <c>Erl_Interface</c> library uses reference counting to + determine when it is safe to remove objects.</p> + + <p>If you are unsure whether you have freed the terms properly, you can use the following function to see the status of the fixed term allocator:</p> + <code type="none"><![CDATA[ long allocated, freed; @@ -196,36 +266,49 @@ printf("length of freelist: %ld\n",freed); /* really free the freelist */ erl_eterm_release(); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_malloc]]></c> module for more - information.</p> + + <p>For more information, see the + <seealso marker="erl_malloc"><c>erl_malloc</c></seealso> module.</p> </section> <section> <title>Pattern Matching</title> - <p>An Erlang pattern is a term that may contain unbound variables or - <c><![CDATA["do not care"]]></c> symbols. Such a pattern can be matched against a + <p>An Erlang pattern is a term that can contain unbound variables or + <c>"do not care"</c> symbols. Such a pattern can be matched + against a term and, if the match is successful, any unbound variables in the pattern will be bound as a side effect. The content of a bound - variable can then be retrieved.</p> - <code type="none"><![CDATA[ + variable can then be retrieved:</p> + <code type="none"><![CDATA[ ETERM *pattern; pattern = erl_format("{madonna,Age,_}"); ]]></code> - <p><c><![CDATA[erl_match()]]></c> is used to perform pattern matching. It takes a + + <p>The <seealso marker="erl_format#erl_match"> + <c>erl_format:erl_match</c></seealso> function + performs pattern matching. It takes a pattern and a term and tries to match them. As a side effect any unbound - variables in the pattern will be bound. In the following example, we - create a pattern with a variable <em>Age</em> which appears at two + variables in the pattern will be bound. In the following example, a + pattern is created with a variable <c>Age</c>, which is included at two positions in the tuple. The pattern match is performed as follows:</p> - <list type="ordered"> - <item><c><![CDATA[erl_match()]]></c> will bind the contents of - <em>Age</em> to <em>21</em> the first time it reaches the variable</item> - <item>the second occurrence of <em>Age</em> will cause a test for - equality between the terms since <em>Age</em> is already bound to - <em>21</em>. Since <em>Age</em> is bound to 21, the equality test will - succeed and the match continues until the end of the pattern.</item> - <item>if the end of the pattern is reached, the match succeeds and you - can retrieve the contents of the variable</item> + + <list type="bulleted"> + <item> + <p><c>erl_match</c> binds the contents of <c>Age</c> to <c>21</c> + the first time it reaches the variable.</p> + </item> + <item> + <p>The second occurrence of <c>Age</c> causes a test for + equality between the terms, as <c>Age</c> is already bound to + <c>21</c>. As <c>Age</c> is bound to <c>21</c>, the equality test + succeeds and the match continues until the end of the pattern.</p> + </item> + <item> + <p>If the end of the pattern is reached, the match succeeds and you + can retrieve the contents of the variable.</p> + </item> </list> + <code type="none"><![CDATA[ ETERM *pattern,*term; pattern = erl_format("{madonna,Age,Age}"); @@ -239,99 +322,136 @@ if (erl_match(pattern, term)) { } erl_free_term(pattern); erl_free_term(term); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_match()]]></c> function for - more information.</p> + + <p>For more information, see the + <seealso marker="erl_format#erl_match"> + <c>erl_format:erl_match</c></seealso> function.</p> </section> <section> <title>Connecting to a Distributed Erlang Node</title> - <p>In order to connect to a distributed Erlang node you need to first - initialize the connection routine with <c><![CDATA[erl_connect_init()]]></c>, - which stores information such as the host name, node name, and IP + <p>To connect to a distributed Erlang node, you must first + initialize the connection routine with + <seealso marker="erl_connect#erl_connect_init"> + <c>erl_connect:erl_connect_init</c></seealso>, + which stores information, such as the hostname, node name, and IP address for later use:</p> + <code type="none"><![CDATA[ int identification_number = 99; int creation=1; char *cookie="a secret cookie string"; /* An example */ erl_connect_init(identification_number, cookie, creation); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_connect]]></c> module for more information.</p> + + <p>For more information, see the + <seealso marker="erl_connect"><c>erl_connect</c></seealso> module.</p> + <p>After initialization, you set up the connection to the Erlang node. - Use <c><![CDATA[erl_connect()]]></c> to specify the Erlang node you want to - connect to. The following example sets up the connection and should - result in a valid socket file descriptor:</p> + To specify the Erlang node you want to connect to, use + <c>erl_connect()</c>. The following example sets up the + connection and is to result in a valid socket file descriptor:</p> + <code type="none"><![CDATA[ int sockfd; char *nodename="[email protected]"; /* An example */ if ((sockfd = erl_connect(nodename)) < 0) erl_err_quit("ERROR: erl_connect failed"); ]]></code> - <p><c><![CDATA[erl_err_quit()]]></c> prints the specified string and terminates - the program. Refer to the Reference Manual, the <c><![CDATA[erl_error()]]></c> - function for more information.</p> + + <p><c>erl_err_quit()</c> prints the specified string and + terminates the program. For more information, see the + <seealso marker="erl_error"><c>erl_error</c></seealso> module.</p> </section> <section> <title>Using EPMD</title> - <p><c><![CDATA[Epmd]]></c> is the Erlang Port Mapper Daemon. Distributed Erlang nodes - register with <c><![CDATA[epmd]]></c> on the localhost to indicate to other nodes that - they exist and can accept connections. <c><![CDATA[Epmd]]></c> maintains a register of + <p><seealso marker="erts:epmd"><c>erts:epmd</c></seealso> + is the Erlang Port Mapper Daemon. Distributed + Erlang nodes register with <c>epmd</c> on the local host to + indicate to other nodes that they exist and can accept connections. + <c>epmd</c> maintains a register of node and port number information, and when a node wishes to connect to - another node, it first contacts <c><![CDATA[epmd]]></c> in order to find out the correct - port number to connect to.</p> - <p>When you use <c><![CDATA[erl_connect()]]></c> to connect to an Erlang node, a - connection is first made to <c><![CDATA[epmd]]></c> and, if the node is known, a + another node, it first contacts <c>epmd</c> to find the + correct port number to connect to.</p> + + <p>When you use + <seealso marker="erl_connect"><c>erl_connect</c></seealso> + to connect to an Erlang node, a connection is first made to + <c>epmd</c> and, if the node is known, a connection is then made to the Erlang node.</p> - <p>C nodes can also register themselves with <c><![CDATA[epmd]]></c> if they want other + + <p>C nodes can also register themselves with <c>epmd</c> + if they want other nodes in the system to be able to find and connect to them.</p> - <p>Before registering with <c><![CDATA[epmd]]></c>, you need to first create a listen socket - and bind it to a port. Then:</p> + + <p>Before registering with <c>epmd</c>, you must first + create a listen socket and bind it to a port. Then:</p> + <code type="none"><![CDATA[ int pub; pub = erl_publish(port); ]]></code> - <p><c><![CDATA[pub]]></c> is a file descriptor now connected to <c><![CDATA[epmd]]></c>. <c><![CDATA[Epmd]]></c> - monitors the other end of the connection, and if it detects that the - connection has been closed, the node will be unregistered. So, if you - explicitly close the descriptor or if your node fails, it will be - unregistered from <c><![CDATA[epmd]]></c>.</p> - <p>Be aware that on some systems (such as VxWorks), a failed node will - not be detected by this mechanism since the operating system does not + + <p><c>pub</c> is a file descriptor now connected to + <c>epmd</c>. <c>epmd</c> + monitors the other end of the connection. If it detects that the + connection has been closed, the node becomes unregistered. So, if you + explicitly close the descriptor or if your node fails, it becomes + unregistered from <c>epmd</c>.</p> + + <p>Notice that on some systems (such as VxWorks), a failed node is + not detected by this mechanism, as the operating system does not automatically close descriptors that were left open when the node - failed. If a node has failed in this way, <c><![CDATA[epmd]]></c> will prevent you from - registering a new node with the old name, since it thinks that the old + failed. If a node has failed in this way, <c>epmd</c> + prevents you from + registering a new node with the old name, as it thinks that the old name is still in use. In this case, you must unregister the name explicitly:</p> + <code type="none"><![CDATA[ erl_unpublish(node); ]]></code> - <p>This will cause <c><![CDATA[epmd]]></c> to close the connection from the far end. Note + + <p>This causes <c>epmd</c> to close the connection from the + far end. Notice that if the name was in fact still in use by a node, the results of this operation are unpredictable. Also, doing this does not cause the - local end of the connection to close, so resources may be consumed.</p> + local end of the connection to close, so resources can be consumed.</p> </section> <section> <title>Sending and Receiving Erlang Messages</title> <p>Use one of the following two functions to send messages:</p> + <list type="bulleted"> - <item><c><![CDATA[erl_send()]]></c></item> - <item><c><![CDATA[erl_reg_send()]]></c></item> + <item><seealso marker="erl_connect#erl_send"> + <c>erl_connect:erl_send</c></seealso></item> + <item><seealso marker="erl_connect#erl_reg_send"> + <c>erl_connect:erl_reg_send</c></seealso></item> </list> - <p>As in Erlang, it is possible to send messages to a - <em>Pid</em> or to a registered name. It is easier to send a - message to a registered name because it avoids the problem of finding - a suitable <em>Pid</em>.</p> + + <p>As in Erlang, messages can be sent to a + pid or to a registered name. It is easier to send a + message to a registered name, as it avoids the problem of finding + a suitable pid.</p> + <p>Use one of the following two functions to receive messages:</p> + <list type="bulleted"> - <item><c><![CDATA[erl_receive()]]></c></item> - <item><c><![CDATA[erl_receive_msg()]]></c></item> + <item><seealso marker="erl_connect#erl_receive"> + <c>erl_connect:erl_receive</c></seealso></item> + <item><seealso marker="erl_connect#erl_receive_msg"> + <c>erl_connect:erl_receive_msg</c></seealso></item> </list> - <p><c><![CDATA[erl_receive()]]></c> receives the message into a buffer, while - <c><![CDATA[erl_receive_msg()]]></c> decodes the message into an Erlang term. </p> + + <p><c>erl_receive()</c> receives the message into a buffer, + while <c>erl_receive_msg()</c> decodes the message into an + Erlang term.</p> <section> <title>Example of Sending Messages</title> - <p>In the following example, <c><![CDATA[{Pid, hello_world}]]></c> is - sent to a registered process <c><![CDATA[my_server]]></c>. The message is encoded - by <c><![CDATA[erl_send()]]></c>:</p> + <p>In the following example, <c>{Pid, hello_world}</c> is + sent to a registered process <c>my_server</c>. The message + is encoded by <c>erl_send()</c>:</p> + <code type="none"><![CDATA[ extern const char *erl_thisnodename(void); extern short erl_thiscreation(void); @@ -345,16 +465,19 @@ emsg = erl_mk_tuple(arr, 2); erl_reg_send(sockfd, "my_server", emsg); erl_free_term(emsg); ]]></code> + <p>The first element of the tuple that is sent is your own - <em>Pid</em>. This enables <c><![CDATA[my_server]]></c> to reply. Refer to the - Reference Manual, the <c><![CDATA[erl_connect]]></c> module for more information - about send primitives.</p> + pid. This enables <c>my_server</c> to reply. + For more information about the primitives, see the + <seealso marker="erl_connect"><c>erl_connect</c></seealso> module.</p> </section> <section> <title>Example of Receiving Messages</title> - <p>In this example <c><![CDATA[{Pid, Something}]]></c> is received. The - received Pid is then used to return <c><![CDATA[{goodbye,Pid}]]></c></p> + <p>In this example, <c>{Pid, Something}</c> is received. The + received pid is then used to return + <c>{goodbye,Pid}</c>.</p> + <code type="none"><![CDATA[ ETERM *arr[2], *answer; int sockfd,rc; @@ -370,22 +493,25 @@ if ((rc = erl_receive_msg(sockfd , buf, BUFSIZE, &emsg)) == ERL_MSG) { erl_free_term(emsg.msg); erl_free_term(emsg.to); } ]]></code> - <p>In order to provide robustness, a distributed Erlang node - occasionally polls all its connected neighbours in an attempt to - detect failed nodes or communication links. A node which receives such - a message is expected to respond immediately with an <c><![CDATA[ERL_TICK]]></c> message. - This is done automatically by <c><![CDATA[erl_receive()]]></c>, however when this - has occurred <c><![CDATA[erl_receive]]></c> returns <c><![CDATA[ERL_TICK]]></c> to the caller - without storing a message into the <c><![CDATA[ErlMessage]]></c> structure.</p> + + <p>To provide robustness, a distributed Erlang node + occasionally polls all its connected neighbors in an attempt to + detect failed nodes or communication links. A node that receives such + a message is expected to respond immediately with an + <c>ERL_TICK</c> message. This is done automatically by + <c>erl_receive()</c>. However, when this has occurred, + <c>erl_receive</c> returns <c>ERL_TICK</c> to + the caller without storing a message into the + <c>ErlMessage</c> structure.</p> + <p>When a message has been received, it is the caller's responsibility - to free the received message <c><![CDATA[emsg.msg]]></c> as well as <c><![CDATA[emsg.to]]></c> - or <c><![CDATA[emsg.from]]></c>, depending on the type of message received.</p> - <p>Refer to the Reference Manual for additional information about the - following modules:</p> - <list type="bulleted"> - <item><c><![CDATA[erl_connect]]></c></item> - <item><c><![CDATA[erl_eterm]]></c>.</item> - </list> + to free the received message <c>emsg.msg</c> and + <c>emsg.to</c> or <c>emsg.from</c>, + depending on the type of message received.</p> + + <p>For more information, see the + <seealso marker="erl_connect"><c>erl_connect</c></seealso> and + <seealso marker="erl_eterm"><c>erl_eterm</c></seealso> modules.</p> </section> </section> @@ -394,10 +520,12 @@ if ((rc = erl_receive_msg(sockfd , buf, BUFSIZE, &emsg)) == ERL_MSG) { <p>An Erlang node acting as a client to another Erlang node typically sends a request and waits for a reply. Such a request is included in a function call at a remote node and is called a remote - procedure call. The following example shows how the - Erl_Interface library supports remote procedure calls:</p> - <code type="none"><![CDATA[ + procedure call.</p> + <p>The following example shows how the + <c>Erl_Interface</c> library supports remote procedure calls:</p> + + <code type="none"><![CDATA[ char modname[]=THE_MODNAME; ETERM *reply,*ep; ep = erl_format("[~a,[]]", modname); @@ -409,26 +537,34 @@ if (!erl_match(ep, reply)) erl_err_msg("<ERROR> compiler errors !\n"); erl_free_term(ep); erl_free_term(reply); ]]></code> - <p><c><![CDATA[c:c/1]]></c> is called to compile the specified module on the - remote node. <c><![CDATA[erl_match()]]></c> checks that the compilation was - successful by testing for the expected <c><![CDATA[ok]]></c>.</p> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_connect]]></c> module for - more information about <c><![CDATA[erl_rpc()]]></c>, and its companions - <c><![CDATA[erl_rpc_to()]]></c> and <c><![CDATA[erl_rpc_from()]]></c>.</p> + + <p><c>c:c/1</c> is called to compile the specified module on + the remote node. <c>erl_match()</c> checks that the + compilation was + successful by testing for the expected <c>ok</c>.</p> + + <p>For more information about <c>erl_rpc()</c> and its + companions <c>erl_rpc_to()</c> and + <c>erl_rpc_from()</c>, see the + <seealso marker="erl_connect"><c>erl_connect</c></seealso> module.</p> </section> <section> <title>Using Global Names</title> - <p>A C node has access to names registered through the Erlang Global - module. Names can be looked up, allowing the C node to send messages + <p>A C node has access to names registered through the + <seealso marker="kernel:global"><c>global</c></seealso> + module in Kernel. Names can be looked up, allowing the C node to send messages to named Erlang services. C nodes can also register global names, allowing them to provide named services to Erlang processes or other C - nodes. </p> - <p>Erl_Interface does not provide a native implementation of the global - service. Instead it uses the global services provided by a "nearby" - Erlang node. In order to use the services described in this section, + nodes.</p> + + <p><c>Erl_Interface</c> does not provide a native implementation of the + global service. Instead it uses the global services provided by a "nearby" + Erlang node. To use the services described in this section, it is necessary to first open a connection to an Erlang node.</p> + <p>To see what names there are:</p> + <code type="none"><![CDATA[ char **names; int count; @@ -441,71 +577,102 @@ if (names) printf("%s\n",names[i]); free(names); ]]></code> - <p><c><![CDATA[erl_global_names()]]></c> allocates and returns a buffer containing - all the names known to global. <c><![CDATA[count]]></c> will be initialized to - indicate how many names are in the array. The array of strings in - names is terminated by a NULL pointer, so it is not necessary to use - <c><![CDATA[count]]></c> to determine when the last name is reached.</p> + + <p><seealso marker="erl_global#erl_global_names"> + <c>erl_global:erl_global_names</c></seealso> + allocates and returns a buffer containing + all the names known to the <c>global</c> module in <c>Kernel</c>. + <c>count</c> is initialized to + indicate the number of names in the array. The array of strings in names + is terminated by a <c>NULL</c> pointer, so it is not necessary to use + <c>count</c> to determine when the last name is reached.</p> + <p>It is the caller's responsibility to free the array. - <c><![CDATA[erl_global_names()]]></c> allocates the array and all of the strings - using a single call to <c><![CDATA[malloc()]]></c>, so <c><![CDATA[free(names)]]></c> is all - that is necessary.</p> + <c>erl_global_names</c> allocates the array and all the strings + using a single call to <c>malloc()</c>, so + <c>free(names)</c> is all that is necessary.</p> + <p>To look up one of the names:</p> + <code type="none"><![CDATA[ ETERM *pid; char node[256]; pid = erl_global_whereis(fd,"schedule",node); ]]></code> - <p>If <c><![CDATA["schedule"]]></c> is known to global, an Erlang pid is returned - that can be used to send messages to the schedule service. - Additionally, <c><![CDATA[node]]></c> will be initialized to contain the name of + + <p>If <c>"schedule"</c> is known to the + <c>global</c> module in <c>Kernel</c>, an Erlang pid is + returned that can be used to send messages to the schedule service. + Also, <c>node</c> is initialized to contain the name of the node where the service is registered, so that you can make a - connection to it by simply passing the variable to <c><![CDATA[erl_connect()]]></c>.</p> + connection to it by simply passing the variable to + <seealso marker="erl_connect"><c>erl_connect</c></seealso>.</p> + <p>Before registering a name, you should already have registered your - port number with <c><![CDATA[epmd]]></c>. This is not strictly necessary, but if you + port number with <c>epmd</c>. This is not strictly necessary, + but if you neglect to do so, then other nodes wishing to communicate with your - service will be unable to find or connect to your process.</p> + service cannot find or connect to your process.</p> + <p>Create a pid that Erlang processes can use to communicate with your service:</p> + <code type="none"><![CDATA[ ETERM *pid; pid = erl_mk_pid(thisnode,14,0,0); erl_global_register(fd,servicename,pid); ]]></code> - <p>After registering the name, you should use <c><![CDATA[erl_accept()]]></c> to wait for - incoming connections.</p> - <p>Do not forget to free <c><![CDATA[pid]]></c> later with <c><![CDATA[erl_free_term()]]></c>!</p> + + <p>After registering the name, use + <seealso marker="erl_connect#erl_accept"> + <c>erl_connect:erl_accept</c></seealso> + to wait for incoming connections.</p> + + <note> + <p>Remember to free <c>pid</c> later with + <seealso marker="erl_malloc#erl_free_term"> + <c>erl_malloc:erl_free_term</c></seealso>.</p> + </note> + <p>To unregister a name:</p> + <code type="none"><![CDATA[ erl_global_unregister(fd,servicename); ]]></code> </section> <section> - <title>The Registry</title> + <title>Using the Registry</title> <p>This section describes the use of the registry, a simple mechanism for storing key-value pairs in a C-node, as well as backing them up or - restoring them from a Mnesia table on an Erlang node. More detailed - information about the individual API functions can be found in the - Reference Manual.</p> - <p>Keys are strings, i.e. 0-terminated arrays of characters, and values - are arbitrary objects. Although integers and floating point numbers + restoring them from an <c>Mnesia</c> table on an Erlang node. For more + detailed information about the individual API functions, see the + <seealso marker="registry"><c>registry</c></seealso> module.</p> + + <p>Keys are strings, that is, <c>NULL</c>-terminated arrays of characters, and + values are arbitrary objects. Although integers and floating point numbers are treated specially by the registry, you can store strings or binary objects of any type as pointers.</p> - <p>To start, you need to open a registry:</p> + + <p>To start, open a registry:</p> + <code type="none"><![CDATA[ ei_reg *reg; reg = ei_reg_open(45); ]]></code> - <p>The number 45 in the example indicates the approximate number of + + <p>The number <c>45</c> in the example indicates the approximate number of objects that you expect to store in the registry. Internally the registry uses hash tables with collision chaining, so there is no absolute upper limit on the number of objects that the registry can - contain, but if performance or memory usage are important, then you - should choose a number accordingly. The registry can be resized later.</p> + contain, but if performance or memory usage is important, then you + are to choose a number accordingly. The registry can be resized later.</p> + <p>You can open as many registries as you like (if memory permits).</p> - <p>Objects are stored and retrieved through set and get functions. In - the following examples you see how to store integers, floats, strings + + <p>Objects are stored and retrieved through set and get functions. + The following example shows how to store integers, floats, strings, and arbitrary binary objects:</p> + <code type="none"><![CDATA[ struct bonk *b = malloc(sizeof(*b)); char *name = malloc(7); @@ -519,13 +686,16 @@ ei_reg_setsval(reg,"name",name); b->l = 42; b->m = 12; ei_reg_setpval(reg,"jox",b,sizeof(*b)); ]]></code> - <p>If you attempt to store an object in the registry and there is an - existing object with the same key, the new value will replace the old + + <p>If you try to store an object in the registry and there is an + existing object with the same key, the new value replaces the old one. This is done regardless of whether the new object and the old one have the same type, so you can, for example, replace a string with an - integer. If the existing value is a string or binary, it will be freed + integer. If the existing value is a string or binary, it is freed before the new value is assigned.</p> + <p>Stored values are retrieved from the registry as follows:</p> + <code type="none"><![CDATA[ long i; double f; @@ -537,77 +707,100 @@ i = ei_reg_getival(reg,"age"); f = ei_reg_getfval(reg,"height"); s = ei_reg_getsval(reg,"name"); b = ei_reg_getpval(reg,"jox",&size); ]]></code> - <p>In all of the above examples, the object must exist and it must be of + + <p>In all the above examples, the object must exist and it must be of the right type for the specified operation. If you do not know the - type of a given object, you can ask:</p> + type of an object, you can ask:</p> + <code type="none"><![CDATA[ struct ei_reg_stat buf; ei_reg_stat(reg,"name",&buf); ]]></code> - <p>Buf will be initialized to contain object attributes.</p> + + <p>Buf is initialized to contain object attributes.</p> + <p>Objects can be removed from the registry:</p> + <code type="none"><![CDATA[ ei_reg_delete(reg,"name"); ]]></code> + <p>When you are finished with a registry, close it to remove all the objects and free the memory back to the system:</p> + <code type="none"><![CDATA[ ei_reg_close(reg); ]]></code> <section> <title>Backing Up the Registry to Mnesia</title> - <p>The contents of a registry can be backed up to Mnesia on a "nearby" - Erlang node. You need to provide an open connection to the Erlang node - (see <c><![CDATA[erl_connect()]]></c>). Also, Mnesia 3.0 or later must be running + <p>The contents of a registry can be backed up to + <seealso marker="mnesia:mnesia"><c>Mnesia</c></seealso> on a "nearby" Erlang + node. You must provide an open connection to the Erlang node + (see <seealso marker="erl_connect"><c>erl_connect</c></seealso>). + Also, <c>Mnesia</c> 3.0 or later must be running on the Erlang node before the backup is initiated:</p> + <code type="none"><![CDATA[ ei_reg_dump(fd, reg, "mtab", dumpflags); ]]></code> - <p>The example above will backup the contents of the registry to the - specified Mnesia table <c><![CDATA["mtab"]]></c>. Once a registry has been backed - up to Mnesia in this manner, additional backups will only affect - objects that have been modified since the most recent backup, i.e. - objects that have been created, changed or deleted. The backup - operation is done as a single atomic transaction, so that the entire - backup will be performed or none of it will.</p> - <p>In the same manner, a registry can be restored from a Mnesia table:</p> + + <p>This example back up the contents of the registry to the + specified <c>Mnesia</c> table <c>"mtab"</c>. + Once a registry has been backed + up to <c>Mnesia</c> like this, more backups only affect + objects that have been modified since the most recent backup, that is, + objects that have been created, changed, or deleted. The backup + operation is done as a single atomic transaction, so that either the + entire backup is performed or none of it.</p> + + <p>Likewise, a registry can be restored from a <c>Mnesia</c> table:</p> + <code type="none"><![CDATA[ ei_reg_restore(fd, reg, "mtab"); ]]></code> - <p>This will read the entire contents of <c><![CDATA["mtab"]]></c> into the specified - registry. After the restore, all of the objects in the registry will - be marked as unmodified, so a subsequent backup will only affect + + <p>This reads the entire contents of <c>"mtab"</c> into the + specified registry. After the restore, all the objects in the registry + are marked as unmodified, so a later backup only affects objects that you have modified since the restore.</p> - <p>Note that if you restore to a non-empty registry, objects in the - table will overwrite objects in the registry with the same keys. Also, + + <p>Notice that if you restore to a non-empty registry, objects in the + table overwrite objects in the registry with the same keys. Also, the <em>entire</em> contents of the registry is marked as unmodified after the restore, including any modified objects that were not - overwritten by the restore operation. This may not be your intention.</p> + overwritten by the restore operation. This may not be your + intention.</p> </section> <section> <title>Storing Strings and Binaries</title> <p>When string or binary objects are stored in the registry it is - important that a number of simple guidelines are followed. </p> + important that some simple guidelines are followed.</p> + <p>Most importantly, the object must have been created with a single call - to <c><![CDATA[malloc()]]></c> (or similar), so that it can later be removed by a - single call to <c><![CDATA[free()]]></c>. Objects will be freed by the registry + to <c>malloc()</c> (or similar), so that it can later be + removed by a single call to <c>free()</c>. + Objects are freed by the registry when it is closed, or when you assign a new value to an object that previously contained a string or binary.</p> - <p>You should also be aware that if you store binary objects that are - context-dependent (e.g. containing pointers or open file descriptors), - they will lose their meaning if they are backed up to a Mnesia table - and subsequently restored in a different context.</p> + + <p>Notice that if you store binary objects that are context-dependent + (for example, containing pointers or open file descriptors), + they lose their meaning if they are backed up to a <c>Mnesia</c> table + and later restored in a different context.</p> + <p>When you retrieve a stored string or binary value from the registry, the registry maintains a pointer to the object and you are passed a copy of that pointer. You should never free an object retrieved in this manner because when the registry later attempts to free it, a - runtime error will occur that will likely cause the C-node to crash.</p> + runtime error occurs that likely causes the C-node to crash.</p> + <p>You are free to modify the contents of an object retrieved this way. - However when you do so, the registry will not be aware of the changes - you make, possibly causing it to be missed the next time you make a - Mnesia backup of the registry contents. This can be avoided if you - mark the object as dirty after any such changes with - <c><![CDATA[ei_reg_markdirty()]]></c>, or pass appropriate flags to - <c><![CDATA[ei_reg_dump()]]></c>.</p> + However, when you do so, the registry is not aware of your changes, + possibly causing it to be missed the next time you make an + <c>Mnesia</c> backup of the registry contents. This can be avoided if + you mark the object as dirty after any such changes with + <seealso marker="registry#ei_reg_markdirty"> + <c>registry:ei_reg_markdirty</c></seealso>, or pass appropriate flags to + <seealso marker="registry#ei_reg_dump"> + <c>registry:ei_reg_dump</c></seealso>.</p> </section> </section> </chapter> - diff --git a/lib/erl_interface/doc/src/erl_call.xml b/lib/erl_interface/doc/src/erl_call.xml index 46015621ac..f1e52b1889 100644 --- a/lib/erl_interface/doc/src/erl_call.xml +++ b/lib/erl_interface/doc/src/erl_call.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -28,135 +28,146 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>97-05-16</date> + <date>1997-05-16</date> <rev>B</rev> - <file>erl_call.sgml</file> + <file>erl_call.xml</file> </header> <com>erl_call</com> - <comsummary>Call/Start a Distributed Erlang Node</comsummary> + <comsummary>Call/start a distributed Erlang node.</comsummary> <description> - <p><c><![CDATA[erl_call]]></c> makes it possible to start and/or communicate with - a distributed Erlang node. It is built upon the <c><![CDATA[erl_interface]]></c> - library as an example application. Its purpose is to use an Unix shell script to interact with a distributed Erlang node. It performs all - communication with the Erlang <em>rex server</em>, using the standard Erlang RPC facility. It does not require any special - software to be run at the Erlang target node.</p> + <p><c>erl_call</c> makes it possible to start and/or + communicate with a distributed Erlang node. It is built upon the + <c>Erl_Interface</c> library as an example application. + Its purpose is to use a Unix shell script to interact with a distributed + Erlang node. It performs all communication with the Erlang + <em>rex server</em>, using the standard Erlang RPC facility. It does not + require any special software to be run at the Erlang target node.</p> + <p>The main use is to either start a distributed Erlang node or to make an ordinary function call. However, it is also - possible to pipe an Erlang module to <c><![CDATA[erl_call]]></c> and have it - compiled, or to pipe a sequence of Erlang expressions to be evaluated + possible to pipe an Erlang module to <c>erl_call</c> and have + it compiled, or to pipe a sequence of Erlang expressions to be evaluated (similar to the Erlang shell).</p> - <p>Options, which cause <c><![CDATA[stdin]]></c> to be read, can be used with - advantage - as scripts from within (Unix) shell scripts. Another - nice use of <c><![CDATA[erl_call]]></c> could be from (http) CGI-bin scripts.</p> + + <p>Options, which cause <c>stdin</c> to be read, can be used + with advantage, + as scripts from within (Unix) shell scripts. Another nice use + of <c>erl_call</c> could be from (HTTP) CGI-bin scripts.</p> </description> + <funcs> <func> <name>erl_call <options></name> - <fsummary>Start/Call Erlang</fsummary> + <fsummary>Start/call Erlang.</fsummary> <desc> - <p>Each option flag is described below with its name, type and - meaning. </p> + <p>Starts/calls Erlang.</p> + <p>Each option flag is described below with its name, type, and + meaning.</p> <taglist> - <tag>-a [Mod [Fun [Args]]]]</tag> + <tag><c>-a [Mod [Fun [Args]]]]</c></tag> <item> - <p>(<em>optional</em>): Applies the specified function - and returns the result. <c><![CDATA[Mod]]></c> must be specified, however - <c>start</c> and <c>[]</c> are assumed for unspecified <c><![CDATA[Fun]]></c> and <c><![CDATA[Args]]></c>, respectively. <c><![CDATA[Args]]></c> should - be in the same format as for <c><![CDATA[erlang:apply/3]]></c>. Note - that this flag takes exactly one argument, so quoting - may be necessary in order to group <c><![CDATA[Mod]]></c>, <c><![CDATA[Fun]]></c> - and <c><![CDATA[Args]]></c>, in a manner dependent on the behavior - of your command shell.</p> - <p></p> + <p>(<em>Optional.</em>) Applies the specified function + and returns the result. <c>Mod</c> must be specified. + However, <c>start</c> and <c>[]</c> are assumed for unspecified + <c>Fun</c> and <c>Args</c>, respectively. + <c>Args</c> is to be in the same format as for + <seealso marker="erts:erlang#apply/3"> + <c>erlang:apply/3</c></seealso> in <c>ERTS</c>.</p> + <p>Notice that this flag takes exactly one argument, so quoting + can be necessary to group <c>Mod</c>, + <c>Fun</c>, and <c>Args</c> in a manner + dependent on the behavior of your command shell.</p> </item> - <tag>-c Cookie</tag> + <tag><c>-c Cookie</c></tag> <item> - <p>(<em>optional</em>): Use this option to specify a certain cookie. If no cookie is specified, the <c><![CDATA[~/.erlang.cookie]]></c> file is read and its content are used as cookie. The Erlang node we want to communicate with must have the same cookie.</p> + <p>(<em>Optional.</em>) Use this option to specify a certain cookie. + If no cookie is specified, the <c>~/.erlang.cookie</c> + file is read and its content is used as cookie. The Erlang node + we want to communicate with must have the same cookie.</p> </item> - <tag>-d</tag> + <tag><c>-d</c></tag> <item> - <p>(<em>optional</em>): Debug mode. This causes all IO to be output - to the file <c><![CDATA[~/.erl_call.out.Nodename]]></c>, where <c><![CDATA[Nodename]]></c> + <p>(<em>Optional.</em>) Debug mode. This causes all I/O to be output + to the <c>~/.erl_call.out.Nodename</c> file, where + <c>Nodename</c> is the node name of the Erlang node in question.</p> - <p></p> </item> - <tag>-e</tag> + <tag><c>-e</c></tag> <item> - <p>(<em>optional</em>): Reads a sequence of Erlang expressions, separated - by '<em>,</em>' and ended with a '<em>.</em>', from <c><![CDATA[stdin]]></c> until - EOF (Control-D). Evaluates the expressions and returns the result from - the last expression. Returns <c><![CDATA[{ok,Result}]]></c> if successful.</p> - <p></p> + <p>(<em>Optional.</em>) Reads a sequence of Erlang expressions, + separated by comma (,) and ended with a full stop (.), from + <c>stdin</c> until EOF (Control-D). Evaluates the + expressions and returns the result from the last expression. + Returns <c>{ok,Result}</c> on success.</p> </item> - <tag>-h HiddenName</tag> + <tag><c>-h HiddenName</c></tag> <item> - <p>(<em>optional</em>): Specifies the name of the hidden node - that <c><![CDATA[erl_call]]></c> represents.</p> - <p></p> + <p>(<em>Optional.</em>) Specifies the name of the hidden node + that <c>erl_call</c> represents.</p> </item> - <tag>-m</tag> + <tag><c>-m</c></tag> <item> - <p>(<em>optional</em>): Reads an Erlang module from <c><![CDATA[stdin]]></c> and - compiles it.</p> - <p></p> + <p>(<em>Optional.</em>) Reads an Erlang module from + <c>stdin</c> and compiles it.</p> </item> - <tag>-n Node</tag> + <tag><c>-n Node</c></tag> <item> - <p>(one of <c><![CDATA[-n, -name, -sname]]></c> is required): - Has the same meaning as <c><![CDATA[-name]]></c> and can still be used for - backwards compatibility reasons.</p> - <p></p> + <p>(One of <c>-n, -name, -sname</c> is required.) + Has the same meaning as <c>-name</c> and can still be + used for backward compatibility reasons.</p> </item> - <tag>-name Node</tag> + <tag><c>-name Node</c></tag> <item> - <p>(one of <c><![CDATA[-n, -name, -sname]]></c> is required): <c><![CDATA[Node]]></c> is the name of the node to be - started or communicated with. It is assumed that - <c><![CDATA[Node]]></c> is started with <c><![CDATA[erl -name]]></c>, which means that fully - qualified long node names are used. - If the <c><![CDATA[-s]]></c> option is given, an Erlang node will (if necessary) - be started with <c><![CDATA[erl -name]]></c>.</p> - <p></p> + <p>(One of <c>-n, -name, -sname</c> is required.) + <c>Node</c> is the name of the node to be + started or communicated with. It is assumed that + <c>Node</c> is started with + <c>erl -name</c>, which means that fully + qualified long node names are used. If option + <c>-s</c> is specified, an Erlang node will (if + necessary) be started with <c>erl -name</c>.</p> </item> - <tag>-q</tag> + <tag><c>-q</c></tag> <item> - <p>(<em>optional</em>): Halts the Erlang node specified - with the -n switch. This switch overrides the -s switch.</p> - <p></p> + <p>(<em>Optional.</em>) Halts the Erlang node specified + with switch <c>-n</c>. This switch overrides switch <c>-s</c>.</p> </item> - <tag>-r</tag> + <tag><c>-r</c></tag> <item> - <p>(<em>optional</em>): Generates a random name of the hidden node - that <c><![CDATA[erl_call]]></c> represents.</p> - <p></p> + <p>(<em>Optional.</em>) Generates a random name of the hidden node + that <c>erl_call</c> represents.</p> </item> - <tag>-s</tag> + <tag><c>-s</c></tag> <item> - <p>(<em>optional</em>): Starts a distributed Erlang node if necessary. - This means that in a sequence of calls, where the '<c><![CDATA[-s]]></c>' - and '<c><![CDATA[-n Node]]></c>' are constant, only the first call will start - the Erlang node. This makes the rest of the communication - very fast. This flag is currently only available on the Unix platform.</p> - <p></p> + <p>(<em>Optional.</em>) Starts a distributed Erlang node if + necessary. This means that in a sequence of calls, where + '<c>-s</c>' and '<c>-n Node</c>' are + constant, only the first call starts the Erlang node. This makes + the rest of the communication very fast. This flag is currently + only available on Unix-like platforms (Linux, Mac OS X, Solaris, + and so on).</p> </item> - <tag>-sname Node</tag> + <tag><c>-sname Node</c></tag> <item> - <p>(one of <c><![CDATA[-n, -name, -sname]]></c> is required): <c><![CDATA[Node]]></c> is the name of the node to - be started or communicated with. It is assumed that <c><![CDATA[Node]]></c> is started with <c><![CDATA[erl -sname]]></c> which means that short node names are used. - If <c><![CDATA[-s]]></c> option is given, an Erlang node will be started (if necessary) with <c><![CDATA[erl -sname]]></c>.</p> - <p></p> + <p>(One of <c>-n, -name, -sname</c> is required.) + <c>Node</c> is the name of the node to be started + or communicated with. It is assumed that <c>Node</c> + is started with <c>erl -sname</c>, which means that + short node names are used. If option <c>-s</c> is + specified, an Erlang node is started (if necessary) with + <c>erl -sname</c>.</p> </item> - <tag>-v</tag> + <tag><c>-v</c></tag> <item> - <p>(<em>optional</em>): Prints a lot of <c><![CDATA[verbose]]></c> information. - This is only useful for the developer and maintainer of <c><![CDATA[erl_call]]></c>.</p> - <p></p> + <p>(<em>Optional.</em>) Prints a lot of <c>verbose</c> + information. This is only useful for the developer and maintainer + of <c>erl_call</c>.</p> </item> - <tag>-x ErlScript</tag> + <tag><c>-x ErlScript</c></tag> <item> - <p>(<em>optional</em>): Specifies another name of the Erlang start-up script - to be used. If not specified, the standard <c><![CDATA[erl]]></c> start-up script - is used.</p> + <p>(<em>Optional.</em>) Specifies another name of the Erlang + startup script to be used. If not specified, the standard + <c>erl</c> startup script is used.</p> </item> </taglist> </desc> @@ -165,20 +176,29 @@ <section> <title>Examples</title> - <p>Starts an Erlang node and calls <c><![CDATA[erlang:time/0]]></c>.</p> + <p>To start an Erlang node and call <c>erlang:time/0</c>:</p> + <code type="none"><![CDATA[ erl_call -s -a 'erlang time' -n madonna {18,27,34} ]]></code> - <p>Terminates an Erlang node by calling <c><![CDATA[erlang:halt/0]]></c>.</p> + + <p>To terminate an Erlang node by calling + <c>erlang:halt/0</c>:</p> + <code type="none"><![CDATA[ erl_call -s -a 'erlang halt' -n madonna ]]></code> - <p>An apply with several arguments.</p> + + <p>To apply with many arguments:</p> + <code type="none"><![CDATA[ erl_call -s -a 'lists map [{math,sqrt},[1,4,9,16,25]]' -n madonna ]]></code> - <p>Evaluates a couple of expressions. <em>The input ends with EOF (Control-D)</em>.</p> + + <p>To evaluate some expressions + (<em>the input ends with EOF (Control-D)</em>):</p> + <code type="none"><![CDATA[ erl_call -s -e -n madonna statistics(runtime), @@ -189,10 +209,14 @@ Y=2, ^D {ok,{3,0}} ]]></code> - <p>Compiles a module and runs it. <em>Again, the input ends with EOF (Control-D)</em>. (In the example shown, the output has been formatted afterwards).</p> + + <p>To compile a module and run it (<em>again, the input ends with EOF + (Control-D)</em>):</p> + <p>(In the example, the output has been formatted afterwards.)</p> + <code type="none"><![CDATA[ -erl_call -s -m -a lolita -n madonna --module(lolita). +erl_call -s -m -a procnames -n madonna +-module(procnames). -compile(export_all). start() -> P = processes(), @@ -238,4 +262,3 @@ start() -> ]]></code> </section> </comref> - diff --git a/lib/erl_interface/doc/src/erl_connect.xml b/lib/erl_interface/doc/src/erl_connect.xml index 0fad98cd17..76ef6588c2 100644 --- a/lib/erl_interface/doc/src/erl_connect.xml +++ b/lib/erl_interface/doc/src/erl_connect.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_connect</title> @@ -28,127 +28,110 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>980703</date> + <date>1998-07-03</date> <rev>A</rev> - <file>erl_connect.sgml</file> + <file>erl_connect.xml</file> </header> <lib>erl_connect</lib> - <libsummary>Communicate with Distributed Erlang</libsummary> + <libsummary>Communicate with distributed Erlang.</libsummary> <description> <p>This module provides support for communication between distributed - Erlang nodes and C nodes, in a manner that is transparent to Erlang + Erlang nodes and C-nodes, in a manner that is transparent to Erlang processes.</p> - <p>A C node appears to Erlang as a - <em>hidden node</em>. + + <p>A C-node appears to Erlang as a <em>hidden node</em>. That is, Erlang processes that know the name of the - C node are able to communicate with it in a normal manner, but - the node name will not appear in the listing provided by the - Erlang function <c><![CDATA[nodes/0]]></c>.</p> + C-node can communicate with it in a normal manner, but + the node name does not appear in the listing provided by + <seealso marker="erts:erlang#nodes/0"><c>erlang:nodes/0</c></seealso> + in <c>ERTS</c>.</p> </description> + <funcs> <func> - <name><ret>int</ret><nametext>erl_connect_init(number, cookie, creation)</nametext></name> - <name><ret>int</ret><nametext>erl_connect_xinit(host, alive, node, addr, cookie, creation)</nametext></name> - <fsummary>Initialize communication</fsummary> + <name><ret>int</ret><nametext>erl_accept(listensock, conp)</nametext></name> + <fsummary>Accept a connection.</fsummary> <type> - <v>int number;</v> - <v>char *cookie;</v> - <v>short creation;</v> - <v>char *host,*alive,*node;</v> - <v>struct in_addr *addr;</v> + <v>int listensock;</v> + <v>ErlConnect *conp;</v> </type> <desc> - <p>These functions initialize the <c><![CDATA[erl_connect]]></c> - module. In particular, they are used to identify the name of the - C-node from which they are called. One of these functions must - be called before any of the other functions in the erl_connect - module are used.</p> - <p><c><![CDATA[erl_connect_xinit()]]></c> stores for later use information about - the node's host name <c><![CDATA[host]]></c>, alive name <c><![CDATA[alive]]></c>, node - name <c><![CDATA[node]]></c>, IP address <c><![CDATA[addr]]></c>, cookie <c><![CDATA[cookie]]></c>, - and creation number <c><![CDATA[creation]]></c>. <c><![CDATA[erl_connect_init()]]></c> - provides an alternative interface which does not require as much - information from the caller. Instead, <c><![CDATA[erl_connect_init()]]></c> - uses <c><![CDATA[gethostbyname()]]></c> to obtain default values. - </p> - <p>If you use <c><![CDATA[erl_connect_init()]]></c> your node will have a - short name, i.e., it will not be fully qualified. If you need to - use fully qualified (a.k.a. long) names, use - <c><![CDATA[erl_connect_xinit()]]></c> instead. - </p> - <p><c><![CDATA[host]]></c> is the name of the host on which the node is running.</p> - <p><c><![CDATA[alive]]></c> is the alivename of the node.</p> - <p><c><![CDATA[node]]></c> is the name of the node. The nodename should - be of the form <em>alivename@hostname</em>.</p> - <p><c><![CDATA[addr]]></c> is the 32-bit IP address of <c><![CDATA[host]]></c>.</p> - <p><c><![CDATA[cookie]]></c> is the authorization string required for access - to the remote node. If NULL the user HOME directory is - searched for a cookie file <c><![CDATA[.erlang.cookie]]></c>. The path to - the home directory is retrieved from the environment variable - <c><![CDATA[HOME]]></c> on Unix and from the <c><![CDATA[HOMEDRIVE]]></c> and - <c><![CDATA[HOMEPATH]]></c> variables on Windows. Refer to the <c><![CDATA[auth]]></c> - module for more details.</p> - <p><c><![CDATA[creation]]></c> helps identify a particular instance of a C - node. In particular, it can help prevent us from receiving - messages sent to an earlier process with the same registered - name.</p> - <p>A C node acting as a server will be assigned a creation number - when it calls <c><![CDATA[erl_publish()]]></c>.</p> - <p><c><![CDATA[number]]></c> is used by <c><![CDATA[erl_connect_init()]]></c> to - construct the actual node name. In the second example shown - below, <em>"[email protected]"</em> will be the resulting node - name.</p> - <p>Example 1:</p> - <code type="none"><![CDATA[ -struct in_addr addr; -addr = inet_addr("150.236.14.75"); -if (!erl_connect_xinit("chivas", - "madonna", - "[email protected]", - &addr; - "samplecookiestring..."), - 0) - erl_err_quit("<ERROR> when initializing !"); - ]]></code> - <p>Example 2:</p> + <p>This function is used by a server process to accept a + connection from a client process.</p> + <list type="bulleted"> + <item><c>listensock</c> is an open socket descriptor on + which <c>listen()</c> has previously been called.</item> + <item><c>conp</c> is a pointer to an + <c>ErlConnect</c> struct, described as follows:</item> + </list> <code type="none"><![CDATA[ -if (!erl_connect_init(17, "samplecookiestring...", 0)) - erl_err_quit("<ERROR> when initializing !"); +typedef struct { + char ipadr[4]; + char nodename[MAXNODELEN]; +} ErlConnect; ]]></code> + <p>On success, <c>conp</c> is filled in with the address and + node name of the connecting client and a file descriptor is + returned. On failure, <c>ERL_ERROR</c> is returned and + <c>erl_errno</c> is set to <c>EIO</c>.</p> </desc> </func> + + <func> + <name><ret>int</ret><nametext>erl_close_connection(fd)</nametext></name> + <fsummary>Close a connection to an Erlang node.</fsummary> + <type> + <v>int fd;</v> + </type> + <desc> + <p>Closes an open connection to an Erlang node.</p> + <p><c>Fd</c> is a file descriptor obtained from + <c>erl_connect()</c> or + <c>erl_xconnect()</c>.</p> + <p>Returns <c>0</c> on success. If the call fails, a non-zero value + is returned, and the reason for the error can be obtained with the + appropriate platform-dependent call.</p> + </desc> + </func> + <func> <name><ret>int</ret><nametext>erl_connect(node)</nametext></name> <name><ret>int</ret><nametext>erl_xconnect(addr, alive)</nametext></name> - <fsummary>Establishe a connection to an Erlang node</fsummary> + <fsummary>Establish a connection to an Erlang node.</fsummary> <type> <v>char *node, *alive;</v> <v>struct in_addr *addr;</v> </type> <desc> - <p>These functions set up a connection to an Erlang node.</p> - <p><c><![CDATA[erl_xconnect()]]></c> requires the IP address of the remote - host and the alive name of the remote node - to be specified. <c><![CDATA[erl_connect()]]></c> provides an alternative + <p>Sets up a connection to an Erlang node.</p> + <p><c>erl_xconnect()</c> requires the IP address of the + remote host and the alivename of the remote node to be + specified. <c>erl_connect()</c> provides an alternative interface, and determines the information from the node name provided.</p> - <p><c><![CDATA[addr]]></c> is the 32-bit IP address of the remote host.</p> - <p><c><![CDATA[alive]]></c> is the alivename of the remote node.</p> - <p><c><![CDATA[node]]></c> is the name of the remote node.</p> - <p>These functions return an open file descriptor on success, or - a negative value indicating that an error occurred --- in - which case they will set <c><![CDATA[erl_errno]]></c> to one of:</p> + <list type="bulleted"> + <item><c>addr</c> is the 32-bit IP address of the remote + host.</item> + <item><c>alive</c> is the alivename of the remote node. + </item> + <item><c>node</c> is the name of the remote node.</item> + </list> + <p>Returns an open file descriptor on success, otherwise a negative + value. In the latter case <c>erl_errno</c> is set to one + of:</p> <taglist> - <tag><c><![CDATA[EHOSTUNREACH]]></c></tag> - <item>The remote host <c><![CDATA[node]]></c> is unreachable</item> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>EHOSTUNREACH</c></tag> + <item>The remote host <c>node</c> is unreachable.</item> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> </taglist> - <p>Additionally, <c><![CDATA[errno]]></c> values from - <c><![CDATA[socket]]></c><em>(2)</em> and <c><![CDATA[connect]]></c><em>(2)</em> - system calls may be propagated into <c><![CDATA[erl_errno]]></c>.</p> + <p>Also, <c>errno</c> values from + <c>socket</c><em>(2)</em> and + <c>connect</c><em>(2)</em> + system calls can be propagated into <c>erl_errno</c>.</p> + <p><em>Example:</em></p> <code type="none"><![CDATA[ #define NODE "[email protected]" #define ALIVE "madonna" @@ -164,59 +147,177 @@ erl_xconnect( &addr , ALIVE ); ]]></code> </desc> </func> + <func> - <name><ret>int</ret><nametext>erl_close_connection(fd)</nametext></name> - <fsummary>Close a connection to an Erlang node</fsummary> + <name><ret>int</ret><nametext>erl_connect_init(number, cookie, creation)</nametext></name> + <name><ret>int</ret><nametext>erl_connect_xinit(host, alive, node, addr, cookie, creation)</nametext></name> + <fsummary>Initialize communication.</fsummary> <type> - <v>int fd;</v> + <v>int number;</v> + <v>char *cookie;</v> + <v>short creation;</v> + <v>char *host,*alive,*node;</v> + <v>struct in_addr *addr;</v> + </type> + <desc> + <p>Initializes the <c>erl_connect</c> module. + In particular, these functions are used to identify the name of the + C-node from which they are called. One of these functions must + be called before any of the other functions in the <c>erl_connect</c> + module are used.</p> + <p><c>erl_connect_xinit()</c> stores for later use + information about:</p> + <list type="bulleted"> + <item>Hostname of the node, <c>host</c></item> + <item>Alivename, <c>alive</c></item> + <item>Node name, <c>node</c></item> + <item>IP address, <c>addr</c></item> + <item>Cookie, <c>cookie</c></item> + <item>Creation number, <c>creation</c></item> + </list> + <p><c>erl_connect_init()</c> + provides an alternative interface that does not require as much + information from the caller. Instead, + <c>erl_connect_init()</c> + uses <c>gethostbyname()</c> to obtain default values.</p> + <p>If you use <c>erl_connect_init()</c>, your node will + have a short name, that is, it will not be fully qualified. If you + need to use fully qualified (long) names, use + <c>erl_connect_xinit()</c> instead.</p> + <list type="bulleted"> + <item> + <p><c>host</c> is the name of the host on which the node + is running.</p> + </item> + <item> + <p><c>alive</c> is the alivename of the node.</p> + </item> + <item> + <p><c>node</c> is the node name. It is to + be of the form <em>alivename@hostname</em>.</p> + </item> + <item> + <p><c>addr</c> is the 32-bit IP address of + <c>host</c>.</p> + </item> + <item> + <p><c>cookie</c> is the authorization string required + for access to the remote node. If <c>NULL</c>, the user + <c>HOME</c> directory is searched for a cookie file + <c>.erlang.cookie</c>. The path to + the home directory is retrieved from environment variable + <c>HOME</c> on Unix and from the + <c>HOMEDRIVE</c> and + <c>HOMEPATH</c> variables on Windows. For more + details, see the <seealso marker="kernel:auth"> + <c>auth</c></seealso> module in Kernel.</p> + </item> + <item> + <p><c>creation</c> helps identifying a particular + instance of a C-node. In particular, it can help prevent us from + receiving messages sent to an earlier process with the same + registered name.</p> + </item> + </list> + <p>A C-node acting as a server is assigned a creation number + when it calls <c>erl_publish()</c>.</p> + <p><c>number</c> is used by + <c>erl_connect_init()</c> to + construct the actual node name. In Example 2 + below, <em>"[email protected]"</em> is the resulting node name.</p> + <p><em>Example 1:</em></p> + <code type="none"><![CDATA[ +struct in_addr addr; +addr = inet_addr("150.236.14.75"); +if (!erl_connect_xinit("chivas", + "madonna", + "[email protected]", + &addr; + "samplecookiestring..."), + 0) + erl_err_quit("<ERROR> when initializing !"); + ]]></code> + <p><em>Example 2:</em></p> + <code type="none"><![CDATA[ +if (!erl_connect_init(17, "samplecookiestring...", 0)) + erl_err_quit("<ERROR> when initializing !"); + ]]></code> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>erl_publish(port)</nametext></name> + <fsummary>Publish a node name.</fsummary> + <type> + <v>int port;</v> </type> <desc> - <p>This function closes an open connection to an Erlang node.</p> - <p><c><![CDATA[Fd]]></c> is a file descriptor obtained from - <c><![CDATA[erl_connect()]]></c> or <c><![CDATA[erl_xconnect()]]></c>.</p> - <p>On success, 0 is returned. If the call fails, a non-zero value - is returned, and the reason for - the error can be obtained with the appropriate platform-dependent - call.</p> + <p>This function is used by a server process to register + with the local name server EPMD, thereby allowing + other processes to send messages by using the registered name. + Before calling this function, the process should + have called <c>bind()</c> and <c>listen()</c> + on an open socket.</p> + <p><c>port</c> is the local name to register, and is to be + the same as the port number that was previously bound to the + socket.</p> + <p>To unregister with EPMD, simply close the returned descriptor.</p> + <p>On success, a descriptor connecting the calling process to EPMD is + returned. On failure, <c>-1</c> is returned and + <c>erl_errno</c> is set to:</p> + <taglist> + <tag><c>EIO</c></tag> + <item>I/O error.</item> + </taglist> + <p>Also, <c>errno</c> values from + <c>socket</c><em>(2)</em> + and <c>connect</c><em>(2)</em> system calls can be + propagated into <c>erl_errno</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_receive(fd, bufp, bufsize)</nametext></name> - <fsummary>Receive a message</fsummary> + <fsummary>Receive a message.</fsummary> <type> <v>int fd;</v> <v>char *bufp;</v> <v>int bufsize;</v> </type> <desc> - <p>This function receives a message consisting of a sequence + <p>Receives a message consisting of a sequence of bytes in the Erlang external format.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[bufp]]></c> is a buffer large enough to hold the expected - message. </p> - <p><c><![CDATA[bufsize]]></c> indicates the size of <c><![CDATA[bufp]]></c>.</p> - <p>If a <em>tick</em> occurs, i.e., the Erlang node on the + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>bufp</c> is a buffer large enough to hold the + expected message.</item> + <item><c>bufsize</c> indicates the size of + <c>bufp</c>.</item> + </list> + <p>If a <em>tick</em> occurs, that is, the Erlang node on the other end of the connection has polled this node to see if it - is still alive, the function will return <c><![CDATA[ERL_TICK]]></c> and - no message will be placed in the buffer. Also, - <c><![CDATA[erl_errno]]></c> will be set to <c><![CDATA[EAGAIN]]></c>.</p> + is still alive, the function returns <c>ERL_TICK</c> and + no message is placed in the buffer. Also, + <c>erl_errno</c> is set to <c>EAGAIN</c>.</p> <p>On success, the message is placed in the specified buffer and the function returns the number of bytes actually read. On - failure, the function returns a negative value and will set - <c><![CDATA[erl_errno]]></c> to one of:</p> + failure, the function returns a negative value and sets + <c>erl_errno</c> to one of:</p> <taglist> - <tag><c><![CDATA[EAGAIN]]></c></tag> + <tag><c>EAGAIN</c></tag> <item>Temporary error: Try again.</item> - <tag><c><![CDATA[EMSGSIZE]]></c></tag> - <item>Buffer too small.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>EMSGSIZE</c></tag> + <item>Buffer is too small.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> </taglist> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_receive_msg(fd, bufp, bufsize, emsg)</nametext></name> - <fsummary>Receive and decodes a message</fsummary> + <fsummary>Receive and decode a message.</fsummary> <type> <v>int fd;</v> <v>unsigned char *bufp;</v> @@ -224,14 +325,20 @@ erl_xconnect( &addr , ALIVE ); <v>ErlMessage *emsg;</v> </type> <desc> - <p>This function receives the message into the specified buffer, - and decodes into the <c><![CDATA[(ErlMessage *) emsg]]></c>.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[bufp]]></c> is a buffer large enough to hold the expected message.</p> - <p><c><![CDATA[bufsize]]></c> indicates the size of <c><![CDATA[bufp]]></c>.</p> - <p><c><![CDATA[emsg]]></c> is a pointer to an <c><![CDATA[ErlMessage]]></c> structure, - into which the message will be decoded. <c><![CDATA[ErlMessage]]></c> is - defined as follows:</p> + <p>Receives the message into the specified buffer + and decodes into <c>(ErlMessage *) emsg</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>bufp</c> is a buffer large enough to hold the + expected message.</item> + <item><c>bufsize</c> indicates the size of + <c>bufp</c>.</item> + <item>><c>emsg</c> is a pointer to an + <c>ErlMessage</c> structure + into which the message will be decoded. + <c>ErlMessage</c> is defined as follows:</item> + </list> <code type="none"><![CDATA[ typedef struct { int type; @@ -242,144 +349,100 @@ typedef struct { } ErlMessage; ]]></code> <note> - <p>The definition of <c><![CDATA[ErlMessage]]></c> has changed since - earlier versions of Erl_Interface.</p> + <p>The definition of <c>ErlMessage</c> has changed since + earlier versions of <c>Erl_Interface</c>.</p> </note> - <p><c><![CDATA[type]]></c> identifies the type of message, one of - <c><![CDATA[ERL_SEND]]></c>, <c><![CDATA[ERL_REG_SEND]]></c>, <c><![CDATA[ERL_LINK]]></c>, - <c><![CDATA[ERL_UNLINK]]></c> and <c><![CDATA[ERL_EXIT]]></c>. - </p> - <p>If <c><![CDATA[type]]></c> contains <c><![CDATA[ERL_SEND]]></c> - this indicates that an ordinary send operation has taken - place, and <c><![CDATA[emsg->to]]></c> contains the Pid of the - recipient. If <c><![CDATA[type]]></c> contains <c><![CDATA[ERL_REG_SEND]]></c> then a - registered send operation took place, and <c><![CDATA[emsg->from]]></c> - contains the Pid of the sender. In both cases, the actual - message will be in <c><![CDATA[emsg->msg]]></c>. - </p> - <p>If <c><![CDATA[type]]></c> contains one of <c><![CDATA[ERL_LINK]]></c> or - <c><![CDATA[ERL_UNLINK]]></c>, then <c><![CDATA[emsg->to]]></c> and <c><![CDATA[emsg->from]]></c> - contain the pids of the sender and recipient of the link or unlink. - <c><![CDATA[emsg->msg]]></c> is not used in these cases. - </p> - <p>If <c><![CDATA[type]]></c> contains <c><![CDATA[ERL_EXIT]]></c>, then this - indicates that a link has been broken. In this case, - <c><![CDATA[emsg->to]]></c> and <c><![CDATA[emsg->from]]></c> contain the pids of the - linked processes, and <c><![CDATA[emsg->msg]]></c> contains the reason for - the exit. - </p> + <p><c>type</c> identifies the type of message, one of the + following:</p> + <taglist> + <tag><c>ERL_SEND</c></tag> + <item> + <p>An ordinary send operation has occurred and + <c>emsg->to</c> contains the pid of the recipient. + The message is in <c>emsg->msg</c>.</p> + </item> + <tag><c>ERL_REG_SEND</c></tag> + <item> + <p>A registered send operation has occurred and + <c>emsg->from</c> contains the pid of the sender. + The message is in <c>emsg->msg</c>.</p> + </item> + <tag><c>ERL_LINK</c> or <c>ERL_UNLINK</c> + </tag> + <item> + <p><c>emsg->to</c> and <c>emsg->from</c> + contain the pids of the sender and recipient of the link or + unlink. <c>emsg->msg</c> is not used.</p> + </item> + <tag><c>ERL_EXIT</c></tag> + <item> + <p>A link is broken. <c>emsg->to</c> and + <c>emsg->from</c> contain the pids of the linked + processes, and <c>emsg->msg</c> contains the reason + for the exit.</p> + </item> + </taglist> <note> <p>It is the caller's responsibility to release the - memory pointed to by <c><![CDATA[emsg->msg]]></c>, <c><![CDATA[emsg->to]]></c> and - <c><![CDATA[emsg->from]]></c>.</p> + memory pointed to by <c>emsg->msg</c>, + <c>emsg->to</c>, and + <c>emsg->from</c>.</p> </note> - <p>If a <em>tick</em> occurs, i.e., the Erlang node on the + <p>If a <em>tick</em> occurs, that is, the Erlang node on the other end of the connection has polled this node to see if it - is still alive, the function will return <c><![CDATA[ERL_TICK]]></c> + is still alive, the function returns <c>ERL_TICK</c> indicating that the tick has been received and responded to, - but no message will be placed in the buffer. In this case you - should call <c><![CDATA[erl_receive_msg()]]></c> again.</p> - <p>On success, the function returns <c><![CDATA[ERL_MSG]]></c> and the - <c><![CDATA[Emsg]]></c> struct will be initialized as described above, or - <c><![CDATA[ERL_TICK]]></c>, in which case no message is returned. On - failure, the function returns <c><![CDATA[ERL_ERROR]]></c> and will set - <c><![CDATA[erl_errno]]></c> to one of:</p> + but no message is placed in the buffer. In this case you + are to call <c>erl_receive_msg()</c> again.</p> + <p>On success, the function returns <c>ERL_MSG</c> and the + <c>Emsg</c> struct is initialized as described above, or + <c>ERL_TICK</c>, in which case no message is returned. On + failure, the function returns <c>ERL_ERROR</c> and sets + <c>erl_errno</c> to one of:</p> <taglist> - <tag><c><![CDATA[EMSGSIZE]]></c></tag> - <item>Buffer too small.</item> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> - <item>I/O error.</item> - </taglist> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>erl_xreceive_msg(fd, bufpp, bufsizep, emsg)</nametext></name> - <fsummary>Receive and decodes a message</fsummary> - <type> - <v>int fd;</v> - <v>unsigned char **bufpp;</v> - <v>int *bufsizep;</v> - <v>ErlMessage *emsg;</v> - </type> - <desc> - <p>This function is similar to <c><![CDATA[erl_receive_msg]]></c>. The - difference is that <c><![CDATA[erl_xreceive_msg]]></c> expects the buffer to - have been allocated by <c><![CDATA[malloc]]></c>, and reallocates it if the received - message does not fit into the original buffer. For that reason, - both buffer and buffer length are given as pointers - their values - may change by the call. - </p> - <p>On success, the function returns <c><![CDATA[ERL_MSG]]></c> and the - <c><![CDATA[Emsg]]></c> struct will be initialized as described above, or - <c><![CDATA[ERL_TICK]]></c>, in which case no message is returned. On - failure, the function returns <c><![CDATA[ERL_ERROR]]></c> and will set - <c><![CDATA[erl_errno]]></c> to one of:</p> - <taglist> - <tag><c><![CDATA[EMSGSIZE]]></c></tag> - <item>Buffer too small.</item> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> - <item>I/O error.</item> - </taglist> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>erl_send(fd, to, msg)</nametext></name> - <fsummary>Send a message</fsummary> - <type> - <v>int fd;</v> - <v>ETERM *to, *msg;</v> - </type> - <desc> - <p>This function sends an Erlang term to a process.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[to]]></c> is an Erlang term containing the Pid of the - intended recipient of the message.</p> - <p><c><![CDATA[msg]]></c> is the Erlang term to be sent.</p> - <p>The function returns 1 if successful, otherwise 0 --- in - which case it will set <c><![CDATA[erl_errno]]></c> to one of:</p> - <taglist> - <tag><c><![CDATA[EINVAL]]></c></tag> - <item>Invalid argument: <c><![CDATA[to]]></c> is not a valid Erlang pid.</item> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>EMSGSIZE</c></tag> + <item>Buffer is too small.</item> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> </taglist> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_reg_send(fd, to, msg)</nametext></name> - <fsummary>Send a message to a registered name</fsummary> + <fsummary>Send a message to a registered name.</fsummary> <type> <v>int fd;</v> <v>char *to;</v> <v>ETERM *msg;</v> </type> <desc> - <p>This function sends an Erlang term to a registered process.</p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[to]]></c> is a string containing the registered name of - the intended recipient of the message.</p> - <p><c><![CDATA[msg]]></c> is the Erlang term to be sent.</p> - <p>The function returns 1 if successful, otherwise 0 --- in - which case it will set <c><![CDATA[erl_errno]]></c> to one of:</p> + <p>Sends an Erlang term to a registered process.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>to</c> is a string containing the registered name + of the intended recipient of the message.</item> + <item><c>msg</c> is the Erlang term to be sent.</item> + </list> + <p>Returns <c>1</c> on success, otherwise <c>0</c>. In + the latter case <c>erl_errno</c> is set to one of:</p> <taglist> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> </taglist> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_rpc(fd, mod, fun, args)</nametext></name> - <name><ret>int</ret><nametext>erl_rpc_to(fd, mod, fun, args)</nametext></name> <name><ret>int</ret><nametext>erl_rpc_from(fd, timeout, emsg)</nametext></name> - <fsummary>Remote Procedure Call</fsummary> + <name><ret>int</ret><nametext>erl_rpc_to(fd, mod, fun, args)</nametext></name> + <fsummary>Remote Procedure Call.</fsummary> <type> <v>int fd, timeout;</v> <v>char *mod, *fun;</v> @@ -387,158 +450,178 @@ typedef struct { <v>ErlMessage *emsg;</v> </type> <desc> - <p>These functions support calling Erlang functions on remote nodes. - <c><![CDATA[erl_rpc_to()]]></c> sends an rpc request to a remote node and - <c><![CDATA[erl_rpc_from()]]></c> receives the results of such a call. - <c><![CDATA[erl_rpc()]]></c> combines the functionality of these two functions - by sending an rpc request and waiting for the results. See also - <c><![CDATA[rpc:call/4]]></c>. </p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection.</p> - <p><c><![CDATA[timeout]]></c> is the maximum time (in ms) to wait for - results. Specify <c><![CDATA[ERL_NO_TIMEOUT]]></c> to wait forever. - When erl_rpc() calls erl_rpc_from(), the call will never - timeout.</p> - <p><c><![CDATA[mod]]></c> is the name of the module containing the function - to be run on the remote node.</p> - <p><c><![CDATA[fun]]></c> is the name of the function to run.</p> - <p><c><![CDATA[args]]></c> is an Erlang list, containing the arguments to be - passed to the function. </p> - <p><c><![CDATA[emsg]]></c> is a message containing the result of the - function call.</p> - <p>The actual message returned by the rpc server - is a 2-tuple <c><![CDATA[{rex,Reply}]]></c>. If you are using - <c><![CDATA[erl_rpc_from()]]></c> in your code then this is the message you - will need to parse. If you are using <c><![CDATA[erl_rpc()]]></c> then the + <p>Supports calling Erlang functions on remote nodes. + <c>erl_rpc_to()</c> sends an RPC request to a remote node + and <c>erl_rpc_from()</c> receives the results of such a + call. <c>erl_rpc()</c> combines the functionality of + these two functions by sending an RPC request and waiting for the + results. See also <seealso marker="kernel:rpc#call/4"> + <c>rpc:call/4</c></seealso> in <c>Kernel</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>timeout</c> is the maximum time (in milliseconds) + to wait for + results. To wait forever, specify <c>ERL_NO_TIMEOUT</c>. + When <c>erl_rpc()</c> calls <c>erl_rpc_from()</c>, the call will + never timeout.</item> + <item><c>mod</c> is the name of the module containing the + function to be run on the remote node.</item> + <item><c>fun</c> is the name of the function to run. + </item> + <item><c>args</c> is an Erlang list, containing the + arguments to be passed to the function.</item> + <item><c>emsg</c> is a message containing the result of + the function call.</item> + </list> + <p>The actual message returned by the RPC server + is a 2-tuple <c>{rex,Reply}</c>. If you use + <c>erl_rpc_from()</c> in your code, this is the message + you will need to parse. If you use <c>erl_rpc()</c>, the tuple itself is parsed for you, and the message returned to your - program is the erlang term containing <c><![CDATA[Reply]]></c> only. Replies - to rpc requests are always ERL_SEND messages. - </p> + program is the Erlang term containing <c>Reply</c> only. + Replies to RPC requests are always <c>ERL_SEND</c> messages.</p> <note> <p>It is the caller's responsibility to free the returned - <c><![CDATA[ETERM]]></c> structure as well as the memory pointed to by - <c><![CDATA[emsg->msg]]></c> and <c><![CDATA[emsg->to]]></c>. </p> + <c>ETERM</c> structure and the memory pointed to by + <c>emsg->msg</c> and <c>emsg->to</c>.</p> </note> - <p><c><![CDATA[erl_rpc()]]></c> returns the remote function's return value (or - <c><![CDATA[NULL]]></c> if it failed). <c><![CDATA[erl_rpc_to()]]></c> returns 0 on - success, and a negative number on failure. <c><![CDATA[erl_rcp_from()]]></c> - returns <c><![CDATA[ERL_MSG]]></c> when successful (with <c><![CDATA[Emsg]]></c> now - containing the reply tuple), and one of <c><![CDATA[ERL_TICK]]></c>, - <c><![CDATA[ERL_TIMEOUT]]></c> and <c><![CDATA[ERL_ERROR]]></c> otherwise. When failing, - all three functions set <c><![CDATA[erl_errno]]></c> to one of:</p> + <p><c>erl_rpc()</c> returns the remote function's return + value on success, otherwise <c>NULL</c>.</p> + <p><c>erl_rpc_to()</c> returns <c>0</c> on + success, otherwise a negative number.</p> + <p><c>erl_rcp_from()</c> returns <c>ERL_MSG</c> + on success (with <c>Emsg</c> now + containing the reply tuple), otherwise one of + <c>ERL_TICK</c>, <c>ERL_TIMEOUT</c>, or + <c>ERL_ERROR</c>.</p> + <p>When failing, + all three functions set <c>erl_errno</c> to one of:</p> <taglist> - <tag><c><![CDATA[ENOMEM]]></c></tag> - <item>No more memory available.</item> - <tag><c><![CDATA[EIO]]></c></tag> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> <item>I/O error.</item> - <tag><c><![CDATA[ETIMEDOUT]]></c></tag> - <item>Timeout expired.</item> - <tag><c><![CDATA[EAGAIN]]></c></tag> + <tag><c>ETIMEDOUT</c></tag> + <item>Timeout has expired.</item> + <tag><c>EAGAIN</c></tag> <item>Temporary error: Try again.</item> </taglist> </desc> </func> + <func> - <name><ret>int</ret><nametext>erl_publish(port)</nametext></name> - <fsummary>Publish a node name</fsummary> + <name><ret>int</ret><nametext>erl_send(fd, to, msg)</nametext></name> + <fsummary>Send a message.</fsummary> <type> - <v>int port;</v> + <v>int fd;</v> + <v>ETERM *to, *msg;</v> </type> <desc> - <p>These functions are used by a server process to register - with the local name server <em>epmd</em>, thereby allowing - other processes to send messages by using the registered name. - Before calling either of these functions, the process should - have called <c><![CDATA[bind()]]></c> and <c><![CDATA[listen()]]></c> on an open socket.</p> - <p><c><![CDATA[port]]></c> is the local name to register, and should be the - same as the port number that was previously bound to the socket.</p> - <p>To unregister with epmd, simply close the returned - descriptor. - </p> - <p>On success, the functions return a descriptor connecting the - calling process to epmd. On failure, they return -1 and set - <c><![CDATA[erl_errno]]></c> to:</p> + <p>Sends an Erlang term to a process.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>to</c> is an Erlang term containing the pid of + the intended recipient of the message.</item> + <item>><c>msg</c> is the Erlang term to be sent.</item> + </list> + <p>Returns <c>1</c> on success, otherwise <c>0</c>. In + the latter case <c>erl_errno</c> is set to one of:</p> <taglist> - <tag><c><![CDATA[EIO]]></c></tag> - <item>I/O error</item> + <tag><c>EINVAL</c></tag> + <item>Invalid argument: <c>to</c> is not a valid Erlang + pid.</item> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> + <item>I/O error.</item> </taglist> - <p>Additionally, <c><![CDATA[errno]]></c> values from <c><![CDATA[socket]]></c><em>(2)</em> - and <c><![CDATA[connect]]></c><em>(2)</em> system calls may be propagated - into <c><![CDATA[erl_errno]]></c>. - </p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>erl_accept(listensock, conp)</nametext></name> - <fsummary>Accept a connection</fsummary> - <type> - <v>int listensock;</v> - <v>ErlConnect *conp;</v> - </type> - <desc> - <p>This function is used by a server process to accept a - connection from a client process.</p> - <p><c><![CDATA[listensock]]></c> is an open socket descriptor on which - <c><![CDATA[listen()]]></c> has previously been called.</p> - <p><c><![CDATA[conp]]></c> is a pointer to an <c><![CDATA[ErlConnect]]></c> struct, - described as follows:</p> - <code type="none"><![CDATA[ -typedef struct { - char ipadr[4]; - char nodename[MAXNODELEN]; -} ErlConnect; - ]]></code> - <p>On success, <c><![CDATA[conp]]></c> is filled in with the address and - node name of the connecting client and a file descriptor is - returned. On failure, <c><![CDATA[ERL_ERROR]]></c> is returned and - <c><![CDATA[erl_errno]]></c> is set to <c><![CDATA[EIO]]></c>.</p> </desc> </func> + <func> - <name><ret>const char *</ret><nametext>erl_thiscookie()</nametext></name> - <name><ret>const char *</ret><nametext>erl_thisnodename()</nametext></name> - <name><ret>const char *</ret><nametext>erl_thishostname()</nametext></name> <name><ret>const char *</ret><nametext>erl_thisalivename()</nametext></name> + <name><ret>const char *</ret><nametext>erl_thiscookie()</nametext></name> <name><ret>short</ret><nametext>erl_thiscreation()</nametext></name> - <fsummary>Retrieve some values</fsummary> + <name><ret>const char *</ret><nametext>erl_thishostname()</nametext></name> + <name><ret>const char *</ret><nametext>erl_thisnodename()</nametext></name> + <fsummary>Retrieve some values.</fsummary> <desc> - <p>These functions can be used to retrieve information about - the C Node. These values are initially set with - <c><![CDATA[erl_connect_init()]]></c> or <c><![CDATA[erl_connect_xinit()]]></c>.</p> + <p>Retrieves information about + the C-node. These values are initially set with + <c>erl_connect_init()</c> or + <c>erl_connect_xinit()</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_unpublish(alive)</nametext></name> - <fsummary>Forcefully unpublish a node name</fsummary> + <fsummary>Forcefully unpublish a node name.</fsummary> <type> <v>char *alive;</v> </type> <desc> <p>This function can be called by a process to unregister a - specified node from epmd on the localhost. This is however usually not - allowed, unless epmd was started with the -relaxed_command_check - flag, which it normally isn't.</p> - - <p>To unregister a node you have published, you should instead - close the descriptor that was returned by - <c><![CDATA[ei_publish()]]></c>.</p> - + specified node from EPMD on the local host. This is, however, usually + not allowed, unless EPMD was started with flag + <c>-relaxed_command_check</c>, which it normally is not.</p> + <p>To unregister a node you have published, you should instead + close the descriptor that was returned by + <c>ei_publish()</c>.</p> <warning> - <p>This function is deprecated and will be removed in a future - release.</p> + <p>This function is deprecated and will be removed in a future + release.</p> </warning> - <p><c><![CDATA[alive]]></c> is the name of the node to unregister, i.e., the - first component of the nodename, without the <c><![CDATA[@hostname]]></c>.</p> - <p>If the node was successfully unregistered from epmd, the - function returns 0. Otherwise, it returns -1 and sets - <c><![CDATA[erl_errno]]></c> is to <c><![CDATA[EIO]]></c>.</p> + <p><c>alive</c> is the name of the node to unregister, that + is, the first component of the node name, without + <c>@hostname</c>.</p> + <p>If the node was successfully unregistered from EPMD, <c>0</c> is + returned, otherwise <c>-1</c> is returned and + <c>erl_errno</c> is set to <c>EIO</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>erl_xreceive_msg(fd, bufpp, bufsizep, emsg)</nametext></name> + <fsummary>Receive and decode a message.</fsummary> + <type> + <v>int fd;</v> + <v>unsigned char **bufpp;</v> + <v>int *bufsizep;</v> + <v>ErlMessage *emsg;</v> + </type> + <desc> + <p>Similar to <c>erl_receive_msg</c>. The difference is + that <c>erl_xreceive_msg</c> expects the buffer to + have been allocated by <c>malloc</c>, and reallocates it + if the received + message does not fit into the original buffer. Therefore + both buffer and buffer length are given as pointers; their values + can change by the call.</p> + <p>On success, the function returns <c>ERL_MSG</c> and the + <c>Emsg</c> struct is initialized as described above, or + <c>ERL_TICK</c>, in which case no message is returned. On + failure, the function returns <c>ERL_ERROR</c> and sets + <c>erl_errno</c> to one of:</p> + <taglist> + <tag><c>EMSGSIZE</c></tag> + <item>Buffer is too small.</item> + <tag><c>ENOMEM</c></tag> + <item>No more memory is available.</item> + <tag><c>EIO</c></tag> + <item>I/O error.</item> + </taglist> </desc> </func> + <func> - <name><ret>struct hostent</ret><nametext>*erl_gethostbyname(name)</nametext></name> <name><ret>struct hostent</ret><nametext>*erl_gethostbyaddr(addr, length, type)</nametext></name> - <name><ret>struct hostent</ret><nametext>*erl_gethostbyname_r(name, hostp, buffer, buflen, h_errnop)</nametext></name> <name><ret>struct hostent</ret><nametext>*erl_gethostbyaddr_r(addr, length, type, hostp, buffer, buflen, h_errnop)</nametext></name> - <fsummary>Name lookup functions</fsummary> + <name><ret>struct hostent</ret><nametext>*erl_gethostbyname(name)</nametext></name> + <name><ret>struct hostent</ret><nametext>*erl_gethostbyname_r(name, hostp, buffer, buflen, h_errnop)</nametext></name> + + <fsummary>Name lookup functions.</fsummary> <type> <v>const char *name;</v> <v>const char *addr;</v> @@ -550,7 +633,7 @@ typedef struct { <v>int *h_errnop;</v> </type> <desc> - <p>These are convenience functions for some common name lookup functions.</p> + <p>Convenience functions for some common name lookup functions.</p> </desc> </func> </funcs> @@ -558,13 +641,13 @@ typedef struct { <section> <title>Debug Information</title> <p>If a connection attempt fails, the following can be checked:</p> + <list type="bulleted"> - <item><c><![CDATA[erl_errno]]></c></item> - <item>that the right cookie was used</item> - <item>that <em>epmd</em> is running</item> - <item>the remote Erlang node on the other side is running the same - version of Erlang as the <c><![CDATA[erl_interface]]></c> library.</item> + <item><c>erl_errno</c></item> + <item>That the correct cookie was used</item> + <item>That EPMD is running</item> + <item>That the remote Erlang node on the other side is running the same + version of Erlang as the <c>erl_interface</c> library</item> </list> </section> </cref> - diff --git a/lib/erl_interface/doc/src/erl_error.xml b/lib/erl_interface/doc/src/erl_error.xml index abe84780e1..8139c9b343 100644 --- a/lib/erl_interface/doc/src/erl_error.xml +++ b/lib/erl_interface/doc/src/erl_error.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_error</title> @@ -28,61 +28,66 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>961014</date> + <date>1996-10-14</date> <rev>A</rev> - <file>erl_error.sgml</file> + <file>erl_error.xml</file> </header> <lib>erl_error</lib> - <libsummary>Error Print Routines</libsummary> + <libsummary>Error print routines.</libsummary> <description> <p>This module contains some error printing routines taken - from <em>Advanced Programming in the UNIX Environment</em> - by W. Richard Stevens. </p> + from "Advanced Programming in the UNIX Environment" + by W. Richard Stevens.</p> + <p>These functions are all called in the same manner as - <c><![CDATA[printf()]]></c>, i.e. with a string containing format specifiers - followed by a list of corresponding arguments. All output from - these functions is to <c><![CDATA[stderr]]></c>.</p> + <c>printf()</c>, that is, with a string containing format + specifiers followed by a list of corresponding arguments. All output from + these functions is to <c>stderr</c>.</p> </description> + <funcs> <func> <name><ret>void</ret><nametext>erl_err_msg(FormatStr, ... )</nametext></name> - <fsummary>Non-fatal error, and not system call error</fsummary> + <fsummary>Non-fatal error, and not system call error.</fsummary> <type> <v>const char *FormatStr;</v> </type> <desc> <p>The message provided by the caller is printed. This - function is simply a wrapper for <c><![CDATA[fprintf()]]></c>.</p> + function is simply a wrapper for <c>fprintf()</c>.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_err_quit(FormatStr, ... )</nametext></name> - <fsummary>Fatal error, but not system call error</fsummary> + <fsummary>Fatal error, but not system call error.</fsummary> <type> <v>const char *FormatStr;</v> </type> <desc> <p>Use this function when a fatal error has occurred that - is not due to a system call. The message provided by the - caller is printed and the process terminates with an exit - value of 1. The function does not return.</p> + is not because of a system call. The message provided by the + caller is printed and the process terminates with exit + value <c>1</c>. This function does not return.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_err_ret(FormatStr, ... )</nametext></name> - <fsummary>Non-fatal system call error</fsummary> + <fsummary>Non-fatal system call error.</fsummary> <type> <v>const char *FormatStr;</v> </type> <desc> <p>Use this function after a failed system call. The message provided by the caller is printed followed by a string - describing the reason for failure. </p> + describing the reason for failure.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_err_sys(FormatStr, ... )</nametext></name> - <fsummary>Fatal system call error</fsummary> + <fsummary>Fatal system call error.</fsummary> <type> <v>const char *FormatStr;</v> </type> @@ -90,7 +95,7 @@ <p>Use this function after a failed system call. The message provided by the caller is printed followed by a string describing the reason for failure, and the process - terminates with an exit value of 1. The function does not + terminates with exit value <c>1</c>. This function does not return.</p> </desc> </func> @@ -98,40 +103,43 @@ <section> <title>Error Reporting</title> - <p>Most functions in erl_interface report failures to the caller by - returning some otherwise meaningless value (typically <c><![CDATA[NULL]]></c> + <p>Most functions in <c>Erl_Interface</c> report failures to the caller by + returning some otherwise meaningless value (typically + <c>NULL</c> or a negative number). As this only tells you that things did not - go well, you will have to examine the error code in - <c><![CDATA[erl_errno]]></c> if you want to find out more about the failure.</p> + go well, examine the error code in <c>erl_errno</c> if you + want to find out more about the failure.</p> </section> + <funcs> <func> <name><ret>volatile int</ret><nametext>erl_errno</nametext></name> - <fsummary>The variable <c><![CDATA[erl_errno]]></c>contains the erl_interface error number. You can change the value if you wish. </fsummary> + <fsummary>Variable <c>erl_errno</c> contains the + Erl_Interface error number. You can change the value if you wish. + </fsummary> <desc> - <p><c><![CDATA[erl_errno]]></c> is initially (at program startup) zero and - is then set by many erl_interface functions on failure to a - non-zero error code to indicate what kind of error it - encountered. A successful function call might change - <c><![CDATA[erl_errno]]></c> (by calling some other function that - fails), but no function will ever set it to zero. This means - that you cannot use <c><![CDATA[erl_errno]]></c> to see <em>if</em> a + <p><c>erl_errno</c> is initially (at program startup) zero + and is then set by many <c>Erl_Interface</c> functions on failure to + a non-zero error code to indicate what kind of error it + encountered. A successful function call can change + <c>erl_errno</c> (by calling some other function that + fails), but no function does never set it to zero. This means + that you cannot use <c>erl_errno</c> to see <em>if</em> a function call failed. Instead, each function reports failure in its own way (usually by returning a negative number or - <c><![CDATA[NULL]]></c>), in which case you can examine <c><![CDATA[erl_errno]]></c> - for details.</p> - <p><c><![CDATA[erl_errno]]></c> uses the error codes defined in your - system's <c><![CDATA[<errno.h>]]></c>.</p> + <c>NULL</c>), in which case you can examine + <c>erl_errno</c> for details.</p> + <p><c>erl_errno</c> uses the error codes defined in your + system's <c><errno.h></c>.</p> <note> - <p>Actually, <c><![CDATA[erl_errno]]></c> is a "modifiable lvalue" (just - like ISO C defines <c><![CDATA[errno]]></c> to be) rather than a - variable. This means it might be implemented as a macro - (expanding to, e.g., <c><![CDATA[*_erl_errno()]]></c>). For reasons of - thread- (or task-)safety, this is exactly what we do on most - platforms.</p> + <p><c>erl_errno</c> is a "modifiable lvalue" (just + like ISO C defines <c>errno</c> to be) rather than a + variable. This means it can be implemented as a macro + (expanding to, for example, <c>*_erl_errno()</c>). + For reasons of thread safety (or task safety), this is exactly what + we do on most platforms.</p> </note> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/erl_eterm.xml b/lib/erl_interface/doc/src/erl_eterm.xml index 800f8a3207..9a05196a70 100644 --- a/lib/erl_interface/doc/src/erl_eterm.xml +++ b/lib/erl_interface/doc/src/erl_eterm.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_eterm</title> @@ -28,131 +28,145 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>980703</date> + <date>1998-07-03</date> <rev>A</rev> - <file>erl_eterm.sgml</file> + <file>erl_eterm.xml</file> </header> <lib>erl_eterm</lib> - <libsummary>Functions for Erlang Term Construction</libsummary> + <libsummary>Functions for Erlang term construction.</libsummary> <description> - <p>This module contains functions for creating and manipulating - Erlang terms. </p> + <p>This module provides functions for creating and manipulating + Erlang terms.</p> + <p>An Erlang term is represented by a C structure of type - <c><![CDATA[ETERM]]></c>. Applications should not reference any fields in this - structure directly, because it may be changed in future releases + <c>ETERM</c>. Applications should not reference any fields + in this structure directly, as it can be changed in future releases to provide faster and more compact term storage. Instead, - applications should us the macros and functions provided. </p> - <p>The following macros each take a single ETERM pointer as an - argument. They return a non-zero value if the test is true, and 0 - otherwise:</p> + applications should use the macros and functions provided.</p> + + <p>Each of the following macros takes a single <c>ETERM</c> pointer as an + argument. The macros return a non-zero value if the test is true, + otherwise <c>0</c>.</p> + <taglist> - <tag><c><![CDATA[ERL_IS_INTEGER(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is an integer.</item> - <tag><c><![CDATA[ERL_IS_UNSIGNED_INTEGER(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is an integer.</item> - <tag><c><![CDATA[ERL_IS_FLOAT(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a floating point number.</item> - <tag><c><![CDATA[ERL_IS_ATOM(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is an atom.</item> - <tag><c><![CDATA[ERL_IS_PID(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a Pid (process identifier).</item> - <tag><c><![CDATA[ERL_IS_PORT(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a port.</item> - <tag><c><![CDATA[ERL_IS_REF(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a reference.</item> - <tag><c><![CDATA[ERL_IS_TUPLE(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a tuple.</item> - <tag><c><![CDATA[ERL_IS_BINARY(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a binary.</item> - <tag><c><![CDATA[ERL_IS_LIST(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a list with zero or more elements.</item> - <tag><c><![CDATA[ERL_IS_EMPTY_LIST(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is an empty list.</item> - <tag><c><![CDATA[ERL_IS_CONS(t)]]></c></tag> - <item>True if <c><![CDATA[t]]></c> is a list with at least one element.</item> + <tag><c>ERL_IS_INTEGER(t)</c></tag> + <item>True if <c>t</c> is an integer.</item> + <tag><c>ERL_IS_UNSIGNED_INTEGER(t)</c></tag> + <item>True if <c>t</c> is an integer.</item> + <tag><c>ERL_IS_FLOAT(t)</c></tag> + <item>True if <c>t</c> is a floating point number.</item> + <tag><c>ERL_IS_ATOM(t)</c></tag> + <item>True if <c>t</c> is an atom.</item> + <tag><c>ERL_IS_PID(t)</c></tag> + <item>True if <c>t</c> is a pid (process identifier).</item> + <tag><c>ERL_IS_PORT(t)</c></tag> + <item>True if <c>t</c> is a port.</item> + <tag><c>ERL_IS_REF(t)</c></tag> + <item>True if <c>t</c> is a reference.</item> + <tag><c>ERL_IS_TUPLE(t)</c></tag> + <item>True if <c>t</c> is a tuple.</item> + <tag><c>ERL_IS_BINARY(t)</c></tag> + <item>True if <c>t</c> is a binary.</item> + <tag><c>ERL_IS_LIST(t)</c></tag> + <item>True if <c>t</c> is a list with zero or more + elements.</item> + <tag><c>ERL_IS_EMPTY_LIST(t)</c></tag> + <item>True if <c>t</c> is an empty list.</item> + <tag><c>ERL_IS_CONS(t)</c></tag> + <item>True if <c>t</c> is a list with at least one + element.</item> </taglist> + <p>The following macros can be used for retrieving parts of Erlang - terms. None of these do any type checking; results are undefined - if you pass an ETERM* containing the wrong type. For example, - passing a tuple to ERL_ATOM_PTR() will likely result in garbage. - </p> + terms. None of these do any type checking. Results are undefined + if you pass an <c>ETERM*</c> containing the wrong type. For example, + passing a tuple to <c>ERL_ATOM_PTR()</c> likely results in garbage.</p> + <taglist> - <tag><c><![CDATA[char *ERL_ATOM_PTR(t)]]></c></tag> - <item/> - <tag><c><![CDATA[char *ERL_ATOM_PTR_UTF8(t)]]></c></tag> - <item>A string representing atom <c><![CDATA[t]]></c>. - </item> - <tag><c><![CDATA[int ERL_ATOM_SIZE(t)]]></c></tag> - <item/> - <tag><c><![CDATA[int ERL_ATOM_SIZE_UTF8(t)]]></c></tag> - <item>The length (in bytes) of atom t.</item> - <tag><c><![CDATA[void *ERL_BIN_PTR(t)]]></c></tag> - <item>A pointer to the contents of <c><![CDATA[t]]></c></item> - <tag><c><![CDATA[int ERL_BIN_SIZE(t)]]></c></tag> - <item>The length (in bytes) of binary object <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_INT_VALUE(t)]]></c></tag> - <item>The integer of <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[unsigned int ERL_INT_UVALUE(t)]]></c></tag> - <item>The unsigned integer value of <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[double ERL_FLOAT_VALUE(t)]]></c></tag> - <item>The floating point value of <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[ETERM *ERL_PID_NODE(t)]]></c></tag> - <item/> - <tag><c><![CDATA[ETERM *ERL_PID_NODE_UTF8(t)]]></c></tag> - <item>The Node in pid <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_PID_NUMBER(t)]]></c></tag> - <item>The sequence number in pid <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_PID_SERIAL(t)]]></c></tag> - <item>The serial number in pid <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_PID_CREATION(t)]]></c></tag> - <item>The creation number in pid <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_PORT_NUMBER(t)]]></c></tag> - <item>The sequence number in port <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_PORT_CREATION(t)]]></c></tag> - <item>The creation number in port <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[ETERM *ERL_PORT_NODE(t)]]></c></tag> - <item/> - <tag><c><![CDATA[ETERM *ERL_PORT_NODE_UTF8(t)]]></c></tag> - <item>The node in port <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_REF_NUMBER(t)]]></c></tag> - <item>The first part of the reference number in ref <c><![CDATA[t]]></c>. Use - only for compatibility.</item> - <tag><c><![CDATA[int ERL_REF_NUMBERS(t)]]></c></tag> - <item>Pointer to the array of reference numbers in ref <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_REF_LEN(t)]]></c></tag> - <item>The number of used reference numbers in ref <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_REF_CREATION(t)]]></c></tag> - <item>The creation number in ref <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[int ERL_TUPLE_SIZE(t)]]></c></tag> - <item>The number of elements in tuple <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[ETERM *ERL_CONS_HEAD(t)]]></c></tag> - <item>The head element of list <c><![CDATA[t]]></c>.</item> - <tag><c><![CDATA[ETERM *ERL_CONS_TAIL(t)]]></c></tag> - <item>A List representing the tail elements of list <c><![CDATA[t]]></c>.</item> + <tag><c>char *ERL_ATOM_PTR(t)</c></tag> + <item></item> + <tag><c>char *ERL_ATOM_PTR_UTF8(t)</c></tag> + <item>A string representing atom <c>t</c>.</item> + <tag><c>int ERL_ATOM_SIZE(t)</c></tag> + <item></item> + <tag><c>int ERL_ATOM_SIZE_UTF8(t)</c></tag> + <item>The length (in bytes) of atom <c>t</c>.</item> + <tag><c>void *ERL_BIN_PTR(t)</c></tag> + <item>A pointer to the contents of <c>t</c>.</item> + <tag><c>int ERL_BIN_SIZE(t)</c></tag> + <item>The length (in bytes) of binary object <c>t</c>.</item> + <tag><c>int ERL_INT_VALUE(t)</c></tag> + <item>The integer of <c>t</c>.</item> + <tag><c>unsigned int ERL_INT_UVALUE(t)</c></tag> + <item>The unsigned integer value of <c>t</c>.</item> + <tag><c>double ERL_FLOAT_VALUE(t)</c></tag> + <item>The floating point value of <c>t</c>.</item> + <tag><c>ETERM *ERL_PID_NODE(t)</c></tag> + <item></item> + <tag><c>ETERM *ERL_PID_NODE_UTF8(t)</c></tag> + <item>The node in pid <c>t</c>.</item> + <tag><c>int ERL_PID_NUMBER(t)</c></tag> + <item>The sequence number in pid <c>t</c>.</item> + <tag><c>int ERL_PID_SERIAL(t)</c></tag> + <item>The serial number in pid <c>t</c>.</item> + <tag><c>int ERL_PID_CREATION(t)</c></tag> + <item>The creation number in pid <c>t</c>.</item> + <tag><c>int ERL_PORT_NUMBER(t)</c></tag> + <item>The sequence number in port <c>t</c>.</item> + <tag><c>int ERL_PORT_CREATION(t)</c></tag> + <item>The creation number in port <c>t</c>.</item> + <tag><c>ETERM *ERL_PORT_NODE(t)</c></tag> + <item></item> + <tag><c>ETERM *ERL_PORT_NODE_UTF8(t)</c></tag> + <item>The node in port <c>t</c>.</item> + <tag><c>int ERL_REF_NUMBER(t)</c></tag> + <item>The first part of the reference number in ref <c>t</c>. + Use only for compatibility.</item> + <tag><c>int ERL_REF_NUMBERS(t)</c></tag> + <item>Pointer to the array of reference numbers in ref + <c>t</c>.</item> + <tag><c>int ERL_REF_LEN(t)</c></tag> + <item>The number of used reference numbers in ref + <c>t</c>.</item> + <tag><c>int ERL_REF_CREATION(t)</c></tag> + <item>The creation number in ref <c>t</c>.</item> + <tag><c>int ERL_TUPLE_SIZE(t)</c></tag> + <item>The number of elements in tuple <c>t</c>.</item> + <tag><c>ETERM *ERL_CONS_HEAD(t)</c></tag> + <item>The head element of list <c>t</c>.</item> + <tag><c>ETERM *ERL_CONS_TAIL(t)</c></tag> + <item>A list representing the tail elements of list + <c>t</c>.</item> </taglist> </description> + <funcs> <func> <name><ret>ETERM *</ret><nametext>erl_cons(head, tail)</nametext></name> - <fsummary>Prepends a term to the head of a list.</fsummary> + <fsummary>Prepend a term to the head of a list.</fsummary> <type> <v>ETERM *head;</v> <v>ETERM *tail;</v> </type> <desc> - <p>This function concatenates two Erlang terms, prepending - <c><![CDATA[head]]></c> onto <c><![CDATA[tail]]></c> and thereby creating a <c><![CDATA[cons]]></c> cell. - To make a proper list, <c><![CDATA[tail]]></c> should always be a - list or an empty list. Note that NULL is not a valid list.</p> - <p><c><![CDATA[head]]></c> is the new term to be added.</p> - <p><c><![CDATA[tail]]></c> is the existing list to which <c><![CDATA[head]]></c> will - be concatenated.</p> + <p>Concatenates two Erlang terms, prepending <c>head</c> + onto <c>tail</c> and thereby creating a + <c>cons</c> cell. + To make a proper list, <c>tail</c> is always to be a list + or an empty list. Notice that <c>NULL</c> is not a valid list.</p> + <list type="bulleted"> + <item><c>head</c> is the new term to be added.</item> + <item><c>tail</c> is the existing list to which + <c>head</c> is concatenated.</item> + </list> <p>The function returns a new list.</p> - <p><c><![CDATA[ERL_CONS_HEAD(list)]]></c> and <c><![CDATA[ERL_CONS_TAIL(list)]]></c> + <p><c>ERL_CONS_HEAD(list)</c> and + <c>ERL_CONS_TAIL(list)</c> can be used to retrieve the head and tail components - from the list. <c><![CDATA[erl_hd(list)]]></c> and <c><![CDATA[erl_tl(list)]]></c> will do + from the list. <c>erl_hd(list)</c> and + <c>erl_tl(list)</c> do the same thing, but check that the argument really is a list.</p> - <p>For example:</p> + <p><em>Example:</em></p> <code type="none"><![CDATA[ ETERM *list,*anAtom,*anInt; anAtom = erl_mk_atom("madonna"); @@ -165,79 +179,102 @@ erl_free_compound(list); ]]></code> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_copy_term(term)</nametext></name> - <fsummary>Creates a copy of an Erlang term</fsummary> + <fsummary>Create a copy of an Erlang term.</fsummary> <type> <v>ETERM *term;</v> </type> <desc> - <p>This function creates and returns a copy of the Erlang term - <c><![CDATA[term]]></c>.</p> + <p>Creates and returns a copy of the Erlang term + <c>term</c>.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_element(position, tuple)</nametext></name> - <fsummary>Extracts an element from an Erlang tuple</fsummary> + <fsummary>Extract an element from an Erlang tuple.</fsummary> <type> <v>int position;</v> <v>ETERM *tuple;</v> </type> <desc> - <p>This function extracts a specified element from an Erlang - tuple. </p> - <p><c><![CDATA[position]]></c> specifies which element to retrieve from - <c><![CDATA[tuple]]></c>. The elements are numbered starting from 1.</p> - <p><c><![CDATA[tuple]]></c> is an Erlang term containing at least - <c><![CDATA[position]]></c> elements.</p> - <p>The function returns a new Erlang term corresponding to the - requested element, or NULL if <c><![CDATA[position]]></c> was greater than - the arity of <c><![CDATA[tuple]]></c>.</p> + <p>Extracts a specified element from an Erlang tuple.</p> + <list type="bulleted"> + <item><c>position</c> specifies which element to retrieve + from <c>tuple</c>. The elements are numbered starting + from 1.</item> + <item><c>tuple</c> is an Erlang term containing at least + <c>position</c> elements.</item> + </list> + <p>Returns a new Erlang term corresponding to the requested element, or + <c>NULL</c> if <c>position</c> was greater + than the arity of <c>tuple</c>.</p> + </desc> + </func> + + <func> + <name><ret>ETERM *</ret><nametext>erl_hd(list)</nametext></name> + <fsummary>Extract the first element from a list.</fsummary> + <type> + <v>ETERM *list;</v> + </type> + <desc> + <p>Extracts the first element from a list.</p> + <p><c>list</c> is an Erlang term containing a list.</p> + <p>Returns an Erlang term corresponding to the head + head element in the list, or a <c>NULL</c> pointer if + <c>list</c> was not a list.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_init(NULL, 0)</nametext></name> - <fsummary>Initialization routine</fsummary> + <fsummary>Initialization routine.</fsummary> <type> <v>void *NULL;</v> <v>int 0;</v> </type> <desc> - <marker id="erl_init"></marker> - <p>This function must be called before any of the others in - the <c><![CDATA[erl_interface]]></c> library in order to initialize the - library functions. The arguments must be specified as - <c><![CDATA[erl_init(NULL,0)]]></c>.</p> + <p>This function must be called before any of the others in the + <c>Erl_Interface</c> library to initialize the + library functions. The arguments must be specified as + <c>erl_init(NULL,0)</c>.</p> </desc> </func> + <func> - <name><ret>ETERM *</ret><nametext>erl_hd(list)</nametext></name> - <fsummary>Extracts the first element from a list</fsummary> + <name><ret>int</ret><nametext>erl_iolist_length(list)</nametext></name> + <fsummary>Return the length of an I/O list.</fsummary> <type> <v>ETERM *list;</v> </type> <desc> - <p>Extracts the first element from a list.</p> - <p><c><![CDATA[list]]></c> is an Erlang term containing a list.</p> - <p>The function returns an Erlang term corresponding to the - head element in the list, or a NULL pointer if <c><![CDATA[list]]></c> was - not a list.</p> + <p>Returns the length of an I/O list.</p> + <p><c>list</c> is an Erlang term containing an I/O list.</p> + <p>Returns the length of <c>list</c>, or + <c>-1</c> if <c>list</c> is not an I/O list.</p> + <p>For the definition of an I/O list, see + <seealso marker="#erl_iolist_to_binary"> + <c>erl_iolist_to_binary</c></seealso>.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_iolist_to_binary(term)</nametext></name> - <fsummary>Converts an IO list to a binary</fsummary> + <fsummary>Convert an I/O list to a binary.</fsummary> <type> <v>ETERM *list;</v> </type> <desc> - <p>This function converts an IO list to a binary term.</p> - <p><c><![CDATA[list]]></c> is an Erlang term containing a list.</p> - <p>This function an Erlang binary term, or NULL if <c><![CDATA[list]]></c> - was not an IO list. </p> - <p>Informally, an IO list is a deep list of characters and - binaries which can be sent to an Erlang port. In BNF, an IO - list is formally defined as follows: </p> + <p>Converts an I/O list to a binary term.</p> + <p><c>list</c> is an Erlang term containing a list.</p> + <p>Returns an Erlang binary term, or <c>NULL</c> if + <c>list</c> was not an I/O list.</p> + <p>Informally, an I/O list is a deep list of characters and + binaries that can be sent to an Erlang port. In BNF, an I/O + list is formally defined as follows:</p> <code type="none"><![CDATA[ iolist ::= [] | Binary @@ -250,158 +287,164 @@ iohead ::= Binary ]]></code> </desc> </func> + <func> <name><ret>char *</ret><nametext>erl_iolist_to_string(list)</nametext></name> - <fsummary>Converts an IO list to a zero terminated string</fsummary> + <fsummary>Convert an I/O list to a <c>NULL</c>-terminated string.</fsummary> <type> <v>ETERM *list;</v> </type> <desc> - <p>This function converts an IO list to a '\0' terminated C - string. </p> - <p><c><![CDATA[list]]></c> is an Erlang term containing an IO list. The IO - list must not contain the integer 0, since C strings may not + <p>Converts an I/O list to a <c>NULL</c>-terminated C string.</p> + <p><c>list</c> is an Erlang term containing an I/O list. + The I/O list must not contain the integer 0, as C strings may not contain this value except as a terminating marker.</p> - <p>This function returns a pointer to a dynamically allocated - buffer containing a string. If <c><![CDATA[list]]></c> is not an IO list, - or if <c><![CDATA[list]]></c> contains the integer 0, NULL is returned. It - is the caller's responsibility free the allocated buffer - with <c><![CDATA[erl_free()]]></c>. </p> - <p>Refer to <c><![CDATA[erl_iolist_to_binary()]]></c> for the definition of an - IO list. </p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>erl_iolist_length(list)</nametext></name> - <fsummary>Return the length of an IO list</fsummary> - <type> - <v>ETERM *list;</v> - </type> - <desc> - <p>Returns the length of an IO list. - </p> - <p><c><![CDATA[list]]></c> is an Erlang term containing an IO list. </p> - <p>The function returns the length of <c><![CDATA[list]]></c>, or -1 if - <c><![CDATA[list]]></c> is not an IO list.</p> - <p>Refer to <c><![CDATA[erl_iolist_to_binary()]]></c> for the definition of - an IO list. </p> + <p>Returns a pointer to a dynamically allocated + buffer containing a string. If <c>list</c> is not an I/O + list, or if <c>list</c> contains the integer 0, + <c>NULL</c> is returned. It + is the caller's responsibility to free the allocated buffer + with <c>erl_free()</c>.</p> + <p>For the definition of an I/O list, see + <seealso marker="#erl_iolist_to_binary"> + <c>erl_iolist_to_binary</c></seealso>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_length(list)</nametext></name> - <fsummary>Determines the length of a list</fsummary> + <fsummary>Determine the length of a list.</fsummary> <type> <v>ETERM *list;</v> </type> <desc> <p>Determines the length of a proper list.</p> - <p><c><![CDATA[list]]></c> is an Erlang term containing proper list. In a - proper list, all tails except the last point to another list + <p><c>list</c> is an Erlang term containing a proper list. + In a proper list, all tails except the last point to another list cell, and the last tail points to an empty list.</p> - <p>Returns -1 if <c><![CDATA[list]]></c> is not a proper list.</p> + <p>Returns <c>-1</c> if <c>list</c> is not a proper + list.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_atom(string)</nametext></name> - <fsummary>Creates an atom</fsummary> + <fsummary>Create an atom.</fsummary> <type> <v>const char *string;</v> </type> <desc> <p>Creates an atom.</p> - <p><c><![CDATA[string]]></c> is the sequence of characters that will be + <p><c>string</c> is the sequence of characters that will be used to create the atom.</p> - <p>Returns an Erlang term containing an atom. Note that it is - the callers responsibility to make sure that <c><![CDATA[string]]></c> + <p>Returns an Erlang term containing an atom. Notice that it is + the caller's responsibility to ensure that <c>string</c> contains a valid name for an atom.</p> - <p><c><![CDATA[ERL_ATOM_PTR(atom)]]></c> and <c><![CDATA[ERL_ATOM_PTR_UTF8(atom)]]></c> - can be used to retrieve the atom name (as a null terminated string). <c><![CDATA[ERL_ATOM_SIZE(atom)]]></c> - and <c><![CDATA[ERL_ATOM_SIZE_UTF8(atom)]]></c> returns the length of the atom name.</p> - <note><p>Note that the UTF8 variants were introduced in Erlang/OTP releases R16 - and the string returned by <c>ERL_ATOM_PTR(atom)</c> was not null terminated on older releases.</p> + <p><c>ERL_ATOM_PTR(atom)</c> and + <c>ERL_ATOM_PTR_UTF8(atom)</c> + can be used to retrieve the atom name (as a <c>NULL</c>-terminated string). + <c>ERL_ATOM_SIZE(atom)</c> + and <c>ERL_ATOM_SIZE_UTF8(atom)</c> return the length + of the atom name.</p> + <note> + <p>The UTF-8 variants were introduced in Erlang/OTP R16 and the + string returned by <c>ERL_ATOM_PTR(atom)</c> was not + <c>NULL</c>-terminated on older releases.</p> </note> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_binary(bptr, size)</nametext></name> - <fsummary>Creates a binary object</fsummary> + <fsummary>Create a binary object.</fsummary> <type> <v>char *bptr;</v> <v>int size;</v> </type> <desc> - <p>This function produces an Erlang binary object from a + <p>Produces an Erlang binary object from a buffer containing a sequence of bytes.</p> - <p><c><![CDATA[bptr]]></c> is a pointer to a buffer containing data to be converted.</p> - <p><c><![CDATA[size]]></c> indicates the length of <c><![CDATA[bptr]]></c>.</p> - <p>The function returns an Erlang binary object.</p> - <p><c><![CDATA[ERL_BIN_PTR(bin)]]></c> retrieves a pointer to - the binary data. <c><![CDATA[ERL_BIN_SIZE(bin)]]></c> retrieves the - size. </p> + <list type="bulleted"> + <item><c>bptr</c> is a pointer to a buffer containing + data to be converted.</item> + <item><c>size</c> indicates the length of + <c>bptr</c>.</item> + </list> + <p>Returns an Erlang binary object.</p> + <p><c>ERL_BIN_PTR(bin)</c> retrieves a pointer to + the binary data. <c>ERL_BIN_SIZE(bin)</c> retrieves the + size.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_empty_list()</nametext></name> - <fsummary>Creates an empty Erlang list</fsummary> + <fsummary>Create an empty Erlang list.</fsummary> <desc> - <p>This function creates and returns an empty Erlang list. - Note that NULL is not used to represent an empty list; + <p>Creates and returns an empty Erlang list. + Notice that <c>NULL</c> is not used to represent an empty list; Use this function instead.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_estring(string, len)</nametext></name> - <fsummary>Creates an Erlang string</fsummary> + <fsummary>Create an Erlang string.</fsummary> <type> <v>char *string;</v> <v>int len;</v> </type> <desc> - <p>This function creates a list from a sequence of bytes.</p> - <p><c><![CDATA[string]]></c> is a buffer containing a sequence of - bytes. The buffer does not need to be zero-terminated.</p> - <p><c><![CDATA[len]]></c> is the length of <c><![CDATA[string]]></c>.</p> - <p>The function returns an Erlang list object corresponding to - the character sequence in <c><![CDATA[string]]></c>.</p> + <p>Creates a list from a sequence of bytes.</p> + <list type="bulleted"> + <item><c>string</c> is a buffer containing a sequence of + bytes. The buffer does not need to be <c>NULL</c>-terminated.</item> + <item><c>len</c> is the length of + <c>string</c>.</item> + </list> + <p>Returns an Erlang list object corresponding to + the character sequence in <c>string</c>.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_float(f)</nametext></name> - <fsummary>Creates an Erlang float</fsummary> + <fsummary>Create an Erlang float.</fsummary> <type> <v>double f;</v> </type> <desc> <p>Creates an Erlang float.</p> - <p><c><![CDATA[f]]></c> is a value to be converted to an Erlang float.</p> - <p></p> - <p>The function returns an Erlang float object with the value - specified in <c><![CDATA[f]]></c> or <c><![CDATA[NULL]]></c> if - <c><![CDATA[f]]></c> is not finite. - </p> - <p><c><![CDATA[ERL_FLOAT_VALUE(t)]]></c> can be used to retrieve the - value from an Erlang float.</p> + <p><c>f</c> is a value to be converted to an Erlang + float.</p> + <p>Returns an Erlang float object with the value + specified in <c>f</c> or <c>NULL</c> if + <c>f</c> is not finite.</p> + <p><c>ERL_FLOAT_VALUE(t)</c> can be used to retrieve the + value from an Erlang float.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_int(n)</nametext></name> - <fsummary>Creates an Erlang integer</fsummary> + <fsummary>Create an Erlang integer.</fsummary> <type> <v>int n;</v> </type> <desc> <p>Creates an Erlang integer.</p> - <p><c><![CDATA[n]]></c> is a value to be converted to an Erlang integer.</p> - <p></p> - <p>The function returns an Erlang integer object with the - value specified in <c><![CDATA[n]]></c>.</p> - <p><c><![CDATA[ERL_INT_VALUE(t)]]></c> can be used to retrieve the value + <p><c>n</c> is a value to be converted to an Erlang + integer.</p> + <p>Returns an Erlang integer object with the + value specified in <c>n</c>.</p> + <p><c>ERL_INT_VALUE(t)</c> can be used to retrieve the value from an Erlang integer.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_list(array, arrsize)</nametext></name> - <fsummary>Creates a list from an array</fsummary> + <fsummary>Create a list from an array.</fsummary> <type> <v>ETERM **array;</v> <v>int arrsize;</v> @@ -409,280 +452,316 @@ iohead ::= Binary <desc> <p>Creates an Erlang list from an array of Erlang terms, such that each element in the list corresponds to one element in - the array. </p> - <p><c><![CDATA[array]]></c> is an array of Erlang terms.</p> - <p><c><![CDATA[arrsize]]></c> is the number of elements in <c><![CDATA[array]]></c>.</p> + the array.</p> + <list type="bulleted"> + <item><c>array</c> is an array of Erlang terms.</item> + <item><c>arrsize</c> is the number of elements in + <c>array</c>.</item> + </list> <p>The function creates an Erlang list object, whose length - <c><![CDATA[arrsize]]></c> and whose elements are taken from the terms in - <c><![CDATA[array]]></c>.</p> + <c>arrsize</c> and whose elements are taken from the + terms in <c>array</c>.</p> </desc> </func> + <func> - <name><ret>ETERM *</ret><nametext>erl_mk_pid(node, number, serial, creation)</nametext></name> - <fsummary>Creates a process identifier</fsummary> + <name><ret>ETERM *</ret><nametext>erl_mk_long_ref(node, n1, n2, n3, creation)</nametext></name> + <fsummary>Create an Erlang reference.</fsummary> <type> <v>const char *node;</v> - <v>unsigned int number;</v> - <v>unsigned int serial;</v> + <v>unsigned int n1, n2, n3;</v> <v>unsigned int creation;</v> </type> <desc> - <p>This function creates an Erlang process identifier. The - resulting pid can be used by Erlang processes wishing to - communicate with the C node.</p> - <p><c><![CDATA[node]]></c> is the name of the C node.</p> - <p><c><![CDATA[number]]></c>, <c><![CDATA[serial]]></c> and <c><![CDATA[creation]]></c> are - arbitrary numbers. Note though, that these are limited in - precision, so only the low 15, 3 and 2 bits of these numbers - are actually used.</p> - <p>The function returns an Erlang pid object.</p> - <p><c><![CDATA[ERL_PID_NODE(pid)]]></c>, <c><![CDATA[ERL_PID_NUMBER(pid)]]></c>, - <c><![CDATA[ERL_PID_SERIAL(pid)]]></c> and <c><![CDATA[ERL_PID_CREATION(pid)]]></c> - can be used to retrieve the four values used to create the pid.</p> + <p>Creates an Erlang reference, with 82 bits.</p> + <list type="bulleted"> + <item><c>node</c> is the name of the C-node.</item> + <item><c>n1</c>, <c>n2</c>, and + <c>n3</c> can be seen as one big number + <c>n1*2^64+n2*2^32+n3</c>, which is to be chosen + uniquely for each reference created for a given C-node.</item> + <item><c>creation</c> is an arbitrary number.</item> + </list> + <p>Notice that <c>n3</c> and <c>creation</c> + are limited in precision, so only the low 18 and 2 bits of these + numbers are used.</p> + <p>Returns an Erlang reference object.</p> + <p><c>ERL_REF_NODE(ref)</c>, + <c>ERL_REF_NUMBERS(ref)</c>, + <c>ERL_REF_LEN(ref)</c>, and + <c>ERL_REF_CREATION(ref)</c> can be used to retrieve the + values used to create the reference.</p> </desc> </func> + <func> - <name><ret>ETERM *</ret><nametext>erl_mk_port(node, number, creation)</nametext></name> - <fsummary>Creates a port identifier</fsummary> + <name><ret>ETERM *</ret><nametext>erl_mk_pid(node, number, serial, creation)</nametext></name> + <fsummary>Create a process identifier.</fsummary> <type> <v>const char *node;</v> <v>unsigned int number;</v> + <v>unsigned int serial;</v> <v>unsigned int creation;</v> </type> <desc> - <p>This function creates an Erlang port identifier. </p> - <p><c><![CDATA[node]]></c> is the name of the C node.</p> - <p><c><![CDATA[number]]></c> and <c><![CDATA[creation]]></c> are arbitrary numbers. - Note though, that these are limited in - precision, so only the low 18 and 2 bits of these numbers - are actually used.</p> - <p>The function returns an Erlang port object.</p> - <p><c><![CDATA[ERL_PORT_NODE(port)]]></c>, <c><![CDATA[ERL_PORT_NUMBER(port)]]></c> - and <c><![CDATA[ERL_PORT_CREATION]]></c> can be used to retrieve the three - values used to create the port. </p> + <p>Creates an Erlang process identifier (pid). The + resulting pid can be used by Erlang processes wishing to + communicate with the C-node.</p> + <list type="bulleted"> + <item><c>node</c> is the name of the C-node.</item> + <item><c>number</c>, <c>serial</c>, and + <c>creation</c> are + arbitrary numbers. Notice that these are limited in + precision, so only the low 15, 3, and 2 bits of these numbers + are used.</item> + </list> + <p>Returns an Erlang pid object.</p> + <p><c>ERL_PID_NODE(pid)</c>, + <c>ERL_PID_NUMBER(pid)</c>, + <c>ERL_PID_SERIAL(pid)</c>, and + <c>ERL_PID_CREATION(pid)</c> + can be used to retrieve the four values used to create the pid.</p> </desc> </func> + <func> - <name><ret>ETERM *</ret><nametext>erl_mk_ref(node, number, creation)</nametext></name> - <fsummary>Creates an old Erlang reference</fsummary> + <name><ret>ETERM *</ret><nametext>erl_mk_port(node, number, creation)</nametext></name> + <fsummary>Create a port identifier.</fsummary> <type> <v>const char *node;</v> <v>unsigned int number;</v> <v>unsigned int creation;</v> </type> <desc> - <p>This function creates an old Erlang reference, with - only 18 bits - use <c><![CDATA[erl_mk_long_ref]]></c> instead.</p> - <p><c><![CDATA[node]]></c> is the name of the C node.</p> - <p><c><![CDATA[number]]></c> should be chosen uniquely for each reference - created for a given C node.</p> - <p><c><![CDATA[creation]]></c> is an arbitrary number.</p> - <p>Note that <c><![CDATA[number]]></c> and <c><![CDATA[creation]]></c> are limited in - precision, so only the low 18 and 2 bits of these numbers - are actually used. - </p> - <p>The function returns an Erlang reference object.</p> - <p><c><![CDATA[ERL_REF_NODE(ref)]]></c>, <c><![CDATA[ERL_REF_NUMBER(ref)]]></c>, and - <c><![CDATA[ERL_REF_CREATION(ref)]]></c> to retrieve the three values used - to create the reference. </p> + <p>Creates an Erlang port identifier.</p> + <list type="bulleted"> + <item><c>node</c> is the name of the C-node.</item> + <item><c>number</c> and <c>creation</c> are + arbitrary numbers. Notice that these are limited in + precision, so only the low 18 and 2 bits of these numbers + are used.</item> + </list> + <p>Returns an Erlang port object.</p> + <p><c>ERL_PORT_NODE(port)</c>, + <c>ERL_PORT_NUMBER(port)</c>, + and <c>ERL_PORT_CREATION</c> can be used to retrieve the + three values used to create the port.</p> </desc> </func> + <func> - <name><ret>ETERM *</ret><nametext>erl_mk_long_ref(node, n1, n2, n3, creation)</nametext></name> - <fsummary>Creates an Erlang reference</fsummary> + <name><ret>ETERM *</ret><nametext>erl_mk_ref(node, number, creation)</nametext></name> + <fsummary>Create an old Erlang reference.</fsummary> <type> <v>const char *node;</v> - <v>unsigned int n1, n2, n3;</v> + <v>unsigned int number;</v> <v>unsigned int creation;</v> </type> <desc> - <p>This function creates an Erlang reference, with 82 bits.</p> - <p><c><![CDATA[node]]></c> is the name of the C node.</p> - <p><c><![CDATA[n1]]></c>, <c><![CDATA[n2]]></c> and <c><![CDATA[n3]]></c> can be seen as one big number - <c><![CDATA[n1*2^64+n2*2^32+n3]]></c> which should be chosen uniquely for - each reference - created for a given C node.</p> - <p><c><![CDATA[creation]]></c> is an arbitrary number.</p> - <p>Note that <c><![CDATA[n3]]></c> and <c><![CDATA[creation]]></c> are limited in - precision, so only the low 18 and 2 bits of these numbers - are actually used. - </p> - <p>The function returns an Erlang reference object.</p> - <p><c><![CDATA[ERL_REF_NODE(ref)]]></c>, <c><![CDATA[ERL_REF_NUMBERS(ref)]]></c>, - <c><![CDATA[ERL_REF_LEN(ref)]]></c> and - <c><![CDATA[ERL_REF_CREATION(ref)]]></c> to retrieve the values used - to create the reference. </p> + <p>Creates an old Erlang reference, with + only 18 bits - use <c>erl_mk_long_ref</c> instead.</p> + <list type="bulleted"> + <item><c>node</c> is the name of the C-node.</item> + <item><c>number</c> is to be chosen uniquely for each + reference created for a given C-node.</item> + <item><c>creation</c> is an arbitrary number.</item> + </list> + <p>Notice that <c>number</c> and <c>creation</c> + are limited in precision, so only the low 18 and 2 bits of these + numbers are used.</p> + <p>Returns an Erlang reference object.</p> + <p><c>ERL_REF_NODE(ref)</c>, + <c>ERL_REF_NUMBER(ref)</c>, and + <c>ERL_REF_CREATION(ref)</c> can be used to retrieve the + three values used to create the reference.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_string(string)</nametext></name> - <fsummary>Creates a string</fsummary> + <fsummary>Create a string.</fsummary> <type> <v>char *string;</v> </type> <desc> - <p>This function creates a list from a zero terminated string.</p> - <p><c><![CDATA[string]]></c> is the zero-terminated sequence of characters - (i.e. a C string) from which the list will be created.</p> - <p>The function returns an Erlang list.</p> + <p>Creates a list from a <c>NULL</c>-terminated string.</p> + <p><c>string</c> is a <c>NULL</c>-terminated sequence of + characters + (that is, a C string) from which the list will be created.</p> + <p>Returns an Erlang list.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_tuple(array, arrsize)</nametext></name> - <fsummary>Creates an Erlang tuple from an array</fsummary> + <fsummary>Create an Erlang tuple from an array.</fsummary> <type> <v>ETERM **array;</v> <v>int arrsize;</v> </type> <desc> <p>Creates an Erlang tuple from an array of Erlang terms.</p> - <p><c><![CDATA[array]]></c> is an array of Erlang terms.</p> - <p><c><![CDATA[arrsize]]></c> is the number of elements in <c><![CDATA[array]]></c>.</p> + <list type="bulleted"> + <item><c>array</c> is an array of Erlang terms.</item> + <item><c>arrsize</c> is the number of elements in + <c>array</c>.</item> + </list> <p>The function creates an Erlang tuple, whose arity is - <c><![CDATA[size]]></c> and whose elements are taken from the terms in - <c><![CDATA[array]]></c>.</p> - <p>To retrieve the size of a tuple, either use the - <c><![CDATA[erl_size]]></c> function (which checks the type of the checked - term and works for a binary as well as for a tuple), or the - <c><![CDATA[ERL_TUPLE_SIZE(tuple)]]></c> returns the arity of a tuple. - <c><![CDATA[erl_size()]]></c> will do the same thing, but it checks that - the argument really is a tuple. - <c><![CDATA[erl_element(index,tuple)]]></c> returns the element - corresponding to a given position in the tuple. </p> + <c>size</c> and whose elements are taken from the terms + in <c>array</c>.</p> + <p>To retrieve the size of a tuple, either use function + <c>erl_size</c> (which checks the type of the + checked term and works for a binary as well as for a tuple) or + <c>ERL_TUPLE_SIZE(tuple)</c> returns the arity of a tuple. + <c>erl_size()</c> does the same thing, but it checks + that the argument is a tuple. + <c>erl_element(index,tuple)</c> returns the element + corresponding to a given position in the tuple.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_uint(n)</nametext></name> - <fsummary>Creates an unsigned integer</fsummary> + <fsummary>Create an unsigned integer.</fsummary> <type> <v>unsigned int n;</v> </type> <desc> <p>Creates an Erlang unsigned integer.</p> - <p><c><![CDATA[n]]></c> is a value to be converted to an Erlang + <p><c>n</c> is a value to be converted to an Erlang unsigned integer.</p> - <p></p> - <p>The function returns an Erlang unsigned integer object with - the value specified in <c><![CDATA[n]]></c>.</p> - <p><c><![CDATA[ERL_INT_UVALUE(t)]]></c> can be used to retrieve the + <p>Returns an Erlang unsigned integer object with + the value specified in <c>n</c>.</p> + <p><c>ERL_INT_UVALUE(t)</c> can be used to retrieve the value from an Erlang unsigned integer.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_mk_var(name)</nametext></name> - <fsummary>Creates an Erlang variable</fsummary> + <fsummary>Create an Erlang variable.</fsummary> <type> <v>char *name;</v> </type> <desc> - <p>This function creates an unbound Erlang variable. The - variable can later be bound through pattern matching or assignment.</p> - <p><c><![CDATA[name]]></c> specifies a name for the variable.</p> - <p>The function returns an Erlang variable object with the - name <c><![CDATA[name]]></c>. </p> + <p>Creates an unbound Erlang variable. The variable can later be bound + through pattern matching or assignment.</p> + <p><c>name</c> specifies a name for the variable.</p> + <p>Returns an Erlang variable object with the + name <c>name</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_print_term(stream, term)</nametext></name> - <fsummary>Prints an Erlang term</fsummary> + <fsummary>Print an Erlang term.</fsummary> <type> <v>FILE *stream;</v> <v>ETERM *term;</v> </type> <desc> - <p>This function prints the specified Erlang term to the given - output stream.</p> - <p><c><![CDATA[stream]]></c> indicates where the function should send its - output.</p> - <p><c><![CDATA[term]]></c> is the Erlang term to print.</p> - <p>The function returns the number of characters written, or a - negative value if there was an error.</p> + <p>Prints the specified Erlang term to the specified output stream.</p> + <list type="bulleted"> + <item><c>stream</c> indicates where the function is to + send its output.</item> + <item><c>term</c> is the Erlang term to print.</item> + </list> + <p>Returns the number of characters written on success, otherwise a + negative value.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_set_compat_rel(release_number)</nametext></name> - <fsummary>Set the erl_interface library in compatibility mode</fsummary> + <fsummary>Set the Erl_Interface library in compatibility mode.</fsummary> <type> <v>unsigned release_number;</v> </type> <desc> - <marker id="erl_set_compat_rel"></marker> - <p>By default, the <c><![CDATA[erl_interface]]></c> library is only guaranteed - to be compatible with other Erlang/OTP components from the same - release as the <c><![CDATA[erl_interface]]></c> library itself. For example, - <c><![CDATA[erl_interface]]></c> from the OTP R10 release is not compatible - with an Erlang emulator from the OTP R9 release by default.</p> - <p>A call to <c><![CDATA[erl_set_compat_rel(release_number)]]></c> sets the - <c><![CDATA[erl_interface]]></c> library in compatibility mode of release - <c><![CDATA[release_number]]></c>. Valid range of <c><![CDATA[release_number]]></c> + <p>By default, the <c>Erl_Interface</c> library is only + guaranteed to be compatible with other Erlang/OTP components from the + same release as the <c>Erl_Interface</c> library itself. + For example, <c>Erl_Interface</c> from Erlang/OTP R10 + is not compatible + with an Erlang emulator from Erlang/OTP R9 by default.</p> + <p>A call to <c>erl_set_compat_rel(release_number)</c> sets + the <c>Erl_Interface</c> library in compatibility mode of + release <c>release_number</c>. Valid range of + <c>release_number</c> is [7, current release]. This makes it possible to communicate with Erlang/OTP components from earlier releases.</p> <note> <p>If this function is called, it may only be called once - directly after the call to the - <seealso marker="#erl_init">erl_init()</seealso> function.</p> + directly after the call to function + <seealso marker="#erl_init">erl_init()</seealso>.</p> </note> <warning> <p>You may run into trouble if this feature is used - carelessly. Always make sure that all communicating + carelessly. Always ensure that all communicating components are either from the same Erlang/OTP release, or from release X and release Y where all components from release Y are in compatibility mode of release X.</p> </warning> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_size(term)</nametext></name> - <fsummary>Return the arity of a tuple or binary</fsummary> + <fsummary>Return the arity of a tuple or binary.</fsummary> <type> <v>ETERM *term;</v> </type> <desc> - <p>Returns the arity of an Erlang tuple, or the - number of bytes in an Erlang binary object. </p> - <p><c><![CDATA[term]]></c> is an Erlang tuple or an Erlang binary object.</p> - <p>The function returns the size of <c><![CDATA[term]]></c> as described - above, or -1 if <c><![CDATA[term]]></c> is not one of the two supported - types. </p> + <p>Returns either the arity of an Erlang tuple or the + number of bytes in an Erlang binary object.</p> + <p><c>term</c> is an Erlang tuple or an Erlang binary + object.</p> + <p>Returns the size of <c>term</c> as described + above, or <c>-1</c> if <c>term</c> is not one of the two + supported types.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_tl(list)</nametext></name> - <fsummary>Extracts the tail from a list</fsummary> + <fsummary>Extract the tail from a list.</fsummary> <type> <v>ETERM *list;</v> </type> <desc> <p>Extracts the tail from a list.</p> - <p><c><![CDATA[list]]></c> is an Erlang term containing a list.</p> - <p>The function returns an Erlang list corresponding to the - original list minus the first element, or NULL pointer if - <c><![CDATA[list]]></c> was not a list.</p> + <p><c>list</c> is an Erlang term containing a list.</p> + <p>Returns an Erlang list corresponding to the + original list minus the first element, or <c>NULL</c> pointer if + <c>list</c> was not a list.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_var_content(term, name)</nametext></name> - <fsummary>Extracts the content of a variable</fsummary> + <fsummary>Extract the content of a variable.</fsummary> <type> <v>ETERM *term;</v> <v>char *name;</v> </type> <desc> - <p>This function returns the contents of the specified - variable in an Erlang term. - </p> - <p><c><![CDATA[term]]></c> is an Erlang term. In order for this function - to succeed, <c><![CDATA[term]]></c> must be an Erlang variable with the - specified name, or it must be an Erlang list or tuple - containing a variable with the specified name. Other Erlang - types cannot contain variables.</p> - <p><c><![CDATA[name]]></c> is the name of an Erlang variable.</p> + <p>Returns the contents of the specified variable in an Erlang term.</p> + <list type="bulleted"> + <item><c>term</c> is an Erlang term. In order for this + function to succeed, + <c>term</c> must either be an Erlang variable with + the specified name, or it must be an Erlang list or tuple + containing a variable with the specified name. Other Erlang + types cannot contain variables.</item> + <item><c>name</c> is the name of an Erlang variable. + </item> + </list> <p>Returns the Erlang object corresponding to the value of - <c><![CDATA[name]]></c> in <c><![CDATA[term]]></c>. If no variable with the name - <c><![CDATA[name]]></c> was found in <c><![CDATA[term]]></c>, or if <c><![CDATA[term]]></c> is - not a valid Erlang term, NULL is returned.</p> + <c>name</c> in <c>term</c>. If no variable + with the name <c>name</c> is found in + <c>term</c>, or if <c>term</c> is + not a valid Erlang term, <c>NULL</c> is returned.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/erl_format.xml b/lib/erl_interface/doc/src/erl_format.xml index 6e3ac4f0c9..5b8b7b5e78 100644 --- a/lib/erl_interface/doc/src/erl_format.xml +++ b/lib/erl_interface/doc/src/erl_format.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_format</title> @@ -28,51 +28,42 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>961016</date> + <date>1996-10-16</date> <rev>A</rev> - <file>erl_format.sgml</file> + <file>erl_format.xml</file> </header> <lib>erl_format</lib> - <libsummary>Create and Match Erlang Terms</libsummary> + <libsummary>Create and match Erlang terms.</libsummary> <description> - <p>This module contains two routines - one general function for + <p>This module contains two routines: one general function for creating Erlang terms and one for pattern matching Erlang terms.</p> </description> + <funcs> <func> - <name><ret>ETERM *</ret><nametext>erl_format(FormatStr, ... )</nametext></name> - <fsummary>Creates an Erlang term</fsummary> + <name><ret>ETERM *</ret><nametext>erl_format(FormatStr, ...)</nametext></name> + <fsummary>Create an Erlang term.</fsummary> <type> <v>char *FormatStr;</v> </type> <desc> - <p>This is a general function for creating Erlang terms using + <p>A general function for creating Erlang terms using a format specifier and a corresponding set of arguments, much - in the way <c><![CDATA[printf()]]></c> works.</p> - <p><c><![CDATA[FormatStr]]></c> is a format specification string. The set - of valid format specifiers is as follows:</p> + in the way <c>printf()</c> works.</p> + <p><c>FormatStr</c> is a format specification string. + The valid format specifiers are as follows:</p> <list type="bulleted"> - <item> - <p>~i - Integer</p> - </item> - <item> - <p>~f - Floating point</p> - </item> - <item> - <p>~a - Atom</p> - </item> - <item> - <p>~s - String</p> - </item> - <item> - <p>~w - Arbitrary Erlang term</p> - </item> + <item><c>~i</c> - Integer</item> + <item><c>~f</c> - Floating point</item> + <item><c>~a</c> - Atom</item> + <item><c>~s</c> - String</item> + <item><c>~w</c> - Arbitrary Erlang term</item> </list> - <p>For each format specifier that appears in <c><![CDATA[FormatStr]]></c>, + <p>For each format specifier included in <c>FormatStr</c>, there must be a corresponding argument following - <c><![CDATA[FormatStr]]></c>. An Erlang term is built according to the - <c><![CDATA[FormatStr]]></c> with values and Erlang terms substituted from - the corresponding arguments and according to the individual + <c>FormatStr</c>. An Erlang term is built according to + <c>FormatStr</c> with values and Erlang terms substituted + from the corresponding arguments, and according to the individual format specifiers. For example:</p> <code type="none"><![CDATA[ erl_format("[{name,~a},{age,~i},{data,~w}]", @@ -80,34 +71,40 @@ erl_format("[{name,~a},{age,~i},{data,~w}]", 21, erl_format("[{adr,~s,~i}]","E-street",42)); ]]></code> - <p>This will create an <c><![CDATA[(ETERM *)]]></c> structure corresponding - to the Erlang term: - <c><![CDATA[[{name,madonna},{age,21},{data,[{adr,"E-street",42}]}]]]></c></p> - <p>The function returns an Erlang term, or NULL if - <c><![CDATA[FormatStr]]></c> does not describe a valid Erlang term.</p> + <p>This creates an <c>(ETERM *)</c> structure corresponding + to the Erlang term + <c>[{name,madonna},{age,21},{data,[{adr,"E-street",42}]}]</c></p> + <p>The function returns an Erlang term, or <c>NULL</c> if + <c>FormatStr</c> does not describe a valid Erlang + term.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_match(Pattern, Term)</nametext></name> - <fsummary>Performs pattern matching</fsummary> + <fsummary>Perform pattern matching.</fsummary> <type> <v>ETERM *Pattern,*Term;</v> </type> <desc> <p>This function is used to perform pattern matching similar - to that done in Erlang. Refer to an Erlang manual for matching - rules and more examples.</p> - <p><c><![CDATA[Pattern]]></c> is an Erlang term, possibly containing unbound - variables. </p> - <p><c><![CDATA[Term]]></c> is an Erlang term that we wish to match against - <c><![CDATA[Pattern]]></c>.</p> - <p><c><![CDATA[Term]]></c> and <c><![CDATA[Pattern]]></c> are compared, and any - unbound variables in <c><![CDATA[Pattern]]></c> are bound to corresponding - values in <c><![CDATA[Term]]></c>. </p> - <p>If <c><![CDATA[Term]]></c> and <c><![CDATA[Pattern]]></c> can be matched, the - function returns a non-zero value and binds any unbound - variables in <c><![CDATA[Pattern]]></c>. If <c><![CDATA[Term]]></c> <c><![CDATA[Pattern]]></c> do - not match, the function returns 0. For example:</p> + to that done in Erlang. For matching rules and more examples, see + section <seealso marker="doc/reference_manual:patterns"> + Pattern Matching</seealso> in the Erlang Reference Manual.</p> + <list type="bulleted"> + <item><c>Pattern</c> is an Erlang term, possibly + containing unbound variables.</item> + <item><c>Term</c> is an Erlang term that we wish to match + against <c>Pattern</c>.</item> + </list> + <p><c>Term</c> and <c>Pattern</c> are compared + and any unbound variables in <c>Pattern</c> are bound to + corresponding values in <c>Term</c>.</p> + <p>If <c>Term</c> and <c>Pattern</c> can be + matched, the function returns a non-zero value and binds any unbound + variables in <c>Pattern</c>. If <c>Term</c> + and <c>Pattern</c> do + not match, <c>0</c> is returned. For example:</p> <code type="none"><![CDATA[ ETERM *term, *pattern, *pattern2; term1 = erl_format("{14,21}"); @@ -132,11 +129,10 @@ if (erl_match(pattern2, term2)) { ... } ]]></code> - <p><c><![CDATA[erl_var_content()]]></c> can be used to retrieve the + <p><c>erl_var_content()</c> can be used to retrieve the content of any variables bound as a result of a call to - <c><![CDATA[erl_match()]]></c>.</p> + <c>erl_match()</c>.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/erl_global.xml b/lib/erl_interface/doc/src/erl_global.xml index d6bfffc69d..2fa0045adf 100644 --- a/lib/erl_interface/doc/src/erl_global.xml +++ b/lib/erl_interface/doc/src/erl_global.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_global</title> @@ -28,115 +28,125 @@ <docno></docno> <approved>Gordon Beaton</approved> <checked>Gordon Beaton</checked> - <date>980703</date> + <date>1998-07-03</date> <rev>A</rev> - <file>erl_global.sgml</file> + <file>erl_global.xml</file> </header> <lib>erl_global</lib> - <libsummary>Access globally registered names</libsummary> + <libsummary>Access globally registered names.</libsummary> <description> <p>This module provides support for registering, looking - up and unregistering names in the Erlang Global module. For more - information, see the description of Global in the reference manual.</p> - <p>Note that the functions below perform an RPC using an open file - descriptor provided by the caller. This file descriptor must - not be used for other traffic during the global operation or the - function may receive unexpected data and fail.</p> + up, and unregistering names in the <c>global</c> module. + For more information, see + <seealso marker="kernel:global"><c>kernel:global</c></seealso>.</p> + + <p>Notice that the functions below perform an RPC using an open file + descriptor provided by the caller. This file descriptor must + not be used for other traffic during the global operation, as the + function can then receive unexpected data and fail.</p> </description> + <funcs> <func> <name><ret>char **</ret><nametext>erl_global_names(fd,count)</nametext></name> - <fsummary>Obtain list of Global names</fsummary> + <fsummary>Obtain list of global names.</fsummary> <type> <v>int fd;</v> <v>int *count;</v> </type> <desc> - <p>Retrieve a list of all known global names. - </p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection. - </p> - <p><c><![CDATA[count]]></c> is the address of an integer, or NULL. If - <c><![CDATA[count]]></c> is not NULL, it will be set by the function to - the number of names found. - </p> + <p>Retrieves a list of all known global names.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>count</c> is the address of an integer, or + <c>NULL</c>. If <c>count</c> is not <c>NULL</c>, it is + set by the function to the number of names found.</item> + </list> <p>On success, the function returns an array of strings, each - containing a single registered name, and sets <c><![CDATA[count]]></c> to + containing a single registered name, and sets + <c>count</c> to the number of names found. The array is terminated - by a single NULL pointer. On failure, the function returns - NULL and <c><![CDATA[count]]></c> is not modified. - </p> + by a single <c>NULL</c> pointer. On failure, the function returns + <c>NULL</c> and <c>count</c> is not modified.</p> <note> <p>It is the caller's responsibility to free the array afterwards. It has been allocated by the function with a - single call to <c><![CDATA[malloc()]]></c>, so a single <c><![CDATA[free()]]></c> is - all that is necessary.</p> + single call to <c>malloc()</c>, so a single + <c>free()</c> is all that is necessary.</p> </note> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_global_register(fd,name,pid)</nametext></name> - <fsummary>Register a name in Global</fsummary> + <fsummary>Register a name in global.</fsummary> <type> <v>int fd;</v> <v>const char *name;</v> <v>ETERM *pid;</v> </type> <desc> - <p>This function registers a name in Global. - </p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection. - </p> - <p><c><![CDATA[name]]></c> is the name to register in Global. - </p> - <p><c><![CDATA[pid]]></c> is the pid that should be associated with - <c><![CDATA[name]]></c>. This is the value that Global will return when - processes request the location of <c><![CDATA[name]]></c>. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Registers a name in <c>global</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>name</c> is the name to register in + <c>global</c>.</item> + <item><c>pid</c> is the pid that is to be associated with + <c>name</c>. This value is returned by <c>global</c> + when processes request the location of <c>name</c>. + </item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_global_unregister(fd,name)</nametext></name> - <fsummary>Unregister a name in Global</fsummary> + <fsummary>Unregister a name from global.</fsummary> <type> <v>int fd;</v> <v>const char *name;</v> </type> <desc> - <p>This function unregisters a name from Global. - </p> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection. - </p> - <p><c><![CDATA[name]]></c> is the name to unregister from Global. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Unregisters a name from <c>global</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>name</c> is the name to unregister from + <c>global</c>.</item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_global_whereis(fd,name,node)</nametext></name> - <fsummary>Look up a name in global</fsummary> + <fsummary>Look up a name in global.</fsummary> <type> <v>int fd;</v> <v>const char *name;</v> <v>char *node;</v> </type> <desc> - <p><c><![CDATA[fd]]></c> is an open descriptor to an Erlang connection. - </p> - <p><c><![CDATA[name]]></c> is the name that is to be looked up in Global. - </p> - <p>If <c><![CDATA[node]]></c> is not NULL, it is a pointer to a buffer - where the function can fill in the name of the node where - <c><![CDATA[name]]></c> is found. <c><![CDATA[node]]></c> can be passed directly to - <c><![CDATA[erl_connect()]]></c> if necessary. - </p> - <p>On success, the function returns an Erlang Pid containing the address - of the given name, and node will be initialized to - the nodename where <c><![CDATA[name]]></c> is found. On failure NULL will be - returned and <c><![CDATA[node]]></c> will not be modified.</p> + <p>Looks up a name in <c>global</c>.</p> + <list type="bulleted"> + <item><c>fd</c> is an open descriptor to an Erlang + connection.</item> + <item><c>name</c> is the name that is to be looked up in + <c>global</c>.</item> + </list> + <p>If <c>node</c> is not <c>NULL</c>, it is a pointer to a + buffer where the function can fill in the name of the node where + <c>name</c> is found. <c>node</c> can be + passed directly to <c>erl_connect()</c> if necessary.</p> + <p>On success, the function returns an Erlang pid containing the address + of the specified name, and the node is initialized to + the node name where <c>name</c> is found. On failure, + <c>NULL</c> is returned and <c>node</c> is not + modified.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/erl_interface.xml b/lib/erl_interface/doc/src/erl_interface.xml index a9d421bbeb..4e66655b39 100644 --- a/lib/erl_interface/doc/src/erl_interface.xml +++ b/lib/erl_interface/doc/src/erl_interface.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>The Erl_Interface Library</title> @@ -72,51 +72,51 @@ Eshell V4.7.4 (abort with ^G) 1> code:root_dir(). /usr/local/otp ]]></code> <p>To compile your code, make sure that your C compiler knows where - to find <c><![CDATA[erl_interface.h]]></c> by specifying an appropriate <c><![CDATA[-I]]></c> - argument on the command line, or by adding it to the <c><![CDATA[CFLAGS]]></c> - definition in your <c><![CDATA[Makefile]]></c>. The correct value for this path is - <c><![CDATA[$OTPROOT/lib/erl_interface]]></c><em>Vsn</em><c><![CDATA[/include]]></c>, where <c><![CDATA[$OTPROOT]]></c> is the path - reported by <c><![CDATA[code:root_dir/0]]></c> in the above example, and <em>Vsn</em> is + to find <c>erl_interface.h</c> by specifying an appropriate <c>-I</c> + argument on the command line, or by adding it to the <c>CFLAGS</c> + definition in your <c>Makefile</c>. The correct value for this path is + <c>$OTPROOT/lib/erl_interface</c><em>Vsn</em><c>/include</c>, where <c>$OTPROOT</c> is the path + reported by <c>code:root_dir/0</c> in the above example, and <em>Vsn</em> is the version of the Erl_interface application, for example - <c><![CDATA[erl_interface-3.2.3]]></c></p> + <c>erl_interface-3.2.3</c></p> <code type="none"><![CDATA[ $ cc -c -I/usr/local/otp/lib/erl_interface-3.2.3/include myprog.c ]]></code> <p>When linking, you will need to specify the path to - <c><![CDATA[liberl_interface.a]]></c> and <c><![CDATA[libei.a]]></c> with - <c><![CDATA[-L$OTPROOT/lib/erl_interface-3.2.3/lib]]></c>, and you will need to specify the - name of the libraries with <c><![CDATA[-lerl_interface -lei]]></c>. You can do - this on the command line or by adding the flags to the <c><![CDATA[LDFLAGS]]></c> - definition in your <c><![CDATA[Makefile]]></c>.</p> + <c>liberl_interface.a</c> and <c>libei.a</c> with + <c>-L$OTPROOT/lib/erl_interface-3.2.3/lib</c>, and you will need to specify the + name of the libraries with <c>-lerl_interface -lei</c>. You can do + this on the command line or by adding the flags to the <c>LDFLAGS</c> + definition in your <c>Makefile</c>.</p> <code type="none"><![CDATA[ $ ld -L/usr/local/otp/lib/erl_interface-3.2.3/ lib myprog.o -lerl_interface -lei -o myprog ]]></code> <p>Also, on some systems it may be necessary to link with some - additional libraries (e.g. <c><![CDATA[libnsl.a]]></c> and <c><![CDATA[libsocket.a]]></c> on - Solaris, or <c><![CDATA[wsock32.lib]]></c> on Windows) in order to use the + additional libraries (e.g. <c>libnsl.a</c> and <c>libsocket.a</c> on + Solaris, or <c>wsock32.lib</c> on Windows) in order to use the communication facilities of Erl_Interface.</p> <p>If you are using Erl_Interface functions in a threaded application based on POSIX threads or Solaris threads, then Erl_Interface needs access to some of the synchronization facilities in your threads package, and you will need to specify additional compiler flags in order to indicate which of the packages - you are using. Define <c><![CDATA[_REENTRANT]]></c> and either <c><![CDATA[STHREADS]]></c> or - <c><![CDATA[PTHREADS]]></c>. The default is to use POSIX threads if - <c><![CDATA[_REENTRANT]]></c> is specified.</p> + you are using. Define <c>_REENTRANT</c> and either <c>STHREADS</c> or + <c>PTHREADS</c>. The default is to use POSIX threads if + <c>_REENTRANT</c> is specified.</p> <p>Note that both single threaded and default versions of the Erl_interface and Ei libraries are provided. (The single threaded versions are named - <c><![CDATA[liberl_interface_st]]></c> and <c><![CDATA[libei_st]]></c>). Whether the default + <c>liberl_interface_st</c> and <c>libei_st</c>). Whether the default versions of the libraries have support for threads or not is determined by if the platform in question has support for POSIX or Solaris threads. To check this, - have a look in the <c><![CDATA[eidefs.mk]]></c> file in the erl_interface src directory.</p> + have a look in the <c>eidefs.mk</c> file in the erl_interface src directory.</p> </section> <section> <title>Initializing the erl_interface Library</title> <p>Before calling any of the other Erl_Interface functions, you - must call <c><![CDATA[erl_init()]]></c> exactly once to initialize the library. - <c><![CDATA[erl_init()]]></c> takes two arguments, however the arguments are no + must call <c>erl_init()</c> exactly once to initialize the library. + <c>erl_init()</c> takes two arguments, however the arguments are no longer used by Erl_Interface, and should therefore be specified - as <c><![CDATA[erl_init(NULL,0)]]></c>.</p> + as <c>erl_init(NULL,0)</c>.</p> </section> <section> @@ -129,7 +129,7 @@ $ ld -L/usr/local/otp/lib/erl_interface-3.2.3/ number of C functions which create and manipulate Erlang data structures. The library also contains an encode and a decode function. The example below shows how to create and encode an Erlang tuple - <c><![CDATA[{tobbe,3928}]]></c>:</p> + <c>{tobbe,3928}</c>:</p> <code type="none"><![CDATA[ ETERM *arr[2], *tuple; @@ -140,26 +140,26 @@ arr[0] = erl_mk_atom("tobbe"); arr[1] = erl_mk_integer(3928); tuple = erl_mk_tuple(arr, 2); i = erl_encode(tuple, buf); ]]></code> - <p>Alternatively, you can use <c><![CDATA[erl_send()]]></c> and - <c><![CDATA[erl_receive_msg]]></c>, which handle the encoding and decoding of + <p>Alternatively, you can use <c>erl_send()</c> and + <c>erl_receive_msg</c>, which handle the encoding and decoding of messages transparently.</p> <p>Refer to the Reference Manual for a complete description of the following modules:</p> <list type="bulleted"> - <item>the <c><![CDATA[erl_eterm]]></c> module for creating Erlang terms</item> - <item>the <c><![CDATA[erl_marshal]]></c> module for encoding and decoding routines.</item> + <item>the <c>erl_eterm</c> module for creating Erlang terms</item> + <item>the <c>erl_marshal</c> module for encoding and decoding routines.</item> </list> </section> <section> <title>Building Terms and Patterns</title> - <p>The previous example can be simplified by using - <c><![CDATA[erl_format()]]></c> to create an Erlang term.</p> + <p>The previous example can be simplified by using + <c>erl_format()</c> to create an Erlang term.</p> <code type="none"><![CDATA[ ETERM *ep; ep = erl_format("{~a,~i}", "tobbe", 3928); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_format]]></c> module, for a + <p>Refer to the Reference Manual, the <c>erl_format</c> module, for a full description of the different format directives. The following example is more complex:</p> <code type="none"><![CDATA[ @@ -171,10 +171,10 @@ ep = erl_format("[{name,~a},{age,~i},{data,~w}]", erl_format("[{adr,~s,~i}]", "E-street", 42)); erl_free_compound(ep); ]]></code> <p>As in previous examples, it is your responsibility to free the - memory allocated for Erlang terms. In this example, - <c><![CDATA[erl_free_compound()]]></c> ensures that the complete term pointed to - by <c><![CDATA[ep]]></c> is released. This is necessary, because the pointer from - the second call to <c><![CDATA[erl_format()]]></c> is lost. </p> + memory allocated for Erlang terms. In this example, + <c>erl_free_compound()</c> ensures that the complete term pointed to + by <c>ep</c> is released. This is necessary, because the pointer from + the second call to <c>erl_format()</c> is lost. </p> <p>The following example shows a slightly different solution:</p> <code type="none"><![CDATA[ @@ -186,7 +186,7 @@ ep = erl_format("[{name,~a},{age,~i},{data,~w}]", erl_free_term(ep); erl_free_term(ep2); ]]></code> <p>In this case, you free the two terms independently. The order in - which you free the terms <c><![CDATA[ep]]></c> and <c><![CDATA[ep2]]></c> is not important, + which you free the terms <c>ep</c> and <c>ep2</c> is not important, because the Erl_Interface library uses reference counting to determine when it is safe to actually remove objects. </p> <p>If you are not sure whether you have freed the terms properly, you @@ -204,14 +204,14 @@ printf("length of freelist: %ld\ /* really free the freelist */ erl_eterm_release(); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_malloc]]></c> module for more + <p>Refer to the Reference Manual, the <c>erl_malloc</c> module for more information.</p> </section> <section> <title>Pattern Matching</title> <p>An Erlang pattern is a term that may contain unbound variables or - <c><![CDATA["do not care"]]></c> symbols. Such a pattern can be matched against a + <c>"do not care"</c> symbols. Such a pattern can be matched against a term and, if the match is successful, any unbound variables in the pattern will be bound as a side effect. The content of a bound variable can then be retrieved.</p> @@ -219,13 +219,13 @@ erl_eterm_release(); ETERM *pattern; pattern = erl_format("{madonna,Age,_}"); ]]></code> - <p><c><![CDATA[erl_match()]]></c> is used to perform pattern matching. It takes a + <p><c>erl_match()</c> is used to perform pattern matching. It takes a pattern and a term and tries to match them. As a side effect any unbound variables in the pattern will be bound. In the following example, we create a pattern with a variable <em>Age</em> which appears at two positions in the tuple. The pattern match is performed as follows:</p> <list type="ordered"> - <item><c><![CDATA[erl_match()]]></c> will bind the contents of + <item><c>erl_match()</c> will bind the contents of <em>Age</em> to <em>21</em> the first time it reaches the variable</item> <item>the second occurrence of <em>Age</em> will cause a test for equality between the terms since <em>Age</em> is already bound to @@ -248,14 +248,14 @@ if (erl_match(pattern, term)) { } erl_free_term(pattern); erl_free_term(term); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_match()]]></c> function for + <p>Refer to the Reference Manual, the <c>erl_match()</c> function for more information.</p> </section> <section> <title>Connecting to a Distributed Erlang Node</title> <p>In order to connect to a distributed Erlang node you need to first - initialize the connection routine with <c><![CDATA[erl_connect_init()]]></c>, + initialize the connection routine with <c>erl_connect_init()</c>, which stores information such as the host name, node name, and IP address for later use:</p> <code type="none"><![CDATA[ @@ -263,9 +263,9 @@ int identification_number = 99; int creation=1; char *cookie="a secret cookie string"; /* An example */ erl_connect_init(identification_number, cookie, creation); ]]></code> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_connect]]></c> module for more information.</p> + <p>Refer to the Reference Manual, the <c>erl_connect</c> module for more information.</p> <p>After initialization, you set up the connection to the Erlang node. - Use <c><![CDATA[erl_connect()]]></c> to specify the Erlang node you want to + Use <c>erl_connect()</c> to specify the Erlang node you want to connect to. The following example sets up the connection and should result in a valid socket file descriptor:</p> <code type="none"><![CDATA[ @@ -273,45 +273,45 @@ int sockfd; char *nodename="[email protected]"; /* An example */ if ((sockfd = erl_connect(nodename)) < 0) erl_err_quit("ERROR: erl_connect failed"); ]]></code> - <p><c><![CDATA[erl_err_quit()]]></c> prints the specified string and terminates - the program. Refer to the Reference Manual, the <c><![CDATA[erl_error()]]></c> + <p><c>erl_err_quit()</c> prints the specified string and terminates + the program. Refer to the Reference Manual, the <c>erl_error()</c> function for more information.</p> </section> <section> <title>Using EPMD</title> - <p><c><![CDATA[Epmd]]></c> is the Erlang Port Mapper Daemon. Distributed Erlang nodes - register with <c><![CDATA[epmd]]></c> on the localhost to indicate to other nodes that - they exist and can accept connections. <c><![CDATA[Epmd]]></c> maintains a register of + <p><c>Epmd</c> is the Erlang Port Mapper Daemon. Distributed Erlang nodes + register with <c>epmd</c> on the localhost to indicate to other nodes that + they exist and can accept connections. <c>Epmd</c> maintains a register of node and port number information, and when a node wishes to connect to - another node, it first contacts <c><![CDATA[epmd]]></c> in order to find out the correct + another node, it first contacts <c>epmd</c> in order to find out the correct port number to connect to.</p> - <p>When you use <c><![CDATA[erl_connect()]]></c> to connect to an Erlang node, a - connection is first made to <c><![CDATA[epmd]]></c> and, if the node is known, a + <p>When you use <c>erl_connect()</c> to connect to an Erlang node, a + connection is first made to <c>epmd</c> and, if the node is known, a connection is then made to the Erlang node.</p> - <p>C nodes can also register themselves with <c><![CDATA[epmd]]></c> if they want other + <p>C nodes can also register themselves with <c>epmd</c> if they want other nodes in the system to be able to find and connect to them.</p> - <p>Before registering with <c><![CDATA[epmd]]></c>, you need to first create a listen socket + <p>Before registering with <c>epmd</c>, you need to first create a listen socket and bind it to a port. Then:</p> <code type="none"><![CDATA[ int pub; pub = erl_publish(port); ]]></code> - <p><c><![CDATA[pub]]></c> is a file descriptor now connected to <c><![CDATA[epmd]]></c>. <c><![CDATA[Epmd]]></c> + <p><c>pub</c> is a file descriptor now connected to <c>epmd</c>. <c>Epmd</c> monitors the other end of the connection, and if it detects that the connection has been closed, the node will be unregistered. So, if you explicitly close the descriptor or if your node fails, it will be - unregistered from <c><![CDATA[epmd]]></c>.</p> + unregistered from <c>epmd</c>.</p> <p>Be aware that on some systems (such as VxWorks), a failed node will not be detected by this mechanism since the operating system does not automatically close descriptors that were left open when the node - failed. If a node has failed in this way, <c><![CDATA[epmd]]></c> will prevent you from + failed. If a node has failed in this way, <c>epmd</c> will prevent you from registering a new node with the old name, since it thinks that the old name is still in use. In this case, you must unregister the name explicitly:</p> <code type="none"><![CDATA[ erl_unpublish(node); ]]></code> - <p>This will cause <c><![CDATA[epmd]]></c> to close the connection from the far end. Note + <p>This will cause <c>epmd</c> to close the connection from the far end. Note that if the name was in fact still in use by a node, the results of this operation are unpredictable. Also, doing this does not cause the local end of the connection to close, so resources may be consumed.</p> @@ -321,8 +321,8 @@ erl_unpublish(node); ]]></code> <title>Sending and Receiving Erlang Messages</title> <p>Use one of the following two functions to send messages:</p> <list type="bulleted"> - <item><c><![CDATA[erl_send()]]></c></item> - <item><c><![CDATA[erl_reg_send()]]></c></item> + <item><c>erl_send()</c></item> + <item><c>erl_reg_send()</c></item> </list> <p>As in Erlang, it is possible to send messages to a <em>Pid</em> or to a registered name. It is easier to send a @@ -330,17 +330,17 @@ erl_unpublish(node); ]]></code> a suitable <em>Pid</em>.</p> <p>Use one of the following two functions to receive messages:</p> <list type="bulleted"> - <item><c><![CDATA[erl_receive()]]></c></item> - <item><c><![CDATA[erl_receive_msg()]]></c></item> + <item><c>erl_receive()</c></item> + <item><c>erl_receive_msg()</c></item> </list> - <p><c><![CDATA[erl_receive()]]></c> receives the message into a buffer, while - <c><![CDATA[erl_receive_msg()]]></c> decodes the message into an Erlang term. </p> + <p><c>erl_receive()</c> receives the message into a buffer, while + <c>erl_receive_msg()</c> decodes the message into an Erlang term. </p> <section> <title>Example of Sending Messages</title> - <p>In the following example, <c><![CDATA[{Pid, hello_world}]]></c> is - sent to a registered process <c><![CDATA[my_server]]></c>. The message is encoded - by <c><![CDATA[erl_send()]]></c>:</p> + <p>In the following example, <c>{Pid, hello_world}</c> is + sent to a registered process <c>my_server</c>. The message is encoded + by <c>erl_send()</c>:</p> <code type="none"><![CDATA[ extern const char *erl_thisnodename(void); extern short erl_thiscreation(void); @@ -355,15 +355,15 @@ emsg = erl_mk_tuple(arr, 2); erl_reg_send(sockfd, "my_server", emsg); erl_free_term(emsg); ]]></code> <p>The first element of the tuple that is sent is your own - <em>Pid</em>. This enables <c><![CDATA[my_server]]></c> to reply. Refer to the - Reference Manual, the <c><![CDATA[erl_connect]]></c> module for more information + <em>Pid</em>. This enables <c>my_server</c> to reply. Refer to the + Reference Manual, the <c>erl_connect</c> module for more information about send primitives.</p> </section> <section> <title>Example of Receiving Messages</title> - <p>In this example <c><![CDATA[{Pid, Something}]]></c> is received. The - received Pid is then used to return <c><![CDATA[{goodbye,Pid}]]></c></p> + <p>In this example <c>{Pid, Something}</c> is received. The + received Pid is then used to return <c>{goodbye,Pid}</c></p> <code type="none"><![CDATA[ ETERM *arr[2], *answer; int sockfd,rc; @@ -383,18 +383,18 @@ if ((rc = erl_receive_msg(sockfd , buf, BUFSIZE, &emsg)) == ERL_MSG) { <p>In order to provide robustness, a distributed Erlang node occasionally polls all its connected neighbours in an attempt to detect failed nodes or communication links. A node which receives such - a message is expected to respond immediately with an <c><![CDATA[ERL_TICK]]></c> message. - This is done automatically by <c><![CDATA[erl_receive()]]></c>, however when this - has occurred <c><![CDATA[erl_receive]]></c> returns <c><![CDATA[ERL_TICK]]></c> to the caller - without storing a message into the <c><![CDATA[ErlMessage]]></c> structure.</p> + a message is expected to respond immediately with an <c>ERL_TICK</c> message. + This is done automatically by <c>erl_receive()</c>, however when this + has occurred <c>erl_receive</c> returns <c>ERL_TICK</c> to the caller + without storing a message into the <c>ErlMessage</c> structure.</p> <p>When a message has been received, it is the caller's responsibility - to free the received message <c><![CDATA[emsg.msg]]></c> as well as <c><![CDATA[emsg.to]]></c> - or <c><![CDATA[emsg.from]]></c>, depending on the type of message received.</p> + to free the received message <c>emsg.msg</c> as well as <c>emsg.to</c> + or <c>emsg.from</c>, depending on the type of message received.</p> <p>Refer to the Reference Manual for additional information about the following modules:</p> <list type="bulleted"> - <item><c><![CDATA[erl_connect]]></c></item> - <item><c><![CDATA[erl_eterm]]></c>.</item> + <item><c>erl_connect</c></item> + <item><c>erl_eterm</c>.</item> </list> </section> </section> @@ -421,12 +421,12 @@ if (!erl_match(ep, reply)) "); erl_free_term(ep); erl_free_term(reply); ]]></code> - <p><c><![CDATA[c:c/1]]></c> is called to compile the specified module on the - remote node. <c><![CDATA[erl_match()]]></c> checks that the compilation was - successful by testing for the expected <c><![CDATA[ok]]></c>.</p> - <p>Refer to the Reference Manual, the <c><![CDATA[erl_connect]]></c> module for - more information about <c><![CDATA[erl_rpc()]]></c>, and its companions - <c><![CDATA[erl_rpc_to()]]></c> and <c><![CDATA[erl_rpc_from()]]></c>.</p> + <p><c>c:c/1</c> is called to compile the specified module on the + remote node. <c>erl_match()</c> checks that the compilation was + successful by testing for the expected <c>ok</c>.</p> + <p>Refer to the Reference Manual, the <c>erl_connect</c> module for + more information about <c>erl_rpc()</c>, and its companions + <c>erl_rpc_to()</c> and <c>erl_rpc_from()</c>.</p> </section> <section> @@ -454,14 +454,14 @@ if (names) ",names[i]); free(names); ]]></code> - <p><c><![CDATA[erl_global_names()]]></c> allocates and returns a buffer containing - all the names known to global. <c><![CDATA[count]]></c> will be initialized to + <p><c>erl_global_names()</c> allocates and returns a buffer containing + all the names known to global. <c>count</c> will be initialized to indicate how many names are in the array. The array of strings in names is terminated by a NULL pointer, so it is not necessary to use - <c><![CDATA[count]]></c> to determine when the last name is reached.</p> + <c>count</c> to determine when the last name is reached.</p> <p>It is the caller's responsibility to free the array. - <c><![CDATA[erl_global_names()]]></c> allocates the array and all of the strings - using a single call to <c><![CDATA[malloc()]]></c>, so <c><![CDATA[free(names)]]></c> is all + <c>erl_global_names()</c> allocates the array and all of the strings + using a single call to <c>malloc()</c>, so <c>free(names)</c> is all that is necessary.</p> <p>To look up one of the names:</p> <code type="none"><![CDATA[ @@ -469,13 +469,13 @@ ETERM *pid; char node[256]; pid = erl_global_whereis(fd,"schedule",node); ]]></code> - <p>If <c><![CDATA["schedule"]]></c> is known to global, an Erlang pid is returned + <p>If <c>"schedule"</c> is known to global, an Erlang pid is returned that can be used to send messages to the schedule service. - Additionally, <c><![CDATA[node]]></c> will be initialized to contain the name of + Additionally, <c>node</c> will be initialized to contain the name of the node where the service is registered, so that you can make a - connection to it by simply passing the variable to <c><![CDATA[erl_connect()]]></c>.</p> + connection to it by simply passing the variable to <c>erl_connect()</c>.</p> <p>Before registering a name, you should already have registered your - port number with <c><![CDATA[epmd]]></c>. This is not strictly necessary, but if you + port number with <c>epmd</c>. This is not strictly necessary, but if you neglect to do so, then other nodes wishing to communicate with your service will be unable to find or connect to your process.</p> <p>Create a pid that Erlang processes can use to communicate with your @@ -485,9 +485,9 @@ ETERM *pid; pid = erl_mk_pid(thisnode,14,0,0); erl_global_register(fd,servicename,pid); ]]></code> - <p>After registering the name, you should use <c><![CDATA[erl_accept()]]></c> to wait for + <p>After registering the name, you should use <c>erl_accept()</c> to wait for incoming connections.</p> - <p>Do not forget to free <c><![CDATA[pid]]></c> later with <c><![CDATA[erl_free_term()]]></c>!</p> + <p>Do not forget to free <c>pid</c> later with <c>erl_free_term()</c>!</p> <p>To unregister a name:</p> <code type="none"><![CDATA[ erl_global_unregister(fd,servicename); ]]></code> @@ -500,7 +500,7 @@ erl_global_unregister(fd,servicename); ]]></code> restoring them from a Mnesia table on an Erlang node. More detailed information about the individual API functions can be found in the Reference Manual.</p> - <p>Keys are strings, i.e. 0-terminated arrays of characters, and values + <p>Keys are strings, i.e. <c>NULL</c>-terminated arrays of characters, and values are arbitrary objects. Although integers and floating point numbers are treated specially by the registry, you can store strings or binary objects of any type as pointers.</p> @@ -570,12 +570,12 @@ ei_reg_close(reg); ]]></code> <title>Backing Up the Registry to Mnesia</title> <p>The contents of a registry can be backed up to Mnesia on a "nearby" Erlang node. You need to provide an open connection to the Erlang node - (see <c><![CDATA[erl_connect()]]></c>). Also, Mnesia 3.0 or later must be running + (see <c>erl_connect()</c>). Also, Mnesia 3.0 or later must be running on the Erlang node before the backup is initiated:</p> <code type="none"><![CDATA[ ei_reg_dump(fd, reg, "mtab", dumpflags); ]]></code> <p>The example above will backup the contents of the registry to the - specified Mnesia table <c><![CDATA["mtab"]]></c>. Once a registry has been backed + specified Mnesia table <c>"mtab"</c>. Once a registry has been backed up to Mnesia in this manner, additional backups will only affect objects that have been modified since the most recent backup, i.e. objects that have been created, changed or deleted. The backup @@ -584,7 +584,7 @@ ei_reg_dump(fd, reg, "mtab", dumpflags); ]]></code> <p>In the same manner, a registry can be restored from a Mnesia table:</p> <code type="none"><![CDATA[ ei_reg_restore(fd, reg, "mtab"); ]]></code> - <p>This will read the entire contents of <c><![CDATA["mtab"]]></c> into the specified + <p>This will read the entire contents of <c>"mtab"</c> into the specified registry. After the restore, all of the objects in the registry will be marked as unmodified, so a subsequent backup will only affect objects that you have modified since the restore.</p> @@ -600,8 +600,8 @@ ei_reg_restore(fd, reg, "mtab"); ]]></code> <p>When string or binary objects are stored in the registry it is important that a number of simple guidelines are followed. </p> <p>Most importantly, the object must have been created with a single call - to <c><![CDATA[malloc()]]></c> (or similar), so that it can later be removed by a - single call to <c><![CDATA[free()]]></c>. Objects will be freed by the registry + to <c>malloc()</c> (or similar), so that it can later be removed by a + single call to <c>free()</c>. Objects will be freed by the registry when it is closed, or when you assign a new value to an object that previously contained a string or binary.</p> <p>You should also be aware that if you store binary objects that are @@ -618,9 +618,8 @@ ei_reg_restore(fd, reg, "mtab"); ]]></code> you make, possibly causing it to be missed the next time you make a Mnesia backup of the registry contents. This can be avoided if you mark the object as dirty after any such changes with - <c><![CDATA[ei_reg_markdirty()]]></c>, or pass appropriate flags to - <c><![CDATA[ei_reg_dump()]]></c>.</p> + <c>ei_reg_markdirty()</c>, or pass appropriate flags to + <c>ei_reg_dump()</c>.</p> </section> </section> </chapter> - diff --git a/lib/erl_interface/doc/src/erl_malloc.xml b/lib/erl_interface/doc/src/erl_malloc.xml index 799c903b1a..c0eebc29e9 100644 --- a/lib/erl_interface/doc/src/erl_malloc.xml +++ b/lib/erl_interface/doc/src/erl_malloc.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_malloc</title> @@ -28,174 +28,177 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>980703</date> + <date>1998-07-03</date> <rev>A</rev> - <file>erl_malloc.sgml</file> + <file>erl_malloc.xml</file> </header> <lib>erl_malloc</lib> - <libsummary>Memory Allocation Functions</libsummary> + <libsummary>Memory allocation functions.</libsummary> <description> <p>This module provides functions for allocating and deallocating memory.</p> </description> + <funcs> <func> <name><ret>ETERM *</ret><nametext>erl_alloc_eterm(etype)</nametext></name> - <fsummary>Allocates an ETERM structure</fsummary> + <fsummary>Allocate an ETERM structure.</fsummary> <type> <v>unsigned char etype;</v> </type> <desc> - <p>This function allocates an <c><![CDATA[(ETERM)]]></c> structure. - Specify <c><![CDATA[etype]]></c> as one of the following constants:</p> + <p>Allocates an <c>(ETERM)</c> structure.</p> + <p>Specify <c>etype</c> as one of the following + constants:</p> <list type="bulleted"> - <item> - <p>ERL_INTEGER</p> + <item><c>ERL_INTEGER</c> </item> - <item> - <p>ERL_U_INTEGER <c><![CDATA[/* unsigned integer */]]></c></p> + <item><c>ERL_U_INTEGER</c> (unsigned integer) </item> - <item> - <p>ERL_ATOM</p> + <item><c>ERL_ATOM</c> </item> - <item> - <p>ERL_PID <c><![CDATA[/* Erlang process identifier */]]></c></p> + <item><c>ERL_PID</c> (Erlang process identifier) </item> - <item> - <p>ERL_PORT</p> + <item><c>ERL_PORT</c> </item> - <item> - <p>ERL_REF <c><![CDATA[/* Erlang reference */]]></c></p> + <item><c>ERL_REF</c> (Erlang reference) </item> - <item> - <p>ERL_LIST</p> + <item><c>ERL_LIST</c> </item> - <item> - <p>ERL_EMPTY_LIST</p> + <item><c>ERL_EMPTY_LIST</c> </item> - <item> - <p>ERL_TUPLE</p> + <item><c>ERL_TUPLE</c> </item> - <item> - <p>ERL_BINARY</p> + <item><c>ERL_BINARY</c> </item> - <item> - <p>ERL_FLOAT</p> + <item><c>ERL_FLOAT</c> </item> - <item> - <p>ERL_VARIABLE</p> + <item><c>ERL_VARIABLE</c> </item> - <item> - <p>ERL_SMALL_BIG <c><![CDATA[/* bignum */]]></c></p> + <item><c>ERL_SMALL_BIG</c> (bignum) </item> - <item> - <p>ERL_U_SMALL_BIG <c><![CDATA[/* bignum */]]></c></p> + <item><c>ERL_U_SMALL_BIG</c> (bignum) </item> </list> - <p><c><![CDATA[ERL_SMALL_BIG]]></c> and <c><![CDATA[ERL_U_SMALL_BIG]]></c> are for - creating Erlang <c><![CDATA[bignums]]></c>, which can contain integers of - arbitrary size. The size of an integer in Erlang is machine - dependent, but in general any integer larger than 2^28 - requires a bignum.</p> + <p><c>ERL_SMALL_BIG</c> and + <c>ERL_U_SMALL_BIG</c> are for + creating Erlang <c>bignums</c>, which can contain integers + of any size. The size of an integer in Erlang is machine-dependent, + but any integer > 2^28 requires a bignum.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_eterm_release(void)</nametext></name> - <fsummary>Clears the ETERM freelist</fsummary> + <fsummary>Clear the ETERM freelist.</fsummary> <desc> - <p>Clears the - freelist, where blocks are placed when they are - released by <c><![CDATA[erl_free_term()]]></c> and - <c><![CDATA[erl_free_compound()]]></c>. </p> + <p>Clears the freelist, where blocks are placed when they are + released by <c>erl_free_term()</c> and + <c>erl_free_compound()</c>.</p> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_eterm_statistics(allocated, freed)</nametext></name> - <fsummary>Reports term allocation statistics</fsummary> + <fsummary>Report term allocation statistics.</fsummary> <type> <v>long *allocated;</v> <v>long *freed;</v> </type> <desc> - <p><c><![CDATA[allocated]]></c> and <c><![CDATA[freed]]></c> are initialized to + <p>Reports term allocation statistics.</p> + <p><c>allocated</c> and <c>freed</c> are + initialized to contain information about the fix-allocator used to allocate - ETERM components. <c><![CDATA[allocated]]></c> is the number of blocks - currently allocated to ETERM objects. <c><![CDATA[freed]]></c> is the - length of the freelist, where blocks are placed when they are - released by <c><![CDATA[erl_free_term()]]></c> and - <c><![CDATA[erl_free_compound()]]></c>. </p> + <c>ETERM</c> components.</p> + <list type="bulleted"> + <item> + <p><c>allocated</c> is the number of blocks currently + allocated to <c>ETERM</c> objects.</p> + </item> + <item> + <p><c>freed</c> is the length of the freelist, where + blocks are placed when they are + released by <c>erl_free_term()</c> and + <c>erl_free_compound()</c>.</p> + </item> + </list> </desc> </func> + <func> - <name><ret>void</ret><nametext>erl_free_array(array, size)</nametext></name> - <fsummary>Frees an array of ETERM structures</fsummary> + <name><ret>void</ret><nametext>erl_free(ptr)</nametext></name> + <fsummary>Free some memory.</fsummary> <type> - <v>ETERM **array;</v> - <v>int size;</v> + <v>void *ptr;</v> </type> <desc> - <p>This function frees an array of Erlang terms.</p> - <p><c><![CDATA[array]]></c> is an array of ETERM* objects. - </p> - <p><c><![CDATA[size]]></c> is the number of terms in the array.</p> + <p>Calls the standard + <c>free()</c> function.</p> </desc> </func> + <func> - <name><ret>void</ret><nametext>erl_free_term(t)</nametext></name> - <fsummary>Frees an ETERM structure</fsummary> + <name><ret>void</ret><nametext>erl_free_array(array, size)</nametext></name> + <fsummary>Free an array of ETERM structures.</fsummary> <type> - <v>ETERM *t;</v> + <v>ETERM **array;</v> + <v>int size;</v> </type> <desc> - <p>Use this function to free an Erlang term.</p> + <p>Frees an array of Erlang terms.</p> + <list type="bulleted"> + <item><c>array</c> is an array of ETERM* objects.</item> + <item><c>size</c> is the number of terms in the array. + </item> + </list> </desc> </func> + <func> <name><ret>void</ret><nametext>erl_free_compound(t)</nametext></name> - <fsummary>Frees an array of ETERM structures</fsummary> + <fsummary>Free an array of ETERM structures.</fsummary> <type> <v>ETERM *t;</v> </type> <desc> <p>Normally it is the programmer's responsibility to free each Erlang term that has been returned from any of the - <c><![CDATA[erl_interface]]></c> functions. However since many of the + <c>Erl_Interface</c> functions. However, as many of the functions that build new Erlang terms in fact share objects - with other existing terms, it may be difficult for the - programmer to maintain pointers to all such terms in order to - free them individually. - </p> - <p><c><![CDATA[erl_free_compound()]]></c> will recursively free all of the - sub-terms associated with a given Erlang term, regardless of - whether we are still holding pointers to the sub-terms. - </p> - <p>There is an example in the User Manual under "Building - Terms and Patterns" - </p> + with other existing terms, it can be difficult for the + programmer to maintain pointers to all such terms to + free them individually.</p> + <p><c>erl_free_compound()</c> recursively frees all of the + subterms associated with a specified Erlang term, regardless of + whether we are still holding pointers to the subterms.</p> + <p>For an example, see section + <seealso marker="ei_users_guide#building_terms_and_patterns">Building Terms and Patterns</seealso> + in the User's Guide.</p> </desc> </func> + <func> - <name><ret>void</ret><nametext>erl_malloc(size)</nametext></name> - <fsummary>Allocates some memory</fsummary> + <name><ret>void</ret><nametext>erl_free_term(t)</nametext></name> + <fsummary>Free an ETERM structure.</fsummary> <type> - <v>long size;</v> + <v>ETERM *t;</v> </type> <desc> - <p>This function calls the standard - <c><![CDATA[malloc()]]></c> function. </p> + <p>Frees an Erlang term.</p> </desc> </func> + <func> - <name><ret>void</ret><nametext>erl_free(ptr)</nametext></name> - <fsummary>Frees some memory</fsummary> + <name><ret>void</ret><nametext>erl_malloc(size)</nametext></name> + <fsummary>Allocate some memory.</fsummary> <type> - <v>void *ptr;</v> + <v>long size;</v> </type> <desc> - <p>This function calls the standard - <c><![CDATA[free()]]></c> function. </p> + <p>Calls the standard + <c>malloc()</c> function.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/erl_marshal.xml b/lib/erl_interface/doc/src/erl_marshal.xml index 7c56089016..2ad658f78b 100644 --- a/lib/erl_interface/doc/src/erl_marshal.xml +++ b/lib/erl_interface/doc/src/erl_marshal.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>erl_marshal</title> @@ -28,246 +28,241 @@ <docno></docno> <approved>Bjarne Däcker</approved> <checked>Torbjörn Törnkvist</checked> - <date>980703</date> + <date>1998-07-03</date> <rev>A</rev> - <file>erl_marshal.sgml</file> + <file>erl_marshal.xml</file> </header> <lib>erl_marshal</lib> - <libsummary>Encoding and Decoding of Erlang terms</libsummary> + <libsummary>Encoding and decoding of Erlang terms.</libsummary> <description> <p>This module contains functions for encoding Erlang terms into a sequence of bytes, and for decoding Erlang terms from a sequence of bytes.</p> </description> + <funcs> <func> <name><ret>int</ret><nametext>erl_compare_ext(bufp1, bufp2)</nametext></name> - <fsummary>Compares encoded byte sequences</fsummary> + <fsummary>Compare encoded byte sequences.</fsummary> <type> <v>unsigned char *bufp1,*bufp2;</v> </type> <desc> - <p>This function compares two encoded terms. - </p> - <p><c><![CDATA[bufp1]]></c> is a buffer containing an encoded Erlang - term term1. - </p> - <p><c><![CDATA[bufp2]]></c> is a buffer containing an encoded Erlang - term term2. - </p> - <p>The function returns 0 if the terms are equal, -1 if term1 - is less than term2, or 1 if term2 is less than term1. - </p> + <p>Compares two encoded terms.</p> + <list type="bulleted"> + <item><c>bufp1</c> is a buffer containing an encoded + Erlang term term1.</item> + <item><c>bufp2</c> is a buffer containing an encoded + Erlang term term2.</item> + </list> + <p>Returns <c>0</c> if the terms are equal, <c>-1</c> if + <c>term1</c> < <c>term2</c>, or <c>1</c> if <c>term2</c> < + <c>term1</c>.</p> </desc> </func> + <func> <name><ret>ETERM *</ret><nametext>erl_decode(bufp)</nametext></name> <name><ret>ETERM *</ret><nametext>erl_decode_buf(bufpp)</nametext></name> - <fsummary>Converts a term from Erlang external format</fsummary> + <fsummary>Convert a term from Erlang external format.</fsummary> <type> <v>unsigned char *bufp;</v> <v>unsigned char **bufpp;</v> </type> <desc> - <p><c><![CDATA[erl_decode()]]></c> and <c><![CDATA[erl_decode_buf()]]></c> decode + <p><c>erl_decode()</c> and + <c>erl_decode_buf()</c> decode the contents of a buffer and return the corresponding - Erlang term. <c><![CDATA[erl_decode_buf()]]></c> provides a simple + Erlang term. <c>erl_decode_buf()</c> provides a simple mechanism for dealing with several encoded terms stored consecutively in the buffer.</p> - <p><c><![CDATA[bufp]]></c> is a pointer to a buffer containing one or - more encoded Erlang terms. - </p> - <p><c><![CDATA[bufpp]]></c> is the address of a buffer pointer. The buffer - contains one or more consecutively encoded Erlang terms. - Following a successful call to <c><![CDATA[erl_decode_buf()]]></c>, - <c><![CDATA[bufpp]]></c> will be updated so that it points to the next - encoded term. - </p> - <p><c><![CDATA[erl_decode()]]></c> returns an Erlang term - corresponding to the contents of <c><![CDATA[bufp]]></c> on success, or - NULL on failure. <c><![CDATA[erl_decode_buf()]]></c> returns an Erlang + <list type="bulleted"> + <item> + <p><c>bufp</c> is a pointer to a buffer containing one + or more encoded Erlang terms.</p> + </item> + <item> + <p><c>bufpp</c> is the address of a buffer pointer. The + buffer contains one or more consecutively encoded Erlang terms. + Following a successful call to + <c>erl_decode_buf()</c>, <c>bufpp</c> is + updated so that it points to the next encoded term.</p> + </item> + </list> + <p><c>erl_decode()</c> returns an Erlang term + corresponding to the contents of <c>bufp</c> on success, + otherwise <c>NULL</c>. <c>erl_decode_buf()</c> + returns an Erlang term corresponding to the first of the consecutive terms in - <c><![CDATA[bufpp]]></c> and moves <c><![CDATA[bufpp]]></c> forward to point to the + <c>bufpp</c> and moves <c>bufpp</c> forward + to point to the next term in the buffer. On failure, each of the functions - returns NULL. - </p> + return <c>NULL</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_encode(term, bufp)</nametext></name> <name><ret>int</ret><nametext>erl_encode_buf(term, bufpp)</nametext></name> - <fsummary>Converts a term into Erlang external format</fsummary> + <fsummary>Convert a term into Erlang external format.</fsummary> <type> <v>ETERM *term;</v> <v>unsigned char *bufp;</v> <v>unsigned char **bufpp;</v> </type> <desc> - <p><c><![CDATA[erl_encode()]]></c> and <c><![CDATA[erl_encode_buf()]]></c> encode + <p><c>erl_encode()</c> and + <c>erl_encode_buf()</c> encode Erlang terms into external format for storage or transmission. - <c><![CDATA[erl_encode_buf()]]></c> provides a simple mechanism for - encoding several terms consecutively in the same - buffer. - </p> - <p><c>term</c> is an Erlang term to be encoded. - </p> - <p><c>bufp</c> is a pointer to a buffer containing one or - more encoded Erlang terms. - </p> - <p><c>bufpp</c> is a pointer to a pointer to a buffer - containing one or more consecutively encoded Erlang terms. - Following a successful call to <c><![CDATA[erl_encode_buf()]]></c>, - <c>bufpp</c> will be updated so that it points to the - position for the next encoded term. - </p> - <p> - These functions returns the number of bytes written to buffer - if successful, otherwise returns 0. - </p> - <p>Note that no bounds checking is done on the buffer. It is - the caller's responsibility to make sure that the buffer is + <c>erl_encode_buf()</c> provides a simple mechanism for + encoding several terms consecutively in the same buffer.</p> + <list type="bulleted"> + <item> + <p><c>term</c> is an Erlang term to be encoded.</p> + </item> + <item> + <p><c>bufp</c> is a pointer to a buffer containing one or + more encoded Erlang terms.</p> + </item> + <item> + <p><c>bufpp</c> is a pointer to a pointer to a buffer + containing one or more consecutively encoded Erlang terms. + Following a successful call to + <c>erl_encode_buf()</c>, <c>bufpp</c> is updated so + that it points to the + position for the next encoded term.</p> + </item> + </list> + <p>These functions return the number of bytes written to buffer + on success, otherwise <c>0</c>.</p> + <p>Notice that no bounds checking is done on the buffer. It is + the caller's responsibility to ensure that the buffer is large enough to hold the encoded terms. You can either use a - static buffer that is large enough to hold the terms you - expect to need in your program, or use <c><![CDATA[erl_term_len()]]></c> - to determine the exact requirements for a given term. - </p> + static buffer that is large enough to hold the terms you expect + to need in your program, or use <c>erl_term_len()</c> + to determine the exact requirements for a given term.</p> <p>The following can help you estimate the buffer - requirements for a term. Note that this information is - implementation specific, and may change in future versions. - If you are unsure, use <c><![CDATA[erl_term_len()]]></c>. - </p> + requirements for a term. Notice that this information is + implementation-specific, and can change in future versions. + If you are unsure, use <c>erl_term_len()</c>.</p> <p>Erlang terms are encoded with a 1 byte tag that identifies the type of object, a 2- or 4-byte length field, - and then the data itself. Specifically: - </p> + and then the data itself. Specifically:</p> <taglist> - <tag><c><![CDATA[Tuples]]></c></tag> - <item>need 5 bytes, plus the space for each element.</item> - <tag><c><![CDATA[Lists]]></c></tag> - <item>need 5 bytes, plus the space for each element, and 1 - additional byte for the empty list at the end.</item> - <tag><c><![CDATA[Strings and atoms]]></c></tag> - <item>need 3 bytes, plus 1 byte for each character (the - terminating 0 is not encoded). Really long strings (more - than 64k characters) are encoded as lists. Atoms cannot - contain more than 256 characters.</item> - <tag><c><![CDATA[Integers]]></c></tag> - <item>need 5 bytes.</item> - <tag><c><![CDATA[Characters]]></c></tag> - <item>(integers < 256) need 2 bytes.</item> - <tag><c><![CDATA[Floating point numbers]]></c></tag> - <item>need 32 bytes.</item> - <tag><c><![CDATA[Pids]]></c></tag> - <item>need 10 bytes, plus the space for the node name, which - is an atom.</item> - <tag><c><![CDATA[Ports and Refs]]></c></tag> - <item>need 6 bytes, plus the space for the node name, which - is an atom.</item> + <tag><c>Tuples</c></tag> + <item>Need 5 bytes, plus the space for each element.</item> + <tag><c>Lists</c></tag> + <item>Need 5 bytes, plus the space for each element, and 1 + more byte for the empty list at the end.</item> + <tag><c>Strings and atoms</c></tag> + <item>Need 3 bytes, plus 1 byte for each character (the + terminating 0 is not encoded). Really long strings (more + than 64k characters) are encoded as lists. Atoms cannot + contain more than 256 characters.</item> + <tag><c>Integers</c></tag> + <item>Need 5 bytes.</item> + <tag><c>Characters</c></tag> + <item>(Integers < 256) need 2 bytes.</item> + <tag><c>Floating point numbers</c></tag> + <item>Need 32 bytes.</item> + <tag><c>Pids</c></tag> + <item>Need 10 bytes, plus the space for the node name, which + is an atom.</item> + <tag><c>Ports and Refs</c></tag> + <item>Need 6 bytes, plus the space for the node name, which + is an atom.</item> </taglist> - <p>The total space required will be the result calculated - from the information above, plus 1 additional byte for a - version identifier. - </p> + <p>The total space required is the result calculated + from the information above, plus 1 more byte for a + version identifier.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_ext_size(bufp)</nametext></name> - <fsummary>Counts elements in encoded term</fsummary> + <fsummary>Count elements in encoded term.</fsummary> <type> <v>unsigned char *bufp;</v> </type> <desc> - <p>This function returns the number of elements in an - encoded term.</p> + <p>Returns the number of elements in an encoded term.</p> </desc> </func> + <func> <name><ret>unsigned char</ret><nametext>erl_ext_type(bufp)</nametext></name> - <fsummary>Determines type of an encoded byte sequence</fsummary> + <fsummary>Determine type of an encoded byte sequence.</fsummary> <type> <v>unsigned char *bufp;</v> </type> <desc> - <p>This function identifies and returns the type of Erlang term encoded - in a buffer. It will skip a trailing <em>magic</em> identifier. - Returns <c><![CDATA[0]]></c> if the type can't be determined or one of</p> + <p>Identifies and returns the type of Erlang term encoded + in a buffer. It skips a trailing <em>magic</em> identifier.</p> + <p>Returns <c>0</c> if the type cannot be determined or + one of:</p> <list type="bulleted"> - <item> - <p>ERL_INTEGER</p> + <item><c>ERL_INTEGER</c> </item> - <item> - <p>ERL_ATOM</p> + <item><c>ERL_ATOM</c> </item> - <item> - <p>ERL_PID <c><![CDATA[/* Erlang process identifier */]]></c></p> + <item><c>ERL_PID</c> (Erlang process identifier) </item> - <item> - <p>ERL_PORT</p> + <item><c>ERL_PORT</c> </item> - <item> - <p>ERL_REF <c><![CDATA[/* Erlang reference */]]></c></p> + <item><c>ERL_REF</c> (Erlang reference) </item> - <item> - <p>ERL_EMPTY_LIST</p> + <item><c>ERL_EMPTY_LIST</c> </item> - <item> - <p>ERL_LIST</p> + <item><c>ERL_LIST</c> </item> - <item> - <p>ERL_TUPLE</p> + <item><c>ERL_TUPLE</c> </item> - <item> - <p>ERL_FLOAT</p> + <item><c>ERL_FLOAT</c> </item> - <item> - <p>ERL_BINARY</p> + <item><c>ERL_BINARY</c> </item> - <item> - <p>ERL_FUNCTION</p> + <item><c>ERL_FUNCTION</c> </item> </list> </desc> </func> + <func> <name><ret>unsigned char *</ret><nametext>erl_peek_ext(bufp, pos)</nametext></name> - <fsummary>Steps over encoded term</fsummary> + <fsummary>Step over encoded term.</fsummary> <type> <v>unsigned char *bufp;</v> <v>int pos;</v> </type> <desc> <p>This function is used for stepping over one or more - encoded terms in a buffer, in order to directly access a - later term. - </p> - <p><c><![CDATA[bufp]]></c> is a pointer to a buffer containing one or - more encoded Erlang terms. - </p> - <p><c><![CDATA[pos]]></c> indicates how many terms to step over in the - buffer. - </p> - <p>The function returns a pointer to a sub-term that can be - used in a subsequent call to <c><![CDATA[erl_decode()]]></c> in order to retrieve - the term at that position. If there is no term, or <c><![CDATA[pos]]></c> - would exceed the size of the terms in the buffer, NULL is returned. - </p> + encoded terms in a buffer, to directly access later term.</p> + <list type="bulleted"> + <item><c>bufp</c> is a pointer to a buffer containing one + or more encoded Erlang terms.</item> + <item><c>pos</c> indicates how many terms to step over in + the buffer.</item> + </list> + <p>Returns a pointer to a subterm that can be + used in a later call to <c>erl_decode()</c> to retrieve + the term at that position. If there is no term, or + <c>pos</c> would exceed the size of the terms in the + buffer, <c>NULL</c> is returned.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>erl_term_len(t)</nametext></name> - <fsummary>Determines encoded size of term</fsummary> + <fsummary>Determine encoded size of term.</fsummary> <type> <v>ETERM *t;</v> </type> <desc> - <p>This function determines the buffer space that would be - needed by <c><![CDATA[t]]></c> if it were encoded into Erlang external - format by <c><![CDATA[erl_encode()]]></c>. - </p> - <p>The size in bytes is returned. - </p> + <p>Determines the buffer space that would be + needed by <c>t</c> if it were encoded into Erlang external + format by <c>erl_encode()</c>.</p> + <p>Returns the size in bytes.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/doc/src/fascicules.xml b/lib/erl_interface/doc/src/fascicules.xml deleted file mode 100644 index f7edd8a973..0000000000 --- a/lib/erl_interface/doc/src/fascicules.xml +++ /dev/null @@ -1,24 +0,0 @@ -<?xml version="1.0" encoding="utf-8" ?> -<!DOCTYPE fascicules SYSTEM "fascicules.dtd"> - -<fascicules> - <fascicule file="part_ei" href="part_ei_frame.html" entry="no"> - EI User's Guide - </fascicule> - <fascicule file="ref_man_ei" href="ref_man_ei_frame.html" entry="yes"> - EI Library Reference - </fascicule> - <fascicule file="ref_man_erl_interface" href="ref_man_erl_interface_frame.html" entry="no"> - Erl_interface Library Reference - </fascicule> - <fascicule file="ref_man" href="ref_man_frame.html" entry="no"> - Command Reference - </fascicule> - <fascicule file="part_notes" href="part_notes_frame.html" entry="no"> - Release Notes - </fascicule> - <fascicule file="" href="../../../../doc/print.html" entry="no"> - Off-Print - </fascicule> -</fascicules> - diff --git a/lib/erl_interface/doc/src/part.xml b/lib/erl_interface/doc/src/part.xml index d044e2b981..3b761df221 100644 --- a/lib/erl_interface/doc/src/part.xml +++ b/lib/erl_interface/doc/src/part.xml @@ -22,7 +22,7 @@ </legalnotice> - <title>EI User's Guide</title> + <title>Erl_Interface User's Guide</title> <prepared>Gordon Beaton</prepared> <docno></docno> <date>1998-11-30</date> diff --git a/lib/erl_interface/doc/src/part_erl_interface.xml b/lib/erl_interface/doc/src/part_erl_interface.xml index 2abe7ecd60..e256cfa193 100644 --- a/lib/erl_interface/doc/src/part_erl_interface.xml +++ b/lib/erl_interface/doc/src/part_erl_interface.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>Erl_Interface User's Guide</title> @@ -31,4 +31,3 @@ </header> <xi:include href="erl_interface.xml"/> </part> - diff --git a/lib/erl_interface/doc/src/ref_man.xml b/lib/erl_interface/doc/src/ref_man.xml index 0cf060829b..1e20637cb7 100644 --- a/lib/erl_interface/doc/src/ref_man.xml +++ b/lib/erl_interface/doc/src/ref_man.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,9 +19,9 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> - <title>Erl_Interface Command Reference</title> + <title>Erl_Interface Reference Manual</title> <prepared>Gordon Beaton</prepared> <docno></docno> <date>1998-11.30</date> @@ -29,17 +29,6 @@ <file>ref_man.xml</file> </header> <description> - <p>The <c>ei</c> and <c>erl_interface</c> are <c>C</c> interface libraries for - communication with <c>Erlang</c>.</p> - <note> - <p>By default, the <c>ei</c> and <c>erl_interface</c> libraries are only guaranteed - to be compatible with other Erlang/OTP components from the same - release as the libraries themself. See the documentation of the - <seealso marker="ei#ei_set_compat_rel">ei_set_compat_rel()</seealso> and - <seealso marker="erl_eterm#erl_set_compat_rel">erl_set_compat_rel()</seealso> - functions on how to communicate with Erlang/OTP components from earlier - releases.</p> - </note> </description> <xi:include href="ei.xml"/> <xi:include href="ei_connect.xml"/> @@ -53,4 +42,3 @@ <xi:include href="erl_marshal.xml"/> <xi:include href="erl_call.xml"/> </application> - diff --git a/lib/erl_interface/doc/src/ref_man_ei.xml b/lib/erl_interface/doc/src/ref_man_ei.xml index d24828c394..92ff9ed328 100644 --- a/lib/erl_interface/doc/src/ref_man_ei.xml +++ b/lib/erl_interface/doc/src/ref_man_ei.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>EI Library Reference</title> @@ -30,12 +30,12 @@ <file>ref_man_ei.xml</file> </header> <description> - <p>The <c><![CDATA[ei]]></c> library is a <c><![CDATA[C]]></c> interface library for - communication with <c><![CDATA[Erlang]]></c>.</p> + <p>The <c>ei</c> library is a <c>C</c> interface library for + communication with <c>Erlang</c>.</p> <note> - <p>By default, the <c><![CDATA[ei]]></c> library is only guaranteed + <p>By default, the <c>ei</c> library is only guaranteed to be compatible with other Erlang/OTP components from the same - release as the <c><![CDATA[ei]]></c> library itself. See the documentation of the + release as the <c>ei</c> library itself. See the documentation of the <seealso marker="ei#ei_set_compat_rel">ei_set_compat_rel()</seealso> function on how to communicate with Erlang/OTP components from earlier releases.</p> @@ -45,4 +45,3 @@ <xi:include href="ei_connect.xml"/> <xi:include href="registry.xml"/> </application> - diff --git a/lib/erl_interface/doc/src/ref_man_erl_interface.xml b/lib/erl_interface/doc/src/ref_man_erl_interface.xml index fb39c5a7e4..4b1d0e9981 100644 --- a/lib/erl_interface/doc/src/ref_man_erl_interface.xml +++ b/lib/erl_interface/doc/src/ref_man_erl_interface.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>Erl_Interface Library Reference</title> @@ -50,4 +50,3 @@ <xi:include href="erl_malloc.xml"/> <xi:include href="erl_marshal.xml"/> </application> - diff --git a/lib/erl_interface/doc/src/registry.xml b/lib/erl_interface/doc/src/registry.xml index 285a2402b8..6d70fb3475 100644 --- a/lib/erl_interface/doc/src/registry.xml +++ b/lib/erl_interface/doc/src/registry.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>registry</title> @@ -28,457 +28,585 @@ <docno></docno> <approved>Gordon Beaton</approved> <checked>Gordon Beaton</checked> - <date>980707</date> + <date>1998-07-07</date> <rev>A</rev> - <file>registry.sgml</file> + <file>registry.xml</file> </header> <lib>registry</lib> - <libsummary>Store and backup key-value pairs</libsummary> + <libsummary>Store and back up key-value pairs.</libsummary> <description> <p>This module provides support for storing key-value pairs in a table known as a registry, backing up registries to - Mnesia in an atomic manner, and later restoring the contents of a - registry from Mnesia.</p> + <seealso marker="mnesia:mnesia">Mnesia</seealso> + in an atomic manner, and later restoring the contents of a + registry from <c>Mnesia</c>.</p> </description> + <funcs> <func> - <name><ret>ei_reg *</ret><nametext>ei_reg_open(size)</nametext></name> - <fsummary>Create and open a registry</fsummary> + <name><ret>int</ret><nametext>ei_reg_close(reg)</nametext></name> + <fsummary>Close a registry.</fsummary> <type> - <v>int size;</v> + <v>ei_reg *reg;</v> </type> <desc> - <p>Open (create) a registry. The registry will be - initially empty. Use <c><![CDATA[ei_reg_close()]]></c> to close the registry - later. - </p> - <p><c><![CDATA[size]]></c> is the approximate number of objects you intend - to store in the registry. Since the registry uses a hash table - with collision chaining, there is no absolute upper limit on the - number of objects that can be stored in it. However for reasons - of efficiency, it is a good idea to choose a number that is - appropriate for your needs. It is possible to use - <c><![CDATA[ei_reg_resize()]]></c> to change the size later. Note that the - number you provide will be increased to the nearest larger prime - number. - </p> - <p>On success, an empty registry will be returned. On failure, NULL - will be returned.</p> + <p>A registry that has previously been created with + <c>ei_reg_open()</c> is closed, and all the objects it + contains are freed.</p> + <p><c>reg</c> is the registry to close.</p> + <p>Returns <c>0</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_resize(reg,newsize)</nametext></name> - <fsummary>Resize a registry</fsummary> + <name><ret>int</ret><nametext>ei_reg_delete(reg,key)</nametext></name> + <fsummary>Delete an object from the registry.</fsummary> <type> <v>ei_reg *reg;</v> - <v>int newsize;</v> + <v>const char *key;</v> </type> <desc> - <p>Change the size of a registry. - </p> - <p><c><![CDATA[newsize]]></c> is the new size to make the registry. The - number will be increased to the nearest larger prime number. - </p> - <p>On success, the registry will be resized, all contents - rehashed, and the function will return 0. On failure, the - registry will be left unchanged and the function will return -1.</p> + <p>Deletes an object from the registry. The object is not + removed from the registry, it is only marked for later + removal so that on later backups to <c>Mnesia</c>, the + corresponding object can be removed from the <c>Mnesia</c> table as + well. If another object is later created with the same key, the + object will be reused. </p> + <p>The object is removed from the registry after a call to + <c>ei_reg_dump()</c> or <c>ei_reg_purge()</c>. + </p> + <list type="bulleted"> + <item><c>reg</c> is the registry containing + <c>key</c>.</item> + <item><c>key</c> is the object to remove.</item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_close(reg)</nametext></name> - <fsummary>Close a registry </fsummary> + <name><ret>int</ret><nametext>ei_reg_dump(fd,reg,mntab,flags)</nametext></name> + <fsummary>Back up a registry to Mnesia.</fsummary> <type> + <v>int fd;</v> <v>ei_reg *reg;</v> + <v>const char *mntab;</v> + <v>int flags;</v> </type> <desc> - <p>A registry that has previously been created with - <c><![CDATA[ei_reg_open()]]></c> is closed, and all the objects it contains - are freed. - </p> - <p><c><![CDATA[reg]]></c> is the registry to close. - </p> - <p>The function returns 0.</p> + <p>Dumps the contents of a registry to a <c>Mnesia</c> table in an + atomic manner, that is, either all data or no data is updated. + If any errors are encountered while backing up + the data, the entire operation is aborted.</p> + <list type="bulleted"> + <item><c>fd</c> is an open connection to Erlang. + <c>Mnesia</c> 3.0 or later must be running on the Erlang node. + </item> + <item><c>reg</c> is the registry to back up.</item> + <item><c>mntab</c> is the name of the <c>Mnesia</c> table + where the backed up data is to be placed. If the table does not + exist, it is created automatically using configurable defaults. + For information about configuring this behavior, see + <seealso marker="mnesia:mnesia"><c>Mnesia</c></seealso>.</item> + </list> + <p>If <c>flags</c> is <c>0</c>, the backup includes only + those objects that have been created, modified, or deleted since the + last backup or restore (that is, an incremental backup). After the + backup, any objects that were marked dirty are now clean, and any + objects that had been marked for deletion are deleted.</p> + <p>Alternatively, setting flags to <c>EI_FORCE</c> causes a full + backup to be done, and <c>EI_NOPURGE</c> causes the deleted objects + to be left in the registry afterwards. These can be bitwise OR'ed + together if both behaviors are desired. If <c>EI_NOPURGE</c> was + specified, <c>ei_reg_purge()</c> can be used to + explicitly remove the deleted items from the registry later.</p> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_setival(reg,key,i)</nametext></name> - <fsummary>Assign an integer object</fsummary> + <name><ret>double</ret><nametext>ei_reg_getfval(reg,key)</nametext></name> + <fsummary>Get a floating point object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>int i;</v> </type> <desc> - <p>Create a key-value pair with the specified <c><![CDATA[key]]></c> and integer - value <c><![CDATA[i]]></c>. If an object already existed with the same - <c><![CDATA[key]]></c>, the new value replaces the old one. If the previous - value was a binary or string, it is freed with <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object should be placed. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[i]]></c> is the integer value to assign. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Gets the value associated with <c>key</c> in the + registry. The value must be a floating point type.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object will be + looked up.</item> + <item><c>key</c> is the name of the object to look up. + </item> + </list> + <p>On success, the function returns the value associated with + <c>key</c>. + If the object is not found or if it is not a floating point + object, <c>-1.0</c> is returned. To avoid problems with in-band error + reporting (that is, if you cannot distinguish between <c>-1.0</c> and + a valid result), use the more general function + <c>ei_reg_getval()</c> instead.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_setfval(reg,key,f)</nametext></name> - <fsummary>Assign a floating point object</fsummary> + <name><ret>int</ret><nametext>ei_reg_getival(reg,key)</nametext></name> + <fsummary>Get an integer object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>double f;</v> </type> <desc> - <p>Create a key-value pair with the specified <c><![CDATA[key]]></c> and - floating point value <c><![CDATA[f]]></c>. If an object already existed with - the same <c><![CDATA[key]]></c>, the new value replaces the old one. If the - previous value was a binary or string, it is freed with <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object should be placed. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[f]]></c> is the floating point value to assign. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Gets the value associated with <c>key</c> in the + registry. The value must be an integer.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object will be + looked up.</item> + <item><c>key</c> is the name of the object to look up. + </item> + </list> + <p>On success, the function returns the value associated with + <c>key</c>. + If the object is not found or if it is not an integer + object, <c>-1</c> is returned. To avoid problems with in-band error + reporting (that is, if you cannot distinguish between <c>-1</c> and a + valid result), use the more general function + <c>ei_reg_getval()</c> instead.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_setsval(reg,key,s)</nametext></name> - <fsummary>Assign a string object</fsummary> + <name><ret>const void *</ret><nametext>ei_reg_getpval(reg,key,size)</nametext></name> + <fsummary>Get a binary object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>const char *s;</v> + <v>int size;</v> </type> <desc> - <p>Create a key-value pair with the specified <c><![CDATA[key]]></c> whose - "value" is the specified string <c><![CDATA[s]]></c>. If an object already - existed with the same <c><![CDATA[key]]></c>, the new value replaces the old - one. If the previous value was a binary or string, it is freed - with <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object should be placed. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[s]]></c> is the string to assign. The string itself - must have been created through a single call to <c><![CDATA[malloc()]]></c> or - similar function, so that the registry can later delete it if - necessary by calling <c><![CDATA[free()]]></c>. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Gets the value associated with <c>key</c> in the + registry. The value must be a binary (pointer) type.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object will be + looked up.</item> + <item><c>key</c> is the name of the object to look up. + </item> + <item><c>size</c> is initialized to contain the length in + bytes of the object, if it is found.</item> + </list> + <p>On success, the function returns the value associated with + <c>key</c> and indicates its length in + <c>size</c>. + If the object is not found or if it is not a binary object, + <c>NULL</c> is returned. To avoid problems with in-band error + reporting (that is, if you cannot distinguish between <c>NULL</c> and + a valid result), use the more general function + <c>ei_reg_getval()</c> instead.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_setpval(reg,key,p,size)</nametext></name> - <fsummary>Assign a binary object</fsummary> + <name><ret>const char *</ret><nametext>ei_reg_getsval(reg,key)</nametext></name> + <fsummary>Get a string object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>const void *p;</v> - <v>int size;</v> </type> <desc> - <p>Create a key-value pair with the specified <c><![CDATA[key]]></c> whose - "value" is the binary object pointed to by <c><![CDATA[p]]></c>. If an - object already existed with the same <c><![CDATA[key]]></c>, the new value - replaces the old one. If the previous value was a binary or - string, it is freed with <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object should be placed. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[p]]></c> is a pointer to the binary object. The object itself - must have been created through a single call to <c><![CDATA[malloc()]]></c> or - similar function, so that the registry can later delete it if - necessary by calling <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[size]]></c> is the length in bytes of the binary object. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Gets the value associated with <c>key</c> in the + registry. The value must be a string.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object will be + looked up.</item> + <item><c>key</c> is the name of the object to look up. + </item> + </list> + <p>On success, the function returns the value associated with + <c>key</c>. If the object is not found or if it is not a + string, <c>NULL</c> is returned. To avoid problems with in-band error + reporting (that is, if you cannot distinguish between <c>NULL</c> and + a valid result), use the more general function + <c>ei_reg_getval()</c> instead.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_setval(reg,key,flags,v,...)</nametext></name> - <fsummary>Assign a value to any object type</fsummary> + <name><ret>int</ret><nametext>ei_reg_getval(reg,key,flags,v,...)</nametext></name> + <fsummary>Get any object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> <v>int flags;</v> - <v>v (see below)</v> + <v>void *v (see below)</v> </type> <desc> - <p>Create a key-value pair with the specified <c><![CDATA[key]]></c> whose - value is specified by <c><![CDATA[v]]></c>. If an object already - existed with the same <c><![CDATA[key]]></c>, the new value replaces the old - one. If the previous value was a binary or string, it is freed - with <c><![CDATA[free()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object should be placed. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[flags]]></c> indicates the type of the object specified by - <c><![CDATA[v]]></c>. Flags must be one of EI_INT, EI_FLT, EI_STR and - EI_BIN, indicating whether <c><![CDATA[v]]></c> is <c><![CDATA[int]]></c>, <c><![CDATA[double]]></c>, - <c><![CDATA[char*]]></c> or <c><![CDATA[void*]]></c>. If <c><![CDATA[flags]]></c> is EI_BIN, then a - fifth argument <c><![CDATA[size]]></c> is required, indicating the size - in bytes of the object pointed to by <c><![CDATA[v]]></c>. - </p> - <p>If you wish to store an arbitrary pointer in the registry, - specify a <c><![CDATA[size]]></c> of 0. In this case, the object itself will - not be transferred by an <c><![CDATA[ei_reg_dump()]]></c> operation, just - the pointer value. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>A general function for retrieving any kind of + object from the registry.</p> + <list type="bulleted"> + <item> + <p><c>reg</c> is the registry where the object will be + looked up.</p> + </item> + <item> + <p><c>key</c> is the name of the object to look up.</p> + </item> + <item> + <p><c>flags</c> indicates the type of object that you + are looking for. If <c>flags</c> is <c>0</c>, any + kind of object is returned. + If <c>flags</c> is <c>EI_INT</c>, <c>EI_FLT</c>, + <c>EI_STR</c>, or <c>EI_BIN</c>, then only values of + that kind are returned.</p> + <p>The buffer pointed to by <c>v</c> + must be large enough to hold the return data, that is, it must be + a pointer to one of <c>int</c>, + <c>double</c>, <c>char*</c>, or + <c>void*</c>, respectively.</p> + <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument + <c>int *size</c> is required, so that the size of the + object can be returned.</p> + </item> + </list> + <p>On success, <c>v</c> (and <c>size</c> if the + object is binary) is initialized with the value associated + with <c>key</c>, and the function returns <c>EI_INT</c>, + <c>EI_FLT</c>, <c>EI_STR</c>, or <c>EI_BIN</c>, indicating the type + of object. On failure, <c>-1</c> is returned and the + arguments are not updated.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_getival(reg,key)</nametext></name> - <fsummary>Get an integer object</fsummary> + <name><ret>int</ret><nametext>ei_reg_markdirty(reg,key)</nametext></name> + <fsummary>Mark an object as dirty.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> </type> <desc> - <p>Get the value associated with <c><![CDATA[key]]></c> in the - registry. The value must be an integer. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object will be looked - up. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to look up. - </p> - <p>On success, the function returns the value associated with <c><![CDATA[key]]></c>. - If the object was not found or it was not an integer - object, -1 is returned. To avoid problems with in-band error - reporting (i.e. if you cannot distinguish between -1 and a - valid result) use the more general function <c><![CDATA[ei_reg_getval()]]></c> - instead.</p> + <p>Marks a registry object as dirty. This ensures that + it is included in the next backup to <c>Mnesia</c>. Normally this + operation is not necessary, as all of the normal registry + 'set' functions do this automatically. However, if you have + retrieved the value of a string or binary object from the + registry and modified the contents, then the change is + invisible to the registry and the object is assumed to be + unmodified. This function allows you to make such modifications + and then let the registry know about them.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry containing the object. + </item> + <item><c>key</c> is the name of the object to mark. + </item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>double</ret><nametext>ei_reg_getfval(reg,key)</nametext></name> - <fsummary>Get a floating point object</fsummary> + <name><ret>ei_reg *</ret><nametext>ei_reg_open(size)</nametext></name> + <fsummary>Create and open a registry.</fsummary> + <type> + <v>int size;</v> + </type> + <desc> + <p>Opens (creates) a registry, which initially is empty. To + close the registry later, use <c>ei_reg_close()</c>.</p> + <p><c>size</c> is the approximate number of objects you + intend to store in the registry. As the registry uses a hash table + with collision chaining, no absolute upper limit exists on the + number of objects that can be stored in it. However, for reasons + of efficiency, it is a good idea to choose a number that is + appropriate for your needs. To change the size later, use + <c>ei_reg_resize()</c>. Notice that the number + you provide is increased to the nearest larger prime number.</p> + <p>Returns an empty registry on success, otherwise <c>NULL</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_reg_purge(reg)</nametext></name> + <fsummary>Remove deleted objects.</fsummary> <type> <v>ei_reg *reg;</v> - <v>const char *key;</v> </type> <desc> - <p>Get the value associated with <c><![CDATA[key]]></c> in the - registry. The value must be a floating point type. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object will be looked - up. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to look up. - </p> - <p>On success, the function returns the value associated with <c><![CDATA[key]]></c>. - If the object was not found or it was not a floating point - object, -1.0 is returned. To avoid problems with in-band error - reporting (i.e. if you cannot distinguish between -1.0 and a - valid result) use the more general function <c><![CDATA[ei_reg_getval()]]></c> - instead.</p> + <p>Removes all objects marked for deletion. When objects + are deleted with <c>ei_reg_delete()</c> they are not + removed from the registry, only marked for later removal. + On a later backup to <c>Mnesia</c>, the + objects can also be removed from the <c>Mnesia</c> table. If you are + not backing up to <c>Mnesia</c>, you may wish to remove the objects + manually with this function.</p> + <p><c>reg</c> is a registry containing objects marked for + deletion.</p> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>const char *</ret><nametext>ei_reg_getsval(reg,key)</nametext></name> - <fsummary>Get a string object</fsummary> + <name><ret>int</ret><nametext>ei_reg_resize(reg,newsize)</nametext></name> + <fsummary>Resize a registry.</fsummary> + <type> + <v>ei_reg *reg;</v> + <v>int newsize;</v> + </type> + <desc> + <p>Changes the size of a registry.</p> + <p><c>newsize</c> is the new size to make the registry. The + number is increased to the nearest larger prime number.</p> + <p>On success, the registry is resized, all contents + rehashed, and <c>0</c> is returned. On failure, the + registry is left unchanged and <c>-1</c> is returned.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_reg_restore(fd,reg,mntab)</nametext></name> + <fsummary>Restore a registry from Mnesia.</fsummary> + <type> + <v>int fd;</v> + <v>ei_reg *reg;</v> + <v>const char *mntab;</v> + </type> + <desc> + <p>The contents of a <c>Mnesia</c> table are read into the registry.</p> + <list type="bulleted"> + <item><c>fd</c> is an open connection to Erlang. + <c>Mnesia</c> 3.0 or later must be running on the Erlang node. + </item> + <item><c>reg</c> is the registry where the data is to be + placed.</item> + <item><c>mntab</c> is the name of the <c>Mnesia</c> table + to read data from.</item> + </list> + <p>Notice that only tables of a certain format can be + restored, that is, those that have been created and backed up to + with <c>ei_reg_dump()</c>. If the registry was not empty + before the operation, the contents of the table are added to the + contents of the registry. If the table contains objects with the + same keys as those already in the registry, the registry objects + are overwritten with the new values. If the registry + contains objects that were not in the table, they are + unchanged by this operation.</p> + <p>After the restore operation, the entire contents of the + registry is marked as unmodified. Notice that this includes any + objects that were modified before the restore and not + overwritten by the restore.</p> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> + </desc> + </func> + + <func> + <name><ret>int</ret><nametext>ei_reg_setfval(reg,key,f)</nametext></name> + <fsummary>Assign a floating point object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> + <v>double f;</v> </type> <desc> - <p>Get the value associated with <c><![CDATA[key]]></c> in the - registry. The value must be a string. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object will be looked - up. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to look up. - </p> - <p>On success, the function returns the value associated with - <c><![CDATA[key]]></c>. If the object was not found or it was not a string, - NULL is returned. To avoid problems with in-band error - reporting (i.e. if you cannot distinguish between NULL and a - valid result) use the more general function <c><![CDATA[ei_reg_getval()]]></c> - instead.</p> + <p>Creates a key-value pair with the specified <c>key</c> + and floating point value <c>f</c>. If an object already + exists with the same <c>key</c>, the new value replaces + the old one. If the previous value was a binary or string, it is + freed with <c>free()</c>.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object is to be + placed.</item> + <item><c>key</c> is the object name.</item> + <item><c>f</c> is the floating point value to assign. + </item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>const void *</ret><nametext>ei_reg_getpval(reg,key,size)</nametext></name> - <fsummary>Get a binary object</fsummary> + <name><ret>int</ret><nametext>ei_reg_setival(reg,key,i)</nametext></name> + <fsummary>Assign an integer object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>int size;</v> + <v>int i;</v> </type> <desc> - <p>Get the value associated with <c><![CDATA[key]]></c> in the - registry. The value must be a binary (pointer) type. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object will be looked - up. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to look up. - </p> - <p><c><![CDATA[size]]></c> will be initialized to contain the length in - bytes of the object, if it is found. - </p> - <p>On success, the function returns the value associated with - <c><![CDATA[key]]></c> and indicates its length in <c><![CDATA[size]]></c>. - If the object was not found or it was not a binary object, - NULL is returned. To avoid problems with in-band error - reporting (i.e. if you cannot distinguish between NULL and a - valid result) use the more general function <c><![CDATA[ei_reg_getval()]]></c> - instead.</p> + <p>Creates a key-value pair with the specified <c>key</c> + and integer value <c>i</c>. If an object already exists + with the same <c>key</c>, the new value replaces the old + one. If the previous value was a binary or string, it is freed with + <c>free()</c>.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object is to be + placed.</item> + <item><c>key</c> is the object name.</item> + <item><c>i</c> is the integer value to assign.</item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_getval(reg,key,flags,v,...)</nametext></name> - <fsummary>Get any object</fsummary> + <name><ret>int</ret><nametext>ei_reg_setpval(reg,key,p,size)</nametext></name> + <fsummary>Assign a binary object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> - <v>int flags;</v> - <v>void *v (see below)</v> + <v>const void *p;</v> + <v>int size;</v> </type> <desc> - <p>This is a general function for retrieving any kind of - object from the registry. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the object will be looked - up. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to look up. - </p> - <p><c><![CDATA[flags]]></c> indicates the type of object that you are - looking for. If <c><![CDATA[flags]]></c> is 0, then any kind of object will - be returned. If <c><![CDATA[flags]]></c> is one of EI_INT, EI_FLT, EI_STR or - EI_BIN, then only values of that kind will be returned. The - buffer pointed to by <c><![CDATA[v]]></c> must be large enough to hold the return - data, i.e. it must be a pointer to one of <c><![CDATA[int]]></c>, - <c><![CDATA[double]]></c>, <c><![CDATA[char*]]></c> or <c><![CDATA[void*]]></c>, respectively. Also, - if <c><![CDATA[flags]]></c> is EI_BIN, then a fifth argument <c><![CDATA[int *size]]></c> is required, so that the size of the object can be - returned. - </p> - <p>If the function succeeds, <c><![CDATA[v]]></c> (and <c><![CDATA[size]]></c> if the - object is binary) will be initialized with the value associated - with <c><![CDATA[key]]></c>, and the function will return one of EI_INT, - EI_FLT, EI_STR or EI_BIN, indicating the type of object. On failure the - function will return -1 and the arguments will not be updated.</p> + <p>Creates a key-value pair with the specified <c>key</c> + whose "value" is the binary object pointed to by <c>p</c>. + If an object already exists with the same <c>key</c>, + the new value replaces the old one. If the previous value was a + binary or string, it is freed with <c>free()</c>.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object is to be + placed.</item> + <item><c>key</c> is the object name.</item> + <item><c>p</c> is a pointer to the binary object. The + object itself must have been created through a single call to + <c>malloc()</c> or a similar function, so that the + registry can later delete it if necessary by calling + <c>free()</c>.</item> + <item><c>size</c> is the length in bytes of the binary + object.</item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_markdirty(reg,key)</nametext></name> - <fsummary>Mark an object as dirty </fsummary> + <name><ret>int</ret><nametext>ei_reg_setsval(reg,key,s)</nametext></name> + <fsummary>Assign a string object.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> + <v>const char *s;</v> </type> <desc> - <p>Mark a registry object as dirty. This will ensure that - it is included in the next backup to Mnesia. Normally this - operation will not be necessary since all of the normal registry - 'set' functions do this automatically. However if you have - retrieved the value of a string or binary object from the - registry and modified the contents, then the change will be - invisible to the registry and the object will be assumed to be - unmodified. This function allows you to make such modifications - and then let the registry know about them. - </p> - <p><c><![CDATA[reg]]></c> is the registry containing the object. - </p> - <p><c><![CDATA[key]]></c> is the name of the object to mark. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + <p>Creates a key-value pair with the specified <c>key</c> + whose "value" is the specified string <c>s</c>. If an + object already exists with the same <c>key</c>, the new + value replaces the old one. If the previous value was a binary or + string, it is freed with <c>free()</c>.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry where the object is to be + placed.</item> + <item><c>key</c> is the object name.</item> + <item><c>s</c> is the string to assign. The string itself + must have been created through a single call to + <c>malloc()</c> or similar a function, + so that the registry can later delete it if + necessary by calling <c>free()</c>.</item> + </list> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> - <name><ret>int</ret><nametext>ei_reg_delete(reg,key)</nametext></name> - <fsummary>Delete an object from the registry</fsummary> + <name><ret>int</ret><nametext>ei_reg_setval(reg,key,flags,v,...)</nametext></name> + <fsummary>Assign a value to any object type.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> + <v>int flags;</v> + <v>v (see below)</v> </type> <desc> - <p>Delete an object from the registry. The object is not - actually removed from the registry, it is only marked for later - removal so that on subsequent backups to Mnesia, the - corresponding object can be removed from the Mnesia table as - well. If another object is later created with the same key, the - object will be reused. - </p> - <p>The object will be removed from the registry after a call to - <c><![CDATA[ei_reg_dump()]]></c> or <c><![CDATA[ei_reg_purge()]]></c>. - </p> - <p><c><![CDATA[reg]]></c> is the registry containing <c><![CDATA[key]]></c>. - </p> - <p><c><![CDATA[key]]></c> is the object to remove. - </p> - <p>If the object was found, the function returns 0 indicating - success. Otherwise the function returns -1.</p> + <p>Creates a key-value pair with the specified <c>key</c> + whose value is specified by <c>v</c>. If an object already + exists with the same <c>key</c>, the new value replaces + the old one. If the previous value was a binary or string, it is freed + with <c>free()</c>.</p> + <list type="bulleted"> + <item> + <p><c>reg</c> is the registry where the object is to be + placed.</p> + </item> + <item> + <p><c>key</c> is the object name.</p> + </item> + <item> + <p><c>flags</c> indicates the type of the object + specified by <c>v</c>. Flags must be one of + <c>EI_INT</c>, <c>EI_FLT</c>, <c>EI_STR</c>, and <c>EI_BIN</c>, + indicating whether + <c>v</c> is <c>int</c>, + <c>double</c>, <c>char*</c>, or + <c>void*</c>.</p> + <p>If <c>flags</c> is <c>EI_BIN</c>, a fifth argument + <c>size</c> is required, indicating the size + in bytes of the object pointed to by <c>v</c>.</p> + </item> + </list> + <p>If you wish to store an arbitrary pointer in the registry, + specify a <c>size</c> of <c>0</c>. In this case, the + object itself is not transferred by an + <c>ei_reg_dump()</c> operation, only the pointer + value.</p> + <p>Returns <c>0</c> on success, otherwise <c>-1</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_reg_stat(reg,key,obuf)</nametext></name> - <fsummary>Get object information</fsummary> + <fsummary>Get object information.</fsummary> <type> <v>ei_reg *reg;</v> <v>const char *key;</v> <v>struct ei_reg_stat *obuf;</v> </type> <desc> - <p>Return information about an object. - </p> - <p><c><![CDATA[reg]]></c> is the registry containing the object. - </p> - <p><c><![CDATA[key]]></c> is the name of the object. - </p> - <p><c><![CDATA[obuf]]></c> is a pointer to an <c><![CDATA[ei_reg_stat]]></c> structure, - defined below: - </p> + <p>Returns information about an object.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry containing the object. + </item> + <item><c>key</c> is the object name.</item> + <item><c>obuf</c> is a pointer to an + <c>ei_reg_stat</c> structure, defined as follows:</item> + </list> <code type="none"><![CDATA[ struct ei_reg_stat { int attr; int size; }; ]]></code> - <p>In <c><![CDATA[attr]]></c> the object's attributes are stored as the logical - OR of its type (one of EI_INT, EI_FLT, EI_BIN and EI_STR), - whether it is marked for deletion (EI_DELET) and whether it has - been modified since the last backup to Mnesia (EI_DIRTY). - </p> - <p>The <c><![CDATA[size]]></c> field indicates the size in bytes required to store - EI_STR (including the terminating 0) and EI_BIN objects, or 0 - for EI_INT and EI_FLT. - </p> - <p>The function returns 0 and initializes <c><![CDATA[obuf]]></c> on - success, or returns -1 on failure.</p> + <p>In <c>attr</c> the attributes of the object are stored + as the logical <em>OR</em> of its type (one of <c>EI_INT</c>, + <c>EI_FLT</c>, <c>EI_BIN</c>, and <c>EI_STR</c>), + whether it is marked for deletion (<c>EI_DELET</c>), and whether it + has been modified since the last backup to <c>Mnesia</c> + (<c>EI_DIRTY</c>).</p> + <p>Field <c>size</c> indicates the size in bytes required + to store <c>EI_STR</c> (including the terminating <c>0</c>) and + <c>EI_BIN</c> objects, or <c>0</c> for <c>EI_INT</c> and + <c>EI_FLT</c>.</p> + <p>Returns <c>0</c> and initializes <c>obuf</c> on success, + otherwise <c>-1</c>.</p> </desc> </func> + <func> <name><ret>int</ret><nametext>ei_reg_tabstat(reg,obuf)</nametext></name> - <fsummary>Get registry information</fsummary> + <fsummary>Get registry information.</fsummary> <type> <v>ei_reg *reg;</v> <v>struct ei_reg_tabstat *obuf;</v> </type> <desc> - <p>Return information about a registry. Using information + <p>Returns information about a registry. Using information returned by this function, you can see whether the size of the - registry is suitable for the amount of data it contains. - </p> - <p><c><![CDATA[reg]]></c> is the registry to return information about. - </p> - <p><c><![CDATA[obuf]]></c> is a pointer to an <c><![CDATA[ei_reg_tabstat]]></c> structure, - defined below: - </p> + registry is suitable for the amount of data it contains.</p> + <list type="bulleted"> + <item><c>reg</c> is the registry to return information + about.</item> + <item><c>obuf</c> is a pointer to an + <c>ei_reg_tabstat</c> structure, defined as follows: + </item> + </list> <code type="none"><![CDATA[ struct ei_reg_tabstat { int size; @@ -487,126 +615,23 @@ struct ei_reg_tabstat { int collisions; }; ]]></code> - <p>The <c><![CDATA[size]]></c> field indicates the number of hash positions + <p>Field <c>size</c> indicates the number of hash positions in the registry. This is the number you provided when you created or last resized the registry, rounded up to the nearest - prime. - </p> - <p><c><![CDATA[nelem]]></c> indicates the number of elements stored in the - registry. It includes objects that are deleted but not purged. - </p> - <p><c><![CDATA[npos]]></c> indicates the number of unique positions that are - occupied in the registry. - </p> - <p><c><![CDATA[collisions]]></c> indicates how many elements are sharing - positions in the registry. - </p> - <p>On success, the function returns 0 and <c><![CDATA[obuf]]></c> is - initialized to contain table statistics. On failure, the function - returns -1.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_reg_dump(fd,reg,mntab,flags)</nametext></name> - <fsummary>Back up a registry to Mnesia</fsummary> - <type> - <v>int fd;</v> - <v>ei_reg *reg;</v> - <v>const char *mntab;</v> - <v>int flags;</v> - </type> - <desc> - <p>Dump the contents of a registry to a Mnesia table in an - atomic manner, i.e. either all data will be updated, or none of - it will. If any errors are encountered while backing up - the data, the entire operation is aborted. - </p> - <p><c><![CDATA[fd]]></c> is an open connection to Erlang. - Mnesia 3.0 or later must be running on the Erlang node. - </p> - <p><c><![CDATA[reg]]></c> is the registry to back up. - </p> - <p><c><![CDATA[mntab]]></c> is the name of the Mnesia table where the backed - up data should be placed. If the table does not exist, it will - be created automatically using configurable defaults. See your - Mnesia documentation for information about configuring this - behaviour. - </p> - <p>If <c><![CDATA[flags]]></c> is 0, the backup will include only those - objects which have been created, modified or deleted since the - last backup or restore (i.e. an incremental backup). After the - backup, any objects that were marked dirty are now clean, and any - objects that had been marked for deletion are deleted. - </p> - <p>Alternatively, setting flags to EI_FORCE will cause a full - backup to be done, and EI_NOPURGE will cause the deleted objects - to be left in the registry afterwards. These can be bitwise ORed - together if both behaviours are desired. If EI_NOPURGE was - specified, you can use <c><![CDATA[ei_reg_purge()]]></c> to explicitly remove - the deleted items from the registry later. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_reg_restore(fd,reg,mntab)</nametext></name> - <fsummary>Restore a registry from Mnesia</fsummary> - <type> - <v>int fd;</v> - <v>ei_reg *reg;</v> - <v>const char *mntab;</v> - </type> - <desc> - <p>The contents of a Mnesia table are read into the - registry. - </p> - <p><c><![CDATA[fd]]></c> is an open connection to Erlang. - Mnesia 3.0 or later must be running on the Erlang node. - </p> - <p><c><![CDATA[reg]]></c> is the registry where the data should be placed. - </p> - <p><c><![CDATA[mntab]]></c> is the name of the Mnesia table to read data - from. - </p> - <p>Note that only tables of a certain format can be - restored, i.e. those that have been created and backed up to - with <c><![CDATA[ei_reg_dump()]]></c>. If the registry was not empty before - the operation, then the contents of the table are added to the - contents of the registry. If the table contains objects with the - same keys as those already in the registry, the registry objects - will be overwritten with the new values. If the registry - contains objects that were not in the table, they will be - unchanged by this operation. - </p> - <p>After the restore operation, the entire contents of the - registry is marked as unmodified. Note that this includes any - objects that were modified before the restore and not - overwritten by the restore. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> - </desc> - </func> - <func> - <name><ret>int</ret><nametext>ei_reg_purge(reg)</nametext></name> - <fsummary>Remove deleted objects</fsummary> - <type> - <v>ei_reg *reg;</v> - </type> - <desc> - <p>Remove all objects marked for deletion. When objects - are deleted with <c><![CDATA[ei_reg_delete()]]></c> they are not actually - removed from the registry, only marked for later removal. This - is so that on a subsequent backup to Mnesia, the - objects can also be removed from the Mnesia table. If you are - not backing up to Mnesia then you may wish to remove the objects - manually with this function. - </p> - <p><c><![CDATA[reg]]></c> is a registry containing objects marked for - deletion. - </p> - <p>The function returns 0 on success, or -1 on failure.</p> + prime number.</p> + <list type="bulleted"> + <item><c>nelem</c> indicates the number of elements stored + in the registry. It includes objects that are deleted but not + purged.</item> + <item><c>npos</c> indicates the number of unique positions + that are occupied in the registry.</item> + <item><c>collisions</c> indicates how many elements are + sharing positions in the registry.</item> + </list> + <p>On success, <c>0</c> is returned and + <c>obuf</c> is initialized to contain table statistics, + otherwise <c>-1</c> is returned.</p> </desc> </func> </funcs> </cref> - diff --git a/lib/erl_interface/src/connect/ei_connect.c b/lib/erl_interface/src/connect/ei_connect.c index 624100ad49..c193fd804a 100644 --- a/lib/erl_interface/src/connect/ei_connect.c +++ b/lib/erl_interface/src/connect/ei_connect.c @@ -423,7 +423,7 @@ int ei_connect_xinit(ei_cnode* ec, const char *thishostname, } #endif /* _REENTRANT */ - ec->creation = creation; + ec->creation = creation & 0x3; /* 2 bits */ if (cookie) { if (strlen(cookie) >= sizeof(ec->ei_connect_cookie)) { @@ -462,7 +462,7 @@ int ei_connect_xinit(ei_cnode* ec, const char *thishostname, strcpy(ec->self.node,thisnodename); ec->self.num = 0; ec->self.serial = 0; - ec->self.creation = creation; + ec->self.creation = creation & 0x3; /* 2 bits */ if ((dbglevel = getenv("EI_TRACELEVEL")) != NULL || (dbglevel = getenv("ERL_DEBUG_DIST")) != NULL) diff --git a/lib/hipe/icode/hipe_beam_to_icode.erl b/lib/hipe/icode/hipe_beam_to_icode.erl index 224aacd8d7..3386523206 100644 --- a/lib/hipe/icode/hipe_beam_to_icode.erl +++ b/lib/hipe/icode/hipe_beam_to_icode.erl @@ -763,32 +763,10 @@ trans_fun([{test,bs_test_unit,{f,Lbl},[Ms,Unit]}| [MsVar], [], Env, Instructions); trans_fun([{test,bs_match_string,{f,Lbl},[Ms,BitSize,Bin]}| Instructions], Env) -> - True = mk_label(new), - FalseLabName = map_label(Lbl), - TrueLabName = hipe_icode:label_name(True), + %% the current match buffer MsVar = mk_var(Ms), - TmpVar = mk_var(new), - ByteSize = BitSize div 8, - ExtraBits = BitSize rem 8, - WordSize = hipe_rtl_arch:word_size(), - if ExtraBits =:= 0 -> - trans_op_call({hipe_bs_primop,{bs_match_string,Bin,ByteSize}}, Lbl, - [MsVar], [MsVar], Env, Instructions); - BitSize =< ((WordSize * 8) - 5) -> - <<Int:BitSize, _/bits>> = Bin, - {I1,Env1} = trans_one_op_call({hipe_bs_primop,{bs_get_integer,BitSize,0}}, Lbl, - [MsVar], [TmpVar, MsVar], Env), - I2 = hipe_icode:mk_type([TmpVar], {integer,Int}, TrueLabName, FalseLabName), - I1 ++ [I2,True] ++ trans_fun(Instructions, Env1); - true -> - <<RealBin:ByteSize/binary, Int:ExtraBits, _/bits>> = Bin, - {I1,Env1} = trans_one_op_call({hipe_bs_primop,{bs_match_string,RealBin,ByteSize}}, Lbl, - [MsVar], [MsVar], Env), - {I2,Env2} = trans_one_op_call({hipe_bs_primop,{bs_get_integer,ExtraBits,0}}, Lbl, - [MsVar], [TmpVar, MsVar], Env1), - I3 = hipe_icode:mk_type([TmpVar], {integer,Int}, TrueLabName, FalseLabName), - I1 ++ I2 ++ [I3,True] ++ trans_fun(Instructions, Env2) - end; + Primop = {hipe_bs_primop, {bs_match_string, Bin, BitSize}}, + trans_op_call(Primop, Lbl, [MsVar], [MsVar], Env, Instructions); trans_fun([{bs_context_to_binary,Var}|Instructions], Env) -> %% the current match buffer IVars = [trans_arg(Var)], diff --git a/lib/hipe/icode/hipe_icode_primops.erl b/lib/hipe/icode/hipe_icode_primops.erl index cee37b6a57..2a141c514e 100644 --- a/lib/hipe/icode/hipe_icode_primops.erl +++ b/lib/hipe/icode/hipe_icode_primops.erl @@ -287,8 +287,8 @@ pp(Dev, Op) -> io:format(Dev, "bs_start_match<~w>", [Max]); {{bs_start_match, Type}, Max} -> io:format(Dev, "bs_start_match<~w,~w>", [Type,Max]); - {bs_match_string, String, SizeInBytes} -> - io:format(Dev, "bs_match_string<~w, ~w>", [String, SizeInBytes]); + {bs_match_string, String, SizeInBits} -> + io:format(Dev, "bs_match_string<~w, ~w>", [String, SizeInBits]); {bs_get_integer, Size, Flags} -> io:format(Dev, "bs_get_integer<~w, ~w>", [Size, Flags]); {bs_get_float, Size, Flags} -> @@ -596,10 +596,10 @@ type(Primop, Args) -> erl_types:t_subtract(Type, erl_types:t_matchstate()), erl_types:t_matchstate_slot( erl_types:t_inf(Type, erl_types:t_matchstate()), 0)); - {hipe_bs_primop, {bs_match_string,_,Bytes}} -> + {hipe_bs_primop, {bs_match_string,_,Bits}} -> [MatchState] = Args, BinType = erl_types:t_matchstate_present(MatchState), - NewBinType = match_bin(erl_types:t_bitstr(0, Bytes*8), BinType), + NewBinType = match_bin(erl_types:t_bitstr(0, Bits), BinType), erl_types:t_matchstate_update_present(NewBinType, MatchState); {hipe_bs_primop, {bs_test_unit,Unit}} -> [MatchState] = Args, diff --git a/lib/hipe/llvm/hipe_llvm_main.erl b/lib/hipe/llvm/hipe_llvm_main.erl index 476d6fb49c..7f70826046 100644 --- a/lib/hipe/llvm/hipe_llvm_main.erl +++ b/lib/hipe/llvm/hipe_llvm_main.erl @@ -84,7 +84,7 @@ compile_with_llvm(FunName, Arity, LLVMCode, Options, UseBuffer) -> __ = file:close(File_llvm), %% Invoke LLVM compiler tools to produce an object file llvm_opt(Dir, Filename, Options), - llvm_llc(Dir, Filename, Options), + llvm_llc(Dir, Filename, Ver, Options), compile(Dir, Filename, "gcc"), %%FIXME: use llc -filetype=obj and skip this! {ok, Dir, Dir ++ Filename ++ ".o"}. @@ -103,12 +103,14 @@ llvm_opt(Dir, Filename, Options) -> %% @doc Invoke llc tool to compile the bitcode to object file %% (_name.bc -> _name.o). -llvm_llc(Dir, Filename, Options) -> +llvm_llc(Dir, Filename, Ver, Options) -> Source = Dir ++ Filename ++ ".bc", OptLevel = trans_optlev_flag(llc, Options), + VerFlags = llc_ver_flags(Ver), Align = find_stack_alignment(), LlcFlags = [OptLevel, "-code-model=medium", "-stack-alignment=" ++ Align - , "-tailcallopt", "-filetype=asm"], %%FIXME + , "-tailcallopt", "-filetype=asm" %FIXME + | VerFlags], Command = "llc " ++ fix_opts(LlcFlags) ++ " " ++ Source, %% io:format("LLC: ~s~n", [Command]), case os:cmd(Command) of @@ -153,6 +155,12 @@ trans_optlev_flag(Tool, Options) -> undefined -> "-O2" end. +llc_ver_flags(Ver = {_, _}) when Ver >= {3,9} -> + %% Works around a bug in the x86-call-frame-opt pass (as of LLVM 3.9) that + %% break the garbage collection stack descriptors. + ["-no-x86-call-frame-opt"]; +llc_ver_flags({_, _}) -> []. + %%------------------------------------------------------------------------------ %% Functions to manage Relocations %%------------------------------------------------------------------------------ diff --git a/lib/hipe/llvm/hipe_rtl_to_llvm.erl b/lib/hipe/llvm/hipe_rtl_to_llvm.erl index 66b2e10fb8..2179f7f765 100644 --- a/lib/hipe/llvm/hipe_rtl_to_llvm.erl +++ b/lib/hipe/llvm/hipe_rtl_to_llvm.erl @@ -10,7 +10,8 @@ -include("../rtl/hipe_literals.hrl"). -include("hipe_llvm_arch.hrl"). --define(WORD_WIDTH, (?bytes_to_bits(hipe_rtl_arch:word_size()))). +-define(BITS_IN_WORD, (?bytes_to_bits(hipe_rtl_arch:word_size()))). +-define(BITS_IN_BYTE, (?bytes_to_bits(1))). -define(BRANCH_META_TAKEN, "0"). -define(BRANCH_META_NOT_TAKEN, "1"). -define(FIRST_FREE_META_NO, 2). @@ -95,9 +96,9 @@ do_alloca_stack([], _, _, Acc) -> Acc; do_alloca_stack([D|Ds], Params, Roots, Acc) -> {Name, _I} = trans_dst(D), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), - ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(8)), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), case hipe_rtl:is_var(D) of true -> Num = hipe_rtl:var_index(D), @@ -233,7 +234,7 @@ trans_alu(I, Relocs) -> {Src1, I1} = trans_src(hipe_rtl:alu_src1(I)), {Src2, I2} = trans_src(hipe_rtl:alu_src2(I)), Op = trans_op(hipe_rtl:alu_op(I)), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I3 = hipe_llvm:mk_operation(TmpDst, Op, WordTy, Src1, Src2, []), I4 = store_stack_dst(TmpDst, RtlDst), {[I4, I3, I2, I1], Relocs}. @@ -258,7 +259,7 @@ trans_alub_overflow(I, Sign, Relocs) -> TmpDst = mk_temp(), Name = trans_alub_op(I, Sign), NewRelocs = relocs_store(Name, {call, {llvm, Name, 2}}, Relocs), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), ReturnType = hipe_llvm:mk_struct([WordTy, hipe_llvm:mk_int(1)]), T1 = mk_temp(), I3 = hipe_llvm:mk_call(T1, false, [], [], ReturnType, "@" ++ Name, @@ -320,7 +321,7 @@ trans_alub_no_overflow(I, Relocs) -> {Dst, I2} = trans_src(hipe_rtl:alub_dst(I)), Cond = trans_rel_op(hipe_rtl:alub_cond(I)), T3 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I5 = hipe_llvm:mk_icmp(T3, Cond, WordTy, Dst, "0"), %% br Metadata = branch_metadata(hipe_rtl:alub_pred(I)), @@ -338,7 +339,7 @@ trans_branch(I, Relocs) -> Cond = trans_rel_op(hipe_rtl:branch_cond(I)), %% icmp T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I3 = hipe_llvm:mk_icmp(T1, Cond, WordTy, Src1, Src2), %% br True_label = mk_jump_label(hipe_rtl:branch_true_label(I)), @@ -366,7 +367,7 @@ trans_call(I, Relocs) -> {Name, I3, Relocs2} = trans_call_name(RtlCallName, Relocs1, CallArgs, FinalArgs), T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), I4 = case hipe_rtl:call_fail(I) of @@ -450,7 +451,7 @@ trans_call_name(RtlCallName, Relocs, CallArgs, FinalArgs) -> %% order to make the call TT1 = mk_temp(), {RegName, II1} = trans_src(Reg), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), II2 = hipe_llvm:mk_conversion(TT1, inttoptr, WordTy, RegName, WordTyPtr), @@ -503,7 +504,7 @@ trans_enter(I, Relocs) -> {Name, I2, NewRelocs} = trans_call_name(hipe_rtl:enter_fun(I), Relocs, CallArgs, FinalArgs), T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), I3 = hipe_llvm:mk_call(T1, true, "cc 11", [], FunRetTy, Name, FinalArgs, []), I4 = hipe_llvm:mk_ret([{FunRetTy, T1}]), @@ -518,7 +519,7 @@ trans_fconv(I, Relocs) -> TmpDst = mk_temp(), {Src, I1} = trans_float_src(hipe_rtl:fconv_src(I)), FloatTy = hipe_llvm:mk_double(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I2 = hipe_llvm:mk_conversion(TmpDst, sitofp, WordTy, Src, FloatTy), I3 = store_float_stack(TmpDst, RtlDst), {[I3, I2, I1], Relocs}. @@ -538,7 +539,7 @@ trans_fload(I, Relocs) -> {Src, I1} = trans_float_src(RtlSrc), {Offset, I2} = trans_float_src(_Offset), T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FloatTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_double()), I3 = hipe_llvm:mk_operation(T1, add, WordTy, Src, Offset, []), T2 = mk_temp(), @@ -619,7 +620,7 @@ trans_fstore(I, Relocs) -> trans_fstore_reg(I, Relocs) -> {Base, I0} = trans_reg(hipe_rtl:fstore_base(I), dst), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), FloatTy = hipe_llvm:mk_double(), FloatTyPtr = hipe_llvm:mk_pointer(FloatTy), @@ -659,7 +660,7 @@ trans_load(I, Relocs) -> {Src, I1} = trans_src(hipe_rtl:load_src(I)), {Offset, I2} = trans_src(hipe_rtl:load_offset(I)), T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), I3 = hipe_llvm:mk_operation(T1, add, WordTy, Src, Offset, []), %%---------------------------------------------------------------- @@ -737,7 +738,7 @@ trans_move(I, Relocs) -> %% return %% trans_return(I, Relocs) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), {VarRet, I1} = case hipe_rtl:return_varlist(I) of [] -> @@ -777,7 +778,7 @@ trans_store(I, Relocs) -> {Offset, I2} = trans_src(hipe_rtl:store_offset(I)), {Value, I3} = trans_src(hipe_rtl:store_src(I)), T1 = mk_temp(), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), I4 = hipe_llvm:mk_operation(T1, add, WordTy, Base, Offset, []), I5 = @@ -811,14 +812,14 @@ trans_switch(I, Relocs, Data) -> JumpLabels = [mk_jump_label(L) || L <- Labels], SortOrder = hipe_rtl:switch_sort_order(I), NrLabels = length(Labels), - ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(8)), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), TableType = hipe_llvm:mk_array(NrLabels, ByteTyPtr), TableTypeP = hipe_llvm:mk_pointer(TableType), TypedJumpLabels = [{hipe_llvm:mk_label_type(), X} || X <- JumpLabels], T1 = mk_temp(), {Src2, []} = trans_dst(RtlSrc), TableName = "table_" ++ tl(Src2), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I2 = hipe_llvm:mk_getelementptr(T1, TableTypeP, "@"++TableName, [{WordTy, "0"}, {WordTy, Src}], false), T2 = mk_temp(), @@ -933,7 +934,7 @@ create_fail_blocks(Label, FailLabels, Acc) -> false -> Acc; {value, {Label, FailLabel, SpAdj}, RestFailLabels} -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), I1 = hipe_llvm:mk_label(FailLabel), LP = hipe_llvm:mk_landingpad(), I2 = @@ -962,7 +963,7 @@ create_fail_blocks(Label, FailLabels, Acc) -> %% @doc Convert RTL argument list to LLVM argument list. trans_args(ArgList) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), MakeArg = fun(A) -> {Name, I1} = trans_src(A), @@ -972,13 +973,13 @@ trans_args(ArgList) -> %% @doc Convert a list of Precoloured registers to LLVM argument list. fix_reg_args(ArgList) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), [{WordTy, A} || A <- ArgList]. %% @doc Load Precoloured registers. load_fixed_regs(RegList) -> Names = [mk_temp_reg(R) || R <- RegList], - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), Fun1 = fun (X, Y) -> @@ -991,7 +992,7 @@ load_fixed_regs(RegList) -> store_fixed_regs(RegList, Name) -> Names = [mk_temp_reg(R) || R <- RegList], Indexes = lists:seq(0, erlang:length(RegList) - 1), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), Fun1 = @@ -1060,7 +1061,7 @@ mk_temp_reg(Name) -> store_stack_dst(TempDst, Dst) -> {Dst2, II1} = trans_dst(Dst), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), II2 = hipe_llvm:mk_store(WordTy, TempDst, WordTyPtr, Dst2, [], [], false), [II2, II1]. @@ -1078,7 +1079,7 @@ trans_float_src(Src) -> Name = "@DL" ++ integer_to_list(hipe_rtl:const_label_label(Src)), T1 = mk_temp(), %% XXX: Hardcoded offset - ByteTy = hipe_llvm:mk_int(8), + ByteTy = hipe_llvm:mk_int(?BITS_IN_BYTE), ByteTyPtr = hipe_llvm:mk_pointer(ByteTy), I1 = hipe_llvm:mk_getelementptr(T1, ByteTyPtr, Name, [{ByteTy, integer_to_list(?FLOAT_OFFSET)}], true), @@ -1094,7 +1095,7 @@ trans_float_src(Src) -> end. trans_src(A) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), case hipe_rtl:is_imm(A) of true -> @@ -1197,7 +1198,7 @@ map_precoloured_reg(Index) -> fix_reg_dst(Register) -> case Register of {Name, Offset} -> %% Case of %fcalls, %hplim - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), pointer_from_reg(Name, WordTy, Offset); Name -> %% Case of %p and %hp {Name, []} @@ -1205,7 +1206,7 @@ fix_reg_dst(Register) -> %% @doc Load precoloured src register. fix_reg_src(Register) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), case Register of {Name, Offset} -> %% Case of %fcalls, %hplim @@ -1327,10 +1328,10 @@ insn_dst(I) -> llvm_type_from_size(Size) -> case Size of - byte -> hipe_llvm:mk_int(8); + byte -> hipe_llvm:mk_int(?BITS_IN_BYTE); int16 -> hipe_llvm:mk_int(16); int32 -> hipe_llvm:mk_int(32); - word -> hipe_llvm:mk_int(64) + word -> hipe_llvm:mk_int(?BITS_IN_WORD) end. %% @doc Create definition for the compiled function. The parameters that are @@ -1360,13 +1361,13 @@ create_function_definition(Fun, Params, Code, LocalVars) -> lists:flatten([EntryLabel, ExceptionSync, I2, LocalVars, StoredParams, I3]), Final_Code = EntryBlock ++ Code, FunctionOptions = [nounwind, noredzone, list_to_atom("gc \"erlang\"")], - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), hipe_llvm:mk_fun_def([], [], "cc 11", [], FunRetTy, FunctionName, Args, FunctionOptions, [], Final_Code). header_params(Params) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), [{WordTy, "%v" ++ integer_to_list(hipe_rtl:var_index(P))} || P <- Params]. store_params(Params) -> @@ -1375,7 +1376,7 @@ store_params(Params) -> Index = hipe_rtl:var_index(X), {Name, _} = trans_dst(X), ParamName = "%v" ++ integer_to_list(Index), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), hipe_llvm:mk_store(WordTy, ParamName, WordTyPtr, Name, [], [], false) end, @@ -1392,11 +1393,11 @@ fixed_registers() -> end. header_regs(Registers) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), [{WordTy, "%" ++ X ++ "_in"} || X <- Registers]. load_regs(Registers) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), WordTyPtr = hipe_llvm:mk_pointer(WordTy), Fun1 = fun(X) -> @@ -1496,28 +1497,30 @@ seperate_relocs([R|Rs], CallAcc, AtomAcc, ClosureAcc, LabelAcc, JmpTableAcc) -> %% @doc External declaration of an atom. declare_atom({AtomName, _}) -> - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), - hipe_llvm:mk_const_decl("@" ++ AtomName, "external constant", WordTy, ""). + %% The type has to be byte, or a backend might assume the constant is aligned + %% and incorrectly optimise away type tests + ByteTy = hipe_llvm:mk_int(?BITS_IN_BYTE), + hipe_llvm:mk_const_decl("@" ++ AtomName, "external constant", ByteTy, ""). %% @doc Creation of local variable for an atom. load_atom({AtomName, _}) -> Dst = "%" ++ AtomName ++ "_var", Name = "@" ++ AtomName, - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), - WordTyPtr = hipe_llvm:mk_pointer(WordTy), - hipe_llvm:mk_conversion(Dst, ptrtoint, WordTyPtr, Name, WordTy). + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), + hipe_llvm:mk_conversion(Dst, ptrtoint, ByteTyPtr, Name, WordTy). %% @doc External declaration of a closure. declare_closure({ClosureName, _})-> - ByteTy = hipe_llvm:mk_int(8), + ByteTy = hipe_llvm:mk_int(?BITS_IN_BYTE), hipe_llvm:mk_const_decl("@" ++ ClosureName, "external constant", ByteTy, ""). %% @doc Creation of local variable for a closure. load_closure({ClosureName, _})-> Dst = "%" ++ ClosureName ++ "_var", Name = "@" ++ ClosureName, - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), - ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(8)), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), hipe_llvm:mk_conversion(Dst, ptrtoint, ByteTyPtr, Name, WordTy). %% @doc Declaration of a local variable for a switch jump table. @@ -1548,7 +1551,7 @@ declare_closure_labels(ClosureLabels, Relocs, Fun) -> List3 = string:join(List2, ",\n"), List4 = "[\n" ++ List3 ++ "\n]\n", NrLabels = length(LabelList), - ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(8)), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), TableType = hipe_llvm:mk_array(NrLabels, ByteTyPtr), ConstDecl = hipe_llvm:mk_const_decl("@table_closures", "constant", TableType, List4), @@ -1563,7 +1566,7 @@ is_external_call(_, _) -> true. call_to_decl({Name, {call, MFA}}) -> {M, _F, A} = MFA, CConv = "cc 11", - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), {Type, Args} = case M of @@ -1578,14 +1581,14 @@ call_to_decl({Name, {call, MFA}}) -> %% @doc These functions are always declared, even if not used. fixed_fun_decl() -> - ByteTy = hipe_llvm:mk_int(8), + ByteTy = hipe_llvm:mk_int(?BITS_IN_BYTE), ByteTyPtr = hipe_llvm:mk_pointer(ByteTy), LandPad = hipe_llvm:mk_fun_decl([], [], [], [], hipe_llvm:mk_int(32), "@__gcc_personality_v0", [hipe_llvm:mk_int(32), hipe_llvm:mk_int(64), ByteTyPtr, ByteTyPtr], []), GCROOTDecl = hipe_llvm:mk_fun_decl([], [], [], [], hipe_llvm:mk_void(), "@llvm.gcroot", [hipe_llvm:mk_pointer(ByteTyPtr), ByteTyPtr], []), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), FunRetTy = hipe_llvm:mk_struct(lists:duplicate(?NR_PINNED_REGS + 1, WordTy)), FixPinnedRegs = hipe_llvm:mk_fun_decl([], [], [], [], FunRetTy, "@hipe_bifs.llvm_fix_pinned_regs.0", [], []), @@ -1599,7 +1602,7 @@ fixed_fun_decl() -> %% values, add the offset and convert them again to pointers. declare_constant(Label) -> Name = "@DL" ++ integer_to_list(Label), - ByteTy = hipe_llvm:mk_int(8), + ByteTy = hipe_llvm:mk_int(?BITS_IN_BYTE), hipe_llvm:mk_const_decl(Name, "external constant", ByteTy, ""). %% @doc Load a constant is achieved by converting a pointer to an integer of @@ -1607,8 +1610,8 @@ declare_constant(Label) -> load_constant(Label) -> Dst = "%DL" ++ integer_to_list(Label) ++ "_var", Name = "@DL" ++ integer_to_list(Label), - WordTy = hipe_llvm:mk_int(?WORD_WIDTH), - ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(8)), + WordTy = hipe_llvm:mk_int(?BITS_IN_WORD), + ByteTyPtr = hipe_llvm:mk_pointer(hipe_llvm:mk_int(?BITS_IN_BYTE)), hipe_llvm:mk_conversion(Dst, ptrtoint, ByteTyPtr, Name, WordTy). %% @doc Store external constants and calls to dictionary. diff --git a/lib/hipe/rtl/hipe_rtl_binary.erl b/lib/hipe/rtl/hipe_rtl_binary.erl index fb9c0c196d..9b400f4c93 100644 --- a/lib/hipe/rtl/hipe_rtl_binary.erl +++ b/lib/hipe/rtl/hipe_rtl_binary.erl @@ -19,7 +19,7 @@ %%% %CopyrightEnd% %%% %%%------------------------------------------------------------------- -%%% File : hipe_rtl_binary_2.erl +%%% File : hipe_rtl_binary.erl %%% Author : Per Gustafsson <[email protected]> %%% Description : %%% diff --git a/lib/hipe/rtl/hipe_rtl_binary_match.erl b/lib/hipe/rtl/hipe_rtl_binary_match.erl index 528672b893..d999cd2743 100644 --- a/lib/hipe/rtl/hipe_rtl_binary_match.erl +++ b/lib/hipe/rtl/hipe_rtl_binary_match.erl @@ -270,24 +270,23 @@ gen_rtl({bs_save, Slot}, [NewMs], [Ms], TrueLblName, _FalseLblName) -> set_field_from_term({matchstate, {saveoffset, Slot}}, Ms, Offset), hipe_rtl:mk_goto(TrueLblName)]; %% ----- bs_match_string ----- -gen_rtl({bs_match_string, String, ByteSize}, Dst, [Ms], +gen_rtl({bs_match_string, String, BitSize}, Dst, [Ms], TrueLblName, FalseLblName) -> {[Offset, BinSize, Base], Instrs} = extract_matchstate_vars([offset, binsize, base], Ms), [SuccessLbl, ALbl, ULbl] = create_lbls(3), [NewOffset, BitOffset] = create_gcsafe_regs(2), - Unit = hipe_rtl_arch:word_size() - 1, - Loops = ByteSize div Unit, - Init = + Unit = (hipe_rtl_arch:word_size() - 1) * ?BYTE_SIZE, + Init = [Instrs, opt_update_ms(Dst, Ms), - check_size(Offset, hipe_rtl:mk_imm(ByteSize*?BYTE_SIZE), BinSize, + check_size(Offset, hipe_rtl:mk_imm(BitSize), BinSize, NewOffset, hipe_rtl:label_name(SuccessLbl), FalseLblName), SuccessLbl], SplitCode = [hipe_rtl:mk_alub(BitOffset, Offset, 'and', hipe_rtl:mk_imm(?LOW_BITS), eq, hipe_rtl:label_name(ALbl), hipe_rtl:label_name(ULbl))], - Loops = ByteSize div Unit, + Loops = BitSize div Unit, SkipSize = Loops * Unit, {ACode1, UCode1} = case Loops of @@ -297,9 +296,9 @@ gen_rtl({bs_match_string, String, ByteSize}, Dst, [Ms], create_loops(Loops, Unit, String, Base, Offset, BitOffset, FalseLblName) end, - <<_:SkipSize/binary, RestString/binary>> = String, + <<_:SkipSize/bits, RestString/bits>> = String, {ACode2, UCode2} = - case ByteSize rem Unit of + case BitSize rem Unit of 0 -> {[], []}; Rem -> @@ -393,12 +392,12 @@ validate_unicode_retract_c_code(Src, Ms, TrueLblName, FalseLblName) -> create_loops(Loops, Unit, String, Base, Offset, BitOffset, FalseLblName) -> [Reg] = create_gcsafe_regs(1), AlignedFun = fun(Value) -> - [get_int_to_reg(Reg, Unit*?BYTE_SIZE, Base, Offset, 'srl', + [get_int_to_reg(Reg, Unit, Base, Offset, 'srl', {unsigned, big}), update_and_test(Reg, Unit, Offset, Value, FalseLblName)] end, UnAlignedFun = fun(Value) -> - [get_unaligned_int_to_reg(Reg, Unit*?BYTE_SIZE, + [get_unaligned_int_to_reg(Reg, Unit, Base, Offset, BitOffset, 'srl', {unsigned, big})| update_and_test(Reg, Unit, Offset, Value, FalseLblName)] @@ -406,31 +405,31 @@ create_loops(Loops, Unit, String, Base, Offset, BitOffset, FalseLblName) -> {create_loops(Loops, Unit, String, AlignedFun), create_loops(Loops, Unit, String, UnAlignedFun)}. -create_rests(Rem, String, Base, Offset, BitOffset, FalseLblName) -> +create_rests(RemBits, String, Base, Offset, BitOffset, FalseLblName) -> [Reg] = create_gcsafe_regs(1), AlignedFun = fun(Value) -> - [get_int_to_reg(Reg, Rem*?BYTE_SIZE, Base, Offset, 'srl', + [get_int_to_reg(Reg, RemBits, Base, Offset, 'srl', {unsigned, big})| just_test(Reg, Value, FalseLblName)] end, UnAlignedFun = fun(Value) -> - [get_unaligned_int_to_reg(Reg, Rem*?BYTE_SIZE, + [get_unaligned_int_to_reg(Reg, RemBits, Base, Offset, BitOffset, 'srl', {unsigned, big})| just_test(Reg, Value, FalseLblName)] end, - {create_loops(1, Rem, String, AlignedFun), - create_loops(1, Rem, String, UnAlignedFun)}. + {create_loops(1, RemBits, String, AlignedFun), + create_loops(1, RemBits, String, UnAlignedFun)}. create_loops(0, _Unit, _String, _IntFun) -> []; create_loops(N, Unit, String, IntFun) -> - {Value, RestString} = get_value(Unit,String), + {Value, RestString} = get_value(Unit, String), [IntFun(Value), create_loops(N-1, Unit, RestString, IntFun)]. update_and_test(Reg, Unit, Offset, Value, FalseLblName) -> - [add_to_offset(Offset, Offset, hipe_rtl:mk_imm(Unit*?BYTE_SIZE), FalseLblName), + [add_to_offset(Offset, Offset, hipe_rtl:mk_imm(Unit), FalseLblName), just_test(Reg, Value, FalseLblName)]. just_test(Reg, Value, FalseLblName) -> @@ -439,8 +438,8 @@ just_test(Reg, Value, FalseLblName) -> hipe_rtl:label_name(ContLbl), FalseLblName), ContLbl]. -get_value(N,String) -> - <<I:N/integer-unit:8, Rest/binary>> = String, +get_value(N, String) -> + <<I:N, Rest/bits>> = String, {I, Rest}. make_int_gc_code(I) when is_integer(I) -> diff --git a/lib/hipe/test/bs_SUITE_data/bs_pmatch_bugs.erl b/lib/hipe/test/bs_SUITE_data/bs_pmatch_bugs.erl index b280705a47..d9f3278b45 100644 --- a/lib/hipe/test/bs_SUITE_data/bs_pmatch_bugs.erl +++ b/lib/hipe/test/bs_SUITE_data/bs_pmatch_bugs.erl @@ -9,6 +9,7 @@ test() -> <<49,50,51>> = lex_digits1(Bin, 1, []), <<49,50,51>> = lex_digits2(Bin, 1, []), ok = var_bind_bug(<<1, 2, 3, 4, 5, 6, 7, 8>>), + ok = bs_match_string_bug(), ok. %%-------------------------------------------------------------------- @@ -65,3 +66,50 @@ var_bind_bug(<<A:1/binary, B:8/integer, _C:B/binary, _Rest/binary>>) -> B -> wrong; _ -> ok end. + +%%-------------------------------------------------------------------- +%% From: Andreas Schultz +%% Date: 2/11/2016 +%% +%% Either HiPE is messing up binary matches in some cases or I'm not +%% seeing the problem. ... <SNIP PROGRAM - CLEANED UP VERSION BELOW> +%% With Erlang 19.1.3 the HiPE compiled version behaves differently +%% than the non-HiPE version: ... <SNIP TEST RUNS> +%% So, do I do something wrong here or is this a legitimate HiPE bug? +%% +%% Yes, this was a legitimate HiPE bug: The BEAM to ICode tranaslation +%% of the bs_match_string instruction, written long ago for binaries +%% (i.e., with byte-sized strings), tried to do a `clever' translation +%% of even bit-sized strings using a HiPE primop that took a `Size' +%% argument expressed in *bytes*. ICode is not really the place to do +%% such a thing, and moreover there is really no reason for the HiPE +%% primop not to take a Size argument expressed in *bits* instead. +%% The bug was fixed by changing the `Size' argument to be in bits, +%% postponing the translation of the bs_match_string primop until RTL +%% and doing a proper translation using bit-sized quantities there. +%%-------------------------------------------------------------------- + +bs_match_string_bug() -> + ok = test0(<<50>>), + Bin = data(), + ok = test1(Bin), + ok = test2(Bin), + ok. + +%% Minimal test case showing the problem matching with strings +test0(<<6:5, 0:1, 0:2>>) -> weird; +test0(<<6:5, _:1, _:2>>) -> ok; +test0(_) -> default. + +data() -> <<50,16,0>>. + +%% This was the problematic test case in HiPE: 'default' was returned +test1(<<1:3, 1:1, _:1, 0:1, 0:1, 0:1, _/binary>>) -> weird; +test1(<<1:3, 1:1, _:1, _:1, _:1, _:1, _/binary>>) -> ok; +test1(_) -> default. + +%% This variation of test1/1 above worked OK, even in HiPE +test2(<<1:3, 1:1, _:1, A:1, B:1, C:1, _/binary>>) + when A =:= 1; B =:= 1; C =:= 1 -> ok; +test2(<<1:3, 1:1, _:1, 0:1, 0:1, 0:1, _/binary>>) -> weird; +test2(_) -> default. diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl index 8bad91bf98..911f5b71a7 100644 --- a/lib/inets/src/ftp/ftp.erl +++ b/lib/inets/src/ftp/ftp.erl @@ -108,6 +108,7 @@ -define(DBG(F,A), 'n/a'). %%-define(DBG(F,A), io:format(F,A)). +%%-define(DBG(F,A), if is_list(F) -> ct:pal(F,A); is_atom(F)->ct:pal(atom_to_list(F),A) end). %%%========================================================================= %%% API - CLIENT FUNCTIONS @@ -1095,7 +1096,7 @@ init(Options) -> erlang:monitor(process, Client), %% Make sure inet is started - inet_db:start(), + _ = inet_db:start(), %% Where are we {ok, Dir} = file:get_cwd(), @@ -1105,15 +1106,17 @@ init(Options) -> trace -> dbg:tracer(), dbg:p(all, [call]), - dbg:tpl(ftp, [{'_', [], [{return_trace}]}]), - dbg:tpl(ftp_response, [{'_', [], [{return_trace}]}]), - dbg:tpl(ftp_progress, [{'_', [], [{return_trace}]}]); + {ok, _} = dbg:tpl(ftp, [{'_', [], [{return_trace}]}]), + {ok, _} = dbg:tpl(ftp_response, [{'_', [], [{return_trace}]}]), + {ok, _} = dbg:tpl(ftp_progress, [{'_', [], [{return_trace}]}]), + ok; debug -> dbg:tracer(), dbg:p(all, [call]), - dbg:tp(ftp, [{'_', [], [{return_trace}]}]), - dbg:tp(ftp_response, [{'_', [], [{return_trace}]}]), - dbg:tp(ftp_progress, [{'_', [], [{return_trace}]}]); + {ok, _} = dbg:tp(ftp, [{'_', [], [{return_trace}]}]), + {ok, _} = dbg:tp(ftp_response, [{'_', [], [{return_trace}]}]), + {ok, _} = dbg:tp(ftp_progress, [{'_', [], [{return_trace}]}]), + ok; _ -> %% Keep silent ok @@ -1295,8 +1298,7 @@ handle_call({_,{rmdir, Dir}}, From, #state{chunk = false} = State) -> activate_ctrl_connection(State), {noreply, State#state{client = From}}; -handle_call({_,{type, Type}}, From, #state{chunk = false} - = State) -> +handle_call({_,{type, Type}}, From, #state{chunk = false} = State) -> case Type of ascii -> send_ctrl_message(State, mk_cmd("TYPE A", [])), @@ -1454,7 +1456,7 @@ handle_info({Trpt, Socket, Data}, #state{dsock = {Trpt,Socket}, caller = {recv_file, Fd}} = State0) when Trpt==tcp;Trpt==ssl -> ?DBG('L~p --data ~p ----> ~s~p~n',[?LINE,Socket,Data,State0]), - file_write(binary_to_list(Data), Fd), + ok = file_write(binary_to_list(Data), Fd), progress_report({binary, Data}, State0), State = activate_data_connection(State0), {noreply, State}; @@ -1473,16 +1475,19 @@ handle_info({Trpt, Socket, Data}, #state{dsock = {Trpt,Socket}} = State0) when T Data/binary>>}}; handle_info({Cls, Socket}, #state{dsock = {Trpt,Socket}, - caller = {recv_file, Fd}} - = State) when {Cls,Trpt}=={tcp_closed,tcp} ; {Cls,Trpt}=={ssl_closed,ssl} -> - file_close(Fd), + caller = {recv_file, Fd}} = State) + when {Cls,Trpt}=={tcp_closed,tcp} ; {Cls,Trpt}=={ssl_closed,ssl} -> + case file_close(Fd) of + ok -> ok; + {error,einval} -> ok + end, progress_report({transfer_size, 0}, State), activate_ctrl_connection(State), {noreply, State#state{dsock = undefined, data = <<>>}}; handle_info({Cls, Socket}, #state{dsock = {Trpt,Socket}, client = From, - caller = recv_chunk} - = State) when {Cls,Trpt}=={tcp_closed,tcp} ; {Cls,Trpt}=={ssl_closed,ssl} -> + caller = recv_chunk} = State) + when {Cls,Trpt}=={tcp_closed,tcp} ; {Cls,Trpt}=={ssl_closed,ssl} -> gen_server:reply(From, ok), {noreply, State#state{dsock = undefined, client = undefined, data = <<>>, caller = undefined, @@ -2061,7 +2066,10 @@ handle_ctrl_result({pos_prel, _}, #state{caller = {recv_file, _}} = State0) -> end; handle_ctrl_result({Status, _}, #state{caller = {recv_file, Fd}} = State) -> - file_close(Fd), + case file_close(Fd) of + ok -> ok; + {error, einval} -> ok + end, close_data_connection(State), ctrl_result_response(Status, State#state{dsock = undefined}, {error, epath}); @@ -2220,16 +2228,16 @@ setup_data_connection(#state{mode = active, {ok, Port} = inet:port(LSock), case FtpExt of false -> - {IP1, IP2, IP3, IP4} = IP, - {Port1, Port2} = {Port div 256, Port rem 256}, - send_ctrl_message(State, - mk_cmd("PORT ~w,~w,~w,~w,~w,~w", - [IP1, IP2, IP3, IP4, Port1, Port2])); - true -> - IpAddress = inet_parse:ntoa(IP), - Cmd = mk_cmd("EPRT |1|~s|~p|", [IpAddress, Port]), - send_ctrl_message(State, Cmd) - end, + {IP1, IP2, IP3, IP4} = IP, + {Port1, Port2} = {Port div 256, Port rem 256}, + send_ctrl_message(State, + mk_cmd("PORT ~w,~w,~w,~w,~w,~w", + [IP1, IP2, IP3, IP4, Port1, Port2])); + true -> + IpAddress = inet_parse:ntoa(IP), + Cmd = mk_cmd("EPRT |1|~s|~p|", [IpAddress, Port]), + send_ctrl_message(State, Cmd) + end, activate_ctrl_connection(State), {noreply, State#state{caller = {setup_data_connection, {LSock, Caller}}}} @@ -2337,7 +2345,7 @@ accept_data_connection(#state{mode = passive} = State) -> send_ctrl_message(_S=#state{csock = Socket, verbose = Verbose}, Message) -> verbose(lists:flatten(Message),Verbose,send), ?DBG('<--ctrl ~p ---- ~s~p~n',[Socket,Message,_S]), - send_message(Socket, Message). + ok = send_message(Socket, Message). send_data_message(_S=#state{dsock = Socket}, Message) -> ?DBG('<==data ~p ==== ~s~n~p~n',[Socket,Message,_S]), @@ -2359,23 +2367,26 @@ send_message({ssl, Socket}, Message) -> ssl:send(Socket, Message). activate_ctrl_connection(#state{csock = Socket, ctrl_data = {<<>>, _, _}}) -> - activate_connection(Socket); + ok = activate_connection(Socket); activate_ctrl_connection(#state{csock = Socket}) -> + ok = activate_connection(Socket), %% We have already received at least part of the next control message, %% that has been saved in ctrl_data, process this first. - self() ! {tcp, unwrap_socket(Socket), <<>>}. + self() ! {socket_type(Socket), unwrap_socket(Socket), <<>>}, + ok. unwrap_socket({tcp,Socket}) -> Socket; -unwrap_socket({ssl,Socket}) -> Socket; -unwrap_socket(Socket) -> Socket. +unwrap_socket({ssl,Socket}) -> Socket. +socket_type({tcp,_Socket}) -> tcp; +socket_type({ssl,_Socket}) -> ssl. activate_data_connection(#state{dsock = Socket} = State) -> - activate_connection(Socket), + ok = activate_connection(Socket), State. -activate_connection({tcp, Socket}) -> inet:setopts(Socket, [{active, once}]); -activate_connection({ssl, Socket}) -> ssl:setopts(Socket, [{active, once}]). +activate_connection({tcp, Socket}) -> inet:setopts(Socket, [{active, once}]); +activate_connection({ssl, Socket}) -> ssl:setopts(Socket, [{active, once}]). close_ctrl_connection(#state{csock = undefined}) -> ok; close_ctrl_connection(#state{csock = Socket}) -> close_connection(Socket). @@ -2383,21 +2394,21 @@ close_ctrl_connection(#state{csock = Socket}) -> close_connection(Socket). close_data_connection(#state{dsock = undefined}) -> ok; close_data_connection(#state{dsock = Socket}) -> close_connection(Socket). -close_connection({lsock,Socket}) -> gen_tcp:close(Socket); +close_connection({lsock,Socket}) -> gen_tcp:close(Socket); close_connection({tcp, Socket}) -> gen_tcp:close(Socket); close_connection({ssl, Socket}) -> ssl:close(Socket). -%% ------------ FILE HANDELING ---------------------------------------- +%% ------------ FILE HANDLING ---------------------------------------- send_file(#state{tls_upgrading_data_connection = {true, CTRL, _}} = State, Fd) -> {noreply, State#state{tls_upgrading_data_connection = {true, CTRL, ?MODULE, send_file, Fd}}}; send_file(State, Fd) -> case file_read(Fd) of - {ok, N, Bin} when N > 0-> + {ok, N, Bin} when N > 0 -> send_data_message(State, Bin), progress_report({binary, Bin}, State), send_file(State, Fd); {ok, _, _} -> - file_close(Fd), + ok = file_close(Fd), close_data_connection(State), progress_report({transfer_size, 0}, State), activate_ctrl_connection(State), @@ -2504,7 +2515,7 @@ progress_report(stop, #state{progress = ProgressPid}) -> ftp_progress:stop(ProgressPid); progress_report({binary, Data}, #state{progress = ProgressPid}) -> ftp_progress:report(ProgressPid, {transfer_size, size(Data)}); -progress_report(Report, #state{progress = ProgressPid}) -> +progress_report(Report, #state{progress = ProgressPid}) -> ftp_progress:report(ProgressPid, Report). diff --git a/lib/inets/src/ftp/ftp_progress.erl b/lib/inets/src/ftp/ftp_progress.erl index 68185a222d..a6263e5cd7 100644 --- a/lib/inets/src/ftp/ftp_progress.erl +++ b/lib/inets/src/ftp/ftp_progress.erl @@ -36,11 +36,11 @@ -include_lib("kernel/include/file.hrl"). -record(progress, { - file, % string() - cb_module, % atom() - cb_function, % atom() - init_progress_term, % term() - current_progress_term % term() + file :: string() | 'undefined', + cb_module :: module(), + cb_function :: atom(), + init_progress_term :: term(), + current_progress_term :: term() }). %%%========================================================================= @@ -53,13 +53,15 @@ %% Description: Starts the progress report process unless progress reporting %% should not be performed. %%-------------------------------------------------------------------------- +-type options() :: 'ignore' | {module(), atom(), term()}. +-spec start_link(options()) -> 'ignore' | pid(). start_link(ignore) -> ignore; start_link(Options) -> spawn_link(?MODULE, init, [Options]). %%-------------------------------------------------------------------------- -%% report_progress(Pid, Report) -> _ +%% report_progress(Pid, Report) -> ok %% Pid = pid() %% Report = {local_file, File} | {remote_file, File} | %% {transfer_size, Size} @@ -68,17 +70,23 @@ start_link(Options) -> %% Description: Reports progress to the reporting process that calls the %% user defined callback function. %%-------------------------------------------------------------------------- +-type report() :: {'local_file', string()} | {'remote_file', string()} + | {'transfer_size', non_neg_integer()}. +-spec report(pid(), report()) -> 'ok'. report(Pid, Report) -> - Pid ! {progress_report, Report}. + Pid ! {progress_report, Report}, + ok. %%-------------------------------------------------------------------------- -%% stop(Pid) -> _ +%% stop(Pid) -> ok %% Pid = pid() %% %% Description: %%-------------------------------------------------------------------------- +-spec stop(pid()) -> 'ok'. stop(Pid) -> - Pid ! stop. + Pid ! stop, + ok. %%%========================================================================= %%% Internal functions diff --git a/lib/inets/src/ftp/ftp_response.erl b/lib/inets/src/ftp/ftp_response.erl index 7533bc4550..d54d97dc91 100644 --- a/lib/inets/src/ftp/ftp_response.erl +++ b/lib/inets/src/ftp/ftp_response.erl @@ -90,19 +90,23 @@ parse_lines(<<C1, C2, C3, ?WHITE_SPACE, Bin/binary>>, Lines, start) -> parse_lines(Bin, [?WHITE_SPACE, C3, C2, C1 | Lines], finish); %% Last line found -parse_lines(<<C1, C2, C3, ?WHITE_SPACE, Rest/binary>>, Lines, {C1, C2, C3}) -> - parse_lines(Rest, [?WHITE_SPACE, C3, C2, C1 | Lines], finish); +parse_lines(<<?CR, ?LF, C1, C2, C3, ?WHITE_SPACE, Rest/binary>>, Lines, {C1, C2, C3}) -> + parse_lines(Rest, [?WHITE_SPACE, C3, C2, C1, ?LF, ?CR | Lines], finish); %% Potential end found wait for more data -parse_lines(<<C1, C2, C3>> = Bin, Lines, {C1, C2, C3}) -> +parse_lines(<<?CR, ?LF, C1, C2, C3>> = Bin, Lines, {C1, C2, C3}) -> {continue, {Bin, Lines, {C1, C2, C3}}}; %% Intermidate line begining with status code -parse_lines(<<C1, C2, C3, Rest/binary>>, Lines, {C1, C2, C3}) -> - parse_lines(Rest, [C3, C2, C1 | Lines], {C1, C2, C3}); +parse_lines(<<?CR, ?LF, C1, C2, C3, Rest/binary>>, Lines, {C1, C2, C3}) -> + parse_lines(Rest, [C3, C2, C1, ?LF, ?CR | Lines], {C1, C2, C3}); %% Potential last line wait for more data -parse_lines(<<C1, C2>> = Data, Lines, {C1, C2, _} = StatusCode) -> +parse_lines(<<?CR, ?LF, C1, C2>> = Data, Lines, {C1, C2, _} = StatusCode) -> {continue, {Data, Lines, StatusCode}}; -parse_lines(<<C1>> = Data, Lines, {C1, _, _} = StatusCode) -> +parse_lines(<<?CR, ?LF, C1>> = Data, Lines, {C1, _, _} = StatusCode) -> + {continue, {Data, Lines, StatusCode}}; +parse_lines(<<?CR, ?LF>> = Data, Lines, {_,_,_} = StatusCode) -> + {continue, {Data, Lines, StatusCode}}; +parse_lines(<<?LF>> = Data, Lines, {_,_,_} = StatusCode) -> {continue, {Data, Lines, StatusCode}}; parse_lines(<<>> = Data, Lines, {_,_,_} = StatusCode) -> {continue, {Data, Lines, StatusCode}}; diff --git a/lib/inets/test/ftp_format_SUITE.erl b/lib/inets/test/ftp_format_SUITE.erl index a33b31f46f..95d594a44b 100644 --- a/lib/inets/test/ftp_format_SUITE.erl +++ b/lib/inets/test/ftp_format_SUITE.erl @@ -38,8 +38,8 @@ all() -> groups() -> [{ftp_response, [], [ftp_150, ftp_200, ftp_220, ftp_226, ftp_257, ftp_331, - ftp_425, ftp_other_status_codes, ftp_multiple_lines, - ftp_multipel_ctrl_messages]}]. + ftp_425, ftp_other_status_codes, ftp_multiple_lines_status_in_msg, + ftp_multiple_lines, ftp_multipel_ctrl_messages]}]. init_per_suite(Config) -> Config. @@ -141,6 +141,15 @@ ftp_425(Config) when is_list(Config) -> {trans_neg_compl, _} = ftp_response:interpret(Msg), ok. +ftp_multiple_lines_status_in_msg() -> + [{doc, "check that multiple lines gets parsed correct, even if we have " + " the status code within the msg being sent"}]. +ftp_multiple_lines_status_in_msg(Config) when is_list(Config) -> + ML = "230-User usr-230 is logged in\r\n" ++ + "230 OK. Current directory is /\r\n", + {ok, ML, <<>>} = ftp_response:parse_lines(list_to_binary(ML), [], start), + ok. + ftp_multiple_lines() -> [{doc, "Especially check multiple lines devided in significant places"}]. ftp_multiple_lines(Config) when is_list(Config) -> diff --git a/lib/kernel/doc/src/file.xml b/lib/kernel/doc/src/file.xml index 09497482cf..b674b3ca93 100644 --- a/lib/kernel/doc/src/file.xml +++ b/lib/kernel/doc/src/file.xml @@ -1477,8 +1477,8 @@ f.txt: {person, "kalle", 25}. <tag><c>16#400</c></tag> <item><p>set group id on execution</p></item> </taglist> - <p>On Unix platforms, the following bits - can also be set:</p> + <p>On Unix platforms, other bits than those listed above + may be set.</p> </item> <tag><c>links = integer() >= 0</c></tag> <item> @@ -2042,8 +2042,8 @@ f.txt: {person, "kalle", 25}. <tag><c>16#400</c></tag> <item><p>Set group id on execution</p></item> </taglist> - <p>On Unix platforms, the following bits - can also be set.</p> + <p>On Unix platforms, other bits than those listed above + may be set.</p> </item> <tag><c>uid = integer() >= 0</c></tag> <item> diff --git a/lib/kernel/doc/src/gen_tcp.xml b/lib/kernel/doc/src/gen_tcp.xml index 08454b9832..e97db20062 100644 --- a/lib/kernel/doc/src/gen_tcp.xml +++ b/lib/kernel/doc/src/gen_tcp.xml @@ -231,7 +231,11 @@ do_recv(Sock, Bs) -> <c><anno>Socket</anno></c>. The controlling process is the process that receives messages from the socket. If called by any other process than the current controlling process, - <c>{error, not_owner}</c> is returned.</p> + <c>{error, not_owner}</c> is returned. If the process identified + by <c><anno>Pid</anno></c> is not an existing local pid, + <c>{error, badarg}</c> is returned. <c>{error, badarg}</c> may also + be returned in some cases when <c><anno>Socket</anno></c> is closed + during the execution of this function.</p> <p>If the socket is set in active mode, this function will transfer any messages in the mailbox of the caller to the new controlling process. diff --git a/lib/kernel/doc/src/gen_udp.xml b/lib/kernel/doc/src/gen_udp.xml index 3f88a0272d..f79566ef71 100644 --- a/lib/kernel/doc/src/gen_udp.xml +++ b/lib/kernel/doc/src/gen_udp.xml @@ -68,7 +68,11 @@ <c><anno>Socket</anno></c>. The controlling process is the process that receives messages from the socket. If called by any other process than the current controlling process, - <c>{error, not_owner}</c> is returned.</p> + <c>{error, not_owner}</c> is returned. If the process identified + by <c><anno>Pid</anno></c> is not an existing local pid, + <c>{error, badarg}</c> is returned. <c>{error, badarg}</c> may also + be returned in some cases when <c><anno>Socket</anno></c> is closed + during the execution of this function.</p> </desc> </func> diff --git a/lib/kernel/src/gen_sctp.erl b/lib/kernel/src/gen_sctp.erl index b133e6fed4..a6aa0edd15 100644 --- a/lib/kernel/src/gen_sctp.erl +++ b/lib/kernel/src/gen_sctp.erl @@ -439,7 +439,7 @@ error_string(X) -> -spec controlling_process(Socket, Pid) -> ok | {error, Reason} when Socket :: sctp_socket(), Pid :: pid(), - Reason :: closed | not_owner | inet:posix(). + Reason :: closed | not_owner | badarg | inet:posix(). controlling_process(S, Pid) when is_port(S), is_pid(Pid) -> inet:udp_controlling_process(S, Pid); diff --git a/lib/kernel/src/gen_tcp.erl b/lib/kernel/src/gen_tcp.erl index 1a21541b7c..ac61dbc792 100644 --- a/lib/kernel/src/gen_tcp.erl +++ b/lib/kernel/src/gen_tcp.erl @@ -320,7 +320,7 @@ unrecv(S, Data) when is_port(S) -> -spec controlling_process(Socket, Pid) -> ok | {error, Reason} when Socket :: socket(), Pid :: pid(), - Reason :: closed | not_owner | inet:posix(). + Reason :: closed | not_owner | badarg | inet:posix(). controlling_process(S, NewOwner) -> case inet_db:lookup_socket(S) of diff --git a/lib/kernel/src/gen_udp.erl b/lib/kernel/src/gen_udp.erl index 98d2f0bcfb..3121544719 100644 --- a/lib/kernel/src/gen_udp.erl +++ b/lib/kernel/src/gen_udp.erl @@ -195,7 +195,7 @@ connect(S, Address, Port) when is_port(S) -> -spec controlling_process(Socket, Pid) -> ok | {error, Reason} when Socket :: socket(), Pid :: pid(), - Reason :: closed | not_owner | inet:posix(). + Reason :: closed | not_owner | badarg | inet:posix(). controlling_process(S, NewOwner) -> inet:udp_controlling_process(S, NewOwner). diff --git a/lib/kernel/src/kernel.app.src b/lib/kernel/src/kernel.app.src index 56d1699656..d184223524 100644 --- a/lib/kernel/src/kernel.app.src +++ b/lib/kernel/src/kernel.app.src @@ -118,6 +118,6 @@ {applications, []}, {env, [{error_logger, tty}]}, {mod, {kernel, []}}, - {runtime_dependencies, ["erts-8.0", "stdlib-3.0", "sasl-3.0"]} + {runtime_dependencies, ["erts-8.1", "stdlib-3.0", "sasl-3.0"]} ] }. diff --git a/lib/mnesia/src/mnesia_controller.erl b/lib/mnesia/src/mnesia_controller.erl index 4791e2e290..17b47c059e 100644 --- a/lib/mnesia/src/mnesia_controller.erl +++ b/lib/mnesia/src/mnesia_controller.erl @@ -1703,9 +1703,10 @@ add_active_replica(Tab, Node, Cs = #cstruct{}) -> block_table(Tab) -> Var = {Tab, where_to_commit}, - Old = val(Var), - New = {blocked, Old}, - set(Var, New). % where_to_commit + case is_tab_blocked(val(Var)) of + {true, _} -> ok; + {false, W2C} -> set(Var, mark_blocked_tab(true, W2C)) + end. unblock_table(Tab) -> call({unblock_table, Tab}). diff --git a/lib/mnesia/src/mnesia_loader.erl b/lib/mnesia/src/mnesia_loader.erl index 71e5829c87..c710470a2c 100644 --- a/lib/mnesia/src/mnesia_loader.erl +++ b/lib/mnesia/src/mnesia_loader.erl @@ -342,9 +342,12 @@ spawned_receiver(ReplyTo,Tab,Storage,Cs, SenderPid,TabSize,DetsData, Init) -> Done = do_init_table(Tab,Storage,Cs, SenderPid,TabSize,DetsData, ReplyTo, Init), - ReplyTo ! {self(),Done}, - unlink(ReplyTo), - unlink(whereis(mnesia_controller)), + try + ReplyTo ! {self(),Done}, + unlink(ReplyTo), + unlink(whereis(mnesia_controller)) + catch _:_ -> ok %% avoid error reports when stopping down mnesia + end, exit(normal). wait_on_load_complete(Pid) -> @@ -916,9 +919,15 @@ send_packet(_N, _Pid, _Chunk, DataState) -> finish_copy(Pid, Tab, Storage, RemoteS, NeedLock) -> RecNode = node(Pid), DatBin = dat2bin(Tab, Storage, RemoteS), + Node = node(Pid), Trans = fun() -> NeedLock andalso mnesia:read_lock_table(Tab), + %% Check that receiver is still alive + receive {copier_done, Node} -> + throw(receiver_died) + after 0 -> ok + end, A = val({Tab, access_mode}), mnesia_controller:sync_and_block_table_whereabouts(Tab, RecNode, RemoteS, A), cleanup_tab_copier(Pid, Storage, Tab), @@ -927,7 +936,7 @@ finish_copy(Pid, Tab, Storage, RemoteS, NeedLock) -> receive {Pid, no_more} -> % Dont bother about the spurious 'more' message no_more; - {copier_done, Node} when Node == node(Pid)-> + {copier_done, Node} -> verbose("Tab receiver ~p crashed (more): ~p~n", [Tab, Node]), receiver_died end diff --git a/lib/mnesia/src/mnesia_tm.erl b/lib/mnesia/src/mnesia_tm.erl index b116b48312..388b42cf15 100644 --- a/lib/mnesia/src/mnesia_tm.erl +++ b/lib/mnesia/src/mnesia_tm.erl @@ -950,7 +950,7 @@ return_abort(Fun, Args, Reason) -> if Level == 1 -> mnesia_locker:async_release_tid(Nodes, Tid), - ?MODULE ! {delete_transaction, Tid}, + ?SAFE(?MODULE ! {delete_transaction, Tid}), erase(mnesia_activity_state), flush_downs(), ?SAFE(unlink(whereis(?MODULE))), diff --git a/lib/mnesia/test/mnesia_test_lib.erl b/lib/mnesia/test/mnesia_test_lib.erl index 6e84a27ec9..0fabdc7929 100644 --- a/lib/mnesia/test/mnesia_test_lib.erl +++ b/lib/mnesia/test/mnesia_test_lib.erl @@ -263,6 +263,7 @@ slave_start_link(Host, Name, Retries) -> Path = code:get_path(), ok = rpc:call(NewNode, file, set_cwd, [Cwd]), true = rpc:call(NewNode, code, set_path, [Path]), + ok = rpc:call(NewNode, error_logger, tty, [false]), spawn_link(NewNode, ?MODULE, slave_sup, []), rpc:multicall([node() | nodes()], global, sync, []), {ok, NewNode}; diff --git a/lib/odbc/configure.in b/lib/odbc/configure.in index d26daa5eda..2dec6e5abf 100644 --- a/lib/odbc/configure.in +++ b/lib/odbc/configure.in @@ -65,7 +65,7 @@ dnl --------------------------------------------------------------------- dnl Special windows stuff regarding CFLAGS and details in the environment... dnl --------------------------------------------------------------------- LM_WINDOWS_ENVIRONMENT - + AC_PROG_MAKE_SET AC_CHECK_PROGS(LD, ld.sh) @@ -136,8 +136,8 @@ AC_CHECK_MEMBERS([struct sockaddr_in6.sin6_addr], [], [], dnl Checks for library functions. AC_CHECK_FUNCS([memset socket]) - -# ODBC + +# ODBC $RM -f "$ERL_TOP/lib/odbc/SKIP" LM_CHECK_THR_LIB @@ -146,24 +146,24 @@ AC_SUBST(THR_LIBS) odbc_lib_link_success=no AC_SUBST(TARGET_FLAGS) - case $host_os in - darwin1[[0-5]].*|darwin[[0-9]].*) + case $host_os in + darwin1[[0-9]].*) TARGET_FLAGS="-DUNIX" if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then - ODBC_LIB= -L"/usr/lib" - ODBC_INCLUDE="-I/usr/lib/include" + ODBC_LIB= -L"/usr/local/lib" + ODBC_INCLUDE="-I/usr/local/include" else ODBC_LIB=-L"$with_odbc/lib" ODBC_INCLUDE="-I$with_odbc/include" fi - - AC_CHECK_LIB(iodbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -liodbc"; odbc_lib_link_success=yes]) + + AC_CHECK_LIB(iodbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes]) ;; win32|cygwin) TARGET_FLAGS="-DWIN32" AC_CHECK_LIB(ws2_32, main) if test ! -d "$with_odbc" || test "$with_odbc" = "yes"; then - ODBC_LIB="" + ODBC_LIB="" ODBC_INCLUDE="" else ODBC_LIB=-L"$with_odbc/lib" @@ -196,7 +196,7 @@ AC_SUBST(TARGET_FLAGS) elif test -d "${libdir}/64/."; then libdir="${libdir}/64" fi - fi + fi ODBC_LIB="-L$libdir" ODBC_INCLUDE="-I$erl_xcomp_isysroot$rdir/include" break @@ -207,7 +207,7 @@ AC_SUBST(TARGET_FLAGS) echo "No odbc library found" > "$ERL_TOP/lib/odbc/SKIP" else AC_MSG_RESULT($ODBC_LIB) - AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes]) + AC_CHECK_LIB(odbc, SQLAllocHandle,[ODBC_LIB="$ODBC_LIB -lodbc"; odbc_lib_link_success=yes]) fi ;; diff --git a/lib/ssh/doc/src/notes.xml b/lib/ssh/doc/src/notes.xml index 773a472818..f5a67bc00e 100644 --- a/lib/ssh/doc/src/notes.xml +++ b/lib/ssh/doc/src/notes.xml @@ -30,6 +30,21 @@ <file>notes.xml</file> </header> +<section><title>Ssh 4.3.6</title> + + <section><title>Fixed Bugs and Malfunctions</title> + <list> + <item> + <p> + Re-negotiation problems with OpenSSH client solved.</p> + <p> + Own Id: OTP-13972</p> + </item> + </list> + </section> + +</section> + <section><title>Ssh 4.3.5</title> <section><title>Fixed Bugs and Malfunctions</title> diff --git a/lib/ssh/src/Makefile b/lib/ssh/src/Makefile index 69d5a47f83..7ab6f22424 100644 --- a/lib/ssh/src/Makefile +++ b/lib/ssh/src/Makefile @@ -96,7 +96,7 @@ APP_TARGET= $(EBIN)/$(APP_FILE) APPUP_SRC= $(APPUP_FILE).src APPUP_TARGET= $(EBIN)/$(APPUP_FILE) -INTERNAL_HRL_FILES = ssh_auth.hrl ssh_connect.hrl ssh_transport.hrl ssh.hrl ssh_userauth.hrl ssh_xfer.hrl +INTERNAL_HRL_FILES = ssh_auth.hrl ssh_connect.hrl ssh_transport.hrl ssh.hrl ssh_userauth.hrl ssh_xfer.hrl ssh_dbg.hrl # ---------------------------------------------------- # FLAGS diff --git a/lib/ssh/src/ssh_channel.erl b/lib/ssh/src/ssh_channel.erl index 426e2f5125..85b31f3669 100644 --- a/lib/ssh/src/ssh_channel.erl +++ b/lib/ssh/src/ssh_channel.erl @@ -261,7 +261,7 @@ handle_info({ssh_cm, _, _} = Msg, #state{cm = ConnectionManager, adjust_window(Msg), {noreply, State#state{channel_state = ChannelState}, Timeout}; {stop, ChannelId, ChannelState} -> - ssh_connection:close(ConnectionManager, ChannelId), + catch ssh_connection:close(ConnectionManager, ChannelId), {stop, normal, State#state{close_sent = true, channel_state = ChannelState}} end; diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index ced049f0d0..7451c9e6d0 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -671,8 +671,9 @@ handle_event(_, #ssh_msg_newkeys{} = Msg, {new_keys,Role,init}, D) -> {next_state, {service_request,Role}, D#data{ssh_params=Ssh}}; %% Subsequent key exchange rounds (renegotiation): -handle_event(_, #ssh_msg_newkeys{}, {new_keys,Role,renegotiate}, D) -> - {next_state, {connected,Role}, D}; +handle_event(_, #ssh_msg_newkeys{} = Msg, {new_keys,Role,renegotiate}, D) -> + {ok, Ssh} = ssh_transport:handle_new_keys(Msg, D#data.ssh_params), + {next_state, {connected,Role}, D#data{ssh_params=Ssh}}; %%% ######## {service_request, client|server} @@ -927,6 +928,7 @@ handle_event(internal, Msg=#ssh_msg_channel_request{}, StateName, D) - handle_connection_msg(Msg, StateName, D); handle_event(internal, Msg=#ssh_msg_channel_success{}, StateName, D) -> + update_inet_buffers(D#data.socket), handle_connection_msg(Msg, StateName, D); handle_event(internal, Msg=#ssh_msg_channel_failure{}, StateName, D) -> @@ -1006,6 +1008,7 @@ handle_event(cast, {reply_request,success,ChannelId}, {connected,_}, D) -> case ssh_channel:cache_lookup(cache(D), ChannelId) of #channel{remote_id = RemoteId} -> Msg = ssh_connection:channel_success_msg(RemoteId), + update_inet_buffers(D#data.socket), {keep_state, send_msg(Msg,D)}; undefined -> @@ -1193,12 +1196,12 @@ handle_event(info, {Proto, Sock, NewData}, StateName, D0 = #data{socket = Sock, ssh_message:decode(set_kex_overload_prefix(DecryptedBytes,D)) of Msg = #ssh_msg_kexinit{} -> - {keep_state, D, [{next_event, internal, {Msg,DecryptedBytes}}, - {next_event, internal, prepare_next_packet} + {keep_state, D, [{next_event, internal, prepare_next_packet}, + {next_event, internal, {Msg,DecryptedBytes}} ]}; Msg -> - {keep_state, D, [{next_event, internal, Msg}, - {next_event, internal, prepare_next_packet} + {keep_state, D, [{next_event, internal, prepare_next_packet}, + {next_event, internal, Msg} ]} catch _C:_E -> @@ -1737,6 +1740,11 @@ send_replies(Repls, State) -> Repls). get_repl({connection_reply,Msg}, {CallRepls,S}) -> + if is_record(Msg, ssh_msg_channel_success) -> + update_inet_buffers(S#data.socket); + true -> + ok + end, {CallRepls, send_msg(Msg,S)}; get_repl({channel_data,undefined,_Data}, Acc) -> Acc; @@ -1925,3 +1933,13 @@ handshake(Pid, Ref, Timeout) -> {error, timeout} end. +update_inet_buffers(Socket) -> + {ok, BufSzs0} = inet:getopts(Socket, [sndbuf,recbuf]), + MinVal = 655360, + case + [{Tag,MinVal} || {Tag,Val} <- BufSzs0, + Val < MinVal] + of + [] -> ok; + NewOpts -> inet:setopts(Socket, NewOpts) + end. diff --git a/lib/ssh/src/ssh_dbg.erl b/lib/ssh/src/ssh_dbg.erl index bd6bc0335b..dff2bae9f2 100644 --- a/lib/ssh/src/ssh_dbg.erl +++ b/lib/ssh/src/ssh_dbg.erl @@ -28,6 +28,9 @@ stop/0 ]). +-export([shrink_bin/1, + wr_record/3]). + -include("ssh.hrl"). -include("ssh_transport.hrl"). -include("ssh_connect.hrl"). @@ -113,7 +116,12 @@ setup_tracer(Write, MangleArg) -> ok. %%%---------------------------------------------------------------- -shrink_bin(B) when is_binary(B), size(B)>100 -> {'*** SHRINKED BIN',size(B),element(1,split_binary(B,20)),'***'}; +shrink_bin(B) when is_binary(B), size(B)>100 -> {'*** SHRINKED BIN', + size(B), + element(1,split_binary(B,20)), + '...', + element(2,split_binary(B,size(B)-20)) + }; shrink_bin(L) when is_list(L) -> lists:map(fun shrink_bin/1, L); shrink_bin(T) when is_tuple(T) -> list_to_tuple(shrink_bin(tuple_to_list(T))); shrink_bin(X) -> X. diff --git a/lib/ssh/src/ssh_dbg.hrl b/lib/ssh/src/ssh_dbg.hrl new file mode 100644 index 0000000000..e94664737b --- /dev/null +++ b/lib/ssh/src/ssh_dbg.hrl @@ -0,0 +1,27 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2004-2016. All Rights Reserved. +%% +%% Licensed under the Apache License, Version 2.0 (the "License"); +%% you may not use this file except in compliance with the License. +%% You may obtain a copy of the License at +%% +%% http://www.apache.org/licenses/LICENSE-2.0 +%% +%% Unless required by applicable law or agreed to in writing, software +%% distributed under the License is distributed on an "AS IS" BASIS, +%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +%% See the License for the specific language governing permissions and +%% limitations under the License. +%% +%% %CopyrightEnd% +%% + +-ifndef(SSH_DBG_HRL). +-define(SSH_DBG_HRL, 1). + +-define(formatrec(RecName,R), + ssh_dbg:wr_record(R, record_info(fields,RecName), [])). + +-endif. % SSH_DBG_HRL defined diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl index 51e0d5196b..0a0ab5cdf7 100644 --- a/lib/ssh/test/ssh_basic_SUITE.erl +++ b/lib/ssh/test/ssh_basic_SUITE.erl @@ -315,9 +315,9 @@ init_per_testcase(TC, Config) when TC==shell_no_unicode ; {user_passwords, [{"foo", "bar"}]}]), ct:sleep(500), IO = ssh_test_lib:start_io_server(), - Shell = ssh_test_lib:start_shell(Port, IO, UserDir, - [{silently_accept_hosts, true}, - {user,"foo"},{password,"bar"}]), + Shell = ssh_test_lib:start_shell(Port, IO, [{user_dir,UserDir}, + {silently_accept_hosts, true}, + {user,"foo"},{password,"bar"}]), ct:log("IO=~p, Shell=~p, self()=~p",[IO,Shell,self()]), ct:log("file:native_name_encoding() = ~p,~nio:getopts() = ~p", [file:native_name_encoding(),io:getopts()]), @@ -343,14 +343,15 @@ end_per_testcase(TC, Config) when TC==shell_no_unicode ; TC==shell_unicode_string -> case proplists:get_value(sftpd, Config) of {Pid, _, _} -> - ssh:stop_daemon(Pid), - ssh:stop(); + catch ssh:stop_daemon(Pid); _ -> - ssh:stop() - end; + ok + end, + end_per_testcase(Config); end_per_testcase(_TestCase, Config) -> end_per_testcase(Config). -end_per_testcase(_Config) -> + +end_per_testcase(_Config) -> ssh:stop(), ok. @@ -524,7 +525,7 @@ shell(Config) when is_list(Config) -> ct:sleep(500), IO = ssh_test_lib:start_io_server(), - Shell = ssh_test_lib:start_shell(Port, IO, UserDir), + Shell = ssh_test_lib:start_shell(Port, IO, [{user_dir,UserDir}]), receive {'EXIT', _, _} -> ct:fail(no_ssh_connection); @@ -562,10 +563,10 @@ exec_key_differs(Config, UserPKAlgs) -> ct:sleep(500), IO = ssh_test_lib:start_io_server(), - Shell = ssh_test_lib:start_shell(Port, IO, UserDir, - [{preferred_algorithms,[{public_key,['ssh-rsa']}]}, - {pref_public_key_algs,UserPKAlgs} - ]), + Shell = ssh_test_lib:start_shell(Port, IO, [{user_dir,UserDir}, + {preferred_algorithms,[{public_key,['ssh-rsa']}]}, + {pref_public_key_algs,UserPKAlgs} + ]), receive @@ -596,9 +597,9 @@ exec_key_differs_fail(Config) when is_list(Config) -> ct:sleep(500), IO = ssh_test_lib:start_io_server(), - ssh_test_lib:start_shell(Port, IO, UserDir, - [{preferred_algorithms,[{public_key,['ssh-rsa']}]}, - {pref_public_key_algs,['ssh-dss']}]), + ssh_test_lib:start_shell(Port, IO, [{user_dir,UserDir}, + {preferred_algorithms,[{public_key,['ssh-rsa']}]}, + {pref_public_key_algs,['ssh-dss']}]), receive {'EXIT', _, _} -> ok; diff --git a/lib/ssh/test/ssh_connection_SUITE.erl b/lib/ssh/test/ssh_connection_SUITE.erl index bcf3b01824..e898d55b6f 100644 --- a/lib/ssh/test/ssh_connection_SUITE.erl +++ b/lib/ssh/test/ssh_connection_SUITE.erl @@ -381,13 +381,13 @@ do_interrupted_send(Config, SendSize, EchoSize) -> {password, "morot"}, {subsystems, [{"echo_n",EchoSS_spec}]}]), - ct:log("connect", []), + ct:log("~p:~p connect", [?MODULE,?LINE]), ConnectionRef = ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true}, {user, "foo"}, {password, "morot"}, {user_interaction, false}, {user_dir, UserDir}]), - ct:log("connected", []), + ct:log("~p:~p connected", [?MODULE,?LINE]), %% build big binary Data = << <<X:32>> || X <- lists:seq(1,SendSize div 4)>>, @@ -399,9 +399,9 @@ do_interrupted_send(Config, SendSize, EchoSize) -> Parent = self(), ResultPid = spawn( fun() -> - ct:log("open channel",[]), + ct:log("~p:~p open channel",[?MODULE,?LINE]), {ok, ChannelId} = ssh_connection:session_channel(ConnectionRef, infinity), - ct:log("start subsystem", []), + ct:log("~p:~p start subsystem", [?MODULE,?LINE]), case ssh_connection:subsystem(ConnectionRef, ChannelId, "echo_n", infinity) of success -> Parent ! {self(), channelId, ChannelId}, @@ -410,47 +410,69 @@ do_interrupted_send(Config, SendSize, EchoSize) -> try collect_data(ConnectionRef, ChannelId) of ExpectedData -> + ct:log("~p:~p got expected data",[?MODULE,?LINE]), ok; - _ -> - {fail,"unexpected result"} + Other -> + ct:log("~p:~p unexpect: ~p", [?MODULE,?LINE,Other]), + {fail,"unexpected result in listener"} catch Class:Exception -> - {fail, io_lib:format("Exception ~p:~p",[Class,Exception])} + {fail, io_lib:format("Listener exception ~p:~p",[Class,Exception])} end, - Parent ! {self(), Result}; + Parent ! {self(), result, Result}; Other -> Parent ! {self(), channelId, error, Other} end end), receive + {ResultPid, channelId, error, Other} -> + ct:log("~p:~p channelId error ~p", [?MODULE,?LINE,Other]), + ssh:close(ConnectionRef), + ssh:stop_daemon(Pid), + {fail, "ssh_connection:subsystem"}; + {ResultPid, channelId, ChannelId} -> - %% pre-adjust receive window so the other end doesn't block - ct:log("adjust window", []), - ssh_connection:adjust_window(ConnectionRef, ChannelId, size(ExpectedData) + 1), - - ct:log("going to send ~p bytes", [size(Data)]), - case ssh_connection:send(ConnectionRef, ChannelId, Data, 30000) of - {error, closed} -> - ct:log("{error,closed} - That's what we expect :)", []), - ok; - Msg -> - ct:log("Got ~p - that's bad, very bad indeed",[Msg]), - ct:fail({expected,{error,closed}, got, Msg}) - end, - ct:log("going to check the result (if it is available)", []), + ct:log("~p:~p ~p going to send ~p bytes", [?MODULE,?LINE,self(),size(Data)]), + SenderPid = spawn(fun() -> + Parent ! {self(), ssh_connection:send(ConnectionRef, ChannelId, Data, 30000)} + end), receive - {ResultPid, Result} -> - ct:log("Got result: ~p", [Result]), + {ResultPid, result, {fail, Fail}} -> + ct:log("~p:~p Listener failed: ~p", [?MODULE,?LINE,Fail]), + {fail, Fail}; + + {ResultPid, result, Result} -> + ct:log("~p:~p Got result: ~p", [?MODULE,?LINE,Result]), ssh:close(ConnectionRef), ssh:stop_daemon(Pid), - Result - end; + ct:log("~p:~p Check sender", [?MODULE,?LINE]), + receive + {SenderPid, {error, closed}} -> + ct:log("~p:~p {error,closed} - That's what we expect :)",[?MODULE,?LINE]), + ok; + Msg -> + ct:log("~p:~p Not expected send result: ~p",[?MODULE,?LINE,Msg]), + {fail, "Not expected msg"} + end; + + {SenderPid, {error, closed}} -> + ct:log("~p:~p {error,closed} - That's what we expect, but client channel handler has not reported yet",[?MODULE,?LINE]), + receive + {ResultPid, result, Result} -> + ct:log("~p:~p Now got the result: ~p", [?MODULE,?LINE,Result]), + ssh:close(ConnectionRef), + ssh:stop_daemon(Pid), + ok; + Msg -> + ct:log("~p:~p Got an unexpected msg ~p",[?MODULE,?LINE,Msg]), + {fail, "Un-expected msg"} + end; - {ResultPid, channelId, error, Other} -> - ssh:close(ConnectionRef), - ssh:stop_daemon(Pid), - {fail, io_lib:format("ssh_connection:subsystem: ~p",[Other])} + Msg -> + ct:log("~p:~p Got unexpected ~p",[?MODULE,?LINE,Msg]), + {fail, "Unexpected msg"} + end end. %%-------------------------------------------------------------------- @@ -910,34 +932,35 @@ big_cat_rx(ConnectionRef, ChannelId, Acc) -> end. collect_data(ConnectionRef, ChannelId) -> - ct:log("Listener ~p running! ConnectionRef=~p, ChannelId=~p",[self(),ConnectionRef,ChannelId]), + ct:log("~p:~p Listener ~p running! ConnectionRef=~p, ChannelId=~p",[?MODULE,?LINE,self(),ConnectionRef,ChannelId]), collect_data(ConnectionRef, ChannelId, [], 0). collect_data(ConnectionRef, ChannelId, Acc, Sum) -> TO = 5000, receive {ssh_cm, ConnectionRef, {data, ChannelId, 0, Data}} when is_binary(Data) -> - ct:log("collect_data: received ~p bytes. total ~p bytes",[size(Data),Sum+size(Data)]), + ct:log("~p:~p collect_data: received ~p bytes. total ~p bytes",[?MODULE,?LINE,size(Data),Sum+size(Data)]), + ssh_connection:adjust_window(ConnectionRef, ChannelId, size(Data)), collect_data(ConnectionRef, ChannelId, [Data | Acc], Sum+size(Data)); {ssh_cm, ConnectionRef, {eof, ChannelId}} -> try iolist_to_binary(lists:reverse(Acc)) of Bin -> - ct:log("collect_data: received eof.~nGot in total ~p bytes",[size(Bin)]), + ct:log("~p:~p collect_data: received eof.~nGot in total ~p bytes",[?MODULE,?LINE,size(Bin)]), Bin catch C:E -> - ct:log("collect_data: received eof.~nAcc is strange...~nException=~p:~p~nAcc=~p", - [C,E,Acc]), + ct:log("~p:~p collect_data: received eof.~nAcc is strange...~nException=~p:~p~nAcc=~p", + [?MODULE,?LINE,C,E,Acc]), {error,{C,E}} end; Msg -> - ct:log("collect_data: ***** unexpected message *****~n~p",[Msg]), + ct:log("~p:~p collect_data: ***** unexpected message *****~n~p",[?MODULE,?LINE,Msg]), collect_data(ConnectionRef, ChannelId, Acc, Sum) after TO -> - ct:log("collect_data: ----- Nothing received for ~p seconds -----~n",[]), + ct:log("~p:~p collect_data: ----- Nothing received for ~p seconds -----~n",[?MODULE,?LINE,TO]), collect_data(ConnectionRef, ChannelId, Acc, Sum) end. diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl index 61883c0647..4cc12cbcbe 100644 --- a/lib/ssh/test/ssh_options_SUITE.erl +++ b/lib/ssh/test/ssh_options_SUITE.erl @@ -540,10 +540,18 @@ connectfun_disconnectfun_server(Config) -> {disconnect,Ref,R} -> ct:log("Disconnect result: ~p",[R]), ssh:stop_daemon(Pid) - after 2000 -> + after 5000 -> + receive + X -> ct:log("received ~p",[X]) + after 0 -> ok + end, {fail, "No disconnectfun action"} end - after 2000 -> + after 5000 -> + receive + X -> ct:log("received ~p",[X]) + after 0 -> ok + end, {fail, "No connectfun action"} end. @@ -649,7 +657,7 @@ disconnectfun_option_server(Config) -> ct:log("Server detected disconnect: ~p",[Reason]), ssh:stop_daemon(Pid), ok - after 3000 -> + after 5000 -> receive X -> ct:log("received ~p",[X]) after 0 -> ok @@ -974,7 +982,14 @@ ssh_connect_negtimeout(Config, Parallel) -> ct:sleep(round(Factor * NegTimeOut)), case inet:sockname(Socket) of - {ok,_} -> ct:fail("Socket not closed"); + {ok,_} -> + %% Give it another chance... + ct:log("Sleep more...",[]), + ct:sleep(round(Factor * NegTimeOut)), + case inet:sockname(Socket) of + {ok,_} -> ct:fail("Socket not closed"); + {error,_} -> ok + end; {error,_} -> ok end. @@ -1003,7 +1018,7 @@ ssh_connect_nonegtimeout_connected(Config, Parallel) -> ct:sleep(500), IO = ssh_test_lib:start_io_server(), - Shell = ssh_test_lib:start_shell(Port, IO, UserDir), + Shell = ssh_test_lib:start_shell(Port, IO, [{user_dir,UserDir}]), receive Error = {'EXIT', _, _} -> ct:log("~p",[Error]), diff --git a/lib/ssh/test/ssh_renegotiate_SUITE.erl b/lib/ssh/test/ssh_renegotiate_SUITE.erl index b10ec3707f..74bbc291b2 100644 --- a/lib/ssh/test/ssh_renegotiate_SUITE.erl +++ b/lib/ssh/test/ssh_renegotiate_SUITE.erl @@ -92,11 +92,11 @@ rekey(Config) -> ConnectionRef = ssh_test_lib:std_connect(Config, Host, Port, [{rekey_limit, 0}]), - Kex1 = get_kex_init(ConnectionRef), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), receive after ?REKEY_DATA_TMO -> %%By this time rekeying would have been done - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), false = (Kex2 == Kex1), ssh:close(ConnectionRef), ssh:stop_daemon(Pid) @@ -120,31 +120,31 @@ rekey_limit(Config) -> {max_random_length_padding,0}]), {ok, SftpPid} = ssh_sftp:start_channel(ConnectionRef), - Kex1 = get_kex_init(ConnectionRef), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), timer:sleep(?REKEY_DATA_TMO), - Kex1 = get_kex_init(ConnectionRef), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), Data = lists:duplicate(159000,1), ok = ssh_sftp:write_file(SftpPid, DataFile, Data), timer:sleep(?REKEY_DATA_TMO), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), false = (Kex2 == Kex1), timer:sleep(?REKEY_DATA_TMO), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), ok = ssh_sftp:write_file(SftpPid, DataFile, "hi\n"), timer:sleep(?REKEY_DATA_TMO), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), false = (Kex2 == Kex1), timer:sleep(?REKEY_DATA_TMO), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), ssh_sftp:stop_channel(SftpPid), ssh:close(ConnectionRef), @@ -169,7 +169,7 @@ renegotiate1(Config) -> ConnectionRef = ssh_test_lib:std_connect(Config, Host, RPort, [{max_random_length_padding,0}]), {ok, SftpPid} = ssh_sftp:start_channel(ConnectionRef), - Kex1 = get_kex_init(ConnectionRef), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), {ok, Handle} = ssh_sftp:open(SftpPid, DataFile, [write]), @@ -181,7 +181,7 @@ renegotiate1(Config) -> timer:sleep(2000), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), false = (Kex2 == Kex1), @@ -208,7 +208,7 @@ renegotiate2(Config) -> ConnectionRef = ssh_test_lib:std_connect(Config, Host, RPort, [{max_random_length_padding,0}]), {ok, SftpPid} = ssh_sftp:start_channel(ConnectionRef), - Kex1 = get_kex_init(ConnectionRef), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), {ok, Handle} = ssh_sftp:open(SftpPid, DataFile, [write]), @@ -223,7 +223,7 @@ renegotiate2(Config) -> timer:sleep(2000), - Kex2 = get_kex_init(ConnectionRef), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), false = (Kex2 == Kex1), @@ -235,19 +235,3 @@ renegotiate2(Config) -> %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- -%% get_kex_init - helper function to get key_exchange_init_msg -get_kex_init(Conn) -> - %% First, validate the key exchange is complete (StateName == connected) - {{connected,_},S} = sys:get_state(Conn), - %% Next, walk through the elements of the #state record looking - %% for the #ssh_msg_kexinit record. This method is robust against - %% changes to either record. The KEXINIT message contains a cookie - %% unique to each invocation of the key exchange procedure (RFC4253) - SL = tuple_to_list(S), - case lists:keyfind(ssh_msg_kexinit, 1, SL) of - false -> - throw(not_found); - KexInit -> - KexInit - end. - diff --git a/lib/ssh/test/ssh_test_lib.erl b/lib/ssh/test/ssh_test_lib.erl index c43c6519f9..f93237f3e7 100644 --- a/lib/ssh/test/ssh_test_lib.erl +++ b/lib/ssh/test/ssh_test_lib.erl @@ -127,24 +127,19 @@ std_simple_exec(Host, Port, Config, Opts) -> ssh:close(ConnectionRef). -start_shell(Port, IOServer, UserDir) -> - start_shell(Port, IOServer, UserDir, []). - -start_shell(Port, IOServer, UserDir, Options) -> - spawn_link(?MODULE, init_shell, [Port, IOServer, [{user_dir, UserDir}|Options]]). - start_shell(Port, IOServer) -> - spawn_link(?MODULE, init_shell, [Port, IOServer, []]). + start_shell(Port, IOServer, []). -init_shell(Port, IOServer, UserDir) -> - Host = hostname(), - Options = [{user_interaction, false}, {silently_accept_hosts, - true}] ++ UserDir, - group_leader(IOServer, self()), - loop_shell(Host, Port, Options). +start_shell(Port, IOServer, ExtraOptions) -> + spawn_link( + fun() -> + Host = hostname(), + Options = [{user_interaction, false}, + {silently_accept_hosts,true} | ExtraOptions], + group_leader(IOServer, self()), + ssh:shell(Host, Port, Options) + end). -loop_shell(Host, Port, Options) -> - ssh:shell(Host, Port, Options). start_io_server() -> spawn_link(?MODULE, init_io_server, [self()]). @@ -208,6 +203,16 @@ reply(TestCase, Result) -> rcv_expected(Expect, SshPort, Timeout) -> receive + {SshPort, Recvd} when is_function(Expect) -> + case Expect(Recvd) of + true -> + ct:log("Got expected ~p from ~p",[Recvd,SshPort]), + catch port_close(SshPort), + rcv_lingering(50); + false -> + ct:log("Got UNEXPECTED ~p~n",[Recvd]), + rcv_expected(Expect, SshPort, Timeout) + end; {SshPort, Expect} -> ct:log("Got expected ~p from ~p",[Expect,SshPort]), catch port_close(SshPort), @@ -792,3 +797,40 @@ busy_wait(Nus, T0) -> end. %%%---------------------------------------------------------------- +%% get_kex_init - helper function to get key_exchange_init_msg + +get_kex_init(Conn) -> + Ref = make_ref(), + {ok,TRef} = timer:send_after(15000, {reneg_timeout,Ref}), + get_kex_init(Conn, Ref, TRef). + +get_kex_init(Conn, Ref, TRef) -> + %% First, validate the key exchange is complete (StateName == connected) + case sys:get_state(Conn) of + {{connected,_}, S} -> + timer:cancel(TRef), + %% Next, walk through the elements of the #state record looking + %% for the #ssh_msg_kexinit record. This method is robust against + %% changes to either record. The KEXINIT message contains a cookie + %% unique to each invocation of the key exchange procedure (RFC4253) + SL = tuple_to_list(S), + case lists:keyfind(ssh_msg_kexinit, 1, SL) of + false -> + throw(not_found); + KexInit -> + KexInit + end; + + {OtherState, S} -> + ct:log("Not in 'connected' state: ~p",[OtherState]), + receive + {reneg_timeout,Ref} -> + ct:log("S = ~p", [S]), + ct:fail(reneg_timeout) + after 0 -> + timer:sleep(100), % If renegotiation is complete we do not + % want to exit on the reneg_timeout + get_kex_init(Conn, Ref, TRef) + end + end. + diff --git a/lib/ssh/test/ssh_to_openssh_SUITE.erl b/lib/ssh/test/ssh_to_openssh_SUITE.erl index a914938c41..86c3d5de26 100644 --- a/lib/ssh/test/ssh_to_openssh_SUITE.erl +++ b/lib/ssh/test/ssh_to_openssh_SUITE.erl @@ -29,6 +29,7 @@ -define(TIMEOUT, 50000). -define(SSH_DEFAULT_PORT, 22). +-define(REKEY_DATA_TMO, 65000). %%-------------------------------------------------------------------- %% Common Test interface functions ----------------------------------- @@ -55,10 +56,12 @@ groups() -> erlang_client_openssh_server_publickey_rsa, erlang_client_openssh_server_password, erlang_client_openssh_server_kexs, - erlang_client_openssh_server_nonexistent_subsystem + erlang_client_openssh_server_nonexistent_subsystem, + erlang_client_openssh_server_renegotiate ]}, {erlang_server, [], [erlang_server_openssh_client_public_key_dsa, - erlang_server_openssh_client_public_key_rsa + erlang_server_openssh_client_public_key_rsa, + erlang_server_openssh_client_renegotiate ]} ]. @@ -104,6 +107,11 @@ init_per_testcase(erlang_server_openssh_client_public_key_rsa, Config) -> chk_key(sshc, 'ssh-rsa', ".ssh/id_rsa", Config); init_per_testcase(erlang_client_openssh_server_publickey_dsa, Config) -> chk_key(sshd, 'ssh-dss', ".ssh/id_dsa", Config); +init_per_testcase(erlang_server_openssh_client_renegotiate, Config) -> + case os:type() of + {unix,_} -> ssh:start(), Config; + Type -> {skip, io_lib:format("Unsupported test on ~p",[Type])} + end; init_per_testcase(_TestCase, Config) -> ssh:start(), Config. @@ -145,7 +153,7 @@ erlang_shell_client_openssh_server(Config) when is_list(Config) -> IO = ssh_test_lib:start_io_server(), Shell = ssh_test_lib:start_shell(?SSH_DEFAULT_PORT, IO), IO ! {input, self(), "echo Hej\n"}, - receive_hej(), + receive_data("Hej"), IO ! {input, self(), "exit\n"}, receive_logout(), receive_normal_exit(Shell). @@ -386,6 +394,111 @@ erlang_server_openssh_client_public_key_X(Config, PubKeyAlg) -> ssh:stop_daemon(Pid). %%-------------------------------------------------------------------- +%% Test that the Erlang/OTP server can renegotiate with openSSH +erlang_server_openssh_client_renegotiate(Config) -> + PubKeyAlg = ssh_rsa, + SystemDir = proplists:get_value(data_dir, Config), + PrivDir = proplists:get_value(priv_dir, Config), + KnownHosts = filename:join(PrivDir, "known_hosts"), + + {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir}, + {public_key_alg, PubKeyAlg}, + {failfun, fun ssh_test_lib:failfun/2}]), + ct:sleep(500), + + RenegLimitK = 3, + DataFile = filename:join(PrivDir, "renegotiate_openssh_client.data"), + Data = lists:duplicate(trunc(1.1*RenegLimitK*1024), $a), + ok = file:write_file(DataFile, Data), + + Cmd = "ssh -p " ++ integer_to_list(Port) ++ + " -o UserKnownHostsFile=" ++ KnownHosts ++ + " -o RekeyLimit=" ++ integer_to_list(RenegLimitK) ++"K" ++ + " " ++ Host ++ " < " ++ DataFile, + OpenSsh = ssh_test_lib:open_port({spawn, Cmd}), + + Expect = fun({data,R}) -> + try + NonAlphaChars = [C || C<-lists:seq(1,255), + not lists:member(C,lists:seq($a,$z)), + not lists:member(C,lists:seq($A,$Z)) + ], + Lines = string:tokens(binary_to_list(R), NonAlphaChars), + lists:any(fun(L) -> length(L)>1 andalso lists:prefix(L, Data) end, + Lines) + catch + _:_ -> false + end; + + ({exit_status,E}) when E=/=0 -> + ct:log("exit_status ~p",[E]), + throw({skip,"exit status"}); + + (_) -> + false + end, + + try + ssh_test_lib:rcv_expected(Expect, OpenSsh, ?TIMEOUT) + of + _ -> + %% Unfortunatly we can't check that there has been a renegotiation, just trust OpenSSH. + ssh:stop_daemon(Pid) + catch + throw:{skip,R} -> {skip,R} + end. + +%%-------------------------------------------------------------------- +erlang_client_openssh_server_renegotiate(_Config) -> + process_flag(trap_exit, true), + + IO = ssh_test_lib:start_io_server(), + Ref = make_ref(), + Parent = self(), + + Shell = + spawn_link( + fun() -> + Host = ssh_test_lib:hostname(), + Options = [{user_interaction, false}, + {silently_accept_hosts,true}], + group_leader(IO, self()), + {ok, ConnRef} = ssh:connect(Host, ?SSH_DEFAULT_PORT, Options), + case ssh_connection:session_channel(ConnRef, infinity) of + {ok,ChannelId} -> + success = ssh_connection:ptty_alloc(ConnRef, ChannelId, []), + Args = [{channel_cb, ssh_shell}, + {init_args,[ConnRef, ChannelId]}, + {cm, ConnRef}, {channel_id, ChannelId}], + {ok, State} = ssh_channel:init([Args]), + Parent ! {ok, Ref, ConnRef}, + ssh_channel:enter_loop(State); + Error -> + Parent ! {error, Ref, Error} + end, + receive + nothing -> ok + end + end), + + receive + {error, Ref, Error} -> + ct:fail("Error=~p",[Error]); + {ok, Ref, ConnectionRef} -> + IO ! {input, self(), "echo Hej1\n"}, + receive_data("Hej1"), + Kex1 = ssh_test_lib:get_kex_init(ConnectionRef), + ssh_connection_handler:renegotiate(ConnectionRef), + IO ! {input, self(), "echo Hej2\n"}, + receive_data("Hej2"), + Kex2 = ssh_test_lib:get_kex_init(ConnectionRef), + IO ! {input, self(), "exit\n"}, + receive_logout(), + receive_normal_exit(Shell), + true = (Kex1 =/= Kex2) + end. + +%%-------------------------------------------------------------------- erlang_client_openssh_server_password() -> [{doc, "Test client password option"}]. erlang_client_openssh_server_password(Config) when is_list(Config) -> @@ -440,27 +553,24 @@ erlang_client_openssh_server_nonexistent_subsystem(Config) when is_list(Config) %%-------------------------------------------------------------------- %%% Internal functions ----------------------------------------------- %%-------------------------------------------------------------------- -receive_hej() -> +receive_data(Data) -> receive - <<"Hej", _binary>> = Hej -> - ct:log("Expected result: ~p~n", [Hej]); - <<"Hej\n", _binary>> = Hej -> - ct:log("Expected result: ~p~n", [Hej]); - <<"Hej\r\n", _/binary>> = Hej -> - ct:log("Expected result: ~p~n", [Hej]); - Info -> - Lines = binary:split(Info, [<<"\r\n">>], [global]), - case lists:member(<<"Hej">>, Lines) of + Info when is_binary(Info) -> + Lines = string:tokens(binary_to_list(Info), "\r\n "), + case lists:member(Data, Lines) of true -> ct:log("Expected result found in lines: ~p~n", [Lines]), ok; false -> ct:log("Extra info: ~p~n", [Info]), - receive_hej() - end + receive_data(Data) + end; + Other -> + ct:log("Unexpected: ~p",[Other]), + receive_data(Data) after 30000 -> ct:fail("timeout ~p:~p",[?MODULE,?LINE]) - end. + end. receive_logout() -> receive diff --git a/lib/ssh/vsn.mk b/lib/ssh/vsn.mk index 7eeeaf796e..c023429056 100644 --- a/lib/ssh/vsn.mk +++ b/lib/ssh/vsn.mk @@ -1,5 +1,5 @@ #-*-makefile-*- ; force emacs to enter makefile-mode -SSH_VSN = 4.3.5 +SSH_VSN = 4.3.6 APP_VSN = "ssh-$(SSH_VSN)" diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml index 68f2f97b6e..edc7e0d8b2 100644 --- a/lib/ssl/doc/src/ssl.xml +++ b/lib/ssl/doc/src/ssl.xml @@ -170,6 +170,14 @@ <tag><c>SNIfun::fun()</c></tag> <item><p><c>= fun(ServerName :: string()) -> [ssl_option()]</c></p></item> + <tag><c>named_curve() =</c></tag> + <item><p><c>sect571r1 | sect571k1 | secp521r1 | brainpoolP512r1 + | sect409k1 | sect409r1 | brainpoolP384r1 | secp384r1 + | sect283k1 | sect283r1 | brainpoolP256r1 | secp256k1 | secp256r1 + | sect239k1 | sect233k1 | sect233r1 | secp224k1 | secp224r1 + | sect193r1 | sect193r2 | secp192k1 | secp192r1 | sect163k1 + | sect163r1 | sect163r2 | secp160k1 | secp160r1 | secp160r2</c></p></item> + </taglist> </section> @@ -217,6 +225,11 @@ Anonymous cipher suites are supported for testing purposes only and are not be used when security matters.</p></item> + <tag><c>{eccs, [named_curve()]}</c></tag> + <item><p> Allows to specify the order of preference for named curves + and to restrict their usage when using a cipher suite supporting them. + </p></item> + <tag><c>{secure_renegotiate, boolean()}</c></tag> <item><p>Specifies if to reject renegotiation attempt that does not live up to @@ -751,6 +764,11 @@ fun(srp, Username :: string(), UserState :: term()) -> (the default), use the client's preference. </item> + <tag><c>{honor_ecc_order, boolean()}</c></tag> + <item>If true, use the server's preference for ECC curve selection. If false + (the default), use the client's preference. + </item> + <tag><c>{signature_algs, [{hash(), ecdsa | rsa | dsa}]}</c></tag> <item><p> The algorithms specified by this option will be the ones accepted by the server in a signature algorithm @@ -804,6 +822,17 @@ fun(srp, Username :: string(), UserState :: term()) -> </func> <func> + <name>eccs() -></name> + <name>eccs(protocol()) -> [named_curve()]</name> + <fsummary>Returns a list of supported ECCs.</fsummary> + + <desc><p>Returns a list of supported ECCs. <c>eccs()</c> + is equivalent to calling <c>eccs(Protocol)</c> with all + supported protocols and then deduplicating the output.</p> + </desc> + </func> + + <func> <name>clear_pem_cache() -> ok </name> <fsummary> Clears the pem cache</fsummary> @@ -898,7 +927,7 @@ fun(srp, Username :: string(), UserState :: term()) -> <fsummary>Returns all the connection information. </fsummary> <type> - <v>Item = protocol | cipher_suite | sni_hostname | atom()</v> + <v>Item = protocol | cipher_suite | sni_hostname | ecc | atom()</v> <d>Meaningful atoms, not specified above, are the ssl option names.</d> <v>Result = [{Item::atom(), Value::term()}]</v> <v>Reason = term()</v> diff --git a/lib/ssl/doc/src/ssl_distribution.xml b/lib/ssl/doc/src/ssl_distribution.xml index 1150043e76..61f88e3860 100644 --- a/lib/ssl/doc/src/ssl_distribution.xml +++ b/lib/ssl/doc/src/ssl_distribution.xml @@ -43,7 +43,7 @@ Erlang node distributed, <c>net_kernel</c> uses this module to set up listen ports and connections.</p> - <p>In the SSL application, an exra distribution + <p>In the SSL application, an extra distribution module, <c>inet_tls_dist</c>, can be used as an alternative. All distribution connections will use SSL and all participating Erlang nodes in a distributed system must use diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl index 27b753af2e..aa62ab8865 100644 --- a/lib/ssl/src/ssl.erl +++ b/lib/ssl/src/ssl.erl @@ -38,7 +38,7 @@ getopts/2, setopts/2, getstat/1, getstat/2 ]). %% SSL/TLS protocol handling --export([cipher_suites/0, cipher_suites/1, +-export([cipher_suites/0, cipher_suites/1, eccs/0, eccs/1, connection_info/1, versions/0, session_info/1, format_error/1, renegotiate/1, prf/5, negotiated_protocol/1, negotiated_next_protocol/1, connection_information/1, connection_information/2]). @@ -420,6 +420,33 @@ cipher_suites(all) -> [ssl_cipher:erl_suite_definition(Suite) || Suite <- available_suites(all)]. %%-------------------------------------------------------------------- +-spec eccs() -> tls_v1:curves(). +%% Description: returns all supported curves across all versions +%%-------------------------------------------------------------------- +eccs() -> + Curves = tls_v1:ecc_curves(all), % only tls_v1 has named curves right now + eccs_filter_supported(Curves). + +%%-------------------------------------------------------------------- +-spec eccs(tls_record:tls_version() | tls_record:tls_atom_version()) -> + tls_v1:curves(). +%% Description: returns the curves supported for a given version of +%% ssl/tls. +%%-------------------------------------------------------------------- +eccs({3,0}) -> + []; +eccs({3,_}) -> + Curves = tls_v1:ecc_curves(all), + eccs_filter_supported(Curves); +eccs(AtomVersion) when is_atom(AtomVersion) -> + eccs(tls_record:protocol_version(AtomVersion)). + +eccs_filter_supported(Curves) -> + CryptoCurves = crypto:ec_curves(), + lists:filter(fun(Curve) -> proplists:get_bool(Curve, CryptoCurves) end, + Curves). + +%%-------------------------------------------------------------------- -spec getopts(#sslsocket{}, [gen_tcp:option_name()]) -> {ok, [gen_tcp:option()]} | {error, reason()}. %% @@ -647,6 +674,8 @@ do_connect(Address, Port, end. %% Handle extra ssl options given to ssl_accept +-spec handle_options([any()], #ssl_options{}) -> #ssl_options{} + ; ([any()], client | server) -> {ok, #config{}}. handle_options(Opts0, #ssl_options{protocol = Protocol, cacerts = CaCerts0, cacertfile = CaCertFile0} = InheritedSslOpts) -> RecordCB = record_cb(Protocol), @@ -725,6 +754,8 @@ handle_options(Opts0, Role) -> srp_identity = handle_option(srp_identity, Opts, undefined), ciphers = handle_cipher_option(proplists:get_value(ciphers, Opts, []), RecordCb:highest_protocol_version(Versions)), + eccs = handle_eccs_option(proplists:get_value(eccs, Opts, eccs()), + RecordCb:highest_protocol_version(Versions)), signature_algs = handle_hashsigns_option(proplists:get_value(signature_algs, Opts, default_option_role(server, tls_v1:default_signature_algs(Versions), Role)), @@ -755,6 +786,9 @@ handle_options(Opts0, Role) -> honor_cipher_order = handle_option(honor_cipher_order, Opts, default_option_role(server, false, Role), server, Role), + honor_ecc_order = handle_option(honor_ecc_order, Opts, + default_option_role(server, false, Role), + server, Role), protocol = proplists:get_value(protocol, Opts, tls), padding_check = proplists:get_value(padding_check, Opts, true), beast_mitigation = handle_option(beast_mitigation, Opts, one_n_minus_one), @@ -780,7 +814,7 @@ handle_options(Opts0, Role) -> alpn_preferred_protocols, next_protocols_advertised, client_preferred_next_protocols, log_alert, server_name_indication, honor_cipher_order, padding_check, crl_check, crl_cache, - fallback, signature_algs, beast_mitigation, v2_hello_compatible], + fallback, signature_algs, eccs, honor_ecc_order, beast_mitigation, v2_hello_compatible], SockOpts = lists:foldl(fun(Key, PropList) -> proplists:delete(Key, PropList) @@ -1010,6 +1044,8 @@ validate_option(sni_fun, Fun) when is_function(Fun) -> Fun; validate_option(honor_cipher_order, Value) when is_boolean(Value) -> Value; +validate_option(honor_ecc_order, Value) when is_boolean(Value) -> + Value; validate_option(padding_check, Value) when is_boolean(Value) -> Value; validate_option(fallback, Value) when is_boolean(Value) -> @@ -1164,6 +1200,14 @@ binary_cipher_suites(Version, Ciphers0) -> Ciphers = [ssl_cipher:openssl_suite(C) || C <- string:tokens(Ciphers0, ":")], binary_cipher_suites(Version, Ciphers). +handle_eccs_option(Value, {_Major, Minor}) when is_list(Value) -> + try tls_v1:ecc_curves(Minor, Value) of + Curves -> #elliptic_curves{elliptic_curve_list = Curves} + catch + exit:_ -> throw({error, {options, {eccs, Value}}}); + error:_ -> throw({error, {options, {eccs, Value}}}) + end. + unexpected_format(Error) -> lists:flatten(io_lib:format("Unexpected error: ~p", [Error])). @@ -1334,6 +1378,14 @@ new_ssl_options([{server_name_indication, Value} | Rest], #ssl_options{} = Opts, new_ssl_options(Rest, Opts#ssl_options{server_name_indication = validate_option(server_name_indication, Value)}, RecordCB); new_ssl_options([{honor_cipher_order, Value} | Rest], #ssl_options{} = Opts, RecordCB) -> new_ssl_options(Rest, Opts#ssl_options{honor_cipher_order = validate_option(honor_cipher_order, Value)}, RecordCB); +new_ssl_options([{honor_ecc_order, Value} | Rest], #ssl_options{} = Opts, RecordCB) -> + new_ssl_options(Rest, Opts#ssl_options{honor_ecc_order = validate_option(honor_ecc_order, Value)}, RecordCB); +new_ssl_options([{eccs, Value} | Rest], #ssl_options{} = Opts, RecordCB) -> + new_ssl_options(Rest, + Opts#ssl_options{eccs = + handle_eccs_option(Value, RecordCB:highest_protocol_version()) + }, + RecordCB); new_ssl_options([{signature_algs, Value} | Rest], #ssl_options{} = Opts, RecordCB) -> new_ssl_options(Rest, Opts#ssl_options{signature_algs = diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl index 08fca76123..b6e4d5b433 100644 --- a/lib/ssl/src/ssl_connection.erl +++ b/lib/ssl/src/ssl_connection.erl @@ -1172,14 +1172,23 @@ handle_alert(#alert{level = ?WARNING} = Alert, StateName, %%% Internal functions %%-------------------------------------------------------------------- connection_info(#state{sni_hostname = SNIHostname, - session = #session{cipher_suite = CipherSuite}, + session = #session{cipher_suite = CipherSuite, ecc = ECCCurve}, protocol_cb = Connection, negotiated_version = {_,_} = Version, ssl_options = Opts}) -> RecordCB = record_cb(Connection), + CipherSuiteDef = ssl_cipher:erl_suite_definition(CipherSuite), + IsNamedCurveSuite = lists:member(element(1,CipherSuiteDef), + [ecdh_ecdsa, ecdhe_ecdsa, ecdh_anon]), + CurveInfo = case ECCCurve of + {namedCurve, Curve} when IsNamedCurveSuite -> + [{ecc, {named_curve, pubkey_cert_records:namedCurves(Curve)}}]; + _ -> + [] + end, [{protocol, RecordCB:protocol_version(Version)}, - {cipher_suite, ssl_cipher:erl_suite_definition(CipherSuite)}, - {sni_hostname, SNIHostname}] ++ ssl_options_list(Opts). + {cipher_suite, CipherSuiteDef}, + {sni_hostname, SNIHostname} | CurveInfo] ++ ssl_options_list(Opts). do_server_hello(Type, #hello_extensions{next_protocol_negotiation = NextProtocols} = ServerHelloExt, @@ -1741,12 +1750,13 @@ calculate_secret(#server_dh_params{dh_p = Prime, dh_g = Base, Connection, certify, certify); calculate_secret(#server_ecdh_params{curve = ECCurve, public = ECServerPubKey}, - State, Connection) -> + State=#state{session=Session}, Connection) -> ECDHKeys = public_key:generate_key(ECCurve), PremasterSecret = ssl_handshake:premaster_secret(#'ECPoint'{point = ECServerPubKey}, ECDHKeys), calculate_master_secret(PremasterSecret, - State#state{diffie_hellman_keys = ECDHKeys}, + State#state{diffie_hellman_keys = ECDHKeys, + session = Session#session{ecc = ECCurve}}, Connection, certify, certify); calculate_secret(#server_psk_params{ diff --git a/lib/ssl/src/ssl_handshake.erl b/lib/ssl/src/ssl_handshake.erl index 5b51ac0916..4acc745c5f 100644 --- a/lib/ssl/src/ssl_handshake.erl +++ b/lib/ssl/src/ssl_handshake.erl @@ -70,7 +70,7 @@ %% Extensions handling -export([client_hello_extensions/6, handle_client_hello_extensions/9, %% Returns server hello extensions - handle_server_hello_extensions/9, select_curve/2 + handle_server_hello_extensions/9, select_curve/2, select_curve/3 ]). %% MISC @@ -120,11 +120,13 @@ server_hello_done() -> #server_hello_done{}. client_hello_extensions(Host, Version, CipherSuites, - #ssl_options{signature_algs = SupportedHashSigns, versions = AllVersions} = SslOpts, ConnectionStates, Renegotiation) -> + #ssl_options{signature_algs = SupportedHashSigns, + eccs = SupportedECCs, + versions = AllVersions} = SslOpts, ConnectionStates, Renegotiation) -> {EcPointFormats, EllipticCurves} = case advertises_ec_ciphers(lists:map(fun ssl_cipher:suite_definition/1, CipherSuites)) of true -> - client_ecc_extensions(tls_v1, Version); + client_ecc_extensions(SupportedECCs); false -> {undefined, undefined} end, @@ -1169,8 +1171,9 @@ select_session(SuggestedSessionId, CipherSuites, HashSigns, Compressions, Port, {resumed, Resumed} end. -supported_ecc({Major, Minor} = Version) when ((Major == 3) and (Minor >= 1)) orelse (Major > 3) -> - Curves = tls_v1:ecc_curves(Version), +%% Deprecated? +supported_ecc({Major, Minor}) when ((Major == 3) and (Minor >= 1)) orelse (Major > 3) -> + Curves = tls_v1:ecc_curves(Minor), #elliptic_curves{elliptic_curve_list = Curves}; supported_ecc(_) -> #elliptic_curves{elliptic_curve_list = []}. @@ -1454,12 +1457,12 @@ srp_user(#ssl_options{srp_identity = {UserName, _}}) -> srp_user(_) -> undefined. -client_ecc_extensions(Module, Version) -> +client_ecc_extensions(SupportedECCs) -> CryptoSupport = proplists:get_value(public_keys, crypto:supports()), case proplists:get_bool(ecdh, CryptoSupport) of true -> EcPointFormats = #ec_point_formats{ec_point_format_list = [?ECPOINT_UNCOMPRESSED]}, - EllipticCurves = #elliptic_curves{elliptic_curve_list = Module:ecc_curves(Version)}, + EllipticCurves = SupportedECCs, {EcPointFormats, EllipticCurves}; _ -> {undefined, undefined} @@ -1493,22 +1496,34 @@ advertises_ec_ciphers([{ecdh_anon, _,_,_} | _]) -> true; advertises_ec_ciphers([_| Rest]) -> advertises_ec_ciphers(Rest). -select_curve(#elliptic_curves{elliptic_curve_list = ClientCurves}, - #elliptic_curves{elliptic_curve_list = ServerCurves}) -> - select_curve(ClientCurves, ServerCurves); -select_curve(undefined, _) -> + +select_curve(Client, Server) -> + select_curve(Client, Server, false). + +select_curve(#elliptic_curves{elliptic_curve_list = ClientCurves}, + #elliptic_curves{elliptic_curve_list = ServerCurves}, + ServerOrder) -> + case ServerOrder of + false -> + select_shared_curve(ClientCurves, ServerCurves); + true -> + select_shared_curve(ServerCurves, ClientCurves) + end; +select_curve(undefined, _, _) -> %% Client did not send ECC extension use default curve if %% ECC cipher is negotiated - {namedCurve, ?secp256r1}; -select_curve(_, []) -> + {namedCurve, ?secp256r1}. + +select_shared_curve([], _) -> no_curve; -select_curve(Curves, [Curve| Rest]) -> +select_shared_curve([Curve | Rest], Curves) -> case lists:member(Curve, Curves) of true -> {namedCurve, Curve}; false -> - select_curve(Curves, Rest) + select_shared_curve(Rest, Curves) end. + %% RFC 6066, Section 3: Currently, the only server names supported are %% DNS hostnames sni(_, disable) -> diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl index c19c1787ff..487d1fa096 100644 --- a/lib/ssl/src/ssl_internal.hrl +++ b/lib/ssl/src/ssl_internal.hrl @@ -140,6 +140,8 @@ crl_check :: boolean() | peer | best_effort, crl_cache, signature_algs, + eccs, + honor_ecc_order :: boolean(), v2_hello_compatible :: boolean() }). diff --git a/lib/ssl/src/tls_handshake.erl b/lib/ssl/src/tls_handshake.erl index a2486bf752..2bd103c18a 100644 --- a/lib/ssl/src/tls_handshake.erl +++ b/lib/ssl/src/tls_handshake.erl @@ -160,13 +160,15 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId, extensions = #hello_extensions{elliptic_curves = Curves, signature_algs = ClientHashSigns} = HelloExt}, #ssl_options{versions = Versions, - signature_algs = SupportedHashSigns} = SslOpts, + signature_algs = SupportedHashSigns, + eccs = SupportedECCs, + honor_ecc_order = ECCOrder} = SslOpts, {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) -> case tls_record:is_acceptable_version(Version, Versions) of true -> AvailableHashSigns = ssl_handshake:available_signature_algs( ClientHashSigns, SupportedHashSigns, Cert, Version), - ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)), + ECCCurve = ssl_handshake:select_curve(Curves, SupportedECCs, ECCOrder), {Type, #session{cipher_suite = CipherSuite} = Session1} = ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions, Port, Session0#session{ecc = ECCCurve}, Version, diff --git a/lib/ssl/src/tls_v1.erl b/lib/ssl/src/tls_v1.erl index 711db77708..7f24ce5192 100644 --- a/lib/ssl/src/tls_v1.erl +++ b/lib/ssl/src/tls_v1.erl @@ -31,9 +31,18 @@ -export([master_secret/4, finished/5, certificate_verify/3, mac_hash/7, setup_keys/8, suites/1, prf/5, - ecc_curves/1, oid_to_enum/1, enum_to_oid/1, + ecc_curves/1, ecc_curves/2, oid_to_enum/1, enum_to_oid/1, default_signature_algs/1, signature_algs/2]). +-type named_curve() :: sect571r1 | sect571k1 | secp521r1 | brainpoolP512r1 | + sect409k1 | sect409r1 | brainpoolP384r1 | secp384r1 | + sect283k1 | sect283r1 | brainpoolP256r1 | secp256k1 | secp256r1 | + sect239k1 | sect233k1 | sect233r1 | secp224k1 | secp224r1 | + sect193r1 | sect193r2 | secp192k1 | secp192r1 | sect163k1 | + sect163r1 | sect163r2 | secp160k1 | secp160r1 | secp160r2. +-type curves() :: [named_curve()]. +-export_type([curves/0, named_curve/0]). + %%==================================================================== %% Internal application API %%==================================================================== @@ -399,13 +408,20 @@ is_pair(Hash, rsa, Hashs) -> lists:member(Hash, AtLeastMd5). %% list ECC curves in prefered order -ecc_curves(_Minor) -> - TLSCurves = [sect571r1,sect571k1,secp521r1,brainpoolP512r1, - sect409k1,sect409r1,brainpoolP384r1,secp384r1, - sect283k1,sect283r1,brainpoolP256r1,secp256k1,secp256r1, - sect239k1,sect233k1,sect233r1,secp224k1,secp224r1, - sect193r1,sect193r2,secp192k1,secp192r1,sect163k1, - sect163r1,sect163r2,secp160k1,secp160r1,secp160r2], +-spec ecc_curves(1..3 | all) -> [named_curve()]. +ecc_curves(all) -> + [sect571r1,sect571k1,secp521r1,brainpoolP512r1, + sect409k1,sect409r1,brainpoolP384r1,secp384r1, + sect283k1,sect283r1,brainpoolP256r1,secp256k1,secp256r1, + sect239k1,sect233k1,sect233r1,secp224k1,secp224r1, + sect193r1,sect193r2,secp192k1,secp192r1,sect163k1, + sect163r1,sect163r2,secp160k1,secp160r1,secp160r2]; +ecc_curves(Minor) -> + TLSCurves = ecc_curves(all), + ecc_curves(Minor, TLSCurves). + +-spec ecc_curves(1..3, [named_curve()]) -> [named_curve()]. +ecc_curves(_Minor, TLSCurves) -> CryptoCurves = crypto:ec_curves(), lists:foldr(fun(Curve, Curves) -> case proplists:get_bool(Curve, CryptoCurves) of @@ -414,6 +430,7 @@ ecc_curves(_Minor) -> end end, [], TLSCurves). + %% ECC curves from draft-ietf-tls-ecc-12.txt (Oct. 17, 2005) oid_to_enum(?sect163k1) -> 1; oid_to_enum(?sect163r1) -> 2; diff --git a/lib/ssl/test/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl index 258922d128..76999185b6 100644 --- a/lib/ssl/test/ssl_ECC_SUITE.erl +++ b/lib/ssl/test/ssl_ECC_SUITE.erl @@ -46,7 +46,7 @@ groups() -> {'tlsv1', [], all_versions_groups()}, {'erlang_server', [], key_cert_combinations()}, {'erlang_client', [], key_cert_combinations()}, - {'erlang', [], key_cert_combinations() ++ misc()} + {'erlang', [], key_cert_combinations() ++ misc() ++ ecc_negotiation()} ]. all_versions_groups ()-> @@ -68,6 +68,23 @@ key_cert_combinations() -> misc()-> [client_ecdsa_server_ecdsa_with_raw_key]. +ecc_negotiation() -> + [ecc_default_order, + ecc_default_order_custom_curves, + ecc_client_order, + ecc_client_order_custom_curves, + ecc_unknown_curve, + client_ecdh_server_ecdh_ecc_server_custom, + client_rsa_server_ecdh_ecc_server_custom, + client_ecdh_server_rsa_ecc_server_custom, + client_rsa_server_rsa_ecc_server_custom, + client_ecdsa_server_ecdsa_ecc_server_custom, + client_ecdsa_server_rsa_ecc_server_custom, + client_rsa_server_ecdsa_ecc_server_custom, + client_ecdsa_server_ecdsa_ecc_client_custom, + client_rsa_server_ecdsa_ecc_client_custom + ]. + %%-------------------------------------------------------------------- init_per_suite(Config0) -> end_per_suite(Config0), @@ -218,6 +235,132 @@ client_ecdsa_server_ecdsa_with_raw_key(Config) when is_list(Config) -> check_result(Server, SType, Client, CType), close(Server, Client). +ecc_default_order(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [], + case supported_eccs([{eccs, [sect571r1]}]) of + true -> ecc_test(sect571r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +ecc_default_order_custom_curves(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(sect571r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +ecc_client_order(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{honor_ecc_order, false}], + case supported_eccs([{eccs, [sect571r1]}]) of + true -> ecc_test(sect571r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +ecc_client_order_custom_curves(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{honor_ecc_order, false}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(sect571r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +ecc_unknown_curve(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{eccs, ['123_fake_curve']}], + ecc_test_error(COpts, SOpts, [], ECCOpts, Config). + +%% We can only expect to see a named curve on a conn with +%% a server supporting ecdsa. Otherwise the curve is selected +%% but not used and communicated to the client? +client_ecdh_server_ecdh_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_ecdh_rsa_opts, Config), + SOpts = proplists:get_value(server_ecdh_rsa_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(undefined, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_ecdh_server_rsa_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_ecdh_rsa_opts, Config), + SOpts = proplists:get_value(server_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(undefined, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_rsa_server_ecdh_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_opts, Config), + SOpts = proplists:get_value(server_ecdh_rsa_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(undefined, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_rsa_server_rsa_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_opts, Config), + SOpts = proplists:get_value(server_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(undefined, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_ecdsa_server_ecdsa_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(secp256r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_ecdsa_server_rsa_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(undefined, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_rsa_server_ecdsa_ecc_server_custom(Config) -> + COpts = proplists:get_value(client_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{honor_ecc_order, true}, {eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(secp256r1, COpts, SOpts, [], ECCOpts, Config); + false -> {skip, "unsupported named curves"} + end. + +client_ecdsa_server_ecdsa_ecc_client_custom(Config) -> + COpts = proplists:get_value(client_ecdsa_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(secp256r1, COpts, SOpts, ECCOpts, [], Config); + false -> {skip, "unsupported named curves"} + end. + +client_rsa_server_ecdsa_ecc_client_custom(Config) -> + COpts = proplists:get_value(client_opts, Config), + SOpts = proplists:get_value(server_ecdsa_opts, Config), + ECCOpts = [{eccs, [secp256r1, sect571r1]}], + case supported_eccs(ECCOpts) of + true -> ecc_test(secp256r1, COpts, SOpts, ECCOpts, [], Config); + false -> {skip, "unsupported named curves"} + end. + %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- @@ -244,6 +387,30 @@ basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Con check_result(Server, SType, Client, CType), close(Server, Client). +ecc_test(Expect, COpts, SOpts, CECCOpts, SECCOpts, Config) -> + CCA = proplists:get_value(cacertfile, COpts), + CCert = proplists:get_value(certfile, COpts), + CKey = proplists:get_value(keyfile, COpts), + SCA = proplists:get_value(cacertfile, SOpts), + SCert = proplists:get_value(certfile, SOpts), + SKey = proplists:get_value(keyfile, SOpts), + {Server, Port} = start_server_ecc(erlang, CCA, SCA, SCert, SKey, Expect, SECCOpts, Config), + Client = start_client_ecc(erlang, Port, SCA, CCA, CCert, CKey, Expect, CECCOpts, Config), + ssl_test_lib:check_result(Server, ok, Client, ok), + close(Server, Client). + +ecc_test_error(COpts, SOpts, CECCOpts, SECCOpts, Config) -> + CCA = proplists:get_value(cacertfile, COpts), + CCert = proplists:get_value(certfile, COpts), + CKey = proplists:get_value(keyfile, COpts), + SCA = proplists:get_value(cacertfile, SOpts), + SCert = proplists:get_value(certfile, SOpts), + SKey = proplists:get_value(keyfile, SOpts), + {Server, Port} = start_server_ecc_error(erlang, CCA, SCA, SCert, SKey, SECCOpts, Config), + Client = start_client_ecc_error(erlang, Port, SCA, CCA, CCert, CKey, CECCOpts, Config), + Error = {error, {tls_alert, "insufficient security"}}, + ssl_test_lib:check_result(Server, Error, Client, Error). + start_client(openssl, Port, PeerCA, OwnCa, Cert, Key, _Config) -> CA = new_openssl_ca("openssl_client_ca", PeerCA, OwnCa), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), @@ -267,6 +434,31 @@ start_client(erlang, Port, PeerCA, OwnCa, Cert, Key, Config) -> {cacertfile, CA}, {certfile, Cert}, {keyfile, Key}]}]). +start_client_ecc(erlang, Port, PeerCA, OwnCa, Cert, Key, Expect, ECCOpts, Config) -> + CA = new_ca("erlang_client_ca", PeerCA, OwnCa), + {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config), + ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, + {host, Hostname}, + {from, self()}, + {mfa, {?MODULE, check_ecc, [client, Expect]}}, + {options, + ECCOpts ++ + [{verify, verify_peer}, + {cacertfile, CA}, + {certfile, Cert}, {keyfile, Key}]}]). + +start_client_ecc_error(erlang, Port, PeerCA, OwnCa, Cert, Key, ECCOpts, Config) -> + CA = new_ca("erlang_client_ca", PeerCA, OwnCa), + {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config), + ssl_test_lib:start_client_error([{node, ClientNode}, {port, Port}, + {host, Hostname}, + {from, self()}, + {options, + ECCOpts ++ + [{verify, verify_peer}, + {cacertfile, CA}, + {certfile, Cert}, {keyfile, Key}]}]). + start_server(openssl, PeerCA, OwnCa, Cert, Key, _Config) -> CA = new_openssl_ca("openssl_server_ca", PeerCA, OwnCa), Port = ssl_test_lib:inet_port(node()), @@ -290,6 +482,7 @@ start_server(erlang, PeerCA, OwnCa, Cert, Key, Config) -> [{verify, verify_peer}, {cacertfile, CA}, {certfile, Cert}, {keyfile, Key}]}]), {Server, ssl_test_lib:inet_port(Server)}. + start_server_with_raw_key(erlang, PeerCA, OwnCa, Cert, Key, Config) -> CA = new_ca("erlang_server_ca", PeerCA, OwnCa), {_, ServerNode, _} = ssl_test_lib:run_where(Config), @@ -303,6 +496,29 @@ start_server_with_raw_key(erlang, PeerCA, OwnCa, Cert, Key, Config) -> {certfile, Cert}, {key, Key}]}]), {Server, ssl_test_lib:inet_port(Server)}. +start_server_ecc(erlang, PeerCA, OwnCa, Cert, Key, Expect, ECCOpts, Config) -> + CA = new_ca("erlang_server_ca", PeerCA, OwnCa), + {_, ServerNode, _} = ssl_test_lib:run_where(Config), + Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, + {from, self()}, + {mfa, {?MODULE, check_ecc, [server, Expect]}}, + {options, + ECCOpts ++ + [{verify, verify_peer}, {cacertfile, CA}, + {certfile, Cert}, {keyfile, Key}]}]), + {Server, ssl_test_lib:inet_port(Server)}. + +start_server_ecc_error(erlang, PeerCA, OwnCa, Cert, Key, ECCOpts, Config) -> + CA = new_ca("erlang_server_ca", PeerCA, OwnCa), + {_, ServerNode, _} = ssl_test_lib:run_where(Config), + Server = ssl_test_lib:start_server_error([{node, ServerNode}, {port, 0}, + {from, self()}, + {options, + ECCOpts ++ + [{verify, verify_peer}, {cacertfile, CA}, + {certfile, Cert}, {keyfile, Key}]}]), + {Server, ssl_test_lib:inet_port(Server)}. + check_result(Server, erlang, Client, erlang) -> ssl_test_lib:check_result(Server, ok, Client, ok); check_result(Server, erlang, _, _) -> @@ -350,15 +566,20 @@ new_openssl_ca(FileName, CA, OwnCa) -> E1 = public_key:pem_decode(P1), {ok, P2} = file:read_file(OwnCa), E2 = public_key:pem_decode(P2), - case os:cmd("openssl version") of - "OpenSSL 1.0.1p-freebsd" ++ _ -> - Pem = public_key:pem_encode(E1 ++E2), - file:write_file(FileName, Pem); - "LibreSSL" ++ _ -> - Pem = public_key:pem_encode(E1 ++E2), - file:write_file(FileName, Pem); - _ -> - Pem = public_key:pem_encode(E2 ++E1), - file:write_file(FileName, Pem) - end, + Pem = public_key:pem_encode(E2 ++E1), + file:write_file(FileName, Pem), FileName. + +supported_eccs(Opts) -> + ToCheck = proplists:get_value(eccs, Opts, []), + Supported = ssl:eccs(), + lists:all(fun(Curve) -> lists:member(Curve, Supported) end, ToCheck). + +check_ecc(SSL, Role, Expect) -> + {ok, Data} = ssl:connection_information(SSL), + case lists:keyfind(ecc, 1, Data) of + {ecc, {named_curve, Expect}} -> ok; + false when Expect =:= undefined -> ok; + Other -> {error, Role, Expect, Other} + end. + diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl index 1be43c56c4..392da738ec 100644 --- a/lib/ssl/test/ssl_basic_SUITE.erl +++ b/lib/ssl/test/ssl_basic_SUITE.erl @@ -150,6 +150,7 @@ api_tests() -> peercert_with_client_cert, sockname, versions, + eccs, controlling_process, getstat, close_with_timeout, @@ -456,6 +457,15 @@ init_per_testcase(accept_pool, Config) -> init_per_testcase(controller_dies, Config) -> ct:timetrap({seconds, 10}), Config; +init_per_testcase(eccs, Config) -> + case ssl:eccs() of + [] -> + {skip, "named curves not supported"}; + [_|_] -> + ssl_test_lib:ct_log_supported_protocol_versions(Config), + ct:timetrap({seconds, 5}), + Config + end; init_per_testcase(_TestCase, Config) -> ssl_test_lib:ct_log_supported_protocol_versions(Config), ct:timetrap({seconds, 5}), @@ -1504,6 +1514,25 @@ versions(Config) when is_list(Config) -> [_|_] = Versions = ssl:versions(), ct:log("~p~n", [Versions]). + +%%-------------------------------------------------------------------- +eccs() -> + [{doc, "Test API functions eccs/0 and eccs/1"}]. + +eccs(Config) when is_list(Config) -> + [_|_] = All = ssl:eccs(), + [] = SSL3 = ssl:eccs({3,0}), + [_|_] = Tls = ssl:eccs({3,1}), + [_|_] = Tls1 = ssl:eccs({3,2}), + [_|_] = Tls2 = ssl:eccs({3,3}), + [] = SSL3 = ssl:eccs(sslv3), + [_|_] = Tls = ssl:eccs(tlsv1), + [_|_] = Tls1 = ssl:eccs('tlsv1.1'), + [_|_] = Tls2 = ssl:eccs('tlsv1.2'), + %% ordering is currently unverified by the test + true = lists:sort(All) =:= lists:usort(SSL3 ++ Tls ++ Tls1 ++ Tls2), + ok. + %%-------------------------------------------------------------------- send_recv() -> [{doc,""}]. @@ -2164,7 +2193,7 @@ ciphers_dsa_signed_certs() -> ciphers_dsa_signed_certs(Config) when is_list(Config) -> Version = ssl_test_lib:protocol_version(Config), - Ciphers = ssl_test_lib:dsa_suites(), + Ciphers = ssl_test_lib:dsa_suites(tls_record:protocol_version(Version)), ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]), run_suites(Ciphers, Version, Config, dsa). %%------------------------------------------------------------------- @@ -2305,7 +2334,7 @@ ciphers_ecdsa_signed_certs() -> ciphers_ecdsa_signed_certs(Config) when is_list(Config) -> Version = ssl_test_lib:protocol_version(Config), - Ciphers = ssl_test_lib:ecdsa_suites(), + Ciphers = ssl_test_lib:ecdsa_suites(tls_record:protocol_version(Version)), ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]), run_suites(Ciphers, Version, Config, ecdsa). %%-------------------------------------------------------------------- @@ -2323,7 +2352,7 @@ ciphers_ecdh_rsa_signed_certs() -> ciphers_ecdh_rsa_signed_certs(Config) when is_list(Config) -> Version = ssl_test_lib:protocol_version(Config), - Ciphers = ssl_test_lib:ecdh_rsa_suites(), + Ciphers = ssl_test_lib:ecdh_rsa_suites(tls_record:protocol_version(Version)), ct:log("~p erlang cipher suites ~p~n", [Version, Ciphers]), run_suites(Ciphers, Version, Config, ecdh_rsa). %%-------------------------------------------------------------------- @@ -3634,9 +3663,10 @@ no_rizzo_rc4() -> [{doc,"Test that there is no 1/n-1-split for RC4 as it is not vunrable to Rizzo/Dungon attack"}]. no_rizzo_rc4(Config) when is_list(Config) -> - Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(),Y == rc4_128], Prop = proplists:get_value(tc_group_properties, Config), Version = proplists:get_value(name, Prop), + Ciphers = [ssl_cipher:erl_suite_definition(Suite) || + Suite <- ssl_test_lib:rc4_suites(tls_record:protocol_version(Version))], run_send_recv_rizzo(Ciphers, Config, Version, {?MODULE, send_recv_result_active_no_rizzo, []}). @@ -3644,9 +3674,10 @@ rizzo_one_n_minus_one() -> [{doc,"Test that the 1/n-1-split mitigation of Rizzo/Dungon attack can be explicitly selected"}]. rizzo_one_n_minus_one(Config) when is_list(Config) -> - Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128], Prop = proplists:get_value(tc_group_properties, Config), Version = proplists:get_value(name, Prop), + AllSuites = ssl_test_lib:available_suites(tls_record:protocol_version(Version)), + Ciphers = [X || X ={_,Y,_} <- AllSuites, Y =/= rc4_128], run_send_recv_rizzo(Ciphers, Config, Version, {?MODULE, send_recv_result_active_rizzo, []}). @@ -3654,9 +3685,10 @@ rizzo_zero_n() -> [{doc,"Test that the 0/n-split mitigation of Rizzo/Dungon attack can be explicitly selected"}]. rizzo_zero_n(Config) when is_list(Config) -> - Ciphers = [X || X ={_,Y,_} <- ssl:cipher_suites(), Y =/= rc4_128], Prop = proplists:get_value(tc_group_properties, Config), Version = proplists:get_value(name, Prop), + AllSuites = ssl_test_lib:available_suites(tls_record:protocol_version(Version)), + Ciphers = [X || X ={_,Y,_} <- AllSuites, Y =/= rc4_128], run_send_recv_rizzo(Ciphers, Config, Version, {?MODULE, send_recv_result_active_no_rizzo, []}). @@ -4407,7 +4439,7 @@ rizzo_test(Cipher, Config, Version, Mfa) -> {host, Hostname}, {from, self()}, {mfa, Mfa}, - {options, [{active, true} | ClientOpts]}]), + {options, [{active, true}, {ciphers, [Cipher]}| ClientOpts]}]), Result = ssl_test_lib:check_result(Server, ok, Client, ok), ssl_test_lib:close(Server), @@ -4698,3 +4730,4 @@ first_rsa_suite([_ | Rest]) -> wait_for_send(Socket) -> %% Make sure TLS process processed send message event _ = ssl:connection_information(Socket). + diff --git a/lib/ssl/test/ssl_certificate_verify_SUITE.erl b/lib/ssl/test/ssl_certificate_verify_SUITE.erl index 4c6f1d7c01..5265c87e29 100644 --- a/lib/ssl/test/ssl_certificate_verify_SUITE.erl +++ b/lib/ssl/test/ssl_certificate_verify_SUITE.erl @@ -1097,7 +1097,8 @@ client_with_cert_cipher_suites_handshake(Config) when is_list(Config) -> {mfa, {ssl_test_lib, send_recv_result_active, []}}, {options, [{active, true}, - {ciphers, ssl_test_lib:rsa_non_signed_suites()} + {ciphers, + ssl_test_lib:rsa_non_signed_suites(tls_record:highest_protocol_version([]))} | ServerOpts]}]), Port = ssl_test_lib:inet_port(Server), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl index 942e68967a..3446a566c4 100644 --- a/lib/ssl/test/ssl_packet_SUITE.erl +++ b/lib/ssl/test/ssl_packet_SUITE.erl @@ -41,9 +41,9 @@ -define(MANY, 1000). -define(SOME, 50). --define(BASE_TIMEOUT_SECONDS, 30). --define(SOME_SCALE, 20). --define(MANY_SCALE, 20). +-define(BASE_TIMEOUT_SECONDS, 5). +-define(SOME_SCALE, 2). +-define(MANY_SCALE, 3). %%-------------------------------------------------------------------- %% Common Test interface functions ----------------------------------- diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl index cab22a60a8..9632103696 100644 --- a/lib/ssl/test/ssl_test_lib.erl +++ b/lib/ssl/test/ssl_test_lib.erl @@ -462,9 +462,10 @@ cert_options(Config) -> make_dsa_cert(Config) -> - - {ServerCaCertFile, ServerCertFile, ServerKeyFile} = make_cert_files("server", Config, dsa, dsa, ""), - {ClientCaCertFile, ClientCertFile, ClientKeyFile} = make_cert_files("client", Config, dsa, dsa, ""), + {ServerCaCertFile, ServerCertFile, ServerKeyFile} = + make_cert_files("server", Config, dsa, dsa, "", []), + {ClientCaCertFile, ClientCertFile, ClientKeyFile} = + make_cert_files("client", Config, dsa, dsa, "", []), [{server_dsa_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile}, {certfile, ServerCertFile}, {keyfile, ServerKeyFile}]}, @@ -490,8 +491,10 @@ make_ecdsa_cert(Config) -> CryptoSupport = crypto:supports(), case proplists:get_bool(ecdsa, proplists:get_value(public_keys, CryptoSupport)) of true -> - {ServerCaCertFile, ServerCertFile, ServerKeyFile} = make_cert_files("server", Config, ec, ec, ""), - {ClientCaCertFile, ClientCertFile, ClientKeyFile} = make_cert_files("client", Config, ec, ec, ""), + {ServerCaCertFile, ServerCertFile, ServerKeyFile} = + make_cert_files("server", Config, ec, ec, "", [{digest, appropriate_sha(CryptoSupport)}]), + {ClientCaCertFile, ClientCertFile, ClientKeyFile} = + make_cert_files("client", Config, ec, ec, "", [{digest, appropriate_sha(CryptoSupport)}]), [{server_ecdsa_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile}, {certfile, ServerCertFile}, {keyfile, ServerKeyFile}]}, @@ -507,6 +510,14 @@ make_ecdsa_cert(Config) -> Config end. +appropriate_sha(CryptoSupport) -> + case proplists:get_bool(sha256, CryptoSupport) of + true -> + sha256; + false -> + sha1 + end. + %% RFC 4492, Sect. 2.3. ECDH_RSA %% %% This key exchange algorithm is the same as ECDH_ECDSA except that the @@ -515,8 +526,10 @@ make_ecdh_rsa_cert(Config) -> CryptoSupport = crypto:supports(), case proplists:get_bool(ecdh, proplists:get_value(public_keys, CryptoSupport)) of true -> - {ServerCaCertFile, ServerCertFile, ServerKeyFile} = make_cert_files("server", Config, rsa, ec, "rsa_"), - {ClientCaCertFile, ClientCertFile, ClientKeyFile} = make_cert_files("client", Config, rsa, ec, "rsa_"), + {ServerCaCertFile, ServerCertFile, ServerKeyFile} = + make_cert_files("server", Config, rsa, ec, "rsa_", []), + {ClientCaCertFile, ClientCertFile, ClientKeyFile} = + make_cert_files("client", Config, rsa, ec, "rsa_",[]), [{server_ecdh_rsa_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile}, {certfile, ServerCertFile}, {keyfile, ServerKeyFile}]}, @@ -534,9 +547,9 @@ make_ecdh_rsa_cert(Config) -> make_mix_cert(Config) -> {ServerCaCertFile, ServerCertFile, ServerKeyFile} = make_cert_files("server", Config, dsa, - rsa, "mix"), + rsa, "mix", []), {ClientCaCertFile, ClientCertFile, ClientKeyFile} = make_cert_files("client", Config, dsa, - rsa, "mix"), + rsa, "mix", []), [{server_mix_opts, [{ssl_imp, new},{reuseaddr, true}, {cacertfile, ServerCaCertFile}, {certfile, ServerCertFile}, {keyfile, ServerKeyFile}]}, @@ -549,11 +562,11 @@ make_mix_cert(Config) -> {certfile, ClientCertFile}, {keyfile, ClientKeyFile}]} | Config]. -make_cert_files(RoleStr, Config, Alg1, Alg2, Prefix) -> +make_cert_files(RoleStr, Config, Alg1, Alg2, Prefix, Opts) -> Alg1Str = atom_to_list(Alg1), Alg2Str = atom_to_list(Alg2), - CaInfo = {CaCert, _} = erl_make_certs:make_cert([{key, Alg1}]), - {Cert, CertKey} = erl_make_certs:make_cert([{key, Alg2}, {issuer, CaInfo}]), + CaInfo = {CaCert, _} = erl_make_certs:make_cert([{key, Alg1}| Opts]), + {Cert, CertKey} = erl_make_certs:make_cert([{key, Alg2}, {issuer, CaInfo} | Opts]), CaCertFile = filename:join([proplists:get_value(priv_dir, Config), RoleStr, Prefix ++ Alg1Str ++ "_cacerts.pem"]), CertFile = filename:join([proplists:get_value(priv_dir, Config), @@ -840,37 +853,42 @@ common_ciphers(openssl) -> lists:member(ssl_cipher:openssl_suite_name(S), OpenSslSuites) ]. -rsa_non_signed_suites() -> +available_suites(Version) -> + [ssl_cipher:erl_suite_definition(Suite) || + Suite <- ssl_cipher:filter_suites(ssl_cipher:suites(Version))]. + + +rsa_non_signed_suites(Version) -> lists:filter(fun({rsa, _, _}) -> true; (_) -> false end, - ssl:cipher_suites()). + available_suites(Version)). -dsa_suites() -> +dsa_suites(Version) -> lists:filter(fun({dhe_dss, _, _}) -> true; (_) -> false end, - ssl:cipher_suites()). + available_suites(Version)). -ecdsa_suites() -> +ecdsa_suites(Version) -> lists:filter(fun({ecdhe_ecdsa, _, _}) -> true; (_) -> false end, - ssl:cipher_suites()). + available_suites(Version)). -ecdh_rsa_suites() -> +ecdh_rsa_suites(Version) -> lists:filter(fun({ecdh_rsa, _, _}) -> true; (_) -> false end, - ssl:cipher_suites()). + available_suites(Version)). openssl_rsa_suites(CounterPart) -> Ciphers = ssl:cipher_suites(openssl), @@ -1174,14 +1192,15 @@ is_fips(_) -> false. cipher_restriction(Config0) -> + Version = tls_record:protocol_version(protocol_version(Config0)), case is_sane_ecc(openssl) of false -> Opts = proplists:get_value(server_opts, Config0), Config1 = proplists:delete(server_opts, Config0), VerOpts = proplists:get_value(server_verification_opts, Config1), Config = proplists:delete(server_verification_opts, Config1), - Restricted0 = ssl:cipher_suites() -- ecdsa_suites(), - Restricted = Restricted0 -- ecdh_rsa_suites(), + Restricted0 = ssl:cipher_suites() -- ecdsa_suites(Version), + Restricted = Restricted0 -- ecdh_rsa_suites(Version), [{server_opts, [{ciphers, Restricted} | Opts]}, {server_verification_opts, [{ciphers, Restricted} | VerOpts] } | Config]; true -> Config0 diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl index 9ecfe5b0ea..e99340822d 100644 --- a/lib/ssl/test/ssl_to_openssl_SUITE.erl +++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl @@ -834,7 +834,7 @@ ciphers_dsa_signed_certs() -> [{doc,"Test cipher suites that uses dsa certs"}]. ciphers_dsa_signed_certs(Config) when is_list(Config) -> Version = ssl_test_lib:protocol_version(Config), - Ciphers = ssl_test_lib:dsa_suites(), + Ciphers = ssl_test_lib:dsa_suites(tls_record:protocol_version(Version)), run_suites(Ciphers, Version, Config, dsa). %%-------------------------------------------------------------------- diff --git a/lib/stdlib/doc/src/gen_statem.xml b/lib/stdlib/doc/src/gen_statem.xml index 3322571b2c..fd498ee82e 100644 --- a/lib/stdlib/doc/src/gen_statem.xml +++ b/lib/stdlib/doc/src/gen_statem.xml @@ -54,7 +54,8 @@ <p> This is a new behavior in Erlang/OTP 19.0. It has been thoroughly reviewed, is stable enough - to be used by at least two heavy OTP applications, and is here to stay. + to be used by at least two heavy OTP applications, + and is here to stay. Depending on user feedback, we do not expect but can find it necessary to make minor not backward compatible changes into Erlang/OTP 20.0. @@ -70,6 +71,7 @@ <item>The state can be any term.</item> <item>Events can be postponed.</item> <item>Events can be self-generated.</item> + <item>Automatic state enter code can be called.</item> <item>A reply can be sent from a later state.</item> <item>There can be multiple <c>sys</c> traceable replies.</item> </list> @@ -125,9 +127,9 @@ erlang:'!' -----> Module:StateName/3 is not regarded as an error but as a valid return from all callback functions. </p> - <marker id="state_function"/> + <marker id="state callback"/> <p> - The "<em>state function</em>" for a specific + The "<em>state callback</em>" for a specific <seealso marker="#type-state">state</seealso> in a <c>gen_statem</c> is the callback function that is called for all events in this state. It is selected depending on which @@ -139,7 +141,7 @@ erlang:'!' -----> Module:StateName/3 When the <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> is <c>state_functions</c>, the state must be an atom and - is used as the state function name; see + is used as the state callback name; see <seealso marker="#Module:StateName/3"><c>Module:StateName/3</c></seealso>. This gathers all code for a specific state in one function as the <c>gen_statem</c> engine @@ -152,7 +154,7 @@ erlang:'!' -----> Module:StateName/3 When the <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> is <c>handle_event_function</c>, the state can be any term - and the state function name is + and the state callback name is <seealso marker="#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>. This makes it easy to branch depending on state or event as you desire. Be careful about which events you handle in which @@ -162,8 +164,8 @@ erlang:'!' -----> Module:StateName/3 <p> The <c>gen_statem</c> enqueues incoming events in order of arrival and presents these to the - <seealso marker="#state_function">state function</seealso> - in that order. The state function can postpone an event + <seealso marker="#state callback">state callback</seealso> + in that order. The state callback can postpone an event so it is not retried in the current state. After a state change the queue restarts with the postponed events. </p> @@ -175,12 +177,12 @@ erlang:'!' -----> Module:StateName/3 to entering a new receive statement. </p> <p> - The <seealso marker="#state_function">state function</seealso> + The <seealso marker="#state callback">state callback</seealso> can insert events using the <seealso marker="#type-action"><c>action()</c></seealso> <c>next_event</c> and such an event is inserted as the next to present - to the state function. That is, as if it is + to the state callback. That is, as if it is the oldest incoming event. A dedicated <seealso marker="#type-event_type"><c>event_type()</c></seealso> <c>internal</c> can be used for such events making them impossible @@ -193,9 +195,19 @@ erlang:'!' -----> Module:StateName/3 <seealso marker="gen_fsm"><c>gen_fsm</c></seealso> to force processing an inserted event before others. </p> + <p> + The <c>gen_statem</c> engine can automatically + make a specialized call to the + <seealso marker="#state callback">state callback</seealso> + whenever a new state is entered; see + <seealso marker="#type-state_enter"><c>state_enter()</c></seealso>. + This is for writing code common to all state entries. + Another way to do it is to insert events at state transitions, + but you have to do so everywhere it is needed. + </p> <note> <p>If you in <c>gen_statem</c>, for example, postpone - an event in one state and then call another state function + an event in one state and then call another state callback of yours, you have not changed states and hence the postponed event is not retried, which is logical but can be confusing. </p> @@ -224,7 +236,7 @@ erlang:'!' -----> Module:StateName/3 The <c>gen_statem</c> process can go into hibernation; see <seealso marker="proc_lib#hibernate/3"><c>proc_lib:hibernate/3</c></seealso>. It is done when a - <seealso marker="#state_function">state function</seealso> or + <seealso marker="#state callback">state callback</seealso> or <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> specifies <c>hibernate</c> in the returned <seealso marker="#type-action"><c>Actions</c></seealso> @@ -282,7 +294,7 @@ init([]) -> {ok,State,Data}. callback_mode() -> state_functions. -%%% State function(s) +%%% state callback(s) off({call,From}, push, Data) -> %% Go to 'on', increment count and reply @@ -336,7 +348,7 @@ ok <code type="erl"> callback_mode() -> handle_event_function. -%%% State function(s) +%%% state callback(s) handle_event({call,From}, push, off, Data) -> %% Go to 'on', increment count and reply @@ -470,6 +482,10 @@ handle_event(_, _, State, Data) -> <name name="state"/> <desc> <p> + If the + <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> + is <c>handle_event_function</c>, + the state can be any term. After a state change (<c>NextState =/= State</c>), all postponed events are retried. </p> @@ -483,6 +499,8 @@ handle_event(_, _, State, Data) -> <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> is <c>state_functions</c>, the state must be of this type. + After a state change (<c>NextState =/= State</c>), + all postponed events are retried. </p> </desc> </datatype> @@ -515,7 +533,22 @@ handle_event(_, _, State, Data) -> Type <c>info</c> originates from regular process messages sent to the <c>gen_statem</c>. Also, the state machine implementation can generate events of types - <c>timeout</c> and <c>internal</c> to itself. + <c>timeout</c>, <c>state_timeout</c>, + and <c>internal</c> to itself. + </p> + </desc> + </datatype> + <datatype> + <name name="callback_mode_result"/> + <desc> + <p> + This is the return type from + <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso> + and selects + <seealso marker="#type-callback_mode">callback mode</seealso> + and whether to do + <seealso marker="#type-state_enter">state enter calls</seealso>, + or not. </p> </desc> </datatype> @@ -551,16 +584,75 @@ handle_event(_, _, State, Data) -> </desc> </datatype> <datatype> + <name name="state_enter"/> + <desc> + <p> + If the state machine should use <em>state enter calls</em> + is selected when starting the <c>gen_statem</c> + and after code change using the return value from + <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso>. + </p> + <p> + If + <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso> + returns a list containing <c>state_enter</c>, + the <c>gen_statem</c> engine will, at every state change, + call the + <seealso marker="#state callback">state callback</seealso> + with arguments <c>(enter, OldState, Data)</c>. + This may look like an event but is really a call + performed after the previous state callback returned + and before any event is delivered to the new state callback. + See + <seealso marker="#Module:StateName/3"><c>Module:StateName/3</c></seealso> + and + <seealso marker="#Module:handle_event/4"><c>Module:handle_event/4</c></seealso>. + </p> + <p> + If + <seealso marker="#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso> + does not return such a list, no state enter calls are done. + </p> + <p> + If + <seealso marker="#Module:code_change/4"><c>Module:code_change/4</c></seealso> + should transform the state to a state with a different + name it is still regarded as the same state so this + does not cause a state enter call. + </p> + <p> + Note that a state enter call <em>will</em> be done + right before entering the initial state even though this + formally is not a state change. + In this case <c>OldState</c> will be the same as <c>State</c>, + which can not happen for a subsequent state change. + </p> + </desc> + </datatype> + <datatype> <name name="transition_option"/> <desc> <p> Transition options can be set by <seealso marker="#type-action">actions</seealso> - and they modify the following in how - the state transition is done: + and they modify how the state transition is done: </p> <list type="ordered"> <item> + <p> + If the state changes or is the initial state, and + <seealso marker="#type-state_enter"><em>state enter calls</em></seealso> + are used, the <c>gen_statem</c> calls + the new state callback with arguments + <seealso marker="#type-state_enter">(enter, OldState, Data)</seealso>. + Any + <seealso marker="#type-enter_action"><c>actions</c></seealso> + returned from this call are handled as if they were + appended to the actions + returned by the state callback that changed states. + </p> + </item> + <item> <p> All <seealso marker="#type-action">actions</seealso> @@ -586,27 +678,46 @@ handle_event(_, _, State, Data) -> All events stored with <seealso marker="#type-action"><c>action()</c></seealso> <c>next_event</c> - are inserted in the queue to be processed before - all other events. + are inserted to be processed before the other queued events. </p> </item> <item> <p> - If an + Timeout timers + <seealso marker="#type-state_timeout"><c>state_timeout()</c></seealso> + and <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso> - is set through - <seealso marker="#type-action"><c>action()</c></seealso> - <c>timeout</c>, - an event timer can be started or a time-out zero event - can be enqueued. + are handled. Time-outs with zero time are guaranteed to be + delivered to the state machine before any external + not yet received event so if there is such a timeout requested, + the corresponding time-out zero event is enqueued as + the newest event. + </p> + <p> + Any event cancels an + <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso> + so a zero time event time-out is only generated + if the event queue is empty. + </p> + <p> + A state change cancels a + <seealso marker="#type-state_timeout"><c>state_timeout()</c></seealso> + and any new transition option of this type + belongs to the new state. + </p> + </item> + <item> + <p> + If there are enqueued events the + <seealso marker="#state callback">state callback</seealso> + for the possibly new state + is called with the oldest enqueued event, + and we start again from the top of this list. </p> </item> <item> <p> - The (possibly new) - <seealso marker="#state_function">state function</seealso> - is called with the oldest enqueued event if there is any, - otherwise the <c>gen_statem</c> goes into <c>receive</c> + Otherwise the <c>gen_statem</c> goes into <c>receive</c> or hibernation (if <seealso marker="#type-hibernate"><c>hibernate()</c></seealso> @@ -614,8 +725,11 @@ handle_event(_, _, State, Data) -> to wait for the next message. In hibernation the next non-system event awakens the <c>gen_statem</c>, or rather the next incoming message awakens the <c>gen_statem</c>, - but if it is a system event - it goes right back into hibernation. + but if it is a system event it goes right back into hibernation. + When a new message arrives the + <seealso marker="#state callback">state callback</seealso> + is called with the corresponding event, + and we start again from the top of this list. </p> </item> </list> @@ -657,34 +771,66 @@ handle_event(_, _, State, Data) -> <seealso marker="#type-event_type"><c>event_type()</c></seealso> <c>timeout</c> after this time (in milliseconds) unless another - event arrives in which case this time-out is cancelled. - Notice that a retried or inserted event - counts like a new in this respect. + event arrives or has arrived + in which case this time-out is cancelled. + Note that a retried or inserted event counts as arrived. + So does a state time-out zero event, if it was generated + before this timer is requested. </p> <p> If the value is <c>infinity</c>, no timer is started, as - it never triggers anyway. + it never would trigger anyway. </p> <p> - If the value is <c>0</c>, the time-out event is immediately enqueued - unless there already are enqueued events, as the - time-out is then immediately cancelled. - This is a feature ensuring that a time-out <c>0</c> event - is processed before any not yet received external event. + If the value is <c>0</c> no timer is actually started, + instead the the time-out event is enqueued to ensure + that it gets processed before any not yet + received external event. </p> <p> - Notice that it is not possible or needed to cancel this time-out, + Note that it is not possible or needed to cancel this time-out, as it is cancelled automatically by any other event. </p> </desc> </datatype> <datatype> + <name name="state_timeout"/> + <desc> + <p> + Generates an event of + <seealso marker="#type-event_type"><c>event_type()</c></seealso> + <c>state_timeout</c> + after this time (in milliseconds) unless the <c>gen_statem</c> + changes states (<c>NewState =/= OldState</c>) + which case this time-out is cancelled. + </p> + <p> + If the value is <c>infinity</c>, no timer is started, as + it never would trigger anyway. + </p> + <p> + If the value is <c>0</c> no timer is actually started, + instead the the time-out event is enqueued to ensure + that it gets processed before any not yet + received external event. + </p> + <p> + Setting this timer while it is running will restart it with + the new time-out value. Therefore it is possible to cancel + this time-out by setting it to <c>infinity</c>. + </p> + </desc> + </datatype> + <datatype> <name name="action"/> <desc> <p> These state transition actions can be invoked by returning them from the - <seealso marker="#state_function">state function</seealso>, from + <seealso marker="#state callback">state callback</seealso> + when it is called with an + <seealso marker="#type-event_type">event</seealso>, + from <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> or by giving them to <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso>. @@ -698,8 +844,8 @@ handle_event(_, _, State, Data) -> override any previous of the same type, so the last in the containing list wins. For example, the last - <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso> - overrides any other <c>event_timeout()</c> in the list. + <seealso marker="#type-postpone"><c>postpone()</c></seealso> + overrides any previous <c>postpone()</c> in the list. </p> <taglist> <tag><c>postpone</c></tag> @@ -716,6 +862,53 @@ handle_event(_, _, State, Data) -> as there is no event to postpone in those cases. </p> </item> + <tag><c>next_event</c></tag> + <item> + <p> + Stores the specified <c><anno>EventType</anno></c> + and <c><anno>EventContent</anno></c> for insertion after all + actions have been executed. + </p> + <p> + The stored events are inserted in the queue as the next to process + before any already queued events. The order of these stored events + is preserved, so the first <c>next_event</c> in the containing + list becomes the first to process. + </p> + <p> + An event of type + <seealso marker="#type-event_type"><c>internal</c></seealso> + is to be used when you want to reliably distinguish + an event inserted this way from any external event. + </p> + </item> + </taglist> + </desc> + </datatype> + <datatype> + <name name="enter_action"/> + <desc> + <p> + These state transition actions can be invoked by + returning them from the + <seealso marker="#state callback">state callback</seealso>, from + <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> + or by giving them to + <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso>. + </p> + <p> + Actions are executed in the containing list order. + </p> + <p> + Actions that set + <seealso marker="#type-transition_option">transition options</seealso> + override any previous of the same type, + so the last in the containing list wins. + For example, the last + <seealso marker="#type-event_timeout"><c>event_timeout()</c></seealso> + overrides any previous <c>event_timeout()</c> in the list. + </p> + <taglist> <tag><c>hibernate</c></tag> <item> <p> @@ -731,7 +924,7 @@ handle_event(_, _, State, Data) -> Short for <c>{timeout,Timeout,Timeout}</c>, that is, the time-out message is the time-out time. This form exists to make the - <seealso marker="#state_function">state function</seealso> + <seealso marker="#state callback">state callback</seealso> return value <c>{next_state,NextState,NewData,Timeout}</c> allowed like for <c>gen_fsm</c>'s <seealso marker="gen_fsm#Module:StateName/2"><c>Module:StateName/2</c></seealso>. @@ -746,30 +939,13 @@ handle_event(_, _, State, Data) -> to <c><anno>Time</anno></c> with <c><anno>EventContent</anno></c>. </p> </item> - <tag><c>reply_action()</c></tag> + <tag><c>state_timeout</c></tag> <item> <p> - Replies to a caller. - </p> - </item> - <tag><c>next_event</c></tag> - <item> - <p> - Stores the specified <c><anno>EventType</anno></c> - and <c><anno>EventContent</anno></c> for insertion after all - actions have been executed. - </p> - <p> - The stored events are inserted in the queue as the next to process - before any already queued events. The order of these stored events - is preserved, so the first <c>next_event</c> in the containing - list becomes the first to process. - </p> - <p> - An event of type - <seealso marker="#type-event_type"><c>internal</c></seealso> - is to be used when you want to reliably distinguish - an event inserted this way from any external event. + Sets the + <seealso marker="#type-transition_option"><c>transition_option()</c></seealso> + <seealso marker="#type-state_timeout"><c>state_timeout()</c></seealso> + to <c><anno>Time</anno></c> with <c><anno>EventContent</anno></c>. </p> </item> </taglist> @@ -779,39 +955,70 @@ handle_event(_, _, State, Data) -> <name name="reply_action"/> <desc> <p> - Replies to a caller waiting for a reply in + This state transition action can be invoked by + returning it from the + <seealso marker="#state callback">state callback</seealso>, from + <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> + or by giving it to + <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso>. + </p> + <p> + It replies to a caller waiting for a reply in <seealso marker="#call/2"><c>call/2</c></seealso>. <c><anno>From</anno></c> must be the term from argument <seealso marker="#type-event_type"><c>{call,<anno>From</anno>}</c></seealso> - to the - <seealso marker="#state_function">state function</seealso>. + in a call to a + <seealso marker="#state callback">state callback</seealso>. + </p> + <p> + Note that using this action from + <seealso marker="#Module:init/1"><c>Module:init/1</c></seealso> + or + <seealso marker="#enter_loop/5"><c>enter_loop/5,6</c></seealso> + would be weird on the border of whichcraft + since there has been no earlier call to a + <seealso marker="#state callback">state callback</seealso> + in this server. </p> </desc> </datatype> <datatype> - <name name="state_function_result"/> + <name name="state_enter_result"/> <desc> + <p> + <c><anno>State</anno></c> is the current state + and it can not be changed since the state callback + was called with a + <seealso marker="#type-state_enter"><em>state enter call</em></seealso>. + </p> <taglist> <tag><c>next_state</c></tag> <item> <p> The <c>gen_statem</c> does a state transition to - <c><anno>NextStateName</anno></c> - (which can be the same as the current state), + <c><anno>State</anno></c>, which has to be + the current state, sets <c><anno>NewData</anno></c>, and executes all <c><anno>Actions</anno></c>. </p> </item> </taglist> - <p> - All these terms are tuples or atoms and this property - will hold in any future version of <c>gen_statem</c>. - </p> </desc> </datatype> <datatype> - <name name="handle_event_result"/> + <name name="event_handler_result"/> <desc> + <p> + <c><anno>StateType</anno></c> is + <seealso marker="#type-state_name"><c>state_name()</c></seealso> + if + <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> + is <c>state_functions</c>, or + <seealso marker="#type-state"><c>state()</c></seealso> + if + <seealso marker="#type-callback_mode"><em>callback mode</em></seealso> + is <c>handle_event_function</c>. + </p> <taglist> <tag><c>next_state</c></tag> <item> @@ -824,35 +1031,21 @@ handle_event(_, _, State, Data) -> </p> </item> </taglist> - <p> - All these terms are tuples or atoms and this property - will hold in any future version of <c>gen_statem</c>. - </p> </desc> </datatype> <datatype> - <name name="common_state_callback_result"/> + <name name="state_callback_result"/> <desc> + <p> + <c><anno>ActionType</anno></c> is + <seealso marker="#type-enter_action"><c>enter_action()</c></seealso> + if the state callback was called with a + <seealso marker="#type-state_enter"><em>state enter call</em></seealso> + and + <seealso marker="#type-action"><c>action()</c></seealso> + if the state callback was called with an event. + </p> <taglist> - <tag><c>stop</c></tag> - <item> - <p> - Terminates the <c>gen_statem</c> by calling - <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso> - with <c>Reason</c> and - <c><anno>NewData</anno></c>, if specified. - </p> - </item> - <tag><c>stop_and_reply</c></tag> - <item> - <p> - Sends all <c><anno>Replies</anno></c>, - then terminates the <c>gen_statem</c> by calling - <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso> - with <c>Reason</c> and - <c><anno>NewData</anno></c>, if specified. - </p> - </item> <tag><c>keep_state</c></tag> <item> <p> @@ -875,6 +1068,25 @@ handle_event(_, _, State, Data) -> <c>{next_state,CurrentState,CurrentData,<anno>Actions</anno>}</c>. </p> </item> + <tag><c>stop</c></tag> + <item> + <p> + Terminates the <c>gen_statem</c> by calling + <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso> + with <c>Reason</c> and + <c><anno>NewData</anno></c>, if specified. + </p> + </item> + <tag><c>stop_and_reply</c></tag> + <item> + <p> + Sends all <c><anno>Replies</anno></c>, + then terminates the <c>gen_statem</c> by calling + <seealso marker="#Module:terminate/3"><c>Module:terminate/3</c></seealso> + with <c>Reason</c> and + <c><anno>NewData</anno></c>, if specified. + </p> + </item> </taglist> <p> All these terms are tuples or atoms and this property @@ -896,14 +1108,14 @@ handle_event(_, _, State, Data) -> by sending a request and waiting until its reply arrives. The <c>gen_statem</c> calls the - <seealso marker="#state_function">state function</seealso> with + <seealso marker="#state callback">state callback</seealso> with <seealso marker="#type-event_type"><c>event_type()</c></seealso> <c>{call,From}</c> and event content <c><anno>Request</anno></c>. </p> <p> A <c><anno>Reply</anno></c> is generated when a - <seealso marker="#state_function">state function</seealso> + <seealso marker="#state callback">state callback</seealso> returns with <c>{reply,From,<anno>Reply</anno>}</c> as one <seealso marker="#type-action"><c>action()</c></seealso>, @@ -919,18 +1131,40 @@ handle_event(_, _, State, Data) -> </p> <note> <p> - For <c><anno>Timeout</anno> =/= infinity</c>, + For <c><anno>Timeout</anno> < infinity</c>, to avoid getting a late reply in the caller's - inbox, this function spawns a proxy process that + inbox if the caller should catch exceptions, + this function spawns a proxy process that does the call. A late reply gets delivered to the dead proxy process, hence gets discarded. This is less efficient than using - <c><anno>Timeout</anno> =:= infinity</c>. + <c><anno>Timeout</anno> == infinity</c>. + </p> + </note> + <p> + <c><anno>Timeout</anno></c> can also be a tuple + <c>{clean_timeout,<anno>T</anno>}</c> or + <c>{dirty_timeout,<anno>T</anno>}</c>, where + <c><anno>T</anno></c> is the time-out time. + <c>{clean_timeout,<anno>T</anno>}</c> works like + just <c>T</c> described in the note above + and uses a proxy process for <c>T < infinity</c>, + while <c>{dirty_timeout,<anno>T</anno>}</c> + bypasses the proxy process which is more lightweight. + </p> + <note> + <p> + If you combine catching exceptions from this function + with <c>{dirty_timeout,<anno>T</anno>}</c> + to avoid that the calling process dies when the call + times out, you will have to be prepared to handle + a late reply. + So why not just allow the calling process to die? </p> </note> <p> - The call can fail, for example, if the <c>gen_statem</c> dies - before or during this function call. + The call can also fail, for example, if the <c>gen_statem</c> + dies before or during this function call. </p> </desc> </func> @@ -946,7 +1180,7 @@ handle_event(_, _, State, Data) -> ignoring if the destination node or <c>gen_statem</c> does not exist. The <c>gen_statem</c> calls the - <seealso marker="#state_function">state function</seealso> with + <seealso marker="#state callback">state callback</seealso> with <seealso marker="#type-event_type"><c>event_type()</c></seealso> <c>cast</c> and event content <c><anno>Msg</anno></c>. @@ -1060,17 +1294,18 @@ handle_event(_, _, State, Data) -> <seealso marker="#call/2"><c>call/2</c></seealso> when the reply cannot be defined in the return value of a - <seealso marker="#state_function">state function</seealso>. + <seealso marker="#state callback">state callback</seealso>. </p> <p> <c><anno>From</anno></c> must be the term from argument <seealso marker="#type-event_type"><c>{call,<anno>From</anno>}</c></seealso> to the - <seealso marker="#state_function">state function</seealso>. - <c><anno>From</anno></c> and <c><anno>Reply</anno></c> - can also be specified using a - <seealso marker="#type-reply_action"><c>reply_action()</c></seealso> - and multiple replies with a list of them. + <seealso marker="#state callback">state callback</seealso>. + A reply or multiple replies canalso be sent + using one or several + <seealso marker="#type-reply_action"><c>reply_action()</c></seealso>s + from a + <seealso marker="#state callback">state callback</seealso>. </p> <note> <p> @@ -1266,7 +1501,9 @@ handle_event(_, _, State, Data) -> <type> <v> CallbackMode = - <seealso marker="#type-callback_mode">callback_mode()</seealso> + <seealso marker="#type-callback_mode">callback_mode()</seealso> | + [ <seealso marker="#type-callback_mode">callback_mode()</seealso> + | <seealso marker="#type-state_enter">state_enter()</seealso> ] </v> </type> <desc> @@ -1278,8 +1515,9 @@ handle_event(_, _, State, Data) -> for efficiency reasons, so this function is only called once after server start and after code change, but before the first - <seealso marker="#state_function">state function</seealso> - is called. More occasions may be added in future versions + <seealso marker="#state callback">state callback</seealso> + in the current code version is called. + More occasions may be added in future versions of <c>gen_statem</c>. </p> <p> @@ -1291,12 +1529,18 @@ handle_event(_, _, State, Data) -> <seealso marker="#Module:code_change/4"><c>Module:code_change/4</c></seealso> returns. </p> + <p> + The <c>CallbackMode</c> is either just + <seealso marker="#type-callback_mode"><c>callback_mode()</c></seealso> + or a list containing + <seealso marker="#type-callback_mode"><c>callback_mode()</c></seealso> + and possibly the atom + <seealso marker="#type-state_enter"><c>state_enter</c></seealso>. + </p> <note> <p> - If this function's body does not consist of solely one of two - possible - <seealso marker="#type-callback_mode">atoms</seealso> - the callback module is doing something strange. + If this function's body does not return an inline constant + value the callback module is doing something strange. </p> </note> </desc> @@ -1416,7 +1660,7 @@ handle_event(_, _, State, Data) -> The <seealso marker="#type-action"><c>Actions</c></seealso> are executed when entering the first <seealso marker="#type-state">state</seealso> just as for a - <seealso marker="#state_function">state function</seealso>. + <seealso marker="#state callback">state callback</seealso>. </p> <p> If the initialization fails, @@ -1512,7 +1756,8 @@ handle_event(_, _, State, Data) -> </p> <p> The function is to return <c>Status</c>, a term that - changes the details of the current state and status of + contains the appropriate details + of the current state and status of the <c>gen_statem</c>. There are no restrictions on the form <c>Status</c> can take, but for the <seealso marker="sys#get_status/1"><c>sys:get_status/1,2</c></seealso> @@ -1536,11 +1781,17 @@ handle_event(_, _, State, Data) -> </func> <func> + <name>Module:StateName(enter, OldState, Data) -> + StateEnterResult(StateName) + </name> <name>Module:StateName(EventType, EventContent, Data) -> StateFunctionResult </name> - <name>Module:handle_event(EventType, EventContent, - State, Data) -> HandleEventResult + <name>Module:handle_event(enter, OldState, State, Data) -> + StateEnterResult(State) + </name> + <name>Module:handle_event(EventType, EventContent, State, Data) -> + HandleEventResult </name> <fsummary>Handle an event.</fsummary> <type> @@ -1558,12 +1809,20 @@ handle_event(_, _, State, Data) -> <seealso marker="#type-data">data()</seealso> </v> <v> + StateEnterResult(StateName) = + <seealso marker="#type-state_enter_result">state_enter_result(StateName)</seealso> + </v> + <v> StateFunctionResult = - <seealso marker="#type-state_function_result">state_function_result()</seealso> + <seealso marker="#type-event_handler_result">event_handler_result</seealso>(<seealso marker="#type-state_name">state_name()</seealso>) + </v> + <v> + StateEnterResult(State) = + <seealso marker="#type-state_enter_result">state_enter_result(State)</seealso> </v> <v> HandleEventResult = - <seealso marker="#type-handle_event_result">handle_event_result()</seealso> + <seealso marker="#type-event_handler_result">event_handler_result</seealso>(<seealso marker="#type-state">state()</seealso>) </v> </type> <desc> @@ -1582,7 +1841,7 @@ handle_event(_, _, State, Data) -> <seealso marker="#type-event_type"><c>{call,From}</c></seealso>, the caller waits for a reply. The reply can be sent from this or from any other - <seealso marker="#state_function">state function</seealso> + <seealso marker="#state callback">state callback</seealso> by returning with <c>{reply,From,Reply}</c> in <seealso marker="#type-action"><c>Actions</c></seealso>, in <seealso marker="#type-reply_action"><c>Replies</c></seealso>, @@ -1606,6 +1865,24 @@ handle_event(_, _, State, Data) -> see <seealso marker="#type-action"><c>action()</c></seealso>. </p> <p> + When the <c>gen_statem</c> runs with + <seealso marker="#type-state_enter">state enter calls</seealso>, + these functions are also called with arguments + <c>(enter, OldState, ...)</c> whenever the state changes. + In this case there are some restrictions on the + <seealso marker="#type-enter_action">actions</seealso> + that may be returned: + <seealso marker="#type-postpone"><c>postpone()</c></seealso> + and + <seealso marker="#type-action"><c>{next_event,_,_}</c></seealso> + are not allowed. + You may also not change states from this call. + Should you return <c>{next_state,NextState, ...}</c> + with <c>NextState =/= State</c> the <c>gen_statem</c> crashes. + You are advised to use <c>{keep_state,...}</c> or + <c>keep_state_and_data</c>. + </p> + <p> Note the fact that you can use <seealso marker="erts:erlang#throw/1"><c>throw</c></seealso> to return the result, which can be useful. diff --git a/lib/stdlib/doc/src/maps.xml b/lib/stdlib/doc/src/maps.xml index e1edbadcd3..8c7270816b 100644 --- a/lib/stdlib/doc/src/maps.xml +++ b/lib/stdlib/doc/src/maps.xml @@ -160,7 +160,7 @@ val1 <p><em>Example:</em></p> <code type="none"> > Map = #{"42" => value}. -#{"42"> => value} +#{"42" => value} > maps:is_key("42",Map). true > maps:is_key(value,Map). diff --git a/lib/stdlib/doc/src/shell_default.xml b/lib/stdlib/doc/src/shell_default.xml index 81c99bce10..75bf89ba8d 100644 --- a/lib/stdlib/doc/src/shell_default.xml +++ b/lib/stdlib/doc/src/shell_default.xml @@ -51,7 +51,7 @@ <p>In command one, module <seealso marker="lists"><c>lists</c></seealso> is called. In command two, no module name is specified. The shell searches module <c>user_default</c> followed by module <c>shell_default</c> for - function <c>foo/1</c>.</p> + function <c>c/1</c>.</p> <p><c>shell_default</c> is intended for "system wide" customizations to the shell. <c>user_default</c> is intended for diff --git a/lib/stdlib/src/gen_statem.erl b/lib/stdlib/src/gen_statem.erl index 3b3477b282..018aca90e6 100644 --- a/lib/stdlib/src/gen_statem.erl +++ b/lib/stdlib/src/gen_statem.erl @@ -44,15 +44,20 @@ -export( [wakeup_from_hibernate/3]). -%% Type exports for templates +%% Type exports for templates and callback modules -export_type( [event_type/0, - callback_mode/0, + init_result/0, + callback_mode_result/0, state_function_result/0, handle_event_result/0, + state_enter_result/1, + event_handler_result/1, + reply_action/0, + enter_action/0, action/0]). -%% Fix problem for doc build +%% Type that is exported just to be documented -export_type([transition_option/0]). %%%========================================================================== @@ -63,7 +68,7 @@ {To :: pid(), Tag :: term()}. % Reply-to specifier for call -type state() :: - state_name() | % For StateName/3 callback functios + state_name() | % For StateName/3 callback functions term(). % For handle_event/4 callback function -type state_name() :: atom(). @@ -72,12 +77,16 @@ -type event_type() :: {'call',From :: from()} | 'cast' | - 'info' | 'timeout' | 'internal'. + 'info' | 'timeout' | 'state_timeout' | 'internal'. +-type callback_mode_result() :: + callback_mode() | [callback_mode() | state_enter()]. -type callback_mode() :: 'state_functions' | 'handle_event_function'. +-type state_enter() :: 'state_enter'. -type transition_option() :: - postpone() | hibernate() | event_timeout(). + postpone() | hibernate() | + event_timeout() | state_timeout(). -type postpone() :: %% If 'true' postpone the current event %% and retry it when the state changes (=/=) @@ -89,6 +98,10 @@ %% Generate a ('timeout', EventContent, ...) event after Time %% unless some other event is delivered Time :: timeout(). +-type state_timeout() :: + %% Generate a ('state_timeout', EventContent, ...) event after Time + %% unless the state is changed + Time :: timeout(). -type action() :: %% During a state change: @@ -96,7 +109,7 @@ %% * All action()s are executed in order of apperance. %% * Postponing the current event is performed %% iff 'postpone' is 'true'. - %% * A state timer is started iff 'timeout' is set. + %% * A state timeout is started iff 'timeout' is set. %% * Pending events are handled or if there are %% no pending events the server goes into receive %% or hibernate (iff 'hibernate' is 'true') @@ -108,44 +121,67 @@ 'postpone' | % Set the postpone option {'postpone', Postpone :: postpone()} | %% + %% All 'next_event' events are kept in a list and then + %% inserted at state changes so the first in the + %% action() list is the first to be delivered. + {'next_event', % Insert event as the next to handle + EventType :: event_type(), + EventContent :: term()} | + enter_action(). +-type enter_action() :: 'hibernate' | % Set the hibernate option {'hibernate', Hibernate :: hibernate()} | %% (Timeout :: event_timeout()) | % {timeout,Timeout} - {'timeout', % Set the event timeout option + {'timeout', % Set the event_timeout option Time :: event_timeout(), EventContent :: term()} | + {'state_timeout', % Set the state_timeout option + Time :: state_timeout(), EventContent :: term()} | %% - reply_action() | - %% - %% All 'next_event' events are kept in a list and then - %% inserted at state changes so the first in the - %% action() list is the first to be delivered. - {'next_event', % Insert event as the next to handle - EventType :: event_type(), - EventContent :: term()}. + reply_action(). -type reply_action() :: {'reply', % Reply to a caller From :: from(), Reply :: term()}. +-type init_result() :: + {ok, state(), data()} | + {ok, state(), data(), [action()] | action()} | + 'ignore' | + {'stop', Reason :: term()}. + +%% Old, not advertised -type state_function_result() :: - {'next_state', % {next_state,NextStateName,NewData,[]} - NextStateName :: state_name(), + event_handler_result(state_name()). +-type handle_event_result() :: + event_handler_result(state()). +%% +-type state_enter_result(State) :: + {'next_state', % {next_state,NextState,NewData,[]} + State, NewData :: data()} | {'next_state', % State transition, maybe to the same state - NextStateName :: state_name(), + State, NewData :: data(), - Actions :: [action()] | action()} | - common_state_callback_result(). --type handle_event_result() :: + Actions :: [enter_action()] | enter_action()} | + state_callback_result(enter_action()). +-type event_handler_result(StateType) :: {'next_state', % {next_state,NextState,NewData,[]} - NextState :: state(), + NextState :: StateType, NewData :: data()} | {'next_state', % State transition, maybe to the same state - NextState :: state(), + NextState :: StateType, NewData :: data(), Actions :: [action()] | action()} | - common_state_callback_result(). --type common_state_callback_result() :: + state_callback_result(action()). +-type state_callback_result(ActionType) :: + {'keep_state', % {keep_state,NewData,[]} + NewData :: data()} | + {'keep_state', % Keep state, change data + NewData :: data(), + Actions :: [ActionType] | ActionType} | + 'keep_state_and_data' | % {keep_state_and_data,[]} + {'keep_state_and_data', % Keep state and data -> only actions + Actions :: [ActionType] | ActionType} | 'stop' | % {stop,normal} {'stop', % Stop the server Reason :: term()} | @@ -158,32 +194,20 @@ {'stop_and_reply', % Reply then stop the server Reason :: term(), Replies :: [reply_action()] | reply_action(), - NewData :: data()} | - {'keep_state', % {keep_state,NewData,[]} - NewData :: data()} | - {'keep_state', % Keep state, change data - NewData :: data(), - Actions :: [action()] | action()} | - 'keep_state_and_data' | % {keep_state_and_data,[]} - {'keep_state_and_data', % Keep state and data -> only actions - Actions :: [action()] | action()}. + NewData :: data()}. %% The state machine init function. It is called only once and %% the server is not running until this function has returned %% an {ok, ...} tuple. Thereafter the state callbacks are called %% for all events to this server. --callback init(Args :: term()) -> - {ok, state(), data()} | - {ok, state(), data(), [action()] | action()} | - 'ignore' | - {'stop', Reason :: term()}. +-callback init(Args :: term()) -> init_result(). %% This callback shall return the callback mode of the callback module. %% %% It is called once after init/0 and code_change/4 but before %% the first state callback StateName/3 or handle_event/4. --callback callback_mode() -> callback_mode(). +-callback callback_mode() -> callback_mode_result(). %% Example state callback for StateName = 'state_name' %% when callback_mode() =:= state_functions. @@ -194,19 +218,28 @@ %% StateName/3 callbacks and terminate/3, so the state name %% 'terminate' is unusable in this mode. -callback state_name( - event_type(), + 'enter', + OldStateName :: state_name(), + Data :: data()) -> + state_enter_result('state_name'); + (event_type(), EventContent :: term(), Data :: data()) -> - state_function_result(). + event_handler_result(state_name()). %% %% State callback for all states %% when callback_mode() =:= handle_event_function. -callback handle_event( - event_type(), + 'enter', + OldState :: state(), + State, % Current state + Data :: data()) -> + state_enter_result(State); + (event_type(), EventContent :: term(), State :: state(), % Current state Data :: data()) -> - handle_event_result(). + event_handler_result(state()). %% Clean up before the server terminates. -callback terminate( @@ -385,53 +418,79 @@ call(ServerRef, Request) -> -spec call( ServerRef :: server_ref(), Request :: term(), - Timeout :: timeout()) -> + Timeout :: + timeout() | + {'clean_timeout',T :: timeout()} | + {'dirty_timeout',T :: timeout()}) -> Reply :: term(). -call(ServerRef, Request, infinity) -> - try gen:call(ServerRef, '$gen_call', Request, infinity) of - {ok,Reply} -> - Reply - catch - Class:Reason -> - erlang:raise( - Class, - {Reason,{?MODULE,call,[ServerRef,Request,infinity]}}, - erlang:get_stacktrace()) - end; call(ServerRef, Request, Timeout) -> - %% Call server through proxy process to dodge any late reply - Ref = make_ref(), - Self = self(), - Pid = spawn( - fun () -> - Self ! - try gen:call( - ServerRef, '$gen_call', Request, Timeout) of - Result -> - {Ref,Result} - catch Class:Reason -> - {Ref,Class,Reason,erlang:get_stacktrace()} - end - end), - Mref = monitor(process, Pid), - receive - {Ref,Result} -> - demonitor(Mref, [flush]), - case Result of + case parse_timeout(Timeout) of + {dirty_timeout,T} -> + try gen:call(ServerRef, '$gen_call', Request, T) of {ok,Reply} -> Reply + catch + Class:Reason -> + erlang:raise( + Class, + {Reason,{?MODULE,call,[ServerRef,Request,Timeout]}}, + erlang:get_stacktrace()) + end; + {clean_timeout,T} -> + %% Call server through proxy process to dodge any late reply + Ref = make_ref(), + Self = self(), + Pid = spawn( + fun () -> + Self ! + try gen:call( + ServerRef, '$gen_call', Request, T) of + Result -> + {Ref,Result} + catch Class:Reason -> + {Ref,Class,Reason, + erlang:get_stacktrace()} + end + end), + Mref = monitor(process, Pid), + receive + {Ref,Result} -> + demonitor(Mref, [flush]), + case Result of + {ok,Reply} -> + Reply + end; + {Ref,Class,Reason,Stacktrace} -> + demonitor(Mref, [flush]), + erlang:raise( + Class, + {Reason,{?MODULE,call,[ServerRef,Request,Timeout]}}, + Stacktrace); + {'DOWN',Mref,_,_,Reason} -> + %% There is a theoretical possibility that the + %% proxy process gets killed between try--of and ! + %% so this clause is in case of that + exit(Reason) end; - {Ref,Class,Reason,Stacktrace} -> - demonitor(Mref, [flush]), - erlang:raise( - Class, - {Reason,{?MODULE,call,[ServerRef,Request,Timeout]}}, - Stacktrace); - {'DOWN',Mref,_,_,Reason} -> - %% There is a theoretical possibility that the - %% proxy process gets killed between try--of and ! - %% so this clause is in case of that - exit(Reason) + Error when is_atom(Error) -> + erlang:error(Error, [ServerRef,Request,Timeout]) + end. + +parse_timeout(Timeout) -> + case Timeout of + {clean_timeout,infinity} -> + {dirty_timeout,infinity}; + {clean_timeout,_} -> + Timeout; + {dirty_timeout,_} -> + Timeout; + {_,_} -> + %% Be nice and throw a badarg for speling errors + badarg; + infinity -> + {dirty_timeout,infinity}; + T -> + {clean_timeout,T} end. %% Reply from a state machine callback to whom awaits in call/2 @@ -517,8 +576,9 @@ enter(Module, Opts, State, Data, Server, Actions, Parent) -> %% The values should already have been type checked Name = gen:get_proc_name(Server), Debug = gen:debug_options(Name, Opts), - P = Events = [], - Event = {internal,initial_state}, + Events = [], + P = [], + Event = {internal,init_state}, %% We enforce {postpone,false} to ensure that %% our fake Event gets discarded, thought it might get logged NewActions = @@ -530,19 +590,32 @@ enter(Module, Opts, State, Data, Server, Actions, Parent) -> end, S = #{ callback_mode => undefined, + state_enter => false, module => Module, name => Name, - %% All fields below will be replaced according to the arguments to - %% loop_event_actions/10 when it finally loops back to loop/3 state => State, data => Data, postponed => P, - hibernate => false, - timer => undefined}, + %% The rest of the fields are set from to the arguments to + %% loop_event_actions/10 when it finally loops back to loop/3 + %% in loop_events/10 + %% + %% Marker for initial state, cleared immediately when used + init_state => true + }, NewDebug = sys_debug(Debug, S, State, {enter,Event,State}), - loop_event_actions( - Parent, NewDebug, S, Events, - State, Data, P, Event, State, NewActions). + case call_callback_mode(S) of + {ok,NewS} -> + TimerRefs = #{}, + TimerTypes = #{}, + loop_event_actions( + Parent, NewDebug, NewS, TimerRefs, TimerTypes, + Events, Event, State, Data, NewActions); + {Class,Reason,Stacktrace} -> + terminate( + Class, Reason, Stacktrace, + NewDebug, S, [Event|Events]) + end. %%%========================================================================== %%% gen callbacks @@ -563,7 +636,9 @@ init_it(Starter, Parent, ServerRef, Module, Args, Opts) -> proc_lib:init_ack(Starter, {error,Reason}), error_info( Class, Reason, Stacktrace, - #{name => Name, callback_mode => undefined}, + #{name => Name, + callback_mode => undefined, + state_enter => false}, [], [], undefined), erlang:raise(Class, Reason, Stacktrace) end. @@ -594,7 +669,9 @@ init_result(Starter, Parent, ServerRef, Module, Result, Opts) -> proc_lib:init_ack(Starter, {error,Error}), error_info( error, Error, ?STACKTRACE(), - #{name => Name, callback_mode => undefined}, + #{name => Name, + callback_mode => undefined, + state_enter => false}, [], [], undefined), exit(Error) end. @@ -605,12 +682,10 @@ init_result(Starter, Parent, ServerRef, Module, Result, Opts) -> system_continue(Parent, Debug, S) -> loop(Parent, Debug, S). -system_terminate( - Reason, _Parent, Debug, - #{state := State, data := Data, postponed := P} = S) -> +system_terminate(Reason, _Parent, Debug, S) -> terminate( exit, Reason, ?STACKTRACE(), - Debug, S, [], State, Data, P). + Debug, S, []). system_code_change( #{module := Module, @@ -647,7 +722,7 @@ system_replace_state( format_status( Opt, [PDict,SysState,Parent,Debug, - #{name := Name, postponed := P, state := State, data := Data} = S]) -> + #{name := Name, postponed := P} = S]) -> Header = gen:format_status_header("Status for state machine", Name), Log = sys:get_debug(log, Debug, []), [{header,Header}, @@ -656,7 +731,7 @@ format_status( {"Parent",Parent}, {"Logged Events",Log}, {"Postponed",P}]} | - case format_status(Opt, PDict, S, State, Data) of + case format_status(Opt, PDict, S) of L when is_list(L) -> L; T -> [T] end]. @@ -674,6 +749,10 @@ print_event(Dev, {out,Reply,{To,_Tag}}, {Name,State}) -> io:format( Dev, "*DBG* ~p send ~p to ~p from state ~p~n", [Name,Reply,To,State]); +print_event(Dev, {terminate,Reason}, {Name,State}) -> + io:format( + Dev, "*DBG* ~p terminate ~p in state ~p~n", + [Name,Reason,State]); print_event(Dev, {Tag,Event,NextState}, {Name,State}) -> StateString = case NextState of @@ -732,7 +811,8 @@ loop(Parent, Debug, #{hibernate := Hibernate} = S) -> end. %% Entry point for wakeup_from_hibernate/3 -loop_receive(Parent, Debug, #{timer := Timer} = S) -> +loop_receive( + Parent, Debug, #{timer_refs := TimerRefs, timer_types := TimerTypes} = S) -> receive Msg -> case Msg of @@ -743,34 +823,28 @@ loop_receive(Parent, Debug, #{timer := Timer} = S) -> sys:handle_system_msg( Req, Pid, Parent, ?MODULE, Debug, S, Hibernate); {'EXIT',Parent,Reason} = EXIT -> - #{state := State, data := Data, postponed := P} = S, %% EXIT is not a 2-tuple and therefore %% not an event and has no event_type(), %% but this will stand out in the crash report... terminate( - exit, Reason, ?STACKTRACE(), - Debug, S, [EXIT], State, Data, P); - {timeout,Timer,Content} when Timer =/= undefined -> - loop_receive_result( - Parent, Debug, S, {timeout,Content}); - _ -> - %% Cancel Timer if running - case Timer of - undefined -> - ok; + exit, Reason, ?STACKTRACE(), Debug, S, [EXIT]); + {timeout,TimerRef,TimerMsg} -> + case TimerRefs of + #{TimerRef := TimerType} -> + Event = {TimerType,TimerMsg}, + %% Unregister the triggered timeout + loop_receive_result( + Parent, Debug, S, + maps:remove(TimerRef, TimerRefs), + maps:remove(TimerType, TimerTypes), + Event); _ -> - case erlang:cancel_timer(Timer) of - TimeLeft when is_integer(TimeLeft) -> - ok; - false -> - receive - {timeout,Timer,_} -> - ok - after 0 -> - ok - end - end - end, + Event = {info,Msg}, + loop_receive_result( + Parent, Debug, S, + TimerRefs, TimerTypes, Event) + end; + _ -> Event = case Msg of {'$gen_call',From,Request} -> @@ -780,112 +854,303 @@ loop_receive(Parent, Debug, #{timer := Timer} = S) -> _ -> {info,Msg} end, - loop_receive_result(Parent, Debug, S, Event) + loop_receive_result( + Parent, Debug, S, + TimerRefs, TimerTypes, Event) end end. loop_receive_result( - Parent, Debug, - #{state := State, - data := Data, - postponed := P} = S, - Event) -> - %% The engine state map S is now dismantled - %% and will not be restored until we return to loop/3. - %% - %% The fields 'callback_mode', 'module', and 'name' are still valid. - %% The fields 'state', 'data', and 'postponed' are held in arguments. - %% The fields 'timer' and 'hibernate' will be recalculated. + Parent, Debug, #{state := State} = S, + TimerRefs, TimerTypes, Event) -> + %% The fields 'timer_refs', 'timer_types' and 'hibernate' + %% are now invalid in state map S - they will be recalculated + %% and restored when we return to loop/3 %% NewDebug = sys_debug(Debug, S, State, {in,Event}), %% Here the queue of not yet handled events is created Events = [], Hibernate = false, loop_event( - Parent, NewDebug, S, Events, State, Data, P, Event, Hibernate). + Parent, NewDebug, S, TimerRefs, TimerTypes, Events, Event, Hibernate). -%% Process the event queue, or if it is empty -%% loop back to loop/3 to receive a new event -loop_events( - Parent, Debug, S, [Event|Events], - State, Data, P, Hibernate, _Timeout) -> +%% Entry point for handling an event, received or enqueued +loop_event( + Parent, Debug, #{state := State, data := Data} = S, TimerRefs, TimerTypes, + Events, {Type,Content} = Event, Hibernate) -> %% - %% If there was a state timer requested we just ignore that - %% since we have events to handle which cancels the timer - loop_event( - Parent, Debug, S, Events, State, Data, P, Event, Hibernate); -loop_events( - Parent, Debug, S, [], - State, Data, P, Hibernate, Timeout) -> - case Timeout of - {timeout,0,EventContent} -> - %% Immediate timeout - simulate it - %% so we do not get the timeout message - %% after any received event - loop_event( - Parent, Debug, S, [], - State, Data, P, {timeout,EventContent}, Hibernate); - {timeout,Time,EventContent} -> - %% Actually start a timer - Timer = erlang:start_timer(Time, self(), EventContent), - loop_events_done( - Parent, Debug, S, Timer, State, Data, P, Hibernate); - undefined -> - %% No state timeout has been requested - Timer = undefined, - loop_events_done( - Parent, Debug, S, Timer, State, Data, P, Hibernate) + %% If Hibernate is true here it can only be + %% because it was set from an event action + %% and we did not go into hibernation since there + %% were events in queue, so we do what the user + %% might rely on i.e collect garbage which + %% would have happened if we actually hibernated + %% and immediately was awakened + Hibernate andalso garbage_collect(), + case call_state_function(S, Type, Content, State, Data) of + {ok,Result,NewS} -> + %% Cancel event timeout + {NewTimerRefs,NewTimerTypes} = + cancel_timer_by_type( + timeout, TimerRefs, TimerTypes), + {NewData,NextState,Actions} = + parse_event_result( + true, Debug, NewS, Result, + Events, Event, State, Data), + loop_event_actions( + Parent, Debug, S, NewTimerRefs, NewTimerTypes, + Events, Event, NextState, NewData, Actions); + {Class,Reason,Stacktrace} -> + terminate( + Class, Reason, Stacktrace, Debug, S, [Event|Events]) end. + +loop_event_actions( + Parent, Debug, + #{state := State, state_enter := StateEnter} = S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, Actions) -> + case parse_actions(Debug, S, State, Actions) of + {ok,NewDebug,Hibernate,TimeoutsR,Postpone,NextEventsR} -> + if + StateEnter, NextState =/= State -> + loop_event_enter( + Parent, NewDebug, S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR); + StateEnter -> + case maps:is_key(init_state, S) of + true -> + %% Avoid infinite loop in initial state + %% with state entry events + NewS = maps:remove(init_state, S), + loop_event_enter( + Parent, NewDebug, NewS, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR); + false -> + loop_event_result( + Parent, NewDebug, S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR) + end; + true -> + loop_event_result( + Parent, NewDebug, S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR) + end; + {Class,Reason,Stacktrace} -> + terminate( + Class, Reason, Stacktrace, + Debug, S#{data := NewData}, [Event|Events]) + end. + +loop_event_enter( + Parent, Debug, #{state := State} = S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR) -> + case call_state_function(S, enter, State, NextState, NewData) of + {ok,Result,NewS} -> + {NewerData,_,Actions} = + parse_event_result( + false, Debug, NewS, Result, + Events, Event, NextState, NewData), + loop_event_enter_actions( + Parent, Debug, NewS, TimerRefs, TimerTypes, + Events, Event, NextState, NewerData, + Hibernate, TimeoutsR, Postpone, NextEventsR, Actions); + {Class,Reason,Stacktrace} -> + terminate( + Class, Reason, Stacktrace, + Debug, S#{state := NextState, data := NewData}, + [Event|Events]) + end. + +loop_event_enter_actions( + Parent, Debug, S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR, Actions) -> + case + parse_enter_actions( + Debug, S, NextState, Actions, + Hibernate, TimeoutsR) + of + {ok,NewDebug,NewHibernate,NewTimeoutsR,_,_} -> + loop_event_result( + Parent, NewDebug, S, TimerRefs, TimerTypes, + Events, Event, NextState, NewData, + NewHibernate, NewTimeoutsR, Postpone, NextEventsR); + {Class,Reason,Stacktrace} -> + terminate( + Class, Reason, Stacktrace, + Debug, S#{state := NextState, data := NewData}, + [Event|Events]) + end. + +loop_event_result( + Parent, Debug, + #{state := State, postponed := P_0} = S, TimerRefs_0, TimerTypes_0, + Events, Event, NextState, NewData, + Hibernate, TimeoutsR, Postpone, NextEventsR) -> + %% + %% All options have been collected and next_events are buffered. + %% Do the actual state transition. + %% + {NewDebug,P_1} = % Move current event to postponed if Postpone + case Postpone of + true -> + {sys_debug(Debug, S, State, {postpone,Event,State}), + [Event|P_0]}; + false -> + {sys_debug(Debug, S, State, {consume,Event,State}), + P_0} + end, + {Events_1,NewP,{TimerRefs_1,TimerTypes_1}} = + %% Move all postponed events to queue and cancel the + %% state timeout if the state changes + if + NextState =:= State -> + {Events,P_1,{TimerRefs_0,TimerTypes_0}}; + true -> + {lists:reverse(P_1, Events),[], + cancel_timer_by_type( + state_timeout, TimerRefs_0, TimerTypes_0)} + end, + {TimerRefs_2,TimerTypes_2,TimeoutEvents} = + %% Stop and start timers non-event timers + parse_timers(TimerRefs_1, TimerTypes_1, TimeoutsR), + %% Place next events last in reversed queue + Events_2R = lists:reverse(Events_1, NextEventsR), + %% Enqueue immediate timeout events and start event timer + {NewTimerRefs,NewTimerTypes,Events_3R} = + process_timeout_events( + TimerRefs_2, TimerTypes_2, TimeoutEvents, Events_2R), + NewEvents = lists:reverse(Events_3R), + loop_events( + Parent, NewDebug, S, NewTimerRefs, NewTimerTypes, + NewEvents, Hibernate, NextState, NewData, NewP). + +%% Loop until out of enqueued events %% -loop_events_done(Parent, Debug, S, Timer, State, Data, P, Hibernate) -> +loop_events( + Parent, Debug, S, TimerRefs, TimerTypes, + [] = _Events, Hibernate, State, Data, P) -> + %% Update S and loop back to loop/3 to receive a new event NewS = S#{ state := State, data := Data, postponed := P, - hibernate := Hibernate, - timer := Timer}, - loop(Parent, Debug, NewS). + hibernate => Hibernate, + timer_refs => TimerRefs, + timer_types => TimerTypes}, + loop(Parent, Debug, NewS); +loop_events( + Parent, Debug, S, TimerRefs, TimerTypes, + [Event|Events], Hibernate, State, Data, P) -> + %% Update S and continue with enqueued events + NewS = + S#{ + state := State, + data := Data, + postponed := P}, + loop_event( + Parent, Debug, NewS, TimerRefs, TimerTypes, Events, Event, Hibernate). -loop_event( - Parent, Debug, + + +%%--------------------------------------------------------------------------- +%% Server loop helpers + +call_callback_mode(#{module := Module} = S) -> + try Module:callback_mode() of + CallbackMode -> + callback_mode_result(S, CallbackMode) + catch + CallbackMode -> + callback_mode_result(S, CallbackMode); + error:undef -> + %% Process undef to check for the simple mistake + %% of calling a nonexistent state function + %% to make the undef more precise + case erlang:get_stacktrace() of + [{Module,callback_mode,[]=Args,_} + |Stacktrace] -> + {error, + {undef_callback,{Module,callback_mode,Args}}, + Stacktrace}; + Stacktrace -> + {error,undef,Stacktrace} + end; + Class:Reason -> + {Class,Reason,erlang:get_stacktrace()} + end. + +callback_mode_result(S, CallbackMode) -> + case + parse_callback_mode( + if + is_atom(CallbackMode) -> + [CallbackMode]; + true -> + CallbackMode + end, undefined, false) + of + {undefined,_} -> + {error, + {bad_return_from_callback_mode,CallbackMode}, + ?STACKTRACE()}; + {CBMode,StateEnter} -> + {ok, + S#{ + callback_mode := CBMode, + state_enter := StateEnter}} + end. + +parse_callback_mode([], CBMode, StateEnter) -> + {CBMode,StateEnter}; +parse_callback_mode([H|T], CBMode, StateEnter) -> + case callback_mode(H) of + true -> + parse_callback_mode(T, H, StateEnter); + false -> + case H of + state_enter -> + parse_callback_mode(T, CBMode, true); + _ -> + {undefined,StateEnter} + end + end; +parse_callback_mode(_, _CBMode, StateEnter) -> + {undefined,StateEnter}. + + +call_state_function( + #{callback_mode := undefined} = S, + Type, Content, State, Data) -> + case call_callback_mode(S) of + {ok,NewS} -> + call_state_function(NewS, Type, Content, State, Data); + Error -> + Error + end; +call_state_function( #{callback_mode := CallbackMode, module := Module} = S, - Events, - State, Data, P, {Type,Content} = Event, Hibernate) -> - %% - %% If Hibernate is true here it can only be - %% because it was set from an event action - %% and we did not go into hibernation since there - %% were events in queue, so we do what the user - %% might depend on i.e collect garbage which - %% would have happened if we actually hibernated - %% and immediately was awakened - Hibernate andalso garbage_collect(), - %% + Type, Content, State, Data) -> try case CallbackMode of - undefined -> - Module:callback_mode(); state_functions -> erlang:apply(Module, State, [Type,Content,Data]); handle_event_function -> Module:handle_event(Type, Content, State, Data) end of - Result when CallbackMode =:= undefined -> - loop_event_callback_mode( - Parent, Debug, S, Events, State, Data, P, Event, Result); Result -> - loop_event_result( - Parent, Debug, S, Events, State, Data, P, Event, Result) + {ok,Result,S} catch - Result when CallbackMode =:= undefined -> - loop_event_callback_mode( - Parent, Debug, S, Events, State, Data, P, Event, Result); Result -> - loop_event_result( - Parent, Debug, S, Events, State, Data, P, Event, Result); + {ok,Result,S}; error:badarg -> case erlang:get_stacktrace() of [{erlang,apply, @@ -895,329 +1160,323 @@ loop_event( when CallbackMode =:= state_functions -> %% We get here e.g if apply fails %% due to State not being an atom - terminate( - error, - {undef_state_function,{Module,State,Args}}, - Stacktrace, - Debug, S, [Event|Events], State, Data, P); + {error, + {undef_state_function,{Module,State,Args}}, + Stacktrace}; Stacktrace -> - terminate( - error, badarg, Stacktrace, - Debug, S, [Event|Events], State, Data, P) + {error,badarg,Stacktrace} end; error:undef -> %% Process undef to check for the simple mistake %% of calling a nonexistent state function %% to make the undef more precise case erlang:get_stacktrace() of - [{Module,callback_mode,[]=Args,_} - |Stacktrace] - when CallbackMode =:= undefined -> - terminate( - error, - {undef_callback,{Module,callback_mode,Args}}, - Stacktrace, - Debug, S, [Event|Events], State, Data, P); [{Module,State,[Type,Content,Data]=Args,_} |Stacktrace] when CallbackMode =:= state_functions -> - terminate( - error, - {undef_state_function,{Module,State,Args}}, - Stacktrace, - Debug, S, [Event|Events], State, Data, P); + {error, + {undef_state_function,{Module,State,Args}}, + Stacktrace}; [{Module,handle_event,[Type,Content,State,Data]=Args,_} |Stacktrace] when CallbackMode =:= handle_event_function -> - terminate( - error, - {undef_state_function,{Module,handle_event,Args}}, - Stacktrace, - Debug, S, [Event|Events], State, Data, P); + {error, + {undef_state_function,{Module,handle_event,Args}}, + Stacktrace}; Stacktrace -> - terminate( - error, undef, Stacktrace, - Debug, S, [Event|Events], State, Data, P) + {error,undef,Stacktrace} end; Class:Reason -> - Stacktrace = erlang:get_stacktrace(), - terminate( - Class, Reason, Stacktrace, - Debug, S, [Event|Events], State, Data, P) + {Class,Reason,erlang:get_stacktrace()} end. -%% Interpret callback_mode() result -loop_event_callback_mode( - Parent, Debug, S, Events, State, Data, P, Event, CallbackMode) -> - case callback_mode(CallbackMode) of - true -> - Hibernate = false, % We have already GC:ed recently - loop_event( - Parent, Debug, - S#{callback_mode := CallbackMode}, - Events, - State, Data, P, Event, Hibernate); - false -> - terminate( - error, - {bad_return_from_callback_mode,CallbackMode}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, Data, P) - end. %% Interpret all callback return variants -loop_event_result( - Parent, Debug, S, Events, State, Data, P, Event, Result) -> +parse_event_result( + AllowStateChange, Debug, S, Result, Events, Event, State, Data) -> case Result of stop -> terminate( - exit, normal, ?STACKTRACE(), - Debug, S, [Event|Events], State, Data, P); + exit, normal, ?STACKTRACE(), Debug, S, [Event|Events]); {stop,Reason} -> terminate( - exit, Reason, ?STACKTRACE(), - Debug, S, [Event|Events], State, Data, P); + exit, Reason, ?STACKTRACE(), Debug, S, [Event|Events]); {stop,Reason,NewData} -> terminate( exit, Reason, ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P); + Debug, S#{data := NewData}, [Event|Events]); {stop_and_reply,Reason,Replies} -> Q = [Event|Events], reply_then_terminate( exit, Reason, ?STACKTRACE(), - Debug, S, Q, State, Data, P, Replies); + Debug, S, Q, Replies); {stop_and_reply,Reason,Replies,NewData} -> Q = [Event|Events], reply_then_terminate( exit, Reason, ?STACKTRACE(), - Debug, S, Q, State, NewData, P, Replies); - {next_state,NextState,NewData} -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, []); - {next_state,NextState,NewData,Actions} -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions); + Debug, S#{data := NewData}, Q, Replies); + {next_state,State,NewData} -> + {NewData,State,[]}; + {next_state,NextState,NewData} when AllowStateChange -> + {NewData,NextState,[]}; + {next_state,State,NewData,Actions} -> + {NewData,State,Actions}; + {next_state,NextState,NewData,Actions} when AllowStateChange -> + {NewData,NextState,Actions}; {keep_state,NewData} -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, State, []); + {NewData,State,[]}; {keep_state,NewData,Actions} -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, State, Actions); + {NewData,State,Actions}; keep_state_and_data -> - loop_event_actions( - Parent, Debug, S, Events, - State, Data, P, Event, State, []); + {Data,State,[]}; {keep_state_and_data,Actions} -> - loop_event_actions( - Parent, Debug, S, Events, - State, Data, P, Event, State, Actions); + {Data,State,Actions}; _ -> terminate( error, {bad_return_from_state_function,Result}, ?STACKTRACE(), - Debug, S, [Event|Events], State, Data, P) + Debug, S, [Event|Events]) end. -loop_event_actions( - Parent, Debug, S, Events, State, NewData, P, Event, NextState, Actions) -> - Postpone = false, % Shall we postpone this event; boolean() + +parse_enter_actions( + Debug, S, State, Actions, + Hibernate, TimeoutsR) -> + Postpone = forbidden, + NextEventsR = forbidden, + parse_actions( + Debug, S, State, listify(Actions), + Hibernate, TimeoutsR, Postpone, NextEventsR). + +parse_actions(Debug, S, State, Actions) -> Hibernate = false, - Timeout = undefined, - NextEvents = [], - loop_event_actions( - Parent, Debug, S, Events, State, NewData, P, Event, NextState, - if - is_list(Actions) -> - Actions; - true -> - [Actions] - end, - Postpone, Hibernate, Timeout, NextEvents). + TimeoutsR = [], + Postpone = false, + NextEventsR = [], + parse_actions( + Debug, S, State, listify(Actions), + Hibernate, TimeoutsR, Postpone, NextEventsR). %% -%% Process all actions -loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, [Action|Actions], - Postpone, Hibernate, Timeout, NextEvents) -> +parse_actions( + Debug, _S, _State, [], + Hibernate, TimeoutsR, Postpone, NextEventsR) -> + {ok,Debug,Hibernate,TimeoutsR,Postpone,NextEventsR}; +parse_actions( + Debug, S, State, [Action|Actions], + Hibernate, TimeoutsR, Postpone, NextEventsR) -> case Action of %% Actual actions {reply,From,Reply} -> case from(From) of true -> NewDebug = do_reply(Debug, S, State, From, Reply), - loop_event_actions( - Parent, NewDebug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, Timeout, NextEvents); + parse_actions( + NewDebug, S, State, Actions, + Hibernate, TimeoutsR, Postpone, NextEventsR); false -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P) - end; - {next_event,Type,Content} -> - case event_type(Type) of - true -> - NewDebug = - sys_debug(Debug, S, State, {in,{Type,Content}}), - loop_event_actions( - Parent, NewDebug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, Timeout, - [{Type,Content}|NextEvents]); - false -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P) + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()} end; %% Actions that set options - {postpone,NewPostpone} when is_boolean(NewPostpone) -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - NewPostpone, Hibernate, Timeout, NextEvents); - {postpone,_} -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P); - postpone -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - true, Hibernate, Timeout, NextEvents); {hibernate,NewHibernate} when is_boolean(NewHibernate) -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, NewHibernate, Timeout, NextEvents); + parse_actions( + Debug, S, State, Actions, + NewHibernate, TimeoutsR, Postpone, NextEventsR); {hibernate,_} -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P); + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()}; hibernate -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, true, Timeout, NextEvents); - {timeout,infinity,_} -> % Clear timer - it will never trigger - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, undefined, NextEvents); - {timeout,Time,_} = NewTimeout when is_integer(Time), Time >= 0 -> - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, NewTimeout, NextEvents); + parse_actions( + Debug, S, State, Actions, + true, TimeoutsR, Postpone, NextEventsR); + {state_timeout,Time,_} = StateTimeout + when is_integer(Time), Time >= 0; + Time =:= infinity -> + parse_actions( + Debug, S, State, Actions, + Hibernate, [StateTimeout|TimeoutsR], Postpone, NextEventsR); + {state_timeout,_,_} -> + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()}; + {timeout,infinity,_} -> + %% Ignore - timeout will never happen and already cancelled + parse_actions( + Debug, S, State, Actions, + Hibernate, TimeoutsR, Postpone, NextEventsR); + {timeout,Time,_} = Timeout when is_integer(Time), Time >= 0 -> + parse_actions( + Debug, S, State, Actions, + Hibernate, [Timeout|TimeoutsR], Postpone, NextEventsR); {timeout,_,_} -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P); - infinity -> % Clear timer - it will never trigger - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, undefined, NextEvents); + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()}; + infinity -> % Ignore - timeout will never happen + parse_actions( + Debug, S, State, Actions, + Hibernate, TimeoutsR, Postpone, NextEventsR); Time when is_integer(Time), Time >= 0 -> - NewTimeout = {timeout,Time,Time}, - loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P, Event, NextState, Actions, - Postpone, Hibernate, NewTimeout, NextEvents); + Timeout = {timeout,Time,Time}, + parse_actions( + Debug, S, State, Actions, + Hibernate, [Timeout|TimeoutsR], Postpone, NextEventsR); + {postpone,NewPostpone} + when is_boolean(NewPostpone), Postpone =/= forbidden -> + parse_actions( + Debug, S, State, Actions, + Hibernate, TimeoutsR, NewPostpone, NextEventsR); + {postpone,_} -> + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()}; + postpone when Postpone =/= forbidden -> + parse_actions( + Debug, S, State, Actions, + Hibernate, TimeoutsR, true, NextEventsR); + {next_event,Type,Content} -> + case event_type(Type) of + true when NextEventsR =/= forbidden -> + NewDebug = + sys_debug(Debug, S, State, {in,{Type,Content}}), + parse_actions( + NewDebug, S, State, Actions, + Hibernate, TimeoutsR, Postpone, + [{Type,Content}|NextEventsR]); + _ -> + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()} + end; _ -> - terminate( - error, - {bad_action_from_state_function,Action}, - ?STACKTRACE(), - Debug, S, [Event|Events], State, NewData, P) - end; + {error, + {bad_action_from_state_function,Action}, + ?STACKTRACE()} + end. + + +%% Stop and start timers as well as create timeout zero events +%% and pending event timer %% -%% End of actions list -loop_event_actions( - Parent, Debug, S, Events, - State, NewData, P0, Event, NextState, [], - Postpone, Hibernate, Timeout, NextEvents) -> - %% - %% All options have been collected and next_events are buffered. - %% Do the actual state transition. - %% - P1 = % Move current event to postponed if Postpone - case Postpone of - true -> - [Event|P0]; - false -> - P0 - end, - {Q2,P} = % Move all postponed events to queue if state change - if - NextState =:= State -> - {Events,P1}; - true -> - {lists:reverse(P1, Events),[]} - end, - %% Place next events first in queue - Q = lists:reverse(NextEvents, Q2), - %% - NewDebug = - sys_debug( - Debug, S, State, - case Postpone of - true -> - {postpone,Event,NextState}; - false -> - {consume,Event,NextState} - end), - loop_events( - Parent, NewDebug, S, Q, NextState, NewData, P, Hibernate, Timeout). +%% Stop and start timers non-event timers +parse_timers(TimerRefs, TimerTypes, TimeoutsR) -> + parse_timers(TimerRefs, TimerTypes, TimeoutsR, #{}, []). +%% +parse_timers(TimerRefs, TimerTypes, [], _Seen, TimeoutEvents) -> + {TimerRefs,TimerTypes,TimeoutEvents}; +parse_timers( + TimerRefs, TimerTypes, [Timeout|TimeoutsR], Seen, TimeoutEvents) -> + {TimerType,Time,TimerMsg} = Timeout, + case Seen of + #{TimerType := _} -> + %% Type seen before - ignore + parse_timers( + TimerRefs, TimerTypes, TimeoutsR, Seen, TimeoutEvents); + #{} -> + %% Unseen type - handle + NewSeen = Seen#{TimerType => true}, + %% Cancel any running timer + {NewTimerRefs,NewTimerTypes} = + cancel_timer_by_type(TimerType, TimerRefs, TimerTypes), + if + Time =:= infinity -> + %% Ignore - timer will never fire + parse_timers( + NewTimerRefs, NewTimerTypes, TimeoutsR, + NewSeen, TimeoutEvents); + TimerType =:= timeout -> + %% Handle event timer later + parse_timers( + NewTimerRefs, NewTimerTypes, TimeoutsR, + NewSeen, [Timeout|TimeoutEvents]); + Time =:= 0 -> + %% Handle zero time timeouts later + TimeoutEvent = {TimerType,TimerMsg}, + parse_timers( + NewTimerRefs, NewTimerTypes, TimeoutsR, + NewSeen, [TimeoutEvent|TimeoutEvents]); + true -> + %% Start a new timer + TimerRef = erlang:start_timer(Time, self(), TimerMsg), + parse_timers( + NewTimerRefs#{TimerRef => TimerType}, + NewTimerTypes#{TimerType => TimerRef}, + TimeoutsR, NewSeen, TimeoutEvents) + end + end. + +%% Enqueue immediate timeout events and start event timer +process_timeout_events(TimerRefs, TimerTypes, [], EventsR) -> + {TimerRefs, TimerTypes, EventsR}; +process_timeout_events( + TimerRefs, TimerTypes, + [{timeout,0,TimerMsg}|TimeoutEvents], []) -> + %% No enqueued events - insert a timeout zero event + TimeoutEvent = {timeout,TimerMsg}, + process_timeout_events( + TimerRefs, TimerTypes, + TimeoutEvents, [TimeoutEvent]); +process_timeout_events( + TimerRefs, TimerTypes, + [{timeout,Time,TimerMsg}], []) -> + %% No enqueued events - start event timer + TimerRef = erlang:start_timer(Time, self(), TimerMsg), + process_timeout_events( + TimerRefs#{TimerRef => timeout}, TimerTypes#{timeout => TimerRef}, + [], []); +process_timeout_events( + TimerRefs, TimerTypes, + [{timeout,_Time,_TimerMsg}|TimeoutEvents], EventsR) -> + %% There will be some other event so optimize by not starting + %% an event timer to just have to cancel it again + process_timeout_events( + TimerRefs, TimerTypes, + TimeoutEvents, EventsR); +process_timeout_events( + TimerRefs, TimerTypes, + [{_TimeoutType,_TimeoutMsg} = TimeoutEvent|TimeoutEvents], EventsR) -> + process_timeout_events( + TimerRefs, TimerTypes, + TimeoutEvents, [TimeoutEvent|EventsR]). + + %%--------------------------------------------------------------------------- %% Server helpers reply_then_terminate( Class, Reason, Stacktrace, - Debug, S, Q, State, Data, P, Replies) -> + Debug, #{state := State} = S, Q, Replies) -> if is_list(Replies) -> do_reply_then_terminate( Class, Reason, Stacktrace, - Debug, S, Q, State, Data, P, Replies); + Debug, S, Q, Replies, State); true -> do_reply_then_terminate( Class, Reason, Stacktrace, - Debug, S, Q, State, Data, P, [Replies]) + Debug, S, Q, [Replies], State) end. %% do_reply_then_terminate( - Class, Reason, Stacktrace, Debug, S, Q, State, Data, P, []) -> - terminate(Class, Reason, Stacktrace, Debug, S, Q, State, Data, P); + Class, Reason, Stacktrace, Debug, S, Q, [], _State) -> + terminate(Class, Reason, Stacktrace, Debug, S, Q); do_reply_then_terminate( - Class, Reason, Stacktrace, Debug, S, Q, State, Data, P, [R|Rs]) -> + Class, Reason, Stacktrace, Debug, S, Q, [R|Rs], State) -> case R of {reply,{_To,_Tag}=From,Reply} -> NewDebug = do_reply(Debug, S, State, From, Reply), do_reply_then_terminate( - Class, Reason, Stacktrace, - NewDebug, S, Q, State, Data, P, Rs); + Class, Reason, Stacktrace, NewDebug, S, Q, Rs, State); _ -> terminate( error, {bad_reply_action_from_state_function,R}, ?STACKTRACE(), - Debug, S, Q, State, Data, P) + Debug, S, Q) end. do_reply(Debug, S, State, From, Reply) -> @@ -1227,7 +1486,9 @@ do_reply(Debug, S, State, From, Reply) -> terminate( Class, Reason, Stacktrace, - Debug, #{module := Module} = S, Q, State, Data, P) -> + Debug, + #{module := Module, state := State, data := Data, postponed := P} = S, + Q) -> try Module:terminate(Reason, State, Data) of _ -> ok catch @@ -1236,20 +1497,24 @@ terminate( ST = erlang:get_stacktrace(), error_info( C, R, ST, S, Q, P, - format_status(terminate, get(), S, State, Data)), + format_status(terminate, get(), S)), sys:print_log(Debug), erlang:raise(C, R, ST) end, - case Reason of - normal -> ok; - shutdown -> ok; - {shutdown,_} -> ok; - _ -> - error_info( - Class, Reason, Stacktrace, S, Q, P, - format_status(terminate, get(), S, State, Data)), - sys:print_log(Debug) - end, + _ = + case Reason of + normal -> + sys_debug(Debug, S, State, {terminate,Reason}); + shutdown -> + sys_debug(Debug, S, State, {terminate,Reason}); + {shutdown,_} -> + sys_debug(Debug, S, State, {terminate,Reason}); + _ -> + error_info( + Class, Reason, Stacktrace, S, Q, P, + format_status(terminate, get(), S)), + sys:print_log(Debug) + end, case Stacktrace of [] -> erlang:Class(Reason); @@ -1259,7 +1524,9 @@ terminate( error_info( Class, Reason, Stacktrace, - #{name := Name, callback_mode := CallbackMode}, + #{name := Name, + callback_mode := CallbackMode, + state_enter := StateEnter}, Q, P, FmtData) -> {FixedReason,FixedStacktrace} = case Stacktrace of @@ -1286,6 +1553,13 @@ error_info( end; _ -> {Reason,Stacktrace} end, + CBMode = + case StateEnter of + true -> + [CallbackMode,state_enter]; + false -> + CallbackMode + end, error_logger:format( "** State machine ~p terminating~n" ++ case Q of @@ -1312,8 +1586,9 @@ error_info( [] -> []; [Event|_] -> [Event] end] ++ - [FmtData,Class,FixedReason, - CallbackMode] ++ + [FmtData, + Class,FixedReason, + CBMode] ++ case Q of [_|[_|_] = Events] -> [Events]; _ -> [] @@ -1329,7 +1604,9 @@ error_info( %% Call Module:format_status/2 or return a default value -format_status(Opt, PDict, #{module := Module}, State, Data) -> +format_status( + Opt, PDict, + #{module := Module, state := State, data := Data}) -> case erlang:function_exported(Module, format_status, 2) of true -> try Module:format_status(Opt, [PDict,State,Data]) @@ -1353,3 +1630,35 @@ format_status_default(Opt, State, Data) -> _ -> [{data,[{"State",StateData}]}] end. + +listify(Item) when is_list(Item) -> + Item; +listify(Item) -> + [Item]. + +%% Cancel timer if running, otherwise no op +cancel_timer_by_type(TimerType, TimerRefs, TimerTypes) -> + case TimerTypes of + #{TimerType := TimerRef} -> + cancel_timer(TimerRef), + {maps:remove(TimerRef, TimerRefs), + maps:remove(TimerType, TimerTypes)}; + #{} -> + {TimerRefs,TimerTypes} + end. + +%%cancel_timer(undefined) -> +%% ok; +cancel_timer(TRef) -> + case erlang:cancel_timer(TRef) of + false -> + %% We have to assume that TRef is the ref of a running timer + %% and if so the timer has expired + %% hence we must wait for the timeout message + receive + {timeout,TRef,_} -> + ok + end; + _TimeLeft -> + ok + end. diff --git a/lib/stdlib/src/ms_transform.erl b/lib/stdlib/src/ms_transform.erl index c0eea652e7..98745b13f3 100644 --- a/lib/stdlib/src/ms_transform.erl +++ b/lib/stdlib/src/ms_transform.erl @@ -451,6 +451,8 @@ check_type(_,[{record,_,_,_}],ets) -> ok; check_type(_,[{cons,_,_,_}],dbg) -> ok; +check_type(_,[{nil,_}],dbg) -> + ok; check_type(Line0,[{match,_,{var,_,_},X}],Any) -> check_type(Line0,[X],Any); check_type(Line0,[{match,_,X,{var,_,_}}],Any) -> diff --git a/lib/stdlib/test/base64_SUITE.erl b/lib/stdlib/test/base64_SUITE.erl index 9176a3664a..d0abe5c961 100644 --- a/lib/stdlib/test/base64_SUITE.erl +++ b/lib/stdlib/test/base64_SUITE.erl @@ -23,9 +23,7 @@ -include_lib("common_test/include/ct.hrl"). %% Test server specific exports --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, - init_per_group/2,end_per_group/2, - init_per_testcase/2, end_per_testcase/2]). +-export([all/0, suite/0, groups/0, group/1]). %% Test cases must be exported. -export([base64_encode/1, base64_decode/1, base64_otp_5635/1, @@ -33,41 +31,26 @@ mime_decode_to_string/1, roundtrip_1/1, roundtrip_2/1, roundtrip_3/1, roundtrip_4/1]). -init_per_testcase(_, Config) -> - Config. - -end_per_testcase(_, _Config) -> - ok. - %%------------------------------------------------------------------------- %% Test cases starts here. %%------------------------------------------------------------------------- + suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,4}}]. -all() -> +all() -> [base64_encode, base64_decode, base64_otp_5635, base64_otp_6279, big, illegal, mime_decode, mime_decode_to_string, {group, roundtrip}]. -groups() -> +groups() -> [{roundtrip, [parallel], [roundtrip_1, roundtrip_2, roundtrip_3, roundtrip_4]}]. -init_per_suite(Config) -> - Config. - -end_per_suite(_Config) -> - ok. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - +group(roundtrip) -> + %% valgrind needs a lot of time + [{timetrap,{minutes,10}}]. %%------------------------------------------------------------------------- %% Test base64:encode/1. @@ -78,9 +61,9 @@ base64_encode(Config) when is_list(Config) -> %% One pad <<"SGVsbG8gV29ybGQ=">> = base64:encode(<<"Hello World">>), %% No pad - "QWxhZGRpbjpvcGVuIHNlc2Ft" = + "QWxhZGRpbjpvcGVuIHNlc2Ft" = base64:encode_to_string("Aladdin:open sesam"), - + "MDEyMzQ1Njc4OSFAIzBeJiooKTs6PD4sLiBbXXt9" = base64:encode_to_string(<<"0123456789!@#0^&*();:<>,. []{}">>), ok. @@ -93,7 +76,7 @@ base64_decode(Config) when is_list(Config) -> %% One pad <<"Hello World">> = base64:decode(<<"SGVsbG8gV29ybGQ=">>), %% No pad - <<"Aladdin:open sesam">> = + <<"Aladdin:open sesam">> = base64:decode("QWxhZGRpbjpvcGVuIHNlc2Ft"), Alphabet = list_to_binary(lists:seq(0, 255)), @@ -208,7 +191,7 @@ mime_decode_to_string(Config) when is_list(Config) -> %% One pad to ignore, followed by more text "Hello World!!" = base64:mime_decode_to_string(<<"SGVsb)(G8gV29ybGQ=h IQ= =">>), %% No pad - "Aladdin:open sesam" = + "Aladdin:open sesam" = base64:mime_decode_to_string("QWxhZGRpbjpvcG¤\")(VuIHNlc2Ft"), %% Encoded base 64 strings may be divided by non base 64 chars. %% In this cases whitespaces. @@ -314,7 +297,7 @@ interleaved_ws_roundtrip_1([], Base64List, Bin, List) -> random_byte_list(0, Acc) -> Acc; -random_byte_list(N, Acc) -> +random_byte_list(N, Acc) -> random_byte_list(N-1, [rand:uniform(255)|Acc]). make_big_binary(N) -> diff --git a/lib/stdlib/test/ets_SUITE.erl b/lib/stdlib/test/ets_SUITE.erl index b02d17bdb6..00e02a06cc 100644 --- a/lib/stdlib/test/ets_SUITE.erl +++ b/lib/stdlib/test/ets_SUITE.erl @@ -19,7 +19,7 @@ %% -module(ets_SUITE). --export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, +-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1, init_per_group/2,end_per_group/2]). -export([default/1,setbag/1,badnew/1,verybadnew/1,named/1,keypos2/1, privacy/1,privacy_owner/2]). @@ -31,15 +31,14 @@ -export([match_delete3/1]). -export([firstnext/1,firstnext_concurrent/1]). -export([slot/1]). --export([ match1/1, match2/1, match_object/1, match_object2/1]). --export([ dups/1, misc1/1, safe_fixtable/1, info/1, tab2list/1]). --export([ tab2file/1, tab2file2/1, tabfile_ext1/1, - tabfile_ext2/1, tabfile_ext3/1, tabfile_ext4/1, badfile/1]). --export([ heavy_lookup/1, heavy_lookup_element/1, heavy_concurrent/1]). --export([ lookup_element_mult/1]). --export([]). +-export([match1/1, match2/1, match_object/1, match_object2/1]). +-export([dups/1, misc1/1, safe_fixtable/1, info/1, tab2list/1]). +-export([tab2file/1, tab2file2/1, tabfile_ext1/1, + tabfile_ext2/1, tabfile_ext3/1, tabfile_ext4/1, badfile/1]). +-export([heavy_lookup/1, heavy_lookup_element/1, heavy_concurrent/1]). +-export([lookup_element_mult/1]). -export([foldl_ordered/1, foldr_ordered/1, foldl/1, foldr/1, fold_empty/1]). --export([t_delete_object/1, t_init_table/1, t_whitebox/1, +-export([t_delete_object/1, t_init_table/1, t_whitebox/1, t_delete_all_objects/1, t_insert_list/1, t_test_ms/1, t_select_delete/1,t_ets_dets/1]). @@ -61,8 +60,7 @@ -export([otp_7665/1]). -export([meta_wb/1]). -export([grow_shrink/1, grow_pseudo_deleted/1, shrink_pseudo_deleted/1]). --export([ - meta_lookup_unnamed_read/1, meta_lookup_unnamed_write/1, +-export([meta_lookup_unnamed_read/1, meta_lookup_unnamed_write/1, meta_lookup_named_read/1, meta_lookup_named_write/1, meta_newdel_unnamed/1, meta_newdel_named/1]). -export([smp_insert/1, smp_fixed_delete/1, smp_unfix_fix/1, smp_select_delete/1, @@ -95,7 +93,7 @@ rename_do/1, rename_unnamed_do/1, interface_equality_do/1, ordered_match_do/1, ordered_do/1, privacy_do/1, empty_do/1, badinsert_do/1, time_lookup_do/1, lookup_order_do/1, lookup_element_mult_do/1, delete_tab_do/1, delete_elem_do/1, - match_delete_do/1, match_delete3_do/1, firstnext_do/1, + match_delete_do/1, match_delete3_do/1, firstnext_do/1, slot_do/1, match1_do/1, match2_do/1, match_object_do/1, match_object2_do/1, misc1_do/1, safe_fixtable_do/1, info_do/1, dups_do/1, heavy_lookup_do/1, heavy_lookup_element_do/1, member_do/1, otp_5340_do/1, otp_7665_do/1, meta_wb_do/1, @@ -129,7 +127,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}, {timetrap,{minutes,5}}]. -all() -> +all() -> [{group, new}, {group, insert}, {group, lookup}, {group, delete}, firstnext, firstnext_concurrent, slot, {group, match}, t_match_spec_run, @@ -161,7 +159,7 @@ all() -> memory_check_summary]. % MUST BE LAST -groups() -> +groups() -> [{new, [], [default, setbag, badnew, verybadnew, named, keypos2, privacy]}, @@ -249,6 +247,7 @@ t_bucket_disappears_do(Opts) -> %% Check ets:match_spec_run/2. t_match_spec_run(Config) when is_list(Config) -> + ct:timetrap({minutes,30}), %% valgrind needs a lot init_externals(), EtsMem = etsmem(), @@ -709,7 +708,7 @@ adjust_xmem([_T1,_T2,_T3,_T4], {A0,B0,C0,D0} = _Mem0) -> {A0+TabDiff, B0+TabDiff, C0+TabDiff, D0+TabDiff}. %% Misc. whitebox tests -t_whitebox(Config) when is_list(Config) -> +t_whitebox(Config) when is_list(Config) -> EtsMem = etsmem(), repeat_for_opts(whitebox_1), repeat_for_opts(whitebox_1), @@ -1050,6 +1049,7 @@ do_reverse_chunked({L,C},Acc) -> %% Test the ets:select_delete/2 and ets:select_count/2 BIFs. t_select_delete(Config) when is_list(Config) -> + ct:timetrap({minutes,30}), %% valgrind needs a lot EtsMem = etsmem(), Tables = fill_sets_int(10000) ++ fill_sets_int(10000,[{write_concurrency,true}]), lists:foreach @@ -1495,15 +1495,15 @@ update_element(Config) when is_list(Config) -> verify_etsmem(EtsMem). update_element_opts(Opts) -> - TupleCases = [{{key,val}, 1 ,2}, - {{val,key}, 2, 1}, - {{key,val}, 1 ,[2]}, + TupleCases = [{{key,val}, 1 ,2}, + {{val,key}, 2, 1}, + {{key,val}, 1 ,[2]}, {{key,val,val}, 1, [2,3]}, {{val,key,val,val}, 2, [3,4,1]}, {{val,val,key,val}, 3, [1,4,1,2]}, % update pos1 twice {{val,val,val,key}, 4, [2,1,2,3]}],% update pos2 twice - lists:foreach(fun({Tuple,KeyPos,UpdPos}) -> update_element_opts(Tuple,KeyPos,UpdPos,Opts) end, + lists:foreach(fun({Tuple,KeyPos,UpdPos}) -> update_element_opts(Tuple,KeyPos,UpdPos,Opts) end, TupleCases), update_element_neg(Opts). @@ -1519,9 +1519,9 @@ update_element_opts(Tuple,KeyPos,UpdPos,Opts) -> true = ets:delete(OrdSet), ok. -update_element(T,Tuple,KeyPos,UpdPos) -> +update_element(T,Tuple,KeyPos,UpdPos) -> KeyList = [17,"seventeen",<<"seventeen">>,{17},list_to_binary(lists:seq(1,100)),make_ref(), self()], - lists:foreach(fun(Key) -> + lists:foreach(fun(Key) -> TupleWithKey = setelement(KeyPos,Tuple,Key), update_element_do(T,TupleWithKey,Key,UpdPos) end, @@ -1556,29 +1556,29 @@ update_element_do(Tab,Tuple,Key,UpdPos) -> {Pos, element(ToIx+1,Values)} % single {pos,value} arg end, - UpdateF = fun(ToIx,Rand) -> - PosValArg = PosValArgF(ToIx,[],UpdPos,Rand,PosValArgF), - %%io:format("update_element(~p)~n",[PosValArg]), - ArgHash = erlang:phash2({Tab,Key,PosValArg}), - true = ets:update_element(Tab, Key, PosValArg), - ArgHash = erlang:phash2({Tab,Key,PosValArg}), - NewTuple = update_tuple(PosValArg,Tuple), - [NewTuple] = ets:lookup(Tab,Key) + UpdateF = fun(ToIx,Rand) -> + PosValArg = PosValArgF(ToIx,[],UpdPos,Rand,PosValArgF), + %%io:format("update_element(~p)~n",[PosValArg]), + ArgHash = erlang:phash2({Tab,Key,PosValArg}), + true = ets:update_element(Tab, Key, PosValArg), + ArgHash = erlang:phash2({Tab,Key,PosValArg}), + NewTuple = update_tuple(PosValArg,Tuple), + [NewTuple] = ets:lookup(Tab,Key) end, - LoopF = fun(_FromIx, Incr, _Times, Checksum, _MeF) when Incr >= Length -> + LoopF = fun(_FromIx, Incr, _Times, Checksum, _MeF) when Incr >= Length -> Checksum; % done - (FromIx, Incr, 0, Checksum, MeF) -> + (FromIx, Incr, 0, Checksum, MeF) -> MeF(FromIx, Incr+1, Length, Checksum, MeF); - (FromIx, Incr, Times, Checksum, MeF) -> + (FromIx, Incr, Times, Checksum, MeF) -> ToIx = (FromIx + Incr) rem Length, UpdateF(ToIx,Checksum), - if + if Incr =:= 0 -> UpdateF(ToIx,Checksum); % extra update to same value true -> true - end, + end, MeF(ToIx, Incr, Times-1, Checksum+ToIx+1, MeF) end, @@ -1622,7 +1622,7 @@ update_element_neg_do(T) -> Object = {key, 0, "Hej"}, true = ets:insert(T,Object), - UpdateF = fun(Arg3) -> + UpdateF = fun(Arg3) -> ArgHash = erlang:phash2({T,key,Arg3}), {'EXIT',{badarg,_}} = (catch ets:update_element(T,key,Arg3)), ArgHash = erlang:phash2({T,key,Arg3}), @@ -1697,7 +1697,7 @@ update_counter_for(T) -> true = ets:lookup(T, b) =:= [setelement(1, NewObj, b)], ets:delete(T, b), Myself(NewObj,Times-1,Arg3,Myself) - end, + end, LoopF = fun(Obj, Times, Arg3) -> %%io:format("Loop start:\nObj = ~p\nArg3=~p\n",[Obj,Arg3]), @@ -1806,7 +1806,7 @@ uc_mimic(Obj, [Pits|Tail], Acc) -> uc_adder(Init, {_Pos, Add}) -> Init + Add; -uc_adder(Init, {_Pos, Add, Thres, Warp}) -> +uc_adder(Init, {_Pos, Add, Thres, Warp}) -> case Init + Add of X when X > Thres, Add > 0 -> Warp; @@ -1838,7 +1838,7 @@ update_counter_neg_for(T) -> Object = {key,0,false,1}, true = ets:insert(T,Object), - UpdateF = fun(Arg3) -> + UpdateF = fun(Arg3) -> ArgHash = erlang:phash2({T,key,Arg3}), {'EXIT',{badarg,_}} = (catch ets:update_counter(T,key,Arg3)), ArgHash = erlang:phash2({T,key,Arg3}), @@ -1978,15 +1978,16 @@ fixtable_next_do(Opts) -> verify_etsmem(EtsMem). do_fixtable_next(Tab) -> - F = fun(X,T,FF) -> case X of - 0 -> true; - _ -> - ets:insert(T, {X, - integer_to_list(X), - X rem 10}), - FF(X-1,T,FF) - end - end, + F = fun(X,T,FF) -> + case X of + 0 -> true; + _ -> + ets:insert(T, {X, + integer_to_list(X), + X rem 10}), + FF(X-1,T,FF) + end + end, F(100,Tab,F), ets:safe_fixtable(Tab,true), First = ets:first(Tab), @@ -2001,7 +2002,7 @@ do_fixtable_next(Tab) -> %% Check inserts of deleted keys in fixed bags. fixtable_insert(Config) when is_list(Config) -> - Combos = [[Type,{write_concurrency,WC}] || Type<- [bag,duplicate_bag], + Combos = [[Type,{write_concurrency,WC}] || Type<- [bag,duplicate_bag], WC <- [false,true]], lists:foreach(fun(Opts) -> fixtable_insert_do(Opts) end, Combos), @@ -2117,7 +2118,7 @@ heir_do(Opts) -> %% Different types of heir data and link/monitor relations TestFun = fun(Arg) -> {EtsMem,Arg} end, - Combos = [{Data,Mode} || Data<-[foo_data, <<"binary">>, + Combos = [{Data,Mode} || Data<-[foo_data, <<"binary">>, lists:seq(1,10), {17,TestFun,self()}, "The busy heir"], Mode<-[none,link,monitor]], @@ -2157,7 +2158,7 @@ heir_do(Opts) -> Founder4 ! {go, Heir4}, {'DOWN', MrefH4, process, Heir4, normal} = receive_any(), erts_debug:set_internal_state(next_pid, NextPidIx), - DoppelGanger = spawn_monitor_with_pid(Heir4, + DoppelGanger = spawn_monitor_with_pid(Heir4, fun()-> die_please = receive_any() end), Founder4 ! die_please, {'DOWN', MrefF4, process, Founder4, normal} = receive_any(), @@ -2170,12 +2171,12 @@ heir_do(Opts) -> failed -> io:format("Failed to spawn process with pid ~p\n", [Heir4]), true % try again - end + end end), verify_etsmem(EtsMem). -heir_founder(Master, HeirData, Opts) -> +heir_founder(Master, HeirData, Opts) -> {go,Heir} = receive_any(), HeirTpl = case Heir of none -> {heir,none}; @@ -2248,7 +2249,7 @@ heir_1(HeirData,Mode,Opts) -> {'DOWN', Mref, process, Heir, normal} = receive_any(). %% Test ets:give_way/3. -give_away(Config) when is_list(Config) -> +give_away(Config) when is_list(Config) -> repeat_for_opts(give_away_do). give_away_do(Opts) -> @@ -2387,7 +2388,7 @@ bad_table(Config) when is_list(Config) -> ok. bad_table_do(Opts, DummyFile) -> - Parent = self(), + Parent = self(), {Pid,Mref} = my_spawn_opt(fun()-> ets_new(priv,[private,named_table | Opts]), Priv = ets_new(priv,[private | Opts]), ets_new(prot,[protected,named_table | Opts]), @@ -2442,7 +2443,7 @@ bad_table_do(Opts, DummyFile) -> ], Info = {Opts, Priv, Prot}, lists:foreach(fun(Op) -> bad_table_op(Info, Op) end, - OpList), + OpList), Pid ! die_please, {'DOWN', Mref, process, Pid, normal} = receive_any(), ok. @@ -2577,14 +2578,14 @@ interface_equality_do(Opts) -> Set = ets_new(set,[set | Opts]), OrderedSet = ets_new(ordered_set,[ordered_set | Opts]), F = fun(X,T,FF) -> case X of - 0 -> true; - _ -> - ets:insert(T, {X, - integer_to_list(X), - X rem 10}), - FF(X-1,T,FF) - end - end, + 0 -> true; + _ -> + ets:insert(T, {X, + integer_to_list(X), + X rem 10}), + FF(X-1,T,FF) + end + end, F(100,Set,F), F(100,OrderedSet,F), equal_results(ets, insert, Set, OrderedSet, [{a,"a"}]), @@ -2653,20 +2654,20 @@ ordered_match_do(Opts) -> F(3000,T1,F), [[3,3],[3,3],[3,3]] = ets:match(T1, {'_','_','$1','$2',3}), F2 = fun(X,Rem,Res,FF) -> case X of - 0 -> []; - _ -> + 0 -> []; + _ -> case X rem Rem of Res -> FF(X-1,Rem,Res,FF) ++ [{X, - integer_to_list(X), + integer_to_list(X), X rem 10, X rem 100, X rem 1000}]; _ -> FF(X-1,Rem,Res,FF) end - end + end end, OL1 = F2(3000,100,2,F2), OL1 = ets:match_object(T1, {'_','_','_',2,'_'}), @@ -2744,7 +2745,7 @@ pick_all_backwards(T) -> %% Small test case for both set and bag type ets tables. -setbag(Config) when is_list(Config) -> +setbag(Config) when is_list(Config) -> EtsMem = etsmem(), Set = ets_new(set,[set]), Bag = ets_new(bag,[bag]), @@ -2821,7 +2822,7 @@ privacy_do(Opts) -> privacy_check(pub,prot,priv), - Owner ! {shift,1,{pub,prot,priv}}, + Owner ! {shift,1,{pub,prot,priv}}, receive {Pub1,Prot1,Priv1} -> ok = privacy_check(Pub1,Prot1,Priv1), @@ -2960,7 +2961,7 @@ badlookup(Config) when is_list(Config) -> verify_etsmem(EtsMem). %% Test that lookup returns objects in order of insertion for bag and dbag. -lookup_order(Config) when is_list(Config) -> +lookup_order(Config) when is_list(Config) -> EtsMem = etsmem(), repeat_for_opts(lookup_order_do, [write_concurrency,[bag,duplicate_bag]]), verify_etsmem(EtsMem), @@ -2982,7 +2983,7 @@ lookup_order_2(Opts, Fixed) -> case Fixed of true -> ets:safe_fixtable(T,true); false -> ok - end, + end, S10 = {T,[],key}, S20 = check_insert(S10,A), S30 = check_insert(S20,B), @@ -2994,7 +2995,7 @@ lookup_order_2(Opts, Fixed) -> S80 = check_delete(S70,D2b), S90 = check_insert(S80,D2a), SA0 = check_delete(S90,D3a), - SB0 = check_delete(SA0,D3b), + SB0 = check_delete(SA0,D3b), check_insert_new(SB0,D3b), true = ets:delete(T) @@ -3007,7 +3008,7 @@ check_insert({T,List0,Key},Val) -> ets:insert(T,{Key,Val}), List1 = case (ets:info(T,type) =:= bag andalso lists:member({Key,Val},List0)) of - true -> List0; + true -> List0; false -> [{Key,Val} | List0] end, check_check({T,List1,Key}). @@ -3040,8 +3041,6 @@ check_check(S={T,List,Key}) -> Items = length(List), S. - - fill_tab(Tab,Val) -> ets:insert(Tab,{key,Val}), ets:insert(Tab,{{a,144},Val}), @@ -3069,13 +3068,11 @@ lookup_element_mult_do(Opts) -> verify_etsmem(EtsMem). lem_data() -> - [ - {service,'eddie2@boromir',{150,236,14,103},httpd88,self()}, + [{service,'eddie2@boromir',{150,236,14,103},httpd88,self()}, {service,'eddie2@boromir',{150,236,14,103},httpd80,self()}, {service,'eddie3@boromir',{150,236,14,107},httpd88,self()}, {service,'eddie3@boromir',{150,236,14,107},httpd80,self()}, - {service,'eddie4@boromir',{150,236,14,108},httpd88,self()} - ]. + {service,'eddie4@boromir',{150,236,14,108},httpd88,self()}]. lem_crash(T) -> L = ets:lookup_element(T, 'eddie2@boromir', 3), @@ -3126,6 +3123,7 @@ delete_tab_do(Opts) -> %% Check that ets:delete/1 works and that other processes can run. delete_large_tab(Config) when is_list(Config) -> + ct:timetrap({minutes,30}), %% valgrind needs a lot Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)], EtsMem = etsmem(), repeat_for_opts(fun(Opts) -> delete_large_tab_do(Opts,Data) end), @@ -3148,7 +3146,7 @@ delete_large_tab_1(Name, Flags, Data, Fix) -> lists:foreach(fun({K,_}) -> ets:delete(Tab, K) end, Data) end, - {priority, Prio} = process_info(self(), priority), + {priority, Prio} = process_info(self(), priority), Deleter = self(), [SchedTracer] = start_loopers(1, @@ -3195,7 +3193,7 @@ delete_large_tab_1(Name, Flags, Data, Fix) -> %% Delete a large name table and try to create a new table with %% the same name in another process. -delete_large_named_table(Config) when is_list(Config) -> +delete_large_named_table(Config) when is_list(Config) -> Data = [{erlang:phash2(I, 16#ffffff),I} || I <- lists:seq(1, 200000)], EtsMem = etsmem(), repeat_for_opts(fun(Opts) -> delete_large_named_table_do(Opts,Data) end), @@ -3566,7 +3564,7 @@ dyn_lookup(T) -> dyn_lookup(T, ets:first(T)). dyn_lookup(_T, '$end_of_table') -> []; dyn_lookup(T, K) -> - NextKey=ets:next(T,K), + NextKey = ets:next(T,K), case ets:next(T,K) of NextKey -> dyn_lookup(T, NextKey); @@ -4085,9 +4083,9 @@ tabfile_ext2_do(Opts,Config) -> Name = make_ref(), [ets:insert(T,{X,integer_to_list(X)}) || X <- L], ok = ets:tab2file(T,FName,[{extended_info,[md5sum]}]), - true = lists:sort(ets:tab2list(T)) =:= + true = lists:sort(ets:tab2list(T)) =:= lists:sort(ets:tab2list(element(2,ets:file2tab(FName)))), - true = lists:sort(ets:tab2list(T)) =:= + true = lists:sort(ets:tab2list(T)) =:= lists:sort(ets:tab2list( element(2,ets:file2tab(FName,[{verify,true}])))), {ok, Name} = disk_log:open([{name,Name},{file,FName}]), @@ -4102,9 +4100,9 @@ tabfile_ext2_do(Opts,Config) -> ets:tab2list( element(2,ets:file2tab(FName2)))), {error,checksum_error} = ets:file2tab(FName2,[{verify,true}]), - {value,{extended_info,[md5sum]}} = + {value,{extended_info,[md5sum]}} = lists:keysearch(extended_info,1,element(2,ets:tabfile_info(FName2))), - {value,{extended_info,[md5sum]}} = + {value,{extended_info,[md5sum]}} = lists:keysearch(extended_info,1,element(2,ets:tabfile_info(FName))), file:delete(FName), file:delete(FName2), @@ -4149,15 +4147,14 @@ tabfile_ext4(Config) when is_list(Config) -> Name2 = make_ref(), [ets:insert(TL,{X,integer_to_list(X)}) || X <- LL], ok = ets:tab2file(TL,FName,[{extended_info,[md5sum]}]), - {ok, Name2} = disk_log:open([{name, Name2}, {file, FName}, + {ok, Name2} = disk_log:open([{name, Name2}, {file, FName}, {mode, read_only}]), {C,[_|_]} = disk_log:chunk(Name2,start), {_,[_|_]} = disk_log:chunk(Name2,C), disk_log:close(Name2), - true = lists:sort(ets:tab2list(TL)) =:= + true = lists:sort(ets:tab2list(TL)) =:= lists:sort(ets:tab2list(element(2,ets:file2tab(FName)))), - Res = [ - begin + Res = [begin {ok,FD} = file:open(FName,[binary,read,write]), {ok, Bin} = file:pread(FD,0,1000), <<B1:N/binary,Ch:8,B2/binary>> = Bin, @@ -4167,7 +4164,7 @@ tabfile_ext4(Config) when is_list(Config) -> ok = file:close(FD), X = case ets:file2tab(FName) of {ok,TL2} -> - true = lists:sort(ets:tab2list(TL)) =/= + true = lists:sort(ets:tab2list(TL)) =/= lists:sort(ets:tab2list(TL2)); _ -> totally_broken @@ -4175,7 +4172,7 @@ tabfile_ext4(Config) when is_list(Config) -> {error,Y} = ets:file2tab(FName,[{verify,true}]), ets:tab2file(TL,FName,[{extended_info,[md5sum]}]), {X,Y} - end || N <- lists:seq(500,600) ], + end || N <- lists:seq(500,600)], io:format("~p~n",[Res]), file:delete(FName), ok. @@ -4404,16 +4401,14 @@ member_do(Opts) -> build_table(L1,L2,Num) -> - T = ets_new(xxx, [ordered_set] - ), + T = ets_new(xxx, [ordered_set]), lists:foreach( fun(X1) -> lists:foreach( fun(X2) -> F = fun(FF,N) -> - ets:insert(T,{{X1,X2,N}, - X1, X2, N}), - case N of + ets:insert(T,{{X1,X2,N}, X1, X2, N}), + case N of 0 -> ok; _ -> @@ -4426,16 +4421,14 @@ build_table(L1,L2,Num) -> T. build_table2(L1,L2,Num) -> - T = ets_new(xxx, [ordered_set] - ), + T = ets_new(xxx, [ordered_set]), lists:foreach( fun(X1) -> lists:foreach( fun(X2) -> F = fun(FF,N) -> - ets:insert(T,{{N,X1,X2}, - N, X1, X2}), - case N of + ets:insert(T,{{N,X1,X2}, N, X1, X2}), + case N of 0 -> ok; _ -> @@ -4726,7 +4719,7 @@ del_one_by_one_dbag_3(T,From,To) -> N = (ets:info(T,size) + 1), Obj2 = {From, integer_to_list(From)}, ets:delete_object(T,Obj2), - N = (ets:info(T,size) + 2) + N = (ets:info(T,size) + 2) end, Next = if From < To -> @@ -4773,14 +4766,14 @@ gen_dets_filename(Config,N) -> filename:join(proplists:get_value(priv_dir,Config), "testdets_" ++ integer_to_list(N) ++ ".dets"). -otp_6842_select_1000(Config) when is_list(Config) -> +otp_6842_select_1000(Config) when is_list(Config) -> Tab = ets_new(xxx,[ordered_set]), [ets:insert(Tab,{X,X}) || X <- lists:seq(1,10000)], AllTrue = lists:duplicate(10,true), AllTrue = [ length( element(1, - ets:select(Tab,[{'_',[],['$_']}],X*1000))) =:= + ets:select(Tab,[{'_',[],['$_']}],X*1000))) =:= X*1000 || X <- lists:seq(1,10) ], Sequences = [[1000,1000,1000,1000,1000,1000,1000,1000,1000,1000], [2000,2000,2000,2000,2000], @@ -4806,7 +4799,13 @@ check_seq(A,B,C) -> false. otp_6338(Config) when is_list(Config) -> - L = binary_to_term(<<131,108,0,0,0,2,104,2,108,0,0,0,2,103,100,0,19,112,112,98,49,95,98,115,49,50,64,98,108,97,100,101,95,48,95,53,0,0,33,50,0,0,0,4,1,98,0,0,23,226,106,100,0,4,101,120,105,116,104,2,108,0,0,0,2,104,2,100,0,3,115,98,109,100,0,19,112,112,98,50,95,98,115,49,50,64,98,108,97,100,101,95,48,95,56,98,0,0,18,231,106,100,0,4,114,101,99,118,106>>), + L = binary_to_term(<<131,108,0,0,0,2,104,2,108,0,0,0,2,103,100,0,19,112,112, + 98,49,95,98,115,49,50,64,98,108,97,100,101,95,48,95,53, + 0,0,33,50,0,0,0,4,1,98,0,0,23,226,106,100,0,4,101,120, + 105,116,104,2,108,0,0,0,2,104,2,100,0,3,115,98,109,100, + 0,19,112,112,98,50,95,98,115,49,50,64,98,108,97,100, + 101,95,48,95,56,98,0,0,18,231,106,100,0,4,114,101,99, + 118,106>>), T = ets_new(xxx,[ordered_set]), lists:foreach(fun(X) -> ets:insert(T,X) end,L), [[4839,recv]] = ets:match(T,{[{sbm,ppb2_bs12@blade_0_8},'$1'],'$2'}), @@ -4825,7 +4824,7 @@ otp_5340_do(Opts) -> ets:delete(T). w(_,0, _) -> ok; -w(T,N, Id) -> +w(T,N, Id) -> ets:insert(T, {N, Id}), w(T,N-1,Id). @@ -4915,7 +4914,7 @@ meta_wb_new(Name, _, Tabs, Opts) -> case (catch ets_new(Name,[named_table|Opts])) of Name -> false = lists:member(Name, Tabs), - [Name | Tabs]; + [Name | Tabs]; {'EXIT',{badarg,_}} -> true = lists:member(Name, Tabs), Tabs @@ -5090,7 +5089,7 @@ meta_lookup_unnamed_read(Config) when is_list(Config) -> Tab end, ExecF = fun(Tab) -> [{key,data}] = ets:lookup(Tab,key), - Tab + Tab end, FiniF = fun(Tab) -> true = ets:delete(Tab) end, @@ -5114,7 +5113,7 @@ meta_lookup_named_read(Config) when is_list(Config) -> Tab end, ExecF = fun(Tab) -> [{key,data}] = ets:lookup(Tab,key), - Tab + Tab end, FiniF = fun(Tab) -> true = ets:delete(Tab) end, @@ -5173,9 +5172,9 @@ smp_fixed_delete_do() -> ets:safe_fixtable(T,true), Buckets = num_of_buckets(T), InitF = fun([ProcN,NumOfProcs|_]) -> {ProcN,NumOfProcs} end, - ExecF = fun({Key,_}) when Key > NumOfObjs -> + ExecF = fun({Key,_}) when Key > NumOfObjs -> [end_of_work]; - ({Key,Increment}) -> + ({Key,Increment}) -> true = ets:delete(T,Key), {Key+Increment,Increment} end, @@ -5204,7 +5203,7 @@ smp_unfix_fix_do() -> T = ets_new(foo,[public,{write_concurrency,true}]), %%Mem = ets:info(T,memory), NumOfObjs = 100000, - Deleted = 50000, + Deleted = 50000, filltabint(T,NumOfObjs), ets:safe_fixtable(T,true), Buckets = num_of_buckets(T), @@ -5217,7 +5216,7 @@ smp_unfix_fix_do() -> true = ets:info(T,fixed), Deleted = get_kept_objects(T), - {Child, Mref} = + {Child, Mref} = my_spawn_opt( fun()-> true = ets:info(T,fixed), @@ -5276,22 +5275,19 @@ otp_8166_do(WC) -> NumOfObjs = 3000, %% Need more than 1000 live objects for match_object to trap one time Deleted = NumOfObjs div 2, filltabint(T,NumOfObjs), - {ReaderPid, ReaderMref} = - my_spawn_opt(fun()-> otp_8166_reader(T,NumOfObjs) end, - [link, monitor, {scheduler,2}]), - {ZombieCrPid, ZombieCrMref} = - my_spawn_opt(fun()-> otp_8166_zombie_creator(T,Deleted) end, - [link, monitor, {scheduler,3}]), + {ReaderPid, ReaderMref} = my_spawn_opt(fun()-> otp_8166_reader(T,NumOfObjs) end, + [link, monitor, {scheduler,2}]), + {ZombieCrPid, ZombieCrMref} = my_spawn_opt(fun()-> otp_8166_zombie_creator(T,Deleted) end, + [link, monitor, {scheduler,3}]), repeat(fun() -> ZombieCrPid ! {loop, self()}, zombies_created = receive_any(), otp_8166_trapper(T, 10, ZombieCrPid) - end, - 100), + end, 100), ReaderPid ! quit, {'DOWN', ReaderMref, process, ReaderPid, normal} = receive_any(), - ZombieCrPid ! quit, + ZombieCrPid ! quit, {'DOWN', ZombieCrMref, process, ZombieCrPid, normal} = receive_any(), false = ets:info(T,fixed), 0 = get_kept_objects(T), @@ -5301,7 +5297,7 @@ otp_8166_do(WC) -> %% Keep reading the table otp_8166_reader(T, NumOfObjs) -> - repeat_while(fun(0) -> + repeat_while(fun(0) -> receive quit -> {false,done} after 0 -> {true,NumOfObjs} end; @@ -5315,14 +5311,14 @@ otp_8166_reader(T, NumOfObjs) -> otp_8166_trapper(T, Try, ZombieCrPid) -> [] = ets:match_object(T,{'_',"Pink Unicorn"}), case {ets:info(T,fixed),Try} of - {true,1} -> + {true,1} -> io:format("failed to provoke unsafe unfix, give up...\n",[]), ZombieCrPid ! unfix; - {true,_} -> + {true,_} -> io:format("trapper too fast, trying again...\n",[]), otp_8166_trapper(T, Try-1, ZombieCrPid); {false,_} -> done - end. + end. %% Fixate table and create some pseudo-deleted objects (zombies) @@ -5342,7 +5338,7 @@ otp_8166_zombie_creator(T,Deleted) -> repeat_while(fun() -> case ets:info(T,safe_fixed_monotonic_time) of {_,[_P1,_P2]} -> false; - _ -> + _ -> receive unfix -> false after 0 -> true end @@ -5399,7 +5395,7 @@ smp_select_delete(Config) when is_list(Config) -> Mod = 17, Zeros = erlang:make_tuple(Mod,0), InitF = fun(_) -> Zeros end, - ExecF = fun(Diffs0) -> + ExecF = fun(Diffs0) -> case rand:uniform(20) of 1 -> Mod = 17, @@ -5421,7 +5417,7 @@ smp_select_delete(Config) when is_list(Config) -> Diffs1; false -> Diffs0 end - end + end end, FiniF = fun(Result) -> Result end, Results = run_workers_do(InitF,ExecF,FiniF,20000), @@ -5432,7 +5428,7 @@ smp_select_delete(Config) when is_list(Config) -> 0, TotCnts), io:format("LeftInTab = ~p\n",[LeftInTab]), LeftInTab = ets:info(T,size), - lists:foldl(fun(Cnt,Eq) -> + lists:foldl(fun(Cnt,Eq) -> WasCnt = ets:select_count(T, [{{'_', '$1'}, [{'=:=', {'rem', '$1', Mod}, Eq}], @@ -5440,7 +5436,7 @@ smp_select_delete(Config) when is_list(Config) -> io:format("~p: ~p =?= ~p\n",[Eq,Cnt,WasCnt]), Cnt = WasCnt, Eq+1 - end, + end, 0, TotCnts), verify_table_load(T), LeftInTab = ets:select_delete(T, [{{'$1','$1'}, [], [true]}]), @@ -5478,8 +5474,8 @@ types_do(Opts) -> %% OTP-9932: Memory overwrite when inserting large integers in compressed bag. %% Will crash with segv on 64-bit opt if not fixed. otp_9932(Config) when is_list(Config) -> - T = ets:new(xxx, [bag, compressed]), - Fun = fun(N) -> + T = ets:new(xxx, [bag, compressed]), + Fun = fun(N) -> Key = {1316110174588445 bsl N,1316110174588583 bsl N}, S = {Key, Key}, true = ets:insert(T, S), @@ -5495,9 +5491,9 @@ otp_9932(Config) when is_list(Config) -> %% write_concurrency table. otp_9423(Config) when is_list(Config) -> InitF = fun(_) -> {0,0} end, - ExecF = fun({S,F}) -> - receive - stop -> + ExecF = fun({S,F}) -> + receive + stop -> io:format("~p got stop\n", [self()]), [end_of_work | {"Succeded=",S,"Failed=",F}] after 0 -> @@ -5593,12 +5589,12 @@ take(Config) when is_list(Config) -> %% Utility functions: %% -add_lists(L1,L2) -> +add_lists(L1,L2) -> add_lists(L1,L2,[]). add_lists([],[],Acc) -> lists:reverse(Acc); add_lists([E1|T1], [E2|T2], Acc) -> - add_lists(T1, T2, [E1+E2 | Acc]). + add_lists(T1, T2, [E1+E2 | Acc]). run_workers(InitF,ExecF,FiniF,Laps) -> run_workers(InitF,ExecF,FiniF,Laps, 0). @@ -5644,9 +5640,9 @@ worker_loop(infinite, ExecF, State) -> worker_loop(N, ExecF, State) -> worker_loop(N-1,ExecF,ExecF(State)). -wait_pids(Pids) -> +wait_pids(Pids) -> wait_pids(Pids,[]). -wait_pids([],Acc) -> +wait_pids([],Acc) -> Acc; wait_pids(Pids, Acc) -> receive @@ -5683,7 +5679,7 @@ etsmem() -> wait_for_memory_deallocations(), AllTabs = lists:map(fun(T) -> {T,ets:info(T,name),ets:info(T,size), - ets:info(T,memory),ets:info(T,type)} + ets:info(T,memory),ets:info(T,type)} end, ets:all()), EtsAllocInfo = erlang:system_info({allocator,ets_alloc}), @@ -5895,7 +5891,7 @@ receive_any() -> receive_any_spinning() -> receive_any_spinning(1000000). receive_any_spinning(Loops) -> - receive_any_spinning(Loops,Loops,1). + receive_any_spinning(Loops,Loops,1). receive_any_spinning(Loops,0,Tries) -> receive M -> io:format("Spinning process ~p got msg ~p after ~p tries\n", [self(),M,Tries]), diff --git a/lib/stdlib/test/gen_statem_SUITE.erl b/lib/stdlib/test/gen_statem_SUITE.erl index 1d1417c2e6..119546be98 100644 --- a/lib/stdlib/test/gen_statem_SUITE.erl +++ b/lib/stdlib/test/gen_statem_SUITE.erl @@ -37,7 +37,8 @@ all() -> {group, stop_handle_event}, {group, abnormal}, {group, abnormal_handle_event}, - shutdown, stop_and_reply, event_order, code_change, + shutdown, stop_and_reply, state_enter, event_order, + state_timeout, code_change, {group, sys}, hibernate, enter_loop]. @@ -57,7 +58,7 @@ tcs(start) -> tcs(stop) -> [stop1, stop2, stop3, stop4, stop5, stop6, stop7, stop8, stop9, stop10]; tcs(abnormal) -> - [abnormal1, abnormal2]; + [abnormal1, abnormal1clean, abnormal1dirty, abnormal2]; tcs(sys) -> [sys1, call_format_status, error_format_status, terminate_crash_format, @@ -451,8 +452,52 @@ abnormal1(Config) -> gen_statem:call(Name, {delayed_answer,1000}, 10), Reason), ok = gen_statem:stop(Name), + ?t:sleep(1100), ok = verify_empty_msgq(). +%% Check that time outs in calls work +abnormal1clean(Config) -> + Name = abnormal1clean, + LocalSTM = {local,Name}, + + {ok, _Pid} = + gen_statem:start(LocalSTM, ?MODULE, start_arg(Config, []), []), + + %% timeout call. + delayed = + gen_statem:call(Name, {delayed_answer,1}, {clean_timeout,100}), + {timeout,_} = + ?EXPECT_FAILURE( + gen_statem:call( + Name, {delayed_answer,1000}, {clean_timeout,10}), + Reason), + ok = gen_statem:stop(Name), + ?t:sleep(1100), + ok = verify_empty_msgq(). + +%% Check that time outs in calls work +abnormal1dirty(Config) -> + Name = abnormal1dirty, + LocalSTM = {local,Name}, + + {ok, _Pid} = + gen_statem:start(LocalSTM, ?MODULE, start_arg(Config, []), []), + + %% timeout call. + delayed = + gen_statem:call(Name, {delayed_answer,1}, {dirty_timeout,100}), + {timeout,_} = + ?EXPECT_FAILURE( + gen_statem:call( + Name, {delayed_answer,1000}, {dirty_timeout,10}), + Reason), + ok = gen_statem:stop(Name), + ?t:sleep(1100), + case flush() of + [{Ref,delayed}] when is_reference(Ref) -> + ok + end. + %% Check that bad return values makes the stm crash. Note that we must %% trap exit since we must link to get the real bad_return_ error abnormal2(Config) -> @@ -512,7 +557,8 @@ stop_and_reply(_Config) -> {stop_and_reply,Reason, [R1,{reply,From2,Reply2}]} end}, - {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine}, []), + {ok,STM} = + gen_statem:start_link(?MODULE, {map_statem,Machine,[]}, []), Self = self(), Tag1 = make_ref(), @@ -537,6 +583,61 @@ stop_and_reply(_Config) -> +state_enter(_Config) -> + process_flag(trap_exit, true), + Self = self(), + + Machine = + %% Abusing the internal format of From... + #{init => + fun () -> + {ok,start,1} + end, + start => + fun (enter, Prev, N) -> + Self ! {enter,start,Prev,N}, + {keep_state,N + 1}; + (internal, Prev, N) -> + Self ! {internal,start,Prev,N}, + {keep_state,N + 1}; + ({call,From}, echo, N) -> + {next_state,wait,N + 1,{reply,From,{echo,start,N}}}; + ({call,From}, {stop,Reason}, N) -> + {stop_and_reply,Reason,[{reply,From,{stop,N}}],N + 1} + end, + wait => + fun (enter, Prev, N) -> + Self ! {enter,wait,Prev,N}, + {keep_state,N + 1}; + ({call,From}, echo, N) -> + {next_state,start,N + 1, + [{next_event,internal,wait}, + {reply,From,{echo,wait,N}}]} + end}, + {ok,STM} = + gen_statem:start_link( + ?MODULE, {map_statem,Machine,[state_enter]}, []), + + [{enter,start,start,1}] = flush(), + {echo,start,2} = gen_statem:call(STM, echo), + [{enter,wait,start,3}] = flush(), + {wait,[4|_]} = sys:get_state(STM), + {echo,wait,4} = gen_statem:call(STM, echo), + [{enter,start,wait,5},{internal,start,wait,6}] = flush(), + {stop,7} = gen_statem:call(STM, {stop,bye}), + [{'EXIT',STM,bye}] = flush(), + + {noproc,_} = + ?EXPECT_FAILURE(gen_statem:call(STM, hej), Reason), + case flush() of + [] -> + ok; + Other2 -> + ct:fail({unexpected,Other2}) + end. + + + event_order(_Config) -> process_flag(trap_exit, true), @@ -579,7 +680,7 @@ event_order(_Config) -> Result end}, - {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine}, []), + {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine,[]}, []), Self = self(), Tag1 = make_ref(), gen_statem:cast(STM, {reply,{Self,Tag1},ok1}), @@ -609,6 +710,97 @@ event_order(_Config) -> +state_timeout(_Config) -> + process_flag(trap_exit, true), + + Machine = + #{init => + fun () -> + {ok,start,0} + end, + start => + fun + ({call,From}, {go,Time}, 0) -> + self() ! message_to_self, + {next_state, state1, {Time,From}, + %% Verify that internal events goes before external + [{state_timeout,Time,1}, + {next_event,internal,1}]} + end, + state1 => + fun + (internal, 1, Data) -> + %% Verify that a state change cancels timeout 1 + {next_state, state2, Data, + [{timeout,0,2}, + {state_timeout,0,2}, + {next_event,internal,2}]} + end, + state2 => + fun + (internal, 2, Data) -> + %% Verify that {state_timeout,0,_} + %% comes after next_event and that + %% {timeout,0,_} is cancelled by + %% pending {state_timeout,0,_} + {keep_state, {ok,2,Data}, + [{timeout,0,3}]}; + (state_timeout, 2, {ok,2,Data}) -> + %% Verify that timeout 0's are processed + %% in order + {keep_state, {ok,3,Data}, + [{timeout,0,4},{state_timeout,0,5}]}; + (timeout, 4, {ok,3,Data}) -> + %% Verify that timeout 0 is cancelled by + %% enqueued state_timeout 0 and that + %% multiple state_timeout 0 can be enqueued + {keep_state, {ok,4,Data}, + [{state_timeout,0,6},{timeout,0,7}]}; + (state_timeout, 5, {ok,4,Data}) -> + {keep_state, {ok,5,Data}}; + (state_timeout, 6, {ok,5,{Time,From}}) -> + {next_state, state3, 6, + [{reply,From,ok}, + {state_timeout,Time,8}]} + end, + state3 => + fun + (info, message_to_self, 6) -> + {keep_state, 7}; + ({call,From}, check, 7) -> + {keep_state, From}; + (state_timeout, 8, From) -> + {stop_and_reply, normal, + {reply,From,ok}} + end}, + + {ok,STM} = gen_statem:start_link(?MODULE, {map_statem,Machine,[]}, []), + sys:trace(STM, true), + TRef = erlang:start_timer(1000, self(), kull), + ok = gen_statem:call(STM, {go,500}), + ok = gen_statem:call(STM, check), + receive + {timeout,TRef,kull} -> + ct:fail(late_timeout) + after 0 -> + receive + {timeout,TRef,kull} -> + ok + after 1000 -> + ct:fail(no_check_timeout) + end + end, + receive + {'EXIT',STM,normal} -> + ok + after 500 -> + ct:fail(did_not_stop) + end, + + verify_empty_msgq(). + + + sys1(Config) -> {ok,Pid} = gen_statem:start(?MODULE, start_arg(Config, []), []), {status, Pid, {module,gen_statem}, _} = sys:get_status(Pid), @@ -1271,9 +1463,9 @@ init({callback_mode,CallbackMode,Arg}) -> ets:new(?MODULE, [named_table,private]), ets:insert(?MODULE, {callback_mode,CallbackMode}), init(Arg); -init({map_statem,#{init := Init}=Machine}) -> +init({map_statem,#{init := Init}=Machine,Modes}) -> ets:new(?MODULE, [named_table,private]), - ets:insert(?MODULE, {callback_mode,handle_event_function}), + ets:insert(?MODULE, {callback_mode,[handle_event_function|Modes]}), case Init() of {ok,State,Data,Ops} -> {ok,State,[Data|Machine],Ops}; diff --git a/lib/stdlib/test/ms_transform_SUITE.erl b/lib/stdlib/test/ms_transform_SUITE.erl index 1c5faa960b..f35013b1b2 100644 --- a/lib/stdlib/test/ms_transform_SUITE.erl +++ b/lib/stdlib/test/ms_transform_SUITE.erl @@ -296,6 +296,8 @@ basic_dbg(Config) when is_list(Config) -> compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> bindings() end)">>), [{['$1','$2'],[],['$_']}] = compile_and_run(<<"dbg:fun2ms(fun([A,B]) -> object() end)">>), + [{[],[],[{return_trace}]}] = + compile_and_run(<<"dbg:fun2ms(fun([]) -> return_trace() end)">>), ok. %% Test calling of ets/dbg:fun2ms from the shell. diff --git a/lib/stdlib/test/rand_SUITE.erl b/lib/stdlib/test/rand_SUITE.erl index cb778c96d4..02b7cb10c2 100644 --- a/lib/stdlib/test/rand_SUITE.erl +++ b/lib/stdlib/test/rand_SUITE.erl @@ -18,7 +18,11 @@ %% %CopyrightEnd% -module(rand_SUITE). --export([all/0, suite/0,groups/0]). +-compile({nowarn_deprecated_function,[{random,seed,1}, + {random,uniform_s,1}, + {random,uniform_s,2}]}). + +-export([all/0, suite/0, groups/0, group/1]). -export([interval_int/1, interval_float/1, seed/1, api_eq/1, reference/1, @@ -47,18 +51,22 @@ groups() -> [{basic_stats, [parallel], [basic_stats_uniform_1, basic_stats_uniform_2, basic_stats_normal]}]. +group(basic_stats) -> + %% valgrind needs a lot of time + [{timetrap,{minutes,10}}]. + %% A simple helper to test without test_server during dev test() -> Tests = all(), lists:foreach(fun(Test) -> - try - ok = ?MODULE:Test([]), - io:format("~p: ok~n", [Test]) - catch _:Reason -> - io:format("Failed: ~p: ~p ~p~n", - [Test, Reason, erlang:get_stacktrace()]) - end - end, Tests). + try + ok = ?MODULE:Test([]), + io:format("~p: ok~n", [Test]) + catch _:Reason -> + io:format("Failed: ~p: ~p ~p~n", + [Test, Reason, erlang:get_stacktrace()]) + end + end, Tests). algs() -> [exs64, exsplus, exs1024]. diff --git a/lib/tools/emacs/Makefile b/lib/tools/emacs/Makefile index e1b195ef97..35c93ba4ed 100644 --- a/lib/tools/emacs/Makefile +++ b/lib/tools/emacs/Makefile @@ -38,6 +38,7 @@ MAN_FILES= \ tags.3 EMACS_FILES= \ + erldoc \ erlang-skels \ erlang-skels-old \ erlang_appwiz \ diff --git a/lib/tools/emacs/erlang-skels.el b/lib/tools/emacs/erlang-skels.el index 0284c9d686..eeba7f34e9 100644 --- a/lib/tools/emacs/erlang-skels.el +++ b/lib/tools/emacs/erlang-skels.el @@ -904,7 +904,7 @@ Please see the function `tempo-define-template'.") "%% @doc" n "%% Define the callback_mode() for this callback module." n (erlang-skel-separator-end 2) - "-spec callback_mode() -> gen_statem:callback_mode()." n + "-spec callback_mode() -> gen_statem:callback_mode_result()." n "callback_mode() -> state_functions." n n (erlang-skel-separator-start 2) @@ -931,14 +931,16 @@ Please see the function `tempo-define-template'.") "%% Whenever a gen_statem receives an event, the function " n "%% with the name of the current state (StateName) " n "%% is called to handle the event." n - "%%" n - "%% NOTE: If there is an exported function handle_event/4, it is called" n - "%% instead of StateName/3 functions like this!" n (erlang-skel-separator-end 2) - "-spec state_name(" n> - "gen_statem:event_type(), Msg :: term()," n> + "-spec state_name('enter'," n> + "OldState :: atom()," n> + "Data :: term()) ->" n> + "gen_statem:state_enter_result('state_name');" n> + "(gen_statem:event_type()," n> + "Msg :: term()," n> "Data :: term()) ->" n> - "gen_statem:state_function_result()." n + "gen_statem:event_handler_result(atom())." n + ;; "state_name({call,Caller}, _Msg, Data) ->" n> "{next_state, state_name, Data, [{reply,Caller,ok}]}." n n @@ -1015,7 +1017,7 @@ Please see the function `tempo-define-template'.") "%% @doc" n "%% Define the callback_mode() for this callback module." n (erlang-skel-separator-end 2) - "-spec callback_mode() -> gen_statem:callback_mode()." n + "-spec callback_mode() -> gen_statem:callback_mode_result()." n "callback_mode() -> handle_event_function." n n (erlang-skel-separator-start 2) @@ -1039,14 +1041,18 @@ Please see the function `tempo-define-template'.") "%% @private" n "%% @doc" n "%% This function is called for every event a gen_statem receives." n - "%%" n - "%% NOTE: If there is no exported function handle_event/4," n - "%% StateName/3 functions are called instead!" n (erlang-skel-separator-end 2) - "-spec handle_event(" n> - "gen_statem:event_type(), Msg :: term()," n> - "State :: term(), Data :: term()) ->" n> - "gen_statem:handle_event_result()." n + "-spec handle_event('enter'," n> + "OldState :: term()," n> + "State :: term()," n> + "Data :: term()) ->" n> + "gen_statem:state_enter_result(term());" n> + "(gen_statem:event_type()," n> + "Msg :: term()," n> + "State :: term()," n> + "Data :: term()) ->" n> + "gen_statem:event_handler_result(term())." n + ;; "handle_event({call,From}, _Msg, State, Data) ->" n> "{next_state, State, Data, [{reply,From,ok}]}." n n diff --git a/lib/tools/emacs/erlang-start.el b/lib/tools/emacs/erlang-start.el index f9a6d24b2c..160057e179 100644 --- a/lib/tools/emacs/erlang-start.el +++ b/lib/tools/emacs/erlang-start.el @@ -78,9 +78,23 @@ (autoload 'erlang-find-tag-other-window "erlang" "Like `find-tag-other-window'. Capable of retreiving Erlang modules.") +;; +;; Declare functions in "erlang-edoc.el". +;; + (autoload 'erlang-edoc-mode "erlang-edoc" "Toggle Erlang-Edoc mode on or off." t) ;; +;; Declare functions in "erldoc.el". +;; + +(autoload 'erldoc-browse "erldoc" "\n\n(fn MFA)" t nil) +(autoload 'erldoc-browse-topic "erldoc" "\n\n(fn TOPIC)" t nil) +(autoload 'erldoc-apropos "erldoc" "\n\n(fn PATTERN)" t nil) +(autoload 'erldoc-eldoc-function "erldoc" "\ +A function suitable for `eldoc-documentation-function'.\n\n(fn)" nil nil) + +;; ;; Associate files extensions ".erl" and ".hrl" with Erlang mode. ;; diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el index 67e88bac30..40f0bb7f80 100644 --- a/lib/tools/emacs/erlang.el +++ b/lib/tools/emacs/erlang.el @@ -59,7 +59,7 @@ ;; Please state as exactly as possible: ;; - Version number of Erlang Mode (see the menu), Emacs, Erlang, -;; and of any other relevant software. +;; and of any other relevant software. ;; - What the expected result was. ;; - What you did, preferably in a repeatable step-by-step form. ;; - A description of the unexpected result. @@ -95,20 +95,20 @@ Erlang mode menu.") (eval-and-compile (defconst erlang-emacs-major-version (if (boundp 'emacs-major-version) - emacs-major-version + emacs-major-version (string-match "\\([0-9]+\\)\\.\\([0-9]+\\)" emacs-version) (erlang-string-to-int (substring emacs-version - (match-beginning 1) (match-end 1)))) + (match-beginning 1) (match-end 1)))) "Major version number of Emacs.")) (eval-and-compile (defconst erlang-emacs-minor-version - (if (boundp 'emacs-minor-version) - emacs-minor-version - (string-match "\\([0-9]+\\)\\.\\([0-9]+\\)" emacs-version) - (erlang-string-to-int (substring emacs-version - (match-beginning 2) (match-end 2)))) - "Minor version number of Emacs.")) + (if (boundp 'emacs-minor-version) + emacs-minor-version + (string-match "\\([0-9]+\\)\\.\\([0-9]+\\)" emacs-version) + (erlang-string-to-int (substring emacs-version + (match-beginning 2) (match-end 2)))) + "Minor version number of Emacs.")) (defconst erlang-xemacs-p (string-match "Lucid\\|XEmacs" emacs-version) "Non-nil when running under XEmacs or Lucid Emacs.") @@ -123,12 +123,12 @@ buffers in Erlang mode, just like under GNU Emacs. Never EVER set this variable!") (defvar erlang-menu-items '(erlang-menu-base-items - erlang-menu-skel-items - erlang-menu-shell-items - erlang-menu-compile-items - erlang-menu-man-items - erlang-menu-personal-items - erlang-menu-version-items) + erlang-menu-skel-items + erlang-menu-shell-items + erlang-menu-compile-items + erlang-menu-man-items + erlang-menu-personal-items + erlang-menu-version-items) "*List of menu item list to combine to create Erlang mode menu. External programs which temporarily add menu items to the Erlang mode @@ -174,7 +174,7 @@ variable.") ("TAGS" (("Find Tag" find-tag) ("Find Next Tag" erlang-find-next-tag) - ;("Find Regexp" find-tag-regexp) + ;("Find Regexp" find-tag-regexp) ("Complete Word" erlang-complete-tag) ("Tags Apropos" tags-apropos) ("Search Files" tags-search)))) @@ -562,35 +562,35 @@ This is an elisp list of options. Each option can be either: Supporting \_< and \_> This is determined by checking the version of Emacs used.")) (eval-and-compile - (defconst erlang-atom-quoted-regexp + (defconst erlang-atom-quoted-regexp "'\\(?:[^\\']\\|\\(?:\\\\.\\)\\)*'" "Regexp describing a single-quoted atom")) (eval-and-compile (defconst erlang-atom-regular-regexp (if erlang-regexp-modern-p - "\\_<[[:lower:]]\\(?:\\sw\\|\\s_\\)*\\_>" + "\\_<[[:lower:]]\\(?:\\sw\\|\\s_\\)*\\_>" "\\<[[:lower:]]\\(?:\\sw\\|\\s_\\)*\\>") "Regexp describing a regular (non-quoted) atom")) (eval-and-compile - (defconst erlang-atom-regexp - (concat "\\(" erlang-atom-quoted-regexp "\\|" - erlang-atom-regular-regexp "\\)") + (defconst erlang-atom-regexp + (concat "\\(" erlang-atom-quoted-regexp "\\|" + erlang-atom-regular-regexp "\\)") "Regexp describing an Erlang atom.")) (eval-and-compile (defconst erlang-atom-regexp-matches 1 "Number of regexp parenthesis pairs in `erlang-atom-regexp'. - + This is used to determine parenthesis matches in complex regexps which contains `erlang-atom-regexp'.")) (eval-and-compile - (defconst erlang-variable-regexp - (if erlang-regexp-modern-p - "\\_<\\([[:upper:]_]\\(?:\\sw\\|\\s_\\)*\\)\\_>" + (defconst erlang-variable-regexp + (if erlang-regexp-modern-p + "\\_<\\([[:upper:]_]\\(?:\\sw\\|\\s_\\)*\\)\\_>" "\\<\\([[:upper:]_]\\(?:\\sw\\|\\s_\\)*\\)\\>") "Regexp which should match an Erlang variable. @@ -609,13 +609,13 @@ This is used to determine matches in complex regexps which contains "Like `regexp-opt', except if PAREN is `symbols', then the resulting regexp is surrounded by \\_< and \\_>." (if (eq paren 'symbols) - (if erlang-regexp-modern-p - (concat "\\_<" (regexp-opt strings t) "\\_>") - (concat "\\<" (regexp-opt strings t) "\\>")) + (if erlang-regexp-modern-p + (concat "\\_<" (regexp-opt strings t) "\\_>") + (concat "\\<" (regexp-opt strings t) "\\>")) (regexp-opt strings paren)))) -(eval-and-compile +(eval-and-compile (defvar erlang-keywords '("after" "begin" @@ -634,7 +634,7 @@ resulting regexp is surrounded by \\_< and \\_>." (eval-and-compile (defconst erlang-keywords-regexp (erlang-regexp-opt erlang-keywords 'symbols))) - + (eval-and-compile (defvar erlang-operators '("and" @@ -657,7 +657,7 @@ resulting regexp is surrounded by \\_< and \\_>." (eval-and-compile (defconst erlang-operators-regexp (erlang-regexp-opt erlang-operators 'symbols))) - + (eval-and-compile (defvar erlang-guards @@ -680,7 +680,7 @@ resulting regexp is surrounded by \\_< and \\_>." "binary" "bitstring" "boolean" - ;;"float" ; Not included to avoid clashes with the bif float/1 + ;;"float" ; Not included to avoid clashes with the bif float/1 "function" "integer" "list" @@ -726,7 +726,7 @@ resulting regexp is surrounded by \\_< and \\_>." "Erlang type specs types")) (eval-and-compile - (defconst erlang-predefined-types-regexp + (defconst erlang-predefined-types-regexp (erlang-regexp-opt erlang-predefined-types 'symbols))) @@ -846,7 +846,7 @@ resulting regexp is surrounded by \\_< and \\_>." (eval-and-compile (defconst erlang-int-bif-regexp (erlang-regexp-opt erlang-int-bifs 'symbols))) - + (eval-and-compile (defvar erlang-ext-bifs @@ -1001,8 +1001,8 @@ behaviour.") (let ((map (make-sparse-keymap))) (unless (boundp 'indent-line-function) (define-key map "\t" 'erlang-indent-command)) - (define-key map ";" 'erlang-electric-semicolon) - (define-key map "," 'erlang-electric-comma) + (define-key map ";" 'erlang-electric-semicolon) + (define-key map "," 'erlang-electric-comma) (define-key map "<" 'erlang-electric-lt) (define-key map ">" 'erlang-electric-gt) (define-key map "\C-m" 'erlang-electric-newline) @@ -1014,7 +1014,7 @@ behaviour.") (unless (boundp 'beginning-of-defun-function) (define-key map "\M-\C-a" 'erlang-beginning-of-function) (define-key map "\M-\C-e" 'erlang-end-of-function) - (define-key map '(meta control h) 'erlang-mark-function)) ; Xemacs + (define-key map '(meta control h) 'erlang-mark-function)) ; Xemacs (define-key map "\M-\t" 'erlang-complete-tag) (define-key map "\C-c\M-\t" 'tempo-complete-tag) (define-key map "\M-+" 'erlang-find-next-tag) @@ -1068,7 +1068,7 @@ behaviour.") (defvar erlang-font-lock-keywords-function-header (list (list (concat "^" erlang-atom-regexp "\\s-*(") - 1 'font-lock-function-name-face t)) + 1 'font-lock-function-name-face t)) "Font lock keyword highlighting a function header.") (defface erlang-font-lock-exported-function-name-face @@ -1090,7 +1090,7 @@ behaviour.") (defvar erlang-font-lock-keywords-exported-function-header (list (list #'erlang-match-next-exported-function - 1 'erlang-font-lock-exported-function-name-face t)) + 1 'erlang-font-lock-exported-function-name-face t)) "Font lock keyword highlighting an exported function header.") (defvar erlang-font-lock-keywords-int-bifs @@ -1102,8 +1102,8 @@ behaviour.") (defvar erlang-font-lock-keywords-ext-bifs (list (list (concat "\\<\\(erlang\\)\\s-*:\\s-*" erlang-ext-bif-regexp "\\s-*(") - '(1 'font-lock-builtin-face) - '(2 'font-lock-builtin-face))) + '(1 'font-lock-builtin-face) + '(2 'font-lock-builtin-face))) "Font lock keyword highlighting built in functions.") (defvar erlang-font-lock-keywords-int-function-calls @@ -1117,7 +1117,7 @@ behaviour.") (list (concat erlang-atom-regexp "\\s-*:\\s-*" erlang-atom-regexp "\\s-*(") '(1 'font-lock-type-face) - '(2 'font-lock-type-face))) + '(2 'font-lock-type-face))) "Font lock keyword highlighting an external function call.") (defvar erlang-font-lock-keywords-fun-n @@ -1135,7 +1135,7 @@ behaviour.") (defvar erlang-font-lock-keywords-dollar (list (list "\\(\\$\\([^\\]\\|\\\\\\([^0-7^\n]\\|[0-7]+\\|\\^[a-zA-Z]\\)\\)\\)" - 1 'font-lock-constant-face)) + 1 'font-lock-constant-face)) "Font lock keyword highlighting numbers in ASCII form (e.g. $A).") (defvar erlang-font-lock-keywords-arrow @@ -1155,18 +1155,18 @@ behaviour.") (defvar erlang-font-lock-keywords-attr (list - (list (concat "^\\(-" erlang-atom-regexp "\\)\\(\\s-\\|\\.\\|(\\)") - 1 (if (boundp 'font-lock-preprocessor-face) - 'font-lock-preprocessor-face - 'font-lock-constant-face))) + (list (concat "^\\(-" erlang-atom-regexp "\\)\\(\\s-\\|\\.\\|(\\)") + 1 (if (boundp 'font-lock-preprocessor-face) + 'font-lock-preprocessor-face + 'font-lock-constant-face))) "Font lock keyword highlighting attributes.") (defvar erlang-font-lock-keywords-quotes (list (list "`\\([-+a-zA-Z0-9_:*][-+a-zA-Z0-9_:*]+\\)'" - 1 - 'font-lock-keyword-face - t)) + 1 + 'font-lock-keyword-face + t)) "Font lock keyword highlighting words in single quotes in comments. This is not the highlighting of Erlang strings and atoms, which @@ -1175,27 +1175,27 @@ are highlighted by syntactic analysis.") (defvar erlang-font-lock-keywords-guards (list (list (concat "[^:]" erlang-guards-regexp "\\s-*(") - 1 'font-lock-builtin-face)) + 1 'font-lock-builtin-face)) "Font lock keyword highlighting guards.") (defvar erlang-font-lock-keywords-predefined-types (list (list (concat "[^:]" erlang-predefined-types-regexp "\\s-*(") - 1 'font-lock-builtin-face)) + 1 'font-lock-builtin-face)) "Font lock keyword highlighting predefined types.") (defvar erlang-font-lock-keywords-macros (list (list (concat "?\\s-*\\(" erlang-atom-regexp - "\\|" erlang-variable-regexp "\\)") - 1 'font-lock-constant-face) + "\\|" erlang-variable-regexp "\\)") + 1 'font-lock-constant-face) (list (concat "^\\(-\\(?:define\\|ifn?def\\)\\)\\s-*(\\s-*\\(" erlang-atom-regexp - "\\|" erlang-variable-regexp "\\)") - (if (boundp 'font-lock-preprocessor-face) - (list 1 'font-lock-preprocessor-face t) - (list 1 'font-lock-constant-face t)) - (list 3 'font-lock-type-face t t)) + "\\|" erlang-variable-regexp "\\)") + (if (boundp 'font-lock-preprocessor-face) + (list 1 'font-lock-preprocessor-face t) + (list 1 'font-lock-constant-face t)) + (list 3 'font-lock-type-face t t)) (list "^-e\\(lse\\|ndif\\)\\>" 0 'font-lock-preprocessor-face t)) "Font lock keyword highlighting macros. This must be placed in front of `erlang-font-lock-keywords-vars'.") @@ -1206,8 +1206,8 @@ This must be placed in front of `erlang-font-lock-keywords-vars'.") 1 'font-lock-type-face) ;; Don't highlight numerical constants. (list (if erlang-regexp-modern-p - "\\_<[0-9]+#\\([0-9a-zA-Z]+\\)" - "\\<[0-9]+#\\([0-9a-zA-Z]+\\)") + "\\_<[0-9]+#\\([0-9a-zA-Z]+\\)" + "\\<[0-9]+#\\([0-9a-zA-Z]+\\)") 1 nil t) (list (concat "^-record\\s-*(\\s-*" erlang-atom-regexp) 1 'font-lock-type-face)) @@ -1216,8 +1216,8 @@ This must be placed in front of `erlang-font-lock-keywords-vars'.") (defvar erlang-font-lock-keywords-vars (list - (list (concat "[^#]" erlang-variable-regexp) ; no numerical constants - 1 'font-lock-variable-name-face)) + (list (concat "[^#]" erlang-variable-regexp) ; no numerical constants + 1 'font-lock-variable-name-face)) "Font lock keyword highlighting Erlang variables. Must be preceded by `erlang-font-lock-keywords-macros' to work properly.") @@ -1240,32 +1240,32 @@ Example: (defvar erlang-font-lock-keywords-1 (append erlang-font-lock-keywords-function-header - erlang-font-lock-keywords-dollar - erlang-font-lock-keywords-arrow - erlang-font-lock-keywords-keywords - ) + erlang-font-lock-keywords-dollar + erlang-font-lock-keywords-arrow + erlang-font-lock-keywords-keywords + ) ;; DocStringOrig: erlang-font-lock-keywords erlang-font-lock-descr-string) (defvar erlang-font-lock-keywords-2 (append erlang-font-lock-keywords-1 - erlang-font-lock-keywords-int-bifs - erlang-font-lock-keywords-ext-bifs - erlang-font-lock-keywords-attr - erlang-font-lock-keywords-quotes - erlang-font-lock-keywords-guards - ) + erlang-font-lock-keywords-int-bifs + erlang-font-lock-keywords-ext-bifs + erlang-font-lock-keywords-attr + erlang-font-lock-keywords-quotes + erlang-font-lock-keywords-guards + ) ;; DocStringCopy: erlang-font-lock-keywords erlang-font-lock-descr-string) (defvar erlang-font-lock-keywords-3 (append erlang-font-lock-keywords-2 - erlang-font-lock-keywords-operators - erlang-font-lock-keywords-macros - erlang-font-lock-keywords-records - erlang-font-lock-keywords-vars - erlang-font-lock-keywords-predefined-types - ) + erlang-font-lock-keywords-operators + erlang-font-lock-keywords-macros + erlang-font-lock-keywords-records + erlang-font-lock-keywords-vars + erlang-font-lock-keywords-predefined-types + ) ;; DocStringCopy: erlang-font-lock-keywords erlang-font-lock-descr-string) @@ -1273,10 +1273,10 @@ Example: (append erlang-font-lock-keywords-3 erlang-font-lock-keywords-exported-function-header erlang-font-lock-keywords-int-function-calls - erlang-font-lock-keywords-ext-function-calls - erlang-font-lock-keywords-fun-n + erlang-font-lock-keywords-ext-function-calls + erlang-font-lock-keywords-fun-n erlang-font-lock-keywords-lc - ) + ) ;; DocStringCopy: erlang-font-lock-keywords erlang-font-lock-descr-string) @@ -1337,17 +1337,17 @@ replaced by `erlang-etags-tags-completion-table'.") (eval-when-compile (if (or (featurep 'bytecomp) - (featurep 'byte-compile)) + (featurep 'byte-compile)) (progn - (cond ((string-match "Lucid\\|XEmacs" emacs-version) - (put 'comment-indent-hook 'byte-obsolete-variable nil) - ;; Do not warn for unused variables - ;; when compiling under XEmacs. - (setq byte-compile-warnings - '(free-vars unresolved callargs redefine)))) - (require 'comint) - (require 'tempo) - (require 'compile)))) + (cond ((string-match "Lucid\\|XEmacs" emacs-version) + (put 'comment-indent-hook 'byte-obsolete-variable nil) + ;; Do not warn for unused variables + ;; when compiling under XEmacs. + (setq byte-compile-warnings + '(free-vars unresolved callargs redefine)))) + (require 'comint) + (require 'tempo) + (require 'compile)))) (defun erlang-version () @@ -1355,7 +1355,7 @@ replaced by `erlang-etags-tags-completion-table'.") (interactive) (if (erlang-interactive-p) (message "Erlang mode version %s, written by Anders Lindgren" - erlang-version)) + erlang-version)) erlang-version) (defun erlang-interactive-p () @@ -1393,7 +1393,7 @@ useful commands: C-c C-q - Indent current function. M-; - Create a comment at the end of the line. M-q - Fill a comment, i.e. wrap lines so that they (hopefully) - will look better. + will look better. M-a - Goto the beginning of an Erlang clause. M-C-a - Ditto for function. M-e - Goto the end of an Erlang clause. @@ -1440,6 +1440,11 @@ Other commands: (erlang-skel-init) (when (fboundp 'tempo-use-tag-list) (tempo-use-tag-list 'erlang-tempo-tags)) + (when (and (fboundp 'add-function) (fboundp 'erldoc-eldoc-function)) + (or eldoc-documentation-function + (setq-local eldoc-documentation-function #'ignore)) + (add-function :before-until (local 'eldoc-documentation-function) + #'erldoc-eldoc-function)) (run-hooks 'erlang-mode-hook) (if (zerop (buffer-size)) (run-hooks 'erlang-new-file-hook))) @@ -1452,35 +1457,35 @@ Other commands: (defun erlang-syntax-table-init () (if (null erlang-mode-syntax-table) (let ((table (make-syntax-table))) - (modify-syntax-entry ?\n ">" table) - (modify-syntax-entry ?\" "\"" table) - (modify-syntax-entry ?# "." table) -;; (modify-syntax-entry ?$ "\\" table) ;; Creates problems with indention afterwards -;; (modify-syntax-entry ?$ "'" table) ;; Creates syntax highlighting and indention problems - (modify-syntax-entry ?$ "/" table) ;; Misses the corner case "string that ends with $" - ;; we have to live with that for now..it is the best alternative - ;; that can be worked around with "string hat ends with \$" - (modify-syntax-entry ?% "<" table) - (modify-syntax-entry ?& "." table) - (modify-syntax-entry ?\' "\"" table) - (modify-syntax-entry ?* "." table) - (modify-syntax-entry ?+ "." table) - (modify-syntax-entry ?- "." table) - (modify-syntax-entry ?/ "." table) - (modify-syntax-entry ?: "." table) - (modify-syntax-entry ?< "." table) - (modify-syntax-entry ?= "." table) - (modify-syntax-entry ?> "." table) - (modify-syntax-entry ?\\ "\\" table) - (modify-syntax-entry ?_ "_" table) - (modify-syntax-entry ?| "." table) - (modify-syntax-entry ?^ "'" table) - - ;; Pseudo bit-syntax: Latin1 double angle quotes as parens. - ;;(modify-syntax-entry ?\253 "(?\273" table) - ;;(modify-syntax-entry ?\273 ")?\253" table) - - (setq erlang-mode-syntax-table table))) + (modify-syntax-entry ?\n ">" table) + (modify-syntax-entry ?\" "\"" table) + (modify-syntax-entry ?# "." table) + ;; (modify-syntax-entry ?$ "\\" table) ;; Creates problems with indention afterwards + ;; (modify-syntax-entry ?$ "'" table) ;; Creates syntax highlighting and indention problems + (modify-syntax-entry ?$ "/" table) ;; Misses the corner case "string that ends with $" + ;; we have to live with that for now..it is the best alternative + ;; that can be worked around with "string hat ends with \$" + (modify-syntax-entry ?% "<" table) + (modify-syntax-entry ?& "." table) + (modify-syntax-entry ?\' "\"" table) + (modify-syntax-entry ?* "." table) + (modify-syntax-entry ?+ "." table) + (modify-syntax-entry ?- "." table) + (modify-syntax-entry ?/ "." table) + (modify-syntax-entry ?: "." table) + (modify-syntax-entry ?< "." table) + (modify-syntax-entry ?= "." table) + (modify-syntax-entry ?> "." table) + (modify-syntax-entry ?\\ "\\" table) + (modify-syntax-entry ?_ "_" table) + (modify-syntax-entry ?| "." table) + (modify-syntax-entry ?^ "'" table) + + ;; Pseudo bit-syntax: Latin1 double angle quotes as parens. + ;;(modify-syntax-entry ?\253 "(?\273" table) + ;;(modify-syntax-entry ?\273 ")?\253" table) + + (setq erlang-mode-syntax-table table))) (set-syntax-table erlang-mode-syntax-table)) @@ -1490,12 +1495,12 @@ Other commands: ;; delsel/pending-del mode. Also, set up text properties for bit ;; syntax handling. (mapc #'(lambda (cmd) - (put cmd 'delete-selection t) ;for delsel (Emacs) - (put cmd 'pending-delete t)) ;for pending-del (XEmacs) - '(erlang-electric-semicolon - erlang-electric-comma - erlang-electric-gt)) - + (put cmd 'delete-selection t) ;for delsel (Emacs) + (put cmd 'pending-delete t)) ;for pending-del (XEmacs) + '(erlang-electric-semicolon + erlang-electric-comma + erlang-electric-gt)) + (put 'bitsyntax-open-outer 'syntax-table '(4 . ?>)) (put 'bitsyntax-open-outer 'rear-nonsticky '(category)) (put 'bitsyntax-open-inner 'rear-nonsticky '(category)) @@ -1554,9 +1559,9 @@ Other commands: "Initialize Font Lock for Erlang mode." (or erlang-font-lock-syntax-table (setq erlang-font-lock-syntax-table - (let ((table (copy-syntax-table erlang-mode-syntax-table))) - (modify-syntax-entry ?_ "w" table) - table))) + (let ((table (copy-syntax-table erlang-mode-syntax-table))) + (modify-syntax-entry ?_ "w" table) + table))) (set (make-local-variable 'font-lock-syntax-table) erlang-font-lock-syntax-table) (set (make-local-variable (if (boundp 'syntax-begin-function) @@ -1565,23 +1570,23 @@ Other commands: 'erlang-beginning-of-clause) (make-local-variable 'font-lock-keywords) (let ((level (cond ((boundp 'font-lock-maximum-decoration) - (symbol-value 'font-lock-maximum-decoration)) - ((boundp 'font-lock-use-maximal-decoration) - (symbol-value 'font-lock-use-maximal-decoration)) - (t nil)))) + (symbol-value 'font-lock-maximum-decoration)) + ((boundp 'font-lock-use-maximal-decoration) + (symbol-value 'font-lock-use-maximal-decoration)) + (t nil)))) (if (consp level) - (setq level (cdr-safe (or (assq 'erlang-mode level) - (assq t level))))) + (setq level (cdr-safe (or (assq 'erlang-mode level) + (assq t level))))) ;; `level' can here be: ;; A number - The fontification level ;; nil - Use the default ;; t - Use maximum (cond ((eq level nil) - (set 'font-lock-keywords erlang-font-lock-keywords)) - ((eq level 1) - (set 'font-lock-keywords erlang-font-lock-keywords-1)) - ((eq level 2) - (set 'font-lock-keywords erlang-font-lock-keywords-2)) + (set 'font-lock-keywords erlang-font-lock-keywords)) + ((eq level 1) + (set 'font-lock-keywords erlang-font-lock-keywords-1)) + ((eq level 2) + (set 'font-lock-keywords erlang-font-lock-keywords-2)) ((eq level 3) (set 'font-lock-keywords erlang-font-lock-keywords-3)) (t @@ -1590,11 +1595,11 @@ Other commands: ;; Modern font-locks can handle the above much more elegantly: (set (make-local-variable 'font-lock-defaults) '((erlang-font-lock-keywords erlang-font-lock-keywords-1 - erlang-font-lock-keywords-2 - erlang-font-lock-keywords-3 - erlang-font-lock-keywords-4) - nil nil ((?_ . "w")) erlang-beginning-of-clause - (font-lock-mark-block-function . erlang-mark-clause) + erlang-font-lock-keywords-2 + erlang-font-lock-keywords-3 + erlang-font-lock-keywords-4) + nil nil ((?_ . "w")) erlang-beginning-of-clause + (font-lock-mark-block-function . erlang-mark-clause) (font-lock-syntactic-keywords ;; A dollar sign right before the double quote that ends a ;; string is not a character escape. @@ -1608,8 +1613,8 @@ Other commands: ;; know whether matching started inside a string: limiting ;; search to a single line keeps things sane. . (("\\(?:^\\|[^$]\\)\"\\(?:[^\"\n]\\|\\\\\"\\)*\\(\\$\\)\"" 1 "w") - ;; Likewise for atoms - ("\\(?:^\\|[^$]\\)'\\(?:[^'\n]\\|\\\\'\\)*\\(\\$\\)'" 1 "w") + ;; Likewise for atoms + ("\\(?:^\\|[^$]\\)'\\(?:[^'\n]\\|\\\\'\\)*\\(\\$\\)'" 1 "w") ;; And the dollar sign in $\" or $\' escapes two ;; characters, not just one. ("\\(\\$\\)\\\\[\"']" 1 "'")))))) @@ -1655,17 +1660,17 @@ For a more elaborate example, please see the beginning of the file (let ((res '())) (while ks (let* ((regexp (car (car ks))) - (number (car (cdr (car ks)))) - (new-face (if (and faces (car faces)) - (car faces) - (car (cdr (cdr (car ks)))))) - (overwrite (car (cdr (cdr (cdr (car ks)))))) - (new-keyword (list regexp number new-face))) - (if overwrite (nconc new-keyword (list overwrite))) - (setq res (cons new-keyword res)) - (setq ks (cdr ks)) - (if (and faces (cdr faces)) - (setq faces (cdr faces))))) + (number (car (cdr (car ks)))) + (new-face (if (and faces (car faces)) + (car faces) + (car (cdr (cdr (car ks)))))) + (overwrite (car (cdr (cdr (cdr (car ks)))))) + (new-keyword (list regexp number new-face))) + (if overwrite (nconc new-keyword (list overwrite))) + (setq res (cons new-keyword res)) + (setq ks (cdr ks)) + (if (and faces (cdr faces)) + (setq faces (cdr faces))))) (nreverse res))) @@ -1757,57 +1762,57 @@ variable, i.e. it will popup when pressing the right mouse button. Please see the variable `erlang-menu-base-items'." (cond (erlang-xemacs-p - (let ((menu (erlang-menu-xemacs name items keymap))) - ;; We add the menu to the global menubar. - ;;(funcall (symbol-function 'set-buffer-menubar) - ;; (symbol-value 'current-menubar)) - (funcall (symbol-function 'add-submenu) nil menu) - (setcdr erlang-xemacs-popup-menu (cdr menu)) - (if (and popup (boundp 'mode-popup-menu)) - (funcall (symbol-function 'set) - 'mode-popup-menu erlang-xemacs-popup-menu)))) - ((>= erlang-emacs-major-version 19) - (define-key keymap (vector 'menu-bar (intern name)) - (erlang-menu-make-keymap name items))) - (t nil))) + (let ((menu (erlang-menu-xemacs name items keymap))) + ;; We add the menu to the global menubar. + ;;(funcall (symbol-function 'set-buffer-menubar) + ;; (symbol-value 'current-menubar)) + (funcall (symbol-function 'add-submenu) nil menu) + (setcdr erlang-xemacs-popup-menu (cdr menu)) + (if (and popup (boundp 'mode-popup-menu)) + (funcall (symbol-function 'set) + 'mode-popup-menu erlang-xemacs-popup-menu)))) + ((>= erlang-emacs-major-version 19) + (define-key keymap (vector 'menu-bar (intern name)) + (erlang-menu-make-keymap name items))) + (t nil))) (defun erlang-menu-make-keymap (name items) "Build a menu for Emacs 19." (let ((menumap (funcall (symbol-function 'make-sparse-keymap) - name)) - (count 0) - id def first second third) + name)) + (count 0) + id def first second third) (setq items (reverse items)) (while items ;; Replace any occurrence of atoms by their value. (while (and items (atom (car items)) (not (null (car items)))) - (if (and (boundp (car items)) - (listp (symbol-value (car items)))) - (setq items (append (reverse (symbol-value (car items))) - (cdr items))) - (setq items (cdr items)))) + (if (and (boundp (car items)) + (listp (symbol-value (car items)))) + (setq items (append (reverse (symbol-value (car items))) + (cdr items))) + (setq items (cdr items)))) (setq first (car-safe (car items))) (setq second (car-safe (cdr-safe (car items)))) (setq third (car-safe (cdr-safe (cdr-safe (car items))))) (cond ((null first) - (setq count (+ count 1)) - (setq id (intern (format "separator-%d" count))) - (setq def '("--" . nil))) - ((and (consp second) (eq (car second) 'lambda)) - (setq count (+ count 1)) - (setq id (intern (format "lambda-%d" count))) - (setq def (cons first second))) - ((symbolp second) - (setq id second) - (setq def (cons first second))) - (t - (setq count (+ count 1)) - (setq id (intern (format "submenu-%d" count))) - (setq def (erlang-menu-make-keymap first second)))) + (setq count (+ count 1)) + (setq id (intern (format "separator-%d" count))) + (setq def '("--" . nil))) + ((and (consp second) (eq (car second) 'lambda)) + (setq count (+ count 1)) + (setq id (intern (format "lambda-%d" count))) + (setq def (cons first second))) + ((symbolp second) + (setq id second) + (setq def (cons first second))) + (t + (setq count (+ count 1)) + (setq id (intern (format "submenu-%d" count))) + (setq def (erlang-menu-make-keymap first second)))) (define-key menumap (vector id) def) (if third - (put id 'menu-enable third)) + (put id 'menu-enable third)) (setq items (cdr items))) (cons name menumap))) @@ -1815,30 +1820,30 @@ Please see the variable `erlang-menu-base-items'." (defun erlang-menu-xemacs (name items &optional keymap) "Build a menu for XEmacs." (let ((res '()) - first second third entry) + first second third entry) (while items ;; Replace any occurrence of atoms by their value. (while (and items (atom (car items)) (not (null (car items)))) - (if (and (boundp (car items)) - (listp (symbol-value (car items)))) - (setq items (append (reverse (symbol-value (car items))) - (cdr items))) - (setq items (cdr items)))) + (if (and (boundp (car items)) + (listp (symbol-value (car items)))) + (setq items (append (reverse (symbol-value (car items))) + (cdr items))) + (setq items (cdr items)))) (setq first (car-safe (car items))) (setq second (car-safe (cdr-safe (car items)))) (setq third (car-safe (cdr-safe (cdr-safe (car items))))) (cond ((null first) - (setq res (cons "------" res))) - ((symbolp second) - (setq res (cons (vector first second (or third t)) res))) - ((and (consp second) (eq (car second) 'lambda)) - (setq res (cons (vector first (list 'call-interactively second) - (or third t)) res))) - (t - (setq res (cons (cons first - (cdr (erlang-menu-xemacs - first second))) - res)))) + (setq res (cons "------" res))) + ((symbolp second) + (setq res (cons (vector first second (or third t)) res))) + ((and (consp second) (eq (car second) 'lambda)) + (setq res (cons (vector first (list 'call-interactively second) + (or third t)) res))) + (t + (setq res (cons (cons first + (cdr (erlang-menu-xemacs + first second))) + res)))) (setq items (cdr items))) (setq res (reverse res)) ;; When adding a menu to a minor-mode keymap under Emacs, @@ -1847,15 +1852,15 @@ Please see the variable `erlang-menu-base-items'." ;; (This could be expressed much clearer using backquotes, ;; but I don't want to pull in every package.) (if keymap - (let ((expr (list 'or - (list 'eq keymap 'global-map) - (list 'eq keymap (list 'current-local-map)) - (list 'symbol-value - (list 'car-safe - (list 'rassq - keymap - 'minor-mode-map-alist)))))) - (setq res (cons ':included (cons expr res))))) + (let ((expr (list 'or + (list 'eq keymap 'global-map) + (list 'eq keymap (list 'current-local-map)) + (list 'symbol-value + (list 'car-safe + (list 'rassq + keymap + 'minor-mode-map-alist)))))) + (setq res (cons ':included (cons expr res))))) (cons name res))) @@ -1870,13 +1875,13 @@ ALIST is list of pairs where the car is the old function and cdr the new." (setq first (car-safe (car items))) (setq second (car-safe (cdr-safe (car items)))) (cond ((null first)) - ((symbolp second) - (setq pair (and second (assq second alist))) - (if pair - (setcar (cdr (car items)) (cdr pair)))) - ((and (consp second) (eq (car second) 'lambda))) - (t - (erlang-menu-substitute second alist))) + ((symbolp second) + (setq pair (and second (assq second alist))) + (if pair + (setcar (cdr (car items)) (cdr pair)))) + ((and (consp second) (eq (car second) 'lambda))) + (t + (erlang-menu-substitute second alist))) (setq items (cdr items))))) @@ -1911,27 +1916,27 @@ Example: \(setq erlang-menu-items (erlang-menu-add-below 'my-erlang-menu-items - 'erlang-menu-base-items + 'erlang-menu-base-items erlang-menu-items))" (if (memq entry items) - items ; Return the original menu. + items ; Return the original menu. (let ((head '()) - (done nil) - res) + (done nil) + res) (while (not done) - (cond ((null items) - (setq res (append head (list entry))) - (setq done t)) - ((eq below (car items)) - (setq res - (if above-p - (append head (cons entry items)) - (append head (cons (car items) - (cons entry (cdr items)))))) - (setq done t)) - (t - (setq head (append head (list (car items)))) - (setq items (cdr items))))) + (cond ((null items) + (setq res (append head (list entry))) + (setq done t)) + ((eq below (car items)) + (setq res + (if above-p + (append head (cons entry items)) + (append head (cons (car items) + (cons entry (cdr items)))))) + (setq done t)) + (t + (setq head (append head (list (car items)))) + (setq items (cdr items))))) res))) (defun erlang-menu-delete (entry items) @@ -1952,16 +1957,16 @@ the location of the manual pages." (if erlang-man-inhibit () (setq erlang-menu-man-items - '(nil - ("Man - Function" erlang-man-function))) + '(nil + ("Man - Function" erlang-man-function))) (if erlang-man-dirs - (setq erlang-menu-man-items - (append erlang-menu-man-items - (erlang-man-make-top-menu erlang-man-dirs)))) + (setq erlang-menu-man-items + (append erlang-menu-man-items + (erlang-man-make-top-menu erlang-man-dirs)))) (setq erlang-menu-items - (erlang-menu-add-above 'erlang-menu-man-items - 'erlang-menu-version-items - erlang-menu-items)) + (erlang-menu-add-above 'erlang-menu-man-items + 'erlang-menu-version-items + erlang-menu-items)) (erlang-menu-init))) @@ -1969,7 +1974,7 @@ the location of the manual pages." "Remove the man pages from the Erlang mode." (interactive) (setq erlang-menu-items - (erlang-menu-delete 'erlang-menu-man-items erlang-menu-items)) + (erlang-menu-delete 'erlang-menu-man-items erlang-menu-items)) (erlang-menu-init)) @@ -1983,28 +1988,28 @@ the location of the manual pages." "Create one menu entry per element of DIR-LIST. The format is described in the documentation of `erlang-man-dirs'." (let ((menu '()) - dir) + dir) (while dir-list (setq dir (cond ((nth 2 (car dir-list)) - ;; Relative to `erlang-root-dir'. - (and (stringp erlang-root-dir) - (concat erlang-root-dir (nth 1 (car dir-list))))) - (t - ;; Absolute - (nth 1 (car dir-list))))) + ;; Relative to `erlang-root-dir'. + (and (stringp erlang-root-dir) + (concat erlang-root-dir (nth 1 (car dir-list))))) + (t + ;; Absolute + (nth 1 (car dir-list))))) (if (and dir - (file-readable-p dir)) - (setq menu (cons (list (car (car dir-list)) - (erlang-man-make-middle-menu - (erlang-man-get-files dir))) - menu))) + (file-readable-p dir)) + (setq menu (cons (list (car (car dir-list)) + (erlang-man-make-middle-menu + (erlang-man-get-files dir))) + menu))) (setq dir-list (cdr dir-list))) ;; Should no menus be found, generate a menu item which ;; will display a help text, when selected. (if menu - (nreverse menu) + (nreverse menu) '(("Man Pages" - (("Error! Why?" erlang-man-describe-error))))))) + (("Error! Why?" erlang-man-describe-error))))))) ;; Should the menu be to long, let's split it into a number of @@ -2018,32 +2023,32 @@ menus is created." (if (<= (length filelist) erlang-man-max-menu-size) (erlang-man-make-menu filelist) (let ((menu '()) - (filelist (copy-sequence filelist)) - segment submenu pair) + (filelist (copy-sequence filelist)) + segment submenu pair) (while filelist - (setq pair (nthcdr (- erlang-man-max-menu-size 1) filelist)) - (setq segment filelist) - (if (null pair) - (setq filelist nil) - (setq filelist (cdr pair)) - (setcdr pair nil)) - (setq submenu (erlang-man-make-menu segment)) - (setq menu (cons (list (concat (car (car submenu)) - " -- " - (car (car (reverse submenu)))) - submenu) - menu))) + (setq pair (nthcdr (- erlang-man-max-menu-size 1) filelist)) + (setq segment filelist) + (if (null pair) + (setq filelist nil) + (setq filelist (cdr pair)) + (setcdr pair nil)) + (setq submenu (erlang-man-make-menu segment)) + (setq menu (cons (list (concat (car (car submenu)) + " -- " + (car (car (reverse submenu)))) + submenu) + menu))) (nreverse menu)))) (defun erlang-man-make-menu (filelist) "Make a leaf menu based on FILELIST." (let ((menu '()) - item) + item) (while filelist (setq item (erlang-man-make-menu-item (car filelist))) (if item - (setq menu (cons item menu))) + (setq menu (cons item menu))) (setq filelist (cdr filelist))) (nreverse menu))) @@ -2052,11 +2057,11 @@ menus is created." "Create a menu item containing the name of the man page." (and (string-match ".+/\\([^/]+\\)\\.\\([124-9]\\|3\\(erl\\)?\\)\\(\\.gz\\)?$" file) (let ((page (substring file (match-beginning 1) (match-end 1)))) - (list (capitalize page) - (list 'lambda '() - '(interactive) - (list 'funcall 'erlang-man-display-function - file)))))) + (list (capitalize page) + (list 'lambda '() + '(interactive) + (list 'funcall 'erlang-man-display-function + file)))))) (defun erlang-man-get-files (dir) @@ -2069,33 +2074,33 @@ menus is created." This function is aware of imported functions." (interactive (list (let* ((mod (car-safe (erlang-get-function-under-point))) - (input (read-string - (format "Manual entry for module%s: " - (if (or (null mod) (string= mod "")) - "" - (format " (default %s)" mod)))))) - (if (string= input "") - mod - input)))) + (input (read-string + (format "Manual entry for module%s: " + (if (or (null mod) (string= mod "")) + "" + (format " (default %s)" mod)))))) + (if (string= input "") + mod + input)))) (or module (setq module (car (erlang-get-function-under-point)))) (if (or (null module) (string= module "")) (error "No Erlang module name given")) (let ((dir-list erlang-man-dirs) - (pat (concat "/" (regexp-quote module) "\\.\\([124-9]\\|3\\(erl\\)?\\)\\(\\.gz\\)?$")) - (file nil) - file-list) + (pat (concat "/" (regexp-quote module) "\\.\\([124-9]\\|3\\(erl\\)?\\)\\(\\.gz\\)?$")) + (file nil) + file-list) (while (and dir-list (null file)) (setq file-list (erlang-man-get-files - (if (nth 2 (car dir-list)) - (concat erlang-root-dir (nth 1 (car dir-list))) - (nth 1 (car dir-list))))) + (if (nth 2 (car dir-list)) + (concat erlang-root-dir (nth 1 (car dir-list))) + (nth 1 (car dir-list))))) (while (and file-list (null file)) - (if (string-match pat (car file-list)) - (setq file (car file-list))) - (setq file-list (cdr file-list))) + (if (string-match pat (car file-list)) + (setq file (car file-list))) + (setq file-list (cdr file-list))) (setq dir-list (cdr dir-list))) (if file - (funcall erlang-man-display-function file) + (funcall erlang-man-display-function file) (error "No manual page for module %s found" module)))) @@ -2117,55 +2122,55 @@ The entry for `function' is displayed. This function is aware of imported functions." (interactive (list (let* ((mod-func (erlang-get-function-under-point)) - (mod (car-safe mod-func)) - (func (nth 1 mod-func)) - (input (read-string - (format - "Manual entry for `module:func' or `module'%s: " - (if (or (null mod) (string= mod "")) - "" - (format " (default %s:%s)" mod func)))))) - (if (string= input "") - (if (and mod func) - (concat mod ":" func) - mod) - input)))) + (mod (car-safe mod-func)) + (func (nth 1 mod-func)) + (input (read-string + (format + "Manual entry for `module:func' or `module'%s: " + (if (or (null mod) (string= mod "")) + "" + (format " (default %s:%s)" mod func)))))) + (if (string= input "") + (if (and mod func) + (concat mod ":" func) + mod) + input)))) ;; Emacs 18 doesn't provide `man'... (condition-case nil (require 'man) (error nil)) (let ((modname nil) - (funcname nil)) + (funcname nil)) (cond ((null name) - (let ((mod-func (erlang-get-function-under-point))) - (setq modname (car-safe mod-func)) - (setq funcname (nth 1 mod-func)))) - ((string-match ":" name) - (setq modname (substring name 0 (match-beginning 0))) - (setq funcname (substring name (match-end 0) nil))) - ((stringp name) - (setq modname name))) + (let ((mod-func (erlang-get-function-under-point))) + (setq modname (car-safe mod-func)) + (setq funcname (nth 1 mod-func)))) + ((string-match ":" name) + (setq modname (substring name 0 (match-beginning 0))) + (setq funcname (substring name (match-end 0) nil))) + ((stringp name) + (setq modname name))) (if (or (null modname) (string= modname "")) - (error "No Erlang module name given")) + (error "No Erlang module name given")) (cond ((fboundp 'Man-notify-when-ready) - ;; Emacs 19: The man command could possibly start an - ;; asynchronous process, i.e. we must hook ourselves into - ;; the system to be activated when the man-process - ;; terminates. - (if (null funcname) - () - (erlang-man-patch-notify) - (setq erlang-man-function-name funcname)) - (condition-case nil - (erlang-man-module modname) - (error (setq erlang-man-function-name nil)))) - (t - (erlang-man-module modname) - (if funcname - (erlang-man-find-function - (or (get-buffer "*Manual Entry*") ; Emacs 18 - (current-buffer)) ; XEmacs - funcname)))))) + ;; Emacs 19: The man command could possibly start an + ;; asynchronous process, i.e. we must hook ourselves into + ;; the system to be activated when the man-process + ;; terminates. + (if (null funcname) + () + (erlang-man-patch-notify) + (setq erlang-man-function-name funcname)) + (condition-case nil + (erlang-man-module modname) + (error (setq erlang-man-function-name nil)))) + (t + (erlang-man-module modname) + (if funcname + (erlang-man-find-function + (or (get-buffer "*Manual Entry*") ; Emacs 18 + (current-buffer)) ; XEmacs + funcname)))))) ;; Should the defadvice be at the top level, the package `advice' would @@ -2183,14 +2188,14 @@ command is executed asynchronously." ;; This should never happened since this is only called when ;; running under Emacs 19. (error (error (concat "This command needs the package `advice', " - "please upgrade your Emacs.")))) + "please upgrade your Emacs.")))) (require 'man) (defadvice Man-notify-when-ready - (after erlang-Man-notify-when-ready activate) + (after erlang-Man-notify-when-ready activate) "Set point at the documentation of the function name in `erlang-man-function-name' when the man page is displayed." (if erlang-man-function-name - (erlang-man-find-function (ad-get-arg 0) erlang-man-function-name)) + (erlang-man-find-function (ad-get-arg 0) erlang-man-function-name)) (setq erlang-man-function-name nil))) @@ -2198,17 +2203,17 @@ command is executed asynchronously." "Find manual page for function in `erlang-man-function-name' in buffer BUF." (if func (let ((win (get-buffer-window buf))) - (if win - (progn - (set-buffer buf) - (goto-char (point-min)) - (if (re-search-forward - (concat "^[ \t]+" func " ?(") - (point-max) t) - (progn - (forward-word -1) - (set-window-point win (point))) - (message "Could not find function `%s'" func))))))) + (if win + (progn + (set-buffer buf) + (goto-char (point-min)) + (if (re-search-forward + (concat "^[ \t]+" func " ?(") + (point-max) t) + (progn + (forward-word -1) + (set-window-point win (point))) + (message "Could not find function `%s'" func))))))) (defun erlang-man-display (file) @@ -2222,25 +2227,25 @@ to be used." (error nil)) (if file (let ((process-environment (copy-sequence process-environment))) - (if (string-match "\\(.*\\)/man[^/]*/\\([^.]+\\)\\.\\([124-9]\\|3\\(erl\\)?\\)\\(\\.gz\\)?$" file) - (let ((dir (substring file (match-beginning 1) (match-end 1))) - (page (substring file (match-beginning 2) (match-end 2)))) - (if (fboundp 'setenv) - (setenv "MANPATH" dir) - ;; Emacs 18 - (setq process-environment (cons (concat "MANPATH=" dir) - process-environment))) - (cond ((not (and (not erlang-xemacs-p) - (= erlang-emacs-major-version 19) - (< erlang-emacs-minor-version 29))) - (manual-entry page)) - (t - ;; Emacs 19.28 and earlier versions of 19: - ;; The manual-entry command unconditionally prompts - ;; the user :-( - (funcall (symbol-function 'Man-getpage-in-background) - page)))) - (error "Can't find man page for %s\n" file))))) + (if (string-match "\\(.*\\)/man[^/]*/\\([^.]+\\)\\.\\([124-9]\\|3\\(erl\\)?\\)\\(\\.gz\\)?$" file) + (let ((dir (substring file (match-beginning 1) (match-end 1))) + (page (substring file (match-beginning 2) (match-end 2)))) + (if (fboundp 'setenv) + (setenv "MANPATH" dir) + ;; Emacs 18 + (setq process-environment (cons (concat "MANPATH=" dir) + process-environment))) + (cond ((not (and (not erlang-xemacs-p) + (= erlang-emacs-major-version 19) + (< erlang-emacs-minor-version 29))) + (manual-entry page)) + (t + ;; Emacs 19.28 and earlier versions of 19: + ;; The manual-entry command unconditionally prompts + ;; the user :-( + (funcall (symbol-function 'Man-getpage-in-background) + page)))) + (error "Can't find man page for %s\n" file))))) (defun erlang-man-describe-error () @@ -2283,43 +2288,43 @@ package not be present, this function does nothing." (error t)) (if (featurep 'tempo) (let ((skel erlang-skel) - (menu '())) - (while skel - (cond ((null (car skel)) - (setq menu (cons nil menu))) - (t - (funcall (symbol-function 'tempo-define-template) - (concat "erlang-" (nth 1 (car skel))) - ;; The tempo template used contains an `include' - ;; function call only, hence changes to the - ;; variables describing the templates take effect - ;; immdiately. - (list (list 'erlang-skel-include (nth 2 (car skel)))) - (nth 1 (car skel)) - (car (car skel)) - 'erlang-tempo-tags) - (setq menu (cons (erlang-skel-make-menu-item - (car skel)) menu)))) - (setq skel (cdr skel))) - (setq erlang-menu-skel-items - (list nil (list "Skeletons" (nreverse menu)))) - (setq erlang-menu-items - (erlang-menu-add-above 'erlang-menu-skel-items - 'erlang-menu-version-items - erlang-menu-items)) - (erlang-menu-init)))) + (menu '())) + (while skel + (cond ((null (car skel)) + (setq menu (cons nil menu))) + (t + (funcall (symbol-function 'tempo-define-template) + (concat "erlang-" (nth 1 (car skel))) + ;; The tempo template used contains an `include' + ;; function call only, hence changes to the + ;; variables describing the templates take effect + ;; immdiately. + (list (list 'erlang-skel-include (nth 2 (car skel)))) + (nth 1 (car skel)) + (car (car skel)) + 'erlang-tempo-tags) + (setq menu (cons (erlang-skel-make-menu-item + (car skel)) menu)))) + (setq skel (cdr skel))) + (setq erlang-menu-skel-items + (list nil (list "Skeletons" (nreverse menu)))) + (setq erlang-menu-items + (erlang-menu-add-above 'erlang-menu-skel-items + 'erlang-menu-version-items + erlang-menu-items)) + (erlang-menu-init)))) (defun erlang-skel-make-menu-item (skel) (let ((func (intern (concat "tempo-template-erlang-" (nth 1 skel))))) (cond ((null (nth 3 skel)) - (list (car skel) func)) - (t - (list (car skel) - (list 'lambda '() - '(interactive) - (list 'funcall - (list 'quote (nth 3 skel)) - (list 'quote func)))))))) + (list (car skel) func)) + (t + (list (car skel) + (list 'lambda '() + '(interactive) + (list 'funcall + (list 'quote (nth 3 skel)) + (list 'quote func)))))))) ;; Functions designed to be added to the skeleton menu. ;; (Not normally used) @@ -2352,12 +2357,12 @@ Technically, this function returns the `tempo' attribute`(l ...)' which can contain other `tempo' attributes. Please see the function `tempo-define-template' for a description of the `(l ...)' attribute." (let ((res '()) - entry) + entry) (while args (setq entry (car args)) (while entry - (setq res (cons (car entry) res)) - (setq entry (cdr entry))) + (setq res (cons (car entry) res)) + (setq entry (cdr entry))) (setq args (cdr args))) (cons 'l (nreverse res)))) @@ -2366,25 +2371,25 @@ can contain other `tempo' attributes. Please see the function (defun erlang-skel-separator (&optional percent) "Return a comment separator." (let ((percent (or percent 3))) - (concat (make-string percent ?%) - (make-string (- erlang-skel-separator-length percent) ?-) - "\n"))) + (concat (make-string percent ?%) + (make-string (- erlang-skel-separator-length percent) ?-) + "\n"))) (defun erlang-skel-double-separator (&optional percent) "Return a comment separator." (let ((percent (or percent 3))) - (concat (make-string percent ?%) - (make-string (- erlang-skel-separator-length percent) ?=) - "\n"))) + (concat (make-string percent ?%) + (make-string (- erlang-skel-separator-length percent) ?=) + "\n"))) (defun erlang-skel-dd-mmm-yyyy () "Return the current date as a string in \"DD Mon YYYY\" form. The first character of DD is space if the value is less than 10." (let ((date (current-time-string))) (format "%2d %s %s" - (erlang-string-to-int (substring date 8 10)) - (substring date 4 7) - (substring date -4)))) + (erlang-string-to-int (substring date 8 10)) + (substring date 4 7) + (substring date -4)))) ;; Indentation code: @@ -2397,23 +2402,23 @@ rigidly along with this one." ;; If arg, always indent this line as Erlang ;; and shift remaining lines of clause the same amount. (let ((shift-amt (erlang-indent-line)) - beg end) - (save-excursion - (if erlang-tab-always-indent - (beginning-of-line)) - (setq beg (point)) - (erlang-end-of-clause 1) - (setq end (point)) - (goto-char beg) - (forward-line 1) - (setq beg (point))) - (if (> end beg) - (indent-code-rigidly beg end shift-amt "\n"))) + beg end) + (save-excursion + (if erlang-tab-always-indent + (beginning-of-line)) + (setq beg (point)) + (erlang-end-of-clause 1) + (setq end (point)) + (goto-char beg) + (forward-line 1) + (setq beg (point))) + (if (> end beg) + (indent-code-rigidly beg end shift-amt "\n"))) (if (and (not erlang-tab-always-indent) - (save-excursion - (skip-chars-backward " \t") - (not (bolp)))) - (insert-tab) + (save-excursion + (skip-chars-backward " \t") + (not (bolp)))) + (insert-tab) (erlang-indent-line)))) @@ -2421,33 +2426,33 @@ rigidly along with this one." "Indent current line as Erlang code. Return the amount the indentation changed by." (let ((pos (- (point-max) (point))) - indent beg - shift-amt) + indent beg + shift-amt) (beginning-of-line 1) (setq beg (point)) (skip-chars-forward " \t") (cond ((looking-at "%") - (setq indent (funcall comment-indent-function)) - (setq shift-amt (- indent (current-column)))) - (t - (setq indent (erlang-calculate-indent)) - (cond ((null indent) - (setq indent (current-indentation))) - ((eq indent t) - ;; This should never occur here. - (error "Erlang mode error")) - ;;((= (char-syntax (following-char)) ?\)) - ;; (setq indent (1- indent))) - ) - (setq shift-amt (- indent (current-column))))) + (setq indent (funcall comment-indent-function)) + (setq shift-amt (- indent (current-column)))) + (t + (setq indent (erlang-calculate-indent)) + (cond ((null indent) + (setq indent (current-indentation))) + ((eq indent t) + ;; This should never occur here. + (error "Erlang mode error")) + ;;((= (char-syntax (following-char)) ?\)) + ;; (setq indent (1- indent))) + ) + (setq shift-amt (- indent (current-column))))) (if (zerop shift-amt) - nil + nil (delete-region beg (point)) (indent-to indent)) ;; If initial point was within line's indentation, position ;; after the indentation. Else stay at same point in text. (if (> (- (point-max) pos) (point)) - (goto-char (- (point-max) pos))) + (goto-char (- (point-max) pos))) (run-hooks 'erlang-indent-line-hook) shift-amt)) @@ -2459,11 +2464,11 @@ This is automagically called by the user level function `indent-region'." (interactive "r") (save-excursion (let ((case-fold-search nil) - (continue t) - (from-end (- (point-max) end)) - indent-point;; The beginning of the current line - indent;; The indent amount - state) + (continue t) + (from-end (- (point-max) end)) + indent-point;; The beginning of the current line + indent;; The indent amount + state) (goto-char beg) (beginning-of-line) (setq indent-point (point)) @@ -2477,39 +2482,39 @@ This is automagically called by the user level function `indent-region'." (error "Illegal syntax")))) ;; Indent every line in the region (while continue - (goto-char indent-point) - (skip-chars-forward " \t") - (cond ((looking-at "%") - ;; Do not use our stack to help the user to customize - ;; comment indentation. - (setq indent (funcall comment-indent-function))) - ((looking-at "$") - ;; Don't indent empty lines. - (setq indent 0)) - (t - (setq indent - (save-excursion - (erlang-calculate-stack-indent (point) state))) - (cond ((null indent) - (setq indent (current-indentation))) - ((eq indent t) - ;; This should never occur here. - (error "Erlang mode error")) - ;;((= (char-syntax (following-char)) ?\)) - ;; (setq indent (1- indent))) - ))) - (if (zerop (- indent (current-column))) - nil - (delete-region indent-point (point)) - (indent-to indent)) - ;; Find the next line in the region - (goto-char indent-point) - (save-excursion - (forward-line 1) - (setq indent-point (point))) - (if (>= from-end (- (point-max) indent-point)) - (setq continue nil) - (while (< (point) indent-point) + (goto-char indent-point) + (skip-chars-forward " \t") + (cond ((looking-at "%") + ;; Do not use our stack to help the user to customize + ;; comment indentation. + (setq indent (funcall comment-indent-function))) + ((looking-at "$") + ;; Don't indent empty lines. + (setq indent 0)) + (t + (setq indent + (save-excursion + (erlang-calculate-stack-indent (point) state))) + (cond ((null indent) + (setq indent (current-indentation))) + ((eq indent t) + ;; This should never occur here. + (error "Erlang mode error")) + ;;((= (char-syntax (following-char)) ?\)) + ;; (setq indent (1- indent))) + ))) + (if (zerop (- indent (current-column))) + nil + (delete-region indent-point (point)) + (indent-to indent)) + ;; Find the next line in the region + (goto-char indent-point) + (save-excursion + (forward-line 1) + (setq indent-point (point))) + (if (>= from-end (- (point-max) indent-point)) + (setq continue nil) + (while (< (point) indent-point) (let ((pt (point))) (setq state (erlang-partial-parse pt indent-point state)) @@ -2531,7 +2536,7 @@ This is automagically called by the user level function `indent-region'." (interactive) (save-excursion (let ((end (progn (erlang-end-of-function 1) (point))) - (beg (progn (erlang-beginning-of-function 1) (point)))) + (beg (progn (erlang-beginning-of-function 1) (point)))) (erlang-indent-region beg end)))) @@ -2540,7 +2545,7 @@ This is automagically called by the user level function `indent-region'." (interactive) (save-excursion (let ((end (progn (erlang-end-of-clause 1) (point))) - (beg (progn (erlang-beginning-of-clause 1) (point)))) + (beg (progn (erlang-beginning-of-clause 1) (point)))) (erlang-indent-region beg end)))) @@ -2555,11 +2560,11 @@ This is automagically called by the user level function `indent-region'." Return nil if line starts inside string, t if in a comment." (save-excursion (let ((indent-point (point)) - (case-fold-search nil) - (state nil)) + (case-fold-search nil) + (state nil)) (if parse-start - (goto-char parse-start) - (erlang-beginning-of-clause)) + (goto-char parse-start) + (erlang-beginning-of-clause)) (while (< (point) indent-point) (let ((pt (point))) (setq state (erlang-partial-parse pt indent-point state)) @@ -2574,25 +2579,25 @@ Return nil if line starts inside string, t if in a comment." (save-excursion (let ((starting-point (point)) - (case-fold-search nil) - (state nil)) + (case-fold-search nil) + (state nil)) (erlang-beginning-of-clause) (while (< (point) starting-point) - (setq state (erlang-partial-parse (point) starting-point state))) + (setq state (erlang-partial-parse (point) starting-point state))) (message "%S" state)))) (defun erlang-partial-parse (from to &optional state) "Parse Erlang syntax starting at FROM until TO, with an optional STATE. Value is list (stack token-start token-type in-what)." - (goto-char from) ; Start at the beginning + (goto-char from) ; Start at the beginning (erlang-skip-blank to) (let ((cs (char-syntax (following-char))) - (stack (car state)) - (token (point)) - in-what) - (cond - + (stack (car state)) + (token (point)) + in-what) + (cond + ;; Done: Return previous state. ((>= token to) (setq token (nth 1 state)) @@ -2602,230 +2607,230 @@ Value is list (stack token-start token-type in-what)." ;; Word constituent: check and handle keywords. ((= cs ?w) (cond ((looking-at "\\(end\\|after\\)[^_a-zA-Z0-9]") - ;; Must pop top icr layer, `after' will push a new - ;; layer next. - (progn - (while (and stack (eq (car (car stack)) '->)) - (erlang-pop stack)) - (if (and stack (memq (car (car stack)) '(icr begin fun try))) - (erlang-pop stack)))) - ((looking-at "catch\\b.*of") - t) - ((looking-at "catch\\b\\s *\\($\\|%\\|.*->\\)") - ;; Must pop top icr layer, `catch' in try/catch - ;;will push a new layer next. - (progn - (while (and stack (eq (car (car stack)) '->)) - (erlang-pop stack)) - (if (and stack (memq (car (car stack)) '(icr begin try))) - (erlang-pop stack)))) - ) + ;; Must pop top icr layer, `after' will push a new + ;; layer next. + (progn + (while (and stack (eq (car (car stack)) '->)) + (erlang-pop stack)) + (if (and stack (memq (car (car stack)) '(icr begin fun try))) + (erlang-pop stack)))) + ((looking-at "catch\\b.*of") + t) + ((looking-at "catch\\b\\s *\\($\\|%\\|.*->\\)") + ;; Must pop top icr layer, `catch' in try/catch + ;;will push a new layer next. + (progn + (while (and stack (eq (car (car stack)) '->)) + (erlang-pop stack)) + (if (and stack (memq (car (car stack)) '(icr begin try))) + (erlang-pop stack)))) + ) (cond ((looking-at "\\(if\\|case\\|receive\\)[^_a-zA-Z0-9]") - ;; Must push a new icr (if/case/receive) layer. - (erlang-push (list 'icr token (current-column)) stack)) - ((looking-at "\\(try\\|after\\)[^_a-zA-Z0-9]") - ;; Must handle separately, try catch or try X of -> catch - ;; same for `after', it could be - ;; receive after Time -> X end, or - ;; try after X end - (erlang-push (list 'try token (current-column)) stack)) - ((looking-at "\\(of\\)[^_a-zA-Z0-9]") - ;; Must handle separately, try X of -> catch - (if (and stack (eq (car (car stack)) 'try)) - (let ((try-column (nth 2 (car stack))) - (try-pos (nth 1 (car stack)))) - (erlang-pop stack) - (erlang-push (list 'icr try-pos try-column) stack)))) - - ((looking-at "\\(fun\\)[^_a-zA-Z0-9]") - ;; Push a new layer if we are defining a `fun' - ;; expression, not when we are refering an existing - ;; function. 'fun's defines are only indented one level now. - (if (save-excursion - (goto-char (match-end 1)) - (erlang-skip-blank to) - ;; Use erlang-variable-regexp here to look for an - ;; optional variable name to match EEP37 named funs. - (if (looking-at erlang-variable-regexp) - (progn - (goto-char (match-end 0)) - (erlang-skip-blank to))) - (eq (following-char) ?\()) - (erlang-push (list 'fun token (current-column)) stack))) - ((looking-at "\\(begin\\)[^_a-zA-Z0-9]") - (erlang-push (list 'begin token (current-column)) stack)) - ;; Normal when case - ;;((looking-at "when\\s ") - ;;((looking-at "when\\s *\\($\\|%\\)") - ((looking-at "when[^_a-zA-Z0-9]") - (erlang-push (list 'when token (current-column)) stack)) - ((looking-at "catch\\b.*of") - t) - ((looking-at "catch\\b\\s *\\($\\|%\\|.*->\\)") - (erlang-push (list 'icr token (current-column)) stack)) - ;;(erlang-push (list '-> token (current-column)) stack)) - ;;((looking-at "^of$") - ;; (erlang-push (list 'icr token (current-column)) stack) - ;;(erlang-push (list '-> token (current-column)) stack)) - ) + ;; Must push a new icr (if/case/receive) layer. + (erlang-push (list 'icr token (current-column)) stack)) + ((looking-at "\\(try\\|after\\)[^_a-zA-Z0-9]") + ;; Must handle separately, try catch or try X of -> catch + ;; same for `after', it could be + ;; receive after Time -> X end, or + ;; try after X end + (erlang-push (list 'try token (current-column)) stack)) + ((looking-at "\\(of\\)[^_a-zA-Z0-9]") + ;; Must handle separately, try X of -> catch + (if (and stack (eq (car (car stack)) 'try)) + (let ((try-column (nth 2 (car stack))) + (try-pos (nth 1 (car stack)))) + (erlang-pop stack) + (erlang-push (list 'icr try-pos try-column) stack)))) + + ((looking-at "\\(fun\\)[^_a-zA-Z0-9]") + ;; Push a new layer if we are defining a `fun' + ;; expression, not when we are refering an existing + ;; function. 'fun's defines are only indented one level now. + (if (save-excursion + (goto-char (match-end 1)) + (erlang-skip-blank to) + ;; Use erlang-variable-regexp here to look for an + ;; optional variable name to match EEP37 named funs. + (if (looking-at erlang-variable-regexp) + (progn + (goto-char (match-end 0)) + (erlang-skip-blank to))) + (eq (following-char) ?\()) + (erlang-push (list 'fun token (current-column)) stack))) + ((looking-at "\\(begin\\)[^_a-zA-Z0-9]") + (erlang-push (list 'begin token (current-column)) stack)) + ;; Normal when case + ;;((looking-at "when\\s ") + ;;((looking-at "when\\s *\\($\\|%\\)") + ((looking-at "when[^_a-zA-Z0-9]") + (erlang-push (list 'when token (current-column)) stack)) + ((looking-at "catch\\b.*of") + t) + ((looking-at "catch\\b\\s *\\($\\|%\\|.*->\\)") + (erlang-push (list 'icr token (current-column)) stack)) + ;;(erlang-push (list '-> token (current-column)) stack)) + ;;((looking-at "^of$") + ;; (erlang-push (list 'icr token (current-column)) stack) + ;;(erlang-push (list '-> token (current-column)) stack)) + ) (forward-sexp 1)) - ;; String: Try to skip over it. (Catch error if not complete.) - ((= cs ?\") - (condition-case nil - (progn - (forward-sexp 1) - (if (> (point) to) - (progn - (setq in-what 'string) - (goto-char to)))) - (error - (setq in-what 'string) - (goto-char to)))) + ;; String: Try to skip over it. (Catch error if not complete.) + ((= cs ?\") + (condition-case nil + (progn + (forward-sexp 1) + (if (> (point) to) + (progn + (setq in-what 'string) + (goto-char to)))) + (error + (setq in-what 'string) + (goto-char to)))) ;; Expression prefix e.i. $ or ^ (Note ^ can be in the character ;; literal $^ or part of string and $ outside of a string denotes ;; a character literal) ((= cs ?') - (cond + (cond ((= (following-char) ?\") ;; $ or ^ was the last char in a string - (forward-char 1)) + (forward-char 1)) (t - ;; Maybe a character literal, quote the next char to avoid - ;; situations as $" being seen as the begining of a string. - ;; Note the quoting something in the middle of a string is harmless. - (quote (following-char)) - (forward-char 1)))) + ;; Maybe a character literal, quote the next char to avoid + ;; situations as $" being seen as the begining of a string. + ;; Note the quoting something in the middle of a string is harmless. + (quote (following-char)) + (forward-char 1)))) ;; Symbol constituent or punctuation - + ((memq cs '(?. ?_)) - (cond - + (cond + ;; Clause end ((= (following-char) ?\;) - (if (eq (car (car (last stack))) 'spec) - (while (memq (car (car stack)) '(when ::)) - (erlang-pop stack))) - (if (and stack (eq (car (car stack)) '->)) - (erlang-pop stack)) - (forward-char 1)) - + (if (eq (car (car (last stack))) 'spec) + (while (memq (car (car stack)) '(when ::)) + (erlang-pop stack))) + (if (and stack (eq (car (car stack)) '->)) + (erlang-pop stack)) + (forward-char 1)) + ;; Parameter separator ((looking-at ",") - (forward-char 1) - (if (and stack (eq (car (car stack)) '::)) - ;; Type or spec - (erlang-pop stack))) + (forward-char 1) + (if (and stack (eq (car (car stack)) '::)) + ;; Type or spec + (erlang-pop stack))) ;; Function end ((looking-at "\\.\\(\\s \\|\n\\|\\s<\\)") - (setq stack nil) - (forward-char 1)) - + (setq stack nil) + (forward-char 1)) + ;; Function head ((looking-at "->") - (if (and stack (eq (car (car stack)) 'when)) - (erlang-pop stack)) - (erlang-push (list '-> token (current-column)) stack) - (forward-char 2)) - + (if (and stack (eq (car (car stack)) 'when)) + (erlang-pop stack)) + (erlang-push (list '-> token (current-column)) stack) + (forward-char 2)) + ;; List-comprehension divider ((looking-at "||") - (erlang-push (list '|| token (current-column)) stack) - (forward-char 2)) + (erlang-push (list '|| token (current-column)) stack) + (forward-char 2)) ;; Bit-syntax open. Note that map syntax allows "<<" to follow ":=" ;; or "=>" without intervening whitespace, so handle that case here ((looking-at "\\(:=\\|=>\\)?<<") - (erlang-push (list '<< token (current-column)) stack) - (forward-char (- (match-end 0) (match-beginning 0)))) - + (erlang-push (list '<< token (current-column)) stack) + (forward-char (- (match-end 0) (match-beginning 0)))) + ;; Bit-syntax close ((looking-at ">>") - (while (memq (car (car stack)) '(|| ->)) - (erlang-pop stack)) - (cond ((eq (car (car stack)) '<<) - (erlang-pop stack)) - ((memq (car (car stack)) '(icr begin fun)) - (error "Missing `end'")) - (t - (error "Unbalanced parentheses"))) - (forward-char 2)) - + (while (memq (car (car stack)) '(|| ->)) + (erlang-pop stack)) + (cond ((eq (car (car stack)) '<<) + (erlang-pop stack)) + ((memq (car (car stack)) '(icr begin fun)) + (error "Missing `end'")) + (t + (error "Unbalanced parentheses"))) + (forward-char 2)) + ;; Macro ((= (following-char) ??) - ;; Skip over the ? - (forward-char 1) - ) + ;; Skip over the ? + (forward-char 1) + ) ;; Type spec's ((looking-at "-type\\s \\|-opaque\\s ") - (if stack - (forward-char 1) - (erlang-push (list 'icr token (current-column)) stack) - (forward-char 6))) + (if stack + (forward-char 1) + (erlang-push (list 'icr token (current-column)) stack) + (forward-char 6))) ((looking-at "-spec\\s ") - (if stack - (forward-char 1) - (forward-char 6) - (skip-chars-forward "^(\n") - (erlang-push (list 'spec (point) (current-column)) stack) - )) + (if stack + (forward-char 1) + (forward-char 6) + (skip-chars-forward "^(\n") + (erlang-push (list 'spec (point) (current-column)) stack) + )) ;; Type spec delimiter ((looking-at "::") - (erlang-push (list ':: token (current-column)) stack) - (forward-char 2)) - - ;; Don't follow through in the clause below - ;; '|' don't need spaces around it + (erlang-push (list ':: token (current-column)) stack) + (forward-char 2)) + + ;; Don't follow through in the clause below + ;; '|' don't need spaces around it ((looking-at "|") - (forward-char 1)) - + (forward-char 1)) + ;; Other punctuation: Skip over it and any following punctuation ((= cs ?.) - ;; Skip over all characters in the operand. - (skip-syntax-forward ".")) - + ;; Skip over all characters in the operand. + (skip-syntax-forward ".")) + ;; Other char: Skip over it. (t - (forward-char 1)))) - + (forward-char 1)))) + ;; Open parenthesis ((= cs ?\() (erlang-push (list '\( token (current-column)) stack) (forward-char 1)) - + ;; Close parenthesis ((= cs ?\)) (while (memq (car (car stack)) '(|| -> :: when)) - (erlang-pop stack)) + (erlang-pop stack)) (cond ((eq (car (car stack)) '\() - (erlang-pop stack) - (if (and (eq (car (car stack)) 'fun) - (or (eq (car (car (last stack))) 'spec) - (eq (car (car (cdr stack))) '::))) ;; -type() - ;; Inside fun type def ') closes fun definition - (erlang-pop stack))) - ((eq (car (car stack)) 'icr) - (erlang-pop stack) - ;; Normal catch not try-catch might have caused icr - ;; and then incr should be removed and is not an error. - (if (eq (car (car stack)) '\() - (erlang-pop stack) - (error "Missing `end'") - )) - ((eq (car (car stack)) 'begin) - (error "Missing `end'")) - (t - (error "Unbalanced parenthesis")) - ) - (forward-char 1)) - + (erlang-pop stack) + (if (and (eq (car (car stack)) 'fun) + (or (eq (car (car (last stack))) 'spec) + (eq (car (car (cdr stack))) '::))) ;; -type() + ;; Inside fun type def ') closes fun definition + (erlang-pop stack))) + ((eq (car (car stack)) 'icr) + (erlang-pop stack) + ;; Normal catch not try-catch might have caused icr + ;; and then incr should be removed and is not an error. + (if (eq (car (car stack)) '\() + (erlang-pop stack) + (error "Missing `end'") + )) + ((eq (car (car stack)) 'begin) + (error "Missing `end'")) + (t + (error "Unbalanced parenthesis")) + ) + (forward-char 1)) + ;; Character quote: Skip it and the quoted char. ((= cs ?/) (forward-char 2)) - + ;; Character escape: Skip it and the escape sequence. ((= cs ?\\) (forward-char 1) @@ -2854,49 +2859,49 @@ Return nil if inside string, t if in a comment." ((eq (car stack-top) '\() ;; Element of list, tuple or part of an expression, (cond ((null erlang-argument-indent) - ;; indent to next column. - (1+ (nth 2 stack-top))) - ((= (char-syntax (following-char)) ?\)) - (goto-char (nth 1 stack-top)) - (cond ((looking-at "[({]\\s *\\($\\|%\\)") - ;; Line ends with parenthesis. - (let ((previous (erlang-indent-find-preceding-expr)) - (stack-pos (nth 2 stack-top))) - (if (>= previous stack-pos) stack-pos - (- (+ previous erlang-argument-indent) 1)))) - (t - (nth 2 stack-top)))) - ((= (following-char) ?,) - ;; a comma at the start of the line: line up with opening parenthesis. - (nth 2 stack-top)) - (t - (goto-char (nth 1 stack-top)) - (let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)") - ;; Line ends with parenthesis. - (erlang-indent-parenthesis (nth 2 stack-top))) - (t - ;; Indent to the same column as the first - ;; argument. - (goto-char (1+ (nth 1 stack-top))) - (skip-chars-forward " \t") - (current-column))))) - (erlang-indent-standard indent-point token base 't))))) - ;; - ((eq (car stack-top) '<<) - ;; Element of binary (possible comprehension) expression, - (cond ((null erlang-argument-indent) - ;; indent to next column. - (+ 2 (nth 2 stack-top))) - ((looking-at "\\(>>\\)[^_a-zA-Z0-9]") - (nth 2 stack-top)) - (t - (goto-char (nth 1 stack-top)) - ;; Indent to the same column as the first - ;; argument. - (goto-char (+ 2 (nth 1 stack-top))) - (skip-chars-forward " \t") - (current-column)))) - + ;; indent to next column. + (1+ (nth 2 stack-top))) + ((= (char-syntax (following-char)) ?\)) + (goto-char (nth 1 stack-top)) + (cond ((looking-at "[({]\\s *\\($\\|%\\)") + ;; Line ends with parenthesis. + (let ((previous (erlang-indent-find-preceding-expr)) + (stack-pos (nth 2 stack-top))) + (if (>= previous stack-pos) stack-pos + (- (+ previous erlang-argument-indent) 1)))) + (t + (nth 2 stack-top)))) + ((= (following-char) ?,) + ;; a comma at the start of the line: line up with opening parenthesis. + (nth 2 stack-top)) + (t + (goto-char (nth 1 stack-top)) + (let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)") + ;; Line ends with parenthesis. + (erlang-indent-parenthesis (nth 2 stack-top))) + (t + ;; Indent to the same column as the first + ;; argument. + (goto-char (1+ (nth 1 stack-top))) + (skip-chars-forward " \t") + (current-column))))) + (erlang-indent-standard indent-point token base 't))))) + ;; + ((eq (car stack-top) '<<) + ;; Element of binary (possible comprehension) expression, + (cond ((null erlang-argument-indent) + ;; indent to next column. + (+ 2 (nth 2 stack-top))) + ((looking-at "\\(>>\\)[^_a-zA-Z0-9]") + (nth 2 stack-top)) + (t + (goto-char (nth 1 stack-top)) + ;; Indent to the same column as the first + ;; argument. + (goto-char (+ 2 (nth 1 stack-top))) + (skip-chars-forward " \t") + (current-column)))) + ((memq (car stack-top) '(icr fun spec)) ;; The default indentation is the column of the option ;; directly following the keyword. (This does not apply to @@ -2907,156 +2912,156 @@ Return nil if inside string, t if in a comment." ;; `after' should be indented to the same level as the ;; corresponding receive. (cond ((looking-at "\\(after\\|of\\)\\($\\|[^_a-zA-Z0-9]\\)") - (nth 2 stack-top)) - ((looking-at "when[^_a-zA-Z0-9]") - ;; Handling one when part - (+ (nth 2 stack-top) erlang-indent-level erlang-indent-guard)) - (t - (save-excursion - (goto-char (nth 1 stack-top)) - (if (looking-at "case[^_a-zA-Z0-9]") - (+ (nth 2 stack-top) erlang-indent-level) - (skip-chars-forward "a-z") - (skip-chars-forward " \t") - (if (memq (following-char) '(?% ?\n)) - (+ (nth 2 stack-top) erlang-indent-level) - (current-column)))))) + (nth 2 stack-top)) + ((looking-at "when[^_a-zA-Z0-9]") + ;; Handling one when part + (+ (nth 2 stack-top) erlang-indent-level erlang-indent-guard)) + (t + (save-excursion + (goto-char (nth 1 stack-top)) + (if (looking-at "case[^_a-zA-Z0-9]") + (+ (nth 2 stack-top) erlang-indent-level) + (skip-chars-forward "a-z") + (skip-chars-forward " \t") + (if (memq (following-char) '(?% ?\n)) + (+ (nth 2 stack-top) erlang-indent-level) + (current-column)))))) ) - ((and (eq (car stack-top) '||) (looking-at "\\(]\\|>>\\)[^_a-zA-Z0-9]")) - (nth 2 (car (cdr stack)))) + ((and (eq (car stack-top) '||) (looking-at "\\(]\\|>>\\)[^_a-zA-Z0-9]")) + (nth 2 (car (cdr stack)))) ;; Real indentation, where operators create extra indentation etc. ((memq (car stack-top) '(-> || try begin)) - (if (looking-at "\\(of\\)[^_a-zA-Z0-9]") - (nth 2 stack-top) - (goto-char (nth 1 stack-top)) - ;; Check if there is more code after the '->' on the - ;; same line. If so use this indentation as base, else - ;; use parent indentation + 2 * level as base. - (let ((off erlang-indent-level) - (skip 2)) - (cond ((null (cdr stack))) ; Top level in function. - ((eq (car stack-top) 'begin) - (setq skip 5)) - ((eq (car stack-top) 'try) - (setq skip 5)) - ((eq (car stack-top) '->) - ;; If in fun definition use standard indent level not double - ;;(if (not (eq (car (car (cdr stack))) 'fun)) - ;; Removed it made multi clause fun's look to bad - (setq off (* 2 erlang-indent-level)))) ;; ) - (let ((base (erlang-indent-find-base stack indent-point off skip))) - ;; Special cases - (goto-char indent-point) - (cond ((looking-at "\\(end\\|after\\)\\($\\|[^_a-zA-Z0-9]\\)") - (if (eq (car stack-top) '->) - (erlang-pop stack)) - (if stack - (erlang-caddr (car stack)) - 0)) - ((looking-at "catch\\b\\($\\|[^_a-zA-Z0-9]\\)") - ;; Are we in a try - (let ((start (if (eq (car stack-top) '->) - (car (cdr stack)) - stack-top))) - (if (null start) nil - (goto-char (nth 1 start))) - (cond ((looking-at "try\\($\\|[^_a-zA-Z0-9]\\)") - (progn - (if (eq (car stack-top) '->) - (erlang-pop stack)) - (if stack - (erlang-caddr (car stack)) - 0))) - (t (erlang-indent-standard indent-point token base 'nil))))) ;; old catch - (t - (erlang-indent-standard indent-point token base 'nil) - )))) - )) - ((eq (car stack-top) 'when) - (goto-char (nth 1 stack-top)) - (if (looking-at "when\\s *\\($\\|%\\)") - (progn - (erlang-pop stack) - (if (and stack (memq (nth 0 (car stack)) '(icr fun))) - (progn - (goto-char (nth 1 (car stack))) - (+ (nth 2 (car stack)) erlang-indent-guard - ;; receive XYZ or receive - ;; XYZ - ;; This if thing does not seem to be needed - ;;(if (looking-at "[a-z]+\\s *\\($\\|%\\)") - ;; erlang-indent-level - ;; (* 2 erlang-indent-level)))) - (* 2 erlang-indent-level))) - ;;erlang-indent-level)) - (+ erlang-indent-level erlang-indent-guard))) + (if (looking-at "\\(of\\)[^_a-zA-Z0-9]") + (nth 2 stack-top) + (goto-char (nth 1 stack-top)) + ;; Check if there is more code after the '->' on the + ;; same line. If so use this indentation as base, else + ;; use parent indentation + 2 * level as base. + (let ((off erlang-indent-level) + (skip 2)) + (cond ((null (cdr stack))) ; Top level in function. + ((eq (car stack-top) 'begin) + (setq skip 5)) + ((eq (car stack-top) 'try) + (setq skip 5)) + ((eq (car stack-top) '->) + ;; If in fun definition use standard indent level not double + ;;(if (not (eq (car (car (cdr stack))) 'fun)) + ;; Removed it made multi clause fun's look to bad + (setq off (* 2 erlang-indent-level)))) ;; ) + (let ((base (erlang-indent-find-base stack indent-point off skip))) + ;; Special cases + (goto-char indent-point) + (cond ((looking-at "\\(end\\|after\\)\\($\\|[^_a-zA-Z0-9]\\)") + (if (eq (car stack-top) '->) + (erlang-pop stack)) + (if stack + (erlang-caddr (car stack)) + 0)) + ((looking-at "catch\\b\\($\\|[^_a-zA-Z0-9]\\)") + ;; Are we in a try + (let ((start (if (eq (car stack-top) '->) + (car (cdr stack)) + stack-top))) + (if (null start) nil + (goto-char (nth 1 start))) + (cond ((looking-at "try\\($\\|[^_a-zA-Z0-9]\\)") + (progn + (if (eq (car stack-top) '->) + (erlang-pop stack)) + (if stack + (erlang-caddr (car stack)) + 0))) + (t (erlang-indent-standard indent-point token base 'nil))))) ;; old catch + (t + (erlang-indent-standard indent-point token base 'nil) + )))) + )) + ((eq (car stack-top) 'when) + (goto-char (nth 1 stack-top)) + (if (looking-at "when\\s *\\($\\|%\\)") + (progn + (erlang-pop stack) + (if (and stack (memq (nth 0 (car stack)) '(icr fun))) + (progn + (goto-char (nth 1 (car stack))) + (+ (nth 2 (car stack)) erlang-indent-guard + ;; receive XYZ or receive + ;; XYZ + ;; This if thing does not seem to be needed + ;;(if (looking-at "[a-z]+\\s *\\($\\|%\\)") + ;; erlang-indent-level + ;; (* 2 erlang-indent-level)))) + (* 2 erlang-indent-level))) + ;;erlang-indent-level)) + (+ erlang-indent-level erlang-indent-guard))) ;; "when" is followed by code, let's indent to the same ;; column. (forward-char 4) ; Skip "when" (skip-chars-forward " \t") (current-column))) - ;; Type and Spec indentation - ((eq (car stack-top) '::) - (if (looking-at "[},)]") - ;; Closing function spec, record definition with types, + ;; Type and Spec indentation + ((eq (car stack-top) '::) + (if (looking-at "[},)]") + ;; Closing function spec, record definition with types, ;; or a comma at the start of the line - ;; pop stack and recurse - (erlang-calculate-stack-indent indent-point - (cons (erlang-pop stack) (cdr state))) - (cond ((null erlang-argument-indent) - ;; indent to next column. - (+ 2 (nth 2 stack-top))) - ((looking-at "::[^_a-zA-Z0-9]") - (nth 2 stack-top)) - (t - (let ((start-alternativ (if (looking-at "|") 2 0))) - (goto-char (nth 1 stack-top)) - (- (cond ((looking-at "::\\s *\\($\\|%\\)") - ;; Line ends with :: - (if (eq (car (car (last stack))) 'spec) - (+ (erlang-indent-find-preceding-expr 1) - erlang-argument-indent) - (+ (erlang-indent-find-preceding-expr 2) - erlang-argument-indent))) - (t - ;; Indent to the same column as the first - ;; argument. - (goto-char (+ 2 (nth 1 stack-top))) - (skip-chars-forward " \t") - (current-column))) start-alternativ)))))) - ))) + ;; pop stack and recurse + (erlang-calculate-stack-indent indent-point + (cons (erlang-pop stack) (cdr state))) + (cond ((null erlang-argument-indent) + ;; indent to next column. + (+ 2 (nth 2 stack-top))) + ((looking-at "::[^_a-zA-Z0-9]") + (nth 2 stack-top)) + (t + (let ((start-alternativ (if (looking-at "|") 2 0))) + (goto-char (nth 1 stack-top)) + (- (cond ((looking-at "::\\s *\\($\\|%\\)") + ;; Line ends with :: + (if (eq (car (car (last stack))) 'spec) + (+ (erlang-indent-find-preceding-expr 1) + erlang-argument-indent) + (+ (erlang-indent-find-preceding-expr 2) + erlang-argument-indent))) + (t + ;; Indent to the same column as the first + ;; argument. + (goto-char (+ 2 (nth 1 stack-top))) + (skip-chars-forward " \t") + (current-column))) start-alternativ)))))) + ))) (defun erlang-indent-standard (indent-point token base inside-parenthesis) "Standard indent when in blocks or tuple or arguments. Look at last thing to see in what state we are, move relative to the base." - (goto-char token) + (goto-char token) (cond ((looking-at "||\\|,\\|->\\||") - base) - ((erlang-at-keyword) - (+ (current-column) erlang-indent-level)) - ((or (= (char-syntax (following-char)) ?.) - (erlang-at-operator)) - (+ base erlang-indent-level)) - (t - (goto-char indent-point) - (cond ((memq (following-char) '(?\( )) - ;; Function application. - (+ (erlang-indent-find-preceding-expr) - erlang-argument-indent)) - ;; Empty line, or end; treat it as the end of - ;; the block. (Here we have a choice: should - ;; the user be forced to reindent continued - ;; lines, or should the "end" be reindented?) - - ;; Avoid treating comments a continued line. - ((= (following-char) ?%) - base) - ;; Continued line (e.g. line beginning - ;; with an operator.) - (t - (if (or (erlang-at-operator) (not inside-parenthesis)) - (+ base erlang-indent-level) - base)))))) + base) + ((erlang-at-keyword) + (+ (current-column) erlang-indent-level)) + ((or (= (char-syntax (following-char)) ?.) + (erlang-at-operator)) + (+ base erlang-indent-level)) + (t + (goto-char indent-point) + (cond ((memq (following-char) '(?\( )) + ;; Function application. + (+ (erlang-indent-find-preceding-expr) + erlang-argument-indent)) + ;; Empty line, or end; treat it as the end of + ;; the block. (Here we have a choice: should + ;; the user be forced to reindent continued + ;; lines, or should the "end" be reindented?) + + ;; Avoid treating comments a continued line. + ((= (following-char) ?%) + base) + ;; Continued line (e.g. line beginning + ;; with an operator.) + (t + (if (or (erlang-at-operator) (not inside-parenthesis)) + (+ base erlang-indent-level) + base)))))) (defun erlang-indent-find-base (stack indent-point &optional offset skip) "Find the base column for current stack." @@ -3066,21 +3071,21 @@ Return nil if inside string, t if in a comment." (let* ((stack-top (car stack))) (goto-char (nth 1 stack-top)) (if (< skip (- (point-max) (point))) - (progn - (forward-char skip) - (if (looking-at "\\s *\\($\\|%\\)") - (progn - (if (memq (car stack-top) '(-> ||)) - (erlang-pop stack)) - ;; Take parent identation + offset, - ;; else just erlang-indent-level if no parent - (if stack - (+ (erlang-caddr (car stack)) - offset) - erlang-indent-level)) - (erlang-skip-blank indent-point) - (current-column))) - (+ (current-column) skip))))) + (progn + (forward-char skip) + (if (looking-at "\\s *\\($\\|%\\)") + (progn + (if (memq (car stack-top) '(-> ||)) + (erlang-pop stack)) + ;; Take parent identation + offset, + ;; else just erlang-indent-level if no parent + (if stack + (+ (erlang-caddr (car stack)) + offset) + erlang-indent-level)) + (erlang-skip-blank indent-point) + (current-column))) + (+ (current-column) skip))))) ;; Does not handle `begin' .. `end'. @@ -3099,51 +3104,51 @@ This assumes that the preceding expression is either simple ;; where the call (forward-sexp -1) will fail when point is at the `#'. (or (ignore-errors - ;; Needed to match the colon in "'foo':'bar'". - (cond ((eq (preceding-char) ?:) - (backward-char 1) - (forward-sexp -1) - (current-column)) - ((eq (preceding-char) ?#) - ;; We may now be at: - ;; - either a construction of a new record - ;; - or update of a record, in which case we want - ;; the column of the expression to be updated. - ;; - ;; To see which of the two cases we are at, we first - ;; move an expression backwards, check for keywords, - ;; then immediately an expression forwards. Moving - ;; backwards skips past tokens like `,' or `->', but - ;; when moving forwards again, we won't skip past such - ;; tokens. We use this: if, after having moved - ;; forwards, we're back where we started, then it was - ;; a record update. - ;; The check for keywords is to detect cases like: - ;; case Something of #record_construction{...} - (backward-char 1) - (let ((record-start (point)) - (record-start-col (current-column))) - (forward-sexp -1) - (let ((preceding-expr-col (current-column)) - ;; white space definition according to erl_scan - (white-space "\000-\040\200-\240")) - (if (erlang-at-keyword) - ;; The (forward-sexp -1) call moved past a keyword - (1+ record-start-col) - (forward-sexp 1) - (skip-chars-forward white-space record-start) - ;; Are we back where we started? If so, it was an update. - (if (= (point) record-start) - preceding-expr-col - (goto-char record-start) - (1+ (current-column))))))) - (t col))) + ;; Needed to match the colon in "'foo':'bar'". + (cond ((eq (preceding-char) ?:) + (backward-char 1) + (forward-sexp -1) + (current-column)) + ((eq (preceding-char) ?#) + ;; We may now be at: + ;; - either a construction of a new record + ;; - or update of a record, in which case we want + ;; the column of the expression to be updated. + ;; + ;; To see which of the two cases we are at, we first + ;; move an expression backwards, check for keywords, + ;; then immediately an expression forwards. Moving + ;; backwards skips past tokens like `,' or `->', but + ;; when moving forwards again, we won't skip past such + ;; tokens. We use this: if, after having moved + ;; forwards, we're back where we started, then it was + ;; a record update. + ;; The check for keywords is to detect cases like: + ;; case Something of #record_construction{...} + (backward-char 1) + (let ((record-start (point)) + (record-start-col (current-column))) + (forward-sexp -1) + (let ((preceding-expr-col (current-column)) + ;; white space definition according to erl_scan + (white-space "\000-\040\200-\240")) + (if (erlang-at-keyword) + ;; The (forward-sexp -1) call moved past a keyword + (1+ record-start-col) + (forward-sexp 1) + (skip-chars-forward white-space record-start) + ;; Are we back where we started? If so, it was an update. + (if (= (point) record-start) + preceding-expr-col + (goto-char record-start) + (1+ (current-column))))))) + (t col))) col)))) -(defun erlang-indent-parenthesis (stack-position) +(defun erlang-indent-parenthesis (stack-position) (let ((previous (erlang-indent-find-preceding-expr))) (if (> previous stack-position) - (+ stack-position erlang-argument-indent) + (+ stack-position erlang-argument-indent) (+ previous erlang-argument-indent)))) (defun erlang-skip-blank (&optional lim) @@ -3152,20 +3157,20 @@ This assumes that the preceding expression is either simple (let (stop) (while (and (not stop) (< (point) lim)) (cond ((= (following-char) ?%) - (skip-chars-forward "^\n" lim)) - ((= (following-char) ?\n) - (skip-chars-forward "\n" lim)) - ((looking-at "\\s ") - (if (re-search-forward "\\S " lim 'move) - (forward-char -1))) - (t - (setq stop t)))) + (skip-chars-forward "^\n" lim)) + ((= (following-char) ?\n) + (skip-chars-forward "\n" lim)) + ((looking-at "\\s ") + (if (re-search-forward "\\S " lim 'move) + (forward-char -1))) + (t + (setq stop t)))) stop)) (defun erlang-at-keyword () "Are we looking at an Erlang keyword which will increase indentation?" (looking-at (concat "\\(when\\|if\\|fun\\|case\\|begin\\|" - "of\\|receive\\|after\\|catch\\|try\\)\\b"))) + "of\\|receive\\|after\\|catch\\|try\\)\\b"))) (defun erlang-at-operator () "Are we looking at an Erlang operator?" @@ -3178,14 +3183,14 @@ This assumes that the preceding expression is either simple Used both by `indent-for-comment' and the Erlang specific indentation commands." (cond ((looking-at "%%%") 0) - ((looking-at "%%") - (or (erlang-calculate-indent) - (current-indentation))) - (t - (save-excursion - (skip-chars-backward " \t") - (max (if (bolp) 0 (1+ (current-column))) - comment-column))))) + ((looking-at "%%") + (or (erlang-calculate-indent) + (current-indentation))) + (t + (save-excursion + (skip-chars-backward " \t") + (max (if (bolp) 0 (1+ (current-column))) + comment-column))))) ;;; Erlang movement commands @@ -3213,18 +3218,18 @@ Return t unless search stops due to end of buffer." ;; that the regexp below includes the last character of the ;; previous line. (if (bobp) - (or (looking-at "\n") - (forward-char 1)) - (forward-char -1) - (if (looking-at "\\`\n") - (forward-char 1)))) + (or (looking-at "\n") + (forward-char 1)) + (forward-char -1) + (if (looking-at "\\`\n") + (forward-char 1)))) ;; The regexp matches a function header that isn't ;; included in a string. (and (re-search-forward "\\(\\`\\|\\`\n\\|[^\\]\n\\)\\(-?[a-z]\\|'\\|-\\)" - nil 'move (- arg)) + nil 'move (- arg)) (let ((beg (match-beginning 2))) - (and beg (goto-char beg)) - t))) + (and beg (goto-char beg)) + t))) (defun erlang-end-of-clause (&optional arg) "Move to the end of the current clause. @@ -3270,22 +3275,22 @@ Return t unless search stops due to end of buffer." ;; Search backward ((> arg 0) (while (and (> arg 0) - (and (erlang-beginning-of-clause 1) - (let ((start (point)) - (name (erlang-name-of-function)) - (arity (erlang-get-function-arity))) - ;; Note: "arity" is nil for e.g. "-import", hence - ;; two "-import" clauses are not considered to - ;; be part of the same function. - (while (and (erlang-beginning-of-clause 1) - (string-equal name - (erlang-name-of-function)) - arity - (equal arity - (erlang-get-function-arity))) - (setq start (point))) - (goto-char start) - t))) + (and (erlang-beginning-of-clause 1) + (let ((start (point)) + (name (erlang-name-of-function)) + (arity (erlang-get-function-arity))) + ;; Note: "arity" is nil for e.g. "-import", hence + ;; two "-import" clauses are not considered to + ;; be part of the same function. + (while (and (erlang-beginning-of-clause 1) + (string-equal name + (erlang-name-of-function)) + arity + (equal arity + (erlang-get-function-arity))) + (setq start (point))) + (goto-char start) + t))) (setq arg (1- arg)))) ;; Search forward ((< arg 0) @@ -3293,19 +3298,19 @@ Return t unless search stops due to end of buffer." (erlang-beginning-of-clause 1) ;; Step -arg functions forward. (while (and (< arg 0) - ;; Step one function forward, or stop if the end of - ;; the buffer was reached. Return t if we found the - ;; function. - (let ((name (erlang-name-of-function)) - (arity (erlang-get-function-arity)) - (found (erlang-beginning-of-clause -1))) - (while (and found - (string-equal name (erlang-name-of-function)) - arity - (equal arity - (erlang-get-function-arity))) - (setq found (erlang-beginning-of-clause -1))) - found)) + ;; Step one function forward, or stop if the end of + ;; the buffer was reached. Return t if we found the + ;; function. + (let ((name (erlang-name-of-function)) + (arity (erlang-get-function-arity)) + (found (erlang-beginning-of-clause -1))) + (while (and found + (string-equal name (erlang-name-of-function)) + arity + (equal arity + (erlang-get-function-arity))) + (setq found (erlang-beginning-of-clause -1))) + found)) (setq arg (1+ arg))))) (zerop arg)) @@ -3321,35 +3326,35 @@ With negative argument go towards the beginning of the buffer." ;; Forward (while (and (> arg 0) (< (point) (point-max))) (let ((pos (point))) - (while (progn - (if (and first - (progn - (forward-char 1) - (erlang-beginning-of-clause 1))) - nil - (or (bobp) (forward-char -1)) - (erlang-beginning-of-clause -1)) - (setq first nil) - (erlang-pass-over-function) - (skip-chars-forward " \t") - (if (looking-at "[%\n]") - (forward-line 1)) - (<= (point) pos)))) + (while (progn + (if (and first + (progn + (forward-char 1) + (erlang-beginning-of-clause 1))) + nil + (or (bobp) (forward-char -1)) + (erlang-beginning-of-clause -1)) + (setq first nil) + (erlang-pass-over-function) + (skip-chars-forward " \t") + (if (looking-at "[%\n]") + (forward-line 1)) + (<= (point) pos)))) (setq arg (1- arg))) ;; Backward (while (< arg 0) (let ((pos (point))) - (erlang-beginning-of-clause 1) - (erlang-pass-over-function) - (forward-line 1) - (if (>= (point) pos) - (if (erlang-beginning-of-function 2) - (progn - (erlang-pass-over-function) - (skip-chars-forward " \t") - (if (looking-at "[%\n]") - (forward-line 1))) - (goto-char (point-min))))) + (erlang-beginning-of-clause 1) + (erlang-pass-over-function) + (forward-line 1) + (if (>= (point) pos) + (if (erlang-beginning-of-function 2) + (progn + (erlang-pass-over-function) + (skip-chars-forward " \t") + (if (looking-at "[%\n]") + (forward-line 1))) + (goto-char (point-min))))) (setq arg (1+ arg))))) (eval-and-compile @@ -3363,18 +3368,18 @@ With negative argument go towards the beginning of the buffer." ;; Sets the region. In Emacs 19 and XEmacs, we want to activate ;; the region. (condition-case nil - (push-mark (point) nil t) - (error (push-mark (point)))) + (push-mark (point) nil t) + (error (push-mark (point)))) (erlang-beginning-of-function 1) ;; The above function deactivates the mark. (if (boundp 'deactivate-mark) - (funcall (symbol-function 'set) 'deactivate-mark nil))))) + (funcall (symbol-function 'set) 'deactivate-mark nil))))) (defun erlang-pass-over-function () (while (progn - (erlang-skip-blank) - (and (not (looking-at "\\.\\(\\s \\|\n\\|\\s<\\)")) - (not (eobp)))) + (erlang-skip-blank) + (and (not (looking-at "\\.\\(\\s \\|\n\\|\\s<\\)")) + (not (eobp)))) (forward-sexp 1)) (if (not (eobp)) (forward-char 1))) @@ -3383,7 +3388,7 @@ With negative argument go towards the beginning of the buffer." (save-excursion ;; Skip over attribute leader. (if (looking-at "-[ \t]*") - (re-search-forward "-[ \t]*" nil 'move)) + (re-search-forward "-[ \t]*" nil 'move)) (let ((start (point))) (forward-sexp 1) (buffer-substring start (point))))) @@ -3398,54 +3403,54 @@ paragraph of it that point is in, preserving the comment's indentation and initial `%':s." (interactive "P") (let ((has-comment nil) - ;; If has-comment, the appropriate fill-prefix for the comment. - comment-fill-prefix) + ;; If has-comment, the appropriate fill-prefix for the comment. + comment-fill-prefix) ;; Figure out what kind of comment we are looking at. (save-excursion (beginning-of-line) (cond ;; Find the command prefix. ((looking-at (concat "\\s *" comment-start-skip)) - (setq has-comment t) - (setq comment-fill-prefix (buffer-substring (match-beginning 0) - (match-end 0)))) + (setq has-comment t) + (setq comment-fill-prefix (buffer-substring (match-beginning 0) + (match-end 0)))) ;; A line with some code, followed by a comment? Remember that the ;; % which starts the comment shouldn't be part of a string or ;; character. ((progn - (while (not (looking-at "%\\|$")) - (skip-chars-forward "^%\n\"\\\\") - (cond - ((eq (char-after (point)) ?\\) (forward-char 2)) - ((eq (char-after (point)) ?\") (forward-sexp 1)))) - (looking-at comment-start-skip)) - (setq has-comment t) - (setq comment-fill-prefix - (concat (make-string (current-column) ? ) - (buffer-substring (match-beginning 0) (match-end 0))))))) + (while (not (looking-at "%\\|$")) + (skip-chars-forward "^%\n\"\\\\") + (cond + ((eq (char-after (point)) ?\\) (forward-char 2)) + ((eq (char-after (point)) ?\") (forward-sexp 1)))) + (looking-at comment-start-skip)) + (setq has-comment t) + (setq comment-fill-prefix + (concat (make-string (current-column) ? ) + (buffer-substring (match-beginning 0) (match-end 0))))))) (if (not has-comment) - (fill-paragraph justify) + (fill-paragraph justify) ;; Narrow to include only the comment, and then fill the region. (save-restriction - (narrow-to-region - ;; Find the first line we should include in the region to fill. - (save-excursion - (while (and (zerop (forward-line -1)) - (looking-at "^\\s *%"))) - ;; We may have gone to far. Go forward again. - (or (looking-at "^\\s *%") - (forward-line 1)) - (point)) - ;; Find the beginning of the first line past the region to fill. - (save-excursion - (while (progn (forward-line 1) - (looking-at "^\\s *%"))) - (point))) - ;; Lines with only % on them can be paragraph boundaries. - (let ((paragraph-start (concat paragraph-start "\\|^[ \t%]*$")) - (paragraph-separate (concat paragraph-start "\\|^[ \t%]*$")) - (fill-prefix comment-fill-prefix)) - (fill-paragraph justify)))))) + (narrow-to-region + ;; Find the first line we should include in the region to fill. + (save-excursion + (while (and (zerop (forward-line -1)) + (looking-at "^\\s *%"))) + ;; We may have gone to far. Go forward again. + (or (looking-at "^\\s *%") + (forward-line 1)) + (point)) + ;; Find the beginning of the first line past the region to fill. + (save-excursion + (while (progn (forward-line 1) + (looking-at "^\\s *%"))) + (point))) + ;; Lines with only % on them can be paragraph boundaries. + (let ((paragraph-start (concat paragraph-start "\\|^[ \t%]*$")) + (paragraph-separate (concat paragraph-start "\\|^[ \t%]*$")) + (fill-prefix comment-fill-prefix)) + (fill-paragraph justify)))))) (defun erlang-uncomment-region (beg end) @@ -3464,22 +3469,22 @@ first parenthesis is preserved. The point is placed between the parentheses." (interactive) (let ((name (save-excursion - (and (erlang-beginning-of-clause) - (erlang-get-function-name t)))) - (arrow (save-excursion - (and (erlang-beginning-of-clause) - (erlang-get-function-arrow))))) + (and (erlang-beginning-of-clause) + (erlang-get-function-name t)))) + (arrow (save-excursion + (and (erlang-beginning-of-clause) + (erlang-get-function-arrow))))) (if (or (null arrow) (null name)) - (error "Can't find name of current Erlang function")) + (error "Can't find name of current Erlang function")) (if (and (bolp) (eolp)) - nil + nil (end-of-line) (newline)) (insert name) (save-excursion (insert ") " arrow)) (if erlang-new-clause-with-arguments - (erlang-clone-arguments)))) + (erlang-clone-arguments)))) (defun erlang-clone-arguments () @@ -3489,12 +3494,12 @@ The mark is set at the beginning of the inserted text, the point at the end." (interactive) (let ((args (save-excursion - (beginning-of-line) - (and (erlang-beginning-of-clause) - (erlang-get-function-arguments)))) - (p (point))) + (beginning-of-line) + (and (erlang-beginning-of-clause) + (erlang-get-function-arguments)))) + (p (point))) (if (null args) - (error "Can't clone argument list")) + (error "Can't clone argument list")) (insert args) (set-mark p))) @@ -3517,18 +3522,18 @@ Return nil if file contains no `-module' attribute." (widen) (goto-char (point-min)) (let ((md (match-data))) - (unwind-protect - (if (re-search-forward - (eval-when-compile - (concat "^-module\\s *(\\s *\\(\\(" - erlang-atom-regexp - "\\)?\\)\\s *)\\s *\\.")) - (point-max) t) - (erlang-remove-quotes - (erlang-buffer-substring (match-beginning 1) - (match-end 1))) - nil) - (store-match-data md)))))) + (unwind-protect + (if (re-search-forward + (eval-when-compile + (concat "^-module\\s *(\\s *\\(\\(" + erlang-atom-regexp + "\\)?\\)\\s *)\\s *\\.")) + (point-max) t) + (erlang-remove-quotes + (erlang-buffer-substring (match-beginning 1) + (match-end 1))) + nil) + (store-match-data md)))))) (defun erlang-get-module-from-file-name (&optional file) @@ -3548,7 +3553,7 @@ tags system could be used by files written in other languages." nil (setq file (file-name-nondirectory file)) (if (string-match erlang-file-name-extension-regexp file) - (substring file 0 (match-beginning 0)) + (substring file 0 (match-beginning 0)) nil))) @@ -3569,30 +3574,30 @@ corresponds to the order of the parsed Erlang list." (erlang-skip-blank) (forward-char 1) (if (not (eq (preceding-char) ?\[)) - '() ; Not looking at an Erlang list. - (while ; Note: `while' has no body. - (progn - (erlang-skip-blank) - (and (looking-at (eval-when-compile - (concat erlang-atom-regexp "/\\([0-9]+\\)\\>"))) - (progn - (setq res (cons - (cons - (erlang-remove-quotes - (erlang-buffer-substring - (match-beginning 1) (match-end 1))) - (erlang-string-to-int - (erlang-buffer-substring - (match-beginning - (+ 1 erlang-atom-regexp-matches)) - (match-end - (+ 1 erlang-atom-regexp-matches))))) - res)) - (goto-char (match-end 0)) - (erlang-skip-blank) - (forward-char 1) - ;; Test if there are more exported functions. - (eq (preceding-char) ?,)))))) + '() ; Not looking at an Erlang list. + (while ; Note: `while' has no body. + (progn + (erlang-skip-blank) + (and (looking-at (eval-when-compile + (concat erlang-atom-regexp "/\\([0-9]+\\)\\>"))) + (progn + (setq res (cons + (cons + (erlang-remove-quotes + (erlang-buffer-substring + (match-beginning 1) (match-end 1))) + (erlang-string-to-int + (erlang-buffer-substring + (match-beginning + (+ 1 erlang-atom-regexp-matches)) + (match-end + (+ 1 erlang-atom-regexp-matches))))) + res)) + (goto-char (match-end 0)) + (erlang-skip-blank) + (forward-char 1) + ;; Test if there are more exported functions. + (eq (preceding-char) ?,)))))) (nreverse res))) @@ -3604,14 +3609,14 @@ corresponds to the order of the parsed Erlang list." (save-excursion (goto-char (point-min)) (let ((md (match-data)) - (res '())) + (res '())) (unwind-protect - (progn - (while (re-search-forward "^-export\\s *(" (point-max) t) - (erlang-skip-blank) - (setq res (nconc res (erlang-get-function-arity-list)))) - res) - (store-match-data md))))) + (progn + (while (re-search-forward "^-export\\s *(" (point-max) t) + (erlang-skip-blank) + (setq res (nconc res (erlang-get-function-arity-list)))) + res) + (store-match-data md))))) (defun erlang-get-import () @@ -3622,30 +3627,30 @@ function and arity as cdr part." (save-excursion (goto-char (point-min)) (let ((md (match-data)) - (res '())) + (res '())) (unwind-protect - (progn - (while (re-search-forward "^-import\\s *(" (point-max) t) - (erlang-skip-blank) - (if (looking-at erlang-atom-regexp) - (let ((module (erlang-remove-quotes - (erlang-buffer-substring - (match-beginning 0) - (match-end 0))))) - (goto-char (match-end 0)) - (erlang-skip-blank) - (if (eq (following-char) ?,) - (progn - (forward-char 1) - (erlang-skip-blank) - (let ((funcs (erlang-get-function-arity-list)) - (pair (assoc module res))) - (if pair - (setcdr pair (nconc (cdr pair) funcs)) - (setq res (cons (cons module funcs) - res))))))))) - (nreverse res)) - (store-match-data md))))) + (progn + (while (re-search-forward "^-import\\s *(" (point-max) t) + (erlang-skip-blank) + (if (looking-at erlang-atom-regexp) + (let ((module (erlang-remove-quotes + (erlang-buffer-substring + (match-beginning 0) + (match-end 0))))) + (goto-char (match-end 0)) + (erlang-skip-blank) + (if (eq (following-char) ?,) + (progn + (forward-char 1) + (erlang-skip-blank) + (let ((funcs (erlang-get-function-arity-list)) + (pair (assoc module res))) + (if pair + (setcdr pair (nconc (cdr pair) funcs)) + (setq res (cons (cons module funcs) + res))))))))) + (nreverse res)) + (store-match-data md))))) (defun erlang-get-function-name (&optional arg) @@ -3657,12 +3662,12 @@ the first `(' is returned. Normally used in conjunction with `erlang-beginning-of-clause', e.g.: (save-excursion (if (not (eobp)) (forward-char 1)) - (and (erlang-beginning-of-clause) - (erlang-get-function-name t)))" + (and (erlang-beginning-of-clause) + (erlang-get-function-name t)))" (let ((n (if arg 0 1))) (and (looking-at (eval-when-compile - (concat "^" erlang-atom-regexp "\\s *("))) - (erlang-buffer-substring (match-beginning n) (match-end n))))) + (concat "^" erlang-atom-regexp "\\s *("))) + (erlang-buffer-substring (match-beginning n) (match-end n))))) (defun erlang-get-function-arrow () @@ -3671,9 +3676,9 @@ Normally used in conjunction with `erlang-beginning-of-clause', e.g.: Normally used in conjunction with `erlang-beginning-of-clause', e.g.: (save-excursion (if (not (eobp)) (forward-char 1)) - (and (erlang-beginning-of-clause) - (erlang-get-function-arrow)))" - (and + (and (erlang-beginning-of-clause) + (erlang-get-function-arrow)))" + (and (save-excursion (re-search-forward "->" (point-max) t) (erlang-buffer-substring (- (point) 2) (+ (point) 1))))) @@ -3681,33 +3686,33 @@ Normally used in conjunction with `erlang-beginning-of-clause', e.g.: (defun erlang-get-function-arity () "Return the number of arguments of function at point, or nil." (and (looking-at (eval-when-compile - (concat "^" erlang-atom-regexp "\\s *("))) + (concat "^" erlang-atom-regexp "\\s *("))) (save-excursion - (goto-char (match-end 0)) - (condition-case nil - (let ((res 0) - (cont t)) - (while cont - (cond ((eobp) - (setq res nil) - (setq cont nil)) - ((looking-at "\\s *)") - (setq cont nil)) - ((looking-at "\\s *\\($\\|%\\)") - (forward-line 1)) - ((looking-at "\\s *<<[^>]*?>>") - (when (zerop res) - (setq res (+ 1 res))) - (goto-char (match-end 0))) - ((looking-at "\\s *,") - (setq res (+ 1 res)) - (goto-char (match-end 0))) - (t - (when (zerop res) - (setq res (+ 1 res))) - (forward-sexp 1)))) - res) - (error nil))))) + (goto-char (match-end 0)) + (condition-case nil + (let ((res 0) + (cont t)) + (while cont + (cond ((eobp) + (setq res nil) + (setq cont nil)) + ((looking-at "\\s *)") + (setq cont nil)) + ((looking-at "\\s *\\($\\|%\\)") + (forward-line 1)) + ((looking-at "\\s *<<[^>]*?>>") + (when (zerop res) + (setq res (+ 1 res))) + (goto-char (match-end 0))) + ((looking-at "\\s *,") + (setq res (+ 1 res)) + (goto-char (match-end 0))) + (t + (when (zerop res) + (setq res (+ 1 res))) + (forward-sexp 1)))) + res) + (error nil))))) (defun erlang-get-function-name-and-arity () "Return the name and arity of the function at point, or nil. @@ -3719,15 +3724,15 @@ The return value is a string of the form \"foo/1\"." (defun erlang-get-function-arguments () "Return arguments of current function, or nil." (if (not (looking-at (eval-when-compile - (concat "^" erlang-atom-regexp "\\s *(")))) + (concat "^" erlang-atom-regexp "\\s *(")))) nil (save-excursion (condition-case nil - (let ((start (match-end 0))) - (goto-char (- start 1)) - (forward-sexp) - (erlang-buffer-substring start (- (point) 1))) - (error nil))))) + (let ((start (match-end 0))) + (goto-char (- start 1)) + (forward-sexp) + (erlang-buffer-substring start (- (point) 1))) + (error nil))))) (defun erlang-get-function-under-point () @@ -3744,37 +3749,37 @@ The following could be returned: In the future the list may contain more elements." (save-excursion (let ((md (match-data)) - (res nil)) + (res nil)) (if (eq (char-syntax (following-char)) ? ) - (skip-chars-backward " \t")) + (skip-chars-backward " \t")) (skip-chars-backward "a-zA-Z0-9_:'") (cond ((looking-at (eval-when-compile - (concat erlang-atom-regexp ":" erlang-atom-regexp))) - (setq res (list - (erlang-remove-quotes - (erlang-buffer-substring - (match-beginning 1) (match-end 1))) - (erlang-remove-quotes - (erlang-buffer-substring - (match-beginning (1+ erlang-atom-regexp-matches)) - (match-end (1+ erlang-atom-regexp-matches))))))) - ((looking-at erlang-atom-regexp) - (let ((fk (erlang-remove-quotes - (erlang-buffer-substring - (match-beginning 0) (match-end 0)))) - (mod nil) - (imports (erlang-get-import))) - (while (and imports (null mod)) - (if (assoc fk (cdr (car imports))) - (setq mod (car (car imports))) - (setq imports (cdr imports)))) - (cond ((eq (preceding-char) ?#) - (setq fk (concat "-record(" fk))) - ((eq (preceding-char) ??) - (setq fk (concat "-define(" fk))) - ((and (null mod) (not (member fk erlang-int-bifs))) - (setq mod (erlang-get-module)))) - (setq res (list mod fk))))) + (concat erlang-atom-regexp ":" erlang-atom-regexp))) + (setq res (list + (erlang-remove-quotes + (erlang-buffer-substring + (match-beginning 1) (match-end 1))) + (erlang-remove-quotes + (erlang-buffer-substring + (match-beginning (1+ erlang-atom-regexp-matches)) + (match-end (1+ erlang-atom-regexp-matches))))))) + ((looking-at erlang-atom-regexp) + (let ((fk (erlang-remove-quotes + (erlang-buffer-substring + (match-beginning 0) (match-end 0)))) + (mod nil) + (imports (erlang-get-import))) + (while (and imports (null mod)) + (if (assoc fk (cdr (car imports))) + (setq mod (car (car imports))) + (setq imports (cdr imports)))) + (cond ((eq (preceding-char) ?#) + (setq fk (concat "-record(" fk))) + ((eq (preceding-char) ??) + (setq fk (concat "-define(" fk))) + ((and (null mod) (not (member fk erlang-int-bifs))) + (setq mod (erlang-get-module)))) + (setq res (list mod fk))))) (store-match-data md) res))) @@ -3785,11 +3790,11 @@ In the future the list may contain more elements." "Return STR, possibly with quotes." (let ((case-fold-search nil)) ; force string matching to be case sensitive (if (and (stringp str) - (not (string-match (eval-when-compile - (concat "\\`" erlang-atom-regexp "\\'")) str))) - (progn (if (fboundp 'replace-regexp-in-string) - (setq str (replace-regexp-in-string "'" "\\'" str t t ))) - (concat "'" str "'")) + (not (string-match (eval-when-compile + (concat "\\`" erlang-atom-regexp "\\'")) str))) + (progn (if (fboundp 'replace-regexp-in-string) + (setq str (replace-regexp-in-string "'" "\\'" str t t ))) + (concat "'" str "'")) str))) @@ -3797,9 +3802,9 @@ In the future the list may contain more elements." "Return STR without quotes, if present." (let ((md (match-data))) (prog1 - (if (string-match "\\`'\\(.*\\)'\\'" str) - (substring str 1 -1) - str) + (if (string-match "\\`'\\(.*\\)'\\'" str) + (substring str 1 -1) + str) (store-match-data md)))) (defun erlang-match-next-exported-function (max) @@ -3869,30 +3874,30 @@ is prompted. This function is normally placed in the hook `local-write-file-hooks'." (if erlang-check-module-name - (let ((mn (erlang-add-quotes-if-needed - (erlang-get-module))) - (fn (erlang-add-quotes-if-needed - (erlang-get-module-from-file-name (buffer-file-name))))) - (if (and (stringp mn) (stringp fn)) - (or (string-equal mn fn) - (if (or (eq erlang-check-module-name t) - (y-or-n-p - "Module does not match file name. Modify source? ")) - (save-excursion - (save-restriction - (widen) - (goto-char (point-min)) - (if (re-search-forward - (eval-when-compile - (concat "^-module\\s *(\\s *\\(\\(" - erlang-atom-regexp - "\\)?\\)\\s *)\\s *\\.")) - (point-max) t) - (progn - (goto-char (match-beginning 1)) - (delete-region (match-beginning 1) - (match-end 1)) - (insert fn)))))))))) + (let ((mn (erlang-add-quotes-if-needed + (erlang-get-module))) + (fn (erlang-add-quotes-if-needed + (erlang-get-module-from-file-name (buffer-file-name))))) + (if (and (stringp mn) (stringp fn)) + (or (string-equal mn fn) + (if (or (eq erlang-check-module-name t) + (y-or-n-p + "Module does not match file name. Modify source? ")) + (save-excursion + (save-restriction + (widen) + (goto-char (point-min)) + (if (re-search-forward + (eval-when-compile + (concat "^-module\\s *(\\s *\\(\\(" + erlang-atom-regexp + "\\)?\\)\\s *)\\s *\\.")) + (point-max) t) + (progn + (goto-char (match-beginning 1)) + (delete-region (match-beginning 1) + (match-end 1)) + (insert fn)))))))))) ;; Must return nil since it is added to `local-write-file-hook'. nil) @@ -3918,13 +3923,13 @@ non-whitespace characters following the point on the current line." (interactive "P") (self-insert-command (prefix-numeric-value arg)) (if (or arg - (and (listp erlang-electric-commands) - (not (memq 'erlang-electric-semicolon - erlang-electric-commands))) - (erlang-in-literal) - (not (looking-at "\\s *\\(%.*\\)?$")) - (null (erlang-test-criteria-list - erlang-electric-semicolon-criteria))) + (and (listp erlang-electric-commands) + (not (memq 'erlang-electric-semicolon + erlang-electric-commands))) + (erlang-in-literal) + (not (looking-at "\\s *\\(%.*\\)?$")) + (null (erlang-test-criteria-list + erlang-electric-semicolon-criteria))) (setq erlang-electric-newline-inhibit nil) (setq erlang-electric-newline-inhibit t) (undo-boundary) @@ -3932,20 +3937,20 @@ non-whitespace characters following the point on the current line." (end-of-line) (newline) (if (condition-case nil - (progn (erlang-indent-line) t) - (error (if (bolp) (delete-char -1)))) - (if (not (bolp)) - (save-excursion - (insert " ->")) - (condition-case nil - (progn - (erlang-generate-new-clause) - (if erlang-electric-semicolon-insert-blank-lines - (save-excursion - (beginning-of-line) - (newline - erlang-electric-semicolon-insert-blank-lines)))) - (error (if (bolp) (delete-char -1)))))))) + (progn (erlang-indent-line) t) + (error (if (bolp) (delete-char -1)))) + (if (not (bolp)) + (save-excursion + (insert " ->")) + (condition-case nil + (progn + (erlang-generate-new-clause) + (if erlang-electric-semicolon-insert-blank-lines + (save-excursion + (beginning-of-line) + (newline + erlang-electric-semicolon-insert-blank-lines)))) + (error (if (bolp) (delete-char -1)))))))) (defun erlang-electric-comma (&optional arg) @@ -3961,12 +3966,12 @@ non-whitespace characters following the point on the current line." (self-insert-command (prefix-numeric-value arg)) (if (or arg - (and (listp erlang-electric-commands) - (not (memq 'erlang-electric-comma erlang-electric-commands))) - (erlang-in-literal) - (not (looking-at "\\s *\\(%.*\\)?$")) - (null (erlang-test-criteria-list - erlang-electric-comma-criteria))) + (and (listp erlang-electric-commands) + (not (memq 'erlang-electric-comma erlang-electric-commands))) + (erlang-in-literal) + (not (looking-at "\\s *\\(%.*\\)?$")) + (null (erlang-test-criteria-list + erlang-electric-comma-criteria))) (setq erlang-electric-newline-inhibit nil) (setq erlang-electric-newline-inhibit t) (undo-boundary) @@ -3974,12 +3979,12 @@ non-whitespace characters following the point on the current line." (end-of-line) (newline) (condition-case nil - (erlang-indent-line) + (erlang-indent-line) (error (if (bolp) (delete-char -1)))))) (defun erlang-electric-lt (&optional arg) "Insert a less-than sign, and optionally mark it as an open paren." - + (interactive "p") (self-insert-command arg) @@ -3989,48 +3994,48 @@ non-whitespace characters following the point on the current line." (save-excursion (backward-char 2) (when (and (eq (char-after (point)) ?<) - (not (eq (get-text-property (point) 'category) - 'bitsyntax-open-inner))) - ;; Then mark the two chars... - (put-text-property (point) (1+ (point)) - 'category 'bitsyntax-open-outer) - (forward-char 1) - (put-text-property (point) (1+ (point)) - 'category 'bitsyntax-open-inner) - ;;...and unmark any subsequent less-than chars. - (forward-char 1) - (while (eq (char-after (point)) ?<) - (remove-text-properties (point) (1+ (point)) - '(category nil)) - (forward-char 1)))))) + (not (eq (get-text-property (point) 'category) + 'bitsyntax-open-inner))) + ;; Then mark the two chars... + (put-text-property (point) (1+ (point)) + 'category 'bitsyntax-open-outer) + (forward-char 1) + (put-text-property (point) (1+ (point)) + 'category 'bitsyntax-open-inner) + ;;...and unmark any subsequent less-than chars. + (forward-char 1) + (while (eq (char-after (point)) ?<) + (remove-text-properties (point) (1+ (point)) + '(category nil)) + (forward-char 1)))))) (defun erlang-after-bitsyntax-close () "Return t if point is immediately after a bit-syntax close parenthesis (`>>')." (and (>= (point) 3) (save-excursion - (backward-char 2) - (and (eq (char-after (point)) ?>) - (not (eq (get-text-property (point) 'category) - 'bitsyntax-close-outer)))))) - + (backward-char 2) + (and (eq (char-after (point)) ?>) + (not (eq (get-text-property (point) 'category) + 'bitsyntax-close-outer)))))) + (defun erlang-after-arrow () "Return true if point is immediately after a function arrow (`->')." (and (>= (point) 2) - (and - (save-excursion - (backward-char) - (eq (char-before (point)) ?-)) - (or (not (listp erlang-electric-commands)) - (memq 'erlang-electric-gt - erlang-electric-commands)) - (not (erlang-in-literal)) - (looking-at "\\s *\\(%.*\\)?$") - (erlang-test-criteria-list erlang-electric-arrow-criteria)))) + (and + (save-excursion + (backward-char) + (eq (char-before (point)) ?-)) + (or (not (listp erlang-electric-commands)) + (memq 'erlang-electric-gt + erlang-electric-commands)) + (not (erlang-in-literal)) + (looking-at "\\s *\\(%.*\\)?$") + (erlang-test-criteria-list erlang-electric-arrow-criteria)))) (defun erlang-electric-gt (&optional arg) "Insert a greater-than sign, and optionally mark it as a close paren." - + (interactive "p") (self-insert-command arg) @@ -4041,17 +4046,17 @@ non-whitespace characters following the point on the current line." (save-excursion ;; Then mark the two chars... (backward-char 2) - (put-text-property (point) (1+ (point)) - 'category 'bitsyntax-close-inner) + (put-text-property (point) (1+ (point)) + 'category 'bitsyntax-close-inner) (forward-char) (put-text-property (point) (1+ (point)) - 'category 'bitsyntax-close-outer) + 'category 'bitsyntax-close-outer) ;;...and unmark any subsequent greater-than chars. (forward-char) (while (eq (char-after (point)) ?>) - (remove-text-properties (point) (1+ (point)) - '(category nil)) - (forward-char)))) + (remove-text-properties (point) (1+ (point)) + '(category nil)) + (forward-char)))) ;; Did we just write a function arrow (`->')? ((erlang-after-arrow) @@ -4060,13 +4065,13 @@ non-whitespace characters following the point on the current line." (end-of-line) (newline) (condition-case nil - (erlang-indent-line) - (error (if (bolp) (delete-char -1)))))) + (erlang-indent-line) + (error (if (bolp) (delete-char -1)))))) ;; Then it's just a plain greater-than. (t nil))) - + (defun erlang-electric-arrow\ off (&optional arg) "Insert a '>'-sign and possibly a new indented line. @@ -4086,22 +4091,22 @@ After being split/merged into `erlang-after-arrow' and (let ((prec (preceding-char))) (self-insert-command (prefix-numeric-value arg)) (if (or arg - (and (listp erlang-electric-commands) - (not (memq 'erlang-electric-arrow - erlang-electric-commands))) - (not (eq prec ?-)) - (erlang-in-literal) - (not (looking-at "\\s *\\(%.*\\)?$")) - (null (erlang-test-criteria-list - erlang-electric-arrow-criteria))) - (setq erlang-electric-newline-inhibit nil) + (and (listp erlang-electric-commands) + (not (memq 'erlang-electric-arrow + erlang-electric-commands))) + (not (eq prec ?-)) + (erlang-in-literal) + (not (looking-at "\\s *\\(%.*\\)?$")) + (null (erlang-test-criteria-list + erlang-electric-arrow-criteria))) + (setq erlang-electric-newline-inhibit nil) (setq erlang-electric-newline-inhibit t) (undo-boundary) (end-of-line) (newline) (condition-case nil - (erlang-indent-line) - (error (if (bolp) (delete-char -1))))))) + (erlang-indent-line) + (error (if (bolp) (delete-char -1))))))) (defun erlang-electric-newline (&optional arg) @@ -4116,30 +4121,30 @@ Should the previous command be another electric command we assume that the user pressed newline out of old habit, hence we will do nothing." (interactive "P") (cond ((and (not arg) - erlang-electric-newline-inhibit - (memq last-command erlang-electric-newline-inhibit-list)) - ()) ; Do nothing! - ((or arg - (and (listp erlang-electric-commands) - (not (memq 'erlang-electric-newline - erlang-electric-commands))) - (null (erlang-test-criteria-list - erlang-electric-newline-criteria))) - (newline (prefix-numeric-value arg))) - (t - (if (and comment-multi-line - (save-excursion - (beginning-of-line) - (looking-at (concat "\\s *" comment-start-skip)))) - (let ((str (buffer-substring - (or (match-end 1) (match-beginning 0)) - (min (match-end 0) (point))))) - (newline) - (undo-boundary) - (insert str)) - (newline) - (undo-boundary) - (indent-according-to-mode))))) + erlang-electric-newline-inhibit + (memq last-command erlang-electric-newline-inhibit-list)) + ()) ; Do nothing! + ((or arg + (and (listp erlang-electric-commands) + (not (memq 'erlang-electric-newline + erlang-electric-commands))) + (null (erlang-test-criteria-list + erlang-electric-newline-criteria))) + (newline (prefix-numeric-value arg))) + (t + (if (and comment-multi-line + (save-excursion + (beginning-of-line) + (looking-at (concat "\\s *" comment-start-skip)))) + (let ((str (buffer-substring + (or (match-end 1) (match-beginning 0)) + (min (match-end 0) (point))))) + (newline) + (undo-boundary) + (insert str)) + (newline) + (undo-boundary) + (indent-according-to-mode))))) (defun erlang-test-criteria-list (criteria) @@ -4164,14 +4169,14 @@ Return t if criteria fulfilled, nil otherwise." t (save-excursion (let ((answer nil)) - (while (and criteria (null answer)) - (if (eq (car criteria) t) - (setq answer t) - (setq answer (funcall (car criteria)))) - (setq criteria (cdr criteria))) - (if (and answer (not (eq answer 'stop))) - t - nil))))) + (while (and criteria (null answer)) + (if (eq (car criteria) t) + (setq answer t) + (setq answer (funcall (car criteria)))) + (setq criteria (cdr criteria))) + (if (and answer (not (eq answer 'stop))) + t + nil))))) (defun erlang-in-literal (&optional lim) @@ -4182,11 +4187,11 @@ Should the point be inside none of the above mentioned types of context, nil is returned." (save-excursion (let* ((lim (or lim (save-excursion - (erlang-beginning-of-clause) - (point)))) - (state (if (fboundp 'syntax-ppss) ; post Emacs 21.3 - (funcall (symbol-function 'syntax-ppss)) - (parse-partial-sexp lim (point))))) + (erlang-beginning-of-clause) + (point)))) + (state (if (fboundp 'syntax-ppss) ; post Emacs 21.3 + (funcall (symbol-function 'syntax-ppss)) + (parse-partial-sexp lim (point))))) (cond ((eq (nth 3 state) ?') 'atom) ((nth 3 state) 'string) @@ -4200,7 +4205,7 @@ context, nil is returned." This function is designed to be a member of a criteria list." (eq (save-excursion (erlang-skip-blank) (point)) (save-excursion - (erlang-beginning-of-function -1) (point)))) + (erlang-beginning-of-function -1) (point)))) (defun erlang-at-end-of-clause-p () @@ -4209,7 +4214,7 @@ This function is designed to be a member of a criteria list." This function is designed to be a member of a criteria list." (eq (save-excursion (erlang-skip-blank) (point)) (save-excursion - (erlang-beginning-of-clause -1) (point)))) + (erlang-beginning-of-clause -1) (point)))) (defun erlang-stop-when-inside-argument-list () @@ -4221,22 +4226,22 @@ after `||', `stop' is not returned. This function is designed to be a member of a criteria list." (save-excursion (condition-case nil - (let ((orig-point (point)) - (state nil)) - (up-list -1) - (if (not (eq (following-char) ?\[)) - 'stop - ;; Do not return `stop' when inside a list comprehension - ;; construction. (The point must be after `||'). - (while (< (point) orig-point) + (let ((orig-point (point)) + (state nil)) + (up-list -1) + (if (not (eq (following-char) ?\[)) + 'stop + ;; Do not return `stop' when inside a list comprehension + ;; construction. (The point must be after `||'). + (while (< (point) orig-point) (let ((pt (point))) (setq state (erlang-partial-parse pt orig-point state)) (if (= pt (point)) (error "Illegal syntax")))) - (if (and (car state) (eq (car (car (car state))) '||)) - nil - 'stop))) - (error + (if (and (car state) (eq (car (car (car state))) '||)) + nil + 'stop))) + (error nil)))) @@ -4247,11 +4252,11 @@ This function is designed to be a member of a criteria list." (save-excursion (beginning-of-line) (if (and (looking-at (eval-when-compile - (concat "^" erlang-atom-regexp "\\s *("))) - (not (looking-at - (eval-when-compile - (concat "^" erlang-atom-regexp ".*->"))))) - 'stop + (concat "^" erlang-atom-regexp "\\s *("))) + (not (looking-at + (eval-when-compile + (concat "^" erlang-atom-regexp ".*->"))))) + 'stop nil))) @@ -4276,13 +4281,13 @@ A line containing only spaces and tabs is considered empty. This function is designed to be a member of a criteria list." (and erlang-next-lines-empty-threshold (save-excursion - (let ((left erlang-next-lines-empty-threshold) - (cont t)) - (while (and cont (> left 0)) - (forward-line 1) - (setq cont (looking-at "\\s *$")) - (setq left (- left 1))) - cont)))) + (let ((left erlang-next-lines-empty-threshold) + (cont t)) + (while (and cont (> left 0)) + (forward-line 1) + (setq cont (looking-at "\\s *$")) + (setq left (- left 1))) + cont)))) (defun erlang-at-keyword-end-p () @@ -4301,9 +4306,9 @@ This function is designed to be a member of a criteria list." (eval-when-compile (if (or (featurep 'bytecomp) - (featurep 'byte-compile)) + (featurep 'byte-compile)) (progn - (require 'etags)))) + (require 'etags)))) ;; Variables: @@ -4354,11 +4359,11 @@ is not implemented under XEmacs. (Hint: The Emacs 19 etags module works under XEmacs.)" (interactive) (cond ((= erlang-emacs-major-version 18) - (require 'tags) - (erlang-tags-define-keys (current-local-map)) - (setq erlang-tags-installed t)) - (t - (require 'etags) + (require 'tags) + (erlang-tags-define-keys (current-local-map)) + (setq erlang-tags-installed t)) + (t + (require 'etags) (set (make-local-variable 'find-tag-default-function) 'erlang-find-tag-for-completion) (if (>= emacs-major-version 25) @@ -4383,11 +4388,11 @@ works under XEmacs.)" (let ((alist erlang-tags-function-alist)) (while alist (let* ((old (car (car alist))) - (new (cdr (car alist))) - (keys (append (where-is-internal old global-map)))) - (while keys - (define-key map (car keys) new) - (setq keys (cdr keys)))) + (new (cdr (car alist))) + (keys (append (where-is-internal old global-map)))) + (while keys + (define-key map (car keys) new) + (setq keys (cdr keys)))) (setq alist (cdr alist)))) ;; Update the menu. (erlang-menu-substitute erlang-menu-base-items erlang-tags-function-alist) @@ -4400,11 +4405,11 @@ Search `-import' list of imported functions. Single quotes are been stripped away." (let ((mod-func (erlang-get-function-under-point))) (cond ((null mod-func) - nil) - ((null (car mod-func)) - (nth 1 mod-func)) - (t - (concat (car mod-func) ":" (nth 1 mod-func)))))) + nil) + ((null (car mod-func)) + (nth 1 mod-func)) + (t + (concat (car mod-func) ":" (nth 1 mod-func)))))) ;; Return `t' since it is used inside `tags-loop-form'. @@ -4423,31 +4428,31 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (defun erlang-find-tag-other-window (tagname &optional next-p regexp-p) "Like `find-tag-other-window' but aware of Erlang modules." (interactive (erlang-tag-interactive - "Find `module:tag' or `tag' other window: ")) + "Find `module:tag' or `tag' other window: ")) ;; This is to deal with the case where the tag is found in the ;; selected window's buffer; without this, point is moved in both ;; windows. To prevent this, we save the selected window's point ;; before doing find-tag-noselect, and restore it afterwards. (let* ((window-point (window-point (selected-window))) - (tagbuf (erlang-find-tag-noselect tagname next-p regexp-p)) - (tagpoint (progn (set-buffer tagbuf) (point)))) + (tagbuf (erlang-find-tag-noselect tagname next-p regexp-p)) + (tagpoint (progn (set-buffer tagbuf) (point)))) (set-window-point (prog1 - (selected-window) - (switch-to-buffer-other-window tagbuf) - ;; We have to set this new window's point; it - ;; might already have been displaying a - ;; different portion of tagbuf, in which case - ;; switch-to-buffer-other-window doesn't set - ;; the window's point from the buffer. - (set-window-point (selected-window) tagpoint)) - window-point))) + (selected-window) + (switch-to-buffer-other-window tagbuf) + ;; We have to set this new window's point; it + ;; might already have been displaying a + ;; different portion of tagbuf, in which case + ;; switch-to-buffer-other-window doesn't set + ;; the window's point from the buffer. + (set-window-point (selected-window) tagpoint)) + window-point))) (defun erlang-find-tag-other-frame (tagname &optional next-p) "Like `find-tag-other-frame' but aware of Erlang modules." (interactive (erlang-tag-interactive - "Find `module:tag' or `tag' other frame: ")) + "Find `module:tag' or `tag' other frame: ")) (let ((pop-up-frames t)) (erlang-find-tag-other-window tagname next-p))) @@ -4455,13 +4460,13 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (defun erlang-find-tag-regexp (regexp &optional next-p other-window) "Like `find-tag-regexp' but aware of Erlang modules." (interactive (if (fboundp 'find-tag-regexp) - (erlang-tag-interactive - "Find `module:regexp' or `regexp': ") - (error "This version of Emacs can't find tags by regexps"))) + (erlang-tag-interactive + "Find `module:regexp' or `regexp': ") + (error "This version of Emacs can't find tags by regexps"))) (funcall (if other-window - 'erlang-find-tag-other-window - 'erlang-find-tag) - regexp next-p t)) + 'erlang-find-tag-other-window + 'erlang-find-tag) + regexp next-p t)) ;; Just like C-u M-. This could be added to the menu. @@ -4470,7 +4475,7 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (interactive) (let ((current-prefix-arg '(4))) (if erlang-tags-installed - (call-interactively 'erlang-find-tag) + (call-interactively 'erlang-find-tag) (call-interactively 'find-tag)))) @@ -4482,9 +4487,9 @@ Tags can be given on the forms `tag', `module:', `module:tag'." ;; without extension and directory matches the module. ;; ;; * `module:tag' -;; Emacs 19: Replace test functions with functions aware of -;; Erlang modules. Tricky because the etags system wasn't -;; built for these kind of operations... +;; Emacs 19: Replace test functions with functions aware of +;; Erlang modules. Tricky because the etags system wasn't +;; built for these kind of operations... ;; ;; Emacs 18: We loop over `find-tag' until we find a file ;; whose module matches the requested module. The @@ -4503,78 +4508,78 @@ Tags can be given on the forms `tag', `module:', `module:tag'." ;; know where to restart a tags command. (if (boundp 'tags-loop-form) (funcall (symbol-function 'set) - 'tags-loop-form '(erlang-find-tag nil t))) + 'tags-loop-form '(erlang-find-tag nil t))) (save-window-excursion (cond ((string-match ":$" modtagname) ;; Only the module name was given. Read all files whose file name ;; match. (let ((modname (substring modtagname 0 (match-beginning 0))) - (file nil)) - (if (not next-p) - (save-excursion - (visit-tags-table-buffer) - (setq erlang-tags-file-list - (funcall (symbol-function 'tags-table-files))))) - (while (null file) - (or erlang-tags-file-list - (save-excursion - (if (and (featurep 'etags) - (funcall - (symbol-function 'visit-tags-table-buffer) 'same) - (funcall - (symbol-function 'visit-tags-table-buffer) t)) - (setq erlang-tags-file-list - (funcall (symbol-function 'tags-table-files))) - (error "No %stags containing %s" (if next-p "more " "") - modtagname)))) - (if erlang-tags-file-list - (let ((this-module (erlang-get-module-from-file-name - (car erlang-tags-file-list)))) - (if (and (stringp this-module) - (string= modname this-module)) - (setq file (car erlang-tags-file-list))) - (setq erlang-tags-file-list (cdr erlang-tags-file-list))))) - (set-buffer (or (get-file-buffer file) - (find-file-noselect file))))) + (file nil)) + (if (not next-p) + (save-excursion + (visit-tags-table-buffer) + (setq erlang-tags-file-list + (funcall (symbol-function 'tags-table-files))))) + (while (null file) + (or erlang-tags-file-list + (save-excursion + (if (and (featurep 'etags) + (funcall + (symbol-function 'visit-tags-table-buffer) 'same) + (funcall + (symbol-function 'visit-tags-table-buffer) t)) + (setq erlang-tags-file-list + (funcall (symbol-function 'tags-table-files))) + (error "No %stags containing %s" (if next-p "more " "") + modtagname)))) + (if erlang-tags-file-list + (let ((this-module (erlang-get-module-from-file-name + (car erlang-tags-file-list)))) + (if (and (stringp this-module) + (string= modname this-module)) + (setq file (car erlang-tags-file-list))) + (setq erlang-tags-file-list (cdr erlang-tags-file-list))))) + (set-buffer (or (get-file-buffer file) + (find-file-noselect file))))) ((string-match ":" modtagname) (if (boundp 'find-tag-tag-order) - ;; Method one: Add module-recognising functions to the - ;; list of order functions. However, the tags system - ;; from Emacs 18, and derives thereof (read: XEmacs) - ;; hasn't got this feature. - (progn - (erlang-tags-install-module-check) - (unwind-protect - (funcall (symbol-function 'find-tag) - modtagname next-p regexp-p) - (erlang-tags-remove-module-check))) - ;; Method two: Call the tags system until a file matching - ;; the module is found. This could result in that many - ;; files are read. (e.g. The tag "foo:file" will take a - ;; while to process.) - (let* ((modname (substring modtagname 0 (match-beginning 0))) - (tagname (substring modtagname (match-end 0) nil)) - (last-tag tagname) - file) - (while - (progn - (funcall (symbol-function 'find-tag) tagname next-p regexp-p) - (setq next-p t) - ;; Determine the module form the file name. (The - ;; alternative, to check `-module', would make this - ;; code useless for non-Erlang programs.) - (setq file (erlang-get-module-from-file-name buffer-file-name)) - (not (and (stringp file) - (string= modname file)))))))) + ;; Method one: Add module-recognising functions to the + ;; list of order functions. However, the tags system + ;; from Emacs 18, and derives thereof (read: XEmacs) + ;; hasn't got this feature. + (progn + (erlang-tags-install-module-check) + (unwind-protect + (funcall (symbol-function 'find-tag) + modtagname next-p regexp-p) + (erlang-tags-remove-module-check))) + ;; Method two: Call the tags system until a file matching + ;; the module is found. This could result in that many + ;; files are read. (e.g. The tag "foo:file" will take a + ;; while to process.) + (let* ((modname (substring modtagname 0 (match-beginning 0))) + (tagname (substring modtagname (match-end 0) nil)) + (last-tag tagname) + file) + (while + (progn + (funcall (symbol-function 'find-tag) tagname next-p regexp-p) + (setq next-p t) + ;; Determine the module form the file name. (The + ;; alternative, to check `-module', would make this + ;; code useless for non-Erlang programs.) + (setq file (erlang-get-module-from-file-name buffer-file-name)) + (not (and (stringp file) + (string= modname file)))))))) (t (funcall (symbol-function 'find-tag) modtagname next-p regexp-p))) - (current-buffer))) ; Return the new buffer. + (current-buffer))) ; Return the new buffer. + - @@ -4591,18 +4596,18 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (require 'tags))) (if current-prefix-arg (list nil (if (< (prefix-numeric-value current-prefix-arg) 0) - '- - t)) + '- + t)) (let* ((default (erlang-find-tag-default)) - (prompt (if default - (format "%s(default %s) " prompt default) - prompt)) - (spec (if (featurep 'etags) - (completing-read prompt 'erlang-tags-complete-tag) - (read-string prompt)))) + (prompt (if default + (format "%s(default %s) " prompt default) + prompt)) + (spec (if (featurep 'etags) + (completing-read prompt 'erlang-tags-complete-tag) + (read-string prompt)))) (list (if (equal spec "") - (or default (error "There is no default tag")) - spec))))) + (or default (error "There is no default tag")) + spec))))) ;; Search tag functions which are aware of Erlang modules. The tactic @@ -4629,21 +4634,21 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (setq erlang-tags-orig-format-hooks (symbol-value 'tags-table-format-hooks)) (funcall (symbol-function 'set) 'tags-table-format-hooks - (cons 'erlang-tags-recognize-tags-table - erlang-tags-orig-format-hooks)) + (cons 'erlang-tags-recognize-tags-table + erlang-tags-orig-format-hooks)) (setq erlang-tags-buffer-list '()) - )) - + )) + ;; Install our functions in the TAGS files already resident. (save-excursion (let ((files (symbol-value 'tags-table-computed-list))) (while files - (if (stringp (car files)) - (if (get-file-buffer (car files)) - (progn - (set-buffer (get-file-buffer (car files))) - (erlang-tags-install-local)))) - (setq files (cdr files)))))) + (if (stringp (car files)) + (if (get-file-buffer (car files)) + (progn + (set-buffer (get-file-buffer (car files))) + (erlang-tags-install-local)))) + (setq files (cdr files)))))) (defun erlang-tags-install-local () @@ -4653,23 +4658,23 @@ Tags can be given on the forms `tag', `module:', `module:tag'." ;; Mark this buffer as "installed" and record. (set (make-local-variable 'erlang-tags-buffer-installed-p) t) (setq erlang-tags-buffer-list - (cons (current-buffer) erlang-tags-buffer-list)) + (cons (current-buffer) erlang-tags-buffer-list)) ;; Save the original values. (set (make-local-variable 'erlang-tags-orig-tag-order) - (symbol-value 'find-tag-tag-order)) + (symbol-value 'find-tag-tag-order)) (set (make-local-variable 'erlang-tags-orig-regexp-tag-order) - (symbol-value 'find-tag-regexp-tag-order)) + (symbol-value 'find-tag-regexp-tag-order)) (set (make-local-variable 'erlang-tags-orig-search-function) - (symbol-value 'find-tag-search-function)) + (symbol-value 'find-tag-search-function)) (set (make-local-variable 'erlang-tags-orig-regexp-search-function) - (symbol-value 'find-tag-regexp-search-function)) + (symbol-value 'find-tag-regexp-search-function)) ;; Install our own functions. (set (make-local-variable 'find-tag-search-function) - 'erlang-tags-search-forward) + 'erlang-tags-search-forward) (set (make-local-variable 'find-tag-regexp-search-function) - 'erlang-tags-regexp-search-forward) + 'erlang-tags-regexp-search-forward) (set (make-local-variable 'find-tag-tag-order) (mapcar #'erlang-make-order-function-aware-of-modules erlang-tags-orig-tag-order)) @@ -4697,13 +4702,13 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (cond ((>= erlang-emacs-major-version 20) (funcall (symbol-function 'set) - 'tags-table-format-functions - erlang-tags-orig-format-functions) + 'tags-table-format-functions + erlang-tags-orig-format-functions) ) - (t + (t (funcall (symbol-function 'set) - 'tags-table-format-hooks - erlang-tags-orig-format-hooks) + 'tags-table-format-hooks + erlang-tags-orig-format-hooks) )) ;; Remove our functions from the TAGS files. (Note that @@ -4712,11 +4717,11 @@ Tags can be given on the forms `tag', `module:', `module:tag'." (save-excursion (let ((buffers erlang-tags-buffer-list)) (while buffers - (if (buffer-name (car buffers)) - (progn - (set-buffer (car buffers)) - (erlang-tags-remove-local))) - (setq buffers (cdr buffers)))))) + (if (buffer-name (car buffers)) + (progn + (set-buffer (car buffers)) + (erlang-tags-remove-local))) + (setq buffers (cdr buffers)))))) (defun erlang-tags-remove-local () @@ -4725,14 +4730,14 @@ Tags can be given on the forms `tag', `module:', `module:tag'." () (funcall (symbol-function 'set) 'erlang-tags-buffer-installed-p nil) (funcall (symbol-function 'set) - 'find-tag-tag-order erlang-tags-orig-tag-order) + 'find-tag-tag-order erlang-tags-orig-tag-order) (funcall (symbol-function 'set) - 'find-tag-regexp-tag-order erlang-tags-orig-regexp-tag-order) + 'find-tag-regexp-tag-order erlang-tags-orig-regexp-tag-order) (funcall (symbol-function 'set) - 'find-tag-search-function erlang-tags-orig-search-function) + 'find-tag-search-function erlang-tags-orig-search-function) (funcall (symbol-function 'set) - 'find-tag-regexp-search-function - erlang-tags-orig-regexp-search-function))) + 'find-tag-regexp-search-function + erlang-tags-orig-regexp-search-function))) (defun erlang-tags-recognize-tags-table () @@ -4761,10 +4766,10 @@ for a tag on the form `module:tag'." (if (string-match ":" tag) (setq tag (substring tag (match-end 0) nil))) (if (eq erlang-tags-orig-regexp-search-function - 'erlang-tags-regexp-search-forward) + 'erlang-tags-regexp-search-forward) (re-search-forward tag bound noerror count) (funcall erlang-tags-orig-regexp-search-function - tag bound noerror count))) + tag bound noerror count))) ;;; Tags completion, Emacs 19 `etags' specific. ;;; @@ -4810,18 +4815,18 @@ about Erlang modules." ((and erlang-tags-installed (fboundp 'complete-tag) (fboundp 'tags-complete-tag)) ; Emacs 19-22 - (let ((orig-tags-complete-tag (symbol-function 'tags-complete-tag))) - (fset 'tags-complete-tag - (symbol-function 'erlang-tags-complete-tag)) - (unwind-protect + (let ((orig-tags-complete-tag (symbol-function 'tags-complete-tag))) + (fset 'tags-complete-tag + (symbol-function 'erlang-tags-complete-tag)) + (unwind-protect (complete-tag) - (fset 'tags-complete-tag orig-tags-complete-tag)))) - ((fboundp 'complete-tag) ; Emacs 19 + (fset 'tags-complete-tag orig-tags-complete-tag)))) + ((fboundp 'complete-tag) ; Emacs 19 (complete-tag)) - ((fboundp 'tag-complete-symbol) ; XEmacs - (funcall (symbol-function 'tag-complete-symbol))) - (t - (error "This version of Emacs can't complete tags")))) + ((fboundp 'tag-complete-symbol) ; XEmacs + (funcall (symbol-function 'tag-complete-symbol))) + (t + (error "This version of Emacs can't complete tags")))) (defun erlang-find-tag-for-completion () @@ -4845,9 +4850,9 @@ about Erlang modules." ;; If we need to ask for the tag table, allow that. (let ((enable-recursive-minibuffers t)) (visit-tags-table-buffer)) - (if (eq what t) - (all-completions string (erlang-tags-completion-table) predicate) - (try-completion string (erlang-tags-completion-table) predicate))))) + (if (eq what t) + (all-completions string (erlang-tags-completion-table) predicate) + (try-completion string (erlang-tags-completion-table) predicate))))) ;; `tags-completion-table' calls itself recursively, make it @@ -4857,22 +4862,22 @@ about Erlang modules." (defun erlang-tags-completion-table () "Build completion table. Tags on the form `tag' or `module:tag'." (setq erlang-tags-orig-completion-table - (symbol-function 'tags-completion-table)) + (symbol-function 'tags-completion-table)) (fset 'tags-completion-table - (symbol-function 'erlang-tags-completion-table-1)) + (symbol-function 'erlang-tags-completion-table-1)) (unwind-protect (erlang-tags-completion-table-1) (fset 'tags-completion-table - erlang-tags-orig-completion-table))) + erlang-tags-orig-completion-table))) (defun erlang-tags-completion-table-1 () (make-local-variable 'erlang-tags-completion-table) (or erlang-tags-completion-table (let ((tags-completion-table nil) - (tags-completion-table-function - 'erlang-etags-tags-completion-table)) - (funcall erlang-tags-orig-completion-table) - (setq erlang-tags-completion-table tags-completion-table)))) + (tags-completion-table-function + 'erlang-etags-tags-completion-table)) + (funcall erlang-tags-orig-completion-table) + (setq erlang-tags-completion-table tags-completion-table)))) @@ -4973,7 +4978,7 @@ about Erlang modules." (cl-defmethod xref-backend-identifier-completion-table ((_backend (eql erlang-etags))) (let ((erlang-replace-etags-tags-completion-table t)) - (tags-completion-table)))))) + (tags-completion-table)))))) @@ -5215,28 +5220,28 @@ The following special commands are available: ;; Some older versions of comint don't have an input ring. (if (fboundp 'comint-read-input-ring) (progn - (setq comint-input-ring-file-name erlang-input-ring-file-name) - (comint-read-input-ring t) - (make-local-variable 'kill-buffer-hook) - (add-hook 'kill-buffer-hook 'comint-write-input-ring))) + (setq comint-input-ring-file-name erlang-input-ring-file-name) + (comint-read-input-ring t) + (make-local-variable 'kill-buffer-hook) + (add-hook 'kill-buffer-hook 'comint-write-input-ring))) ;; At least in Emacs 21, we need to be in `compilation-minor-mode' ;; for `next-error' to work. We can avoid it clobbering the shell ;; keys thus. (when inferior-erlang-use-cmm (compilation-minor-mode 1) (set (make-local-variable 'minor-mode-overriding-map-alist) - `((compilation-minor-mode - . ,(let ((map (make-sparse-keymap))) - ;; It would be useful to put keymap properties on the - ;; error lines so that we could use RET and mouse-2 - ;; on them directly. - (when (boundp 'compilation-skip-threshold) ; new compile.el - (define-key map [mouse-2] #'erlang-mouse-2-command) - (define-key map "\C-m" #'erlang-RET-command)) - (if (boundp 'compilation-menu-map) - (define-key map [menu-bar compilation] - (cons "Errors" compilation-menu-map))) - map))))) + `((compilation-minor-mode + . ,(let ((map (make-sparse-keymap))) + ;; It would be useful to put keymap properties on the + ;; error lines so that we could use RET and mouse-2 + ;; on them directly. + (when (boundp 'compilation-skip-threshold) ; new compile.el + (define-key map [mouse-2] #'erlang-mouse-2-command) + (define-key map "\C-m" #'erlang-RET-command)) + (if (boundp 'compilation-menu-map) + (define-key map [menu-bar compilation] + (cons "Errors" compilation-menu-map))) + map))))) (erlang-tags-init) (run-hooks 'erlang-shell-mode-hook)) @@ -5246,9 +5251,9 @@ The following special commands are available: Selects Comint or Compilation mode command as appropriate." (interactive "e") (if (save-window-excursion - (save-excursion - (mouse-set-point event) - (consp (get-text-property (line-beginning-position) 'message)))) + (save-excursion + (mouse-set-point event) + (consp (get-text-property (line-beginning-position) 'message)))) (call-interactively (lookup-key compilation-mode-map [mouse-2])) (call-interactively (lookup-key comint-mode-map [mouse-2])))) @@ -5264,7 +5269,7 @@ Selects Comint or Compilation mode command as appropriate." (define-key map "\M-\t" 'erlang-complete-tag) (define-key map "\C-a" 'comint-bol) ; Normally the other way around. (define-key map "\C-c\C-a" 'beginning-of-line) - (define-key map "\C-d" nil) ; Was `comint-delchar-or-maybe-eof' + (define-key map "\C-d" nil) ; Was `comint-delchar-or-maybe-eof' (define-key map "\M-\C-m" 'compile-goto-error) (unless inferior-erlang-use-cmm (define-key map "\C-x`" 'erlang-next-error))) @@ -5338,8 +5343,8 @@ editing control characters: (when current-prefix-arg (list (if (fboundp 'read-shell-command) ;; `read-shell-command' is a new function in Emacs 23. - (read-shell-command "Erlang command: ") - (read-string "Erlang command: "))))) + (read-shell-command "Erlang command: ") + (read-string "Erlang command: "))))) (require 'comint) (let (cmd opts) (if command @@ -5366,16 +5371,16 @@ editing control characters: (setq list-buffers-directory fake-file-name)))) (setq inferior-erlang-process - (get-buffer-process inferior-erlang-buffer)) - (if (> 21 erlang-emacs-major-version) ; funcalls to avoid compiler warnings - (funcall (symbol-function 'set-process-query-on-exit-flag) - inferior-erlang-process nil) + (get-buffer-process inferior-erlang-buffer)) + (if (> 21 erlang-emacs-major-version) ; funcalls to avoid compiler warnings + (funcall (symbol-function 'set-process-query-on-exit-flag) + inferior-erlang-process nil) (funcall (symbol-function 'process-kill-without-query) inferior-erlang-process)) (if erlang-inferior-shell-split-window (switch-to-buffer-other-window inferior-erlang-buffer) - (switch-to-buffer inferior-erlang-buffer)) + (switch-to-buffer inferior-erlang-buffer)) (if (and (not (eq system-type 'windows-nt)) - (eq inferior-erlang-shell-type 'newshell)) + (eq inferior-erlang-shell-type 'newshell)) (setq comint-process-echoes t)) (erlang-shell-mode)) @@ -5407,22 +5412,22 @@ frame will become deselected before the next command." (or (inferior-erlang-running-p) (error "No inferior Erlang process is running")) (let ((win (inferior-erlang-window - inferior-erlang-display-buffer-any-frame)) - (frames-p (fboundp 'selected-frame))) + inferior-erlang-display-buffer-any-frame)) + (frames-p (fboundp 'selected-frame))) (if (null win) - (let ((old-win (selected-window))) - (save-excursion - (switch-to-buffer-other-window inferior-erlang-buffer) - (setq win (selected-window))) - (select-window old-win)) + (let ((old-win (selected-window))) + (save-excursion + (switch-to-buffer-other-window inferior-erlang-buffer) + (setq win (selected-window))) + (select-window old-win)) (if (and window-system - frames-p - (or select - (eq inferior-erlang-display-buffer-any-frame 'raise)) - (not (eq (selected-frame) (window-frame win)))) - (raise-frame (window-frame win)))) + frames-p + (or select + (eq inferior-erlang-display-buffer-any-frame 'raise)) + (not (eq (selected-frame) (window-frame win)))) + (raise-frame (window-frame win)))) (if select - (select-window win)) + (select-window win)) (sit-for 0) win)) @@ -5439,8 +5444,8 @@ frame will become deselected before the next command." "Return the window containing the inferior Erlang, or nil." (and (inferior-erlang-running-p) (if (and all-frames (>= erlang-emacs-major-version 19)) - (get-buffer-window inferior-erlang-buffer t) - (get-buffer-window inferior-erlang-buffer)))) + (get-buffer-window inferior-erlang-buffer t) + (get-buffer-window inferior-erlang-buffer)))) (defun inferior-erlang-wait-prompt () @@ -5448,21 +5453,21 @@ frame will become deselected before the next command." (if (eq inferior-erlang-prompt-timeout t) () (or (inferior-erlang-running-p) - (error "No inferior Erlang shell is running")) + (error "No inferior Erlang shell is running")) (with-current-buffer inferior-erlang-buffer (let ((msg nil)) - (while (save-excursion - (goto-char (process-mark inferior-erlang-process)) - (forward-line 0) - (not (looking-at comint-prompt-regexp))) - (if msg - () - (setq msg t) - (message "Waiting for Erlang shell prompt (press C-g to abort).")) - (or (accept-process-output inferior-erlang-process - inferior-erlang-prompt-timeout) - (error "No Erlang shell prompt before timeout"))) - (if msg (message "")))))) + (while (save-excursion + (goto-char (process-mark inferior-erlang-process)) + (forward-line 0) + (not (looking-at comint-prompt-regexp))) + (if msg + () + (setq msg t) + (message "Waiting for Erlang shell prompt (press C-g to abort).")) + (or (accept-process-output inferior-erlang-process + inferior-erlang-prompt-timeout) + (error "No Erlang shell prompt before timeout"))) + (if msg (message "")))))) (defun inferior-erlang-send-empty-cmd-unless-already-at-prompt () "If not already at a prompt, try to send an empty cmd to get a prompt. @@ -5471,12 +5476,12 @@ situations, for instance if a crash or error report from sasl has been printed after the last prompt." (with-current-buffer inferior-erlang-buffer (if (> (point-max) 1) - ;; make sure we get a prompt if buffer contains data - (if (save-excursion - (goto-char (process-mark inferior-erlang-process)) - (forward-line 0) - (not (looking-at comint-prompt-regexp))) - (inferior-erlang-send-command ""))))) + ;; make sure we get a prompt if buffer contains data + (if (save-excursion + (goto-char (process-mark inferior-erlang-process)) + (forward-line 0) + (not (looking-at comint-prompt-regexp))) + (inferior-erlang-send-command ""))))) (autoload 'comint-send-input "comint") @@ -5493,10 +5498,10 @@ Return the position after the newly inserted command." (or (inferior-erlang-running-p) (error "No inferior Erlang process is running")) (let ((old-buffer (current-buffer)) - (insert-point (marker-position (process-mark inferior-erlang-process))) - (insert-length (if comint-process-echoes - 0 - (1+ (length cmd))))) + (insert-point (marker-position (process-mark inferior-erlang-process))) + (insert-length (if comint-process-echoes + 0 + (1+ (length cmd))))) (set-buffer inferior-erlang-buffer) (goto-char insert-point) (insert cmd) @@ -5509,21 +5514,21 @@ Return the position after the newly inserted command." ;; This was previously cautioned against in the Lisp manual. It ;; has been sorted out in Emacs 21. -- fx (let ((comint-eol-on-send nil) - (comint-input-filter (if hist comint-input-filter 'ignore))) + (comint-input-filter (if hist comint-input-filter 'ignore))) (if (and (not erlang-xemacs-p) - (>= emacs-major-version 22)) - (comint-send-input nil t) - (comint-send-input))) + (>= emacs-major-version 22)) + (comint-send-input nil t) + (comint-send-input))) ;; Adjust all windows whose points are incorrect. (if (null comint-process-echoes) - (walk-windows - (function - (lambda (window) - (if (and (eq (window-buffer window) inferior-erlang-buffer) - (= (window-point window) insert-point)) - (set-window-point window - (+ insert-point insert-length))))) - nil t)) + (walk-windows + (function + (lambda (window) + (if (and (eq (window-buffer window) inferior-erlang-buffer) + (= (window-point window) insert-point)) + (set-window-point window + (+ insert-point insert-length))))) + nil t)) (set-buffer old-buffer) (+ insert-point insert-length))) @@ -5532,17 +5537,17 @@ Return the position after the newly inserted command." "Remove `^H' (delete) and the characters it was supposed to remove." (interactive) (if (and (boundp 'comint-last-input-end) - (boundp 'comint-last-output-start)) + (boundp 'comint-last-output-start)) (save-excursion - (goto-char - (if (erlang-interactive-p) - (symbol-value 'comint-last-input-end) - (symbol-value 'comint-last-output-start))) - (while (progn (skip-chars-forward "^\C-h") - (not (eq (point) (point-max)))) - (delete-char 1) - (or (bolp) - (backward-delete-char 1)))))) + (goto-char + (if (erlang-interactive-p) + (symbol-value 'comint-last-input-end) + (symbol-value 'comint-last-output-start))) + (while (progn (skip-chars-forward "^\C-h") + (not (eq (point) (point-max)))) + (delete-char 1) + (or (bolp) + (backward-delete-char 1)))))) ;; Basically `comint-strip-ctrl-m', with a few extra checks. @@ -5550,15 +5555,15 @@ Return the position after the newly inserted command." "Strip trailing `^M' characters from the current output group." (interactive) (if (and (boundp 'comint-last-input-end) - (boundp 'comint-last-output-start)) + (boundp 'comint-last-output-start)) (let ((pmark (process-mark (get-buffer-process (current-buffer))))) - (save-excursion - (goto-char - (if (erlang-interactive-p) - (symbol-value 'comint-last-input-end) - (symbol-value 'comint-last-output-start))) - (while (re-search-forward "\r+$" pmark t) - (replace-match "" t t)))))) + (save-excursion + (goto-char + (if (erlang-interactive-p) + (symbol-value 'comint-last-input-end) + (symbol-value 'comint-last-output-start))) + (while (re-search-forward "\r+$" pmark t) + (replace-match "" t t)))))) (defun inferior-erlang-compile (arg) @@ -5581,18 +5586,18 @@ There exists two workarounds for this bug: (save-some-buffers) (inferior-erlang-prepare-for-input) (let* ((dir (inferior-erlang-compile-outdir)) - (noext (substring (erlang-local-buffer-file-name) 0 -4)) - (opts (append (list (cons 'outdir dir)) - (if current-prefix-arg - (list 'debug_info 'export_all)) - erlang-compile-extra-opts)) - end) + (noext (substring (erlang-local-buffer-file-name) 0 -4)) + (opts (append (list (cons 'outdir dir)) + (if current-prefix-arg + (list 'debug_info 'export_all)) + erlang-compile-extra-opts)) + end) (with-current-buffer inferior-erlang-buffer (when (fboundp 'compilation-forget-errors) (compilation-forget-errors))) (setq end (inferior-erlang-send-command - (inferior-erlang-compute-compile-command noext opts) - nil)) + (inferior-erlang-compute-compile-command noext opts) + nil)) (sit-for 0) (inferior-erlang-wait-prompt) (with-current-buffer inferior-erlang-buffer @@ -5606,7 +5611,7 @@ The buffer is displayed, according to `inferior-erlang-display-buffer' unless the optional NO-DISPLAY is non-nil." (or (inferior-erlang-running-p) (save-excursion - (inferior-erlang))) + (inferior-erlang))) (or (inferior-erlang-running-p) (error "Error starting inferior Erlang shell")) (if (not no-display) @@ -5618,96 +5623,96 @@ unless the optional NO-DISPLAY is non-nil." (defun inferior-erlang-compile-outdir () "Return the directory to compile the current buffer into." (let* ((buffer-dir (directory-file-name - (file-name-directory (erlang-local-buffer-file-name)))) - (parent-dir (directory-file-name - (file-name-directory buffer-dir))) + (file-name-directory (erlang-local-buffer-file-name)))) + (parent-dir (directory-file-name + (file-name-directory buffer-dir))) (ebin-dir (concat (file-name-as-directory parent-dir) "ebin")) - (buffer-dir-base-name (file-name-nondirectory - (expand-file-name - (concat (file-name-as-directory buffer-dir) - "."))))) + (buffer-dir-base-name (file-name-nondirectory + (expand-file-name + (concat (file-name-as-directory buffer-dir) + "."))))) (if (and (string= buffer-dir-base-name "src") - (file-directory-p ebin-dir)) - (file-name-as-directory ebin-dir) + (file-directory-p ebin-dir)) + (file-name-as-directory ebin-dir) (file-name-as-directory buffer-dir)))) (defun inferior-erlang-compute-compile-command (module-name opts) (let ((ccfn erlang-compile-command-function-alist) - (res (inferior-erlang-compute-erl-compile-command module-name opts)) - ccfn-entry - done + (res (inferior-erlang-compute-erl-compile-command module-name opts)) + ccfn-entry + done result) (if (not (null (erlang-local-buffer-file-name))) - (while (and (not done) (not (null ccfn))) - (setq ccfn-entry (car ccfn)) - (setq ccfn (cdr ccfn)) - (if (string-match (car ccfn-entry) (erlang-local-buffer-file-name)) - (let ((c-fn (cdr ccfn-entry))) - (setq done t) - (if (not (null c-fn)) - (setq result (funcall c-fn module-name opts))))))) + (while (and (not done) (not (null ccfn))) + (setq ccfn-entry (car ccfn)) + (setq ccfn (cdr ccfn)) + (if (string-match (car ccfn-entry) (erlang-local-buffer-file-name)) + (let ((c-fn (cdr ccfn-entry))) + (setq done t) + (if (not (null c-fn)) + (setq result (funcall c-fn module-name opts))))))) result)) (defun inferior-erlang-compute-erl-compile-command (module-name opts) (let* ((out-dir-opt (assoc 'outdir opts)) - (out-dir (cdr out-dir-opt))) + (out-dir (cdr out-dir-opt))) (if erlang-compile-use-outdir - (format "%s(\"%s\"%s)." - erlang-compile-erlang-function - module-name - (inferior-erlang-format-comma-opts opts)) + (format "%s(\"%s\"%s)." + erlang-compile-erlang-function + module-name + (inferior-erlang-format-comma-opts opts)) (let (;; Hopefully, noone else will ever use these... - (tmpvar "Tmp7236") - (tmpvar2 "Tmp8742")) - (format - (concat - "f(%s), {ok, %s} = file:get_cwd(), " - "file:set_cwd(\"%s\"), " - "%s = %s(\"%s\"%s), file:set_cwd(%s), f(%s), %s.") - tmpvar2 tmpvar - out-dir - tmpvar2 - erlang-compile-erlang-function - module-name (inferior-erlang-format-comma-opts - (remq out-dir-opt opts)) - tmpvar tmpvar tmpvar2))))) + (tmpvar "Tmp7236") + (tmpvar2 "Tmp8742")) + (format + (concat + "f(%s), {ok, %s} = file:get_cwd(), " + "file:set_cwd(\"%s\"), " + "%s = %s(\"%s\"%s), file:set_cwd(%s), f(%s), %s.") + tmpvar2 tmpvar + out-dir + tmpvar2 + erlang-compile-erlang-function + module-name (inferior-erlang-format-comma-opts + (remq out-dir-opt opts)) + tmpvar tmpvar tmpvar2))))) (defun inferior-erlang-compute-leex-compile-command (module-name opts) (let ((file-name (erlang-local-buffer-file-name)) - (erl-compile-expr (inferior-erlang-remove-any-trailing-dot - (inferior-erlang-compute-erl-compile-command - module-name opts)))) + (erl-compile-expr (inferior-erlang-remove-any-trailing-dot + (inferior-erlang-compute-erl-compile-command + module-name opts)))) (format (concat "f(LErr1__), f(LErr2__), " - "case case leex:file(\"%s\", [%s]) of" - " ok -> ok;" - " {ok,_} -> ok;" - " {ok,_,_} -> ok;" - " LErr1__ -> LErr1__ " - "end of" - " ok -> %s;" - " LErr2__ -> LErr2__ " - "end.") - file-name - (inferior-erlang-format-comma-opts erlang-leex-compile-opts) - erl-compile-expr))) + "case case leex:file(\"%s\", [%s]) of" + " ok -> ok;" + " {ok,_} -> ok;" + " {ok,_,_} -> ok;" + " LErr1__ -> LErr1__ " + "end of" + " ok -> %s;" + " LErr2__ -> LErr2__ " + "end.") + file-name + (inferior-erlang-format-comma-opts erlang-leex-compile-opts) + erl-compile-expr))) (defun inferior-erlang-compute-yecc-compile-command (module-name opts) (let ((file-name (erlang-local-buffer-file-name)) - (erl-compile-expr (inferior-erlang-remove-any-trailing-dot - (inferior-erlang-compute-erl-compile-command - module-name opts)))) + (erl-compile-expr (inferior-erlang-remove-any-trailing-dot + (inferior-erlang-compute-erl-compile-command + module-name opts)))) (format (concat "f(YErr1__), f(YErr2__), " - "case case yecc:file(\"%s\", [%s]) of" - " {ok,_} -> ok;" - " {ok,_,_} -> ok;" - " YErr1__ -> YErr1__ " - "end of" - " ok -> %s;" - " YErr2__ -> YErr2__ " - "end.") - file-name - (inferior-erlang-format-comma-opts erlang-yecc-compile-opts) - erl-compile-expr))) + "case case yecc:file(\"%s\", [%s]) of" + " {ok,_} -> ok;" + " {ok,_,_} -> ok;" + " YErr1__ -> YErr1__ " + "end of" + " ok -> %s;" + " YErr2__ -> YErr2__ " + "end.") + file-name + (inferior-erlang-format-comma-opts erlang-yecc-compile-opts) + erl-compile-expr))) (defun inferior-erlang-remove-any-trailing-dot (str) (if (string= (substring str -1) ".") @@ -5753,11 +5758,11 @@ unless the optional NO-DISPLAY is non-nil." ;; the file name "/some/path/x.erl" without the ;; tramp-prefix "/ssh:host.example.com:". (cond ((null (buffer-file-name)) - nil) - ((erlang-tramp-remote-file-p) - (erlang-tramp-get-localname)) - (t - (buffer-file-name)))) + nil) + ((erlang-tramp-remote-file-p) + (erlang-tramp-get-localname)) + (t + (buffer-file-name)))) (defun erlang-tramp-remote-file-p () (and (fboundp 'tramp-tramp-file-p) @@ -5783,22 +5788,22 @@ unless the optional NO-DISPLAY is non-nil." Capable of finding error messages in an inferior Erlang buffer." (interactive "P") (let ((done nil) - (buf (or (and (boundp 'next-error-last-buffer) - next-error-last-buffer) - (and (boundp 'compilation-last-buffer) - compilation-last-buffer)))) + (buf (or (and (boundp 'next-error-last-buffer) + next-error-last-buffer) + (and (boundp 'compilation-last-buffer) + compilation-last-buffer)))) (if (and (bufferp buf) - (with-current-buffer buf - (and (eq major-mode 'erlang-shell-mode) - (setq major-mode 'compilation-mode)))) - (unwind-protect - (progn - (setq done t) - (next-error argp)) - (with-current-buffer buf - (setq major-mode 'erlang-shell-mode)))) + (with-current-buffer buf + (and (eq major-mode 'erlang-shell-mode) + (setq major-mode 'compilation-mode)))) + (unwind-protect + (progn + (setq done t) + (next-error argp)) + (with-current-buffer buf + (setq major-mode 'erlang-shell-mode)))) (or done - (next-error argp)))) + (next-error argp)))) (defun inferior-erlang-change-directory (&optional dir) @@ -5835,44 +5840,44 @@ sum([], Sum) -> Sum." (interactive "r") (save-excursion (let (;; regexp for matching arrows. without a prefix argument, - ;; the regexp matches function heads. With a prefix, it - ;; matches any arrow. - (re (if current-prefix-arg - "^.*\\(\\)->" - (eval-when-compile - (concat "^" erlang-atom-regexp ".*\\(\\)->")))) - ;; part of regexp matching directly before the arrow - (arrow-match-pos (if current-prefix-arg - 1 - (1+ erlang-atom-regexp-matches))) - ;; accumulator for positions where arrows are found, ordered - ;; by buffer position (from greatest to smallest) - (arrow-positions '()) - ;; accumulator for longest distance from start of line to arrow - (most-indent 0) - ;; marker to track the end of the region we're aligning - (end-marker (progn (goto-char end) - (point-marker)))) + ;; the regexp matches function heads. With a prefix, it + ;; matches any arrow. + (re (if current-prefix-arg + "^.*\\(\\)->" + (eval-when-compile + (concat "^" erlang-atom-regexp ".*\\(\\)->")))) + ;; part of regexp matching directly before the arrow + (arrow-match-pos (if current-prefix-arg + 1 + (1+ erlang-atom-regexp-matches))) + ;; accumulator for positions where arrows are found, ordered + ;; by buffer position (from greatest to smallest) + (arrow-positions '()) + ;; accumulator for longest distance from start of line to arrow + (most-indent 0) + ;; marker to track the end of the region we're aligning + (end-marker (progn (goto-char end) + (point-marker)))) ;; Pass 1: Find the arrow positions, adjust the whitespace ;; before each arrow to one space, and find the greatest ;; indentation level. (goto-char start) (while (re-search-forward re end-marker t) - (goto-char (match-beginning arrow-match-pos)) - (just-one-space) ; adjust whitespace - (setq arrow-positions (cons (point) arrow-positions)) - (setq most-indent (max most-indent (erlang-column-number)))) - (set-marker end-marker nil) ; free the marker + (goto-char (match-beginning arrow-match-pos)) + (just-one-space) ; adjust whitespace + (setq arrow-positions (cons (point) arrow-positions)) + (setq most-indent (max most-indent (erlang-column-number)))) + (set-marker end-marker nil) ; free the marker ;; Pass 2: Insert extra padding so that all arrow indentation is ;; equal. This is done last-to-first by buffer position, so that ;; inserting spaces before one arrow doesn't change the ;; positions of the next ones. (mapc (lambda (arrow-pos) - (goto-char arrow-pos) - (let* ((pad (- most-indent (erlang-column-number)))) - (when (> pad 0) - (insert-char ?\ pad)))) - arrow-positions)))) + (goto-char arrow-pos) + (let* ((pad (- most-indent (erlang-column-number)))) + (when (> pad 0) + (insert-char ?\ pad)))) + arrow-positions)))) (defun erlang-column-number () "Return the column number of the current position in the buffer. @@ -5884,7 +5889,7 @@ Tab characters are counted by their visual width." (save-excursion (erlang-beginning-of-function) (if (looking-at "[a-z0-9_]+") - (match-string 0)))) + (match-string 0)))) ;; Aliases for backward compatibility with older versions of Erlang Mode. ;; @@ -5903,7 +5908,7 @@ it assumes that NEWDEF is loaded." (erlang-obsolete 'calculate-erlang-indent 'erlang-calculate-indent) (erlang-obsolete 'calculate-erlang-stack-indent - 'erlang-calculate-stack-indent) + 'erlang-calculate-stack-indent) (erlang-obsolete 'at-erlang-keyword 'erlang-at-keyword) (erlang-obsolete 'at-erlang-operator 'erlang-at-operator) (erlang-obsolete 'beginning-of-erlang-clause 'erlang-beginning-of-clause) @@ -5918,12 +5923,12 @@ it assumes that NEWDEF is loaded." (defconst erlang-unload-hook (list (lambda () - (when (featurep 'advice) - (ad-unadvise 'Man-notify-when-ready) - (ad-unadvise 'set-visited-file-name))))) + (when (featurep 'advice) + (ad-unadvise 'Man-notify-when-ready) + (ad-unadvise 'set-visited-file-name))))) -(defun erlang-string-to-int (string) +(defun erlang-string-to-int (string) (if (fboundp 'string-to-number) (string-to-number string) (funcall (symbol-function 'string-to-int) string))) @@ -5936,6 +5941,7 @@ it assumes that NEWDEF is loaded." ;; Local variables: ;; coding: iso-8859-1 +;; indent-tabs-mode: nil ;; End: ;;; erlang.el ends here diff --git a/lib/tools/emacs/erldoc.el b/lib/tools/emacs/erldoc.el new file mode 100644 index 0000000000..cb355374d9 --- /dev/null +++ b/lib/tools/emacs/erldoc.el @@ -0,0 +1,508 @@ +;;; erldoc.el --- browse Erlang/OTP documentation -*- lexical-binding: t; -*- + +;; %CopyrightBegin% +;; +;; Copyright Ericsson AB 2016. All Rights Reserved. +;; +;; Licensed under the Apache License, Version 2.0 (the "License"); +;; you may not use this file except in compliance with the License. +;; You may obtain a copy of the License at +;; +;; http://www.apache.org/licenses/LICENSE-2.0 +;; +;; Unless required by applicable law or agreed to in writing, software +;; distributed under the License is distributed on an "AS IS" BASIS, +;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +;; See the License for the specific language governing permissions and +;; limitations under the License. +;; +;; %CopyrightEnd% + +;;; Commentary: + +;; Crawl Erlang/OTP HTML documentation and generate lookup tables. +;; +;; This package depends on `cl-lib', `pcase' and +;; `libxml-parse-html-region'; emacs 24+ compiled with libxml2 should +;; work. On emacs 24.1 and 24.2 do `M-x package-install RET cl-lib +;; RET' to install `cl-lib'. +;; +;; Please customise `erldoc-man-index' to point to your local OTP +;; documentation. +;; +;; To use: +;; +;; (define-key help-map "u" 'erldoc-browse) +;; (define-key help-map "t" 'erldoc-browse-topic) +;; (define-key help-map "a" 'erldoc-apropos) +;; +;; Note: these commands trigger indexing OTP documentation on first +;; run with cache to disk which may take 1-2 minutes. + + +;;; Examples: + +;; 1. `M-x erldoc-browse RET erlang:integer_to_binary/2 RET' opens the +;; `erlang' manual anchored on the entry for `integer_to_binary/2'. +;; +;; 2. `M-x erldoc-apropos RET first RET' list all MFAs matching +;; substring `first'. +;; +;; 3. `M-x erldoc-browse-topic RET efficiency_guide#Introduction RET' +;; opens chapter `Introduction' of the `Efficiency Guide' in the +;; browser. + +;;; History: + +;; Written in December 2013 as a temporary solution to help me browse +;; the rich Erlang/OTP documentation. Three years on I find myself +;; still using it every day. - Leo (2016) + +;;; Code: + +(eval-when-compile (require 'url-parse)) +(require 'cl-lib) +(require 'erlang) + +(eval-and-compile ;for emacs < 24.3 + (or (fboundp 'user-error) (defalias 'user-error 'error))) + +(defgroup erldoc nil + "Browse Erlang document." + :group 'help) + +(defcustom erldoc-man-index "http://www.erlang.org/doc/man_index.html" + "The URL to the man_index.html page. +Note it is advisable to customise this to a local URL for example +`file:///usr/local/19.1/lib/erlang/doc/man_index.html' to speed +up the indexing." + :type 'string + :group 'erldoc) + +(defcustom erldoc-verify-man-path nil + "If non-nil verify man path existence for `file://'." + :type 'boolean + :group 'erldoc) + +(defcustom erldoc-output-file (locate-user-emacs-file "cache/erldoc") + "File to store the parsed results." + :type 'file + :group 'erldoc) + +(defun erldoc-strip-string (s) + (let* ((re "[ \t\n\r\f\v\u00a0]+") + (from (if (string-match (concat "\\`" re) s) (match-end 0) 0)) + (to (and (string-match (concat re "\\'") s) (match-beginning 0)))) + (substring s from (and to (max to from))))) + +;; Note: don't know how to get the BASE-URL to +;; `libxml-parse-html-region' to work. +(defun erldoc-expand-url (url base-url) + (if (url-type (url-generic-parse-url url)) + url + (let* ((base (url-generic-parse-url base-url)) + (dir (directory-file-name (file-name-directory (url-filename base))))) + (setf (url-filename base) (expand-file-name url dir)) + (url-recreate-url base)))) + +(defun erldoc-parse-html (url) + (with-temp-buffer + (url-insert-file-contents url) + (libxml-parse-html-region (point-min) (point-max)))) + +(defalias 'erldoc-dom-text-node-p #'stringp) + +(defun erldoc-dom-attributes (dom) + (and (not (erldoc-dom-text-node-p dom)) (cadr dom))) + +(defun erldoc-dom-get-attribute (dom attrib-name) + (cdr (assq attrib-name (erldoc-dom-attributes dom)))) + +(defun erldoc-dom-children (dom) + (and (not (erldoc-dom-text-node-p dom)) (cddr dom))) + +(defun erldoc-dom-get-text (dom) + (let ((text (car (last (erldoc-dom-children dom))))) + (and (erldoc-dom-text-node-p text) text))) + +(defvar erldoc-dom-walk-parent nil) +(defvar erldoc-dom-walk-siblings nil) + +(defun erldoc-dom-walk (dom k) + (funcall k dom) + (let ((erldoc-dom-walk-parent dom) + (erldoc-dom-walk-siblings (unless (erldoc-dom-text-node-p dom) + (cddr dom)))) + (dolist (child erldoc-dom-walk-siblings) + (erldoc-dom-walk child k)))) + +(defun erldoc-dom-get-element (dom element-name) + (catch 'return + (erldoc-dom-walk dom (lambda (d) + (when (eq (car-safe d) element-name) + (throw 'return d)))))) + +(defun erldoc-dom-get-element-by-id (dom id) + (catch 'return + (erldoc-dom-walk dom (lambda (d) + (when (equal (erldoc-dom-get-attribute d 'id) id) + (throw 'return d)))))) + +(defun erldoc-dom-get-elements-by-id (dom id) + (let (result) + (erldoc-dom-walk dom (lambda (d) + (when (equal (erldoc-dom-get-attribute d 'id) id) + (push d result)))) + (nreverse result))) + +(defun erldoc-fix-path (url) + (if (and erldoc-verify-man-path + ;; Could only verify local files + (equal (url-type (url-generic-parse-url url)) "file")) + (let* ((obj (url-generic-parse-url url)) + (new (car (file-expand-wildcards + (replace-regexp-in-string + "-[0-9]+\\(?:[.][0-9]+\\)*" "*" + (url-filename obj)))))) + (or new (error "File %s does not exist" (url-filename obj))) + (setf (url-filename obj) new) + (url-recreate-url obj)) + url)) + +(defun erldoc-parse-man-index (url) + (let ((table (erldoc-dom-get-element (erldoc-parse-html url) 'table)) + (mans)) + (erldoc-dom-walk + table + (lambda (d) + (when (eq (car-safe d) 'a) + (let ((href (erldoc-dom-get-attribute d 'href))) + (when (and href (not (string-match-p "index\\.html\\'" href))) + (with-demoted-errors "erldoc-parse-man-index: %S" + (push (cons (erldoc-dom-get-text d) + (erldoc-fix-path (erldoc-expand-url href url))) + mans))))))) + (nreverse mans))) + +(defun erldoc-parse-man (man) + (let ((dom (erldoc-parse-html (cdr man))) + (table (make-hash-table :test #'equal))) + (erldoc-dom-walk + (erldoc-dom-get-element-by-id dom "loadscrollpos") + (lambda (d) + (let ((href (erldoc-dom-get-attribute d 'href))) + (when (and href (string-match "#" href)) + (puthash (substring href (match-end 0)) + (list (concat (car man) ":" (erldoc-strip-string + (erldoc-dom-get-text d))) + (erldoc-expand-url href (cdr man))) + table))))) + (let ((span-content + (lambda (span) + (let ((texts)) + (erldoc-dom-walk span + (lambda (d) + (and (erldoc-dom-text-node-p d) + (push (erldoc-strip-string d) texts)))) + (and texts (mapconcat 'identity (nreverse texts) " "))))) + entries) + (erldoc-dom-walk + dom + (lambda (d) + ;; Get the full function signature. + (when (and (eq (car-safe d) 'a) + (gethash (erldoc-dom-get-attribute d 'name) table)) + (push (append (gethash (erldoc-dom-get-attribute d 'name) table) + (list (funcall span-content + (or (erldoc-dom-get-element d 'span) + (cadr (memq d erldoc-dom-walk-siblings)))))) + entries)) + ;; Get data types + (when (and (eq (car-safe d) 'a) + (string-prefix-p "type-" + (or (erldoc-dom-get-attribute d 'name) ""))) + (push (list (concat (car man) ":" (funcall span-content d)) + (concat (cdr man) "#" (erldoc-dom-get-attribute d 'name)) + (funcall span-content erldoc-dom-walk-parent)) + entries)))) + entries))) + +(defun erldoc-parse-all (man-index output &optional json) + (let* ((output (expand-file-name output)) + (table (make-hash-table :size 11503 :test #'equal)) + (mans (erldoc-parse-man-index man-index)) + (progress 1) + (reporter (make-progress-reporter "Parsing Erlang/OTP documentation" + progress (length mans))) + fails all) + (dolist (man mans) + (condition-case err + (push (erldoc-parse-man man) all) + (error (push (error-message-string err) fails))) + (accept-process-output nil 0.01) + (progress-reporter-update reporter (cl-incf progress))) + (when fails + (display-warning 'erldoc-parse-all + (format "\n\n%s" (mapconcat #'identity fails "\n")) + :error)) + (progress-reporter-done reporter) + (mapc (lambda (x) (puthash (car x) (cdr x) table)) + (apply #'nconc (nreverse all))) + (with-temp-buffer + (if (not json) + (pp table (current-buffer)) + (eval-and-compile (require 'json)) + (let ((json-encoding-pretty-print t)) + (insert (json-encode table)))) + (unless (file-directory-p (file-name-directory output)) + (make-directory (file-name-directory output) t)) + (write-region nil nil output nil nil nil 'ask)))) + +(defun erldoc-otp-release () + "Get the otp release version (as string) or nil if not found." + (let ((otp (erldoc-dom-get-text + (erldoc-dom-get-element + (erldoc-parse-html + (erldoc-expand-url "index.html" erldoc-man-index)) + 'title)))) + (and (string-match "[0-9.]+\\'" otp) (match-string 0 otp)))) + +(defvar erldoc-browse-history nil) +(defvar erldoc-lookup-table nil) + +(defun erldoc-lookup-table () + (or erldoc-lookup-table + (progn + (unless (file-exists-p erldoc-output-file) + (let ((of (pcase (erldoc-otp-release) + (`nil erldoc-output-file) + (ver (concat erldoc-output-file "-" ver))))) + (unless (file-exists-p of) + (erldoc-parse-all erldoc-man-index of)) + (unless (string= erldoc-output-file of) + (make-symbolic-link of erldoc-output-file)))) + (setq erldoc-lookup-table + (with-temp-buffer + (insert-file-contents erldoc-output-file) + (read (current-buffer))))))) + +(defun erldoc-best-matches (mfa) + (pcase mfa + ((and `(,m ,f) (let a (erlang-get-function-arity))) + (let ((mfa (format "%s:%s/%s" m f a))) + (cond ((gethash mfa (erldoc-lookup-table)) (list mfa)) + (m (all-completions (concat m ":" f "/") (erldoc-lookup-table))) + (t (let* ((mod (erlang-get-module)) + (mf1 (and mod (concat mod ":" f "/"))) + (mf2 (concat "erlang:" f "/")) + (re (concat ":" (regexp-quote f) "/"))) + (or (and mf1 (all-completions mf1 (erldoc-lookup-table))) + (all-completions mf2 (erldoc-lookup-table)) + (cl-loop for k being the hash-keys of (erldoc-lookup-table) + when (string-match-p re k) + collect k))))))))) + +;;;###autoload +(defun erldoc-browse (mfa) + (interactive + (let ((default + ;; `erlang-mode-syntax-table' is lazily initialised. + (with-syntax-table (or erlang-mode-syntax-table (standard-syntax-table)) + (ignore-errors + (erldoc-best-matches + (or (erlang-get-function-under-point) + (save-excursion + (goto-char (or (cadr (syntax-ppss)) (point))) + (erlang-get-function-under-point)))))))) + (list (completing-read (format (if default "Function {%d %s} (default %s): " + "Function: ") + (length default) + (if (= (length default) 1) "guess" "guesses") + (car default)) + (erldoc-lookup-table) + nil t nil 'erldoc-browse-history default)))) + (or (stringp mfa) + (signal 'wrong-type-argument (list 'string mfa 'mfa))) + (browse-url (or (car (gethash mfa (erldoc-lookup-table))) + (user-error "No documentation for %s" mfa)))) + +;;;###autoload +(defun erldoc-apropos (pattern) + (interactive "sPattern: ") + (with-help-window (help-buffer) + (with-current-buffer standard-output + (princ (concat "Erldoc apropos pattern: " pattern "\n\n")) + (maphash (lambda (k v) + (when (string-match-p pattern k) + (insert-text-button k :type 'help-url + 'help-args (list (car v))) + (insert "\n"))) + (erldoc-lookup-table))))) + +(defun erldoc-tokenize-signature (sig) + ;; Divide SIG into (MF ARGLIST RETTYPE) + (let ((from (if (string-match "\\`.+?(" sig) + (1- (match-end 0)) + 0)) + (to (and (string-match "\\s-*->\\s-*.*?\\'" sig) (match-beginning 0)))) + (list (erldoc-strip-string (substring sig 0 from)) + (erldoc-strip-string (substring sig from (and to (max from to)))) + (and to (erldoc-strip-string (substring sig to)))))) + +(defun erldoc-format-signature (mod fn) + (when (and mod fn (or erldoc-lookup-table + (file-exists-p erldoc-output-file))) + (let ((re (concat "\\`" mod ":" fn "/\\([0-9]+\\)\\'")) + (sigs)) + (maphash (lambda (k v) + (when (string-match re k) + (push (cons (string-to-number (match-string 1 k)) + (cdr (erldoc-tokenize-signature (cadr v)))) + sigs))) + (erldoc-lookup-table)) + (when sigs + ;; Mostly single return type but there are exceptions such as + ;; `beam_lib:chunks/2,3'. + (let ((single-rettype + (cl-reduce (lambda (x1 x2) (and x1 x2 (equal x1 x2) x1)) + sigs :key #'cl-caddr)) + (sigs (sort sigs #'car-less-than-car))) + (if single-rettype + (concat mod ":" fn (mapconcat #'cadr sigs " | ") " " single-rettype) + (mapconcat (lambda (x) (concat mod ":" fn (nth 1 x) " " (nth 2 x))) + sigs "\n"))))))) + +;;;###autoload +(defun erldoc-eldoc-function () + "A function suitable for `eldoc-documentation-function'." + (save-excursion + (pcase (erlang-get-function-under-point) + (`(,_ nil) ) + (`(nil ,fn) (erldoc-format-signature "erlang" fn)) + (`(,mod ,fn) (erldoc-format-signature mod fn))))) + +(defun erldoc-parse-eeps-index () + (let* ((url "http://www.erlang.org/eeps/") + (table (catch 'return + (erldoc-dom-walk (erldoc-parse-html url) + (lambda (d) + (and (eq (car-safe d) 'table) + (equal (erldoc-dom-get-attribute d 'summary) + "Numerical Index of EEPs") + (throw 'return d)))))) + (fix-title (lambda (title) + (replace-regexp-in-string + "`` *" "" (replace-regexp-in-string " *``, *" " by " title)))) + (result)) + (erldoc-dom-walk + table (lambda (d) + (when (eq (car-safe d) 'a) + (push (cons (funcall fix-title (erldoc-dom-get-attribute d 'title)) + (erldoc-expand-url + (erldoc-dom-get-attribute d 'href) + url)) + result)))) + (nreverse result))) + +(defvar erldoc-user-guides nil) + +(defvar erldoc-missing-user-guides + '("compiler" "hipe" "kernel" "os_mon" "parsetools" "typer") + "List of standard Erlang applications with no user guides.") + +;; Search in `code:lib_dir/0' using find LIB_DIR -type f -name +;; '*_app.html'. +(defvar erldoc-app-manuals '("crypto" "diameter" "erl_docgen" + "kernel" "observer" "os_mon" + "runtime_tools" "sasl" "snmp" + "ssl" "test_server" + ("ssh" . "SSH") ("stdlib" . "STDLIB") + ("hipe" . "HiPE") ("typer" . "TypEr")) + "List of applications that come with a manual.") + +(defun erldoc-user-guide-chapters (user-guide) + (pcase-let ((`(,name . ,url) user-guide)) + (unless (member name erldoc-missing-user-guides) + (let ((chaps (erldoc-dom-get-elements-by-id + (erldoc-dom-get-element-by-id (erldoc-parse-html url) "leftnav") + "no"))) + (or chaps (warn "erldoc-user-guide-chapters no chapters found for `%s'" + (cdr user-guide))) + (mapcar (lambda (li) + (cons (concat name "#" (erldoc-dom-get-attribute li 'title)) + (erldoc-expand-url (erldoc-dom-get-attribute + (erldoc-dom-get-element li 'a) 'href) + url))) + chaps))))) + +(defun erldoc-user-guides-1 () + (let ((url (erldoc-expand-url "applications.html" erldoc-man-index)) + app-guides app-mans) + (erldoc-dom-walk + (erldoc-parse-html url) + (lambda (d) + (when (and (eq (car-safe d) 'a) + (not (string-match-p "\\`[0-9.]+\\'" (erldoc-dom-get-text d)))) + (with-demoted-errors "erldoc-user-guides-1: %S" + (let ((name (erldoc-strip-string (erldoc-dom-get-text d))) + (index-page (erldoc-fix-path (erldoc-expand-url + (erldoc-dom-get-attribute d 'href) url)))) + (push (cons name (if (member name erldoc-missing-user-guides) + index-page + (erldoc-expand-url "users_guide.html" index-page))) + app-guides) + ;; Collect application manuals. + (pcase (assoc name (mapcar (lambda (x) (if (consp x) x (cons x x))) + erldoc-app-manuals)) + (`(,_ . ,manual) + (push (cons name + (erldoc-expand-url (format "%s_app.html" manual) + index-page)) + app-mans)))))))) + (list (nreverse app-guides) + (nreverse app-mans)))) + +(defun erldoc-user-guides () + (or erldoc-user-guides + (let ((file (concat erldoc-output-file "-topics"))) + (unless (file-exists-p file) + (unless (file-directory-p (file-name-directory file)) + (make-directory (file-name-directory file) t)) + (with-temp-buffer + (pcase-let ((`(,guides ,mans) (erldoc-user-guides-1))) + (pp (append (cl-mapcan #'erldoc-user-guide-chapters + (append (mapcar + (lambda (dir) + (cons dir (erldoc-expand-url + (concat dir "/users_guide.html") + erldoc-man-index))) + '("design_principles" + "efficiency_guide" + "embedded" + "getting_started" + "installation_guide" + "oam" + "programming_examples" + "reference_manual" + "system_architecture_intro" + "system_principles" + "tutorial")) + guides)) + (mapcar (lambda (man) + (pcase-let ((`(,name . ,url) man)) + (cons (concat name " (App)") url))) + mans) + (erldoc-parse-eeps-index)) + (current-buffer))) + (write-region nil nil file nil nil nil 'ask))) + (setq erldoc-user-guides (with-temp-buffer (insert-file-contents file) + (read (current-buffer))))))) + +;;;###autoload +(defun erldoc-browse-topic (topic) + (interactive + (list (completing-read "User guide: " (erldoc-user-guides) nil t))) + (browse-url (cdr (assoc topic (erldoc-user-guides))))) + +(provide 'erldoc) +;;; erldoc.el ends here diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented index 7a1ff6a954..14a4eca7c3 100644 --- a/lib/tools/emacs/test.erl.indented +++ b/lib/tools/emacs/test.erl.indented @@ -1,4 +1,4 @@ -%% -*- erlang -*- +%% -*- Mode: erlang; indent-tabs-mode: nil -*- %% %% %CopyrightBegin% %% @@ -27,7 +27,7 @@ %%% Created : 6 Oct 2009 by Dan Gudmundsson <[email protected]> %%%------------------------------------------------------------------- -%% Start off with syntax highlighting you have to verify this by looking here +%% Start off with syntax highlighting you have to verify this by looking here %% and see that the code looks alright -module(test). @@ -44,175 +44,175 @@ foo() -> %% Module attributes should be highlighted -export([t/1]). --record(record1, {a, - b, - c - }). +-record(record1, {a, + b, + c + }). -record(record2, { - a, - b - }). + a, + b + }). -record(record3, {a = 8#42423 bor - 8#4234, - b = 8#5432 - bor 2#1010101 - c = 123 + - 234, + 8#4234, + b = 8#5432 + bor 2#1010101 + c = 123 + + 234, d}). -record(record4, { - a = 8#42423 bor - 8#4234, - b = 8#5432 - bor 2#1010101 - c = 123 + - 234, - d}). + a = 8#42423 bor + 8#4234, + b = 8#5432 + bor 2#1010101 + c = 123 + + 234, + d}). -record(record5, { a = 1 :: integer() - , b = foobar :: atom() - }). + , b = foobar :: atom() + }). -define(MACRO_1, macro). -define(MACRO_2(_), macro). -spec t(integer()) -> any(). --type ann() :: Var :: integer(). --type ann2() :: Var :: - 'return' - | 'return_white_spaces' - | 'return_comments' - | 'text' | ann(). --type paren() :: - (ann2()). --type t1() :: atom(). --type t2() :: [t1()]. --type t3(Atom) :: integer(Atom). --type t4() :: t3(foobar). --type t5() :: {t1(), t3(foo)}. --type t6() :: 1 | 2 | 3 | - 'foo' | 'bar'. --type t7() :: []. --type t71() :: [_]. +-type ann() :: Var :: integer(). +-type ann2() :: Var :: + 'return' + | 'return_white_spaces' + | 'return_comments' + | 'text' | ann(). +-type paren() :: + (ann2()). +-type t1() :: atom(). +-type t2() :: [t1()]. +-type t3(Atom) :: integer(Atom). +-type t4() :: t3(foobar). +-type t5() :: {t1(), t3(foo)}. +-type t6() :: 1 | 2 | 3 | + 'foo' | 'bar'. +-type t7() :: []. +-type t71() :: [_]. -type t8() :: {any(),none(),pid(),port(), - reference(),float()}. --type t9() :: [1|2|3|foo|bar] | - list(a | b | c) | t71(). --type t10() :: {1|2|3|foo|t9()} | {}. --type t11() :: 1..2. --type t13() :: maybe_improper_list(integer(), t11()). --type t14() :: [erl_scan:foo() | - %% Should be highlighted - term() | - bool() | - byte() | - char() | - non_neg_integer() | nonempty_list() | - pos_integer() | - neg_integer() | - number() | - list() | - nonempty_improper_list() | nonempty_maybe_improper_list() | - maybe_improper_list() | string() | iolist() | byte() | - module() | - mfa() | - node() | - timeout() | - no_return() | - %% Should not be highlighted - nonempty_() | nonlist() | - erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. + reference(),float()}. +-type t9() :: [1|2|3|foo|bar] | + list(a | b | c) | t71(). +-type t10() :: {1|2|3|foo|t9()} | {}. +-type t11() :: 1..2. +-type t13() :: maybe_improper_list(integer(), t11()). +-type t14() :: [erl_scan:foo() | + %% Should be highlighted + term() | + bool() | + byte() | + char() | + non_neg_integer() | nonempty_list() | + pos_integer() | + neg_integer() | + number() | + list() | + nonempty_improper_list() | nonempty_maybe_improper_list() | + maybe_improper_list() | string() | iolist() | byte() | + module() | + mfa() | + node() | + timeout() | + no_return() | + %% Should not be highlighted + nonempty_() | nonlist() | + erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. -type t15() :: {binary(),<<>>,<<_:34>>,<<_:_*42>>, <<_:3,_:_*14>>,<<>>} | [<<>>|<<_:34>>|<<_:16>>| - <<_:3,_:_*1472>>|<<_:19,_:_*14>>| <<_:34>>| - <<_:34>>|<<_:34>>|<<_:34>>]. --type t16() :: fun(). --type t17() :: fun((...) -> paren()). --type t18() :: fun(() -> t17() | t16()). + <<_:3,_:_*1472>>|<<_:19,_:_*14>>| <<_:34>>| + <<_:34>>|<<_:34>>|<<_:34>>]. +-type t16() :: fun(). +-type t17() :: fun((...) -> paren()). +-type t18() :: fun(() -> t17() | t16()). -type t19() :: fun((t18()) -> t16()) | - fun((nonempty_maybe_improper_list('integer', any())| - 1|2|3|a|b|<<_:3,_:_*14>>|integer()) -> - nonempty_maybe_improper_list('integer', any())| - 1|2|3|a|b|<<_:3,_:_*14>>|integer()). --type t20() :: [t19(), ...]. --type t21() :: tuple(). --type t21(A) :: A. --type t22() :: t21(integer()). --type t23() :: #rec1{}. --type t24() :: #rec2{a :: t23(), b :: [atom()]}. --type t25() :: #rec3{f123 :: [t24() | - 1|2|3|4|a|b|c|d| - nonempty_maybe_improper_list(integer, any())]}. + fun((nonempty_maybe_improper_list('integer', any())| + 1|2|3|a|b|<<_:3,_:_*14>>|integer()) -> + nonempty_maybe_improper_list('integer', any())| + 1|2|3|a|b|<<_:3,_:_*14>>|integer()). +-type t20() :: [t19(), ...]. +-type t21() :: tuple(). +-type t21(A) :: A. +-type t22() :: t21(integer()). +-type t23() :: #rec1{}. +-type t24() :: #rec2{a :: t23(), b :: [atom()]}. +-type t25() :: #rec3{f123 :: [t24() | + 1|2|3|4|a|b|c|d| + nonempty_maybe_improper_list(integer, any())]}. -type t26() :: #rec4{ a :: integer() - , b :: any() - }. + , b :: any() + }. -type t27() :: { integer() - , atom() - }. + , atom() + }. -type t99() :: - {t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(), - t15(),t20(),t21(), t22(),t25()}. + {t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(), + t15(),t20(),t21(), t22(),t25()}. -spec t1(FooBar :: t99()) -> t99(); - (t2()) -> t2(); + (t2()) -> t2(); (t4()) -> t4() when is_subtype(t4(), t24); - (t23()) -> t23() when is_subtype(t23(), atom()), - is_subtype(t23(), t14()); - (t24()) -> t24() when is_subtype(t24(), atom()), - is_subtype(t24(), t14()), - is_subtype(t24(), t4()). + (t23()) -> t23() when is_subtype(t23(), atom()), + is_subtype(t23(), t14()); + (t24()) -> t24() when is_subtype(t24(), atom()), + is_subtype(t24(), t14()), + is_subtype(t24(), t4()). -spec over(I :: integer()) -> R1 :: foo:typen(); - (A :: atom()) -> R2 :: foo:atomen(); - (T :: tuple()) -> R3 :: bar:typen(). + (A :: atom()) -> R2 :: foo:atomen(); + (T :: tuple()) -> R3 :: bar:typen(). --spec mod:t2() -> any(). +-spec mod:t2() -> any(). --spec handle_cast(Cast :: {'exchange', node(), [[name(),...]]} - | {'del_member', name(), pid()}, - #state{}) -> {'noreply', #state{}}. +-spec handle_cast(Cast :: {'exchange', node(), [[name(),...]]} + | {'del_member', name(), pid()}, + #state{}) -> {'noreply', #state{}}. --spec handle_cast(Cast :: - {'exchange', node(), [[name(),...]]} - | {'del_member', name(), pid()}, - #state{}) -> {'noreply', #state{}}. +-spec handle_cast(Cast :: + {'exchange', node(), [[name(),...]]} + | {'del_member', name(), pid()}, + #state{}) -> {'noreply', #state{}}. -spec all(fun((T) -> boolean()), List :: [T]) -> - boolean() when is_subtype(T, term()). % (*) + boolean() when is_subtype(T, term()). % (*) --spec get_closest_pid(term()) -> - Return :: pid() - | {'error', {'no_process', term()} - | {'no_such_group', term()}}. +-spec get_closest_pid(term()) -> + Return :: pid() + | {'error', {'no_process', term()} + | {'no_such_group', term()}}. -spec add( X :: integer() - , Y :: integer() - ) -> integer(). + , Y :: integer() + ) -> integer(). --opaque attributes_data() :: - [{'column', column()} | {'line', info_line()} | - {'text', string()}] | {line(),column()}. +-opaque attributes_data() :: + [{'column', column()} | {'line', info_line()} | + {'text', string()}] | {line(),column()}. -record(r,{ f1 :: attributes_data(), - f222 = foo:bar(34, #rec3{}, 234234234423, - aassdsfsdfsdf, 2234242323) :: - [t24() | 1|2|3|4|a|b|c|d| - nonempty_maybe_improper_list(integer, any())], - f333 :: [t24() | 1|2|3|4|a|b|c|d| - nonempty_maybe_improper_list(integer, any())], - f3 = x:y(), - f4 = x:z() :: t99(), - f17 :: 'undefined', - f18 :: 1 | 2 | 'undefined', - f19 = 3 :: integer()|undefined, - f5 = 3 :: undefined|integer()}). + f222 = foo:bar(34, #rec3{}, 234234234423, + aassdsfsdfsdf, 2234242323) :: + [t24() | 1|2|3|4|a|b|c|d| + nonempty_maybe_improper_list(integer, any())], + f333 :: [t24() | 1|2|3|4|a|b|c|d| + nonempty_maybe_improper_list(integer, any())], + f3 = x:y(), + f4 = x:z() :: t99(), + f17 :: 'undefined', + f18 :: 1 | 2 | 'undefined', + f19 = 3 :: integer()|undefined, + f5 = 3 :: undefined|integer()}). -record(state, { - sequence_number = 1 :: integer() - }). + sequence_number = 1 :: integer() + }). highlighting(X) % Function definitions should be highlighted @@ -230,12 +230,12 @@ highlighting(X) % Function definitions should be highlighted '#1',atom, $", atom, % atom should be ok - $', atom, + $', atom, "string$", atom, "string$", atom, % currently buggy I know... "string\$", atom, % workaround for bug above - "char $in string", atom, + "char $in string", atom, 'atom$', atom, 'atom$', atom, 'atom\$', atom, @@ -270,15 +270,15 @@ highlighting(X) % Function definitions should be highlighted erlang:anything(lists), %% Guards is_atom(foo), is_float(2.3), is_integer(32), is_number(4323.3), - is_function(Fun), is_pid(self()), + is_function(Fun), is_pid(self()), not_a_guard:is_list([]), %% Other Types atom, % not (currently) hightlighted - 234234, + 234234, 234.43, - [list, are, not, higlighted], + [list, are, not, higlighted], {nor, is, tuple}, ok. @@ -290,35 +290,35 @@ highlighting(X) % Function definitions should be highlighted %% Indented - % Right + % Right -indent_basics(X, Y, Z) +indent_basics(X, Y, Z) when X > 42, Z < 13; Y =:= 4711 -> %% comments - % right comments - case lists:filter(fun(_, AlongName, - B, - C) -> - true - end, - [a,v,b]) + % right comments + case lists:filter(fun(_, AlongName, + B, + C) -> + true + end, + [a,v,b]) of - [] -> - Y = 5 * 43, - ok; - [_|_] -> - Y = 5 * 43, - ok + [] -> + Y = 5 * 43, + ok; + [_|_] -> + Y = 5 * 43, + ok end, Y, %% List, tuples and binaries - [a, + [a, b, c ], - [ a, + [ a, b, c ], @@ -326,10 +326,10 @@ indent_basics(X, Y, Z) a, b ], - {a, + {a, b,c }, - { a, + { a, b,c }, @@ -366,16 +366,16 @@ indent_basics(X, Y, Z) c ), - call(2#42423 bor - #4234, - 2#5432, - other_arg), + call(2#42423 bor + #4234, + 2#5432, + other_arg), ok; -indent_basics(Xlongname, - #struct{a=Foo, - b=Bar}, - [X| - Y]) -> +indent_basics(Xlongname, + #struct{a=Foo, + b=Bar}, + [X| + Y]) -> testing_next_clause, ok; indent_basics( % AD added clause @@ -408,295 +408,295 @@ indent_nested() -> indent_icr(Z) -> % icr = if case receive %% If if Z >= 0 -> - X = 43 div 4, - foo(X); + X = 43 div 4, + foo(X); Z =< 10 -> - X = 43 div 4, - foo(X); + X = 43 div 4, + foo(X); Z == 5 orelse Z == 7 -> - X = 43 div 4, - foo(X); + X = 43 div 4, + foo(X); true -> - if_works + if_works end, %% Case case {Z, foo, bar} of - {Z,_,_} -> - X = 43 div 4, - foo(X); - {Z,_,_} when - Z =:= 42 -> % AD line should be indented as a when - X = 43 div 4, - foo(X); - {Z,_,_} - when Z < 10 -> % AD when should be indented - X = 43 div 4, - foo(X); - {Z,_,_} - when % AD when should be indented - Z < 10 % and the guards should follow when - andalso % unsure about how though - true -> - X = 43 div 4, - foo(X) + {Z,_,_} -> + X = 43 div 4, + foo(X); + {Z,_,_} when + Z =:= 42 -> % AD line should be indented as a when + X = 43 div 4, + foo(X); + {Z,_,_} + when Z < 10 -> % AD when should be indented + X = 43 div 4, + foo(X); + {Z,_,_} + when % AD when should be indented + Z < 10 % and the guards should follow when + andalso % unsure about how though + true -> + X = 43 div 4, + foo(X) end, %% begin begin - sune, - X = 74234 + foo(8456) + - 345 div 43, - ok + sune, + X = 74234 + foo(8456) + + 345 div 43, + ok end, %% receive - receive - {Z,_,_} -> - X = 43 div 4, - foo(X); - Z -> - X = 43 div 4, - foo(X) + receive + {Z,_,_} -> + X = 43 div 4, + foo(X); + Z -> + X = 43 div 4, + foo(X) end, receive - {Z,_,_} -> - X = 43 div 4, - foo(X); - Z % AD added clause - when Z =:= 1 -> % This line should be indented by 2 - X = 43 div 4, - foo(X); - Z when % AD added clause - Z =:= 2 -> % This line should be indented by 2 - X = 43 div 4, - foo(X); - Z -> - X = 43 div 4, - foo(X) + {Z,_,_} -> + X = 43 div 4, + foo(X); + Z % AD added clause + when Z =:= 1 -> % This line should be indented by 2 + X = 43 div 4, + foo(X); + Z when % AD added clause + Z =:= 2 -> % This line should be indented by 2 + X = 43 div 4, + foo(X); + Z -> + X = 43 div 4, + foo(X) after infinity -> - foo(X), - asd(X), - 5*43 + foo(X), + asd(X), + 5*43 end, receive - after 10 -> - foo(X), - asd(X), - 5*43 + after 10 -> + foo(X), + asd(X), + 5*43 end, ok. indent_fun() -> %% Changed fun to one indention level - Var = spawn(fun(X) - when X == 2; - X > 10 -> - hello, - case Hello() of - true when is_atom(X) -> - foo; - false -> - bar - end; - (Foo) when is_atom(Foo), - is_integer(X) -> - X = 6* 45, - Y = true andalso - kalle - end), + Var = spawn(fun(X) + when X == 2; + X > 10 -> + hello, + case Hello() of + true when is_atom(X) -> + foo; + false -> + bar + end; + (Foo) when is_atom(Foo), + is_integer(X) -> + X = 6* 45, + Y = true andalso + kalle + end), %% check EEP37 named funs Fn1 = fun Fact(N) when N > 0 -> - F = Fact(N-1), - N * F; - Fact(0) -> - 1 - end, + F = Fact(N-1), + N * F; + Fact(0) -> + 1 + end, %% check anonymous funs too Fn2 = fun(0) -> - 1; - (N) -> - N - end, + 1; + (N) -> + N + end, ok. indent_try_catch() -> try - io:format(stdout, "Parsing file ~s, ", - [St0#leex.xfile]), - {ok,Line3,REAs,Actions,St3} = - parse_rules(Xfile, Line2, Macs, St2) + io:format(stdout, "Parsing file ~s, ", + [St0#leex.xfile]), + {ok,Line3,REAs,Actions,St3} = + parse_rules(Xfile, Line2, Macs, St2) catch - exit:{badarg,R} -> - foo(R), - io:format(stdout, - "ERROR reason ~p~n", - R); - error:R % AD added clause - when R =:= 42 -> % when should be indented - foo(R); - error:R % AD added clause - when % when should be indented - R =:= 42 -> % but unsure about this (maybe 2 more) - foo(R); - error:R when % AD added clause - R =:= foo -> % line should be 2 indented (works) - foo(R); - error:R -> - foo(R), - io:format(stdout, - "ERROR reason ~p~n", - R) + exit:{badarg,R} -> + foo(R), + io:format(stdout, + "ERROR reason ~p~n", + R); + error:R % AD added clause + when R =:= 42 -> % when should be indented + foo(R); + error:R % AD added clause + when % when should be indented + R =:= 42 -> % but unsure about this (maybe 2 more) + foo(R); + error:R when % AD added clause + R =:= foo -> % line should be 2 indented (works) + foo(R); + error:R -> + foo(R), + io:format(stdout, + "ERROR reason ~p~n", + R) after - foo('after'), - file:close(Xfile) + foo('after'), + file:close(Xfile) end; indent_try_catch() -> try - foo(bar) + foo(bar) of - X when true andalso - kalle -> - io:format(stdout, "Parsing file ~s, ", - [St0#leex.xfile]), - {ok,Line3,REAs,Actions,St3} = - parse_rules(Xfile, Line2, Macs, St2); - X % AD added clause - when false andalso % when should be 2 indented - bengt -> - gurka(); - X when % AD added clause - false andalso % line should be 2 indented - not bengt -> - gurka(); - X -> - io:format(stdout, "Parsing file ~s, ", - [St0#leex.xfile]), - {ok,Line3,REAs,Actions,St3} = - parse_rules(Xfile, Line2, Macs, St2) + X when true andalso + kalle -> + io:format(stdout, "Parsing file ~s, ", + [St0#leex.xfile]), + {ok,Line3,REAs,Actions,St3} = + parse_rules(Xfile, Line2, Macs, St2); + X % AD added clause + when false andalso % when should be 2 indented + bengt -> + gurka(); + X when % AD added clause + false andalso % line should be 2 indented + not bengt -> + gurka(); + X -> + io:format(stdout, "Parsing file ~s, ", + [St0#leex.xfile]), + {ok,Line3,REAs,Actions,St3} = + parse_rules(Xfile, Line2, Macs, St2) catch - exit:{badarg,R} -> - foo(R), - io:format(stdout, - "ERROR reason ~p~n", - R); - error:R -> - foo(R), - io:format(stdout, - "ERROR reason ~p~n", - R) + exit:{badarg,R} -> + foo(R), + io:format(stdout, + "ERROR reason ~p~n", + R); + error:R -> + foo(R), + io:format(stdout, + "ERROR reason ~p~n", + R) after - foo('after'), - file:close(Xfile), - bar(with_long_arg, - with_second_arg) + foo('after'), + file:close(Xfile), + bar(with_long_arg, + with_second_arg) end; indent_try_catch() -> try foo() - after - foo(), - bar(with_long_arg, - with_second_arg) + after + foo(), + bar(with_long_arg, + with_second_arg) end. indent_catch() -> D = B + - float(43.1), + float(43.1), B = catch oskar(X), - A = catch (baz + - bax), + A = catch (baz + + bax), catch foo(), - C = catch B + - float(43.1), + C = catch B + + float(43.1), case catch foo(X) of - A -> - B + A -> + B end, case - catch foo(X) + catch foo(X) of - A -> - B + A -> + B end, case - foo(X) + foo(X) of - A -> - catch B, - X + A -> + catch B, + X end, try sune of - _ -> foo + _ -> foo catch _:_ -> baf end, try - sune + sune of - _ -> - X = 5, - (catch foo(X)), - X + 10 + _ -> + X = 5, + (catch foo(X)), + X + 10 catch _:_ -> baf end, try - (catch sune) + (catch sune) of - _ -> - catch foo() %% BUGBUG can't handle catch inside try without parentheses + _ -> + catch foo() %% BUGBUG can't handle catch inside try without parentheses catch _:_ -> - baf + baf end, try - (catch exit()) + (catch exit()) catch - _ -> - catch baf() + _ -> + catch baf() end, ok. indent_binary() -> X = lists:foldr(fun(M) -> - <<Ma/binary, " ">> - end, [], A), + <<Ma/binary, " ">> + end, [], A), A = <<X/binary, 0:8>>, B. indent_comprehensions() -> - %% I don't have a good idea how we want to handle this + %% I don't have a good idea how we want to handle this %% but they are here to show how they are indented today. - Result1 = [X || - #record{a=X} <- lists:seq(1, 10), - true = (X rem 2) - ], + Result1 = [X || + #record{a=X} <- lists:seq(1, 10), + true = (X rem 2) + ], Result2 = [X || <<X:32,_:32>> <= <<0:512>>, - true = (X rem 2) - ], + true = (X rem 2) + ], - Binary1 = << <<X:8>> || - #record{a=X} <- lists:seq(1, 10), - true = (X rem 2) - >>, + Binary1 = << <<X:8>> || + #record{a=X} <- lists:seq(1, 10), + true = (X rem 2) + >>, Binary2 = << <<X:8>> || <<X:32,_:32>> <= <<0:512>>, - true = (X rem 2) - >>, + true = (X rem 2) + >>, ok. %% This causes an error in earlier erlang-mode versions. foo() -> [#foo{ - foo = foo}]. + foo = foo}]. %% Record indentation some_function_with_a_very_long_name() -> @@ -704,20 +704,20 @@ some_function_with_a_very_long_name() -> field1=a, field2=b}, case dummy_function_with_a_very_very_long_name(x) of - #'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ - field1=a, - field2=b} -> - ok; - Var = #'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ - field1=a, - field2=b} -> - Var#'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ - field1=a, - field2=b}; - #xyz{ - a=1, - b=2} -> - ok + #'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ + field1=a, + field2=b} -> + ok; + Var = #'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ + field1=a, + field2=b} -> + Var#'a-long-record-name-like-it-sometimes-is-with-asn.1-records'{ + field1=a, + field2=b}; + #xyz{ + a=1, + b=2} -> + ok end. another_function_with_a_very_very_long_name() -> @@ -726,45 +726,45 @@ another_function_with_a_very_very_long_name() -> field2=1}. some_function_name_xyz(xyzzy, #some_record{ - field1=Field1, - field2=Field2}) -> + field1=Field1, + field2=Field2}) -> SomeVariable = f(#'Some-long-record-name'{ - field_a = 1, - 'inter-xyz-parameters' = - #'Some-other-very-long-record-name'{ - field2 = Field1, - field2 = Field2}}), + field_a = 1, + 'inter-xyz-parameters' = + #'Some-other-very-long-record-name'{ + field2 = Field1, + field2 = Field2}}), {ok, SomeVariable}. commas_first() -> {abc, [ {some_var, 1} - , {some_other_var, 2} - , {erlang_ftw, 9} - , {erlang_cookie, 'cookie'} - , {cmds, - [ {one, "sudo ls"} - , {one, "sudo ls"} - , {two, "sudo ls"} - , {three, "sudo ls"} - , {four, "sudo ls"} - , {three, "sudo ls"} - ] } - , {ssh_username, "yow"} - , {cluster, - [ {aaaa, [ {"10.198.55.12" , "" } - , {"10.198.55.13" , "" } - ] } - , {bbbb, [ {"10.198.55.151", "" } - , {"10.198.55.123", "" } - , {"10.198.55.34" , "" } - , {"10.198.55.85" , "" } - , {"10.198.55.67" , "" } - ] } - , {cccc, [ {"10.198.55.68" , "" } - , {"10.198.55.69" , "" } - ] } - ] } - ] + , {some_other_var, 2} + , {erlang_ftw, 9} + , {erlang_cookie, 'cookie'} + , {cmds, + [ {one, "sudo ls"} + , {one, "sudo ls"} + , {two, "sudo ls"} + , {three, "sudo ls"} + , {four, "sudo ls"} + , {three, "sudo ls"} + ] } + , {ssh_username, "yow"} + , {cluster, + [ {aaaa, [ {"10.198.55.12" , "" } + , {"10.198.55.13" , "" } + ] } + , {bbbb, [ {"10.198.55.151", "" } + , {"10.198.55.123", "" } + , {"10.198.55.34" , "" } + , {"10.198.55.85" , "" } + , {"10.198.55.67" , "" } + ] } + , {cccc, [ {"10.198.55.68" , "" } + , {"10.198.55.69" , "" } + ] } + ] } + ] }. @@ -776,9 +776,9 @@ commas_first() -> %% body, due to the function name being mistaken for a keyword catcher(N) -> try generate_exception(N) of - Val -> {N, normal, Val} + Val -> {N, normal, Val} catch - throw:X -> {N, caught, thrown, X}; - exit:X -> {N, caught, exited, X}; - error:X -> {N, caught, error, X} + throw:X -> {N, caught, thrown, X}; + exit:X -> {N, caught, exited, X}; + error:X -> {N, caught, error, X} end. diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig index 2552c71baf..c0cf1749b6 100644 --- a/lib/tools/emacs/test.erl.orig +++ b/lib/tools/emacs/test.erl.orig @@ -1,4 +1,4 @@ -%% -*- erlang -*- +%% -*- Mode: erlang; indent-tabs-mode: nil -*- %% %% %CopyrightBegin% %% @@ -27,7 +27,7 @@ %%% Created : 6 Oct 2009 by Dan Gudmundsson <[email protected]> %%%------------------------------------------------------------------- -%% Start off with syntax highlighting you have to verify this by looking here +%% Start off with syntax highlighting you have to verify this by looking here %% and see that the code looks alright -module(test). @@ -44,18 +44,18 @@ foo() -> %% Module attributes should be highlighted -export([t/1]). --record(record1, {a, - b, +-record(record1, {a, + b, c }). -record(record2, { a, b }). - + -record(record3, {a = 8#42423 bor 8#4234, - b = 8#5432 + b = 8#5432 bor 2#1010101 c = 123 + 234, @@ -64,7 +64,7 @@ foo() -> -record(record4, { a = 8#42423 bor 8#4234, - b = 8#5432 + b = 8#5432 bor 2#1010101 c = 123 + 234, @@ -79,31 +79,31 @@ foo() -> -spec t(integer()) -> any(). --type ann() :: Var :: integer(). --type ann2() :: Var :: - 'return' - | 'return_white_spaces' +-type ann() :: Var :: integer(). +-type ann2() :: Var :: + 'return' + | 'return_white_spaces' | 'return_comments' - | 'text' | ann(). --type paren() :: - (ann2()). --type t1() :: atom(). --type t2() :: [t1()]. --type t3(Atom) :: integer(Atom). --type t4() :: t3(foobar). --type t5() :: {t1(), t3(foo)}. --type t6() :: 1 | 2 | 3 | - 'foo' | 'bar'. --type t7() :: []. --type t71() :: [_]. + | 'text' | ann(). +-type paren() :: + (ann2()). +-type t1() :: atom(). +-type t2() :: [t1()]. +-type t3(Atom) :: integer(Atom). +-type t4() :: t3(foobar). +-type t5() :: {t1(), t3(foo)}. +-type t6() :: 1 | 2 | 3 | + 'foo' | 'bar'. +-type t7() :: []. +-type t71() :: [_]. -type t8() :: {any(),none(),pid(),port(), - reference(),float()}. --type t9() :: [1|2|3|foo|bar] | - list(a | b | c) | t71(). --type t10() :: {1|2|3|foo|t9()} | {}. --type t11() :: 1..2. --type t13() :: maybe_improper_list(integer(), t11()). --type t14() :: [erl_scan:foo() | + reference(),float()}. +-type t9() :: [1|2|3|foo|bar] | + list(a | b | c) | t71(). +-type t10() :: {1|2|3|foo|t9()} | {}. +-type t11() :: 1..2. +-type t13() :: maybe_improper_list(integer(), t11()). +-type t14() :: [erl_scan:foo() | %% Should be highlighted term() | bool() | @@ -122,31 +122,31 @@ foo() -> timeout() | no_return() | %% Should not be highlighted - nonempty_() | nonlist() | + nonempty_() | nonlist() | erl_scan:bar(34, 92) | t13() | m:f(integer() | <<_:_*16>>)]. -type t15() :: {binary(),<<>>,<<_:34>>,<<_:_*42>>, <<_:3,_:_*14>>,<<>>} | [<<>>|<<_:34>>|<<_:16>>| <<_:3,_:_*1472>>|<<_:19,_:_*14>>| <<_:34>>| -<<_:34>>|<<_:34>>|<<_:34>>]. --type t16() :: fun(). --type t17() :: fun((...) -> paren()). --type t18() :: fun(() -> t17() | t16()). +<<_:34>>|<<_:34>>|<<_:34>>]. +-type t16() :: fun(). +-type t17() :: fun((...) -> paren()). +-type t18() :: fun(() -> t17() | t16()). -type t19() :: fun((t18()) -> t16()) | fun((nonempty_maybe_improper_list('integer', any())| 1|2|3|a|b|<<_:3,_:_*14>>|integer()) -> nonempty_maybe_improper_list('integer', any())| -1|2|3|a|b|<<_:3,_:_*14>>|integer()). --type t20() :: [t19(), ...]. --type t21() :: tuple(). --type t21(A) :: A. --type t22() :: t21(integer()). --type t23() :: #rec1{}. --type t24() :: #rec2{a :: t23(), b :: [atom()]}. --type t25() :: #rec3{f123 :: [t24() | -1|2|3|4|a|b|c|d| -nonempty_maybe_improper_list(integer, any())]}. +1|2|3|a|b|<<_:3,_:_*14>>|integer()). +-type t20() :: [t19(), ...]. +-type t21() :: tuple(). +-type t21(A) :: A. +-type t22() :: t21(integer()). +-type t23() :: #rec1{}. +-type t24() :: #rec2{a :: t23(), b :: [atom()]}. +-type t25() :: #rec3{f123 :: [t24() | +1|2|3|4|a|b|c|d| +nonempty_maybe_improper_list(integer, any())]}. -type t26() :: #rec4{ a :: integer() , b :: any() }. @@ -155,7 +155,7 @@ nonempty_maybe_improper_list(integer, any())]}. }. -type t99() :: {t2(),t4(),t5(),t6(),t7(),t8(),t10(),t14(), -t15(),t20(),t21(), t22(),t25()}. +t15(),t20(),t21(), t22(),t25()}. -spec t1(FooBar :: t99()) -> t99(); (t2()) -> t2(); (t4()) -> t4() when is_subtype(t4(), t24); @@ -169,21 +169,21 @@ t15(),t20(),t21(), t22(),t25()}. (A :: atom()) -> R2 :: foo:atomen(); (T :: tuple()) -> R3 :: bar:typen(). --spec mod:t2() -> any(). +-spec mod:t2() -> any(). --spec handle_cast(Cast :: {'exchange', node(), [[name(),...]]} +-spec handle_cast(Cast :: {'exchange', node(), [[name(),...]]} | {'del_member', name(), pid()}, #state{}) -> {'noreply', #state{}}. --spec handle_cast(Cast :: - {'exchange', node(), [[name(),...]]} +-spec handle_cast(Cast :: + {'exchange', node(), [[name(),...]]} | {'del_member', name(), pid()}, #state{}) -> {'noreply', #state{}}. -spec all(fun((T) -> boolean()), List :: [T]) -> boolean() when is_subtype(T, term()). % (*) --spec get_closest_pid(term()) -> +-spec get_closest_pid(term()) -> Return :: pid() | {'error', {'no_process', term()} | {'no_such_group', term()}}. @@ -192,23 +192,23 @@ t15(),t20(),t21(), t22(),t25()}. , Y :: integer() ) -> integer(). --opaque attributes_data() :: +-opaque attributes_data() :: [{'column', column()} | {'line', info_line()} | - {'text', string()}] | {line(),column()}. + {'text', string()}] | {line(),column()}. -record(r,{ f1 :: attributes_data(), -f222 = foo:bar(34, #rec3{}, 234234234423, - aassdsfsdfsdf, 2234242323) :: -[t24() | 1|2|3|4|a|b|c|d| +f222 = foo:bar(34, #rec3{}, 234234234423, + aassdsfsdfsdf, 2234242323) :: +[t24() | 1|2|3|4|a|b|c|d| nonempty_maybe_improper_list(integer, any())], -f333 :: [t24() | 1|2|3|4|a|b|c|d| +f333 :: [t24() | 1|2|3|4|a|b|c|d| nonempty_maybe_improper_list(integer, any())], f3 = x:y(), f4 = x:z() :: t99(), f17 :: 'undefined', f18 :: 1 | 2 | 'undefined', f19 = 3 :: integer()|undefined, -f5 = 3 :: undefined|integer()}). +f5 = 3 :: undefined|integer()}). -record(state, { sequence_number = 1 :: integer() @@ -230,12 +230,12 @@ highlighting(X) % Function definitions should be highlighted '#1',atom, $", atom, % atom should be ok - $', atom, - + $', atom, + "string$", atom, "string$", atom, % currently buggy I know... "string\$", atom, % workaround for bug above - - "char $in string", atom, + + "char $in string", atom, 'atom$', atom, 'atom$', atom, 'atom\$', atom, @@ -270,18 +270,18 @@ highlighting(X) % Function definitions should be highlighted erlang:anything(lists), %% Guards is_atom(foo), is_float(2.3), is_integer(32), is_number(4323.3), - is_function(Fun), is_pid(self()), + is_function(Fun), is_pid(self()), not_a_guard:is_list([]), %% Other Types atom, % not (currently) hightlighted - 234234, + 234234, 234.43, - [list, are, not, higlighted], + [list, are, not, higlighted], {nor, is, tuple}, ok. - + %%% %%% Indentation %%% @@ -293,32 +293,32 @@ highlighting(X) % Function definitions should be highlighted % Right -indent_basics(X, Y, Z) +indent_basics(X, Y, Z) when X > 42, Z < 13; Y =:= 4711 -> %% comments % right comments - case lists:filter(fun(_, AlongName, - B, + case lists:filter(fun(_, AlongName, + B, C) -> true - end, + end, [a,v,b]) of [] -> Y = 5 * 43, ok; - [_|_] -> + [_|_] -> Y = 5 * 43, ok end, Y, %% List, tuples and binaries - [a, + [a, b, c ], - [ a, + [ a, b, c ], @@ -326,10 +326,10 @@ Y =:= 4711 -> a, b ], - {a, + {a, b,c }, - { a, + { a, b,c }, @@ -337,7 +337,7 @@ Y =:= 4711 -> a, b }, - + <<1:8, 2:8 >>, @@ -359,21 +359,21 @@ Y =:= 4711 -> c ), - + ( a, b, c ), - call(2#42423 bor + call(2#42423 bor #4234, 2#5432, other_arg), ok; -indent_basics(Xlongname, +indent_basics(Xlongname, #struct{a=Foo, - b=Bar}, + b=Bar}, [X| Y]) -> testing_next_clause, @@ -451,13 +451,13 @@ indent_icr(Z) -> % icr = if case receive %% receive - receive + receive {Z,_,_} -> X = 43 div 4, foo(X); Z -> X = 43 div 4, - foo(X) + foo(X) end, receive {Z,_,_} -> @@ -473,33 +473,33 @@ indent_icr(Z) -> % icr = if case receive foo(X); Z -> X = 43 div 4, - foo(X) + foo(X) after infinity -> foo(X), asd(X), 5*43 end, receive - after 10 -> + after 10 -> foo(X), asd(X), 5*43 end, ok. - + indent_fun() -> %% Changed fun to one indention level -Var = spawn(fun(X) +Var = spawn(fun(X) when X == 2; - X > 10 -> + X > 10 -> hello, - case Hello() of - true when is_atom(X) -> + case Hello() of + true when is_atom(X) -> foo; false -> bar end; - (Foo) when is_atom(Foo), + (Foo) when is_atom(Foo), is_integer(X) -> X = 6* 45, Y = true andalso @@ -522,14 +522,14 @@ Fact(0) -> indent_try_catch() -> try - io:format(stdout, "Parsing file ~s, ", + io:format(stdout, "Parsing file ~s, ", [St0#leex.xfile]), - {ok,Line3,REAs,Actions,St3} = + {ok,Line3,REAs,Actions,St3} = parse_rules(Xfile, Line2, Macs, St2) catch exit:{badarg,R} -> foo(R), - io:format(stdout, + io:format(stdout, "ERROR reason ~p~n", R); error:R % AD added clause @@ -544,7 +544,7 @@ indent_try_catch() -> foo(R); error:R -> foo(R), - io:format(stdout, + io:format(stdout, "ERROR reason ~p~n", R) after @@ -577,12 +577,12 @@ indent_try_catch() -> catch exit:{badarg,R} -> foo(R), - io:format(stdout, + io:format(stdout, "ERROR reason ~p~n", R); error:R -> foo(R), - io:format(stdout, + io:format(stdout, "ERROR reason ~p~n", R) after @@ -593,7 +593,7 @@ indent_try_catch() -> end; indent_try_catch() -> try foo() - after + after foo(), bar(with_long_arg, with_second_arg) @@ -602,16 +602,16 @@ indent_try_catch() -> indent_catch() -> D = B + float(43.1), - + B = catch oskar(X), - - A = catch (baz + + + A = catch (baz + bax), catch foo(), - C = catch B + + C = catch B + float(43.1), - + case catch foo(X) of A -> B @@ -673,9 +673,9 @@ indent_binary() -> indent_comprehensions() -> -%% I don't have a good idea how we want to handle this +%% I don't have a good idea how we want to handle this %% but they are here to show how they are indented today. -Result1 = [X || +Result1 = [X || #record{a=X} <- lists:seq(1, 10), true = (X rem 2) ], @@ -683,7 +683,7 @@ Result2 = [X || <<X:32,_:32>> <= <<0:512>>, true = (X rem 2) ], -Binary1 = << <<X:8>> || +Binary1 = << <<X:8>> || #record{a=X} <- lists:seq(1, 10), true = (X rem 2) >>, diff --git a/lib/tools/src/fprof.erl b/lib/tools/src/fprof.erl index 1291a3e5ec..d1a4624419 100644 --- a/lib/tools/src/fprof.erl +++ b/lib/tools/src/fprof.erl @@ -1702,6 +1702,12 @@ trace_handler({trace_ts, Pid, send, _OtherPid, _Msg, TS} = Trace, dump_stack(Dump, get(Pid), Trace), TS; %% +%% send_to_non_existing_process +trace_handler({trace_ts, Pid, send_to_non_existing_process, _OtherPid, _Msg, TS} = Trace, + _Table, _, Dump) -> + dump_stack(Dump, get(Pid), Trace), + TS; +%% %% 'receive' trace_handler({trace_ts, Pid, 'receive', _Msg, TS} = Trace, _Table, _, Dump) -> diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl index 1be8d775be..1f9407525d 100644 --- a/lib/wx/api_gen/gl_gen_erl.erl +++ b/lib/wx/api_gen/gl_gen_erl.erl @@ -116,7 +116,7 @@ gl_api(Fs) -> w("call(Op, Args) ->~n", []), w(" Port = get(opengl_port), ~n", []), w(" _ = erlang:port_control(Port,Op,Args),~n", []), - w(" rec().~n", []), + w(" rec(Op).~n", []), w(" ~n", []), w("%% @hidden~n", []), w("cast(Op, Args) ->~n", []), @@ -125,11 +125,15 @@ gl_api(Fs) -> w(" ok.~n", []), w(" ~n", []), w("%% @hidden~n", []), - w("rec() ->~n", []), - w(" receive ~n", []), + w("rec(Op) ->~n", []), + w(" receive~n", []), w(" {'_egl_result_', Res} -> Res;~n", []), - w(" {'_egl_error_', Op, Res} -> error({error,Res,Op})~n", []), - w(" end. ~n", []), + w(" {'_egl_error_', Op, Res} -> error({error,Res,Op});~n", []), + w(" {'_egl_error_', Other, Res} ->~n ", []), + w(" Err = io_lib:format(\"~~p in op: ~~p\", [Res, Other]),~n", []), + w(" error_logger:error_report([{gl, error}, {message, lists:flatten(Err)}]),~n", []), + w(" rec(Op)~n", []), + w(" end.~n", []), w("~n", []), w("%% @hidden~n", []), w("send_bin(Bin) when is_binary(Bin) ->~n", []), diff --git a/lib/wx/api_gen/wx_extra/added_func.h b/lib/wx/api_gen/wx_extra/added_func.h index 417188cc8a..bffe391140 100644 --- a/lib/wx/api_gen/wx_extra/added_func.h +++ b/lib/wx/api_gen/wx_extra/added_func.h @@ -34,8 +34,13 @@ class wxToolBar { }; -class wxWindow { +/* class wxWindow { */ +/* public: */ +/* bool IsDoubleBuffered(); */ +/* void SetDoubleBuffered(bool on); */ +/* }; */ + +class wxWindowGTK { public: - bool IsDoubleBuffered(); - void SetDoubleBuffered(bool on); + double GetContentScaleFactor(); }; diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf index 4300ffe734..a0dfa61dd1 100644 --- a/lib/wx/api_gen/wxapi.conf +++ b/lib/wx/api_gen/wxapi.conf @@ -155,7 +155,8 @@ {'SetTransparent', [{test_if, "wxCHECK_VERSION(2,8,12)"}]}, {'CanSetTransparent', [{test_if, "wxCHECK_VERSION(2,8,12)"}]}, {'IsDoubleBuffered', [{test_if, "wxCHECK_VERSION(3,0,0)"}]}, - {'SetDoubleBuffered', [{test_if, "wxCHECK_VERSION(3,0,0) && !defined(__WXMAC__)"}]} + {'SetDoubleBuffered', [{test_if, "wxCHECK_VERSION(3,0,0) && !defined(__WXMAC__)"}]}, + {'GetContentScaleFactor', [{test_if, "wxCHECK_VERSION(2,9,5)"}]} ]}. {class, wxTopLevelWindowGTK, wxWindow, diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp index 927528fb32..5425e9f3cb 100644 --- a/lib/wx/c_src/gen/wxe_funcs.cpp +++ b/lib/wx/c_src/gen/wxe_funcs.cpp @@ -1716,6 +1716,15 @@ case wxWindow_SetDoubleBuffered: { // wxWindow::SetDoubleBuffered break; } #endif +#if wxCHECK_VERSION(2,9,5) +case wxWindow_GetContentScaleFactor: { // wxWindow::GetContentScaleFactor + wxWindow *This = (wxWindow *) getPtr(bp,memenv); bp += 4; + if(!This) throw wxe_badarg(0); + double Result = This->GetContentScaleFactor(); + rt.addFloat(Result); + break; +} +#endif case wxTopLevelWindow_GetIcon: { // wxTopLevelWindow::GetIcon wxTopLevelWindow *This = (wxTopLevelWindow *) getPtr(bp,memenv); bp += 4; if(!This) throw wxe_badarg(0); diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h index 61bf15eb05..f44fa57053 100644 --- a/lib/wx/c_src/gen/wxe_macros.h +++ b/lib/wx/c_src/gen/wxe_macros.h @@ -246,3184 +246,3185 @@ #define wxWindow_CanSetTransparent 286 #define wxWindow_IsDoubleBuffered 287 #define wxWindow_SetDoubleBuffered 288 -#define wxTopLevelWindow_GetIcon 289 -#define wxTopLevelWindow_GetIcons 290 -#define wxTopLevelWindow_GetTitle 291 -#define wxTopLevelWindow_IsActive 292 -#define wxTopLevelWindow_Iconize 293 -#define wxTopLevelWindow_IsFullScreen 294 -#define wxTopLevelWindow_IsIconized 295 -#define wxTopLevelWindow_IsMaximized 296 -#define wxTopLevelWindow_Maximize 297 -#define wxTopLevelWindow_RequestUserAttention 298 -#define wxTopLevelWindow_SetIcon 299 -#define wxTopLevelWindow_SetIcons 300 -#define wxTopLevelWindow_CenterOnScreen 301 -#define wxTopLevelWindow_CentreOnScreen 302 -#define wxTopLevelWindow_SetShape 304 -#define wxTopLevelWindow_SetTitle 305 -#define wxTopLevelWindow_ShowFullScreen 306 -#define wxFrame_new_4 308 -#define wxFrame_new_0 309 -#define wxFrame_destruct 311 -#define wxFrame_Create 312 -#define wxFrame_CreateStatusBar 313 -#define wxFrame_CreateToolBar 314 -#define wxFrame_GetClientAreaOrigin 315 -#define wxFrame_GetMenuBar 316 -#define wxFrame_GetStatusBar 317 -#define wxFrame_GetStatusBarPane 318 -#define wxFrame_GetToolBar 319 -#define wxFrame_ProcessCommand 320 -#define wxFrame_SendSizeEvent 321 -#define wxFrame_SetMenuBar 322 -#define wxFrame_SetStatusBar 323 -#define wxFrame_SetStatusBarPane 324 -#define wxFrame_SetStatusText 325 -#define wxFrame_SetStatusWidths 326 -#define wxFrame_SetToolBar 327 -#define wxMiniFrame_new_0 328 -#define wxMiniFrame_new_4 329 -#define wxMiniFrame_Create 330 -#define wxMiniFrame_destroy 331 -#define wxSplashScreen_new_0 332 -#define wxSplashScreen_new_6 333 -#define wxSplashScreen_destruct 334 -#define wxSplashScreen_GetSplashStyle 335 -#define wxSplashScreen_GetTimeout 336 -#define wxPanel_new_0 337 -#define wxPanel_new_6 338 -#define wxPanel_new_2 339 -#define wxPanel_destruct 340 -#define wxPanel_InitDialog 341 -#define wxPanel_SetFocusIgnoringChildren 342 -#define wxScrolledWindow_new_0 343 -#define wxScrolledWindow_new_2 344 -#define wxScrolledWindow_destruct 345 -#define wxScrolledWindow_CalcScrolledPosition_4 346 -#define wxScrolledWindow_CalcScrolledPosition_1 347 -#define wxScrolledWindow_CalcUnscrolledPosition_4 348 -#define wxScrolledWindow_CalcUnscrolledPosition_1 349 -#define wxScrolledWindow_EnableScrolling 350 -#define wxScrolledWindow_GetScrollPixelsPerUnit 351 -#define wxScrolledWindow_GetViewStart 352 -#define wxScrolledWindow_DoPrepareDC 353 -#define wxScrolledWindow_PrepareDC 354 -#define wxScrolledWindow_Scroll 355 -#define wxScrolledWindow_SetScrollbars 356 -#define wxScrolledWindow_SetScrollRate 357 -#define wxScrolledWindow_SetTargetWindow 358 -#define wxSashWindow_new_0 359 -#define wxSashWindow_new_2 360 -#define wxSashWindow_destruct 361 -#define wxSashWindow_GetSashVisible 362 -#define wxSashWindow_GetMaximumSizeX 363 -#define wxSashWindow_GetMaximumSizeY 364 -#define wxSashWindow_GetMinimumSizeX 365 -#define wxSashWindow_GetMinimumSizeY 366 -#define wxSashWindow_SetMaximumSizeX 367 -#define wxSashWindow_SetMaximumSizeY 368 -#define wxSashWindow_SetMinimumSizeX 369 -#define wxSashWindow_SetMinimumSizeY 370 -#define wxSashWindow_SetSashVisible 371 -#define wxSashLayoutWindow_new_0 372 -#define wxSashLayoutWindow_new_2 373 -#define wxSashLayoutWindow_Create 374 -#define wxSashLayoutWindow_GetAlignment 375 -#define wxSashLayoutWindow_GetOrientation 376 -#define wxSashLayoutWindow_SetAlignment 377 -#define wxSashLayoutWindow_SetDefaultSize 378 -#define wxSashLayoutWindow_SetOrientation 379 -#define wxSashLayoutWindow_destroy 380 -#define wxGrid_new_0 381 -#define wxGrid_new_3 382 -#define wxGrid_new_4 383 -#define wxGrid_destruct 384 -#define wxGrid_AppendCols 385 -#define wxGrid_AppendRows 386 -#define wxGrid_AutoSize 387 -#define wxGrid_AutoSizeColumn 388 -#define wxGrid_AutoSizeColumns 389 -#define wxGrid_AutoSizeRow 390 -#define wxGrid_AutoSizeRows 391 -#define wxGrid_BeginBatch 392 -#define wxGrid_BlockToDeviceRect 393 -#define wxGrid_CanDragColSize 394 -#define wxGrid_CanDragRowSize 395 -#define wxGrid_CanDragGridSize 396 -#define wxGrid_CanEnableCellControl 397 -#define wxGrid_CellToRect_2 398 -#define wxGrid_CellToRect_1 399 -#define wxGrid_ClearGrid 400 -#define wxGrid_ClearSelection 401 -#define wxGrid_CreateGrid 402 -#define wxGrid_DeleteCols 403 -#define wxGrid_DeleteRows 404 -#define wxGrid_DisableCellEditControl 405 -#define wxGrid_DisableDragColSize 406 -#define wxGrid_DisableDragGridSize 407 -#define wxGrid_DisableDragRowSize 408 -#define wxGrid_EnableCellEditControl 409 -#define wxGrid_EnableDragColSize 410 -#define wxGrid_EnableDragGridSize 411 -#define wxGrid_EnableDragRowSize 412 -#define wxGrid_EnableEditing 413 -#define wxGrid_EnableGridLines 414 -#define wxGrid_EndBatch 415 -#define wxGrid_Fit 416 -#define wxGrid_ForceRefresh 417 -#define wxGrid_GetBatchCount 418 -#define wxGrid_GetCellAlignment 419 -#define wxGrid_GetCellBackgroundColour 420 -#define wxGrid_GetCellEditor 421 -#define wxGrid_GetCellFont 422 -#define wxGrid_GetCellRenderer 423 -#define wxGrid_GetCellTextColour 424 -#define wxGrid_GetCellValue_2 425 -#define wxGrid_GetCellValue_1 426 -#define wxGrid_GetColLabelAlignment 427 -#define wxGrid_GetColLabelSize 428 -#define wxGrid_GetColLabelValue 429 -#define wxGrid_GetColMinimalAcceptableWidth 430 -#define wxGrid_GetDefaultCellAlignment 431 -#define wxGrid_GetDefaultCellBackgroundColour 432 -#define wxGrid_GetDefaultCellFont 433 -#define wxGrid_GetDefaultCellTextColour 434 -#define wxGrid_GetDefaultColLabelSize 435 -#define wxGrid_GetDefaultColSize 436 -#define wxGrid_GetDefaultEditor 437 -#define wxGrid_GetDefaultEditorForCell_2 438 -#define wxGrid_GetDefaultEditorForCell_1 439 -#define wxGrid_GetDefaultEditorForType 440 -#define wxGrid_GetDefaultRenderer 441 -#define wxGrid_GetDefaultRendererForCell 442 -#define wxGrid_GetDefaultRendererForType 443 -#define wxGrid_GetDefaultRowLabelSize 444 -#define wxGrid_GetDefaultRowSize 445 -#define wxGrid_GetGridCursorCol 446 -#define wxGrid_GetGridCursorRow 447 -#define wxGrid_GetGridLineColour 448 -#define wxGrid_GridLinesEnabled 449 -#define wxGrid_GetLabelBackgroundColour 450 -#define wxGrid_GetLabelFont 451 -#define wxGrid_GetLabelTextColour 452 -#define wxGrid_GetNumberCols 453 -#define wxGrid_GetNumberRows 454 -#define wxGrid_GetOrCreateCellAttr 455 -#define wxGrid_GetRowMinimalAcceptableHeight 456 -#define wxGrid_GetRowLabelAlignment 457 -#define wxGrid_GetRowLabelSize 458 -#define wxGrid_GetRowLabelValue 459 -#define wxGrid_GetRowSize 460 -#define wxGrid_GetScrollLineX 461 -#define wxGrid_GetScrollLineY 462 -#define wxGrid_GetSelectedCells 463 -#define wxGrid_GetSelectedCols 464 -#define wxGrid_GetSelectedRows 465 -#define wxGrid_GetSelectionBackground 466 -#define wxGrid_GetSelectionBlockTopLeft 467 -#define wxGrid_GetSelectionBlockBottomRight 468 -#define wxGrid_GetSelectionForeground 469 -#define wxGrid_GetViewWidth 470 -#define wxGrid_GetGridWindow 471 -#define wxGrid_GetGridRowLabelWindow 472 -#define wxGrid_GetGridColLabelWindow 473 -#define wxGrid_GetGridCornerLabelWindow 474 -#define wxGrid_HideCellEditControl 475 -#define wxGrid_InsertCols 476 -#define wxGrid_InsertRows 477 -#define wxGrid_IsCellEditControlEnabled 478 -#define wxGrid_IsCurrentCellReadOnly 479 -#define wxGrid_IsEditable 480 -#define wxGrid_IsInSelection_2 481 -#define wxGrid_IsInSelection_1 482 -#define wxGrid_IsReadOnly 483 -#define wxGrid_IsSelection 484 -#define wxGrid_IsVisible_3 485 -#define wxGrid_IsVisible_2 486 -#define wxGrid_MakeCellVisible_2 487 -#define wxGrid_MakeCellVisible_1 488 -#define wxGrid_MoveCursorDown 489 -#define wxGrid_MoveCursorLeft 490 -#define wxGrid_MoveCursorRight 491 -#define wxGrid_MoveCursorUp 492 -#define wxGrid_MoveCursorDownBlock 493 -#define wxGrid_MoveCursorLeftBlock 494 -#define wxGrid_MoveCursorRightBlock 495 -#define wxGrid_MoveCursorUpBlock 496 -#define wxGrid_MovePageDown 497 -#define wxGrid_MovePageUp 498 -#define wxGrid_RegisterDataType 499 -#define wxGrid_SaveEditControlValue 500 -#define wxGrid_SelectAll 501 -#define wxGrid_SelectBlock_5 502 -#define wxGrid_SelectBlock_3 503 -#define wxGrid_SelectCol 504 -#define wxGrid_SelectRow 505 -#define wxGrid_SetCellAlignment_4 506 -#define wxGrid_SetCellAlignment_3 507 -#define wxGrid_SetCellAlignment_1 508 -#define wxGrid_SetCellBackgroundColour_3_0 509 -#define wxGrid_SetCellBackgroundColour_1 510 -#define wxGrid_SetCellBackgroundColour_3_1 511 -#define wxGrid_SetCellEditor 512 -#define wxGrid_SetCellFont 513 -#define wxGrid_SetCellRenderer 514 -#define wxGrid_SetCellTextColour_3_0 515 -#define wxGrid_SetCellTextColour_3_1 516 -#define wxGrid_SetCellTextColour_1 517 -#define wxGrid_SetCellValue_3_0 518 -#define wxGrid_SetCellValue_2 519 -#define wxGrid_SetCellValue_3_1 520 -#define wxGrid_SetColAttr 521 -#define wxGrid_SetColFormatBool 522 -#define wxGrid_SetColFormatNumber 523 -#define wxGrid_SetColFormatFloat 524 -#define wxGrid_SetColFormatCustom 525 -#define wxGrid_SetColLabelAlignment 526 -#define wxGrid_SetColLabelSize 527 -#define wxGrid_SetColLabelValue 528 -#define wxGrid_SetColMinimalWidth 529 -#define wxGrid_SetColMinimalAcceptableWidth 530 -#define wxGrid_SetColSize 531 -#define wxGrid_SetDefaultCellAlignment 532 -#define wxGrid_SetDefaultCellBackgroundColour 533 -#define wxGrid_SetDefaultCellFont 534 -#define wxGrid_SetDefaultCellTextColour 535 -#define wxGrid_SetDefaultEditor 536 -#define wxGrid_SetDefaultRenderer 537 -#define wxGrid_SetDefaultColSize 538 -#define wxGrid_SetDefaultRowSize 539 -#define wxGrid_SetGridCursor 540 -#define wxGrid_SetGridLineColour 541 -#define wxGrid_SetLabelBackgroundColour 542 -#define wxGrid_SetLabelFont 543 -#define wxGrid_SetLabelTextColour 544 -#define wxGrid_SetMargins 545 -#define wxGrid_SetReadOnly 546 -#define wxGrid_SetRowAttr 547 -#define wxGrid_SetRowLabelAlignment 548 -#define wxGrid_SetRowLabelSize 549 -#define wxGrid_SetRowLabelValue 550 -#define wxGrid_SetRowMinimalHeight 551 -#define wxGrid_SetRowMinimalAcceptableHeight 552 -#define wxGrid_SetRowSize 553 -#define wxGrid_SetScrollLineX 554 -#define wxGrid_SetScrollLineY 555 -#define wxGrid_SetSelectionBackground 556 -#define wxGrid_SetSelectionForeground 557 -#define wxGrid_SetSelectionMode 558 -#define wxGrid_ShowCellEditControl 559 -#define wxGrid_XToCol 560 -#define wxGrid_XToEdgeOfCol 561 -#define wxGrid_YToEdgeOfRow 562 -#define wxGrid_YToRow 563 -#define wxGridCellRenderer_Draw 564 -#define wxGridCellRenderer_GetBestSize 565 -#define wxGridCellEditor_Create 566 -#define wxGridCellEditor_IsCreated 567 -#define wxGridCellEditor_SetSize 568 -#define wxGridCellEditor_Show 569 -#define wxGridCellEditor_PaintBackground 570 -#define wxGridCellEditor_BeginEdit 571 -#define wxGridCellEditor_EndEdit 572 -#define wxGridCellEditor_Reset 573 -#define wxGridCellEditor_StartingKey 574 -#define wxGridCellEditor_StartingClick 575 -#define wxGridCellEditor_HandleReturn 576 -#define wxGridCellBoolRenderer_new 577 -#define wxGridCellBoolRenderer_destroy 578 -#define wxGridCellBoolEditor_new 579 -#define wxGridCellBoolEditor_IsTrueValue 580 -#define wxGridCellBoolEditor_UseStringValues 581 -#define wxGridCellBoolEditor_destroy 582 -#define wxGridCellFloatRenderer_new 583 -#define wxGridCellFloatRenderer_GetPrecision 584 -#define wxGridCellFloatRenderer_GetWidth 585 -#define wxGridCellFloatRenderer_SetParameters 586 -#define wxGridCellFloatRenderer_SetPrecision 587 -#define wxGridCellFloatRenderer_SetWidth 588 -#define wxGridCellFloatRenderer_destroy 589 -#define wxGridCellFloatEditor_new 590 -#define wxGridCellFloatEditor_SetParameters 591 -#define wxGridCellFloatEditor_destroy 592 -#define wxGridCellStringRenderer_new 593 -#define wxGridCellStringRenderer_destroy 594 -#define wxGridCellTextEditor_new 595 -#define wxGridCellTextEditor_SetParameters 596 -#define wxGridCellTextEditor_destroy 597 -#define wxGridCellChoiceEditor_new 599 -#define wxGridCellChoiceEditor_SetParameters 600 -#define wxGridCellChoiceEditor_destroy 601 -#define wxGridCellNumberRenderer_new 602 -#define wxGridCellNumberRenderer_destroy 603 -#define wxGridCellNumberEditor_new 604 -#define wxGridCellNumberEditor_GetValue 605 -#define wxGridCellNumberEditor_SetParameters 606 -#define wxGridCellNumberEditor_destroy 607 -#define wxGridCellAttr_SetTextColour 608 -#define wxGridCellAttr_SetBackgroundColour 609 -#define wxGridCellAttr_SetFont 610 -#define wxGridCellAttr_SetAlignment 611 -#define wxGridCellAttr_SetReadOnly 612 -#define wxGridCellAttr_SetRenderer 613 -#define wxGridCellAttr_SetEditor 614 -#define wxGridCellAttr_HasTextColour 615 -#define wxGridCellAttr_HasBackgroundColour 616 -#define wxGridCellAttr_HasFont 617 -#define wxGridCellAttr_HasAlignment 618 -#define wxGridCellAttr_HasRenderer 619 -#define wxGridCellAttr_HasEditor 620 -#define wxGridCellAttr_GetTextColour 621 -#define wxGridCellAttr_GetBackgroundColour 622 -#define wxGridCellAttr_GetFont 623 -#define wxGridCellAttr_GetAlignment 624 -#define wxGridCellAttr_GetRenderer 625 -#define wxGridCellAttr_GetEditor 626 -#define wxGridCellAttr_IsReadOnly 627 -#define wxGridCellAttr_SetDefAttr 628 -#define wxDC_Blit 629 -#define wxDC_CalcBoundingBox 630 -#define wxDC_Clear 631 -#define wxDC_ComputeScaleAndOrigin 632 -#define wxDC_CrossHair 633 -#define wxDC_DestroyClippingRegion 634 -#define wxDC_DeviceToLogicalX 635 -#define wxDC_DeviceToLogicalXRel 636 -#define wxDC_DeviceToLogicalY 637 -#define wxDC_DeviceToLogicalYRel 638 -#define wxDC_DrawArc 639 -#define wxDC_DrawBitmap 640 -#define wxDC_DrawCheckMark 641 -#define wxDC_DrawCircle 642 -#define wxDC_DrawEllipse_2 644 -#define wxDC_DrawEllipse_1 645 -#define wxDC_DrawEllipticArc 646 -#define wxDC_DrawIcon 647 -#define wxDC_DrawLabel 648 -#define wxDC_DrawLine 649 -#define wxDC_DrawLines 650 -#define wxDC_DrawPolygon 652 -#define wxDC_DrawPoint 654 -#define wxDC_DrawRectangle_2 656 -#define wxDC_DrawRectangle_1 657 -#define wxDC_DrawRotatedText 658 -#define wxDC_DrawRoundedRectangle_3 660 -#define wxDC_DrawRoundedRectangle_2 661 -#define wxDC_DrawText 662 -#define wxDC_EndDoc 663 -#define wxDC_EndPage 664 -#define wxDC_FloodFill 665 -#define wxDC_GetBackground 666 -#define wxDC_GetBackgroundMode 667 -#define wxDC_GetBrush 668 -#define wxDC_GetCharHeight 669 -#define wxDC_GetCharWidth 670 -#define wxDC_GetClippingBox 671 -#define wxDC_GetFont 673 -#define wxDC_GetLayoutDirection 674 -#define wxDC_GetLogicalFunction 675 -#define wxDC_GetMapMode 676 -#define wxDC_GetMultiLineTextExtent_4 677 -#define wxDC_GetMultiLineTextExtent_1 678 -#define wxDC_GetPartialTextExtents 679 -#define wxDC_GetPen 680 -#define wxDC_GetPixel 681 -#define wxDC_GetPPI 682 -#define wxDC_GetSize 684 -#define wxDC_GetSizeMM 686 -#define wxDC_GetTextBackground 687 -#define wxDC_GetTextExtent_4 688 -#define wxDC_GetTextExtent_1 689 -#define wxDC_GetTextForeground 691 -#define wxDC_GetUserScale 692 -#define wxDC_GradientFillConcentric_3 693 -#define wxDC_GradientFillConcentric_4 694 -#define wxDC_GradientFillLinear 695 -#define wxDC_LogicalToDeviceX 696 -#define wxDC_LogicalToDeviceXRel 697 -#define wxDC_LogicalToDeviceY 698 -#define wxDC_LogicalToDeviceYRel 699 -#define wxDC_MaxX 700 -#define wxDC_MaxY 701 -#define wxDC_MinX 702 -#define wxDC_MinY 703 -#define wxDC_IsOk 704 -#define wxDC_ResetBoundingBox 705 -#define wxDC_SetAxisOrientation 706 -#define wxDC_SetBackground 707 -#define wxDC_SetBackgroundMode 708 -#define wxDC_SetBrush 709 -#define wxDC_SetClippingRegion_2 711 -#define wxDC_SetClippingRegion_1_1 712 -#define wxDC_SetClippingRegion_1_0 713 -#define wxDC_SetDeviceOrigin 714 -#define wxDC_SetFont 715 -#define wxDC_SetLayoutDirection 716 -#define wxDC_SetLogicalFunction 717 -#define wxDC_SetMapMode 718 -#define wxDC_SetPalette 719 -#define wxDC_SetPen 720 -#define wxDC_SetTextBackground 721 -#define wxDC_SetTextForeground 722 -#define wxDC_SetUserScale 723 -#define wxDC_StartDoc 724 -#define wxDC_StartPage 725 -#define wxMirrorDC_new 726 -#define wxMirrorDC_destroy 727 -#define wxScreenDC_new 728 -#define wxScreenDC_destruct 729 -#define wxPostScriptDC_new_0 730 -#define wxPostScriptDC_new_1 731 -#define wxPostScriptDC_destruct 732 -#define wxPostScriptDC_SetResolution 733 -#define wxPostScriptDC_GetResolution 734 -#define wxWindowDC_new_0 735 -#define wxWindowDC_new_1 736 -#define wxWindowDC_destruct 737 -#define wxClientDC_new_0 738 -#define wxClientDC_new_1 739 -#define wxClientDC_destroy 740 -#define wxPaintDC_new_0 741 -#define wxPaintDC_new_1 742 -#define wxPaintDC_destroy 743 -#define wxMemoryDC_new_1_0 745 -#define wxMemoryDC_new_1_1 746 -#define wxMemoryDC_new_0 747 -#define wxMemoryDC_destruct 749 -#define wxMemoryDC_SelectObject 750 -#define wxMemoryDC_SelectObjectAsSource 751 -#define wxBufferedDC_new_0 752 -#define wxBufferedDC_new_2 753 -#define wxBufferedDC_new_3 754 -#define wxBufferedDC_destruct 755 -#define wxBufferedDC_Init_2 756 -#define wxBufferedDC_Init_3 757 -#define wxBufferedPaintDC_new_3 758 -#define wxBufferedPaintDC_new_2 759 -#define wxBufferedPaintDC_destruct 760 -#define wxGraphicsObject_destruct 761 -#define wxGraphicsObject_GetRenderer 762 -#define wxGraphicsObject_IsNull 763 -#define wxGraphicsContext_destruct 764 -#define wxGraphicsContext_Create_1_1 765 -#define wxGraphicsContext_Create_1_0 766 -#define wxGraphicsContext_Create_0 767 -#define wxGraphicsContext_CreatePen 768 -#define wxGraphicsContext_CreateBrush 769 -#define wxGraphicsContext_CreateRadialGradientBrush 770 -#define wxGraphicsContext_CreateLinearGradientBrush 771 -#define wxGraphicsContext_CreateFont 772 -#define wxGraphicsContext_CreateMatrix 773 -#define wxGraphicsContext_CreatePath 774 -#define wxGraphicsContext_Clip_1 775 -#define wxGraphicsContext_Clip_4 776 -#define wxGraphicsContext_ResetClip 777 -#define wxGraphicsContext_DrawBitmap 778 -#define wxGraphicsContext_DrawEllipse 779 -#define wxGraphicsContext_DrawIcon 780 -#define wxGraphicsContext_DrawLines 781 -#define wxGraphicsContext_DrawPath 782 -#define wxGraphicsContext_DrawRectangle 783 -#define wxGraphicsContext_DrawRoundedRectangle 784 -#define wxGraphicsContext_DrawText_3 785 -#define wxGraphicsContext_DrawText_4_0 786 -#define wxGraphicsContext_DrawText_4_1 787 -#define wxGraphicsContext_DrawText_5 788 -#define wxGraphicsContext_FillPath 789 -#define wxGraphicsContext_StrokePath 790 -#define wxGraphicsContext_GetPartialTextExtents 791 -#define wxGraphicsContext_GetTextExtent 792 -#define wxGraphicsContext_Rotate 793 -#define wxGraphicsContext_Scale 794 -#define wxGraphicsContext_Translate 795 -#define wxGraphicsContext_GetTransform 796 -#define wxGraphicsContext_SetTransform 797 -#define wxGraphicsContext_ConcatTransform 798 -#define wxGraphicsContext_SetBrush_1_1 799 -#define wxGraphicsContext_SetBrush_1_0 800 -#define wxGraphicsContext_SetFont_1 801 -#define wxGraphicsContext_SetFont_2 802 -#define wxGraphicsContext_SetPen_1_0 803 -#define wxGraphicsContext_SetPen_1_1 804 -#define wxGraphicsContext_StrokeLine 805 -#define wxGraphicsContext_StrokeLines 806 -#define wxGraphicsMatrix_Concat 808 -#define wxGraphicsMatrix_Get 810 -#define wxGraphicsMatrix_Invert 811 -#define wxGraphicsMatrix_IsEqual 812 -#define wxGraphicsMatrix_IsIdentity 814 -#define wxGraphicsMatrix_Rotate 815 -#define wxGraphicsMatrix_Scale 816 -#define wxGraphicsMatrix_Translate 817 -#define wxGraphicsMatrix_Set 818 -#define wxGraphicsMatrix_TransformPoint 819 -#define wxGraphicsMatrix_TransformDistance 820 -#define wxGraphicsPath_MoveToPoint_2 821 -#define wxGraphicsPath_MoveToPoint_1 822 -#define wxGraphicsPath_AddArc_6 823 -#define wxGraphicsPath_AddArc_5 824 -#define wxGraphicsPath_AddArcToPoint 825 -#define wxGraphicsPath_AddCircle 826 -#define wxGraphicsPath_AddCurveToPoint_6 827 -#define wxGraphicsPath_AddCurveToPoint_3 828 -#define wxGraphicsPath_AddEllipse 829 -#define wxGraphicsPath_AddLineToPoint_2 830 -#define wxGraphicsPath_AddLineToPoint_1 831 -#define wxGraphicsPath_AddPath 832 -#define wxGraphicsPath_AddQuadCurveToPoint 833 -#define wxGraphicsPath_AddRectangle 834 -#define wxGraphicsPath_AddRoundedRectangle 835 -#define wxGraphicsPath_CloseSubpath 836 -#define wxGraphicsPath_Contains_3 837 -#define wxGraphicsPath_Contains_2 838 -#define wxGraphicsPath_GetBox 840 -#define wxGraphicsPath_GetCurrentPoint 842 -#define wxGraphicsPath_Transform 843 -#define wxGraphicsRenderer_GetDefaultRenderer 844 -#define wxGraphicsRenderer_CreateContext_1_1 845 -#define wxGraphicsRenderer_CreateContext_1_0 846 -#define wxGraphicsRenderer_CreatePen 847 -#define wxGraphicsRenderer_CreateBrush 848 -#define wxGraphicsRenderer_CreateLinearGradientBrush 849 -#define wxGraphicsRenderer_CreateRadialGradientBrush 850 -#define wxGraphicsRenderer_CreateFont 851 -#define wxGraphicsRenderer_CreateMatrix 852 -#define wxGraphicsRenderer_CreatePath 853 -#define wxMenuBar_new_1 855 -#define wxMenuBar_new_0 857 -#define wxMenuBar_destruct 859 -#define wxMenuBar_Append 860 -#define wxMenuBar_Check 861 -#define wxMenuBar_Enable_2 862 -#define wxMenuBar_Enable_1 863 -#define wxMenuBar_EnableTop 864 -#define wxMenuBar_FindMenu 865 -#define wxMenuBar_FindMenuItem 866 -#define wxMenuBar_FindItem 867 -#define wxMenuBar_GetHelpString 868 -#define wxMenuBar_GetLabel_1 869 -#define wxMenuBar_GetLabel_0 870 -#define wxMenuBar_GetLabelTop 871 -#define wxMenuBar_GetMenu 872 -#define wxMenuBar_GetMenuCount 873 -#define wxMenuBar_Insert 874 -#define wxMenuBar_IsChecked 875 -#define wxMenuBar_IsEnabled_1 876 -#define wxMenuBar_IsEnabled_0 877 -#define wxMenuBar_Remove 878 -#define wxMenuBar_Replace 879 -#define wxMenuBar_SetHelpString 880 -#define wxMenuBar_SetLabel_2 881 -#define wxMenuBar_SetLabel_1 882 -#define wxMenuBar_SetLabelTop 883 -#define wxControl_GetLabel 884 -#define wxControl_SetLabel 885 -#define wxControlWithItems_Append_1 886 -#define wxControlWithItems_Append_2 887 -#define wxControlWithItems_appendStrings_1 888 -#define wxControlWithItems_Clear 889 -#define wxControlWithItems_Delete 890 -#define wxControlWithItems_FindString 891 -#define wxControlWithItems_getClientData 892 -#define wxControlWithItems_setClientData 893 -#define wxControlWithItems_GetCount 894 -#define wxControlWithItems_GetSelection 895 -#define wxControlWithItems_GetString 896 -#define wxControlWithItems_GetStringSelection 897 -#define wxControlWithItems_Insert_2 898 -#define wxControlWithItems_Insert_3 899 -#define wxControlWithItems_IsEmpty 900 -#define wxControlWithItems_Select 901 -#define wxControlWithItems_SetSelection 902 -#define wxControlWithItems_SetString 903 -#define wxControlWithItems_SetStringSelection 904 -#define wxMenu_new_2 907 -#define wxMenu_new_1 908 -#define wxMenu_destruct 910 -#define wxMenu_Append_3 911 -#define wxMenu_Append_1 912 -#define wxMenu_Append_4_0 913 -#define wxMenu_Append_4_1 914 -#define wxMenu_AppendCheckItem 915 -#define wxMenu_AppendRadioItem 916 -#define wxMenu_AppendSeparator 917 -#define wxMenu_Break 918 -#define wxMenu_Check 919 -#define wxMenu_Delete_1_0 920 -#define wxMenu_Delete_1_1 921 -#define wxMenu_Destroy_1_0 922 -#define wxMenu_Destroy_1_1 923 -#define wxMenu_Enable 924 -#define wxMenu_FindItem_1 925 -#define wxMenu_FindItem_2 926 -#define wxMenu_FindItemByPosition 927 -#define wxMenu_GetHelpString 928 -#define wxMenu_GetLabel 929 -#define wxMenu_GetMenuItemCount 930 -#define wxMenu_GetMenuItems 931 -#define wxMenu_GetTitle 933 -#define wxMenu_Insert_2 934 -#define wxMenu_Insert_3 935 -#define wxMenu_Insert_5_1 936 -#define wxMenu_Insert_5_0 937 -#define wxMenu_InsertCheckItem 938 -#define wxMenu_InsertRadioItem 939 -#define wxMenu_InsertSeparator 940 -#define wxMenu_IsChecked 941 -#define wxMenu_IsEnabled 942 -#define wxMenu_Prepend_1 943 -#define wxMenu_Prepend_2 944 -#define wxMenu_Prepend_4_1 945 -#define wxMenu_Prepend_4_0 946 -#define wxMenu_PrependCheckItem 947 -#define wxMenu_PrependRadioItem 948 -#define wxMenu_PrependSeparator 949 -#define wxMenu_Remove_1_0 950 -#define wxMenu_Remove_1_1 951 -#define wxMenu_SetHelpString 952 -#define wxMenu_SetLabel 953 -#define wxMenu_SetTitle 954 -#define wxMenuItem_new 955 -#define wxMenuItem_destruct 957 -#define wxMenuItem_Check 958 -#define wxMenuItem_Enable 959 -#define wxMenuItem_GetBitmap 960 -#define wxMenuItem_GetHelp 961 -#define wxMenuItem_GetId 962 -#define wxMenuItem_GetKind 963 -#define wxMenuItem_GetLabel 964 -#define wxMenuItem_GetLabelFromText 965 -#define wxMenuItem_GetMenu 966 -#define wxMenuItem_GetText 967 -#define wxMenuItem_GetSubMenu 968 -#define wxMenuItem_IsCheckable 969 -#define wxMenuItem_IsChecked 970 -#define wxMenuItem_IsEnabled 971 -#define wxMenuItem_IsSeparator 972 -#define wxMenuItem_IsSubMenu 973 -#define wxMenuItem_SetBitmap 974 -#define wxMenuItem_SetHelp 975 -#define wxMenuItem_SetMenu 976 -#define wxMenuItem_SetSubMenu 977 -#define wxMenuItem_SetText 978 -#define wxToolBar_AddControl 979 -#define wxToolBar_AddSeparator 980 -#define wxToolBar_AddTool_5 981 -#define wxToolBar_AddTool_4_0 982 -#define wxToolBar_AddTool_1 983 -#define wxToolBar_AddTool_4_1 984 -#define wxToolBar_AddTool_3 985 -#define wxToolBar_AddTool_6 986 -#define wxToolBar_AddCheckTool 987 -#define wxToolBar_AddRadioTool 988 -#define wxToolBar_AddStretchableSpace 989 -#define wxToolBar_InsertStretchableSpace 990 -#define wxToolBar_DeleteTool 991 -#define wxToolBar_DeleteToolByPos 992 -#define wxToolBar_EnableTool 993 -#define wxToolBar_FindById 994 -#define wxToolBar_FindControl 995 -#define wxToolBar_FindToolForPosition 996 -#define wxToolBar_GetToolSize 997 -#define wxToolBar_GetToolBitmapSize 998 -#define wxToolBar_GetMargins 999 -#define wxToolBar_GetToolEnabled 1000 -#define wxToolBar_GetToolLongHelp 1001 -#define wxToolBar_GetToolPacking 1002 -#define wxToolBar_GetToolPos 1003 -#define wxToolBar_GetToolSeparation 1004 -#define wxToolBar_GetToolShortHelp 1005 -#define wxToolBar_GetToolState 1006 -#define wxToolBar_InsertControl 1007 -#define wxToolBar_InsertSeparator 1008 -#define wxToolBar_InsertTool_5 1009 -#define wxToolBar_InsertTool_2 1010 -#define wxToolBar_InsertTool_4 1011 -#define wxToolBar_Realize 1012 -#define wxToolBar_RemoveTool 1013 -#define wxToolBar_SetMargins 1014 -#define wxToolBar_SetToolBitmapSize 1015 -#define wxToolBar_SetToolLongHelp 1016 -#define wxToolBar_SetToolPacking 1017 -#define wxToolBar_SetToolShortHelp 1018 -#define wxToolBar_SetToolSeparation 1019 -#define wxToolBar_ToggleTool 1020 -#define wxStatusBar_new_0 1022 -#define wxStatusBar_new_2 1023 -#define wxStatusBar_destruct 1025 -#define wxStatusBar_Create 1026 -#define wxStatusBar_GetFieldRect 1027 -#define wxStatusBar_GetFieldsCount 1028 -#define wxStatusBar_GetStatusText 1029 -#define wxStatusBar_PopStatusText 1030 -#define wxStatusBar_PushStatusText 1031 -#define wxStatusBar_SetFieldsCount 1032 -#define wxStatusBar_SetMinHeight 1033 -#define wxStatusBar_SetStatusText 1034 -#define wxStatusBar_SetStatusWidths 1035 -#define wxStatusBar_SetStatusStyles 1036 -#define wxBitmap_new_0 1037 -#define wxBitmap_new_3 1038 -#define wxBitmap_new_4 1039 -#define wxBitmap_new_2_0 1040 -#define wxBitmap_new_2_1 1041 -#define wxBitmap_destruct 1042 -#define wxBitmap_ConvertToImage 1043 -#define wxBitmap_CopyFromIcon 1044 -#define wxBitmap_Create 1045 -#define wxBitmap_GetDepth 1046 -#define wxBitmap_GetHeight 1047 -#define wxBitmap_GetPalette 1048 -#define wxBitmap_GetMask 1049 -#define wxBitmap_GetWidth 1050 -#define wxBitmap_GetSubBitmap 1051 -#define wxBitmap_LoadFile 1052 -#define wxBitmap_Ok 1053 -#define wxBitmap_SaveFile 1054 -#define wxBitmap_SetDepth 1055 -#define wxBitmap_SetHeight 1056 -#define wxBitmap_SetMask 1057 -#define wxBitmap_SetPalette 1058 -#define wxBitmap_SetWidth 1059 -#define wxIcon_new_0 1060 -#define wxIcon_new_2 1061 -#define wxIcon_new_1 1062 -#define wxIcon_CopyFromBitmap 1063 -#define wxIcon_destroy 1064 -#define wxIconBundle_new_0 1065 -#define wxIconBundle_new_2 1066 -#define wxIconBundle_new_1_0 1067 -#define wxIconBundle_new_1_1 1068 -#define wxIconBundle_destruct 1069 -#define wxIconBundle_AddIcon_2 1070 -#define wxIconBundle_AddIcon_1 1071 -#define wxIconBundle_GetIcon_1_1 1072 -#define wxIconBundle_GetIcon_1_0 1073 -#define wxCursor_new_0 1074 -#define wxCursor_new_1_0 1075 -#define wxCursor_new_1_1 1076 -#define wxCursor_new_4 1077 -#define wxCursor_destruct 1078 -#define wxCursor_Ok 1079 -#define wxMask_new_0 1080 -#define wxMask_new_2_1 1081 -#define wxMask_new_2_0 1082 -#define wxMask_new_1 1083 -#define wxMask_destruct 1084 -#define wxMask_Create_2_1 1085 -#define wxMask_Create_2_0 1086 -#define wxMask_Create_1 1087 -#define wxImage_new_0 1088 -#define wxImage_new_3_0 1089 -#define wxImage_new_4 1090 -#define wxImage_new_5 1091 -#define wxImage_new_2 1092 -#define wxImage_new_3_1 1093 -#define wxImage_Blur 1094 -#define wxImage_BlurHorizontal 1095 -#define wxImage_BlurVertical 1096 -#define wxImage_ConvertAlphaToMask 1097 -#define wxImage_ConvertToGreyscale 1098 -#define wxImage_ConvertToMono 1099 -#define wxImage_Copy 1100 -#define wxImage_Create_3 1101 -#define wxImage_Create_4 1102 -#define wxImage_Create_5 1103 -#define wxImage_Destroy 1104 -#define wxImage_FindFirstUnusedColour 1105 -#define wxImage_GetImageExtWildcard 1106 -#define wxImage_GetAlpha_2 1107 -#define wxImage_GetAlpha_0 1108 -#define wxImage_GetBlue 1109 -#define wxImage_GetData 1110 -#define wxImage_GetGreen 1111 -#define wxImage_GetImageCount 1112 -#define wxImage_GetHeight 1113 -#define wxImage_GetMaskBlue 1114 -#define wxImage_GetMaskGreen 1115 -#define wxImage_GetMaskRed 1116 -#define wxImage_GetOrFindMaskColour 1117 -#define wxImage_GetPalette 1118 -#define wxImage_GetRed 1119 -#define wxImage_GetSubImage 1120 -#define wxImage_GetWidth 1121 -#define wxImage_HasAlpha 1122 -#define wxImage_HasMask 1123 -#define wxImage_GetOption 1124 -#define wxImage_GetOptionInt 1125 -#define wxImage_HasOption 1126 -#define wxImage_InitAlpha 1127 -#define wxImage_InitStandardHandlers 1128 -#define wxImage_IsTransparent 1129 -#define wxImage_LoadFile_2 1130 -#define wxImage_LoadFile_3 1131 -#define wxImage_Ok 1132 -#define wxImage_RemoveHandler 1133 -#define wxImage_Mirror 1134 -#define wxImage_Replace 1135 -#define wxImage_Rescale 1136 -#define wxImage_Resize 1137 -#define wxImage_Rotate 1138 -#define wxImage_RotateHue 1139 -#define wxImage_Rotate90 1140 -#define wxImage_SaveFile_1 1141 -#define wxImage_SaveFile_2_0 1142 -#define wxImage_SaveFile_2_1 1143 -#define wxImage_Scale 1144 -#define wxImage_Size 1145 -#define wxImage_SetAlpha_3 1146 -#define wxImage_SetAlpha_2 1147 -#define wxImage_SetData_2 1148 -#define wxImage_SetData_4 1149 -#define wxImage_SetMask 1150 -#define wxImage_SetMaskColour 1151 -#define wxImage_SetMaskFromImage 1152 -#define wxImage_SetOption_2_1 1153 -#define wxImage_SetOption_2_0 1154 -#define wxImage_SetPalette 1155 -#define wxImage_SetRGB_5 1156 -#define wxImage_SetRGB_4 1157 -#define wxImage_destroy 1158 -#define wxBrush_new_0 1159 -#define wxBrush_new_2 1160 -#define wxBrush_new_1 1161 -#define wxBrush_destruct 1163 -#define wxBrush_GetColour 1164 -#define wxBrush_GetStipple 1165 -#define wxBrush_GetStyle 1166 -#define wxBrush_IsHatch 1167 -#define wxBrush_IsOk 1168 -#define wxBrush_SetColour_1 1169 -#define wxBrush_SetColour_3 1170 -#define wxBrush_SetStipple 1171 -#define wxBrush_SetStyle 1172 -#define wxPen_new_0 1173 -#define wxPen_new_2 1174 -#define wxPen_destruct 1175 -#define wxPen_GetCap 1176 -#define wxPen_GetColour 1177 -#define wxPen_GetJoin 1178 -#define wxPen_GetStyle 1179 -#define wxPen_GetWidth 1180 -#define wxPen_IsOk 1181 -#define wxPen_SetCap 1182 -#define wxPen_SetColour_1 1183 -#define wxPen_SetColour_3 1184 -#define wxPen_SetJoin 1185 -#define wxPen_SetStyle 1186 -#define wxPen_SetWidth 1187 -#define wxRegion_new_0 1188 -#define wxRegion_new_4 1189 -#define wxRegion_new_2 1190 -#define wxRegion_new_1_1 1191 -#define wxRegion_new_1_0 1193 -#define wxRegion_destruct 1195 -#define wxRegion_Clear 1196 -#define wxRegion_Contains_2 1197 -#define wxRegion_Contains_1_0 1198 -#define wxRegion_Contains_4 1199 -#define wxRegion_Contains_1_1 1200 -#define wxRegion_ConvertToBitmap 1201 -#define wxRegion_GetBox 1202 -#define wxRegion_Intersect_4 1203 -#define wxRegion_Intersect_1_1 1204 -#define wxRegion_Intersect_1_0 1205 -#define wxRegion_IsEmpty 1206 -#define wxRegion_Subtract_4 1207 -#define wxRegion_Subtract_1_1 1208 -#define wxRegion_Subtract_1_0 1209 -#define wxRegion_Offset_2 1210 -#define wxRegion_Offset_1 1211 -#define wxRegion_Union_4 1212 -#define wxRegion_Union_1_2 1213 -#define wxRegion_Union_1_1 1214 -#define wxRegion_Union_1_0 1215 -#define wxRegion_Union_3 1216 -#define wxRegion_Xor_4 1217 -#define wxRegion_Xor_1_1 1218 -#define wxRegion_Xor_1_0 1219 -#define wxAcceleratorTable_new_0 1220 -#define wxAcceleratorTable_new_2 1221 -#define wxAcceleratorTable_destruct 1222 -#define wxAcceleratorTable_Ok 1223 -#define wxAcceleratorEntry_new_1_0 1224 -#define wxAcceleratorEntry_new_1_1 1225 -#define wxAcceleratorEntry_GetCommand 1226 -#define wxAcceleratorEntry_GetFlags 1227 -#define wxAcceleratorEntry_GetKeyCode 1228 -#define wxAcceleratorEntry_Set 1229 -#define wxAcceleratorEntry_destroy 1230 -#define wxCaret_new_3 1235 -#define wxCaret_new_2 1236 -#define wxCaret_destruct 1238 -#define wxCaret_Create_3 1239 -#define wxCaret_Create_2 1240 -#define wxCaret_GetBlinkTime 1241 -#define wxCaret_GetPosition 1243 -#define wxCaret_GetSize 1245 -#define wxCaret_GetWindow 1246 -#define wxCaret_Hide 1247 -#define wxCaret_IsOk 1248 -#define wxCaret_IsVisible 1249 -#define wxCaret_Move_2 1250 -#define wxCaret_Move_1 1251 -#define wxCaret_SetBlinkTime 1252 -#define wxCaret_SetSize_2 1253 -#define wxCaret_SetSize_1 1254 -#define wxCaret_Show 1255 -#define wxSizer_Add_2_1 1256 -#define wxSizer_Add_2_0 1257 -#define wxSizer_Add_3 1258 -#define wxSizer_Add_2_3 1259 -#define wxSizer_Add_2_2 1260 -#define wxSizer_AddSpacer 1261 -#define wxSizer_AddStretchSpacer 1262 -#define wxSizer_CalcMin 1263 -#define wxSizer_Clear 1264 -#define wxSizer_Detach_1_2 1265 -#define wxSizer_Detach_1_1 1266 -#define wxSizer_Detach_1_0 1267 -#define wxSizer_Fit 1268 -#define wxSizer_FitInside 1269 -#define wxSizer_GetChildren 1270 -#define wxSizer_GetItem_2_1 1271 -#define wxSizer_GetItem_2_0 1272 -#define wxSizer_GetItem_1 1273 -#define wxSizer_GetSize 1274 -#define wxSizer_GetPosition 1275 -#define wxSizer_GetMinSize 1276 -#define wxSizer_Hide_2_0 1277 -#define wxSizer_Hide_2_1 1278 -#define wxSizer_Hide_1 1279 -#define wxSizer_Insert_3_1 1280 -#define wxSizer_Insert_3_0 1281 -#define wxSizer_Insert_4 1282 -#define wxSizer_Insert_3_3 1283 -#define wxSizer_Insert_3_2 1284 -#define wxSizer_Insert_2 1285 -#define wxSizer_InsertSpacer 1286 -#define wxSizer_InsertStretchSpacer 1287 -#define wxSizer_IsShown_1_2 1288 -#define wxSizer_IsShown_1_1 1289 -#define wxSizer_IsShown_1_0 1290 -#define wxSizer_Layout 1291 -#define wxSizer_Prepend_2_1 1292 -#define wxSizer_Prepend_2_0 1293 -#define wxSizer_Prepend_3 1294 -#define wxSizer_Prepend_2_3 1295 -#define wxSizer_Prepend_2_2 1296 -#define wxSizer_Prepend_1 1297 -#define wxSizer_PrependSpacer 1298 -#define wxSizer_PrependStretchSpacer 1299 -#define wxSizer_RecalcSizes 1300 -#define wxSizer_Remove_1_1 1301 -#define wxSizer_Remove_1_0 1302 -#define wxSizer_Replace_3_1 1303 -#define wxSizer_Replace_3_0 1304 -#define wxSizer_Replace_2 1305 -#define wxSizer_SetDimension 1306 -#define wxSizer_SetMinSize_2 1307 -#define wxSizer_SetMinSize_1 1308 -#define wxSizer_SetItemMinSize_3_2 1309 -#define wxSizer_SetItemMinSize_2_2 1310 -#define wxSizer_SetItemMinSize_3_1 1311 -#define wxSizer_SetItemMinSize_2_1 1312 -#define wxSizer_SetItemMinSize_3_0 1313 -#define wxSizer_SetItemMinSize_2_0 1314 -#define wxSizer_SetSizeHints 1315 -#define wxSizer_SetVirtualSizeHints 1316 -#define wxSizer_Show_2_2 1317 -#define wxSizer_Show_2_1 1318 -#define wxSizer_Show_2_0 1319 -#define wxSizer_Show_1 1320 -#define wxSizerFlags_new 1321 -#define wxSizerFlags_Align 1322 -#define wxSizerFlags_Border_2 1323 -#define wxSizerFlags_Border_1 1324 -#define wxSizerFlags_Center 1325 -#define wxSizerFlags_Centre 1326 -#define wxSizerFlags_Expand 1327 -#define wxSizerFlags_Left 1328 -#define wxSizerFlags_Proportion 1329 -#define wxSizerFlags_Right 1330 -#define wxSizerFlags_destroy 1331 -#define wxSizerItem_new_5_1 1332 -#define wxSizerItem_new_2_1 1333 -#define wxSizerItem_new_5_0 1334 -#define wxSizerItem_new_2_0 1335 -#define wxSizerItem_new_6 1336 -#define wxSizerItem_new_3 1337 -#define wxSizerItem_new_0 1338 -#define wxSizerItem_destruct 1339 -#define wxSizerItem_CalcMin 1340 -#define wxSizerItem_DeleteWindows 1341 -#define wxSizerItem_DetachSizer 1342 -#define wxSizerItem_GetBorder 1343 -#define wxSizerItem_GetFlag 1344 -#define wxSizerItem_GetMinSize 1345 -#define wxSizerItem_GetPosition 1346 -#define wxSizerItem_GetProportion 1347 -#define wxSizerItem_GetRatio 1348 -#define wxSizerItem_GetRect 1349 -#define wxSizerItem_GetSize 1350 -#define wxSizerItem_GetSizer 1351 -#define wxSizerItem_GetSpacer 1352 -#define wxSizerItem_GetUserData 1353 -#define wxSizerItem_GetWindow 1354 -#define wxSizerItem_IsSizer 1355 -#define wxSizerItem_IsShown 1356 -#define wxSizerItem_IsSpacer 1357 -#define wxSizerItem_IsWindow 1358 -#define wxSizerItem_SetBorder 1359 -#define wxSizerItem_SetDimension 1360 -#define wxSizerItem_SetFlag 1361 -#define wxSizerItem_SetInitSize 1362 -#define wxSizerItem_SetMinSize_1 1363 -#define wxSizerItem_SetMinSize_2 1364 -#define wxSizerItem_SetProportion 1365 -#define wxSizerItem_SetRatio_2 1366 -#define wxSizerItem_SetRatio_1_1 1367 -#define wxSizerItem_SetRatio_1_0 1368 -#define wxSizerItem_SetSizer 1369 -#define wxSizerItem_SetSpacer_1 1370 -#define wxSizerItem_SetSpacer_2 1371 -#define wxSizerItem_SetWindow 1372 -#define wxSizerItem_Show 1373 -#define wxBoxSizer_new 1374 -#define wxBoxSizer_GetOrientation 1375 -#define wxBoxSizer_destroy 1376 -#define wxStaticBoxSizer_new_2 1377 -#define wxStaticBoxSizer_new_3 1378 -#define wxStaticBoxSizer_GetStaticBox 1379 -#define wxStaticBoxSizer_destroy 1380 -#define wxGridSizer_new_4 1381 -#define wxGridSizer_new_2 1382 -#define wxGridSizer_GetCols 1383 -#define wxGridSizer_GetHGap 1384 -#define wxGridSizer_GetRows 1385 -#define wxGridSizer_GetVGap 1386 -#define wxGridSizer_SetCols 1387 -#define wxGridSizer_SetHGap 1388 -#define wxGridSizer_SetRows 1389 -#define wxGridSizer_SetVGap 1390 -#define wxGridSizer_destroy 1391 -#define wxFlexGridSizer_new_4 1392 -#define wxFlexGridSizer_new_2 1393 -#define wxFlexGridSizer_AddGrowableCol 1394 -#define wxFlexGridSizer_AddGrowableRow 1395 -#define wxFlexGridSizer_GetFlexibleDirection 1396 -#define wxFlexGridSizer_GetNonFlexibleGrowMode 1397 -#define wxFlexGridSizer_RemoveGrowableCol 1398 -#define wxFlexGridSizer_RemoveGrowableRow 1399 -#define wxFlexGridSizer_SetFlexibleDirection 1400 -#define wxFlexGridSizer_SetNonFlexibleGrowMode 1401 -#define wxFlexGridSizer_destroy 1402 -#define wxGridBagSizer_new 1403 -#define wxGridBagSizer_Add_3_2 1404 -#define wxGridBagSizer_Add_3_1 1405 -#define wxGridBagSizer_Add_4 1406 -#define wxGridBagSizer_Add_1_0 1407 -#define wxGridBagSizer_Add_2_1 1408 -#define wxGridBagSizer_Add_2_0 1409 -#define wxGridBagSizer_Add_3_0 1410 -#define wxGridBagSizer_Add_1_1 1411 -#define wxGridBagSizer_CalcMin 1412 -#define wxGridBagSizer_CheckForIntersection_2 1413 -#define wxGridBagSizer_CheckForIntersection_3 1414 -#define wxGridBagSizer_FindItem_1_1 1415 -#define wxGridBagSizer_FindItem_1_0 1416 -#define wxGridBagSizer_FindItemAtPoint 1417 -#define wxGridBagSizer_FindItemAtPosition 1418 -#define wxGridBagSizer_FindItemWithData 1419 -#define wxGridBagSizer_GetCellSize 1420 -#define wxGridBagSizer_GetEmptyCellSize 1421 -#define wxGridBagSizer_GetItemPosition_1_2 1422 -#define wxGridBagSizer_GetItemPosition_1_1 1423 -#define wxGridBagSizer_GetItemPosition_1_0 1424 -#define wxGridBagSizer_GetItemSpan_1_2 1425 -#define wxGridBagSizer_GetItemSpan_1_1 1426 -#define wxGridBagSizer_GetItemSpan_1_0 1427 -#define wxGridBagSizer_SetEmptyCellSize 1428 -#define wxGridBagSizer_SetItemPosition_2_2 1429 -#define wxGridBagSizer_SetItemPosition_2_1 1430 -#define wxGridBagSizer_SetItemPosition_2_0 1431 -#define wxGridBagSizer_SetItemSpan_2_2 1432 -#define wxGridBagSizer_SetItemSpan_2_1 1433 -#define wxGridBagSizer_SetItemSpan_2_0 1434 -#define wxGridBagSizer_destroy 1435 -#define wxStdDialogButtonSizer_new 1436 -#define wxStdDialogButtonSizer_AddButton 1437 -#define wxStdDialogButtonSizer_Realize 1438 -#define wxStdDialogButtonSizer_SetAffirmativeButton 1439 -#define wxStdDialogButtonSizer_SetCancelButton 1440 -#define wxStdDialogButtonSizer_SetNegativeButton 1441 -#define wxStdDialogButtonSizer_destroy 1442 -#define wxFont_new_0 1443 -#define wxFont_new_1 1444 -#define wxFont_new_5 1445 -#define wxFont_destruct 1447 -#define wxFont_IsFixedWidth 1448 -#define wxFont_GetDefaultEncoding 1449 -#define wxFont_GetFaceName 1450 -#define wxFont_GetFamily 1451 -#define wxFont_GetNativeFontInfoDesc 1452 -#define wxFont_GetNativeFontInfoUserDesc 1453 -#define wxFont_GetPointSize 1454 -#define wxFont_GetStyle 1455 -#define wxFont_GetUnderlined 1456 -#define wxFont_GetWeight 1457 -#define wxFont_Ok 1458 -#define wxFont_SetDefaultEncoding 1459 -#define wxFont_SetFaceName 1460 -#define wxFont_SetFamily 1461 -#define wxFont_SetPointSize 1462 -#define wxFont_SetStyle 1463 -#define wxFont_SetUnderlined 1464 -#define wxFont_SetWeight 1465 -#define wxToolTip_Enable 1466 -#define wxToolTip_SetDelay 1467 -#define wxToolTip_new 1468 -#define wxToolTip_SetTip 1469 -#define wxToolTip_GetTip 1470 -#define wxToolTip_GetWindow 1471 -#define wxToolTip_destroy 1472 -#define wxButton_new_3 1474 -#define wxButton_new_0 1475 -#define wxButton_destruct 1476 -#define wxButton_Create 1477 -#define wxButton_GetDefaultSize 1478 -#define wxButton_SetDefault 1479 -#define wxButton_SetLabel 1480 -#define wxBitmapButton_new_4 1482 -#define wxBitmapButton_new_0 1483 -#define wxBitmapButton_Create 1484 -#define wxBitmapButton_GetBitmapDisabled 1485 -#define wxBitmapButton_GetBitmapFocus 1487 -#define wxBitmapButton_GetBitmapLabel 1489 -#define wxBitmapButton_GetBitmapSelected 1491 -#define wxBitmapButton_SetBitmapDisabled 1493 -#define wxBitmapButton_SetBitmapFocus 1494 -#define wxBitmapButton_SetBitmapLabel 1495 -#define wxBitmapButton_SetBitmapSelected 1496 -#define wxBitmapButton_destroy 1497 -#define wxToggleButton_new_0 1498 -#define wxToggleButton_new_4 1499 -#define wxToggleButton_Create 1500 -#define wxToggleButton_GetValue 1501 -#define wxToggleButton_SetValue 1502 -#define wxToggleButton_destroy 1503 -#define wxCalendarCtrl_new_0 1504 -#define wxCalendarCtrl_new_3 1505 -#define wxCalendarCtrl_Create 1506 -#define wxCalendarCtrl_destruct 1507 -#define wxCalendarCtrl_SetDate 1508 -#define wxCalendarCtrl_GetDate 1509 -#define wxCalendarCtrl_EnableYearChange 1510 -#define wxCalendarCtrl_EnableMonthChange 1511 -#define wxCalendarCtrl_EnableHolidayDisplay 1512 -#define wxCalendarCtrl_SetHeaderColours 1513 -#define wxCalendarCtrl_GetHeaderColourFg 1514 -#define wxCalendarCtrl_GetHeaderColourBg 1515 -#define wxCalendarCtrl_SetHighlightColours 1516 -#define wxCalendarCtrl_GetHighlightColourFg 1517 -#define wxCalendarCtrl_GetHighlightColourBg 1518 -#define wxCalendarCtrl_SetHolidayColours 1519 -#define wxCalendarCtrl_GetHolidayColourFg 1520 -#define wxCalendarCtrl_GetHolidayColourBg 1521 -#define wxCalendarCtrl_GetAttr 1522 -#define wxCalendarCtrl_SetAttr 1523 -#define wxCalendarCtrl_SetHoliday 1524 -#define wxCalendarCtrl_ResetAttr 1525 -#define wxCalendarCtrl_HitTest 1526 -#define wxCalendarDateAttr_new_0 1527 -#define wxCalendarDateAttr_new_2_1 1528 -#define wxCalendarDateAttr_new_2_0 1529 -#define wxCalendarDateAttr_SetTextColour 1530 -#define wxCalendarDateAttr_SetBackgroundColour 1531 -#define wxCalendarDateAttr_SetBorderColour 1532 -#define wxCalendarDateAttr_SetFont 1533 -#define wxCalendarDateAttr_SetBorder 1534 -#define wxCalendarDateAttr_SetHoliday 1535 -#define wxCalendarDateAttr_HasTextColour 1536 -#define wxCalendarDateAttr_HasBackgroundColour 1537 -#define wxCalendarDateAttr_HasBorderColour 1538 -#define wxCalendarDateAttr_HasFont 1539 -#define wxCalendarDateAttr_HasBorder 1540 -#define wxCalendarDateAttr_IsHoliday 1541 -#define wxCalendarDateAttr_GetTextColour 1542 -#define wxCalendarDateAttr_GetBackgroundColour 1543 -#define wxCalendarDateAttr_GetBorderColour 1544 -#define wxCalendarDateAttr_GetFont 1545 -#define wxCalendarDateAttr_GetBorder 1546 -#define wxCalendarDateAttr_destroy 1547 -#define wxCheckBox_new_4 1549 -#define wxCheckBox_new_0 1550 -#define wxCheckBox_Create 1551 -#define wxCheckBox_GetValue 1552 -#define wxCheckBox_Get3StateValue 1553 -#define wxCheckBox_Is3rdStateAllowedForUser 1554 -#define wxCheckBox_Is3State 1555 -#define wxCheckBox_IsChecked 1556 -#define wxCheckBox_SetValue 1557 -#define wxCheckBox_Set3StateValue 1558 -#define wxCheckBox_destroy 1559 -#define wxCheckListBox_new_0 1560 -#define wxCheckListBox_new_3 1562 -#define wxCheckListBox_Check 1563 -#define wxCheckListBox_IsChecked 1564 -#define wxCheckListBox_destroy 1565 -#define wxChoice_new_3 1568 -#define wxChoice_new_0 1569 -#define wxChoice_destruct 1571 -#define wxChoice_Create 1573 -#define wxChoice_Delete 1574 -#define wxChoice_GetColumns 1575 -#define wxChoice_SetColumns 1576 -#define wxComboBox_new_0 1577 -#define wxComboBox_new_3 1579 -#define wxComboBox_destruct 1580 -#define wxComboBox_Create 1582 -#define wxComboBox_CanCopy 1583 -#define wxComboBox_CanCut 1584 -#define wxComboBox_CanPaste 1585 -#define wxComboBox_CanRedo 1586 -#define wxComboBox_CanUndo 1587 -#define wxComboBox_Copy 1588 -#define wxComboBox_Cut 1589 -#define wxComboBox_GetInsertionPoint 1590 -#define wxComboBox_GetLastPosition 1591 -#define wxComboBox_GetValue 1592 -#define wxComboBox_Paste 1593 -#define wxComboBox_Redo 1594 -#define wxComboBox_Replace 1595 -#define wxComboBox_Remove 1596 -#define wxComboBox_SetInsertionPoint 1597 -#define wxComboBox_SetInsertionPointEnd 1598 -#define wxComboBox_SetSelection_1 1599 -#define wxComboBox_SetSelection_2 1600 -#define wxComboBox_SetValue 1601 -#define wxComboBox_Undo 1602 -#define wxGauge_new_0 1603 -#define wxGauge_new_4 1604 -#define wxGauge_Create 1605 -#define wxGauge_GetRange 1606 -#define wxGauge_GetValue 1607 -#define wxGauge_IsVertical 1608 -#define wxGauge_SetRange 1609 -#define wxGauge_SetValue 1610 -#define wxGauge_Pulse 1611 -#define wxGauge_destroy 1612 -#define wxGenericDirCtrl_new_0 1613 -#define wxGenericDirCtrl_new_2 1614 -#define wxGenericDirCtrl_destruct 1615 -#define wxGenericDirCtrl_Create 1616 -#define wxGenericDirCtrl_Init 1617 -#define wxGenericDirCtrl_CollapseTree 1618 -#define wxGenericDirCtrl_ExpandPath 1619 -#define wxGenericDirCtrl_GetDefaultPath 1620 -#define wxGenericDirCtrl_GetPath 1621 -#define wxGenericDirCtrl_GetFilePath 1622 -#define wxGenericDirCtrl_GetFilter 1623 -#define wxGenericDirCtrl_GetFilterIndex 1624 -#define wxGenericDirCtrl_GetRootId 1625 -#define wxGenericDirCtrl_GetTreeCtrl 1626 -#define wxGenericDirCtrl_ReCreateTree 1627 -#define wxGenericDirCtrl_SetDefaultPath 1628 -#define wxGenericDirCtrl_SetFilter 1629 -#define wxGenericDirCtrl_SetFilterIndex 1630 -#define wxGenericDirCtrl_SetPath 1631 -#define wxStaticBox_new_4 1633 -#define wxStaticBox_new_0 1634 -#define wxStaticBox_Create 1635 -#define wxStaticBox_destroy 1636 -#define wxStaticLine_new_2 1638 -#define wxStaticLine_new_0 1639 -#define wxStaticLine_Create 1640 -#define wxStaticLine_IsVertical 1641 -#define wxStaticLine_GetDefaultSize 1642 -#define wxStaticLine_destroy 1643 -#define wxListBox_new_3 1646 -#define wxListBox_new_0 1647 -#define wxListBox_destruct 1649 -#define wxListBox_Create 1651 -#define wxListBox_Deselect 1652 -#define wxListBox_GetSelections 1653 -#define wxListBox_InsertItems 1654 -#define wxListBox_IsSelected 1655 -#define wxListBox_Set 1656 -#define wxListBox_HitTest 1657 -#define wxListBox_SetFirstItem_1_0 1658 -#define wxListBox_SetFirstItem_1_1 1659 -#define wxListCtrl_new_0 1660 -#define wxListCtrl_new_2 1661 -#define wxListCtrl_Arrange 1662 -#define wxListCtrl_AssignImageList 1663 -#define wxListCtrl_ClearAll 1664 -#define wxListCtrl_Create 1665 -#define wxListCtrl_DeleteAllItems 1666 -#define wxListCtrl_DeleteColumn 1667 -#define wxListCtrl_DeleteItem 1668 -#define wxListCtrl_EditLabel 1669 -#define wxListCtrl_EnsureVisible 1670 -#define wxListCtrl_FindItem_3_0 1671 -#define wxListCtrl_FindItem_3_1 1672 -#define wxListCtrl_GetColumn 1673 -#define wxListCtrl_GetColumnCount 1674 -#define wxListCtrl_GetColumnWidth 1675 -#define wxListCtrl_GetCountPerPage 1676 -#define wxListCtrl_GetEditControl 1677 -#define wxListCtrl_GetImageList 1678 -#define wxListCtrl_GetItem 1679 -#define wxListCtrl_GetItemBackgroundColour 1680 -#define wxListCtrl_GetItemCount 1681 -#define wxListCtrl_GetItemData 1682 -#define wxListCtrl_GetItemFont 1683 -#define wxListCtrl_GetItemPosition 1684 -#define wxListCtrl_GetItemRect 1685 -#define wxListCtrl_GetItemSpacing 1686 -#define wxListCtrl_GetItemState 1687 -#define wxListCtrl_GetItemText 1688 -#define wxListCtrl_GetItemTextColour 1689 -#define wxListCtrl_GetNextItem 1690 -#define wxListCtrl_GetSelectedItemCount 1691 -#define wxListCtrl_GetTextColour 1692 -#define wxListCtrl_GetTopItem 1693 -#define wxListCtrl_GetViewRect 1694 -#define wxListCtrl_HitTest 1695 -#define wxListCtrl_InsertColumn_2 1696 -#define wxListCtrl_InsertColumn_3 1697 -#define wxListCtrl_InsertItem_1 1698 -#define wxListCtrl_InsertItem_2_1 1699 -#define wxListCtrl_InsertItem_2_0 1700 -#define wxListCtrl_InsertItem_3 1701 -#define wxListCtrl_RefreshItem 1702 -#define wxListCtrl_RefreshItems 1703 -#define wxListCtrl_ScrollList 1704 -#define wxListCtrl_SetBackgroundColour 1705 -#define wxListCtrl_SetColumn 1706 -#define wxListCtrl_SetColumnWidth 1707 -#define wxListCtrl_SetImageList 1708 -#define wxListCtrl_SetItem_1 1709 -#define wxListCtrl_SetItem_4 1710 -#define wxListCtrl_SetItemBackgroundColour 1711 -#define wxListCtrl_SetItemCount 1712 -#define wxListCtrl_SetItemData 1713 -#define wxListCtrl_SetItemFont 1714 -#define wxListCtrl_SetItemImage 1715 -#define wxListCtrl_SetItemColumnImage 1716 -#define wxListCtrl_SetItemPosition 1717 -#define wxListCtrl_SetItemState 1718 -#define wxListCtrl_SetItemText 1719 -#define wxListCtrl_SetItemTextColour 1720 -#define wxListCtrl_SetSingleStyle 1721 -#define wxListCtrl_SetTextColour 1722 -#define wxListCtrl_SetWindowStyleFlag 1723 -#define wxListCtrl_SortItems 1724 -#define wxListCtrl_destroy 1725 -#define wxListView_ClearColumnImage 1726 -#define wxListView_Focus 1727 -#define wxListView_GetFirstSelected 1728 -#define wxListView_GetFocusedItem 1729 -#define wxListView_GetNextSelected 1730 -#define wxListView_IsSelected 1731 -#define wxListView_Select 1732 -#define wxListView_SetColumnImage 1733 -#define wxListItem_new_0 1734 -#define wxListItem_new_1 1735 -#define wxListItem_destruct 1736 -#define wxListItem_Clear 1737 -#define wxListItem_GetAlign 1738 -#define wxListItem_GetBackgroundColour 1739 -#define wxListItem_GetColumn 1740 -#define wxListItem_GetFont 1741 -#define wxListItem_GetId 1742 -#define wxListItem_GetImage 1743 -#define wxListItem_GetMask 1744 -#define wxListItem_GetState 1745 -#define wxListItem_GetText 1746 -#define wxListItem_GetTextColour 1747 -#define wxListItem_GetWidth 1748 -#define wxListItem_SetAlign 1749 -#define wxListItem_SetBackgroundColour 1750 -#define wxListItem_SetColumn 1751 -#define wxListItem_SetFont 1752 -#define wxListItem_SetId 1753 -#define wxListItem_SetImage 1754 -#define wxListItem_SetMask 1755 -#define wxListItem_SetState 1756 -#define wxListItem_SetStateMask 1757 -#define wxListItem_SetText 1758 -#define wxListItem_SetTextColour 1759 -#define wxListItem_SetWidth 1760 -#define wxListItemAttr_new_0 1761 -#define wxListItemAttr_new_3 1762 -#define wxListItemAttr_GetBackgroundColour 1763 -#define wxListItemAttr_GetFont 1764 -#define wxListItemAttr_GetTextColour 1765 -#define wxListItemAttr_HasBackgroundColour 1766 -#define wxListItemAttr_HasFont 1767 -#define wxListItemAttr_HasTextColour 1768 -#define wxListItemAttr_SetBackgroundColour 1769 -#define wxListItemAttr_SetFont 1770 -#define wxListItemAttr_SetTextColour 1771 -#define wxListItemAttr_destroy 1772 -#define wxImageList_new_0 1773 -#define wxImageList_new_3 1774 -#define wxImageList_Add_1 1775 -#define wxImageList_Add_2_0 1776 -#define wxImageList_Add_2_1 1777 -#define wxImageList_Create 1778 -#define wxImageList_Draw 1780 -#define wxImageList_GetBitmap 1781 -#define wxImageList_GetIcon 1782 -#define wxImageList_GetImageCount 1783 -#define wxImageList_GetSize 1784 -#define wxImageList_Remove 1785 -#define wxImageList_RemoveAll 1786 -#define wxImageList_Replace_2 1787 -#define wxImageList_Replace_3 1788 -#define wxImageList_destroy 1789 -#define wxTextAttr_new_0 1790 -#define wxTextAttr_new_2 1791 -#define wxTextAttr_GetAlignment 1792 -#define wxTextAttr_GetBackgroundColour 1793 -#define wxTextAttr_GetFont 1794 -#define wxTextAttr_GetLeftIndent 1795 -#define wxTextAttr_GetLeftSubIndent 1796 -#define wxTextAttr_GetRightIndent 1797 -#define wxTextAttr_GetTabs 1798 -#define wxTextAttr_GetTextColour 1799 -#define wxTextAttr_HasBackgroundColour 1800 -#define wxTextAttr_HasFont 1801 -#define wxTextAttr_HasTextColour 1802 -#define wxTextAttr_GetFlags 1803 -#define wxTextAttr_IsDefault 1804 -#define wxTextAttr_SetAlignment 1805 -#define wxTextAttr_SetBackgroundColour 1806 -#define wxTextAttr_SetFlags 1807 -#define wxTextAttr_SetFont 1808 -#define wxTextAttr_SetLeftIndent 1809 -#define wxTextAttr_SetRightIndent 1810 -#define wxTextAttr_SetTabs 1811 -#define wxTextAttr_SetTextColour 1812 -#define wxTextAttr_destroy 1813 -#define wxTextCtrl_new_3 1815 -#define wxTextCtrl_new_0 1816 -#define wxTextCtrl_destruct 1818 -#define wxTextCtrl_AppendText 1819 -#define wxTextCtrl_CanCopy 1820 -#define wxTextCtrl_CanCut 1821 -#define wxTextCtrl_CanPaste 1822 -#define wxTextCtrl_CanRedo 1823 -#define wxTextCtrl_CanUndo 1824 -#define wxTextCtrl_Clear 1825 -#define wxTextCtrl_Copy 1826 -#define wxTextCtrl_Create 1827 -#define wxTextCtrl_Cut 1828 -#define wxTextCtrl_DiscardEdits 1829 -#define wxTextCtrl_ChangeValue 1830 -#define wxTextCtrl_EmulateKeyPress 1831 -#define wxTextCtrl_GetDefaultStyle 1832 -#define wxTextCtrl_GetInsertionPoint 1833 -#define wxTextCtrl_GetLastPosition 1834 -#define wxTextCtrl_GetLineLength 1835 -#define wxTextCtrl_GetLineText 1836 -#define wxTextCtrl_GetNumberOfLines 1837 -#define wxTextCtrl_GetRange 1838 -#define wxTextCtrl_GetSelection 1839 -#define wxTextCtrl_GetStringSelection 1840 -#define wxTextCtrl_GetStyle 1841 -#define wxTextCtrl_GetValue 1842 -#define wxTextCtrl_IsEditable 1843 -#define wxTextCtrl_IsModified 1844 -#define wxTextCtrl_IsMultiLine 1845 -#define wxTextCtrl_IsSingleLine 1846 -#define wxTextCtrl_LoadFile 1847 -#define wxTextCtrl_MarkDirty 1848 -#define wxTextCtrl_Paste 1849 -#define wxTextCtrl_PositionToXY 1850 -#define wxTextCtrl_Redo 1851 -#define wxTextCtrl_Remove 1852 -#define wxTextCtrl_Replace 1853 -#define wxTextCtrl_SaveFile 1854 -#define wxTextCtrl_SetDefaultStyle 1855 -#define wxTextCtrl_SetEditable 1856 -#define wxTextCtrl_SetInsertionPoint 1857 -#define wxTextCtrl_SetInsertionPointEnd 1858 -#define wxTextCtrl_SetMaxLength 1860 -#define wxTextCtrl_SetSelection 1861 -#define wxTextCtrl_SetStyle 1862 -#define wxTextCtrl_SetValue 1863 -#define wxTextCtrl_ShowPosition 1864 -#define wxTextCtrl_Undo 1865 -#define wxTextCtrl_WriteText 1866 -#define wxTextCtrl_XYToPosition 1867 -#define wxNotebook_new_0 1870 -#define wxNotebook_new_3 1871 -#define wxNotebook_destruct 1872 -#define wxNotebook_AddPage 1873 -#define wxNotebook_AdvanceSelection 1874 -#define wxNotebook_AssignImageList 1875 -#define wxNotebook_Create 1876 -#define wxNotebook_DeleteAllPages 1877 -#define wxNotebook_DeletePage 1878 -#define wxNotebook_RemovePage 1879 -#define wxNotebook_GetCurrentPage 1880 -#define wxNotebook_GetImageList 1881 -#define wxNotebook_GetPage 1883 -#define wxNotebook_GetPageCount 1884 -#define wxNotebook_GetPageImage 1885 -#define wxNotebook_GetPageText 1886 -#define wxNotebook_GetRowCount 1887 -#define wxNotebook_GetSelection 1888 -#define wxNotebook_GetThemeBackgroundColour 1889 -#define wxNotebook_HitTest 1891 -#define wxNotebook_InsertPage 1893 -#define wxNotebook_SetImageList 1894 -#define wxNotebook_SetPadding 1895 -#define wxNotebook_SetPageSize 1896 -#define wxNotebook_SetPageImage 1897 -#define wxNotebook_SetPageText 1898 -#define wxNotebook_SetSelection 1899 -#define wxNotebook_ChangeSelection 1900 -#define wxChoicebook_new_0 1901 -#define wxChoicebook_new_3 1902 -#define wxChoicebook_AddPage 1903 -#define wxChoicebook_AdvanceSelection 1904 -#define wxChoicebook_AssignImageList 1905 -#define wxChoicebook_Create 1906 -#define wxChoicebook_DeleteAllPages 1907 -#define wxChoicebook_DeletePage 1908 -#define wxChoicebook_RemovePage 1909 -#define wxChoicebook_GetCurrentPage 1910 -#define wxChoicebook_GetImageList 1911 -#define wxChoicebook_GetPage 1913 -#define wxChoicebook_GetPageCount 1914 -#define wxChoicebook_GetPageImage 1915 -#define wxChoicebook_GetPageText 1916 -#define wxChoicebook_GetSelection 1917 -#define wxChoicebook_HitTest 1918 -#define wxChoicebook_InsertPage 1919 -#define wxChoicebook_SetImageList 1920 -#define wxChoicebook_SetPageSize 1921 -#define wxChoicebook_SetPageImage 1922 -#define wxChoicebook_SetPageText 1923 -#define wxChoicebook_SetSelection 1924 -#define wxChoicebook_ChangeSelection 1925 -#define wxChoicebook_destroy 1926 -#define wxToolbook_new_0 1927 -#define wxToolbook_new_3 1928 -#define wxToolbook_AddPage 1929 -#define wxToolbook_AdvanceSelection 1930 -#define wxToolbook_AssignImageList 1931 -#define wxToolbook_Create 1932 -#define wxToolbook_DeleteAllPages 1933 -#define wxToolbook_DeletePage 1934 -#define wxToolbook_RemovePage 1935 -#define wxToolbook_GetCurrentPage 1936 -#define wxToolbook_GetImageList 1937 -#define wxToolbook_GetPage 1939 -#define wxToolbook_GetPageCount 1940 -#define wxToolbook_GetPageImage 1941 -#define wxToolbook_GetPageText 1942 -#define wxToolbook_GetSelection 1943 -#define wxToolbook_HitTest 1945 -#define wxToolbook_InsertPage 1946 -#define wxToolbook_SetImageList 1947 -#define wxToolbook_SetPageSize 1948 -#define wxToolbook_SetPageImage 1949 -#define wxToolbook_SetPageText 1950 -#define wxToolbook_SetSelection 1951 -#define wxToolbook_ChangeSelection 1952 -#define wxToolbook_destroy 1953 -#define wxListbook_new_0 1954 -#define wxListbook_new_3 1955 -#define wxListbook_AddPage 1956 -#define wxListbook_AdvanceSelection 1957 -#define wxListbook_AssignImageList 1958 -#define wxListbook_Create 1959 -#define wxListbook_DeleteAllPages 1960 -#define wxListbook_DeletePage 1961 -#define wxListbook_RemovePage 1962 -#define wxListbook_GetCurrentPage 1963 -#define wxListbook_GetImageList 1964 -#define wxListbook_GetPage 1966 -#define wxListbook_GetPageCount 1967 -#define wxListbook_GetPageImage 1968 -#define wxListbook_GetPageText 1969 -#define wxListbook_GetSelection 1970 -#define wxListbook_HitTest 1972 -#define wxListbook_InsertPage 1973 -#define wxListbook_SetImageList 1974 -#define wxListbook_SetPageSize 1975 -#define wxListbook_SetPageImage 1976 -#define wxListbook_SetPageText 1977 -#define wxListbook_SetSelection 1978 -#define wxListbook_ChangeSelection 1979 -#define wxListbook_destroy 1980 -#define wxTreebook_new_0 1981 -#define wxTreebook_new_3 1982 -#define wxTreebook_AddPage 1983 -#define wxTreebook_AdvanceSelection 1984 -#define wxTreebook_AssignImageList 1985 -#define wxTreebook_Create 1986 -#define wxTreebook_DeleteAllPages 1987 -#define wxTreebook_DeletePage 1988 -#define wxTreebook_RemovePage 1989 -#define wxTreebook_GetCurrentPage 1990 -#define wxTreebook_GetImageList 1991 -#define wxTreebook_GetPage 1993 -#define wxTreebook_GetPageCount 1994 -#define wxTreebook_GetPageImage 1995 -#define wxTreebook_GetPageText 1996 -#define wxTreebook_GetSelection 1997 -#define wxTreebook_ExpandNode 1998 -#define wxTreebook_IsNodeExpanded 1999 -#define wxTreebook_HitTest 2001 -#define wxTreebook_InsertPage 2002 -#define wxTreebook_InsertSubPage 2003 -#define wxTreebook_SetImageList 2004 -#define wxTreebook_SetPageSize 2005 -#define wxTreebook_SetPageImage 2006 -#define wxTreebook_SetPageText 2007 -#define wxTreebook_SetSelection 2008 -#define wxTreebook_ChangeSelection 2009 -#define wxTreebook_destroy 2010 -#define wxTreeCtrl_new_2 2013 -#define wxTreeCtrl_new_0 2014 -#define wxTreeCtrl_destruct 2016 -#define wxTreeCtrl_AddRoot 2017 -#define wxTreeCtrl_AppendItem 2018 -#define wxTreeCtrl_AssignImageList 2019 -#define wxTreeCtrl_AssignStateImageList 2020 -#define wxTreeCtrl_Collapse 2021 -#define wxTreeCtrl_CollapseAndReset 2022 -#define wxTreeCtrl_Create 2023 -#define wxTreeCtrl_Delete 2024 -#define wxTreeCtrl_DeleteAllItems 2025 -#define wxTreeCtrl_DeleteChildren 2026 -#define wxTreeCtrl_EditLabel 2027 -#define wxTreeCtrl_EnsureVisible 2028 -#define wxTreeCtrl_Expand 2029 -#define wxTreeCtrl_GetBoundingRect 2030 -#define wxTreeCtrl_GetChildrenCount 2032 -#define wxTreeCtrl_GetCount 2033 -#define wxTreeCtrl_GetEditControl 2034 -#define wxTreeCtrl_GetFirstChild 2035 -#define wxTreeCtrl_GetNextChild 2036 -#define wxTreeCtrl_GetFirstVisibleItem 2037 -#define wxTreeCtrl_GetImageList 2038 -#define wxTreeCtrl_GetIndent 2039 -#define wxTreeCtrl_GetItemBackgroundColour 2040 -#define wxTreeCtrl_GetItemData 2041 -#define wxTreeCtrl_GetItemFont 2042 -#define wxTreeCtrl_GetItemImage_1 2043 -#define wxTreeCtrl_GetItemImage_2 2044 -#define wxTreeCtrl_GetItemText 2045 -#define wxTreeCtrl_GetItemTextColour 2046 -#define wxTreeCtrl_GetLastChild 2047 -#define wxTreeCtrl_GetNextSibling 2048 -#define wxTreeCtrl_GetNextVisible 2049 -#define wxTreeCtrl_GetItemParent 2050 -#define wxTreeCtrl_GetPrevSibling 2051 -#define wxTreeCtrl_GetPrevVisible 2052 -#define wxTreeCtrl_GetRootItem 2053 -#define wxTreeCtrl_GetSelection 2054 -#define wxTreeCtrl_GetSelections 2055 -#define wxTreeCtrl_GetStateImageList 2056 -#define wxTreeCtrl_HitTest 2057 -#define wxTreeCtrl_InsertItem 2059 -#define wxTreeCtrl_IsBold 2060 -#define wxTreeCtrl_IsExpanded 2061 -#define wxTreeCtrl_IsSelected 2062 -#define wxTreeCtrl_IsVisible 2063 -#define wxTreeCtrl_ItemHasChildren 2064 -#define wxTreeCtrl_IsTreeItemIdOk 2065 -#define wxTreeCtrl_PrependItem 2066 -#define wxTreeCtrl_ScrollTo 2067 -#define wxTreeCtrl_SelectItem_1 2068 -#define wxTreeCtrl_SelectItem_2 2069 -#define wxTreeCtrl_SetIndent 2070 -#define wxTreeCtrl_SetImageList 2071 -#define wxTreeCtrl_SetItemBackgroundColour 2072 -#define wxTreeCtrl_SetItemBold 2073 -#define wxTreeCtrl_SetItemData 2074 -#define wxTreeCtrl_SetItemDropHighlight 2075 -#define wxTreeCtrl_SetItemFont 2076 -#define wxTreeCtrl_SetItemHasChildren 2077 -#define wxTreeCtrl_SetItemImage_2 2078 -#define wxTreeCtrl_SetItemImage_3 2079 -#define wxTreeCtrl_SetItemText 2080 -#define wxTreeCtrl_SetItemTextColour 2081 -#define wxTreeCtrl_SetStateImageList 2082 -#define wxTreeCtrl_SetWindowStyle 2083 -#define wxTreeCtrl_SortChildren 2084 -#define wxTreeCtrl_Toggle 2085 -#define wxTreeCtrl_ToggleItemSelection 2086 -#define wxTreeCtrl_Unselect 2087 -#define wxTreeCtrl_UnselectAll 2088 -#define wxTreeCtrl_UnselectItem 2089 -#define wxScrollBar_new_0 2090 -#define wxScrollBar_new_3 2091 -#define wxScrollBar_destruct 2092 -#define wxScrollBar_Create 2093 -#define wxScrollBar_GetRange 2094 -#define wxScrollBar_GetPageSize 2095 -#define wxScrollBar_GetThumbPosition 2096 -#define wxScrollBar_GetThumbSize 2097 -#define wxScrollBar_SetThumbPosition 2098 -#define wxScrollBar_SetScrollbar 2099 -#define wxSpinButton_new_2 2101 -#define wxSpinButton_new_0 2102 -#define wxSpinButton_Create 2103 -#define wxSpinButton_GetMax 2104 -#define wxSpinButton_GetMin 2105 -#define wxSpinButton_GetValue 2106 -#define wxSpinButton_SetRange 2107 -#define wxSpinButton_SetValue 2108 -#define wxSpinButton_destroy 2109 -#define wxSpinCtrl_new_0 2110 -#define wxSpinCtrl_new_2 2111 -#define wxSpinCtrl_Create 2113 -#define wxSpinCtrl_SetValue_1_1 2116 -#define wxSpinCtrl_SetValue_1_0 2117 -#define wxSpinCtrl_GetValue 2119 -#define wxSpinCtrl_SetRange 2121 -#define wxSpinCtrl_SetSelection 2122 -#define wxSpinCtrl_GetMin 2124 -#define wxSpinCtrl_GetMax 2126 -#define wxSpinCtrl_destroy 2127 -#define wxStaticText_new_0 2128 -#define wxStaticText_new_4 2129 -#define wxStaticText_Create 2130 -#define wxStaticText_GetLabel 2131 -#define wxStaticText_SetLabel 2132 -#define wxStaticText_Wrap 2133 -#define wxStaticText_destroy 2134 -#define wxStaticBitmap_new_0 2135 -#define wxStaticBitmap_new_4 2136 -#define wxStaticBitmap_Create 2137 -#define wxStaticBitmap_GetBitmap 2138 -#define wxStaticBitmap_SetBitmap 2139 -#define wxStaticBitmap_destroy 2140 -#define wxRadioBox_new 2141 -#define wxRadioBox_destruct 2143 -#define wxRadioBox_Create 2144 -#define wxRadioBox_Enable_2 2145 -#define wxRadioBox_Enable_1 2146 -#define wxRadioBox_GetSelection 2147 -#define wxRadioBox_GetString 2148 -#define wxRadioBox_SetSelection 2149 -#define wxRadioBox_Show_2 2150 -#define wxRadioBox_Show_1 2151 -#define wxRadioBox_GetColumnCount 2152 -#define wxRadioBox_GetItemHelpText 2153 -#define wxRadioBox_GetItemToolTip 2154 -#define wxRadioBox_GetItemFromPoint 2156 -#define wxRadioBox_GetRowCount 2157 -#define wxRadioBox_IsItemEnabled 2158 -#define wxRadioBox_IsItemShown 2159 -#define wxRadioBox_SetItemHelpText 2160 -#define wxRadioBox_SetItemToolTip 2161 -#define wxRadioButton_new_0 2162 -#define wxRadioButton_new_4 2163 -#define wxRadioButton_Create 2164 -#define wxRadioButton_GetValue 2165 -#define wxRadioButton_SetValue 2166 -#define wxRadioButton_destroy 2167 -#define wxSlider_new_6 2169 -#define wxSlider_new_0 2170 -#define wxSlider_Create 2171 -#define wxSlider_GetLineSize 2172 -#define wxSlider_GetMax 2173 -#define wxSlider_GetMin 2174 -#define wxSlider_GetPageSize 2175 -#define wxSlider_GetThumbLength 2176 -#define wxSlider_GetValue 2177 -#define wxSlider_SetLineSize 2178 -#define wxSlider_SetPageSize 2179 -#define wxSlider_SetRange 2180 -#define wxSlider_SetThumbLength 2181 -#define wxSlider_SetValue 2182 -#define wxSlider_destroy 2183 -#define wxDialog_new_4 2185 -#define wxDialog_new_0 2186 -#define wxDialog_destruct 2188 -#define wxDialog_Create 2189 -#define wxDialog_CreateButtonSizer 2190 -#define wxDialog_CreateStdDialogButtonSizer 2191 -#define wxDialog_EndModal 2192 -#define wxDialog_GetAffirmativeId 2193 -#define wxDialog_GetReturnCode 2194 -#define wxDialog_IsModal 2195 -#define wxDialog_SetAffirmativeId 2196 -#define wxDialog_SetReturnCode 2197 -#define wxDialog_Show 2198 -#define wxDialog_ShowModal 2199 -#define wxColourDialog_new_0 2200 -#define wxColourDialog_new_2 2201 -#define wxColourDialog_destruct 2202 -#define wxColourDialog_Create 2203 -#define wxColourDialog_GetColourData 2204 -#define wxColourData_new_0 2205 -#define wxColourData_new_1 2206 -#define wxColourData_destruct 2207 -#define wxColourData_GetChooseFull 2208 -#define wxColourData_GetColour 2209 -#define wxColourData_GetCustomColour 2211 -#define wxColourData_SetChooseFull 2212 -#define wxColourData_SetColour 2213 -#define wxColourData_SetCustomColour 2214 -#define wxPalette_new_0 2215 -#define wxPalette_new_4 2216 -#define wxPalette_destruct 2218 -#define wxPalette_Create 2219 -#define wxPalette_GetColoursCount 2220 -#define wxPalette_GetPixel 2221 -#define wxPalette_GetRGB 2222 -#define wxPalette_IsOk 2223 -#define wxDirDialog_new 2227 -#define wxDirDialog_destruct 2228 -#define wxDirDialog_GetPath 2229 -#define wxDirDialog_GetMessage 2230 -#define wxDirDialog_SetMessage 2231 -#define wxDirDialog_SetPath 2232 -#define wxFileDialog_new 2236 -#define wxFileDialog_destruct 2237 -#define wxFileDialog_GetDirectory 2238 -#define wxFileDialog_GetFilename 2239 -#define wxFileDialog_GetFilenames 2240 -#define wxFileDialog_GetFilterIndex 2241 -#define wxFileDialog_GetMessage 2242 -#define wxFileDialog_GetPath 2243 -#define wxFileDialog_GetPaths 2244 -#define wxFileDialog_GetWildcard 2245 -#define wxFileDialog_SetDirectory 2246 -#define wxFileDialog_SetFilename 2247 -#define wxFileDialog_SetFilterIndex 2248 -#define wxFileDialog_SetMessage 2249 -#define wxFileDialog_SetPath 2250 -#define wxFileDialog_SetWildcard 2251 -#define wxPickerBase_SetInternalMargin 2252 -#define wxPickerBase_GetInternalMargin 2253 -#define wxPickerBase_SetTextCtrlProportion 2254 -#define wxPickerBase_SetPickerCtrlProportion 2255 -#define wxPickerBase_GetTextCtrlProportion 2256 -#define wxPickerBase_GetPickerCtrlProportion 2257 -#define wxPickerBase_HasTextCtrl 2258 -#define wxPickerBase_GetTextCtrl 2259 -#define wxPickerBase_IsTextCtrlGrowable 2260 -#define wxPickerBase_SetPickerCtrlGrowable 2261 -#define wxPickerBase_SetTextCtrlGrowable 2262 -#define wxPickerBase_IsPickerCtrlGrowable 2263 -#define wxFilePickerCtrl_new_0 2264 -#define wxFilePickerCtrl_new_3 2265 -#define wxFilePickerCtrl_Create 2266 -#define wxFilePickerCtrl_GetPath 2267 -#define wxFilePickerCtrl_SetPath 2268 -#define wxFilePickerCtrl_destroy 2269 -#define wxDirPickerCtrl_new_0 2270 -#define wxDirPickerCtrl_new_3 2271 -#define wxDirPickerCtrl_Create 2272 -#define wxDirPickerCtrl_GetPath 2273 -#define wxDirPickerCtrl_SetPath 2274 -#define wxDirPickerCtrl_destroy 2275 -#define wxColourPickerCtrl_new_0 2276 -#define wxColourPickerCtrl_new_3 2277 -#define wxColourPickerCtrl_Create 2278 -#define wxColourPickerCtrl_GetColour 2279 -#define wxColourPickerCtrl_SetColour_1_1 2280 -#define wxColourPickerCtrl_SetColour_1_0 2281 -#define wxColourPickerCtrl_destroy 2282 -#define wxDatePickerCtrl_new_0 2283 -#define wxDatePickerCtrl_new_3 2284 -#define wxDatePickerCtrl_GetRange 2285 -#define wxDatePickerCtrl_GetValue 2286 -#define wxDatePickerCtrl_SetRange 2287 -#define wxDatePickerCtrl_SetValue 2288 -#define wxDatePickerCtrl_destroy 2289 -#define wxFontPickerCtrl_new_0 2290 -#define wxFontPickerCtrl_new_3 2291 -#define wxFontPickerCtrl_Create 2292 -#define wxFontPickerCtrl_GetSelectedFont 2293 -#define wxFontPickerCtrl_SetSelectedFont 2294 -#define wxFontPickerCtrl_GetMaxPointSize 2295 -#define wxFontPickerCtrl_SetMaxPointSize 2296 -#define wxFontPickerCtrl_destroy 2297 -#define wxFindReplaceDialog_new_0 2300 -#define wxFindReplaceDialog_new_4 2301 -#define wxFindReplaceDialog_destruct 2302 -#define wxFindReplaceDialog_Create 2303 -#define wxFindReplaceDialog_GetData 2304 -#define wxFindReplaceData_new_0 2305 -#define wxFindReplaceData_new_1 2306 -#define wxFindReplaceData_GetFindString 2307 -#define wxFindReplaceData_GetReplaceString 2308 -#define wxFindReplaceData_GetFlags 2309 -#define wxFindReplaceData_SetFlags 2310 -#define wxFindReplaceData_SetFindString 2311 -#define wxFindReplaceData_SetReplaceString 2312 -#define wxFindReplaceData_destroy 2313 -#define wxMultiChoiceDialog_new_0 2314 -#define wxMultiChoiceDialog_new_5 2316 -#define wxMultiChoiceDialog_GetSelections 2317 -#define wxMultiChoiceDialog_SetSelections 2318 -#define wxMultiChoiceDialog_destroy 2319 -#define wxSingleChoiceDialog_new_0 2320 -#define wxSingleChoiceDialog_new_5 2322 -#define wxSingleChoiceDialog_GetSelection 2323 -#define wxSingleChoiceDialog_GetStringSelection 2324 -#define wxSingleChoiceDialog_SetSelection 2325 -#define wxSingleChoiceDialog_destroy 2326 -#define wxTextEntryDialog_new 2327 -#define wxTextEntryDialog_GetValue 2328 -#define wxTextEntryDialog_SetValue 2329 -#define wxTextEntryDialog_destroy 2330 -#define wxPasswordEntryDialog_new 2331 -#define wxPasswordEntryDialog_destroy 2332 -#define wxFontData_new_0 2333 -#define wxFontData_new_1 2334 -#define wxFontData_destruct 2335 -#define wxFontData_EnableEffects 2336 -#define wxFontData_GetAllowSymbols 2337 -#define wxFontData_GetColour 2338 -#define wxFontData_GetChosenFont 2339 -#define wxFontData_GetEnableEffects 2340 -#define wxFontData_GetInitialFont 2341 -#define wxFontData_GetShowHelp 2342 -#define wxFontData_SetAllowSymbols 2343 -#define wxFontData_SetChosenFont 2344 -#define wxFontData_SetColour 2345 -#define wxFontData_SetInitialFont 2346 -#define wxFontData_SetRange 2347 -#define wxFontData_SetShowHelp 2348 -#define wxFontDialog_new_0 2352 -#define wxFontDialog_new_2 2354 -#define wxFontDialog_Create 2356 -#define wxFontDialog_GetFontData 2357 -#define wxFontDialog_destroy 2359 -#define wxProgressDialog_new 2360 -#define wxProgressDialog_destruct 2361 -#define wxProgressDialog_Resume 2362 -#define wxProgressDialog_Update_2 2363 -#define wxProgressDialog_Update_0 2364 -#define wxMessageDialog_new 2365 -#define wxMessageDialog_destruct 2366 -#define wxPageSetupDialog_new 2367 -#define wxPageSetupDialog_destruct 2368 -#define wxPageSetupDialog_GetPageSetupData 2369 -#define wxPageSetupDialog_ShowModal 2370 -#define wxPageSetupDialogData_new_0 2371 -#define wxPageSetupDialogData_new_1_0 2372 -#define wxPageSetupDialogData_new_1_1 2373 -#define wxPageSetupDialogData_destruct 2374 -#define wxPageSetupDialogData_EnableHelp 2375 -#define wxPageSetupDialogData_EnableMargins 2376 -#define wxPageSetupDialogData_EnableOrientation 2377 -#define wxPageSetupDialogData_EnablePaper 2378 -#define wxPageSetupDialogData_EnablePrinter 2379 -#define wxPageSetupDialogData_GetDefaultMinMargins 2380 -#define wxPageSetupDialogData_GetEnableMargins 2381 -#define wxPageSetupDialogData_GetEnableOrientation 2382 -#define wxPageSetupDialogData_GetEnablePaper 2383 -#define wxPageSetupDialogData_GetEnablePrinter 2384 -#define wxPageSetupDialogData_GetEnableHelp 2385 -#define wxPageSetupDialogData_GetDefaultInfo 2386 -#define wxPageSetupDialogData_GetMarginTopLeft 2387 -#define wxPageSetupDialogData_GetMarginBottomRight 2388 -#define wxPageSetupDialogData_GetMinMarginTopLeft 2389 -#define wxPageSetupDialogData_GetMinMarginBottomRight 2390 -#define wxPageSetupDialogData_GetPaperId 2391 -#define wxPageSetupDialogData_GetPaperSize 2392 -#define wxPageSetupDialogData_GetPrintData 2394 -#define wxPageSetupDialogData_IsOk 2395 -#define wxPageSetupDialogData_SetDefaultInfo 2396 -#define wxPageSetupDialogData_SetDefaultMinMargins 2397 -#define wxPageSetupDialogData_SetMarginTopLeft 2398 -#define wxPageSetupDialogData_SetMarginBottomRight 2399 -#define wxPageSetupDialogData_SetMinMarginTopLeft 2400 -#define wxPageSetupDialogData_SetMinMarginBottomRight 2401 -#define wxPageSetupDialogData_SetPaperId 2402 -#define wxPageSetupDialogData_SetPaperSize_1_1 2403 -#define wxPageSetupDialogData_SetPaperSize_1_0 2404 -#define wxPageSetupDialogData_SetPrintData 2405 -#define wxPrintDialog_new_2_0 2406 -#define wxPrintDialog_new_2_1 2407 -#define wxPrintDialog_destruct 2408 -#define wxPrintDialog_GetPrintDialogData 2409 -#define wxPrintDialog_GetPrintDC 2410 -#define wxPrintDialogData_new_0 2411 -#define wxPrintDialogData_new_1_1 2412 -#define wxPrintDialogData_new_1_0 2413 -#define wxPrintDialogData_destruct 2414 -#define wxPrintDialogData_EnableHelp 2415 -#define wxPrintDialogData_EnablePageNumbers 2416 -#define wxPrintDialogData_EnablePrintToFile 2417 -#define wxPrintDialogData_EnableSelection 2418 -#define wxPrintDialogData_GetAllPages 2419 -#define wxPrintDialogData_GetCollate 2420 -#define wxPrintDialogData_GetFromPage 2421 -#define wxPrintDialogData_GetMaxPage 2422 -#define wxPrintDialogData_GetMinPage 2423 -#define wxPrintDialogData_GetNoCopies 2424 -#define wxPrintDialogData_GetPrintData 2425 -#define wxPrintDialogData_GetPrintToFile 2426 -#define wxPrintDialogData_GetSelection 2427 -#define wxPrintDialogData_GetToPage 2428 -#define wxPrintDialogData_IsOk 2429 -#define wxPrintDialogData_SetCollate 2430 -#define wxPrintDialogData_SetFromPage 2431 -#define wxPrintDialogData_SetMaxPage 2432 -#define wxPrintDialogData_SetMinPage 2433 -#define wxPrintDialogData_SetNoCopies 2434 -#define wxPrintDialogData_SetPrintData 2435 -#define wxPrintDialogData_SetPrintToFile 2436 -#define wxPrintDialogData_SetSelection 2437 -#define wxPrintDialogData_SetToPage 2438 -#define wxPrintData_new_0 2439 -#define wxPrintData_new_1 2440 -#define wxPrintData_destruct 2441 -#define wxPrintData_GetCollate 2442 -#define wxPrintData_GetBin 2443 -#define wxPrintData_GetColour 2444 -#define wxPrintData_GetDuplex 2445 -#define wxPrintData_GetNoCopies 2446 -#define wxPrintData_GetOrientation 2447 -#define wxPrintData_GetPaperId 2448 -#define wxPrintData_GetPrinterName 2449 -#define wxPrintData_GetQuality 2450 -#define wxPrintData_IsOk 2451 -#define wxPrintData_SetBin 2452 -#define wxPrintData_SetCollate 2453 -#define wxPrintData_SetColour 2454 -#define wxPrintData_SetDuplex 2455 -#define wxPrintData_SetNoCopies 2456 -#define wxPrintData_SetOrientation 2457 -#define wxPrintData_SetPaperId 2458 -#define wxPrintData_SetPrinterName 2459 -#define wxPrintData_SetQuality 2460 -#define wxPrintPreview_new_2 2463 -#define wxPrintPreview_new_3 2464 -#define wxPrintPreview_destruct 2466 -#define wxPrintPreview_GetCanvas 2467 -#define wxPrintPreview_GetCurrentPage 2468 -#define wxPrintPreview_GetFrame 2469 -#define wxPrintPreview_GetMaxPage 2470 -#define wxPrintPreview_GetMinPage 2471 -#define wxPrintPreview_GetPrintout 2472 -#define wxPrintPreview_GetPrintoutForPrinting 2473 -#define wxPrintPreview_IsOk 2474 -#define wxPrintPreview_PaintPage 2475 -#define wxPrintPreview_Print 2476 -#define wxPrintPreview_RenderPage 2477 -#define wxPrintPreview_SetCanvas 2478 -#define wxPrintPreview_SetCurrentPage 2479 -#define wxPrintPreview_SetFrame 2480 -#define wxPrintPreview_SetPrintout 2481 -#define wxPrintPreview_SetZoom 2482 -#define wxPreviewFrame_new 2483 -#define wxPreviewFrame_destruct 2484 -#define wxPreviewFrame_CreateControlBar 2485 -#define wxPreviewFrame_CreateCanvas 2486 -#define wxPreviewFrame_Initialize 2487 -#define wxPreviewFrame_OnCloseWindow 2488 -#define wxPreviewControlBar_new 2489 -#define wxPreviewControlBar_destruct 2490 -#define wxPreviewControlBar_CreateButtons 2491 -#define wxPreviewControlBar_GetPrintPreview 2492 -#define wxPreviewControlBar_GetZoomControl 2493 -#define wxPreviewControlBar_SetZoomControl 2494 -#define wxPrinter_new 2496 -#define wxPrinter_CreateAbortWindow 2497 -#define wxPrinter_GetAbort 2498 -#define wxPrinter_GetLastError 2499 -#define wxPrinter_GetPrintDialogData 2500 -#define wxPrinter_Print 2501 -#define wxPrinter_PrintDialog 2502 -#define wxPrinter_ReportError 2503 -#define wxPrinter_Setup 2504 -#define wxPrinter_destroy 2505 -#define wxXmlResource_new_1 2506 -#define wxXmlResource_new_2 2507 -#define wxXmlResource_destruct 2508 -#define wxXmlResource_AttachUnknownControl 2509 -#define wxXmlResource_ClearHandlers 2510 -#define wxXmlResource_CompareVersion 2511 -#define wxXmlResource_Get 2512 -#define wxXmlResource_GetFlags 2513 -#define wxXmlResource_GetVersion 2514 -#define wxXmlResource_GetXRCID 2515 -#define wxXmlResource_InitAllHandlers 2516 -#define wxXmlResource_Load 2517 -#define wxXmlResource_LoadBitmap 2518 -#define wxXmlResource_LoadDialog_2 2519 -#define wxXmlResource_LoadDialog_3 2520 -#define wxXmlResource_LoadFrame_2 2521 -#define wxXmlResource_LoadFrame_3 2522 -#define wxXmlResource_LoadIcon 2523 -#define wxXmlResource_LoadMenu 2524 -#define wxXmlResource_LoadMenuBar_2 2525 -#define wxXmlResource_LoadMenuBar_1 2526 -#define wxXmlResource_LoadPanel_2 2527 -#define wxXmlResource_LoadPanel_3 2528 -#define wxXmlResource_LoadToolBar 2529 -#define wxXmlResource_Set 2530 -#define wxXmlResource_SetFlags 2531 -#define wxXmlResource_Unload 2532 -#define wxXmlResource_xrcctrl 2533 -#define wxHtmlEasyPrinting_new 2534 -#define wxHtmlEasyPrinting_destruct 2535 -#define wxHtmlEasyPrinting_GetPrintData 2536 -#define wxHtmlEasyPrinting_GetPageSetupData 2537 -#define wxHtmlEasyPrinting_PreviewFile 2538 -#define wxHtmlEasyPrinting_PreviewText 2539 -#define wxHtmlEasyPrinting_PrintFile 2540 -#define wxHtmlEasyPrinting_PrintText 2541 -#define wxHtmlEasyPrinting_PageSetup 2542 -#define wxHtmlEasyPrinting_SetFonts 2543 -#define wxHtmlEasyPrinting_SetHeader 2544 -#define wxHtmlEasyPrinting_SetFooter 2545 -#define wxGLCanvas_new_2 2547 -#define wxGLCanvas_new_3_1 2548 -#define wxGLCanvas_new_3_0 2549 -#define wxGLCanvas_GetContext 2550 -#define wxGLCanvas_SetCurrent 2552 -#define wxGLCanvas_SwapBuffers 2553 -#define wxGLCanvas_destroy 2554 -#define wxAuiManager_new 2555 -#define wxAuiManager_destruct 2556 -#define wxAuiManager_AddPane_2_1 2557 -#define wxAuiManager_AddPane_3 2558 -#define wxAuiManager_AddPane_2_0 2559 -#define wxAuiManager_DetachPane 2560 -#define wxAuiManager_GetAllPanes 2561 -#define wxAuiManager_GetArtProvider 2562 -#define wxAuiManager_GetDockSizeConstraint 2563 -#define wxAuiManager_GetFlags 2564 -#define wxAuiManager_GetManagedWindow 2565 -#define wxAuiManager_GetManager 2566 -#define wxAuiManager_GetPane_1_1 2567 -#define wxAuiManager_GetPane_1_0 2568 -#define wxAuiManager_HideHint 2569 -#define wxAuiManager_InsertPane 2570 -#define wxAuiManager_LoadPaneInfo 2571 -#define wxAuiManager_LoadPerspective 2572 -#define wxAuiManager_SavePaneInfo 2573 -#define wxAuiManager_SavePerspective 2574 -#define wxAuiManager_SetArtProvider 2575 -#define wxAuiManager_SetDockSizeConstraint 2576 -#define wxAuiManager_SetFlags 2577 -#define wxAuiManager_SetManagedWindow 2578 -#define wxAuiManager_ShowHint 2579 -#define wxAuiManager_UnInit 2580 -#define wxAuiManager_Update 2581 -#define wxAuiPaneInfo_new_0 2582 -#define wxAuiPaneInfo_new_1 2583 -#define wxAuiPaneInfo_destruct 2584 -#define wxAuiPaneInfo_BestSize_1 2585 -#define wxAuiPaneInfo_BestSize_2 2586 -#define wxAuiPaneInfo_Bottom 2587 -#define wxAuiPaneInfo_BottomDockable 2588 -#define wxAuiPaneInfo_Caption 2589 -#define wxAuiPaneInfo_CaptionVisible 2590 -#define wxAuiPaneInfo_Centre 2591 -#define wxAuiPaneInfo_CentrePane 2592 -#define wxAuiPaneInfo_CloseButton 2593 -#define wxAuiPaneInfo_DefaultPane 2594 -#define wxAuiPaneInfo_DestroyOnClose 2595 -#define wxAuiPaneInfo_Direction 2596 -#define wxAuiPaneInfo_Dock 2597 -#define wxAuiPaneInfo_Dockable 2598 -#define wxAuiPaneInfo_Fixed 2599 -#define wxAuiPaneInfo_Float 2600 -#define wxAuiPaneInfo_Floatable 2601 -#define wxAuiPaneInfo_FloatingPosition_1 2602 -#define wxAuiPaneInfo_FloatingPosition_2 2603 -#define wxAuiPaneInfo_FloatingSize_1 2604 -#define wxAuiPaneInfo_FloatingSize_2 2605 -#define wxAuiPaneInfo_Gripper 2606 -#define wxAuiPaneInfo_GripperTop 2607 -#define wxAuiPaneInfo_HasBorder 2608 -#define wxAuiPaneInfo_HasCaption 2609 -#define wxAuiPaneInfo_HasCloseButton 2610 -#define wxAuiPaneInfo_HasFlag 2611 -#define wxAuiPaneInfo_HasGripper 2612 -#define wxAuiPaneInfo_HasGripperTop 2613 -#define wxAuiPaneInfo_HasMaximizeButton 2614 -#define wxAuiPaneInfo_HasMinimizeButton 2615 -#define wxAuiPaneInfo_HasPinButton 2616 -#define wxAuiPaneInfo_Hide 2617 -#define wxAuiPaneInfo_IsBottomDockable 2618 -#define wxAuiPaneInfo_IsDocked 2619 -#define wxAuiPaneInfo_IsFixed 2620 -#define wxAuiPaneInfo_IsFloatable 2621 -#define wxAuiPaneInfo_IsFloating 2622 -#define wxAuiPaneInfo_IsLeftDockable 2623 -#define wxAuiPaneInfo_IsMovable 2624 -#define wxAuiPaneInfo_IsOk 2625 -#define wxAuiPaneInfo_IsResizable 2626 -#define wxAuiPaneInfo_IsRightDockable 2627 -#define wxAuiPaneInfo_IsShown 2628 -#define wxAuiPaneInfo_IsToolbar 2629 -#define wxAuiPaneInfo_IsTopDockable 2630 -#define wxAuiPaneInfo_Layer 2631 -#define wxAuiPaneInfo_Left 2632 -#define wxAuiPaneInfo_LeftDockable 2633 -#define wxAuiPaneInfo_MaxSize_1 2634 -#define wxAuiPaneInfo_MaxSize_2 2635 -#define wxAuiPaneInfo_MaximizeButton 2636 -#define wxAuiPaneInfo_MinSize_1 2637 -#define wxAuiPaneInfo_MinSize_2 2638 -#define wxAuiPaneInfo_MinimizeButton 2639 -#define wxAuiPaneInfo_Movable 2640 -#define wxAuiPaneInfo_Name 2641 -#define wxAuiPaneInfo_PaneBorder 2642 -#define wxAuiPaneInfo_PinButton 2643 -#define wxAuiPaneInfo_Position 2644 -#define wxAuiPaneInfo_Resizable 2645 -#define wxAuiPaneInfo_Right 2646 -#define wxAuiPaneInfo_RightDockable 2647 -#define wxAuiPaneInfo_Row 2648 -#define wxAuiPaneInfo_SafeSet 2649 -#define wxAuiPaneInfo_SetFlag 2650 -#define wxAuiPaneInfo_Show 2651 -#define wxAuiPaneInfo_ToolbarPane 2652 -#define wxAuiPaneInfo_Top 2653 -#define wxAuiPaneInfo_TopDockable 2654 -#define wxAuiPaneInfo_Window 2655 -#define wxAuiPaneInfo_GetWindow 2656 -#define wxAuiPaneInfo_GetFrame 2657 -#define wxAuiPaneInfo_GetDirection 2658 -#define wxAuiPaneInfo_GetLayer 2659 -#define wxAuiPaneInfo_GetRow 2660 -#define wxAuiPaneInfo_GetPosition 2661 -#define wxAuiPaneInfo_GetFloatingPosition 2662 -#define wxAuiPaneInfo_GetFloatingSize 2663 -#define wxAuiNotebook_new_0 2664 -#define wxAuiNotebook_new_2 2665 -#define wxAuiNotebook_AddPage 2666 -#define wxAuiNotebook_Create 2667 -#define wxAuiNotebook_DeletePage 2668 -#define wxAuiNotebook_GetArtProvider 2669 -#define wxAuiNotebook_GetPage 2670 -#define wxAuiNotebook_GetPageBitmap 2671 -#define wxAuiNotebook_GetPageCount 2672 -#define wxAuiNotebook_GetPageIndex 2673 -#define wxAuiNotebook_GetPageText 2674 -#define wxAuiNotebook_GetSelection 2675 -#define wxAuiNotebook_InsertPage 2676 -#define wxAuiNotebook_RemovePage 2677 -#define wxAuiNotebook_SetArtProvider 2678 -#define wxAuiNotebook_SetFont 2679 -#define wxAuiNotebook_SetPageBitmap 2680 -#define wxAuiNotebook_SetPageText 2681 -#define wxAuiNotebook_SetSelection 2682 -#define wxAuiNotebook_SetTabCtrlHeight 2683 -#define wxAuiNotebook_SetUniformBitmapSize 2684 -#define wxAuiNotebook_destroy 2685 -#define wxAuiTabArt_SetFlags 2686 -#define wxAuiTabArt_SetMeasuringFont 2687 -#define wxAuiTabArt_SetNormalFont 2688 -#define wxAuiTabArt_SetSelectedFont 2689 -#define wxAuiTabArt_SetColour 2690 -#define wxAuiTabArt_SetActiveColour 2691 -#define wxAuiDockArt_GetColour 2692 -#define wxAuiDockArt_GetFont 2693 -#define wxAuiDockArt_GetMetric 2694 -#define wxAuiDockArt_SetColour 2695 -#define wxAuiDockArt_SetFont 2696 -#define wxAuiDockArt_SetMetric 2697 -#define wxAuiSimpleTabArt_new 2698 -#define wxAuiSimpleTabArt_destroy 2699 -#define wxMDIParentFrame_new_0 2700 -#define wxMDIParentFrame_new_4 2701 -#define wxMDIParentFrame_destruct 2702 -#define wxMDIParentFrame_ActivateNext 2703 -#define wxMDIParentFrame_ActivatePrevious 2704 -#define wxMDIParentFrame_ArrangeIcons 2705 -#define wxMDIParentFrame_Cascade 2706 -#define wxMDIParentFrame_Create 2707 -#define wxMDIParentFrame_GetActiveChild 2708 -#define wxMDIParentFrame_GetClientWindow 2709 -#define wxMDIParentFrame_Tile 2710 -#define wxMDIChildFrame_new_0 2711 -#define wxMDIChildFrame_new_4 2712 -#define wxMDIChildFrame_destruct 2713 -#define wxMDIChildFrame_Activate 2714 -#define wxMDIChildFrame_Create 2715 -#define wxMDIChildFrame_Maximize 2716 -#define wxMDIChildFrame_Restore 2717 -#define wxMDIClientWindow_new_0 2718 -#define wxMDIClientWindow_new_2 2719 -#define wxMDIClientWindow_destruct 2720 -#define wxMDIClientWindow_CreateClient 2721 -#define wxLayoutAlgorithm_new 2722 -#define wxLayoutAlgorithm_LayoutFrame 2723 -#define wxLayoutAlgorithm_LayoutMDIFrame 2724 -#define wxLayoutAlgorithm_LayoutWindow 2725 -#define wxLayoutAlgorithm_destroy 2726 -#define wxEvent_GetId 2727 -#define wxEvent_GetSkipped 2728 -#define wxEvent_GetTimestamp 2729 -#define wxEvent_IsCommandEvent 2730 -#define wxEvent_ResumePropagation 2731 -#define wxEvent_ShouldPropagate 2732 -#define wxEvent_Skip 2733 -#define wxEvent_StopPropagation 2734 -#define wxCommandEvent_getClientData 2735 -#define wxCommandEvent_GetExtraLong 2736 -#define wxCommandEvent_GetInt 2737 -#define wxCommandEvent_GetSelection 2738 -#define wxCommandEvent_GetString 2739 -#define wxCommandEvent_IsChecked 2740 -#define wxCommandEvent_IsSelection 2741 -#define wxCommandEvent_SetInt 2742 -#define wxCommandEvent_SetString 2743 -#define wxScrollEvent_GetOrientation 2744 -#define wxScrollEvent_GetPosition 2745 -#define wxScrollWinEvent_GetOrientation 2746 -#define wxScrollWinEvent_GetPosition 2747 -#define wxMouseEvent_AltDown 2748 -#define wxMouseEvent_Button 2749 -#define wxMouseEvent_ButtonDClick 2750 -#define wxMouseEvent_ButtonDown 2751 -#define wxMouseEvent_ButtonUp 2752 -#define wxMouseEvent_CmdDown 2753 -#define wxMouseEvent_ControlDown 2754 -#define wxMouseEvent_Dragging 2755 -#define wxMouseEvent_Entering 2756 -#define wxMouseEvent_GetButton 2757 -#define wxMouseEvent_GetPosition 2760 -#define wxMouseEvent_GetLogicalPosition 2761 -#define wxMouseEvent_GetLinesPerAction 2762 -#define wxMouseEvent_GetWheelRotation 2763 -#define wxMouseEvent_GetWheelDelta 2764 -#define wxMouseEvent_GetX 2765 -#define wxMouseEvent_GetY 2766 -#define wxMouseEvent_IsButton 2767 -#define wxMouseEvent_IsPageScroll 2768 -#define wxMouseEvent_Leaving 2769 -#define wxMouseEvent_LeftDClick 2770 -#define wxMouseEvent_LeftDown 2771 -#define wxMouseEvent_LeftIsDown 2772 -#define wxMouseEvent_LeftUp 2773 -#define wxMouseEvent_MetaDown 2774 -#define wxMouseEvent_MiddleDClick 2775 -#define wxMouseEvent_MiddleDown 2776 -#define wxMouseEvent_MiddleIsDown 2777 -#define wxMouseEvent_MiddleUp 2778 -#define wxMouseEvent_Moving 2779 -#define wxMouseEvent_RightDClick 2780 -#define wxMouseEvent_RightDown 2781 -#define wxMouseEvent_RightIsDown 2782 -#define wxMouseEvent_RightUp 2783 -#define wxMouseEvent_ShiftDown 2784 -#define wxSetCursorEvent_GetCursor 2785 -#define wxSetCursorEvent_GetX 2786 -#define wxSetCursorEvent_GetY 2787 -#define wxSetCursorEvent_HasCursor 2788 -#define wxSetCursorEvent_SetCursor 2789 -#define wxKeyEvent_AltDown 2790 -#define wxKeyEvent_CmdDown 2791 -#define wxKeyEvent_ControlDown 2792 -#define wxKeyEvent_GetKeyCode 2793 -#define wxKeyEvent_GetModifiers 2794 -#define wxKeyEvent_GetPosition 2797 -#define wxKeyEvent_GetRawKeyCode 2798 -#define wxKeyEvent_GetRawKeyFlags 2799 -#define wxKeyEvent_GetUnicodeKey 2800 -#define wxKeyEvent_GetX 2801 -#define wxKeyEvent_GetY 2802 -#define wxKeyEvent_HasModifiers 2803 -#define wxKeyEvent_MetaDown 2804 -#define wxKeyEvent_ShiftDown 2805 -#define wxSizeEvent_GetSize 2806 -#define wxMoveEvent_GetPosition 2807 -#define wxEraseEvent_GetDC 2808 -#define wxFocusEvent_GetWindow 2809 -#define wxChildFocusEvent_GetWindow 2810 -#define wxMenuEvent_GetMenu 2811 -#define wxMenuEvent_GetMenuId 2812 -#define wxMenuEvent_IsPopup 2813 -#define wxCloseEvent_CanVeto 2814 -#define wxCloseEvent_GetLoggingOff 2815 -#define wxCloseEvent_SetCanVeto 2816 -#define wxCloseEvent_SetLoggingOff 2817 -#define wxCloseEvent_Veto 2818 -#define wxShowEvent_SetShow 2819 -#define wxShowEvent_GetShow 2820 -#define wxIconizeEvent_Iconized 2821 -#define wxJoystickEvent_ButtonDown 2822 -#define wxJoystickEvent_ButtonIsDown 2823 -#define wxJoystickEvent_ButtonUp 2824 -#define wxJoystickEvent_GetButtonChange 2825 -#define wxJoystickEvent_GetButtonState 2826 -#define wxJoystickEvent_GetJoystick 2827 -#define wxJoystickEvent_GetPosition 2828 -#define wxJoystickEvent_GetZPosition 2829 -#define wxJoystickEvent_IsButton 2830 -#define wxJoystickEvent_IsMove 2831 -#define wxJoystickEvent_IsZMove 2832 -#define wxUpdateUIEvent_CanUpdate 2833 -#define wxUpdateUIEvent_Check 2834 -#define wxUpdateUIEvent_Enable 2835 -#define wxUpdateUIEvent_Show 2836 -#define wxUpdateUIEvent_GetChecked 2837 -#define wxUpdateUIEvent_GetEnabled 2838 -#define wxUpdateUIEvent_GetShown 2839 -#define wxUpdateUIEvent_GetSetChecked 2840 -#define wxUpdateUIEvent_GetSetEnabled 2841 -#define wxUpdateUIEvent_GetSetShown 2842 -#define wxUpdateUIEvent_GetSetText 2843 -#define wxUpdateUIEvent_GetText 2844 -#define wxUpdateUIEvent_GetMode 2845 -#define wxUpdateUIEvent_GetUpdateInterval 2846 -#define wxUpdateUIEvent_ResetUpdateTime 2847 -#define wxUpdateUIEvent_SetMode 2848 -#define wxUpdateUIEvent_SetText 2849 -#define wxUpdateUIEvent_SetUpdateInterval 2850 -#define wxMouseCaptureChangedEvent_GetCapturedWindow 2851 -#define wxPaletteChangedEvent_SetChangedWindow 2852 -#define wxPaletteChangedEvent_GetChangedWindow 2853 -#define wxQueryNewPaletteEvent_SetPaletteRealized 2854 -#define wxQueryNewPaletteEvent_GetPaletteRealized 2855 -#define wxNavigationKeyEvent_GetDirection 2856 -#define wxNavigationKeyEvent_SetDirection 2857 -#define wxNavigationKeyEvent_IsWindowChange 2858 -#define wxNavigationKeyEvent_SetWindowChange 2859 -#define wxNavigationKeyEvent_IsFromTab 2860 -#define wxNavigationKeyEvent_SetFromTab 2861 -#define wxNavigationKeyEvent_GetCurrentFocus 2862 -#define wxNavigationKeyEvent_SetCurrentFocus 2863 -#define wxHelpEvent_GetOrigin 2864 -#define wxHelpEvent_GetPosition 2865 -#define wxHelpEvent_SetOrigin 2866 -#define wxHelpEvent_SetPosition 2867 -#define wxContextMenuEvent_GetPosition 2868 -#define wxContextMenuEvent_SetPosition 2869 -#define wxIdleEvent_CanSend 2870 -#define wxIdleEvent_GetMode 2871 -#define wxIdleEvent_RequestMore 2872 -#define wxIdleEvent_MoreRequested 2873 -#define wxIdleEvent_SetMode 2874 -#define wxGridEvent_AltDown 2875 -#define wxGridEvent_ControlDown 2876 -#define wxGridEvent_GetCol 2877 -#define wxGridEvent_GetPosition 2878 -#define wxGridEvent_GetRow 2879 -#define wxGridEvent_MetaDown 2880 -#define wxGridEvent_Selecting 2881 -#define wxGridEvent_ShiftDown 2882 -#define wxNotifyEvent_Allow 2883 -#define wxNotifyEvent_IsAllowed 2884 -#define wxNotifyEvent_Veto 2885 -#define wxSashEvent_GetEdge 2886 -#define wxSashEvent_GetDragRect 2887 -#define wxSashEvent_GetDragStatus 2888 -#define wxListEvent_GetCacheFrom 2889 -#define wxListEvent_GetCacheTo 2890 -#define wxListEvent_GetKeyCode 2891 -#define wxListEvent_GetIndex 2892 -#define wxListEvent_GetColumn 2893 -#define wxListEvent_GetPoint 2894 -#define wxListEvent_GetLabel 2895 -#define wxListEvent_GetText 2896 -#define wxListEvent_GetImage 2897 -#define wxListEvent_GetData 2898 -#define wxListEvent_GetMask 2899 -#define wxListEvent_GetItem 2900 -#define wxListEvent_IsEditCancelled 2901 -#define wxDateEvent_GetDate 2902 -#define wxCalendarEvent_GetWeekDay 2903 -#define wxFileDirPickerEvent_GetPath 2904 -#define wxColourPickerEvent_GetColour 2905 -#define wxFontPickerEvent_GetFont 2906 -#define wxStyledTextEvent_GetPosition 2907 -#define wxStyledTextEvent_GetKey 2908 -#define wxStyledTextEvent_GetModifiers 2909 -#define wxStyledTextEvent_GetModificationType 2910 -#define wxStyledTextEvent_GetText 2911 -#define wxStyledTextEvent_GetLength 2912 -#define wxStyledTextEvent_GetLinesAdded 2913 -#define wxStyledTextEvent_GetLine 2914 -#define wxStyledTextEvent_GetFoldLevelNow 2915 -#define wxStyledTextEvent_GetFoldLevelPrev 2916 -#define wxStyledTextEvent_GetMargin 2917 -#define wxStyledTextEvent_GetMessage 2918 -#define wxStyledTextEvent_GetWParam 2919 -#define wxStyledTextEvent_GetLParam 2920 -#define wxStyledTextEvent_GetListType 2921 -#define wxStyledTextEvent_GetX 2922 -#define wxStyledTextEvent_GetY 2923 -#define wxStyledTextEvent_GetDragText 2924 -#define wxStyledTextEvent_GetDragAllowMove 2925 -#define wxStyledTextEvent_GetDragResult 2926 -#define wxStyledTextEvent_GetShift 2927 -#define wxStyledTextEvent_GetControl 2928 -#define wxStyledTextEvent_GetAlt 2929 -#define utils_wxGetKeyState 2930 -#define utils_wxGetMousePosition 2931 -#define utils_wxGetMouseState 2932 -#define utils_wxSetDetectableAutoRepeat 2933 -#define utils_wxBell 2934 -#define utils_wxFindMenuItemId 2935 -#define utils_wxGenericFindWindowAtPoint 2936 -#define utils_wxFindWindowAtPoint 2937 -#define utils_wxBeginBusyCursor 2938 -#define utils_wxEndBusyCursor 2939 -#define utils_wxIsBusy 2940 -#define utils_wxShutdown 2941 -#define utils_wxShell 2942 -#define utils_wxLaunchDefaultBrowser 2943 -#define utils_wxGetEmailAddress 2944 -#define utils_wxGetUserId 2945 -#define utils_wxGetHomeDir 2946 -#define utils_wxNewId 2947 -#define utils_wxRegisterId 2948 -#define utils_wxGetCurrentId 2949 -#define utils_wxGetOsDescription 2950 -#define utils_wxIsPlatformLittleEndian 2951 -#define utils_wxIsPlatform64Bit 2952 -#define gdicmn_wxDisplaySize 2953 -#define gdicmn_wxSetCursor 2954 -#define wxPrintout_new 2955 -#define wxPrintout_destruct 2956 -#define wxPrintout_GetDC 2957 -#define wxPrintout_GetPageSizeMM 2958 -#define wxPrintout_GetPageSizePixels 2959 -#define wxPrintout_GetPaperRectPixels 2960 -#define wxPrintout_GetPPIPrinter 2961 -#define wxPrintout_GetPPIScreen 2962 -#define wxPrintout_GetTitle 2963 -#define wxPrintout_IsPreview 2964 -#define wxPrintout_FitThisSizeToPaper 2965 -#define wxPrintout_FitThisSizeToPage 2966 -#define wxPrintout_FitThisSizeToPageMargins 2967 -#define wxPrintout_MapScreenSizeToPaper 2968 -#define wxPrintout_MapScreenSizeToPage 2969 -#define wxPrintout_MapScreenSizeToPageMargins 2970 -#define wxPrintout_MapScreenSizeToDevice 2971 -#define wxPrintout_GetLogicalPaperRect 2972 -#define wxPrintout_GetLogicalPageRect 2973 -#define wxPrintout_GetLogicalPageMarginsRect 2974 -#define wxPrintout_SetLogicalOrigin 2975 -#define wxPrintout_OffsetLogicalOrigin 2976 -#define wxStyledTextCtrl_new_2 2977 -#define wxStyledTextCtrl_new_0 2978 -#define wxStyledTextCtrl_destruct 2979 -#define wxStyledTextCtrl_Create 2980 -#define wxStyledTextCtrl_AddText 2981 -#define wxStyledTextCtrl_AddStyledText 2982 -#define wxStyledTextCtrl_InsertText 2983 -#define wxStyledTextCtrl_ClearAll 2984 -#define wxStyledTextCtrl_ClearDocumentStyle 2985 -#define wxStyledTextCtrl_GetLength 2986 -#define wxStyledTextCtrl_GetCharAt 2987 -#define wxStyledTextCtrl_GetCurrentPos 2988 -#define wxStyledTextCtrl_GetAnchor 2989 -#define wxStyledTextCtrl_GetStyleAt 2990 -#define wxStyledTextCtrl_Redo 2991 -#define wxStyledTextCtrl_SetUndoCollection 2992 -#define wxStyledTextCtrl_SelectAll 2993 -#define wxStyledTextCtrl_SetSavePoint 2994 -#define wxStyledTextCtrl_GetStyledText 2995 -#define wxStyledTextCtrl_CanRedo 2996 -#define wxStyledTextCtrl_MarkerLineFromHandle 2997 -#define wxStyledTextCtrl_MarkerDeleteHandle 2998 -#define wxStyledTextCtrl_GetUndoCollection 2999 -#define wxStyledTextCtrl_GetViewWhiteSpace 3000 -#define wxStyledTextCtrl_SetViewWhiteSpace 3001 -#define wxStyledTextCtrl_PositionFromPoint 3002 -#define wxStyledTextCtrl_PositionFromPointClose 3003 -#define wxStyledTextCtrl_GotoLine 3004 -#define wxStyledTextCtrl_GotoPos 3005 -#define wxStyledTextCtrl_SetAnchor 3006 -#define wxStyledTextCtrl_GetCurLine 3007 -#define wxStyledTextCtrl_GetEndStyled 3008 -#define wxStyledTextCtrl_ConvertEOLs 3009 -#define wxStyledTextCtrl_GetEOLMode 3010 -#define wxStyledTextCtrl_SetEOLMode 3011 -#define wxStyledTextCtrl_StartStyling 3012 -#define wxStyledTextCtrl_SetStyling 3013 -#define wxStyledTextCtrl_GetBufferedDraw 3014 -#define wxStyledTextCtrl_SetBufferedDraw 3015 -#define wxStyledTextCtrl_SetTabWidth 3016 -#define wxStyledTextCtrl_GetTabWidth 3017 -#define wxStyledTextCtrl_SetCodePage 3018 -#define wxStyledTextCtrl_MarkerDefine 3019 -#define wxStyledTextCtrl_MarkerSetForeground 3020 -#define wxStyledTextCtrl_MarkerSetBackground 3021 -#define wxStyledTextCtrl_MarkerAdd 3022 -#define wxStyledTextCtrl_MarkerDelete 3023 -#define wxStyledTextCtrl_MarkerDeleteAll 3024 -#define wxStyledTextCtrl_MarkerGet 3025 -#define wxStyledTextCtrl_MarkerNext 3026 -#define wxStyledTextCtrl_MarkerPrevious 3027 -#define wxStyledTextCtrl_MarkerDefineBitmap 3028 -#define wxStyledTextCtrl_MarkerAddSet 3029 -#define wxStyledTextCtrl_MarkerSetAlpha 3030 -#define wxStyledTextCtrl_SetMarginType 3031 -#define wxStyledTextCtrl_GetMarginType 3032 -#define wxStyledTextCtrl_SetMarginWidth 3033 -#define wxStyledTextCtrl_GetMarginWidth 3034 -#define wxStyledTextCtrl_SetMarginMask 3035 -#define wxStyledTextCtrl_GetMarginMask 3036 -#define wxStyledTextCtrl_SetMarginSensitive 3037 -#define wxStyledTextCtrl_GetMarginSensitive 3038 -#define wxStyledTextCtrl_StyleClearAll 3039 -#define wxStyledTextCtrl_StyleSetForeground 3040 -#define wxStyledTextCtrl_StyleSetBackground 3041 -#define wxStyledTextCtrl_StyleSetBold 3042 -#define wxStyledTextCtrl_StyleSetItalic 3043 -#define wxStyledTextCtrl_StyleSetSize 3044 -#define wxStyledTextCtrl_StyleSetFaceName 3045 -#define wxStyledTextCtrl_StyleSetEOLFilled 3046 -#define wxStyledTextCtrl_StyleResetDefault 3047 -#define wxStyledTextCtrl_StyleSetUnderline 3048 -#define wxStyledTextCtrl_StyleSetCase 3049 -#define wxStyledTextCtrl_StyleSetHotSpot 3050 -#define wxStyledTextCtrl_SetSelForeground 3051 -#define wxStyledTextCtrl_SetSelBackground 3052 -#define wxStyledTextCtrl_GetSelAlpha 3053 -#define wxStyledTextCtrl_SetSelAlpha 3054 -#define wxStyledTextCtrl_SetCaretForeground 3055 -#define wxStyledTextCtrl_CmdKeyAssign 3056 -#define wxStyledTextCtrl_CmdKeyClear 3057 -#define wxStyledTextCtrl_CmdKeyClearAll 3058 -#define wxStyledTextCtrl_SetStyleBytes 3059 -#define wxStyledTextCtrl_StyleSetVisible 3060 -#define wxStyledTextCtrl_GetCaretPeriod 3061 -#define wxStyledTextCtrl_SetCaretPeriod 3062 -#define wxStyledTextCtrl_SetWordChars 3063 -#define wxStyledTextCtrl_BeginUndoAction 3064 -#define wxStyledTextCtrl_EndUndoAction 3065 -#define wxStyledTextCtrl_IndicatorSetStyle 3066 -#define wxStyledTextCtrl_IndicatorGetStyle 3067 -#define wxStyledTextCtrl_IndicatorSetForeground 3068 -#define wxStyledTextCtrl_IndicatorGetForeground 3069 -#define wxStyledTextCtrl_SetWhitespaceForeground 3070 -#define wxStyledTextCtrl_SetWhitespaceBackground 3071 -#define wxStyledTextCtrl_GetStyleBits 3072 -#define wxStyledTextCtrl_SetLineState 3073 -#define wxStyledTextCtrl_GetLineState 3074 -#define wxStyledTextCtrl_GetMaxLineState 3075 -#define wxStyledTextCtrl_GetCaretLineVisible 3076 -#define wxStyledTextCtrl_SetCaretLineVisible 3077 -#define wxStyledTextCtrl_GetCaretLineBackground 3078 -#define wxStyledTextCtrl_SetCaretLineBackground 3079 -#define wxStyledTextCtrl_AutoCompShow 3080 -#define wxStyledTextCtrl_AutoCompCancel 3081 -#define wxStyledTextCtrl_AutoCompActive 3082 -#define wxStyledTextCtrl_AutoCompPosStart 3083 -#define wxStyledTextCtrl_AutoCompComplete 3084 -#define wxStyledTextCtrl_AutoCompStops 3085 -#define wxStyledTextCtrl_AutoCompSetSeparator 3086 -#define wxStyledTextCtrl_AutoCompGetSeparator 3087 -#define wxStyledTextCtrl_AutoCompSelect 3088 -#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3089 -#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3090 -#define wxStyledTextCtrl_AutoCompSetFillUps 3091 -#define wxStyledTextCtrl_AutoCompSetChooseSingle 3092 -#define wxStyledTextCtrl_AutoCompGetChooseSingle 3093 -#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3094 -#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3095 -#define wxStyledTextCtrl_UserListShow 3096 -#define wxStyledTextCtrl_AutoCompSetAutoHide 3097 -#define wxStyledTextCtrl_AutoCompGetAutoHide 3098 -#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3099 -#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3100 -#define wxStyledTextCtrl_RegisterImage 3101 -#define wxStyledTextCtrl_ClearRegisteredImages 3102 -#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3103 -#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3104 -#define wxStyledTextCtrl_AutoCompSetMaxWidth 3105 -#define wxStyledTextCtrl_AutoCompGetMaxWidth 3106 -#define wxStyledTextCtrl_AutoCompSetMaxHeight 3107 -#define wxStyledTextCtrl_AutoCompGetMaxHeight 3108 -#define wxStyledTextCtrl_SetIndent 3109 -#define wxStyledTextCtrl_GetIndent 3110 -#define wxStyledTextCtrl_SetUseTabs 3111 -#define wxStyledTextCtrl_GetUseTabs 3112 -#define wxStyledTextCtrl_SetLineIndentation 3113 -#define wxStyledTextCtrl_GetLineIndentation 3114 -#define wxStyledTextCtrl_GetLineIndentPosition 3115 -#define wxStyledTextCtrl_GetColumn 3116 -#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3117 -#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3118 -#define wxStyledTextCtrl_SetIndentationGuides 3119 -#define wxStyledTextCtrl_GetIndentationGuides 3120 -#define wxStyledTextCtrl_SetHighlightGuide 3121 -#define wxStyledTextCtrl_GetHighlightGuide 3122 -#define wxStyledTextCtrl_GetLineEndPosition 3123 -#define wxStyledTextCtrl_GetCodePage 3124 -#define wxStyledTextCtrl_GetCaretForeground 3125 -#define wxStyledTextCtrl_GetReadOnly 3126 -#define wxStyledTextCtrl_SetCurrentPos 3127 -#define wxStyledTextCtrl_SetSelectionStart 3128 -#define wxStyledTextCtrl_GetSelectionStart 3129 -#define wxStyledTextCtrl_SetSelectionEnd 3130 -#define wxStyledTextCtrl_GetSelectionEnd 3131 -#define wxStyledTextCtrl_SetPrintMagnification 3132 -#define wxStyledTextCtrl_GetPrintMagnification 3133 -#define wxStyledTextCtrl_SetPrintColourMode 3134 -#define wxStyledTextCtrl_GetPrintColourMode 3135 -#define wxStyledTextCtrl_FindText 3136 -#define wxStyledTextCtrl_FormatRange 3137 -#define wxStyledTextCtrl_GetFirstVisibleLine 3138 -#define wxStyledTextCtrl_GetLine 3139 -#define wxStyledTextCtrl_GetLineCount 3140 -#define wxStyledTextCtrl_SetMarginLeft 3141 -#define wxStyledTextCtrl_GetMarginLeft 3142 -#define wxStyledTextCtrl_SetMarginRight 3143 -#define wxStyledTextCtrl_GetMarginRight 3144 -#define wxStyledTextCtrl_GetModify 3145 -#define wxStyledTextCtrl_SetSelection 3146 -#define wxStyledTextCtrl_GetSelectedText 3147 -#define wxStyledTextCtrl_GetTextRange 3148 -#define wxStyledTextCtrl_HideSelection 3149 -#define wxStyledTextCtrl_LineFromPosition 3150 -#define wxStyledTextCtrl_PositionFromLine 3151 -#define wxStyledTextCtrl_LineScroll 3152 -#define wxStyledTextCtrl_EnsureCaretVisible 3153 -#define wxStyledTextCtrl_ReplaceSelection 3154 -#define wxStyledTextCtrl_SetReadOnly 3155 -#define wxStyledTextCtrl_CanPaste 3156 -#define wxStyledTextCtrl_CanUndo 3157 -#define wxStyledTextCtrl_EmptyUndoBuffer 3158 -#define wxStyledTextCtrl_Undo 3159 -#define wxStyledTextCtrl_Cut 3160 -#define wxStyledTextCtrl_Copy 3161 -#define wxStyledTextCtrl_Paste 3162 -#define wxStyledTextCtrl_Clear 3163 -#define wxStyledTextCtrl_SetText 3164 -#define wxStyledTextCtrl_GetText 3165 -#define wxStyledTextCtrl_GetTextLength 3166 -#define wxStyledTextCtrl_GetOvertype 3167 -#define wxStyledTextCtrl_SetCaretWidth 3168 -#define wxStyledTextCtrl_GetCaretWidth 3169 -#define wxStyledTextCtrl_SetTargetStart 3170 -#define wxStyledTextCtrl_GetTargetStart 3171 -#define wxStyledTextCtrl_SetTargetEnd 3172 -#define wxStyledTextCtrl_GetTargetEnd 3173 -#define wxStyledTextCtrl_ReplaceTarget 3174 -#define wxStyledTextCtrl_SearchInTarget 3175 -#define wxStyledTextCtrl_SetSearchFlags 3176 -#define wxStyledTextCtrl_GetSearchFlags 3177 -#define wxStyledTextCtrl_CallTipShow 3178 -#define wxStyledTextCtrl_CallTipCancel 3179 -#define wxStyledTextCtrl_CallTipActive 3180 -#define wxStyledTextCtrl_CallTipPosAtStart 3181 -#define wxStyledTextCtrl_CallTipSetHighlight 3182 -#define wxStyledTextCtrl_CallTipSetBackground 3183 -#define wxStyledTextCtrl_CallTipSetForeground 3184 -#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3185 -#define wxStyledTextCtrl_CallTipUseStyle 3186 -#define wxStyledTextCtrl_VisibleFromDocLine 3187 -#define wxStyledTextCtrl_DocLineFromVisible 3188 -#define wxStyledTextCtrl_WrapCount 3189 -#define wxStyledTextCtrl_SetFoldLevel 3190 -#define wxStyledTextCtrl_GetFoldLevel 3191 -#define wxStyledTextCtrl_GetLastChild 3192 -#define wxStyledTextCtrl_GetFoldParent 3193 -#define wxStyledTextCtrl_ShowLines 3194 -#define wxStyledTextCtrl_HideLines 3195 -#define wxStyledTextCtrl_GetLineVisible 3196 -#define wxStyledTextCtrl_SetFoldExpanded 3197 -#define wxStyledTextCtrl_GetFoldExpanded 3198 -#define wxStyledTextCtrl_ToggleFold 3199 -#define wxStyledTextCtrl_EnsureVisible 3200 -#define wxStyledTextCtrl_SetFoldFlags 3201 -#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3202 -#define wxStyledTextCtrl_SetTabIndents 3203 -#define wxStyledTextCtrl_GetTabIndents 3204 -#define wxStyledTextCtrl_SetBackSpaceUnIndents 3205 -#define wxStyledTextCtrl_GetBackSpaceUnIndents 3206 -#define wxStyledTextCtrl_SetMouseDwellTime 3207 -#define wxStyledTextCtrl_GetMouseDwellTime 3208 -#define wxStyledTextCtrl_WordStartPosition 3209 -#define wxStyledTextCtrl_WordEndPosition 3210 -#define wxStyledTextCtrl_SetWrapMode 3211 -#define wxStyledTextCtrl_GetWrapMode 3212 -#define wxStyledTextCtrl_SetWrapVisualFlags 3213 -#define wxStyledTextCtrl_GetWrapVisualFlags 3214 -#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3215 -#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3216 -#define wxStyledTextCtrl_SetWrapStartIndent 3217 -#define wxStyledTextCtrl_GetWrapStartIndent 3218 -#define wxStyledTextCtrl_SetLayoutCache 3219 -#define wxStyledTextCtrl_GetLayoutCache 3220 -#define wxStyledTextCtrl_SetScrollWidth 3221 -#define wxStyledTextCtrl_GetScrollWidth 3222 -#define wxStyledTextCtrl_TextWidth 3223 -#define wxStyledTextCtrl_GetEndAtLastLine 3224 -#define wxStyledTextCtrl_TextHeight 3225 -#define wxStyledTextCtrl_SetUseVerticalScrollBar 3226 -#define wxStyledTextCtrl_GetUseVerticalScrollBar 3227 -#define wxStyledTextCtrl_AppendText 3228 -#define wxStyledTextCtrl_GetTwoPhaseDraw 3229 -#define wxStyledTextCtrl_SetTwoPhaseDraw 3230 -#define wxStyledTextCtrl_TargetFromSelection 3231 -#define wxStyledTextCtrl_LinesJoin 3232 -#define wxStyledTextCtrl_LinesSplit 3233 -#define wxStyledTextCtrl_SetFoldMarginColour 3234 -#define wxStyledTextCtrl_SetFoldMarginHiColour 3235 -#define wxStyledTextCtrl_LineDown 3236 -#define wxStyledTextCtrl_LineDownExtend 3237 -#define wxStyledTextCtrl_LineUp 3238 -#define wxStyledTextCtrl_LineUpExtend 3239 -#define wxStyledTextCtrl_CharLeft 3240 -#define wxStyledTextCtrl_CharLeftExtend 3241 -#define wxStyledTextCtrl_CharRight 3242 -#define wxStyledTextCtrl_CharRightExtend 3243 -#define wxStyledTextCtrl_WordLeft 3244 -#define wxStyledTextCtrl_WordLeftExtend 3245 -#define wxStyledTextCtrl_WordRight 3246 -#define wxStyledTextCtrl_WordRightExtend 3247 -#define wxStyledTextCtrl_Home 3248 -#define wxStyledTextCtrl_HomeExtend 3249 -#define wxStyledTextCtrl_LineEnd 3250 -#define wxStyledTextCtrl_LineEndExtend 3251 -#define wxStyledTextCtrl_DocumentStart 3252 -#define wxStyledTextCtrl_DocumentStartExtend 3253 -#define wxStyledTextCtrl_DocumentEnd 3254 -#define wxStyledTextCtrl_DocumentEndExtend 3255 -#define wxStyledTextCtrl_PageUp 3256 -#define wxStyledTextCtrl_PageUpExtend 3257 -#define wxStyledTextCtrl_PageDown 3258 -#define wxStyledTextCtrl_PageDownExtend 3259 -#define wxStyledTextCtrl_EditToggleOvertype 3260 -#define wxStyledTextCtrl_Cancel 3261 -#define wxStyledTextCtrl_DeleteBack 3262 -#define wxStyledTextCtrl_Tab 3263 -#define wxStyledTextCtrl_BackTab 3264 -#define wxStyledTextCtrl_NewLine 3265 -#define wxStyledTextCtrl_FormFeed 3266 -#define wxStyledTextCtrl_VCHome 3267 -#define wxStyledTextCtrl_VCHomeExtend 3268 -#define wxStyledTextCtrl_ZoomIn 3269 -#define wxStyledTextCtrl_ZoomOut 3270 -#define wxStyledTextCtrl_DelWordLeft 3271 -#define wxStyledTextCtrl_DelWordRight 3272 -#define wxStyledTextCtrl_LineCut 3273 -#define wxStyledTextCtrl_LineDelete 3274 -#define wxStyledTextCtrl_LineTranspose 3275 -#define wxStyledTextCtrl_LineDuplicate 3276 -#define wxStyledTextCtrl_LowerCase 3277 -#define wxStyledTextCtrl_UpperCase 3278 -#define wxStyledTextCtrl_LineScrollDown 3279 -#define wxStyledTextCtrl_LineScrollUp 3280 -#define wxStyledTextCtrl_DeleteBackNotLine 3281 -#define wxStyledTextCtrl_HomeDisplay 3282 -#define wxStyledTextCtrl_HomeDisplayExtend 3283 -#define wxStyledTextCtrl_LineEndDisplay 3284 -#define wxStyledTextCtrl_LineEndDisplayExtend 3285 -#define wxStyledTextCtrl_HomeWrapExtend 3286 -#define wxStyledTextCtrl_LineEndWrap 3287 -#define wxStyledTextCtrl_LineEndWrapExtend 3288 -#define wxStyledTextCtrl_VCHomeWrap 3289 -#define wxStyledTextCtrl_VCHomeWrapExtend 3290 -#define wxStyledTextCtrl_LineCopy 3291 -#define wxStyledTextCtrl_MoveCaretInsideView 3292 -#define wxStyledTextCtrl_LineLength 3293 -#define wxStyledTextCtrl_BraceHighlight 3294 -#define wxStyledTextCtrl_BraceBadLight 3295 -#define wxStyledTextCtrl_BraceMatch 3296 -#define wxStyledTextCtrl_GetViewEOL 3297 -#define wxStyledTextCtrl_SetViewEOL 3298 -#define wxStyledTextCtrl_SetModEventMask 3299 -#define wxStyledTextCtrl_GetEdgeColumn 3300 -#define wxStyledTextCtrl_SetEdgeColumn 3301 -#define wxStyledTextCtrl_SetEdgeMode 3302 -#define wxStyledTextCtrl_GetEdgeMode 3303 -#define wxStyledTextCtrl_GetEdgeColour 3304 -#define wxStyledTextCtrl_SetEdgeColour 3305 -#define wxStyledTextCtrl_SearchAnchor 3306 -#define wxStyledTextCtrl_SearchNext 3307 -#define wxStyledTextCtrl_SearchPrev 3308 -#define wxStyledTextCtrl_LinesOnScreen 3309 -#define wxStyledTextCtrl_UsePopUp 3310 -#define wxStyledTextCtrl_SelectionIsRectangle 3311 -#define wxStyledTextCtrl_SetZoom 3312 -#define wxStyledTextCtrl_GetZoom 3313 -#define wxStyledTextCtrl_GetModEventMask 3314 -#define wxStyledTextCtrl_SetSTCFocus 3315 -#define wxStyledTextCtrl_GetSTCFocus 3316 -#define wxStyledTextCtrl_SetStatus 3317 -#define wxStyledTextCtrl_GetStatus 3318 -#define wxStyledTextCtrl_SetMouseDownCaptures 3319 -#define wxStyledTextCtrl_GetMouseDownCaptures 3320 -#define wxStyledTextCtrl_SetSTCCursor 3321 -#define wxStyledTextCtrl_GetSTCCursor 3322 -#define wxStyledTextCtrl_SetControlCharSymbol 3323 -#define wxStyledTextCtrl_GetControlCharSymbol 3324 -#define wxStyledTextCtrl_WordPartLeft 3325 -#define wxStyledTextCtrl_WordPartLeftExtend 3326 -#define wxStyledTextCtrl_WordPartRight 3327 -#define wxStyledTextCtrl_WordPartRightExtend 3328 -#define wxStyledTextCtrl_SetVisiblePolicy 3329 -#define wxStyledTextCtrl_DelLineLeft 3330 -#define wxStyledTextCtrl_DelLineRight 3331 -#define wxStyledTextCtrl_GetXOffset 3332 -#define wxStyledTextCtrl_ChooseCaretX 3333 -#define wxStyledTextCtrl_SetXCaretPolicy 3334 -#define wxStyledTextCtrl_SetYCaretPolicy 3335 -#define wxStyledTextCtrl_GetPrintWrapMode 3336 -#define wxStyledTextCtrl_SetHotspotActiveForeground 3337 -#define wxStyledTextCtrl_SetHotspotActiveBackground 3338 -#define wxStyledTextCtrl_SetHotspotActiveUnderline 3339 -#define wxStyledTextCtrl_SetHotspotSingleLine 3340 -#define wxStyledTextCtrl_ParaDownExtend 3341 -#define wxStyledTextCtrl_ParaUp 3342 -#define wxStyledTextCtrl_ParaUpExtend 3343 -#define wxStyledTextCtrl_PositionBefore 3344 -#define wxStyledTextCtrl_PositionAfter 3345 -#define wxStyledTextCtrl_CopyRange 3346 -#define wxStyledTextCtrl_CopyText 3347 -#define wxStyledTextCtrl_SetSelectionMode 3348 -#define wxStyledTextCtrl_GetSelectionMode 3349 -#define wxStyledTextCtrl_LineDownRectExtend 3350 -#define wxStyledTextCtrl_LineUpRectExtend 3351 -#define wxStyledTextCtrl_CharLeftRectExtend 3352 -#define wxStyledTextCtrl_CharRightRectExtend 3353 -#define wxStyledTextCtrl_HomeRectExtend 3354 -#define wxStyledTextCtrl_VCHomeRectExtend 3355 -#define wxStyledTextCtrl_LineEndRectExtend 3356 -#define wxStyledTextCtrl_PageUpRectExtend 3357 -#define wxStyledTextCtrl_PageDownRectExtend 3358 -#define wxStyledTextCtrl_StutteredPageUp 3359 -#define wxStyledTextCtrl_StutteredPageUpExtend 3360 -#define wxStyledTextCtrl_StutteredPageDown 3361 -#define wxStyledTextCtrl_StutteredPageDownExtend 3362 -#define wxStyledTextCtrl_WordLeftEnd 3363 -#define wxStyledTextCtrl_WordLeftEndExtend 3364 -#define wxStyledTextCtrl_WordRightEnd 3365 -#define wxStyledTextCtrl_WordRightEndExtend 3366 -#define wxStyledTextCtrl_SetWhitespaceChars 3367 -#define wxStyledTextCtrl_SetCharsDefault 3368 -#define wxStyledTextCtrl_AutoCompGetCurrent 3369 -#define wxStyledTextCtrl_Allocate 3370 -#define wxStyledTextCtrl_FindColumn 3371 -#define wxStyledTextCtrl_GetCaretSticky 3372 -#define wxStyledTextCtrl_SetCaretSticky 3373 -#define wxStyledTextCtrl_ToggleCaretSticky 3374 -#define wxStyledTextCtrl_SetPasteConvertEndings 3375 -#define wxStyledTextCtrl_GetPasteConvertEndings 3376 -#define wxStyledTextCtrl_SelectionDuplicate 3377 -#define wxStyledTextCtrl_SetCaretLineBackAlpha 3378 -#define wxStyledTextCtrl_GetCaretLineBackAlpha 3379 -#define wxStyledTextCtrl_StartRecord 3380 -#define wxStyledTextCtrl_StopRecord 3381 -#define wxStyledTextCtrl_SetLexer 3382 -#define wxStyledTextCtrl_GetLexer 3383 -#define wxStyledTextCtrl_Colourise 3384 -#define wxStyledTextCtrl_SetProperty 3385 -#define wxStyledTextCtrl_SetKeyWords 3386 -#define wxStyledTextCtrl_SetLexerLanguage 3387 -#define wxStyledTextCtrl_GetProperty 3388 -#define wxStyledTextCtrl_GetStyleBitsNeeded 3389 -#define wxStyledTextCtrl_GetCurrentLine 3390 -#define wxStyledTextCtrl_StyleSetSpec 3391 -#define wxStyledTextCtrl_StyleSetFont 3392 -#define wxStyledTextCtrl_StyleSetFontAttr 3393 -#define wxStyledTextCtrl_StyleSetCharacterSet 3394 -#define wxStyledTextCtrl_StyleSetFontEncoding 3395 -#define wxStyledTextCtrl_CmdKeyExecute 3396 -#define wxStyledTextCtrl_SetMargins 3397 -#define wxStyledTextCtrl_GetSelection 3398 -#define wxStyledTextCtrl_PointFromPosition 3399 -#define wxStyledTextCtrl_ScrollToLine 3400 -#define wxStyledTextCtrl_ScrollToColumn 3401 -#define wxStyledTextCtrl_SetVScrollBar 3402 -#define wxStyledTextCtrl_SetHScrollBar 3403 -#define wxStyledTextCtrl_GetLastKeydownProcessed 3404 -#define wxStyledTextCtrl_SetLastKeydownProcessed 3405 -#define wxStyledTextCtrl_SaveFile 3406 -#define wxStyledTextCtrl_LoadFile 3407 -#define wxStyledTextCtrl_DoDragOver 3408 -#define wxStyledTextCtrl_DoDropText 3409 -#define wxStyledTextCtrl_GetUseAntiAliasing 3410 -#define wxStyledTextCtrl_AddTextRaw 3411 -#define wxStyledTextCtrl_InsertTextRaw 3412 -#define wxStyledTextCtrl_GetCurLineRaw 3413 -#define wxStyledTextCtrl_GetLineRaw 3414 -#define wxStyledTextCtrl_GetSelectedTextRaw 3415 -#define wxStyledTextCtrl_GetTextRangeRaw 3416 -#define wxStyledTextCtrl_SetTextRaw 3417 -#define wxStyledTextCtrl_GetTextRaw 3418 -#define wxStyledTextCtrl_AppendTextRaw 3419 -#define wxArtProvider_GetBitmap 3420 -#define wxArtProvider_GetIcon 3421 -#define wxTreeEvent_GetKeyCode 3422 -#define wxTreeEvent_GetItem 3423 -#define wxTreeEvent_GetKeyEvent 3424 -#define wxTreeEvent_GetLabel 3425 -#define wxTreeEvent_GetOldItem 3426 -#define wxTreeEvent_GetPoint 3427 -#define wxTreeEvent_IsEditCancelled 3428 -#define wxTreeEvent_SetToolTip 3429 -#define wxNotebookEvent_GetOldSelection 3430 -#define wxNotebookEvent_GetSelection 3431 -#define wxNotebookEvent_SetOldSelection 3432 -#define wxNotebookEvent_SetSelection 3433 -#define wxFileDataObject_new 3434 -#define wxFileDataObject_AddFile 3435 -#define wxFileDataObject_GetFilenames 3436 -#define wxFileDataObject_destroy 3437 -#define wxTextDataObject_new 3438 -#define wxTextDataObject_GetTextLength 3439 -#define wxTextDataObject_GetText 3440 -#define wxTextDataObject_SetText 3441 -#define wxTextDataObject_destroy 3442 -#define wxBitmapDataObject_new_1_1 3443 -#define wxBitmapDataObject_new_1_0 3444 -#define wxBitmapDataObject_GetBitmap 3445 -#define wxBitmapDataObject_SetBitmap 3446 -#define wxBitmapDataObject_destroy 3447 -#define wxClipboard_new 3449 -#define wxClipboard_destruct 3450 -#define wxClipboard_AddData 3451 -#define wxClipboard_Clear 3452 -#define wxClipboard_Close 3453 -#define wxClipboard_Flush 3454 -#define wxClipboard_GetData 3455 -#define wxClipboard_IsOpened 3456 -#define wxClipboard_Open 3457 -#define wxClipboard_SetData 3458 -#define wxClipboard_UsePrimarySelection 3460 -#define wxClipboard_IsSupported 3461 -#define wxClipboard_Get 3462 -#define wxSpinEvent_GetPosition 3463 -#define wxSpinEvent_SetPosition 3464 -#define wxSplitterWindow_new_0 3465 -#define wxSplitterWindow_new_2 3466 -#define wxSplitterWindow_destruct 3467 -#define wxSplitterWindow_Create 3468 -#define wxSplitterWindow_GetMinimumPaneSize 3469 -#define wxSplitterWindow_GetSashGravity 3470 -#define wxSplitterWindow_GetSashPosition 3471 -#define wxSplitterWindow_GetSplitMode 3472 -#define wxSplitterWindow_GetWindow1 3473 -#define wxSplitterWindow_GetWindow2 3474 -#define wxSplitterWindow_Initialize 3475 -#define wxSplitterWindow_IsSplit 3476 -#define wxSplitterWindow_ReplaceWindow 3477 -#define wxSplitterWindow_SetSashGravity 3478 -#define wxSplitterWindow_SetSashPosition 3479 -#define wxSplitterWindow_SetSashSize 3480 -#define wxSplitterWindow_SetMinimumPaneSize 3481 -#define wxSplitterWindow_SetSplitMode 3482 -#define wxSplitterWindow_SplitHorizontally 3483 -#define wxSplitterWindow_SplitVertically 3484 -#define wxSplitterWindow_Unsplit 3485 -#define wxSplitterWindow_UpdateSize 3486 -#define wxSplitterEvent_GetSashPosition 3487 -#define wxSplitterEvent_GetX 3488 -#define wxSplitterEvent_GetY 3489 -#define wxSplitterEvent_GetWindowBeingRemoved 3490 -#define wxSplitterEvent_SetSashPosition 3491 -#define wxHtmlWindow_new_0 3492 -#define wxHtmlWindow_new_2 3493 -#define wxHtmlWindow_AppendToPage 3494 -#define wxHtmlWindow_GetOpenedAnchor 3495 -#define wxHtmlWindow_GetOpenedPage 3496 -#define wxHtmlWindow_GetOpenedPageTitle 3497 -#define wxHtmlWindow_GetRelatedFrame 3498 -#define wxHtmlWindow_HistoryBack 3499 -#define wxHtmlWindow_HistoryCanBack 3500 -#define wxHtmlWindow_HistoryCanForward 3501 -#define wxHtmlWindow_HistoryClear 3502 -#define wxHtmlWindow_HistoryForward 3503 -#define wxHtmlWindow_LoadFile 3504 -#define wxHtmlWindow_LoadPage 3505 -#define wxHtmlWindow_SelectAll 3506 -#define wxHtmlWindow_SelectionToText 3507 -#define wxHtmlWindow_SelectLine 3508 -#define wxHtmlWindow_SelectWord 3509 -#define wxHtmlWindow_SetBorders 3510 -#define wxHtmlWindow_SetFonts 3511 -#define wxHtmlWindow_SetPage 3512 -#define wxHtmlWindow_SetRelatedFrame 3513 -#define wxHtmlWindow_SetRelatedStatusBar 3514 -#define wxHtmlWindow_ToText 3515 -#define wxHtmlWindow_destroy 3516 -#define wxHtmlLinkEvent_GetLinkInfo 3517 -#define wxSystemSettings_GetColour 3518 -#define wxSystemSettings_GetFont 3519 -#define wxSystemSettings_GetMetric 3520 -#define wxSystemSettings_GetScreenType 3521 -#define wxSystemOptions_GetOption 3522 -#define wxSystemOptions_GetOptionInt 3523 -#define wxSystemOptions_HasOption 3524 -#define wxSystemOptions_IsFalse 3525 -#define wxSystemOptions_SetOption_2_1 3526 -#define wxSystemOptions_SetOption_2_0 3527 -#define wxAuiNotebookEvent_SetSelection 3528 -#define wxAuiNotebookEvent_GetSelection 3529 -#define wxAuiNotebookEvent_SetOldSelection 3530 -#define wxAuiNotebookEvent_GetOldSelection 3531 -#define wxAuiNotebookEvent_SetDragSource 3532 -#define wxAuiNotebookEvent_GetDragSource 3533 -#define wxAuiManagerEvent_SetManager 3534 -#define wxAuiManagerEvent_GetManager 3535 -#define wxAuiManagerEvent_SetPane 3536 -#define wxAuiManagerEvent_GetPane 3537 -#define wxAuiManagerEvent_SetButton 3538 -#define wxAuiManagerEvent_GetButton 3539 -#define wxAuiManagerEvent_SetDC 3540 -#define wxAuiManagerEvent_GetDC 3541 -#define wxAuiManagerEvent_Veto 3542 -#define wxAuiManagerEvent_GetVeto 3543 -#define wxAuiManagerEvent_SetCanVeto 3544 -#define wxAuiManagerEvent_CanVeto 3545 -#define wxLogNull_new 3546 -#define wxLogNull_destroy 3547 -#define wxTaskBarIcon_new 3548 -#define wxTaskBarIcon_destruct 3549 -#define wxTaskBarIcon_PopupMenu 3550 -#define wxTaskBarIcon_RemoveIcon 3551 -#define wxTaskBarIcon_SetIcon 3552 -#define wxLocale_new_0 3553 -#define wxLocale_new_2 3555 -#define wxLocale_destruct 3556 -#define wxLocale_Init 3558 -#define wxLocale_AddCatalog_1 3559 -#define wxLocale_AddCatalog_3 3560 -#define wxLocale_AddCatalogLookupPathPrefix 3561 -#define wxLocale_GetCanonicalName 3562 -#define wxLocale_GetLanguage 3563 -#define wxLocale_GetLanguageName 3564 -#define wxLocale_GetLocale 3565 -#define wxLocale_GetName 3566 -#define wxLocale_GetString_2 3567 -#define wxLocale_GetString_4 3568 -#define wxLocale_GetHeaderValue 3569 -#define wxLocale_GetSysName 3570 -#define wxLocale_GetSystemEncoding 3571 -#define wxLocale_GetSystemEncodingName 3572 -#define wxLocale_GetSystemLanguage 3573 -#define wxLocale_IsLoaded 3574 -#define wxLocale_IsOk 3575 -#define wxActivateEvent_GetActive 3576 -#define wxPopupWindow_new_2 3578 -#define wxPopupWindow_new_0 3579 -#define wxPopupWindow_destruct 3581 -#define wxPopupWindow_Create 3582 -#define wxPopupWindow_Position 3583 -#define wxPopupTransientWindow_new_0 3584 -#define wxPopupTransientWindow_new_2 3585 -#define wxPopupTransientWindow_destruct 3586 -#define wxPopupTransientWindow_Popup 3587 -#define wxPopupTransientWindow_Dismiss 3588 -#define wxOverlay_new 3589 -#define wxOverlay_destruct 3590 -#define wxOverlay_Reset 3591 -#define wxDCOverlay_new_6 3592 -#define wxDCOverlay_new_2 3593 -#define wxDCOverlay_destruct 3594 -#define wxDCOverlay_Clear 3595 -#define wxDropFilesEvent_GetPosition 3596 -#define wxDropFilesEvent_GetNumberOfFiles 3597 -#define wxDropFilesEvent_GetFiles 3598 +#define wxWindow_GetContentScaleFactor 289 +#define wxTopLevelWindow_GetIcon 290 +#define wxTopLevelWindow_GetIcons 291 +#define wxTopLevelWindow_GetTitle 292 +#define wxTopLevelWindow_IsActive 293 +#define wxTopLevelWindow_Iconize 294 +#define wxTopLevelWindow_IsFullScreen 295 +#define wxTopLevelWindow_IsIconized 296 +#define wxTopLevelWindow_IsMaximized 297 +#define wxTopLevelWindow_Maximize 298 +#define wxTopLevelWindow_RequestUserAttention 299 +#define wxTopLevelWindow_SetIcon 300 +#define wxTopLevelWindow_SetIcons 301 +#define wxTopLevelWindow_CenterOnScreen 302 +#define wxTopLevelWindow_CentreOnScreen 303 +#define wxTopLevelWindow_SetShape 305 +#define wxTopLevelWindow_SetTitle 306 +#define wxTopLevelWindow_ShowFullScreen 307 +#define wxFrame_new_4 309 +#define wxFrame_new_0 310 +#define wxFrame_destruct 312 +#define wxFrame_Create 313 +#define wxFrame_CreateStatusBar 314 +#define wxFrame_CreateToolBar 315 +#define wxFrame_GetClientAreaOrigin 316 +#define wxFrame_GetMenuBar 317 +#define wxFrame_GetStatusBar 318 +#define wxFrame_GetStatusBarPane 319 +#define wxFrame_GetToolBar 320 +#define wxFrame_ProcessCommand 321 +#define wxFrame_SendSizeEvent 322 +#define wxFrame_SetMenuBar 323 +#define wxFrame_SetStatusBar 324 +#define wxFrame_SetStatusBarPane 325 +#define wxFrame_SetStatusText 326 +#define wxFrame_SetStatusWidths 327 +#define wxFrame_SetToolBar 328 +#define wxMiniFrame_new_0 329 +#define wxMiniFrame_new_4 330 +#define wxMiniFrame_Create 331 +#define wxMiniFrame_destroy 332 +#define wxSplashScreen_new_0 333 +#define wxSplashScreen_new_6 334 +#define wxSplashScreen_destruct 335 +#define wxSplashScreen_GetSplashStyle 336 +#define wxSplashScreen_GetTimeout 337 +#define wxPanel_new_0 338 +#define wxPanel_new_6 339 +#define wxPanel_new_2 340 +#define wxPanel_destruct 341 +#define wxPanel_InitDialog 342 +#define wxPanel_SetFocusIgnoringChildren 343 +#define wxScrolledWindow_new_0 344 +#define wxScrolledWindow_new_2 345 +#define wxScrolledWindow_destruct 346 +#define wxScrolledWindow_CalcScrolledPosition_4 347 +#define wxScrolledWindow_CalcScrolledPosition_1 348 +#define wxScrolledWindow_CalcUnscrolledPosition_4 349 +#define wxScrolledWindow_CalcUnscrolledPosition_1 350 +#define wxScrolledWindow_EnableScrolling 351 +#define wxScrolledWindow_GetScrollPixelsPerUnit 352 +#define wxScrolledWindow_GetViewStart 353 +#define wxScrolledWindow_DoPrepareDC 354 +#define wxScrolledWindow_PrepareDC 355 +#define wxScrolledWindow_Scroll 356 +#define wxScrolledWindow_SetScrollbars 357 +#define wxScrolledWindow_SetScrollRate 358 +#define wxScrolledWindow_SetTargetWindow 359 +#define wxSashWindow_new_0 360 +#define wxSashWindow_new_2 361 +#define wxSashWindow_destruct 362 +#define wxSashWindow_GetSashVisible 363 +#define wxSashWindow_GetMaximumSizeX 364 +#define wxSashWindow_GetMaximumSizeY 365 +#define wxSashWindow_GetMinimumSizeX 366 +#define wxSashWindow_GetMinimumSizeY 367 +#define wxSashWindow_SetMaximumSizeX 368 +#define wxSashWindow_SetMaximumSizeY 369 +#define wxSashWindow_SetMinimumSizeX 370 +#define wxSashWindow_SetMinimumSizeY 371 +#define wxSashWindow_SetSashVisible 372 +#define wxSashLayoutWindow_new_0 373 +#define wxSashLayoutWindow_new_2 374 +#define wxSashLayoutWindow_Create 375 +#define wxSashLayoutWindow_GetAlignment 376 +#define wxSashLayoutWindow_GetOrientation 377 +#define wxSashLayoutWindow_SetAlignment 378 +#define wxSashLayoutWindow_SetDefaultSize 379 +#define wxSashLayoutWindow_SetOrientation 380 +#define wxSashLayoutWindow_destroy 381 +#define wxGrid_new_0 382 +#define wxGrid_new_3 383 +#define wxGrid_new_4 384 +#define wxGrid_destruct 385 +#define wxGrid_AppendCols 386 +#define wxGrid_AppendRows 387 +#define wxGrid_AutoSize 388 +#define wxGrid_AutoSizeColumn 389 +#define wxGrid_AutoSizeColumns 390 +#define wxGrid_AutoSizeRow 391 +#define wxGrid_AutoSizeRows 392 +#define wxGrid_BeginBatch 393 +#define wxGrid_BlockToDeviceRect 394 +#define wxGrid_CanDragColSize 395 +#define wxGrid_CanDragRowSize 396 +#define wxGrid_CanDragGridSize 397 +#define wxGrid_CanEnableCellControl 398 +#define wxGrid_CellToRect_2 399 +#define wxGrid_CellToRect_1 400 +#define wxGrid_ClearGrid 401 +#define wxGrid_ClearSelection 402 +#define wxGrid_CreateGrid 403 +#define wxGrid_DeleteCols 404 +#define wxGrid_DeleteRows 405 +#define wxGrid_DisableCellEditControl 406 +#define wxGrid_DisableDragColSize 407 +#define wxGrid_DisableDragGridSize 408 +#define wxGrid_DisableDragRowSize 409 +#define wxGrid_EnableCellEditControl 410 +#define wxGrid_EnableDragColSize 411 +#define wxGrid_EnableDragGridSize 412 +#define wxGrid_EnableDragRowSize 413 +#define wxGrid_EnableEditing 414 +#define wxGrid_EnableGridLines 415 +#define wxGrid_EndBatch 416 +#define wxGrid_Fit 417 +#define wxGrid_ForceRefresh 418 +#define wxGrid_GetBatchCount 419 +#define wxGrid_GetCellAlignment 420 +#define wxGrid_GetCellBackgroundColour 421 +#define wxGrid_GetCellEditor 422 +#define wxGrid_GetCellFont 423 +#define wxGrid_GetCellRenderer 424 +#define wxGrid_GetCellTextColour 425 +#define wxGrid_GetCellValue_2 426 +#define wxGrid_GetCellValue_1 427 +#define wxGrid_GetColLabelAlignment 428 +#define wxGrid_GetColLabelSize 429 +#define wxGrid_GetColLabelValue 430 +#define wxGrid_GetColMinimalAcceptableWidth 431 +#define wxGrid_GetDefaultCellAlignment 432 +#define wxGrid_GetDefaultCellBackgroundColour 433 +#define wxGrid_GetDefaultCellFont 434 +#define wxGrid_GetDefaultCellTextColour 435 +#define wxGrid_GetDefaultColLabelSize 436 +#define wxGrid_GetDefaultColSize 437 +#define wxGrid_GetDefaultEditor 438 +#define wxGrid_GetDefaultEditorForCell_2 439 +#define wxGrid_GetDefaultEditorForCell_1 440 +#define wxGrid_GetDefaultEditorForType 441 +#define wxGrid_GetDefaultRenderer 442 +#define wxGrid_GetDefaultRendererForCell 443 +#define wxGrid_GetDefaultRendererForType 444 +#define wxGrid_GetDefaultRowLabelSize 445 +#define wxGrid_GetDefaultRowSize 446 +#define wxGrid_GetGridCursorCol 447 +#define wxGrid_GetGridCursorRow 448 +#define wxGrid_GetGridLineColour 449 +#define wxGrid_GridLinesEnabled 450 +#define wxGrid_GetLabelBackgroundColour 451 +#define wxGrid_GetLabelFont 452 +#define wxGrid_GetLabelTextColour 453 +#define wxGrid_GetNumberCols 454 +#define wxGrid_GetNumberRows 455 +#define wxGrid_GetOrCreateCellAttr 456 +#define wxGrid_GetRowMinimalAcceptableHeight 457 +#define wxGrid_GetRowLabelAlignment 458 +#define wxGrid_GetRowLabelSize 459 +#define wxGrid_GetRowLabelValue 460 +#define wxGrid_GetRowSize 461 +#define wxGrid_GetScrollLineX 462 +#define wxGrid_GetScrollLineY 463 +#define wxGrid_GetSelectedCells 464 +#define wxGrid_GetSelectedCols 465 +#define wxGrid_GetSelectedRows 466 +#define wxGrid_GetSelectionBackground 467 +#define wxGrid_GetSelectionBlockTopLeft 468 +#define wxGrid_GetSelectionBlockBottomRight 469 +#define wxGrid_GetSelectionForeground 470 +#define wxGrid_GetViewWidth 471 +#define wxGrid_GetGridWindow 472 +#define wxGrid_GetGridRowLabelWindow 473 +#define wxGrid_GetGridColLabelWindow 474 +#define wxGrid_GetGridCornerLabelWindow 475 +#define wxGrid_HideCellEditControl 476 +#define wxGrid_InsertCols 477 +#define wxGrid_InsertRows 478 +#define wxGrid_IsCellEditControlEnabled 479 +#define wxGrid_IsCurrentCellReadOnly 480 +#define wxGrid_IsEditable 481 +#define wxGrid_IsInSelection_2 482 +#define wxGrid_IsInSelection_1 483 +#define wxGrid_IsReadOnly 484 +#define wxGrid_IsSelection 485 +#define wxGrid_IsVisible_3 486 +#define wxGrid_IsVisible_2 487 +#define wxGrid_MakeCellVisible_2 488 +#define wxGrid_MakeCellVisible_1 489 +#define wxGrid_MoveCursorDown 490 +#define wxGrid_MoveCursorLeft 491 +#define wxGrid_MoveCursorRight 492 +#define wxGrid_MoveCursorUp 493 +#define wxGrid_MoveCursorDownBlock 494 +#define wxGrid_MoveCursorLeftBlock 495 +#define wxGrid_MoveCursorRightBlock 496 +#define wxGrid_MoveCursorUpBlock 497 +#define wxGrid_MovePageDown 498 +#define wxGrid_MovePageUp 499 +#define wxGrid_RegisterDataType 500 +#define wxGrid_SaveEditControlValue 501 +#define wxGrid_SelectAll 502 +#define wxGrid_SelectBlock_5 503 +#define wxGrid_SelectBlock_3 504 +#define wxGrid_SelectCol 505 +#define wxGrid_SelectRow 506 +#define wxGrid_SetCellAlignment_4 507 +#define wxGrid_SetCellAlignment_3 508 +#define wxGrid_SetCellAlignment_1 509 +#define wxGrid_SetCellBackgroundColour_3_0 510 +#define wxGrid_SetCellBackgroundColour_1 511 +#define wxGrid_SetCellBackgroundColour_3_1 512 +#define wxGrid_SetCellEditor 513 +#define wxGrid_SetCellFont 514 +#define wxGrid_SetCellRenderer 515 +#define wxGrid_SetCellTextColour_3_0 516 +#define wxGrid_SetCellTextColour_3_1 517 +#define wxGrid_SetCellTextColour_1 518 +#define wxGrid_SetCellValue_3_0 519 +#define wxGrid_SetCellValue_2 520 +#define wxGrid_SetCellValue_3_1 521 +#define wxGrid_SetColAttr 522 +#define wxGrid_SetColFormatBool 523 +#define wxGrid_SetColFormatNumber 524 +#define wxGrid_SetColFormatFloat 525 +#define wxGrid_SetColFormatCustom 526 +#define wxGrid_SetColLabelAlignment 527 +#define wxGrid_SetColLabelSize 528 +#define wxGrid_SetColLabelValue 529 +#define wxGrid_SetColMinimalWidth 530 +#define wxGrid_SetColMinimalAcceptableWidth 531 +#define wxGrid_SetColSize 532 +#define wxGrid_SetDefaultCellAlignment 533 +#define wxGrid_SetDefaultCellBackgroundColour 534 +#define wxGrid_SetDefaultCellFont 535 +#define wxGrid_SetDefaultCellTextColour 536 +#define wxGrid_SetDefaultEditor 537 +#define wxGrid_SetDefaultRenderer 538 +#define wxGrid_SetDefaultColSize 539 +#define wxGrid_SetDefaultRowSize 540 +#define wxGrid_SetGridCursor 541 +#define wxGrid_SetGridLineColour 542 +#define wxGrid_SetLabelBackgroundColour 543 +#define wxGrid_SetLabelFont 544 +#define wxGrid_SetLabelTextColour 545 +#define wxGrid_SetMargins 546 +#define wxGrid_SetReadOnly 547 +#define wxGrid_SetRowAttr 548 +#define wxGrid_SetRowLabelAlignment 549 +#define wxGrid_SetRowLabelSize 550 +#define wxGrid_SetRowLabelValue 551 +#define wxGrid_SetRowMinimalHeight 552 +#define wxGrid_SetRowMinimalAcceptableHeight 553 +#define wxGrid_SetRowSize 554 +#define wxGrid_SetScrollLineX 555 +#define wxGrid_SetScrollLineY 556 +#define wxGrid_SetSelectionBackground 557 +#define wxGrid_SetSelectionForeground 558 +#define wxGrid_SetSelectionMode 559 +#define wxGrid_ShowCellEditControl 560 +#define wxGrid_XToCol 561 +#define wxGrid_XToEdgeOfCol 562 +#define wxGrid_YToEdgeOfRow 563 +#define wxGrid_YToRow 564 +#define wxGridCellRenderer_Draw 565 +#define wxGridCellRenderer_GetBestSize 566 +#define wxGridCellEditor_Create 567 +#define wxGridCellEditor_IsCreated 568 +#define wxGridCellEditor_SetSize 569 +#define wxGridCellEditor_Show 570 +#define wxGridCellEditor_PaintBackground 571 +#define wxGridCellEditor_BeginEdit 572 +#define wxGridCellEditor_EndEdit 573 +#define wxGridCellEditor_Reset 574 +#define wxGridCellEditor_StartingKey 575 +#define wxGridCellEditor_StartingClick 576 +#define wxGridCellEditor_HandleReturn 577 +#define wxGridCellBoolRenderer_new 578 +#define wxGridCellBoolRenderer_destroy 579 +#define wxGridCellBoolEditor_new 580 +#define wxGridCellBoolEditor_IsTrueValue 581 +#define wxGridCellBoolEditor_UseStringValues 582 +#define wxGridCellBoolEditor_destroy 583 +#define wxGridCellFloatRenderer_new 584 +#define wxGridCellFloatRenderer_GetPrecision 585 +#define wxGridCellFloatRenderer_GetWidth 586 +#define wxGridCellFloatRenderer_SetParameters 587 +#define wxGridCellFloatRenderer_SetPrecision 588 +#define wxGridCellFloatRenderer_SetWidth 589 +#define wxGridCellFloatRenderer_destroy 590 +#define wxGridCellFloatEditor_new 591 +#define wxGridCellFloatEditor_SetParameters 592 +#define wxGridCellFloatEditor_destroy 593 +#define wxGridCellStringRenderer_new 594 +#define wxGridCellStringRenderer_destroy 595 +#define wxGridCellTextEditor_new 596 +#define wxGridCellTextEditor_SetParameters 597 +#define wxGridCellTextEditor_destroy 598 +#define wxGridCellChoiceEditor_new 600 +#define wxGridCellChoiceEditor_SetParameters 601 +#define wxGridCellChoiceEditor_destroy 602 +#define wxGridCellNumberRenderer_new 603 +#define wxGridCellNumberRenderer_destroy 604 +#define wxGridCellNumberEditor_new 605 +#define wxGridCellNumberEditor_GetValue 606 +#define wxGridCellNumberEditor_SetParameters 607 +#define wxGridCellNumberEditor_destroy 608 +#define wxGridCellAttr_SetTextColour 609 +#define wxGridCellAttr_SetBackgroundColour 610 +#define wxGridCellAttr_SetFont 611 +#define wxGridCellAttr_SetAlignment 612 +#define wxGridCellAttr_SetReadOnly 613 +#define wxGridCellAttr_SetRenderer 614 +#define wxGridCellAttr_SetEditor 615 +#define wxGridCellAttr_HasTextColour 616 +#define wxGridCellAttr_HasBackgroundColour 617 +#define wxGridCellAttr_HasFont 618 +#define wxGridCellAttr_HasAlignment 619 +#define wxGridCellAttr_HasRenderer 620 +#define wxGridCellAttr_HasEditor 621 +#define wxGridCellAttr_GetTextColour 622 +#define wxGridCellAttr_GetBackgroundColour 623 +#define wxGridCellAttr_GetFont 624 +#define wxGridCellAttr_GetAlignment 625 +#define wxGridCellAttr_GetRenderer 626 +#define wxGridCellAttr_GetEditor 627 +#define wxGridCellAttr_IsReadOnly 628 +#define wxGridCellAttr_SetDefAttr 629 +#define wxDC_Blit 630 +#define wxDC_CalcBoundingBox 631 +#define wxDC_Clear 632 +#define wxDC_ComputeScaleAndOrigin 633 +#define wxDC_CrossHair 634 +#define wxDC_DestroyClippingRegion 635 +#define wxDC_DeviceToLogicalX 636 +#define wxDC_DeviceToLogicalXRel 637 +#define wxDC_DeviceToLogicalY 638 +#define wxDC_DeviceToLogicalYRel 639 +#define wxDC_DrawArc 640 +#define wxDC_DrawBitmap 641 +#define wxDC_DrawCheckMark 642 +#define wxDC_DrawCircle 643 +#define wxDC_DrawEllipse_2 645 +#define wxDC_DrawEllipse_1 646 +#define wxDC_DrawEllipticArc 647 +#define wxDC_DrawIcon 648 +#define wxDC_DrawLabel 649 +#define wxDC_DrawLine 650 +#define wxDC_DrawLines 651 +#define wxDC_DrawPolygon 653 +#define wxDC_DrawPoint 655 +#define wxDC_DrawRectangle_2 657 +#define wxDC_DrawRectangle_1 658 +#define wxDC_DrawRotatedText 659 +#define wxDC_DrawRoundedRectangle_3 661 +#define wxDC_DrawRoundedRectangle_2 662 +#define wxDC_DrawText 663 +#define wxDC_EndDoc 664 +#define wxDC_EndPage 665 +#define wxDC_FloodFill 666 +#define wxDC_GetBackground 667 +#define wxDC_GetBackgroundMode 668 +#define wxDC_GetBrush 669 +#define wxDC_GetCharHeight 670 +#define wxDC_GetCharWidth 671 +#define wxDC_GetClippingBox 672 +#define wxDC_GetFont 674 +#define wxDC_GetLayoutDirection 675 +#define wxDC_GetLogicalFunction 676 +#define wxDC_GetMapMode 677 +#define wxDC_GetMultiLineTextExtent_4 678 +#define wxDC_GetMultiLineTextExtent_1 679 +#define wxDC_GetPartialTextExtents 680 +#define wxDC_GetPen 681 +#define wxDC_GetPixel 682 +#define wxDC_GetPPI 683 +#define wxDC_GetSize 685 +#define wxDC_GetSizeMM 687 +#define wxDC_GetTextBackground 688 +#define wxDC_GetTextExtent_4 689 +#define wxDC_GetTextExtent_1 690 +#define wxDC_GetTextForeground 692 +#define wxDC_GetUserScale 693 +#define wxDC_GradientFillConcentric_3 694 +#define wxDC_GradientFillConcentric_4 695 +#define wxDC_GradientFillLinear 696 +#define wxDC_LogicalToDeviceX 697 +#define wxDC_LogicalToDeviceXRel 698 +#define wxDC_LogicalToDeviceY 699 +#define wxDC_LogicalToDeviceYRel 700 +#define wxDC_MaxX 701 +#define wxDC_MaxY 702 +#define wxDC_MinX 703 +#define wxDC_MinY 704 +#define wxDC_IsOk 705 +#define wxDC_ResetBoundingBox 706 +#define wxDC_SetAxisOrientation 707 +#define wxDC_SetBackground 708 +#define wxDC_SetBackgroundMode 709 +#define wxDC_SetBrush 710 +#define wxDC_SetClippingRegion_2 712 +#define wxDC_SetClippingRegion_1_1 713 +#define wxDC_SetClippingRegion_1_0 714 +#define wxDC_SetDeviceOrigin 715 +#define wxDC_SetFont 716 +#define wxDC_SetLayoutDirection 717 +#define wxDC_SetLogicalFunction 718 +#define wxDC_SetMapMode 719 +#define wxDC_SetPalette 720 +#define wxDC_SetPen 721 +#define wxDC_SetTextBackground 722 +#define wxDC_SetTextForeground 723 +#define wxDC_SetUserScale 724 +#define wxDC_StartDoc 725 +#define wxDC_StartPage 726 +#define wxMirrorDC_new 727 +#define wxMirrorDC_destroy 728 +#define wxScreenDC_new 729 +#define wxScreenDC_destruct 730 +#define wxPostScriptDC_new_0 731 +#define wxPostScriptDC_new_1 732 +#define wxPostScriptDC_destruct 733 +#define wxPostScriptDC_SetResolution 734 +#define wxPostScriptDC_GetResolution 735 +#define wxWindowDC_new_0 736 +#define wxWindowDC_new_1 737 +#define wxWindowDC_destruct 738 +#define wxClientDC_new_0 739 +#define wxClientDC_new_1 740 +#define wxClientDC_destroy 741 +#define wxPaintDC_new_0 742 +#define wxPaintDC_new_1 743 +#define wxPaintDC_destroy 744 +#define wxMemoryDC_new_1_0 746 +#define wxMemoryDC_new_1_1 747 +#define wxMemoryDC_new_0 748 +#define wxMemoryDC_destruct 750 +#define wxMemoryDC_SelectObject 751 +#define wxMemoryDC_SelectObjectAsSource 752 +#define wxBufferedDC_new_0 753 +#define wxBufferedDC_new_2 754 +#define wxBufferedDC_new_3 755 +#define wxBufferedDC_destruct 756 +#define wxBufferedDC_Init_2 757 +#define wxBufferedDC_Init_3 758 +#define wxBufferedPaintDC_new_3 759 +#define wxBufferedPaintDC_new_2 760 +#define wxBufferedPaintDC_destruct 761 +#define wxGraphicsObject_destruct 762 +#define wxGraphicsObject_GetRenderer 763 +#define wxGraphicsObject_IsNull 764 +#define wxGraphicsContext_destruct 765 +#define wxGraphicsContext_Create_1_1 766 +#define wxGraphicsContext_Create_1_0 767 +#define wxGraphicsContext_Create_0 768 +#define wxGraphicsContext_CreatePen 769 +#define wxGraphicsContext_CreateBrush 770 +#define wxGraphicsContext_CreateRadialGradientBrush 771 +#define wxGraphicsContext_CreateLinearGradientBrush 772 +#define wxGraphicsContext_CreateFont 773 +#define wxGraphicsContext_CreateMatrix 774 +#define wxGraphicsContext_CreatePath 775 +#define wxGraphicsContext_Clip_1 776 +#define wxGraphicsContext_Clip_4 777 +#define wxGraphicsContext_ResetClip 778 +#define wxGraphicsContext_DrawBitmap 779 +#define wxGraphicsContext_DrawEllipse 780 +#define wxGraphicsContext_DrawIcon 781 +#define wxGraphicsContext_DrawLines 782 +#define wxGraphicsContext_DrawPath 783 +#define wxGraphicsContext_DrawRectangle 784 +#define wxGraphicsContext_DrawRoundedRectangle 785 +#define wxGraphicsContext_DrawText_3 786 +#define wxGraphicsContext_DrawText_4_0 787 +#define wxGraphicsContext_DrawText_4_1 788 +#define wxGraphicsContext_DrawText_5 789 +#define wxGraphicsContext_FillPath 790 +#define wxGraphicsContext_StrokePath 791 +#define wxGraphicsContext_GetPartialTextExtents 792 +#define wxGraphicsContext_GetTextExtent 793 +#define wxGraphicsContext_Rotate 794 +#define wxGraphicsContext_Scale 795 +#define wxGraphicsContext_Translate 796 +#define wxGraphicsContext_GetTransform 797 +#define wxGraphicsContext_SetTransform 798 +#define wxGraphicsContext_ConcatTransform 799 +#define wxGraphicsContext_SetBrush_1_1 800 +#define wxGraphicsContext_SetBrush_1_0 801 +#define wxGraphicsContext_SetFont_1 802 +#define wxGraphicsContext_SetFont_2 803 +#define wxGraphicsContext_SetPen_1_0 804 +#define wxGraphicsContext_SetPen_1_1 805 +#define wxGraphicsContext_StrokeLine 806 +#define wxGraphicsContext_StrokeLines 807 +#define wxGraphicsMatrix_Concat 809 +#define wxGraphicsMatrix_Get 811 +#define wxGraphicsMatrix_Invert 812 +#define wxGraphicsMatrix_IsEqual 813 +#define wxGraphicsMatrix_IsIdentity 815 +#define wxGraphicsMatrix_Rotate 816 +#define wxGraphicsMatrix_Scale 817 +#define wxGraphicsMatrix_Translate 818 +#define wxGraphicsMatrix_Set 819 +#define wxGraphicsMatrix_TransformPoint 820 +#define wxGraphicsMatrix_TransformDistance 821 +#define wxGraphicsPath_MoveToPoint_2 822 +#define wxGraphicsPath_MoveToPoint_1 823 +#define wxGraphicsPath_AddArc_6 824 +#define wxGraphicsPath_AddArc_5 825 +#define wxGraphicsPath_AddArcToPoint 826 +#define wxGraphicsPath_AddCircle 827 +#define wxGraphicsPath_AddCurveToPoint_6 828 +#define wxGraphicsPath_AddCurveToPoint_3 829 +#define wxGraphicsPath_AddEllipse 830 +#define wxGraphicsPath_AddLineToPoint_2 831 +#define wxGraphicsPath_AddLineToPoint_1 832 +#define wxGraphicsPath_AddPath 833 +#define wxGraphicsPath_AddQuadCurveToPoint 834 +#define wxGraphicsPath_AddRectangle 835 +#define wxGraphicsPath_AddRoundedRectangle 836 +#define wxGraphicsPath_CloseSubpath 837 +#define wxGraphicsPath_Contains_3 838 +#define wxGraphicsPath_Contains_2 839 +#define wxGraphicsPath_GetBox 841 +#define wxGraphicsPath_GetCurrentPoint 843 +#define wxGraphicsPath_Transform 844 +#define wxGraphicsRenderer_GetDefaultRenderer 845 +#define wxGraphicsRenderer_CreateContext_1_1 846 +#define wxGraphicsRenderer_CreateContext_1_0 847 +#define wxGraphicsRenderer_CreatePen 848 +#define wxGraphicsRenderer_CreateBrush 849 +#define wxGraphicsRenderer_CreateLinearGradientBrush 850 +#define wxGraphicsRenderer_CreateRadialGradientBrush 851 +#define wxGraphicsRenderer_CreateFont 852 +#define wxGraphicsRenderer_CreateMatrix 853 +#define wxGraphicsRenderer_CreatePath 854 +#define wxMenuBar_new_1 856 +#define wxMenuBar_new_0 858 +#define wxMenuBar_destruct 860 +#define wxMenuBar_Append 861 +#define wxMenuBar_Check 862 +#define wxMenuBar_Enable_2 863 +#define wxMenuBar_Enable_1 864 +#define wxMenuBar_EnableTop 865 +#define wxMenuBar_FindMenu 866 +#define wxMenuBar_FindMenuItem 867 +#define wxMenuBar_FindItem 868 +#define wxMenuBar_GetHelpString 869 +#define wxMenuBar_GetLabel_1 870 +#define wxMenuBar_GetLabel_0 871 +#define wxMenuBar_GetLabelTop 872 +#define wxMenuBar_GetMenu 873 +#define wxMenuBar_GetMenuCount 874 +#define wxMenuBar_Insert 875 +#define wxMenuBar_IsChecked 876 +#define wxMenuBar_IsEnabled_1 877 +#define wxMenuBar_IsEnabled_0 878 +#define wxMenuBar_Remove 879 +#define wxMenuBar_Replace 880 +#define wxMenuBar_SetHelpString 881 +#define wxMenuBar_SetLabel_2 882 +#define wxMenuBar_SetLabel_1 883 +#define wxMenuBar_SetLabelTop 884 +#define wxControl_GetLabel 885 +#define wxControl_SetLabel 886 +#define wxControlWithItems_Append_1 887 +#define wxControlWithItems_Append_2 888 +#define wxControlWithItems_appendStrings_1 889 +#define wxControlWithItems_Clear 890 +#define wxControlWithItems_Delete 891 +#define wxControlWithItems_FindString 892 +#define wxControlWithItems_getClientData 893 +#define wxControlWithItems_setClientData 894 +#define wxControlWithItems_GetCount 895 +#define wxControlWithItems_GetSelection 896 +#define wxControlWithItems_GetString 897 +#define wxControlWithItems_GetStringSelection 898 +#define wxControlWithItems_Insert_2 899 +#define wxControlWithItems_Insert_3 900 +#define wxControlWithItems_IsEmpty 901 +#define wxControlWithItems_Select 902 +#define wxControlWithItems_SetSelection 903 +#define wxControlWithItems_SetString 904 +#define wxControlWithItems_SetStringSelection 905 +#define wxMenu_new_2 908 +#define wxMenu_new_1 909 +#define wxMenu_destruct 911 +#define wxMenu_Append_3 912 +#define wxMenu_Append_1 913 +#define wxMenu_Append_4_0 914 +#define wxMenu_Append_4_1 915 +#define wxMenu_AppendCheckItem 916 +#define wxMenu_AppendRadioItem 917 +#define wxMenu_AppendSeparator 918 +#define wxMenu_Break 919 +#define wxMenu_Check 920 +#define wxMenu_Delete_1_0 921 +#define wxMenu_Delete_1_1 922 +#define wxMenu_Destroy_1_0 923 +#define wxMenu_Destroy_1_1 924 +#define wxMenu_Enable 925 +#define wxMenu_FindItem_1 926 +#define wxMenu_FindItem_2 927 +#define wxMenu_FindItemByPosition 928 +#define wxMenu_GetHelpString 929 +#define wxMenu_GetLabel 930 +#define wxMenu_GetMenuItemCount 931 +#define wxMenu_GetMenuItems 932 +#define wxMenu_GetTitle 934 +#define wxMenu_Insert_2 935 +#define wxMenu_Insert_3 936 +#define wxMenu_Insert_5_1 937 +#define wxMenu_Insert_5_0 938 +#define wxMenu_InsertCheckItem 939 +#define wxMenu_InsertRadioItem 940 +#define wxMenu_InsertSeparator 941 +#define wxMenu_IsChecked 942 +#define wxMenu_IsEnabled 943 +#define wxMenu_Prepend_1 944 +#define wxMenu_Prepend_2 945 +#define wxMenu_Prepend_4_1 946 +#define wxMenu_Prepend_4_0 947 +#define wxMenu_PrependCheckItem 948 +#define wxMenu_PrependRadioItem 949 +#define wxMenu_PrependSeparator 950 +#define wxMenu_Remove_1_0 951 +#define wxMenu_Remove_1_1 952 +#define wxMenu_SetHelpString 953 +#define wxMenu_SetLabel 954 +#define wxMenu_SetTitle 955 +#define wxMenuItem_new 956 +#define wxMenuItem_destruct 958 +#define wxMenuItem_Check 959 +#define wxMenuItem_Enable 960 +#define wxMenuItem_GetBitmap 961 +#define wxMenuItem_GetHelp 962 +#define wxMenuItem_GetId 963 +#define wxMenuItem_GetKind 964 +#define wxMenuItem_GetLabel 965 +#define wxMenuItem_GetLabelFromText 966 +#define wxMenuItem_GetMenu 967 +#define wxMenuItem_GetText 968 +#define wxMenuItem_GetSubMenu 969 +#define wxMenuItem_IsCheckable 970 +#define wxMenuItem_IsChecked 971 +#define wxMenuItem_IsEnabled 972 +#define wxMenuItem_IsSeparator 973 +#define wxMenuItem_IsSubMenu 974 +#define wxMenuItem_SetBitmap 975 +#define wxMenuItem_SetHelp 976 +#define wxMenuItem_SetMenu 977 +#define wxMenuItem_SetSubMenu 978 +#define wxMenuItem_SetText 979 +#define wxToolBar_AddControl 980 +#define wxToolBar_AddSeparator 981 +#define wxToolBar_AddTool_5 982 +#define wxToolBar_AddTool_4_0 983 +#define wxToolBar_AddTool_1 984 +#define wxToolBar_AddTool_4_1 985 +#define wxToolBar_AddTool_3 986 +#define wxToolBar_AddTool_6 987 +#define wxToolBar_AddCheckTool 988 +#define wxToolBar_AddRadioTool 989 +#define wxToolBar_AddStretchableSpace 990 +#define wxToolBar_InsertStretchableSpace 991 +#define wxToolBar_DeleteTool 992 +#define wxToolBar_DeleteToolByPos 993 +#define wxToolBar_EnableTool 994 +#define wxToolBar_FindById 995 +#define wxToolBar_FindControl 996 +#define wxToolBar_FindToolForPosition 997 +#define wxToolBar_GetToolSize 998 +#define wxToolBar_GetToolBitmapSize 999 +#define wxToolBar_GetMargins 1000 +#define wxToolBar_GetToolEnabled 1001 +#define wxToolBar_GetToolLongHelp 1002 +#define wxToolBar_GetToolPacking 1003 +#define wxToolBar_GetToolPos 1004 +#define wxToolBar_GetToolSeparation 1005 +#define wxToolBar_GetToolShortHelp 1006 +#define wxToolBar_GetToolState 1007 +#define wxToolBar_InsertControl 1008 +#define wxToolBar_InsertSeparator 1009 +#define wxToolBar_InsertTool_5 1010 +#define wxToolBar_InsertTool_2 1011 +#define wxToolBar_InsertTool_4 1012 +#define wxToolBar_Realize 1013 +#define wxToolBar_RemoveTool 1014 +#define wxToolBar_SetMargins 1015 +#define wxToolBar_SetToolBitmapSize 1016 +#define wxToolBar_SetToolLongHelp 1017 +#define wxToolBar_SetToolPacking 1018 +#define wxToolBar_SetToolShortHelp 1019 +#define wxToolBar_SetToolSeparation 1020 +#define wxToolBar_ToggleTool 1021 +#define wxStatusBar_new_0 1023 +#define wxStatusBar_new_2 1024 +#define wxStatusBar_destruct 1026 +#define wxStatusBar_Create 1027 +#define wxStatusBar_GetFieldRect 1028 +#define wxStatusBar_GetFieldsCount 1029 +#define wxStatusBar_GetStatusText 1030 +#define wxStatusBar_PopStatusText 1031 +#define wxStatusBar_PushStatusText 1032 +#define wxStatusBar_SetFieldsCount 1033 +#define wxStatusBar_SetMinHeight 1034 +#define wxStatusBar_SetStatusText 1035 +#define wxStatusBar_SetStatusWidths 1036 +#define wxStatusBar_SetStatusStyles 1037 +#define wxBitmap_new_0 1038 +#define wxBitmap_new_3 1039 +#define wxBitmap_new_4 1040 +#define wxBitmap_new_2_0 1041 +#define wxBitmap_new_2_1 1042 +#define wxBitmap_destruct 1043 +#define wxBitmap_ConvertToImage 1044 +#define wxBitmap_CopyFromIcon 1045 +#define wxBitmap_Create 1046 +#define wxBitmap_GetDepth 1047 +#define wxBitmap_GetHeight 1048 +#define wxBitmap_GetPalette 1049 +#define wxBitmap_GetMask 1050 +#define wxBitmap_GetWidth 1051 +#define wxBitmap_GetSubBitmap 1052 +#define wxBitmap_LoadFile 1053 +#define wxBitmap_Ok 1054 +#define wxBitmap_SaveFile 1055 +#define wxBitmap_SetDepth 1056 +#define wxBitmap_SetHeight 1057 +#define wxBitmap_SetMask 1058 +#define wxBitmap_SetPalette 1059 +#define wxBitmap_SetWidth 1060 +#define wxIcon_new_0 1061 +#define wxIcon_new_2 1062 +#define wxIcon_new_1 1063 +#define wxIcon_CopyFromBitmap 1064 +#define wxIcon_destroy 1065 +#define wxIconBundle_new_0 1066 +#define wxIconBundle_new_2 1067 +#define wxIconBundle_new_1_0 1068 +#define wxIconBundle_new_1_1 1069 +#define wxIconBundle_destruct 1070 +#define wxIconBundle_AddIcon_2 1071 +#define wxIconBundle_AddIcon_1 1072 +#define wxIconBundle_GetIcon_1_1 1073 +#define wxIconBundle_GetIcon_1_0 1074 +#define wxCursor_new_0 1075 +#define wxCursor_new_1_0 1076 +#define wxCursor_new_1_1 1077 +#define wxCursor_new_4 1078 +#define wxCursor_destruct 1079 +#define wxCursor_Ok 1080 +#define wxMask_new_0 1081 +#define wxMask_new_2_1 1082 +#define wxMask_new_2_0 1083 +#define wxMask_new_1 1084 +#define wxMask_destruct 1085 +#define wxMask_Create_2_1 1086 +#define wxMask_Create_2_0 1087 +#define wxMask_Create_1 1088 +#define wxImage_new_0 1089 +#define wxImage_new_3_0 1090 +#define wxImage_new_4 1091 +#define wxImage_new_5 1092 +#define wxImage_new_2 1093 +#define wxImage_new_3_1 1094 +#define wxImage_Blur 1095 +#define wxImage_BlurHorizontal 1096 +#define wxImage_BlurVertical 1097 +#define wxImage_ConvertAlphaToMask 1098 +#define wxImage_ConvertToGreyscale 1099 +#define wxImage_ConvertToMono 1100 +#define wxImage_Copy 1101 +#define wxImage_Create_3 1102 +#define wxImage_Create_4 1103 +#define wxImage_Create_5 1104 +#define wxImage_Destroy 1105 +#define wxImage_FindFirstUnusedColour 1106 +#define wxImage_GetImageExtWildcard 1107 +#define wxImage_GetAlpha_2 1108 +#define wxImage_GetAlpha_0 1109 +#define wxImage_GetBlue 1110 +#define wxImage_GetData 1111 +#define wxImage_GetGreen 1112 +#define wxImage_GetImageCount 1113 +#define wxImage_GetHeight 1114 +#define wxImage_GetMaskBlue 1115 +#define wxImage_GetMaskGreen 1116 +#define wxImage_GetMaskRed 1117 +#define wxImage_GetOrFindMaskColour 1118 +#define wxImage_GetPalette 1119 +#define wxImage_GetRed 1120 +#define wxImage_GetSubImage 1121 +#define wxImage_GetWidth 1122 +#define wxImage_HasAlpha 1123 +#define wxImage_HasMask 1124 +#define wxImage_GetOption 1125 +#define wxImage_GetOptionInt 1126 +#define wxImage_HasOption 1127 +#define wxImage_InitAlpha 1128 +#define wxImage_InitStandardHandlers 1129 +#define wxImage_IsTransparent 1130 +#define wxImage_LoadFile_2 1131 +#define wxImage_LoadFile_3 1132 +#define wxImage_Ok 1133 +#define wxImage_RemoveHandler 1134 +#define wxImage_Mirror 1135 +#define wxImage_Replace 1136 +#define wxImage_Rescale 1137 +#define wxImage_Resize 1138 +#define wxImage_Rotate 1139 +#define wxImage_RotateHue 1140 +#define wxImage_Rotate90 1141 +#define wxImage_SaveFile_1 1142 +#define wxImage_SaveFile_2_0 1143 +#define wxImage_SaveFile_2_1 1144 +#define wxImage_Scale 1145 +#define wxImage_Size 1146 +#define wxImage_SetAlpha_3 1147 +#define wxImage_SetAlpha_2 1148 +#define wxImage_SetData_2 1149 +#define wxImage_SetData_4 1150 +#define wxImage_SetMask 1151 +#define wxImage_SetMaskColour 1152 +#define wxImage_SetMaskFromImage 1153 +#define wxImage_SetOption_2_1 1154 +#define wxImage_SetOption_2_0 1155 +#define wxImage_SetPalette 1156 +#define wxImage_SetRGB_5 1157 +#define wxImage_SetRGB_4 1158 +#define wxImage_destroy 1159 +#define wxBrush_new_0 1160 +#define wxBrush_new_2 1161 +#define wxBrush_new_1 1162 +#define wxBrush_destruct 1164 +#define wxBrush_GetColour 1165 +#define wxBrush_GetStipple 1166 +#define wxBrush_GetStyle 1167 +#define wxBrush_IsHatch 1168 +#define wxBrush_IsOk 1169 +#define wxBrush_SetColour_1 1170 +#define wxBrush_SetColour_3 1171 +#define wxBrush_SetStipple 1172 +#define wxBrush_SetStyle 1173 +#define wxPen_new_0 1174 +#define wxPen_new_2 1175 +#define wxPen_destruct 1176 +#define wxPen_GetCap 1177 +#define wxPen_GetColour 1178 +#define wxPen_GetJoin 1179 +#define wxPen_GetStyle 1180 +#define wxPen_GetWidth 1181 +#define wxPen_IsOk 1182 +#define wxPen_SetCap 1183 +#define wxPen_SetColour_1 1184 +#define wxPen_SetColour_3 1185 +#define wxPen_SetJoin 1186 +#define wxPen_SetStyle 1187 +#define wxPen_SetWidth 1188 +#define wxRegion_new_0 1189 +#define wxRegion_new_4 1190 +#define wxRegion_new_2 1191 +#define wxRegion_new_1_1 1192 +#define wxRegion_new_1_0 1194 +#define wxRegion_destruct 1196 +#define wxRegion_Clear 1197 +#define wxRegion_Contains_2 1198 +#define wxRegion_Contains_1_0 1199 +#define wxRegion_Contains_4 1200 +#define wxRegion_Contains_1_1 1201 +#define wxRegion_ConvertToBitmap 1202 +#define wxRegion_GetBox 1203 +#define wxRegion_Intersect_4 1204 +#define wxRegion_Intersect_1_1 1205 +#define wxRegion_Intersect_1_0 1206 +#define wxRegion_IsEmpty 1207 +#define wxRegion_Subtract_4 1208 +#define wxRegion_Subtract_1_1 1209 +#define wxRegion_Subtract_1_0 1210 +#define wxRegion_Offset_2 1211 +#define wxRegion_Offset_1 1212 +#define wxRegion_Union_4 1213 +#define wxRegion_Union_1_2 1214 +#define wxRegion_Union_1_1 1215 +#define wxRegion_Union_1_0 1216 +#define wxRegion_Union_3 1217 +#define wxRegion_Xor_4 1218 +#define wxRegion_Xor_1_1 1219 +#define wxRegion_Xor_1_0 1220 +#define wxAcceleratorTable_new_0 1221 +#define wxAcceleratorTable_new_2 1222 +#define wxAcceleratorTable_destruct 1223 +#define wxAcceleratorTable_Ok 1224 +#define wxAcceleratorEntry_new_1_0 1225 +#define wxAcceleratorEntry_new_1_1 1226 +#define wxAcceleratorEntry_GetCommand 1227 +#define wxAcceleratorEntry_GetFlags 1228 +#define wxAcceleratorEntry_GetKeyCode 1229 +#define wxAcceleratorEntry_Set 1230 +#define wxAcceleratorEntry_destroy 1231 +#define wxCaret_new_3 1236 +#define wxCaret_new_2 1237 +#define wxCaret_destruct 1239 +#define wxCaret_Create_3 1240 +#define wxCaret_Create_2 1241 +#define wxCaret_GetBlinkTime 1242 +#define wxCaret_GetPosition 1244 +#define wxCaret_GetSize 1246 +#define wxCaret_GetWindow 1247 +#define wxCaret_Hide 1248 +#define wxCaret_IsOk 1249 +#define wxCaret_IsVisible 1250 +#define wxCaret_Move_2 1251 +#define wxCaret_Move_1 1252 +#define wxCaret_SetBlinkTime 1253 +#define wxCaret_SetSize_2 1254 +#define wxCaret_SetSize_1 1255 +#define wxCaret_Show 1256 +#define wxSizer_Add_2_1 1257 +#define wxSizer_Add_2_0 1258 +#define wxSizer_Add_3 1259 +#define wxSizer_Add_2_3 1260 +#define wxSizer_Add_2_2 1261 +#define wxSizer_AddSpacer 1262 +#define wxSizer_AddStretchSpacer 1263 +#define wxSizer_CalcMin 1264 +#define wxSizer_Clear 1265 +#define wxSizer_Detach_1_2 1266 +#define wxSizer_Detach_1_1 1267 +#define wxSizer_Detach_1_0 1268 +#define wxSizer_Fit 1269 +#define wxSizer_FitInside 1270 +#define wxSizer_GetChildren 1271 +#define wxSizer_GetItem_2_1 1272 +#define wxSizer_GetItem_2_0 1273 +#define wxSizer_GetItem_1 1274 +#define wxSizer_GetSize 1275 +#define wxSizer_GetPosition 1276 +#define wxSizer_GetMinSize 1277 +#define wxSizer_Hide_2_0 1278 +#define wxSizer_Hide_2_1 1279 +#define wxSizer_Hide_1 1280 +#define wxSizer_Insert_3_1 1281 +#define wxSizer_Insert_3_0 1282 +#define wxSizer_Insert_4 1283 +#define wxSizer_Insert_3_3 1284 +#define wxSizer_Insert_3_2 1285 +#define wxSizer_Insert_2 1286 +#define wxSizer_InsertSpacer 1287 +#define wxSizer_InsertStretchSpacer 1288 +#define wxSizer_IsShown_1_2 1289 +#define wxSizer_IsShown_1_1 1290 +#define wxSizer_IsShown_1_0 1291 +#define wxSizer_Layout 1292 +#define wxSizer_Prepend_2_1 1293 +#define wxSizer_Prepend_2_0 1294 +#define wxSizer_Prepend_3 1295 +#define wxSizer_Prepend_2_3 1296 +#define wxSizer_Prepend_2_2 1297 +#define wxSizer_Prepend_1 1298 +#define wxSizer_PrependSpacer 1299 +#define wxSizer_PrependStretchSpacer 1300 +#define wxSizer_RecalcSizes 1301 +#define wxSizer_Remove_1_1 1302 +#define wxSizer_Remove_1_0 1303 +#define wxSizer_Replace_3_1 1304 +#define wxSizer_Replace_3_0 1305 +#define wxSizer_Replace_2 1306 +#define wxSizer_SetDimension 1307 +#define wxSizer_SetMinSize_2 1308 +#define wxSizer_SetMinSize_1 1309 +#define wxSizer_SetItemMinSize_3_2 1310 +#define wxSizer_SetItemMinSize_2_2 1311 +#define wxSizer_SetItemMinSize_3_1 1312 +#define wxSizer_SetItemMinSize_2_1 1313 +#define wxSizer_SetItemMinSize_3_0 1314 +#define wxSizer_SetItemMinSize_2_0 1315 +#define wxSizer_SetSizeHints 1316 +#define wxSizer_SetVirtualSizeHints 1317 +#define wxSizer_Show_2_2 1318 +#define wxSizer_Show_2_1 1319 +#define wxSizer_Show_2_0 1320 +#define wxSizer_Show_1 1321 +#define wxSizerFlags_new 1322 +#define wxSizerFlags_Align 1323 +#define wxSizerFlags_Border_2 1324 +#define wxSizerFlags_Border_1 1325 +#define wxSizerFlags_Center 1326 +#define wxSizerFlags_Centre 1327 +#define wxSizerFlags_Expand 1328 +#define wxSizerFlags_Left 1329 +#define wxSizerFlags_Proportion 1330 +#define wxSizerFlags_Right 1331 +#define wxSizerFlags_destroy 1332 +#define wxSizerItem_new_5_1 1333 +#define wxSizerItem_new_2_1 1334 +#define wxSizerItem_new_5_0 1335 +#define wxSizerItem_new_2_0 1336 +#define wxSizerItem_new_6 1337 +#define wxSizerItem_new_3 1338 +#define wxSizerItem_new_0 1339 +#define wxSizerItem_destruct 1340 +#define wxSizerItem_CalcMin 1341 +#define wxSizerItem_DeleteWindows 1342 +#define wxSizerItem_DetachSizer 1343 +#define wxSizerItem_GetBorder 1344 +#define wxSizerItem_GetFlag 1345 +#define wxSizerItem_GetMinSize 1346 +#define wxSizerItem_GetPosition 1347 +#define wxSizerItem_GetProportion 1348 +#define wxSizerItem_GetRatio 1349 +#define wxSizerItem_GetRect 1350 +#define wxSizerItem_GetSize 1351 +#define wxSizerItem_GetSizer 1352 +#define wxSizerItem_GetSpacer 1353 +#define wxSizerItem_GetUserData 1354 +#define wxSizerItem_GetWindow 1355 +#define wxSizerItem_IsSizer 1356 +#define wxSizerItem_IsShown 1357 +#define wxSizerItem_IsSpacer 1358 +#define wxSizerItem_IsWindow 1359 +#define wxSizerItem_SetBorder 1360 +#define wxSizerItem_SetDimension 1361 +#define wxSizerItem_SetFlag 1362 +#define wxSizerItem_SetInitSize 1363 +#define wxSizerItem_SetMinSize_1 1364 +#define wxSizerItem_SetMinSize_2 1365 +#define wxSizerItem_SetProportion 1366 +#define wxSizerItem_SetRatio_2 1367 +#define wxSizerItem_SetRatio_1_1 1368 +#define wxSizerItem_SetRatio_1_0 1369 +#define wxSizerItem_SetSizer 1370 +#define wxSizerItem_SetSpacer_1 1371 +#define wxSizerItem_SetSpacer_2 1372 +#define wxSizerItem_SetWindow 1373 +#define wxSizerItem_Show 1374 +#define wxBoxSizer_new 1375 +#define wxBoxSizer_GetOrientation 1376 +#define wxBoxSizer_destroy 1377 +#define wxStaticBoxSizer_new_2 1378 +#define wxStaticBoxSizer_new_3 1379 +#define wxStaticBoxSizer_GetStaticBox 1380 +#define wxStaticBoxSizer_destroy 1381 +#define wxGridSizer_new_4 1382 +#define wxGridSizer_new_2 1383 +#define wxGridSizer_GetCols 1384 +#define wxGridSizer_GetHGap 1385 +#define wxGridSizer_GetRows 1386 +#define wxGridSizer_GetVGap 1387 +#define wxGridSizer_SetCols 1388 +#define wxGridSizer_SetHGap 1389 +#define wxGridSizer_SetRows 1390 +#define wxGridSizer_SetVGap 1391 +#define wxGridSizer_destroy 1392 +#define wxFlexGridSizer_new_4 1393 +#define wxFlexGridSizer_new_2 1394 +#define wxFlexGridSizer_AddGrowableCol 1395 +#define wxFlexGridSizer_AddGrowableRow 1396 +#define wxFlexGridSizer_GetFlexibleDirection 1397 +#define wxFlexGridSizer_GetNonFlexibleGrowMode 1398 +#define wxFlexGridSizer_RemoveGrowableCol 1399 +#define wxFlexGridSizer_RemoveGrowableRow 1400 +#define wxFlexGridSizer_SetFlexibleDirection 1401 +#define wxFlexGridSizer_SetNonFlexibleGrowMode 1402 +#define wxFlexGridSizer_destroy 1403 +#define wxGridBagSizer_new 1404 +#define wxGridBagSizer_Add_3_2 1405 +#define wxGridBagSizer_Add_3_1 1406 +#define wxGridBagSizer_Add_4 1407 +#define wxGridBagSizer_Add_1_0 1408 +#define wxGridBagSizer_Add_2_1 1409 +#define wxGridBagSizer_Add_2_0 1410 +#define wxGridBagSizer_Add_3_0 1411 +#define wxGridBagSizer_Add_1_1 1412 +#define wxGridBagSizer_CalcMin 1413 +#define wxGridBagSizer_CheckForIntersection_2 1414 +#define wxGridBagSizer_CheckForIntersection_3 1415 +#define wxGridBagSizer_FindItem_1_1 1416 +#define wxGridBagSizer_FindItem_1_0 1417 +#define wxGridBagSizer_FindItemAtPoint 1418 +#define wxGridBagSizer_FindItemAtPosition 1419 +#define wxGridBagSizer_FindItemWithData 1420 +#define wxGridBagSizer_GetCellSize 1421 +#define wxGridBagSizer_GetEmptyCellSize 1422 +#define wxGridBagSizer_GetItemPosition_1_2 1423 +#define wxGridBagSizer_GetItemPosition_1_1 1424 +#define wxGridBagSizer_GetItemPosition_1_0 1425 +#define wxGridBagSizer_GetItemSpan_1_2 1426 +#define wxGridBagSizer_GetItemSpan_1_1 1427 +#define wxGridBagSizer_GetItemSpan_1_0 1428 +#define wxGridBagSizer_SetEmptyCellSize 1429 +#define wxGridBagSizer_SetItemPosition_2_2 1430 +#define wxGridBagSizer_SetItemPosition_2_1 1431 +#define wxGridBagSizer_SetItemPosition_2_0 1432 +#define wxGridBagSizer_SetItemSpan_2_2 1433 +#define wxGridBagSizer_SetItemSpan_2_1 1434 +#define wxGridBagSizer_SetItemSpan_2_0 1435 +#define wxGridBagSizer_destroy 1436 +#define wxStdDialogButtonSizer_new 1437 +#define wxStdDialogButtonSizer_AddButton 1438 +#define wxStdDialogButtonSizer_Realize 1439 +#define wxStdDialogButtonSizer_SetAffirmativeButton 1440 +#define wxStdDialogButtonSizer_SetCancelButton 1441 +#define wxStdDialogButtonSizer_SetNegativeButton 1442 +#define wxStdDialogButtonSizer_destroy 1443 +#define wxFont_new_0 1444 +#define wxFont_new_1 1445 +#define wxFont_new_5 1446 +#define wxFont_destruct 1448 +#define wxFont_IsFixedWidth 1449 +#define wxFont_GetDefaultEncoding 1450 +#define wxFont_GetFaceName 1451 +#define wxFont_GetFamily 1452 +#define wxFont_GetNativeFontInfoDesc 1453 +#define wxFont_GetNativeFontInfoUserDesc 1454 +#define wxFont_GetPointSize 1455 +#define wxFont_GetStyle 1456 +#define wxFont_GetUnderlined 1457 +#define wxFont_GetWeight 1458 +#define wxFont_Ok 1459 +#define wxFont_SetDefaultEncoding 1460 +#define wxFont_SetFaceName 1461 +#define wxFont_SetFamily 1462 +#define wxFont_SetPointSize 1463 +#define wxFont_SetStyle 1464 +#define wxFont_SetUnderlined 1465 +#define wxFont_SetWeight 1466 +#define wxToolTip_Enable 1467 +#define wxToolTip_SetDelay 1468 +#define wxToolTip_new 1469 +#define wxToolTip_SetTip 1470 +#define wxToolTip_GetTip 1471 +#define wxToolTip_GetWindow 1472 +#define wxToolTip_destroy 1473 +#define wxButton_new_3 1475 +#define wxButton_new_0 1476 +#define wxButton_destruct 1477 +#define wxButton_Create 1478 +#define wxButton_GetDefaultSize 1479 +#define wxButton_SetDefault 1480 +#define wxButton_SetLabel 1481 +#define wxBitmapButton_new_4 1483 +#define wxBitmapButton_new_0 1484 +#define wxBitmapButton_Create 1485 +#define wxBitmapButton_GetBitmapDisabled 1486 +#define wxBitmapButton_GetBitmapFocus 1488 +#define wxBitmapButton_GetBitmapLabel 1490 +#define wxBitmapButton_GetBitmapSelected 1492 +#define wxBitmapButton_SetBitmapDisabled 1494 +#define wxBitmapButton_SetBitmapFocus 1495 +#define wxBitmapButton_SetBitmapLabel 1496 +#define wxBitmapButton_SetBitmapSelected 1497 +#define wxBitmapButton_destroy 1498 +#define wxToggleButton_new_0 1499 +#define wxToggleButton_new_4 1500 +#define wxToggleButton_Create 1501 +#define wxToggleButton_GetValue 1502 +#define wxToggleButton_SetValue 1503 +#define wxToggleButton_destroy 1504 +#define wxCalendarCtrl_new_0 1505 +#define wxCalendarCtrl_new_3 1506 +#define wxCalendarCtrl_Create 1507 +#define wxCalendarCtrl_destruct 1508 +#define wxCalendarCtrl_SetDate 1509 +#define wxCalendarCtrl_GetDate 1510 +#define wxCalendarCtrl_EnableYearChange 1511 +#define wxCalendarCtrl_EnableMonthChange 1512 +#define wxCalendarCtrl_EnableHolidayDisplay 1513 +#define wxCalendarCtrl_SetHeaderColours 1514 +#define wxCalendarCtrl_GetHeaderColourFg 1515 +#define wxCalendarCtrl_GetHeaderColourBg 1516 +#define wxCalendarCtrl_SetHighlightColours 1517 +#define wxCalendarCtrl_GetHighlightColourFg 1518 +#define wxCalendarCtrl_GetHighlightColourBg 1519 +#define wxCalendarCtrl_SetHolidayColours 1520 +#define wxCalendarCtrl_GetHolidayColourFg 1521 +#define wxCalendarCtrl_GetHolidayColourBg 1522 +#define wxCalendarCtrl_GetAttr 1523 +#define wxCalendarCtrl_SetAttr 1524 +#define wxCalendarCtrl_SetHoliday 1525 +#define wxCalendarCtrl_ResetAttr 1526 +#define wxCalendarCtrl_HitTest 1527 +#define wxCalendarDateAttr_new_0 1528 +#define wxCalendarDateAttr_new_2_1 1529 +#define wxCalendarDateAttr_new_2_0 1530 +#define wxCalendarDateAttr_SetTextColour 1531 +#define wxCalendarDateAttr_SetBackgroundColour 1532 +#define wxCalendarDateAttr_SetBorderColour 1533 +#define wxCalendarDateAttr_SetFont 1534 +#define wxCalendarDateAttr_SetBorder 1535 +#define wxCalendarDateAttr_SetHoliday 1536 +#define wxCalendarDateAttr_HasTextColour 1537 +#define wxCalendarDateAttr_HasBackgroundColour 1538 +#define wxCalendarDateAttr_HasBorderColour 1539 +#define wxCalendarDateAttr_HasFont 1540 +#define wxCalendarDateAttr_HasBorder 1541 +#define wxCalendarDateAttr_IsHoliday 1542 +#define wxCalendarDateAttr_GetTextColour 1543 +#define wxCalendarDateAttr_GetBackgroundColour 1544 +#define wxCalendarDateAttr_GetBorderColour 1545 +#define wxCalendarDateAttr_GetFont 1546 +#define wxCalendarDateAttr_GetBorder 1547 +#define wxCalendarDateAttr_destroy 1548 +#define wxCheckBox_new_4 1550 +#define wxCheckBox_new_0 1551 +#define wxCheckBox_Create 1552 +#define wxCheckBox_GetValue 1553 +#define wxCheckBox_Get3StateValue 1554 +#define wxCheckBox_Is3rdStateAllowedForUser 1555 +#define wxCheckBox_Is3State 1556 +#define wxCheckBox_IsChecked 1557 +#define wxCheckBox_SetValue 1558 +#define wxCheckBox_Set3StateValue 1559 +#define wxCheckBox_destroy 1560 +#define wxCheckListBox_new_0 1561 +#define wxCheckListBox_new_3 1563 +#define wxCheckListBox_Check 1564 +#define wxCheckListBox_IsChecked 1565 +#define wxCheckListBox_destroy 1566 +#define wxChoice_new_3 1569 +#define wxChoice_new_0 1570 +#define wxChoice_destruct 1572 +#define wxChoice_Create 1574 +#define wxChoice_Delete 1575 +#define wxChoice_GetColumns 1576 +#define wxChoice_SetColumns 1577 +#define wxComboBox_new_0 1578 +#define wxComboBox_new_3 1580 +#define wxComboBox_destruct 1581 +#define wxComboBox_Create 1583 +#define wxComboBox_CanCopy 1584 +#define wxComboBox_CanCut 1585 +#define wxComboBox_CanPaste 1586 +#define wxComboBox_CanRedo 1587 +#define wxComboBox_CanUndo 1588 +#define wxComboBox_Copy 1589 +#define wxComboBox_Cut 1590 +#define wxComboBox_GetInsertionPoint 1591 +#define wxComboBox_GetLastPosition 1592 +#define wxComboBox_GetValue 1593 +#define wxComboBox_Paste 1594 +#define wxComboBox_Redo 1595 +#define wxComboBox_Replace 1596 +#define wxComboBox_Remove 1597 +#define wxComboBox_SetInsertionPoint 1598 +#define wxComboBox_SetInsertionPointEnd 1599 +#define wxComboBox_SetSelection_1 1600 +#define wxComboBox_SetSelection_2 1601 +#define wxComboBox_SetValue 1602 +#define wxComboBox_Undo 1603 +#define wxGauge_new_0 1604 +#define wxGauge_new_4 1605 +#define wxGauge_Create 1606 +#define wxGauge_GetRange 1607 +#define wxGauge_GetValue 1608 +#define wxGauge_IsVertical 1609 +#define wxGauge_SetRange 1610 +#define wxGauge_SetValue 1611 +#define wxGauge_Pulse 1612 +#define wxGauge_destroy 1613 +#define wxGenericDirCtrl_new_0 1614 +#define wxGenericDirCtrl_new_2 1615 +#define wxGenericDirCtrl_destruct 1616 +#define wxGenericDirCtrl_Create 1617 +#define wxGenericDirCtrl_Init 1618 +#define wxGenericDirCtrl_CollapseTree 1619 +#define wxGenericDirCtrl_ExpandPath 1620 +#define wxGenericDirCtrl_GetDefaultPath 1621 +#define wxGenericDirCtrl_GetPath 1622 +#define wxGenericDirCtrl_GetFilePath 1623 +#define wxGenericDirCtrl_GetFilter 1624 +#define wxGenericDirCtrl_GetFilterIndex 1625 +#define wxGenericDirCtrl_GetRootId 1626 +#define wxGenericDirCtrl_GetTreeCtrl 1627 +#define wxGenericDirCtrl_ReCreateTree 1628 +#define wxGenericDirCtrl_SetDefaultPath 1629 +#define wxGenericDirCtrl_SetFilter 1630 +#define wxGenericDirCtrl_SetFilterIndex 1631 +#define wxGenericDirCtrl_SetPath 1632 +#define wxStaticBox_new_4 1634 +#define wxStaticBox_new_0 1635 +#define wxStaticBox_Create 1636 +#define wxStaticBox_destroy 1637 +#define wxStaticLine_new_2 1639 +#define wxStaticLine_new_0 1640 +#define wxStaticLine_Create 1641 +#define wxStaticLine_IsVertical 1642 +#define wxStaticLine_GetDefaultSize 1643 +#define wxStaticLine_destroy 1644 +#define wxListBox_new_3 1647 +#define wxListBox_new_0 1648 +#define wxListBox_destruct 1650 +#define wxListBox_Create 1652 +#define wxListBox_Deselect 1653 +#define wxListBox_GetSelections 1654 +#define wxListBox_InsertItems 1655 +#define wxListBox_IsSelected 1656 +#define wxListBox_Set 1657 +#define wxListBox_HitTest 1658 +#define wxListBox_SetFirstItem_1_0 1659 +#define wxListBox_SetFirstItem_1_1 1660 +#define wxListCtrl_new_0 1661 +#define wxListCtrl_new_2 1662 +#define wxListCtrl_Arrange 1663 +#define wxListCtrl_AssignImageList 1664 +#define wxListCtrl_ClearAll 1665 +#define wxListCtrl_Create 1666 +#define wxListCtrl_DeleteAllItems 1667 +#define wxListCtrl_DeleteColumn 1668 +#define wxListCtrl_DeleteItem 1669 +#define wxListCtrl_EditLabel 1670 +#define wxListCtrl_EnsureVisible 1671 +#define wxListCtrl_FindItem_3_0 1672 +#define wxListCtrl_FindItem_3_1 1673 +#define wxListCtrl_GetColumn 1674 +#define wxListCtrl_GetColumnCount 1675 +#define wxListCtrl_GetColumnWidth 1676 +#define wxListCtrl_GetCountPerPage 1677 +#define wxListCtrl_GetEditControl 1678 +#define wxListCtrl_GetImageList 1679 +#define wxListCtrl_GetItem 1680 +#define wxListCtrl_GetItemBackgroundColour 1681 +#define wxListCtrl_GetItemCount 1682 +#define wxListCtrl_GetItemData 1683 +#define wxListCtrl_GetItemFont 1684 +#define wxListCtrl_GetItemPosition 1685 +#define wxListCtrl_GetItemRect 1686 +#define wxListCtrl_GetItemSpacing 1687 +#define wxListCtrl_GetItemState 1688 +#define wxListCtrl_GetItemText 1689 +#define wxListCtrl_GetItemTextColour 1690 +#define wxListCtrl_GetNextItem 1691 +#define wxListCtrl_GetSelectedItemCount 1692 +#define wxListCtrl_GetTextColour 1693 +#define wxListCtrl_GetTopItem 1694 +#define wxListCtrl_GetViewRect 1695 +#define wxListCtrl_HitTest 1696 +#define wxListCtrl_InsertColumn_2 1697 +#define wxListCtrl_InsertColumn_3 1698 +#define wxListCtrl_InsertItem_1 1699 +#define wxListCtrl_InsertItem_2_1 1700 +#define wxListCtrl_InsertItem_2_0 1701 +#define wxListCtrl_InsertItem_3 1702 +#define wxListCtrl_RefreshItem 1703 +#define wxListCtrl_RefreshItems 1704 +#define wxListCtrl_ScrollList 1705 +#define wxListCtrl_SetBackgroundColour 1706 +#define wxListCtrl_SetColumn 1707 +#define wxListCtrl_SetColumnWidth 1708 +#define wxListCtrl_SetImageList 1709 +#define wxListCtrl_SetItem_1 1710 +#define wxListCtrl_SetItem_4 1711 +#define wxListCtrl_SetItemBackgroundColour 1712 +#define wxListCtrl_SetItemCount 1713 +#define wxListCtrl_SetItemData 1714 +#define wxListCtrl_SetItemFont 1715 +#define wxListCtrl_SetItemImage 1716 +#define wxListCtrl_SetItemColumnImage 1717 +#define wxListCtrl_SetItemPosition 1718 +#define wxListCtrl_SetItemState 1719 +#define wxListCtrl_SetItemText 1720 +#define wxListCtrl_SetItemTextColour 1721 +#define wxListCtrl_SetSingleStyle 1722 +#define wxListCtrl_SetTextColour 1723 +#define wxListCtrl_SetWindowStyleFlag 1724 +#define wxListCtrl_SortItems 1725 +#define wxListCtrl_destroy 1726 +#define wxListView_ClearColumnImage 1727 +#define wxListView_Focus 1728 +#define wxListView_GetFirstSelected 1729 +#define wxListView_GetFocusedItem 1730 +#define wxListView_GetNextSelected 1731 +#define wxListView_IsSelected 1732 +#define wxListView_Select 1733 +#define wxListView_SetColumnImage 1734 +#define wxListItem_new_0 1735 +#define wxListItem_new_1 1736 +#define wxListItem_destruct 1737 +#define wxListItem_Clear 1738 +#define wxListItem_GetAlign 1739 +#define wxListItem_GetBackgroundColour 1740 +#define wxListItem_GetColumn 1741 +#define wxListItem_GetFont 1742 +#define wxListItem_GetId 1743 +#define wxListItem_GetImage 1744 +#define wxListItem_GetMask 1745 +#define wxListItem_GetState 1746 +#define wxListItem_GetText 1747 +#define wxListItem_GetTextColour 1748 +#define wxListItem_GetWidth 1749 +#define wxListItem_SetAlign 1750 +#define wxListItem_SetBackgroundColour 1751 +#define wxListItem_SetColumn 1752 +#define wxListItem_SetFont 1753 +#define wxListItem_SetId 1754 +#define wxListItem_SetImage 1755 +#define wxListItem_SetMask 1756 +#define wxListItem_SetState 1757 +#define wxListItem_SetStateMask 1758 +#define wxListItem_SetText 1759 +#define wxListItem_SetTextColour 1760 +#define wxListItem_SetWidth 1761 +#define wxListItemAttr_new_0 1762 +#define wxListItemAttr_new_3 1763 +#define wxListItemAttr_GetBackgroundColour 1764 +#define wxListItemAttr_GetFont 1765 +#define wxListItemAttr_GetTextColour 1766 +#define wxListItemAttr_HasBackgroundColour 1767 +#define wxListItemAttr_HasFont 1768 +#define wxListItemAttr_HasTextColour 1769 +#define wxListItemAttr_SetBackgroundColour 1770 +#define wxListItemAttr_SetFont 1771 +#define wxListItemAttr_SetTextColour 1772 +#define wxListItemAttr_destroy 1773 +#define wxImageList_new_0 1774 +#define wxImageList_new_3 1775 +#define wxImageList_Add_1 1776 +#define wxImageList_Add_2_0 1777 +#define wxImageList_Add_2_1 1778 +#define wxImageList_Create 1779 +#define wxImageList_Draw 1781 +#define wxImageList_GetBitmap 1782 +#define wxImageList_GetIcon 1783 +#define wxImageList_GetImageCount 1784 +#define wxImageList_GetSize 1785 +#define wxImageList_Remove 1786 +#define wxImageList_RemoveAll 1787 +#define wxImageList_Replace_2 1788 +#define wxImageList_Replace_3 1789 +#define wxImageList_destroy 1790 +#define wxTextAttr_new_0 1791 +#define wxTextAttr_new_2 1792 +#define wxTextAttr_GetAlignment 1793 +#define wxTextAttr_GetBackgroundColour 1794 +#define wxTextAttr_GetFont 1795 +#define wxTextAttr_GetLeftIndent 1796 +#define wxTextAttr_GetLeftSubIndent 1797 +#define wxTextAttr_GetRightIndent 1798 +#define wxTextAttr_GetTabs 1799 +#define wxTextAttr_GetTextColour 1800 +#define wxTextAttr_HasBackgroundColour 1801 +#define wxTextAttr_HasFont 1802 +#define wxTextAttr_HasTextColour 1803 +#define wxTextAttr_GetFlags 1804 +#define wxTextAttr_IsDefault 1805 +#define wxTextAttr_SetAlignment 1806 +#define wxTextAttr_SetBackgroundColour 1807 +#define wxTextAttr_SetFlags 1808 +#define wxTextAttr_SetFont 1809 +#define wxTextAttr_SetLeftIndent 1810 +#define wxTextAttr_SetRightIndent 1811 +#define wxTextAttr_SetTabs 1812 +#define wxTextAttr_SetTextColour 1813 +#define wxTextAttr_destroy 1814 +#define wxTextCtrl_new_3 1816 +#define wxTextCtrl_new_0 1817 +#define wxTextCtrl_destruct 1819 +#define wxTextCtrl_AppendText 1820 +#define wxTextCtrl_CanCopy 1821 +#define wxTextCtrl_CanCut 1822 +#define wxTextCtrl_CanPaste 1823 +#define wxTextCtrl_CanRedo 1824 +#define wxTextCtrl_CanUndo 1825 +#define wxTextCtrl_Clear 1826 +#define wxTextCtrl_Copy 1827 +#define wxTextCtrl_Create 1828 +#define wxTextCtrl_Cut 1829 +#define wxTextCtrl_DiscardEdits 1830 +#define wxTextCtrl_ChangeValue 1831 +#define wxTextCtrl_EmulateKeyPress 1832 +#define wxTextCtrl_GetDefaultStyle 1833 +#define wxTextCtrl_GetInsertionPoint 1834 +#define wxTextCtrl_GetLastPosition 1835 +#define wxTextCtrl_GetLineLength 1836 +#define wxTextCtrl_GetLineText 1837 +#define wxTextCtrl_GetNumberOfLines 1838 +#define wxTextCtrl_GetRange 1839 +#define wxTextCtrl_GetSelection 1840 +#define wxTextCtrl_GetStringSelection 1841 +#define wxTextCtrl_GetStyle 1842 +#define wxTextCtrl_GetValue 1843 +#define wxTextCtrl_IsEditable 1844 +#define wxTextCtrl_IsModified 1845 +#define wxTextCtrl_IsMultiLine 1846 +#define wxTextCtrl_IsSingleLine 1847 +#define wxTextCtrl_LoadFile 1848 +#define wxTextCtrl_MarkDirty 1849 +#define wxTextCtrl_Paste 1850 +#define wxTextCtrl_PositionToXY 1851 +#define wxTextCtrl_Redo 1852 +#define wxTextCtrl_Remove 1853 +#define wxTextCtrl_Replace 1854 +#define wxTextCtrl_SaveFile 1855 +#define wxTextCtrl_SetDefaultStyle 1856 +#define wxTextCtrl_SetEditable 1857 +#define wxTextCtrl_SetInsertionPoint 1858 +#define wxTextCtrl_SetInsertionPointEnd 1859 +#define wxTextCtrl_SetMaxLength 1861 +#define wxTextCtrl_SetSelection 1862 +#define wxTextCtrl_SetStyle 1863 +#define wxTextCtrl_SetValue 1864 +#define wxTextCtrl_ShowPosition 1865 +#define wxTextCtrl_Undo 1866 +#define wxTextCtrl_WriteText 1867 +#define wxTextCtrl_XYToPosition 1868 +#define wxNotebook_new_0 1871 +#define wxNotebook_new_3 1872 +#define wxNotebook_destruct 1873 +#define wxNotebook_AddPage 1874 +#define wxNotebook_AdvanceSelection 1875 +#define wxNotebook_AssignImageList 1876 +#define wxNotebook_Create 1877 +#define wxNotebook_DeleteAllPages 1878 +#define wxNotebook_DeletePage 1879 +#define wxNotebook_RemovePage 1880 +#define wxNotebook_GetCurrentPage 1881 +#define wxNotebook_GetImageList 1882 +#define wxNotebook_GetPage 1884 +#define wxNotebook_GetPageCount 1885 +#define wxNotebook_GetPageImage 1886 +#define wxNotebook_GetPageText 1887 +#define wxNotebook_GetRowCount 1888 +#define wxNotebook_GetSelection 1889 +#define wxNotebook_GetThemeBackgroundColour 1890 +#define wxNotebook_HitTest 1892 +#define wxNotebook_InsertPage 1894 +#define wxNotebook_SetImageList 1895 +#define wxNotebook_SetPadding 1896 +#define wxNotebook_SetPageSize 1897 +#define wxNotebook_SetPageImage 1898 +#define wxNotebook_SetPageText 1899 +#define wxNotebook_SetSelection 1900 +#define wxNotebook_ChangeSelection 1901 +#define wxChoicebook_new_0 1902 +#define wxChoicebook_new_3 1903 +#define wxChoicebook_AddPage 1904 +#define wxChoicebook_AdvanceSelection 1905 +#define wxChoicebook_AssignImageList 1906 +#define wxChoicebook_Create 1907 +#define wxChoicebook_DeleteAllPages 1908 +#define wxChoicebook_DeletePage 1909 +#define wxChoicebook_RemovePage 1910 +#define wxChoicebook_GetCurrentPage 1911 +#define wxChoicebook_GetImageList 1912 +#define wxChoicebook_GetPage 1914 +#define wxChoicebook_GetPageCount 1915 +#define wxChoicebook_GetPageImage 1916 +#define wxChoicebook_GetPageText 1917 +#define wxChoicebook_GetSelection 1918 +#define wxChoicebook_HitTest 1919 +#define wxChoicebook_InsertPage 1920 +#define wxChoicebook_SetImageList 1921 +#define wxChoicebook_SetPageSize 1922 +#define wxChoicebook_SetPageImage 1923 +#define wxChoicebook_SetPageText 1924 +#define wxChoicebook_SetSelection 1925 +#define wxChoicebook_ChangeSelection 1926 +#define wxChoicebook_destroy 1927 +#define wxToolbook_new_0 1928 +#define wxToolbook_new_3 1929 +#define wxToolbook_AddPage 1930 +#define wxToolbook_AdvanceSelection 1931 +#define wxToolbook_AssignImageList 1932 +#define wxToolbook_Create 1933 +#define wxToolbook_DeleteAllPages 1934 +#define wxToolbook_DeletePage 1935 +#define wxToolbook_RemovePage 1936 +#define wxToolbook_GetCurrentPage 1937 +#define wxToolbook_GetImageList 1938 +#define wxToolbook_GetPage 1940 +#define wxToolbook_GetPageCount 1941 +#define wxToolbook_GetPageImage 1942 +#define wxToolbook_GetPageText 1943 +#define wxToolbook_GetSelection 1944 +#define wxToolbook_HitTest 1946 +#define wxToolbook_InsertPage 1947 +#define wxToolbook_SetImageList 1948 +#define wxToolbook_SetPageSize 1949 +#define wxToolbook_SetPageImage 1950 +#define wxToolbook_SetPageText 1951 +#define wxToolbook_SetSelection 1952 +#define wxToolbook_ChangeSelection 1953 +#define wxToolbook_destroy 1954 +#define wxListbook_new_0 1955 +#define wxListbook_new_3 1956 +#define wxListbook_AddPage 1957 +#define wxListbook_AdvanceSelection 1958 +#define wxListbook_AssignImageList 1959 +#define wxListbook_Create 1960 +#define wxListbook_DeleteAllPages 1961 +#define wxListbook_DeletePage 1962 +#define wxListbook_RemovePage 1963 +#define wxListbook_GetCurrentPage 1964 +#define wxListbook_GetImageList 1965 +#define wxListbook_GetPage 1967 +#define wxListbook_GetPageCount 1968 +#define wxListbook_GetPageImage 1969 +#define wxListbook_GetPageText 1970 +#define wxListbook_GetSelection 1971 +#define wxListbook_HitTest 1973 +#define wxListbook_InsertPage 1974 +#define wxListbook_SetImageList 1975 +#define wxListbook_SetPageSize 1976 +#define wxListbook_SetPageImage 1977 +#define wxListbook_SetPageText 1978 +#define wxListbook_SetSelection 1979 +#define wxListbook_ChangeSelection 1980 +#define wxListbook_destroy 1981 +#define wxTreebook_new_0 1982 +#define wxTreebook_new_3 1983 +#define wxTreebook_AddPage 1984 +#define wxTreebook_AdvanceSelection 1985 +#define wxTreebook_AssignImageList 1986 +#define wxTreebook_Create 1987 +#define wxTreebook_DeleteAllPages 1988 +#define wxTreebook_DeletePage 1989 +#define wxTreebook_RemovePage 1990 +#define wxTreebook_GetCurrentPage 1991 +#define wxTreebook_GetImageList 1992 +#define wxTreebook_GetPage 1994 +#define wxTreebook_GetPageCount 1995 +#define wxTreebook_GetPageImage 1996 +#define wxTreebook_GetPageText 1997 +#define wxTreebook_GetSelection 1998 +#define wxTreebook_ExpandNode 1999 +#define wxTreebook_IsNodeExpanded 2000 +#define wxTreebook_HitTest 2002 +#define wxTreebook_InsertPage 2003 +#define wxTreebook_InsertSubPage 2004 +#define wxTreebook_SetImageList 2005 +#define wxTreebook_SetPageSize 2006 +#define wxTreebook_SetPageImage 2007 +#define wxTreebook_SetPageText 2008 +#define wxTreebook_SetSelection 2009 +#define wxTreebook_ChangeSelection 2010 +#define wxTreebook_destroy 2011 +#define wxTreeCtrl_new_2 2014 +#define wxTreeCtrl_new_0 2015 +#define wxTreeCtrl_destruct 2017 +#define wxTreeCtrl_AddRoot 2018 +#define wxTreeCtrl_AppendItem 2019 +#define wxTreeCtrl_AssignImageList 2020 +#define wxTreeCtrl_AssignStateImageList 2021 +#define wxTreeCtrl_Collapse 2022 +#define wxTreeCtrl_CollapseAndReset 2023 +#define wxTreeCtrl_Create 2024 +#define wxTreeCtrl_Delete 2025 +#define wxTreeCtrl_DeleteAllItems 2026 +#define wxTreeCtrl_DeleteChildren 2027 +#define wxTreeCtrl_EditLabel 2028 +#define wxTreeCtrl_EnsureVisible 2029 +#define wxTreeCtrl_Expand 2030 +#define wxTreeCtrl_GetBoundingRect 2031 +#define wxTreeCtrl_GetChildrenCount 2033 +#define wxTreeCtrl_GetCount 2034 +#define wxTreeCtrl_GetEditControl 2035 +#define wxTreeCtrl_GetFirstChild 2036 +#define wxTreeCtrl_GetNextChild 2037 +#define wxTreeCtrl_GetFirstVisibleItem 2038 +#define wxTreeCtrl_GetImageList 2039 +#define wxTreeCtrl_GetIndent 2040 +#define wxTreeCtrl_GetItemBackgroundColour 2041 +#define wxTreeCtrl_GetItemData 2042 +#define wxTreeCtrl_GetItemFont 2043 +#define wxTreeCtrl_GetItemImage_1 2044 +#define wxTreeCtrl_GetItemImage_2 2045 +#define wxTreeCtrl_GetItemText 2046 +#define wxTreeCtrl_GetItemTextColour 2047 +#define wxTreeCtrl_GetLastChild 2048 +#define wxTreeCtrl_GetNextSibling 2049 +#define wxTreeCtrl_GetNextVisible 2050 +#define wxTreeCtrl_GetItemParent 2051 +#define wxTreeCtrl_GetPrevSibling 2052 +#define wxTreeCtrl_GetPrevVisible 2053 +#define wxTreeCtrl_GetRootItem 2054 +#define wxTreeCtrl_GetSelection 2055 +#define wxTreeCtrl_GetSelections 2056 +#define wxTreeCtrl_GetStateImageList 2057 +#define wxTreeCtrl_HitTest 2058 +#define wxTreeCtrl_InsertItem 2060 +#define wxTreeCtrl_IsBold 2061 +#define wxTreeCtrl_IsExpanded 2062 +#define wxTreeCtrl_IsSelected 2063 +#define wxTreeCtrl_IsVisible 2064 +#define wxTreeCtrl_ItemHasChildren 2065 +#define wxTreeCtrl_IsTreeItemIdOk 2066 +#define wxTreeCtrl_PrependItem 2067 +#define wxTreeCtrl_ScrollTo 2068 +#define wxTreeCtrl_SelectItem_1 2069 +#define wxTreeCtrl_SelectItem_2 2070 +#define wxTreeCtrl_SetIndent 2071 +#define wxTreeCtrl_SetImageList 2072 +#define wxTreeCtrl_SetItemBackgroundColour 2073 +#define wxTreeCtrl_SetItemBold 2074 +#define wxTreeCtrl_SetItemData 2075 +#define wxTreeCtrl_SetItemDropHighlight 2076 +#define wxTreeCtrl_SetItemFont 2077 +#define wxTreeCtrl_SetItemHasChildren 2078 +#define wxTreeCtrl_SetItemImage_2 2079 +#define wxTreeCtrl_SetItemImage_3 2080 +#define wxTreeCtrl_SetItemText 2081 +#define wxTreeCtrl_SetItemTextColour 2082 +#define wxTreeCtrl_SetStateImageList 2083 +#define wxTreeCtrl_SetWindowStyle 2084 +#define wxTreeCtrl_SortChildren 2085 +#define wxTreeCtrl_Toggle 2086 +#define wxTreeCtrl_ToggleItemSelection 2087 +#define wxTreeCtrl_Unselect 2088 +#define wxTreeCtrl_UnselectAll 2089 +#define wxTreeCtrl_UnselectItem 2090 +#define wxScrollBar_new_0 2091 +#define wxScrollBar_new_3 2092 +#define wxScrollBar_destruct 2093 +#define wxScrollBar_Create 2094 +#define wxScrollBar_GetRange 2095 +#define wxScrollBar_GetPageSize 2096 +#define wxScrollBar_GetThumbPosition 2097 +#define wxScrollBar_GetThumbSize 2098 +#define wxScrollBar_SetThumbPosition 2099 +#define wxScrollBar_SetScrollbar 2100 +#define wxSpinButton_new_2 2102 +#define wxSpinButton_new_0 2103 +#define wxSpinButton_Create 2104 +#define wxSpinButton_GetMax 2105 +#define wxSpinButton_GetMin 2106 +#define wxSpinButton_GetValue 2107 +#define wxSpinButton_SetRange 2108 +#define wxSpinButton_SetValue 2109 +#define wxSpinButton_destroy 2110 +#define wxSpinCtrl_new_0 2111 +#define wxSpinCtrl_new_2 2112 +#define wxSpinCtrl_Create 2114 +#define wxSpinCtrl_SetValue_1_1 2117 +#define wxSpinCtrl_SetValue_1_0 2118 +#define wxSpinCtrl_GetValue 2120 +#define wxSpinCtrl_SetRange 2122 +#define wxSpinCtrl_SetSelection 2123 +#define wxSpinCtrl_GetMin 2125 +#define wxSpinCtrl_GetMax 2127 +#define wxSpinCtrl_destroy 2128 +#define wxStaticText_new_0 2129 +#define wxStaticText_new_4 2130 +#define wxStaticText_Create 2131 +#define wxStaticText_GetLabel 2132 +#define wxStaticText_SetLabel 2133 +#define wxStaticText_Wrap 2134 +#define wxStaticText_destroy 2135 +#define wxStaticBitmap_new_0 2136 +#define wxStaticBitmap_new_4 2137 +#define wxStaticBitmap_Create 2138 +#define wxStaticBitmap_GetBitmap 2139 +#define wxStaticBitmap_SetBitmap 2140 +#define wxStaticBitmap_destroy 2141 +#define wxRadioBox_new 2142 +#define wxRadioBox_destruct 2144 +#define wxRadioBox_Create 2145 +#define wxRadioBox_Enable_2 2146 +#define wxRadioBox_Enable_1 2147 +#define wxRadioBox_GetSelection 2148 +#define wxRadioBox_GetString 2149 +#define wxRadioBox_SetSelection 2150 +#define wxRadioBox_Show_2 2151 +#define wxRadioBox_Show_1 2152 +#define wxRadioBox_GetColumnCount 2153 +#define wxRadioBox_GetItemHelpText 2154 +#define wxRadioBox_GetItemToolTip 2155 +#define wxRadioBox_GetItemFromPoint 2157 +#define wxRadioBox_GetRowCount 2158 +#define wxRadioBox_IsItemEnabled 2159 +#define wxRadioBox_IsItemShown 2160 +#define wxRadioBox_SetItemHelpText 2161 +#define wxRadioBox_SetItemToolTip 2162 +#define wxRadioButton_new_0 2163 +#define wxRadioButton_new_4 2164 +#define wxRadioButton_Create 2165 +#define wxRadioButton_GetValue 2166 +#define wxRadioButton_SetValue 2167 +#define wxRadioButton_destroy 2168 +#define wxSlider_new_6 2170 +#define wxSlider_new_0 2171 +#define wxSlider_Create 2172 +#define wxSlider_GetLineSize 2173 +#define wxSlider_GetMax 2174 +#define wxSlider_GetMin 2175 +#define wxSlider_GetPageSize 2176 +#define wxSlider_GetThumbLength 2177 +#define wxSlider_GetValue 2178 +#define wxSlider_SetLineSize 2179 +#define wxSlider_SetPageSize 2180 +#define wxSlider_SetRange 2181 +#define wxSlider_SetThumbLength 2182 +#define wxSlider_SetValue 2183 +#define wxSlider_destroy 2184 +#define wxDialog_new_4 2186 +#define wxDialog_new_0 2187 +#define wxDialog_destruct 2189 +#define wxDialog_Create 2190 +#define wxDialog_CreateButtonSizer 2191 +#define wxDialog_CreateStdDialogButtonSizer 2192 +#define wxDialog_EndModal 2193 +#define wxDialog_GetAffirmativeId 2194 +#define wxDialog_GetReturnCode 2195 +#define wxDialog_IsModal 2196 +#define wxDialog_SetAffirmativeId 2197 +#define wxDialog_SetReturnCode 2198 +#define wxDialog_Show 2199 +#define wxDialog_ShowModal 2200 +#define wxColourDialog_new_0 2201 +#define wxColourDialog_new_2 2202 +#define wxColourDialog_destruct 2203 +#define wxColourDialog_Create 2204 +#define wxColourDialog_GetColourData 2205 +#define wxColourData_new_0 2206 +#define wxColourData_new_1 2207 +#define wxColourData_destruct 2208 +#define wxColourData_GetChooseFull 2209 +#define wxColourData_GetColour 2210 +#define wxColourData_GetCustomColour 2212 +#define wxColourData_SetChooseFull 2213 +#define wxColourData_SetColour 2214 +#define wxColourData_SetCustomColour 2215 +#define wxPalette_new_0 2216 +#define wxPalette_new_4 2217 +#define wxPalette_destruct 2219 +#define wxPalette_Create 2220 +#define wxPalette_GetColoursCount 2221 +#define wxPalette_GetPixel 2222 +#define wxPalette_GetRGB 2223 +#define wxPalette_IsOk 2224 +#define wxDirDialog_new 2228 +#define wxDirDialog_destruct 2229 +#define wxDirDialog_GetPath 2230 +#define wxDirDialog_GetMessage 2231 +#define wxDirDialog_SetMessage 2232 +#define wxDirDialog_SetPath 2233 +#define wxFileDialog_new 2237 +#define wxFileDialog_destruct 2238 +#define wxFileDialog_GetDirectory 2239 +#define wxFileDialog_GetFilename 2240 +#define wxFileDialog_GetFilenames 2241 +#define wxFileDialog_GetFilterIndex 2242 +#define wxFileDialog_GetMessage 2243 +#define wxFileDialog_GetPath 2244 +#define wxFileDialog_GetPaths 2245 +#define wxFileDialog_GetWildcard 2246 +#define wxFileDialog_SetDirectory 2247 +#define wxFileDialog_SetFilename 2248 +#define wxFileDialog_SetFilterIndex 2249 +#define wxFileDialog_SetMessage 2250 +#define wxFileDialog_SetPath 2251 +#define wxFileDialog_SetWildcard 2252 +#define wxPickerBase_SetInternalMargin 2253 +#define wxPickerBase_GetInternalMargin 2254 +#define wxPickerBase_SetTextCtrlProportion 2255 +#define wxPickerBase_SetPickerCtrlProportion 2256 +#define wxPickerBase_GetTextCtrlProportion 2257 +#define wxPickerBase_GetPickerCtrlProportion 2258 +#define wxPickerBase_HasTextCtrl 2259 +#define wxPickerBase_GetTextCtrl 2260 +#define wxPickerBase_IsTextCtrlGrowable 2261 +#define wxPickerBase_SetPickerCtrlGrowable 2262 +#define wxPickerBase_SetTextCtrlGrowable 2263 +#define wxPickerBase_IsPickerCtrlGrowable 2264 +#define wxFilePickerCtrl_new_0 2265 +#define wxFilePickerCtrl_new_3 2266 +#define wxFilePickerCtrl_Create 2267 +#define wxFilePickerCtrl_GetPath 2268 +#define wxFilePickerCtrl_SetPath 2269 +#define wxFilePickerCtrl_destroy 2270 +#define wxDirPickerCtrl_new_0 2271 +#define wxDirPickerCtrl_new_3 2272 +#define wxDirPickerCtrl_Create 2273 +#define wxDirPickerCtrl_GetPath 2274 +#define wxDirPickerCtrl_SetPath 2275 +#define wxDirPickerCtrl_destroy 2276 +#define wxColourPickerCtrl_new_0 2277 +#define wxColourPickerCtrl_new_3 2278 +#define wxColourPickerCtrl_Create 2279 +#define wxColourPickerCtrl_GetColour 2280 +#define wxColourPickerCtrl_SetColour_1_1 2281 +#define wxColourPickerCtrl_SetColour_1_0 2282 +#define wxColourPickerCtrl_destroy 2283 +#define wxDatePickerCtrl_new_0 2284 +#define wxDatePickerCtrl_new_3 2285 +#define wxDatePickerCtrl_GetRange 2286 +#define wxDatePickerCtrl_GetValue 2287 +#define wxDatePickerCtrl_SetRange 2288 +#define wxDatePickerCtrl_SetValue 2289 +#define wxDatePickerCtrl_destroy 2290 +#define wxFontPickerCtrl_new_0 2291 +#define wxFontPickerCtrl_new_3 2292 +#define wxFontPickerCtrl_Create 2293 +#define wxFontPickerCtrl_GetSelectedFont 2294 +#define wxFontPickerCtrl_SetSelectedFont 2295 +#define wxFontPickerCtrl_GetMaxPointSize 2296 +#define wxFontPickerCtrl_SetMaxPointSize 2297 +#define wxFontPickerCtrl_destroy 2298 +#define wxFindReplaceDialog_new_0 2301 +#define wxFindReplaceDialog_new_4 2302 +#define wxFindReplaceDialog_destruct 2303 +#define wxFindReplaceDialog_Create 2304 +#define wxFindReplaceDialog_GetData 2305 +#define wxFindReplaceData_new_0 2306 +#define wxFindReplaceData_new_1 2307 +#define wxFindReplaceData_GetFindString 2308 +#define wxFindReplaceData_GetReplaceString 2309 +#define wxFindReplaceData_GetFlags 2310 +#define wxFindReplaceData_SetFlags 2311 +#define wxFindReplaceData_SetFindString 2312 +#define wxFindReplaceData_SetReplaceString 2313 +#define wxFindReplaceData_destroy 2314 +#define wxMultiChoiceDialog_new_0 2315 +#define wxMultiChoiceDialog_new_5 2317 +#define wxMultiChoiceDialog_GetSelections 2318 +#define wxMultiChoiceDialog_SetSelections 2319 +#define wxMultiChoiceDialog_destroy 2320 +#define wxSingleChoiceDialog_new_0 2321 +#define wxSingleChoiceDialog_new_5 2323 +#define wxSingleChoiceDialog_GetSelection 2324 +#define wxSingleChoiceDialog_GetStringSelection 2325 +#define wxSingleChoiceDialog_SetSelection 2326 +#define wxSingleChoiceDialog_destroy 2327 +#define wxTextEntryDialog_new 2328 +#define wxTextEntryDialog_GetValue 2329 +#define wxTextEntryDialog_SetValue 2330 +#define wxTextEntryDialog_destroy 2331 +#define wxPasswordEntryDialog_new 2332 +#define wxPasswordEntryDialog_destroy 2333 +#define wxFontData_new_0 2334 +#define wxFontData_new_1 2335 +#define wxFontData_destruct 2336 +#define wxFontData_EnableEffects 2337 +#define wxFontData_GetAllowSymbols 2338 +#define wxFontData_GetColour 2339 +#define wxFontData_GetChosenFont 2340 +#define wxFontData_GetEnableEffects 2341 +#define wxFontData_GetInitialFont 2342 +#define wxFontData_GetShowHelp 2343 +#define wxFontData_SetAllowSymbols 2344 +#define wxFontData_SetChosenFont 2345 +#define wxFontData_SetColour 2346 +#define wxFontData_SetInitialFont 2347 +#define wxFontData_SetRange 2348 +#define wxFontData_SetShowHelp 2349 +#define wxFontDialog_new_0 2353 +#define wxFontDialog_new_2 2355 +#define wxFontDialog_Create 2357 +#define wxFontDialog_GetFontData 2358 +#define wxFontDialog_destroy 2360 +#define wxProgressDialog_new 2361 +#define wxProgressDialog_destruct 2362 +#define wxProgressDialog_Resume 2363 +#define wxProgressDialog_Update_2 2364 +#define wxProgressDialog_Update_0 2365 +#define wxMessageDialog_new 2366 +#define wxMessageDialog_destruct 2367 +#define wxPageSetupDialog_new 2368 +#define wxPageSetupDialog_destruct 2369 +#define wxPageSetupDialog_GetPageSetupData 2370 +#define wxPageSetupDialog_ShowModal 2371 +#define wxPageSetupDialogData_new_0 2372 +#define wxPageSetupDialogData_new_1_0 2373 +#define wxPageSetupDialogData_new_1_1 2374 +#define wxPageSetupDialogData_destruct 2375 +#define wxPageSetupDialogData_EnableHelp 2376 +#define wxPageSetupDialogData_EnableMargins 2377 +#define wxPageSetupDialogData_EnableOrientation 2378 +#define wxPageSetupDialogData_EnablePaper 2379 +#define wxPageSetupDialogData_EnablePrinter 2380 +#define wxPageSetupDialogData_GetDefaultMinMargins 2381 +#define wxPageSetupDialogData_GetEnableMargins 2382 +#define wxPageSetupDialogData_GetEnableOrientation 2383 +#define wxPageSetupDialogData_GetEnablePaper 2384 +#define wxPageSetupDialogData_GetEnablePrinter 2385 +#define wxPageSetupDialogData_GetEnableHelp 2386 +#define wxPageSetupDialogData_GetDefaultInfo 2387 +#define wxPageSetupDialogData_GetMarginTopLeft 2388 +#define wxPageSetupDialogData_GetMarginBottomRight 2389 +#define wxPageSetupDialogData_GetMinMarginTopLeft 2390 +#define wxPageSetupDialogData_GetMinMarginBottomRight 2391 +#define wxPageSetupDialogData_GetPaperId 2392 +#define wxPageSetupDialogData_GetPaperSize 2393 +#define wxPageSetupDialogData_GetPrintData 2395 +#define wxPageSetupDialogData_IsOk 2396 +#define wxPageSetupDialogData_SetDefaultInfo 2397 +#define wxPageSetupDialogData_SetDefaultMinMargins 2398 +#define wxPageSetupDialogData_SetMarginTopLeft 2399 +#define wxPageSetupDialogData_SetMarginBottomRight 2400 +#define wxPageSetupDialogData_SetMinMarginTopLeft 2401 +#define wxPageSetupDialogData_SetMinMarginBottomRight 2402 +#define wxPageSetupDialogData_SetPaperId 2403 +#define wxPageSetupDialogData_SetPaperSize_1_1 2404 +#define wxPageSetupDialogData_SetPaperSize_1_0 2405 +#define wxPageSetupDialogData_SetPrintData 2406 +#define wxPrintDialog_new_2_0 2407 +#define wxPrintDialog_new_2_1 2408 +#define wxPrintDialog_destruct 2409 +#define wxPrintDialog_GetPrintDialogData 2410 +#define wxPrintDialog_GetPrintDC 2411 +#define wxPrintDialogData_new_0 2412 +#define wxPrintDialogData_new_1_1 2413 +#define wxPrintDialogData_new_1_0 2414 +#define wxPrintDialogData_destruct 2415 +#define wxPrintDialogData_EnableHelp 2416 +#define wxPrintDialogData_EnablePageNumbers 2417 +#define wxPrintDialogData_EnablePrintToFile 2418 +#define wxPrintDialogData_EnableSelection 2419 +#define wxPrintDialogData_GetAllPages 2420 +#define wxPrintDialogData_GetCollate 2421 +#define wxPrintDialogData_GetFromPage 2422 +#define wxPrintDialogData_GetMaxPage 2423 +#define wxPrintDialogData_GetMinPage 2424 +#define wxPrintDialogData_GetNoCopies 2425 +#define wxPrintDialogData_GetPrintData 2426 +#define wxPrintDialogData_GetPrintToFile 2427 +#define wxPrintDialogData_GetSelection 2428 +#define wxPrintDialogData_GetToPage 2429 +#define wxPrintDialogData_IsOk 2430 +#define wxPrintDialogData_SetCollate 2431 +#define wxPrintDialogData_SetFromPage 2432 +#define wxPrintDialogData_SetMaxPage 2433 +#define wxPrintDialogData_SetMinPage 2434 +#define wxPrintDialogData_SetNoCopies 2435 +#define wxPrintDialogData_SetPrintData 2436 +#define wxPrintDialogData_SetPrintToFile 2437 +#define wxPrintDialogData_SetSelection 2438 +#define wxPrintDialogData_SetToPage 2439 +#define wxPrintData_new_0 2440 +#define wxPrintData_new_1 2441 +#define wxPrintData_destruct 2442 +#define wxPrintData_GetCollate 2443 +#define wxPrintData_GetBin 2444 +#define wxPrintData_GetColour 2445 +#define wxPrintData_GetDuplex 2446 +#define wxPrintData_GetNoCopies 2447 +#define wxPrintData_GetOrientation 2448 +#define wxPrintData_GetPaperId 2449 +#define wxPrintData_GetPrinterName 2450 +#define wxPrintData_GetQuality 2451 +#define wxPrintData_IsOk 2452 +#define wxPrintData_SetBin 2453 +#define wxPrintData_SetCollate 2454 +#define wxPrintData_SetColour 2455 +#define wxPrintData_SetDuplex 2456 +#define wxPrintData_SetNoCopies 2457 +#define wxPrintData_SetOrientation 2458 +#define wxPrintData_SetPaperId 2459 +#define wxPrintData_SetPrinterName 2460 +#define wxPrintData_SetQuality 2461 +#define wxPrintPreview_new_2 2464 +#define wxPrintPreview_new_3 2465 +#define wxPrintPreview_destruct 2467 +#define wxPrintPreview_GetCanvas 2468 +#define wxPrintPreview_GetCurrentPage 2469 +#define wxPrintPreview_GetFrame 2470 +#define wxPrintPreview_GetMaxPage 2471 +#define wxPrintPreview_GetMinPage 2472 +#define wxPrintPreview_GetPrintout 2473 +#define wxPrintPreview_GetPrintoutForPrinting 2474 +#define wxPrintPreview_IsOk 2475 +#define wxPrintPreview_PaintPage 2476 +#define wxPrintPreview_Print 2477 +#define wxPrintPreview_RenderPage 2478 +#define wxPrintPreview_SetCanvas 2479 +#define wxPrintPreview_SetCurrentPage 2480 +#define wxPrintPreview_SetFrame 2481 +#define wxPrintPreview_SetPrintout 2482 +#define wxPrintPreview_SetZoom 2483 +#define wxPreviewFrame_new 2484 +#define wxPreviewFrame_destruct 2485 +#define wxPreviewFrame_CreateControlBar 2486 +#define wxPreviewFrame_CreateCanvas 2487 +#define wxPreviewFrame_Initialize 2488 +#define wxPreviewFrame_OnCloseWindow 2489 +#define wxPreviewControlBar_new 2490 +#define wxPreviewControlBar_destruct 2491 +#define wxPreviewControlBar_CreateButtons 2492 +#define wxPreviewControlBar_GetPrintPreview 2493 +#define wxPreviewControlBar_GetZoomControl 2494 +#define wxPreviewControlBar_SetZoomControl 2495 +#define wxPrinter_new 2497 +#define wxPrinter_CreateAbortWindow 2498 +#define wxPrinter_GetAbort 2499 +#define wxPrinter_GetLastError 2500 +#define wxPrinter_GetPrintDialogData 2501 +#define wxPrinter_Print 2502 +#define wxPrinter_PrintDialog 2503 +#define wxPrinter_ReportError 2504 +#define wxPrinter_Setup 2505 +#define wxPrinter_destroy 2506 +#define wxXmlResource_new_1 2507 +#define wxXmlResource_new_2 2508 +#define wxXmlResource_destruct 2509 +#define wxXmlResource_AttachUnknownControl 2510 +#define wxXmlResource_ClearHandlers 2511 +#define wxXmlResource_CompareVersion 2512 +#define wxXmlResource_Get 2513 +#define wxXmlResource_GetFlags 2514 +#define wxXmlResource_GetVersion 2515 +#define wxXmlResource_GetXRCID 2516 +#define wxXmlResource_InitAllHandlers 2517 +#define wxXmlResource_Load 2518 +#define wxXmlResource_LoadBitmap 2519 +#define wxXmlResource_LoadDialog_2 2520 +#define wxXmlResource_LoadDialog_3 2521 +#define wxXmlResource_LoadFrame_2 2522 +#define wxXmlResource_LoadFrame_3 2523 +#define wxXmlResource_LoadIcon 2524 +#define wxXmlResource_LoadMenu 2525 +#define wxXmlResource_LoadMenuBar_2 2526 +#define wxXmlResource_LoadMenuBar_1 2527 +#define wxXmlResource_LoadPanel_2 2528 +#define wxXmlResource_LoadPanel_3 2529 +#define wxXmlResource_LoadToolBar 2530 +#define wxXmlResource_Set 2531 +#define wxXmlResource_SetFlags 2532 +#define wxXmlResource_Unload 2533 +#define wxXmlResource_xrcctrl 2534 +#define wxHtmlEasyPrinting_new 2535 +#define wxHtmlEasyPrinting_destruct 2536 +#define wxHtmlEasyPrinting_GetPrintData 2537 +#define wxHtmlEasyPrinting_GetPageSetupData 2538 +#define wxHtmlEasyPrinting_PreviewFile 2539 +#define wxHtmlEasyPrinting_PreviewText 2540 +#define wxHtmlEasyPrinting_PrintFile 2541 +#define wxHtmlEasyPrinting_PrintText 2542 +#define wxHtmlEasyPrinting_PageSetup 2543 +#define wxHtmlEasyPrinting_SetFonts 2544 +#define wxHtmlEasyPrinting_SetHeader 2545 +#define wxHtmlEasyPrinting_SetFooter 2546 +#define wxGLCanvas_new_2 2548 +#define wxGLCanvas_new_3_1 2549 +#define wxGLCanvas_new_3_0 2550 +#define wxGLCanvas_GetContext 2551 +#define wxGLCanvas_SetCurrent 2553 +#define wxGLCanvas_SwapBuffers 2554 +#define wxGLCanvas_destroy 2555 +#define wxAuiManager_new 2556 +#define wxAuiManager_destruct 2557 +#define wxAuiManager_AddPane_2_1 2558 +#define wxAuiManager_AddPane_3 2559 +#define wxAuiManager_AddPane_2_0 2560 +#define wxAuiManager_DetachPane 2561 +#define wxAuiManager_GetAllPanes 2562 +#define wxAuiManager_GetArtProvider 2563 +#define wxAuiManager_GetDockSizeConstraint 2564 +#define wxAuiManager_GetFlags 2565 +#define wxAuiManager_GetManagedWindow 2566 +#define wxAuiManager_GetManager 2567 +#define wxAuiManager_GetPane_1_1 2568 +#define wxAuiManager_GetPane_1_0 2569 +#define wxAuiManager_HideHint 2570 +#define wxAuiManager_InsertPane 2571 +#define wxAuiManager_LoadPaneInfo 2572 +#define wxAuiManager_LoadPerspective 2573 +#define wxAuiManager_SavePaneInfo 2574 +#define wxAuiManager_SavePerspective 2575 +#define wxAuiManager_SetArtProvider 2576 +#define wxAuiManager_SetDockSizeConstraint 2577 +#define wxAuiManager_SetFlags 2578 +#define wxAuiManager_SetManagedWindow 2579 +#define wxAuiManager_ShowHint 2580 +#define wxAuiManager_UnInit 2581 +#define wxAuiManager_Update 2582 +#define wxAuiPaneInfo_new_0 2583 +#define wxAuiPaneInfo_new_1 2584 +#define wxAuiPaneInfo_destruct 2585 +#define wxAuiPaneInfo_BestSize_1 2586 +#define wxAuiPaneInfo_BestSize_2 2587 +#define wxAuiPaneInfo_Bottom 2588 +#define wxAuiPaneInfo_BottomDockable 2589 +#define wxAuiPaneInfo_Caption 2590 +#define wxAuiPaneInfo_CaptionVisible 2591 +#define wxAuiPaneInfo_Centre 2592 +#define wxAuiPaneInfo_CentrePane 2593 +#define wxAuiPaneInfo_CloseButton 2594 +#define wxAuiPaneInfo_DefaultPane 2595 +#define wxAuiPaneInfo_DestroyOnClose 2596 +#define wxAuiPaneInfo_Direction 2597 +#define wxAuiPaneInfo_Dock 2598 +#define wxAuiPaneInfo_Dockable 2599 +#define wxAuiPaneInfo_Fixed 2600 +#define wxAuiPaneInfo_Float 2601 +#define wxAuiPaneInfo_Floatable 2602 +#define wxAuiPaneInfo_FloatingPosition_1 2603 +#define wxAuiPaneInfo_FloatingPosition_2 2604 +#define wxAuiPaneInfo_FloatingSize_1 2605 +#define wxAuiPaneInfo_FloatingSize_2 2606 +#define wxAuiPaneInfo_Gripper 2607 +#define wxAuiPaneInfo_GripperTop 2608 +#define wxAuiPaneInfo_HasBorder 2609 +#define wxAuiPaneInfo_HasCaption 2610 +#define wxAuiPaneInfo_HasCloseButton 2611 +#define wxAuiPaneInfo_HasFlag 2612 +#define wxAuiPaneInfo_HasGripper 2613 +#define wxAuiPaneInfo_HasGripperTop 2614 +#define wxAuiPaneInfo_HasMaximizeButton 2615 +#define wxAuiPaneInfo_HasMinimizeButton 2616 +#define wxAuiPaneInfo_HasPinButton 2617 +#define wxAuiPaneInfo_Hide 2618 +#define wxAuiPaneInfo_IsBottomDockable 2619 +#define wxAuiPaneInfo_IsDocked 2620 +#define wxAuiPaneInfo_IsFixed 2621 +#define wxAuiPaneInfo_IsFloatable 2622 +#define wxAuiPaneInfo_IsFloating 2623 +#define wxAuiPaneInfo_IsLeftDockable 2624 +#define wxAuiPaneInfo_IsMovable 2625 +#define wxAuiPaneInfo_IsOk 2626 +#define wxAuiPaneInfo_IsResizable 2627 +#define wxAuiPaneInfo_IsRightDockable 2628 +#define wxAuiPaneInfo_IsShown 2629 +#define wxAuiPaneInfo_IsToolbar 2630 +#define wxAuiPaneInfo_IsTopDockable 2631 +#define wxAuiPaneInfo_Layer 2632 +#define wxAuiPaneInfo_Left 2633 +#define wxAuiPaneInfo_LeftDockable 2634 +#define wxAuiPaneInfo_MaxSize_1 2635 +#define wxAuiPaneInfo_MaxSize_2 2636 +#define wxAuiPaneInfo_MaximizeButton 2637 +#define wxAuiPaneInfo_MinSize_1 2638 +#define wxAuiPaneInfo_MinSize_2 2639 +#define wxAuiPaneInfo_MinimizeButton 2640 +#define wxAuiPaneInfo_Movable 2641 +#define wxAuiPaneInfo_Name 2642 +#define wxAuiPaneInfo_PaneBorder 2643 +#define wxAuiPaneInfo_PinButton 2644 +#define wxAuiPaneInfo_Position 2645 +#define wxAuiPaneInfo_Resizable 2646 +#define wxAuiPaneInfo_Right 2647 +#define wxAuiPaneInfo_RightDockable 2648 +#define wxAuiPaneInfo_Row 2649 +#define wxAuiPaneInfo_SafeSet 2650 +#define wxAuiPaneInfo_SetFlag 2651 +#define wxAuiPaneInfo_Show 2652 +#define wxAuiPaneInfo_ToolbarPane 2653 +#define wxAuiPaneInfo_Top 2654 +#define wxAuiPaneInfo_TopDockable 2655 +#define wxAuiPaneInfo_Window 2656 +#define wxAuiPaneInfo_GetWindow 2657 +#define wxAuiPaneInfo_GetFrame 2658 +#define wxAuiPaneInfo_GetDirection 2659 +#define wxAuiPaneInfo_GetLayer 2660 +#define wxAuiPaneInfo_GetRow 2661 +#define wxAuiPaneInfo_GetPosition 2662 +#define wxAuiPaneInfo_GetFloatingPosition 2663 +#define wxAuiPaneInfo_GetFloatingSize 2664 +#define wxAuiNotebook_new_0 2665 +#define wxAuiNotebook_new_2 2666 +#define wxAuiNotebook_AddPage 2667 +#define wxAuiNotebook_Create 2668 +#define wxAuiNotebook_DeletePage 2669 +#define wxAuiNotebook_GetArtProvider 2670 +#define wxAuiNotebook_GetPage 2671 +#define wxAuiNotebook_GetPageBitmap 2672 +#define wxAuiNotebook_GetPageCount 2673 +#define wxAuiNotebook_GetPageIndex 2674 +#define wxAuiNotebook_GetPageText 2675 +#define wxAuiNotebook_GetSelection 2676 +#define wxAuiNotebook_InsertPage 2677 +#define wxAuiNotebook_RemovePage 2678 +#define wxAuiNotebook_SetArtProvider 2679 +#define wxAuiNotebook_SetFont 2680 +#define wxAuiNotebook_SetPageBitmap 2681 +#define wxAuiNotebook_SetPageText 2682 +#define wxAuiNotebook_SetSelection 2683 +#define wxAuiNotebook_SetTabCtrlHeight 2684 +#define wxAuiNotebook_SetUniformBitmapSize 2685 +#define wxAuiNotebook_destroy 2686 +#define wxAuiTabArt_SetFlags 2687 +#define wxAuiTabArt_SetMeasuringFont 2688 +#define wxAuiTabArt_SetNormalFont 2689 +#define wxAuiTabArt_SetSelectedFont 2690 +#define wxAuiTabArt_SetColour 2691 +#define wxAuiTabArt_SetActiveColour 2692 +#define wxAuiDockArt_GetColour 2693 +#define wxAuiDockArt_GetFont 2694 +#define wxAuiDockArt_GetMetric 2695 +#define wxAuiDockArt_SetColour 2696 +#define wxAuiDockArt_SetFont 2697 +#define wxAuiDockArt_SetMetric 2698 +#define wxAuiSimpleTabArt_new 2699 +#define wxAuiSimpleTabArt_destroy 2700 +#define wxMDIParentFrame_new_0 2701 +#define wxMDIParentFrame_new_4 2702 +#define wxMDIParentFrame_destruct 2703 +#define wxMDIParentFrame_ActivateNext 2704 +#define wxMDIParentFrame_ActivatePrevious 2705 +#define wxMDIParentFrame_ArrangeIcons 2706 +#define wxMDIParentFrame_Cascade 2707 +#define wxMDIParentFrame_Create 2708 +#define wxMDIParentFrame_GetActiveChild 2709 +#define wxMDIParentFrame_GetClientWindow 2710 +#define wxMDIParentFrame_Tile 2711 +#define wxMDIChildFrame_new_0 2712 +#define wxMDIChildFrame_new_4 2713 +#define wxMDIChildFrame_destruct 2714 +#define wxMDIChildFrame_Activate 2715 +#define wxMDIChildFrame_Create 2716 +#define wxMDIChildFrame_Maximize 2717 +#define wxMDIChildFrame_Restore 2718 +#define wxMDIClientWindow_new_0 2719 +#define wxMDIClientWindow_new_2 2720 +#define wxMDIClientWindow_destruct 2721 +#define wxMDIClientWindow_CreateClient 2722 +#define wxLayoutAlgorithm_new 2723 +#define wxLayoutAlgorithm_LayoutFrame 2724 +#define wxLayoutAlgorithm_LayoutMDIFrame 2725 +#define wxLayoutAlgorithm_LayoutWindow 2726 +#define wxLayoutAlgorithm_destroy 2727 +#define wxEvent_GetId 2728 +#define wxEvent_GetSkipped 2729 +#define wxEvent_GetTimestamp 2730 +#define wxEvent_IsCommandEvent 2731 +#define wxEvent_ResumePropagation 2732 +#define wxEvent_ShouldPropagate 2733 +#define wxEvent_Skip 2734 +#define wxEvent_StopPropagation 2735 +#define wxCommandEvent_getClientData 2736 +#define wxCommandEvent_GetExtraLong 2737 +#define wxCommandEvent_GetInt 2738 +#define wxCommandEvent_GetSelection 2739 +#define wxCommandEvent_GetString 2740 +#define wxCommandEvent_IsChecked 2741 +#define wxCommandEvent_IsSelection 2742 +#define wxCommandEvent_SetInt 2743 +#define wxCommandEvent_SetString 2744 +#define wxScrollEvent_GetOrientation 2745 +#define wxScrollEvent_GetPosition 2746 +#define wxScrollWinEvent_GetOrientation 2747 +#define wxScrollWinEvent_GetPosition 2748 +#define wxMouseEvent_AltDown 2749 +#define wxMouseEvent_Button 2750 +#define wxMouseEvent_ButtonDClick 2751 +#define wxMouseEvent_ButtonDown 2752 +#define wxMouseEvent_ButtonUp 2753 +#define wxMouseEvent_CmdDown 2754 +#define wxMouseEvent_ControlDown 2755 +#define wxMouseEvent_Dragging 2756 +#define wxMouseEvent_Entering 2757 +#define wxMouseEvent_GetButton 2758 +#define wxMouseEvent_GetPosition 2761 +#define wxMouseEvent_GetLogicalPosition 2762 +#define wxMouseEvent_GetLinesPerAction 2763 +#define wxMouseEvent_GetWheelRotation 2764 +#define wxMouseEvent_GetWheelDelta 2765 +#define wxMouseEvent_GetX 2766 +#define wxMouseEvent_GetY 2767 +#define wxMouseEvent_IsButton 2768 +#define wxMouseEvent_IsPageScroll 2769 +#define wxMouseEvent_Leaving 2770 +#define wxMouseEvent_LeftDClick 2771 +#define wxMouseEvent_LeftDown 2772 +#define wxMouseEvent_LeftIsDown 2773 +#define wxMouseEvent_LeftUp 2774 +#define wxMouseEvent_MetaDown 2775 +#define wxMouseEvent_MiddleDClick 2776 +#define wxMouseEvent_MiddleDown 2777 +#define wxMouseEvent_MiddleIsDown 2778 +#define wxMouseEvent_MiddleUp 2779 +#define wxMouseEvent_Moving 2780 +#define wxMouseEvent_RightDClick 2781 +#define wxMouseEvent_RightDown 2782 +#define wxMouseEvent_RightIsDown 2783 +#define wxMouseEvent_RightUp 2784 +#define wxMouseEvent_ShiftDown 2785 +#define wxSetCursorEvent_GetCursor 2786 +#define wxSetCursorEvent_GetX 2787 +#define wxSetCursorEvent_GetY 2788 +#define wxSetCursorEvent_HasCursor 2789 +#define wxSetCursorEvent_SetCursor 2790 +#define wxKeyEvent_AltDown 2791 +#define wxKeyEvent_CmdDown 2792 +#define wxKeyEvent_ControlDown 2793 +#define wxKeyEvent_GetKeyCode 2794 +#define wxKeyEvent_GetModifiers 2795 +#define wxKeyEvent_GetPosition 2798 +#define wxKeyEvent_GetRawKeyCode 2799 +#define wxKeyEvent_GetRawKeyFlags 2800 +#define wxKeyEvent_GetUnicodeKey 2801 +#define wxKeyEvent_GetX 2802 +#define wxKeyEvent_GetY 2803 +#define wxKeyEvent_HasModifiers 2804 +#define wxKeyEvent_MetaDown 2805 +#define wxKeyEvent_ShiftDown 2806 +#define wxSizeEvent_GetSize 2807 +#define wxMoveEvent_GetPosition 2808 +#define wxEraseEvent_GetDC 2809 +#define wxFocusEvent_GetWindow 2810 +#define wxChildFocusEvent_GetWindow 2811 +#define wxMenuEvent_GetMenu 2812 +#define wxMenuEvent_GetMenuId 2813 +#define wxMenuEvent_IsPopup 2814 +#define wxCloseEvent_CanVeto 2815 +#define wxCloseEvent_GetLoggingOff 2816 +#define wxCloseEvent_SetCanVeto 2817 +#define wxCloseEvent_SetLoggingOff 2818 +#define wxCloseEvent_Veto 2819 +#define wxShowEvent_SetShow 2820 +#define wxShowEvent_GetShow 2821 +#define wxIconizeEvent_Iconized 2822 +#define wxJoystickEvent_ButtonDown 2823 +#define wxJoystickEvent_ButtonIsDown 2824 +#define wxJoystickEvent_ButtonUp 2825 +#define wxJoystickEvent_GetButtonChange 2826 +#define wxJoystickEvent_GetButtonState 2827 +#define wxJoystickEvent_GetJoystick 2828 +#define wxJoystickEvent_GetPosition 2829 +#define wxJoystickEvent_GetZPosition 2830 +#define wxJoystickEvent_IsButton 2831 +#define wxJoystickEvent_IsMove 2832 +#define wxJoystickEvent_IsZMove 2833 +#define wxUpdateUIEvent_CanUpdate 2834 +#define wxUpdateUIEvent_Check 2835 +#define wxUpdateUIEvent_Enable 2836 +#define wxUpdateUIEvent_Show 2837 +#define wxUpdateUIEvent_GetChecked 2838 +#define wxUpdateUIEvent_GetEnabled 2839 +#define wxUpdateUIEvent_GetShown 2840 +#define wxUpdateUIEvent_GetSetChecked 2841 +#define wxUpdateUIEvent_GetSetEnabled 2842 +#define wxUpdateUIEvent_GetSetShown 2843 +#define wxUpdateUIEvent_GetSetText 2844 +#define wxUpdateUIEvent_GetText 2845 +#define wxUpdateUIEvent_GetMode 2846 +#define wxUpdateUIEvent_GetUpdateInterval 2847 +#define wxUpdateUIEvent_ResetUpdateTime 2848 +#define wxUpdateUIEvent_SetMode 2849 +#define wxUpdateUIEvent_SetText 2850 +#define wxUpdateUIEvent_SetUpdateInterval 2851 +#define wxMouseCaptureChangedEvent_GetCapturedWindow 2852 +#define wxPaletteChangedEvent_SetChangedWindow 2853 +#define wxPaletteChangedEvent_GetChangedWindow 2854 +#define wxQueryNewPaletteEvent_SetPaletteRealized 2855 +#define wxQueryNewPaletteEvent_GetPaletteRealized 2856 +#define wxNavigationKeyEvent_GetDirection 2857 +#define wxNavigationKeyEvent_SetDirection 2858 +#define wxNavigationKeyEvent_IsWindowChange 2859 +#define wxNavigationKeyEvent_SetWindowChange 2860 +#define wxNavigationKeyEvent_IsFromTab 2861 +#define wxNavigationKeyEvent_SetFromTab 2862 +#define wxNavigationKeyEvent_GetCurrentFocus 2863 +#define wxNavigationKeyEvent_SetCurrentFocus 2864 +#define wxHelpEvent_GetOrigin 2865 +#define wxHelpEvent_GetPosition 2866 +#define wxHelpEvent_SetOrigin 2867 +#define wxHelpEvent_SetPosition 2868 +#define wxContextMenuEvent_GetPosition 2869 +#define wxContextMenuEvent_SetPosition 2870 +#define wxIdleEvent_CanSend 2871 +#define wxIdleEvent_GetMode 2872 +#define wxIdleEvent_RequestMore 2873 +#define wxIdleEvent_MoreRequested 2874 +#define wxIdleEvent_SetMode 2875 +#define wxGridEvent_AltDown 2876 +#define wxGridEvent_ControlDown 2877 +#define wxGridEvent_GetCol 2878 +#define wxGridEvent_GetPosition 2879 +#define wxGridEvent_GetRow 2880 +#define wxGridEvent_MetaDown 2881 +#define wxGridEvent_Selecting 2882 +#define wxGridEvent_ShiftDown 2883 +#define wxNotifyEvent_Allow 2884 +#define wxNotifyEvent_IsAllowed 2885 +#define wxNotifyEvent_Veto 2886 +#define wxSashEvent_GetEdge 2887 +#define wxSashEvent_GetDragRect 2888 +#define wxSashEvent_GetDragStatus 2889 +#define wxListEvent_GetCacheFrom 2890 +#define wxListEvent_GetCacheTo 2891 +#define wxListEvent_GetKeyCode 2892 +#define wxListEvent_GetIndex 2893 +#define wxListEvent_GetColumn 2894 +#define wxListEvent_GetPoint 2895 +#define wxListEvent_GetLabel 2896 +#define wxListEvent_GetText 2897 +#define wxListEvent_GetImage 2898 +#define wxListEvent_GetData 2899 +#define wxListEvent_GetMask 2900 +#define wxListEvent_GetItem 2901 +#define wxListEvent_IsEditCancelled 2902 +#define wxDateEvent_GetDate 2903 +#define wxCalendarEvent_GetWeekDay 2904 +#define wxFileDirPickerEvent_GetPath 2905 +#define wxColourPickerEvent_GetColour 2906 +#define wxFontPickerEvent_GetFont 2907 +#define wxStyledTextEvent_GetPosition 2908 +#define wxStyledTextEvent_GetKey 2909 +#define wxStyledTextEvent_GetModifiers 2910 +#define wxStyledTextEvent_GetModificationType 2911 +#define wxStyledTextEvent_GetText 2912 +#define wxStyledTextEvent_GetLength 2913 +#define wxStyledTextEvent_GetLinesAdded 2914 +#define wxStyledTextEvent_GetLine 2915 +#define wxStyledTextEvent_GetFoldLevelNow 2916 +#define wxStyledTextEvent_GetFoldLevelPrev 2917 +#define wxStyledTextEvent_GetMargin 2918 +#define wxStyledTextEvent_GetMessage 2919 +#define wxStyledTextEvent_GetWParam 2920 +#define wxStyledTextEvent_GetLParam 2921 +#define wxStyledTextEvent_GetListType 2922 +#define wxStyledTextEvent_GetX 2923 +#define wxStyledTextEvent_GetY 2924 +#define wxStyledTextEvent_GetDragText 2925 +#define wxStyledTextEvent_GetDragAllowMove 2926 +#define wxStyledTextEvent_GetDragResult 2927 +#define wxStyledTextEvent_GetShift 2928 +#define wxStyledTextEvent_GetControl 2929 +#define wxStyledTextEvent_GetAlt 2930 +#define utils_wxGetKeyState 2931 +#define utils_wxGetMousePosition 2932 +#define utils_wxGetMouseState 2933 +#define utils_wxSetDetectableAutoRepeat 2934 +#define utils_wxBell 2935 +#define utils_wxFindMenuItemId 2936 +#define utils_wxGenericFindWindowAtPoint 2937 +#define utils_wxFindWindowAtPoint 2938 +#define utils_wxBeginBusyCursor 2939 +#define utils_wxEndBusyCursor 2940 +#define utils_wxIsBusy 2941 +#define utils_wxShutdown 2942 +#define utils_wxShell 2943 +#define utils_wxLaunchDefaultBrowser 2944 +#define utils_wxGetEmailAddress 2945 +#define utils_wxGetUserId 2946 +#define utils_wxGetHomeDir 2947 +#define utils_wxNewId 2948 +#define utils_wxRegisterId 2949 +#define utils_wxGetCurrentId 2950 +#define utils_wxGetOsDescription 2951 +#define utils_wxIsPlatformLittleEndian 2952 +#define utils_wxIsPlatform64Bit 2953 +#define gdicmn_wxDisplaySize 2954 +#define gdicmn_wxSetCursor 2955 +#define wxPrintout_new 2956 +#define wxPrintout_destruct 2957 +#define wxPrintout_GetDC 2958 +#define wxPrintout_GetPageSizeMM 2959 +#define wxPrintout_GetPageSizePixels 2960 +#define wxPrintout_GetPaperRectPixels 2961 +#define wxPrintout_GetPPIPrinter 2962 +#define wxPrintout_GetPPIScreen 2963 +#define wxPrintout_GetTitle 2964 +#define wxPrintout_IsPreview 2965 +#define wxPrintout_FitThisSizeToPaper 2966 +#define wxPrintout_FitThisSizeToPage 2967 +#define wxPrintout_FitThisSizeToPageMargins 2968 +#define wxPrintout_MapScreenSizeToPaper 2969 +#define wxPrintout_MapScreenSizeToPage 2970 +#define wxPrintout_MapScreenSizeToPageMargins 2971 +#define wxPrintout_MapScreenSizeToDevice 2972 +#define wxPrintout_GetLogicalPaperRect 2973 +#define wxPrintout_GetLogicalPageRect 2974 +#define wxPrintout_GetLogicalPageMarginsRect 2975 +#define wxPrintout_SetLogicalOrigin 2976 +#define wxPrintout_OffsetLogicalOrigin 2977 +#define wxStyledTextCtrl_new_2 2978 +#define wxStyledTextCtrl_new_0 2979 +#define wxStyledTextCtrl_destruct 2980 +#define wxStyledTextCtrl_Create 2981 +#define wxStyledTextCtrl_AddText 2982 +#define wxStyledTextCtrl_AddStyledText 2983 +#define wxStyledTextCtrl_InsertText 2984 +#define wxStyledTextCtrl_ClearAll 2985 +#define wxStyledTextCtrl_ClearDocumentStyle 2986 +#define wxStyledTextCtrl_GetLength 2987 +#define wxStyledTextCtrl_GetCharAt 2988 +#define wxStyledTextCtrl_GetCurrentPos 2989 +#define wxStyledTextCtrl_GetAnchor 2990 +#define wxStyledTextCtrl_GetStyleAt 2991 +#define wxStyledTextCtrl_Redo 2992 +#define wxStyledTextCtrl_SetUndoCollection 2993 +#define wxStyledTextCtrl_SelectAll 2994 +#define wxStyledTextCtrl_SetSavePoint 2995 +#define wxStyledTextCtrl_GetStyledText 2996 +#define wxStyledTextCtrl_CanRedo 2997 +#define wxStyledTextCtrl_MarkerLineFromHandle 2998 +#define wxStyledTextCtrl_MarkerDeleteHandle 2999 +#define wxStyledTextCtrl_GetUndoCollection 3000 +#define wxStyledTextCtrl_GetViewWhiteSpace 3001 +#define wxStyledTextCtrl_SetViewWhiteSpace 3002 +#define wxStyledTextCtrl_PositionFromPoint 3003 +#define wxStyledTextCtrl_PositionFromPointClose 3004 +#define wxStyledTextCtrl_GotoLine 3005 +#define wxStyledTextCtrl_GotoPos 3006 +#define wxStyledTextCtrl_SetAnchor 3007 +#define wxStyledTextCtrl_GetCurLine 3008 +#define wxStyledTextCtrl_GetEndStyled 3009 +#define wxStyledTextCtrl_ConvertEOLs 3010 +#define wxStyledTextCtrl_GetEOLMode 3011 +#define wxStyledTextCtrl_SetEOLMode 3012 +#define wxStyledTextCtrl_StartStyling 3013 +#define wxStyledTextCtrl_SetStyling 3014 +#define wxStyledTextCtrl_GetBufferedDraw 3015 +#define wxStyledTextCtrl_SetBufferedDraw 3016 +#define wxStyledTextCtrl_SetTabWidth 3017 +#define wxStyledTextCtrl_GetTabWidth 3018 +#define wxStyledTextCtrl_SetCodePage 3019 +#define wxStyledTextCtrl_MarkerDefine 3020 +#define wxStyledTextCtrl_MarkerSetForeground 3021 +#define wxStyledTextCtrl_MarkerSetBackground 3022 +#define wxStyledTextCtrl_MarkerAdd 3023 +#define wxStyledTextCtrl_MarkerDelete 3024 +#define wxStyledTextCtrl_MarkerDeleteAll 3025 +#define wxStyledTextCtrl_MarkerGet 3026 +#define wxStyledTextCtrl_MarkerNext 3027 +#define wxStyledTextCtrl_MarkerPrevious 3028 +#define wxStyledTextCtrl_MarkerDefineBitmap 3029 +#define wxStyledTextCtrl_MarkerAddSet 3030 +#define wxStyledTextCtrl_MarkerSetAlpha 3031 +#define wxStyledTextCtrl_SetMarginType 3032 +#define wxStyledTextCtrl_GetMarginType 3033 +#define wxStyledTextCtrl_SetMarginWidth 3034 +#define wxStyledTextCtrl_GetMarginWidth 3035 +#define wxStyledTextCtrl_SetMarginMask 3036 +#define wxStyledTextCtrl_GetMarginMask 3037 +#define wxStyledTextCtrl_SetMarginSensitive 3038 +#define wxStyledTextCtrl_GetMarginSensitive 3039 +#define wxStyledTextCtrl_StyleClearAll 3040 +#define wxStyledTextCtrl_StyleSetForeground 3041 +#define wxStyledTextCtrl_StyleSetBackground 3042 +#define wxStyledTextCtrl_StyleSetBold 3043 +#define wxStyledTextCtrl_StyleSetItalic 3044 +#define wxStyledTextCtrl_StyleSetSize 3045 +#define wxStyledTextCtrl_StyleSetFaceName 3046 +#define wxStyledTextCtrl_StyleSetEOLFilled 3047 +#define wxStyledTextCtrl_StyleResetDefault 3048 +#define wxStyledTextCtrl_StyleSetUnderline 3049 +#define wxStyledTextCtrl_StyleSetCase 3050 +#define wxStyledTextCtrl_StyleSetHotSpot 3051 +#define wxStyledTextCtrl_SetSelForeground 3052 +#define wxStyledTextCtrl_SetSelBackground 3053 +#define wxStyledTextCtrl_GetSelAlpha 3054 +#define wxStyledTextCtrl_SetSelAlpha 3055 +#define wxStyledTextCtrl_SetCaretForeground 3056 +#define wxStyledTextCtrl_CmdKeyAssign 3057 +#define wxStyledTextCtrl_CmdKeyClear 3058 +#define wxStyledTextCtrl_CmdKeyClearAll 3059 +#define wxStyledTextCtrl_SetStyleBytes 3060 +#define wxStyledTextCtrl_StyleSetVisible 3061 +#define wxStyledTextCtrl_GetCaretPeriod 3062 +#define wxStyledTextCtrl_SetCaretPeriod 3063 +#define wxStyledTextCtrl_SetWordChars 3064 +#define wxStyledTextCtrl_BeginUndoAction 3065 +#define wxStyledTextCtrl_EndUndoAction 3066 +#define wxStyledTextCtrl_IndicatorSetStyle 3067 +#define wxStyledTextCtrl_IndicatorGetStyle 3068 +#define wxStyledTextCtrl_IndicatorSetForeground 3069 +#define wxStyledTextCtrl_IndicatorGetForeground 3070 +#define wxStyledTextCtrl_SetWhitespaceForeground 3071 +#define wxStyledTextCtrl_SetWhitespaceBackground 3072 +#define wxStyledTextCtrl_GetStyleBits 3073 +#define wxStyledTextCtrl_SetLineState 3074 +#define wxStyledTextCtrl_GetLineState 3075 +#define wxStyledTextCtrl_GetMaxLineState 3076 +#define wxStyledTextCtrl_GetCaretLineVisible 3077 +#define wxStyledTextCtrl_SetCaretLineVisible 3078 +#define wxStyledTextCtrl_GetCaretLineBackground 3079 +#define wxStyledTextCtrl_SetCaretLineBackground 3080 +#define wxStyledTextCtrl_AutoCompShow 3081 +#define wxStyledTextCtrl_AutoCompCancel 3082 +#define wxStyledTextCtrl_AutoCompActive 3083 +#define wxStyledTextCtrl_AutoCompPosStart 3084 +#define wxStyledTextCtrl_AutoCompComplete 3085 +#define wxStyledTextCtrl_AutoCompStops 3086 +#define wxStyledTextCtrl_AutoCompSetSeparator 3087 +#define wxStyledTextCtrl_AutoCompGetSeparator 3088 +#define wxStyledTextCtrl_AutoCompSelect 3089 +#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3090 +#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3091 +#define wxStyledTextCtrl_AutoCompSetFillUps 3092 +#define wxStyledTextCtrl_AutoCompSetChooseSingle 3093 +#define wxStyledTextCtrl_AutoCompGetChooseSingle 3094 +#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3095 +#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3096 +#define wxStyledTextCtrl_UserListShow 3097 +#define wxStyledTextCtrl_AutoCompSetAutoHide 3098 +#define wxStyledTextCtrl_AutoCompGetAutoHide 3099 +#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3100 +#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3101 +#define wxStyledTextCtrl_RegisterImage 3102 +#define wxStyledTextCtrl_ClearRegisteredImages 3103 +#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3104 +#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3105 +#define wxStyledTextCtrl_AutoCompSetMaxWidth 3106 +#define wxStyledTextCtrl_AutoCompGetMaxWidth 3107 +#define wxStyledTextCtrl_AutoCompSetMaxHeight 3108 +#define wxStyledTextCtrl_AutoCompGetMaxHeight 3109 +#define wxStyledTextCtrl_SetIndent 3110 +#define wxStyledTextCtrl_GetIndent 3111 +#define wxStyledTextCtrl_SetUseTabs 3112 +#define wxStyledTextCtrl_GetUseTabs 3113 +#define wxStyledTextCtrl_SetLineIndentation 3114 +#define wxStyledTextCtrl_GetLineIndentation 3115 +#define wxStyledTextCtrl_GetLineIndentPosition 3116 +#define wxStyledTextCtrl_GetColumn 3117 +#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3118 +#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3119 +#define wxStyledTextCtrl_SetIndentationGuides 3120 +#define wxStyledTextCtrl_GetIndentationGuides 3121 +#define wxStyledTextCtrl_SetHighlightGuide 3122 +#define wxStyledTextCtrl_GetHighlightGuide 3123 +#define wxStyledTextCtrl_GetLineEndPosition 3124 +#define wxStyledTextCtrl_GetCodePage 3125 +#define wxStyledTextCtrl_GetCaretForeground 3126 +#define wxStyledTextCtrl_GetReadOnly 3127 +#define wxStyledTextCtrl_SetCurrentPos 3128 +#define wxStyledTextCtrl_SetSelectionStart 3129 +#define wxStyledTextCtrl_GetSelectionStart 3130 +#define wxStyledTextCtrl_SetSelectionEnd 3131 +#define wxStyledTextCtrl_GetSelectionEnd 3132 +#define wxStyledTextCtrl_SetPrintMagnification 3133 +#define wxStyledTextCtrl_GetPrintMagnification 3134 +#define wxStyledTextCtrl_SetPrintColourMode 3135 +#define wxStyledTextCtrl_GetPrintColourMode 3136 +#define wxStyledTextCtrl_FindText 3137 +#define wxStyledTextCtrl_FormatRange 3138 +#define wxStyledTextCtrl_GetFirstVisibleLine 3139 +#define wxStyledTextCtrl_GetLine 3140 +#define wxStyledTextCtrl_GetLineCount 3141 +#define wxStyledTextCtrl_SetMarginLeft 3142 +#define wxStyledTextCtrl_GetMarginLeft 3143 +#define wxStyledTextCtrl_SetMarginRight 3144 +#define wxStyledTextCtrl_GetMarginRight 3145 +#define wxStyledTextCtrl_GetModify 3146 +#define wxStyledTextCtrl_SetSelection 3147 +#define wxStyledTextCtrl_GetSelectedText 3148 +#define wxStyledTextCtrl_GetTextRange 3149 +#define wxStyledTextCtrl_HideSelection 3150 +#define wxStyledTextCtrl_LineFromPosition 3151 +#define wxStyledTextCtrl_PositionFromLine 3152 +#define wxStyledTextCtrl_LineScroll 3153 +#define wxStyledTextCtrl_EnsureCaretVisible 3154 +#define wxStyledTextCtrl_ReplaceSelection 3155 +#define wxStyledTextCtrl_SetReadOnly 3156 +#define wxStyledTextCtrl_CanPaste 3157 +#define wxStyledTextCtrl_CanUndo 3158 +#define wxStyledTextCtrl_EmptyUndoBuffer 3159 +#define wxStyledTextCtrl_Undo 3160 +#define wxStyledTextCtrl_Cut 3161 +#define wxStyledTextCtrl_Copy 3162 +#define wxStyledTextCtrl_Paste 3163 +#define wxStyledTextCtrl_Clear 3164 +#define wxStyledTextCtrl_SetText 3165 +#define wxStyledTextCtrl_GetText 3166 +#define wxStyledTextCtrl_GetTextLength 3167 +#define wxStyledTextCtrl_GetOvertype 3168 +#define wxStyledTextCtrl_SetCaretWidth 3169 +#define wxStyledTextCtrl_GetCaretWidth 3170 +#define wxStyledTextCtrl_SetTargetStart 3171 +#define wxStyledTextCtrl_GetTargetStart 3172 +#define wxStyledTextCtrl_SetTargetEnd 3173 +#define wxStyledTextCtrl_GetTargetEnd 3174 +#define wxStyledTextCtrl_ReplaceTarget 3175 +#define wxStyledTextCtrl_SearchInTarget 3176 +#define wxStyledTextCtrl_SetSearchFlags 3177 +#define wxStyledTextCtrl_GetSearchFlags 3178 +#define wxStyledTextCtrl_CallTipShow 3179 +#define wxStyledTextCtrl_CallTipCancel 3180 +#define wxStyledTextCtrl_CallTipActive 3181 +#define wxStyledTextCtrl_CallTipPosAtStart 3182 +#define wxStyledTextCtrl_CallTipSetHighlight 3183 +#define wxStyledTextCtrl_CallTipSetBackground 3184 +#define wxStyledTextCtrl_CallTipSetForeground 3185 +#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3186 +#define wxStyledTextCtrl_CallTipUseStyle 3187 +#define wxStyledTextCtrl_VisibleFromDocLine 3188 +#define wxStyledTextCtrl_DocLineFromVisible 3189 +#define wxStyledTextCtrl_WrapCount 3190 +#define wxStyledTextCtrl_SetFoldLevel 3191 +#define wxStyledTextCtrl_GetFoldLevel 3192 +#define wxStyledTextCtrl_GetLastChild 3193 +#define wxStyledTextCtrl_GetFoldParent 3194 +#define wxStyledTextCtrl_ShowLines 3195 +#define wxStyledTextCtrl_HideLines 3196 +#define wxStyledTextCtrl_GetLineVisible 3197 +#define wxStyledTextCtrl_SetFoldExpanded 3198 +#define wxStyledTextCtrl_GetFoldExpanded 3199 +#define wxStyledTextCtrl_ToggleFold 3200 +#define wxStyledTextCtrl_EnsureVisible 3201 +#define wxStyledTextCtrl_SetFoldFlags 3202 +#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3203 +#define wxStyledTextCtrl_SetTabIndents 3204 +#define wxStyledTextCtrl_GetTabIndents 3205 +#define wxStyledTextCtrl_SetBackSpaceUnIndents 3206 +#define wxStyledTextCtrl_GetBackSpaceUnIndents 3207 +#define wxStyledTextCtrl_SetMouseDwellTime 3208 +#define wxStyledTextCtrl_GetMouseDwellTime 3209 +#define wxStyledTextCtrl_WordStartPosition 3210 +#define wxStyledTextCtrl_WordEndPosition 3211 +#define wxStyledTextCtrl_SetWrapMode 3212 +#define wxStyledTextCtrl_GetWrapMode 3213 +#define wxStyledTextCtrl_SetWrapVisualFlags 3214 +#define wxStyledTextCtrl_GetWrapVisualFlags 3215 +#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3216 +#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3217 +#define wxStyledTextCtrl_SetWrapStartIndent 3218 +#define wxStyledTextCtrl_GetWrapStartIndent 3219 +#define wxStyledTextCtrl_SetLayoutCache 3220 +#define wxStyledTextCtrl_GetLayoutCache 3221 +#define wxStyledTextCtrl_SetScrollWidth 3222 +#define wxStyledTextCtrl_GetScrollWidth 3223 +#define wxStyledTextCtrl_TextWidth 3224 +#define wxStyledTextCtrl_GetEndAtLastLine 3225 +#define wxStyledTextCtrl_TextHeight 3226 +#define wxStyledTextCtrl_SetUseVerticalScrollBar 3227 +#define wxStyledTextCtrl_GetUseVerticalScrollBar 3228 +#define wxStyledTextCtrl_AppendText 3229 +#define wxStyledTextCtrl_GetTwoPhaseDraw 3230 +#define wxStyledTextCtrl_SetTwoPhaseDraw 3231 +#define wxStyledTextCtrl_TargetFromSelection 3232 +#define wxStyledTextCtrl_LinesJoin 3233 +#define wxStyledTextCtrl_LinesSplit 3234 +#define wxStyledTextCtrl_SetFoldMarginColour 3235 +#define wxStyledTextCtrl_SetFoldMarginHiColour 3236 +#define wxStyledTextCtrl_LineDown 3237 +#define wxStyledTextCtrl_LineDownExtend 3238 +#define wxStyledTextCtrl_LineUp 3239 +#define wxStyledTextCtrl_LineUpExtend 3240 +#define wxStyledTextCtrl_CharLeft 3241 +#define wxStyledTextCtrl_CharLeftExtend 3242 +#define wxStyledTextCtrl_CharRight 3243 +#define wxStyledTextCtrl_CharRightExtend 3244 +#define wxStyledTextCtrl_WordLeft 3245 +#define wxStyledTextCtrl_WordLeftExtend 3246 +#define wxStyledTextCtrl_WordRight 3247 +#define wxStyledTextCtrl_WordRightExtend 3248 +#define wxStyledTextCtrl_Home 3249 +#define wxStyledTextCtrl_HomeExtend 3250 +#define wxStyledTextCtrl_LineEnd 3251 +#define wxStyledTextCtrl_LineEndExtend 3252 +#define wxStyledTextCtrl_DocumentStart 3253 +#define wxStyledTextCtrl_DocumentStartExtend 3254 +#define wxStyledTextCtrl_DocumentEnd 3255 +#define wxStyledTextCtrl_DocumentEndExtend 3256 +#define wxStyledTextCtrl_PageUp 3257 +#define wxStyledTextCtrl_PageUpExtend 3258 +#define wxStyledTextCtrl_PageDown 3259 +#define wxStyledTextCtrl_PageDownExtend 3260 +#define wxStyledTextCtrl_EditToggleOvertype 3261 +#define wxStyledTextCtrl_Cancel 3262 +#define wxStyledTextCtrl_DeleteBack 3263 +#define wxStyledTextCtrl_Tab 3264 +#define wxStyledTextCtrl_BackTab 3265 +#define wxStyledTextCtrl_NewLine 3266 +#define wxStyledTextCtrl_FormFeed 3267 +#define wxStyledTextCtrl_VCHome 3268 +#define wxStyledTextCtrl_VCHomeExtend 3269 +#define wxStyledTextCtrl_ZoomIn 3270 +#define wxStyledTextCtrl_ZoomOut 3271 +#define wxStyledTextCtrl_DelWordLeft 3272 +#define wxStyledTextCtrl_DelWordRight 3273 +#define wxStyledTextCtrl_LineCut 3274 +#define wxStyledTextCtrl_LineDelete 3275 +#define wxStyledTextCtrl_LineTranspose 3276 +#define wxStyledTextCtrl_LineDuplicate 3277 +#define wxStyledTextCtrl_LowerCase 3278 +#define wxStyledTextCtrl_UpperCase 3279 +#define wxStyledTextCtrl_LineScrollDown 3280 +#define wxStyledTextCtrl_LineScrollUp 3281 +#define wxStyledTextCtrl_DeleteBackNotLine 3282 +#define wxStyledTextCtrl_HomeDisplay 3283 +#define wxStyledTextCtrl_HomeDisplayExtend 3284 +#define wxStyledTextCtrl_LineEndDisplay 3285 +#define wxStyledTextCtrl_LineEndDisplayExtend 3286 +#define wxStyledTextCtrl_HomeWrapExtend 3287 +#define wxStyledTextCtrl_LineEndWrap 3288 +#define wxStyledTextCtrl_LineEndWrapExtend 3289 +#define wxStyledTextCtrl_VCHomeWrap 3290 +#define wxStyledTextCtrl_VCHomeWrapExtend 3291 +#define wxStyledTextCtrl_LineCopy 3292 +#define wxStyledTextCtrl_MoveCaretInsideView 3293 +#define wxStyledTextCtrl_LineLength 3294 +#define wxStyledTextCtrl_BraceHighlight 3295 +#define wxStyledTextCtrl_BraceBadLight 3296 +#define wxStyledTextCtrl_BraceMatch 3297 +#define wxStyledTextCtrl_GetViewEOL 3298 +#define wxStyledTextCtrl_SetViewEOL 3299 +#define wxStyledTextCtrl_SetModEventMask 3300 +#define wxStyledTextCtrl_GetEdgeColumn 3301 +#define wxStyledTextCtrl_SetEdgeColumn 3302 +#define wxStyledTextCtrl_SetEdgeMode 3303 +#define wxStyledTextCtrl_GetEdgeMode 3304 +#define wxStyledTextCtrl_GetEdgeColour 3305 +#define wxStyledTextCtrl_SetEdgeColour 3306 +#define wxStyledTextCtrl_SearchAnchor 3307 +#define wxStyledTextCtrl_SearchNext 3308 +#define wxStyledTextCtrl_SearchPrev 3309 +#define wxStyledTextCtrl_LinesOnScreen 3310 +#define wxStyledTextCtrl_UsePopUp 3311 +#define wxStyledTextCtrl_SelectionIsRectangle 3312 +#define wxStyledTextCtrl_SetZoom 3313 +#define wxStyledTextCtrl_GetZoom 3314 +#define wxStyledTextCtrl_GetModEventMask 3315 +#define wxStyledTextCtrl_SetSTCFocus 3316 +#define wxStyledTextCtrl_GetSTCFocus 3317 +#define wxStyledTextCtrl_SetStatus 3318 +#define wxStyledTextCtrl_GetStatus 3319 +#define wxStyledTextCtrl_SetMouseDownCaptures 3320 +#define wxStyledTextCtrl_GetMouseDownCaptures 3321 +#define wxStyledTextCtrl_SetSTCCursor 3322 +#define wxStyledTextCtrl_GetSTCCursor 3323 +#define wxStyledTextCtrl_SetControlCharSymbol 3324 +#define wxStyledTextCtrl_GetControlCharSymbol 3325 +#define wxStyledTextCtrl_WordPartLeft 3326 +#define wxStyledTextCtrl_WordPartLeftExtend 3327 +#define wxStyledTextCtrl_WordPartRight 3328 +#define wxStyledTextCtrl_WordPartRightExtend 3329 +#define wxStyledTextCtrl_SetVisiblePolicy 3330 +#define wxStyledTextCtrl_DelLineLeft 3331 +#define wxStyledTextCtrl_DelLineRight 3332 +#define wxStyledTextCtrl_GetXOffset 3333 +#define wxStyledTextCtrl_ChooseCaretX 3334 +#define wxStyledTextCtrl_SetXCaretPolicy 3335 +#define wxStyledTextCtrl_SetYCaretPolicy 3336 +#define wxStyledTextCtrl_GetPrintWrapMode 3337 +#define wxStyledTextCtrl_SetHotspotActiveForeground 3338 +#define wxStyledTextCtrl_SetHotspotActiveBackground 3339 +#define wxStyledTextCtrl_SetHotspotActiveUnderline 3340 +#define wxStyledTextCtrl_SetHotspotSingleLine 3341 +#define wxStyledTextCtrl_ParaDownExtend 3342 +#define wxStyledTextCtrl_ParaUp 3343 +#define wxStyledTextCtrl_ParaUpExtend 3344 +#define wxStyledTextCtrl_PositionBefore 3345 +#define wxStyledTextCtrl_PositionAfter 3346 +#define wxStyledTextCtrl_CopyRange 3347 +#define wxStyledTextCtrl_CopyText 3348 +#define wxStyledTextCtrl_SetSelectionMode 3349 +#define wxStyledTextCtrl_GetSelectionMode 3350 +#define wxStyledTextCtrl_LineDownRectExtend 3351 +#define wxStyledTextCtrl_LineUpRectExtend 3352 +#define wxStyledTextCtrl_CharLeftRectExtend 3353 +#define wxStyledTextCtrl_CharRightRectExtend 3354 +#define wxStyledTextCtrl_HomeRectExtend 3355 +#define wxStyledTextCtrl_VCHomeRectExtend 3356 +#define wxStyledTextCtrl_LineEndRectExtend 3357 +#define wxStyledTextCtrl_PageUpRectExtend 3358 +#define wxStyledTextCtrl_PageDownRectExtend 3359 +#define wxStyledTextCtrl_StutteredPageUp 3360 +#define wxStyledTextCtrl_StutteredPageUpExtend 3361 +#define wxStyledTextCtrl_StutteredPageDown 3362 +#define wxStyledTextCtrl_StutteredPageDownExtend 3363 +#define wxStyledTextCtrl_WordLeftEnd 3364 +#define wxStyledTextCtrl_WordLeftEndExtend 3365 +#define wxStyledTextCtrl_WordRightEnd 3366 +#define wxStyledTextCtrl_WordRightEndExtend 3367 +#define wxStyledTextCtrl_SetWhitespaceChars 3368 +#define wxStyledTextCtrl_SetCharsDefault 3369 +#define wxStyledTextCtrl_AutoCompGetCurrent 3370 +#define wxStyledTextCtrl_Allocate 3371 +#define wxStyledTextCtrl_FindColumn 3372 +#define wxStyledTextCtrl_GetCaretSticky 3373 +#define wxStyledTextCtrl_SetCaretSticky 3374 +#define wxStyledTextCtrl_ToggleCaretSticky 3375 +#define wxStyledTextCtrl_SetPasteConvertEndings 3376 +#define wxStyledTextCtrl_GetPasteConvertEndings 3377 +#define wxStyledTextCtrl_SelectionDuplicate 3378 +#define wxStyledTextCtrl_SetCaretLineBackAlpha 3379 +#define wxStyledTextCtrl_GetCaretLineBackAlpha 3380 +#define wxStyledTextCtrl_StartRecord 3381 +#define wxStyledTextCtrl_StopRecord 3382 +#define wxStyledTextCtrl_SetLexer 3383 +#define wxStyledTextCtrl_GetLexer 3384 +#define wxStyledTextCtrl_Colourise 3385 +#define wxStyledTextCtrl_SetProperty 3386 +#define wxStyledTextCtrl_SetKeyWords 3387 +#define wxStyledTextCtrl_SetLexerLanguage 3388 +#define wxStyledTextCtrl_GetProperty 3389 +#define wxStyledTextCtrl_GetStyleBitsNeeded 3390 +#define wxStyledTextCtrl_GetCurrentLine 3391 +#define wxStyledTextCtrl_StyleSetSpec 3392 +#define wxStyledTextCtrl_StyleSetFont 3393 +#define wxStyledTextCtrl_StyleSetFontAttr 3394 +#define wxStyledTextCtrl_StyleSetCharacterSet 3395 +#define wxStyledTextCtrl_StyleSetFontEncoding 3396 +#define wxStyledTextCtrl_CmdKeyExecute 3397 +#define wxStyledTextCtrl_SetMargins 3398 +#define wxStyledTextCtrl_GetSelection 3399 +#define wxStyledTextCtrl_PointFromPosition 3400 +#define wxStyledTextCtrl_ScrollToLine 3401 +#define wxStyledTextCtrl_ScrollToColumn 3402 +#define wxStyledTextCtrl_SetVScrollBar 3403 +#define wxStyledTextCtrl_SetHScrollBar 3404 +#define wxStyledTextCtrl_GetLastKeydownProcessed 3405 +#define wxStyledTextCtrl_SetLastKeydownProcessed 3406 +#define wxStyledTextCtrl_SaveFile 3407 +#define wxStyledTextCtrl_LoadFile 3408 +#define wxStyledTextCtrl_DoDragOver 3409 +#define wxStyledTextCtrl_DoDropText 3410 +#define wxStyledTextCtrl_GetUseAntiAliasing 3411 +#define wxStyledTextCtrl_AddTextRaw 3412 +#define wxStyledTextCtrl_InsertTextRaw 3413 +#define wxStyledTextCtrl_GetCurLineRaw 3414 +#define wxStyledTextCtrl_GetLineRaw 3415 +#define wxStyledTextCtrl_GetSelectedTextRaw 3416 +#define wxStyledTextCtrl_GetTextRangeRaw 3417 +#define wxStyledTextCtrl_SetTextRaw 3418 +#define wxStyledTextCtrl_GetTextRaw 3419 +#define wxStyledTextCtrl_AppendTextRaw 3420 +#define wxArtProvider_GetBitmap 3421 +#define wxArtProvider_GetIcon 3422 +#define wxTreeEvent_GetKeyCode 3423 +#define wxTreeEvent_GetItem 3424 +#define wxTreeEvent_GetKeyEvent 3425 +#define wxTreeEvent_GetLabel 3426 +#define wxTreeEvent_GetOldItem 3427 +#define wxTreeEvent_GetPoint 3428 +#define wxTreeEvent_IsEditCancelled 3429 +#define wxTreeEvent_SetToolTip 3430 +#define wxNotebookEvent_GetOldSelection 3431 +#define wxNotebookEvent_GetSelection 3432 +#define wxNotebookEvent_SetOldSelection 3433 +#define wxNotebookEvent_SetSelection 3434 +#define wxFileDataObject_new 3435 +#define wxFileDataObject_AddFile 3436 +#define wxFileDataObject_GetFilenames 3437 +#define wxFileDataObject_destroy 3438 +#define wxTextDataObject_new 3439 +#define wxTextDataObject_GetTextLength 3440 +#define wxTextDataObject_GetText 3441 +#define wxTextDataObject_SetText 3442 +#define wxTextDataObject_destroy 3443 +#define wxBitmapDataObject_new_1_1 3444 +#define wxBitmapDataObject_new_1_0 3445 +#define wxBitmapDataObject_GetBitmap 3446 +#define wxBitmapDataObject_SetBitmap 3447 +#define wxBitmapDataObject_destroy 3448 +#define wxClipboard_new 3450 +#define wxClipboard_destruct 3451 +#define wxClipboard_AddData 3452 +#define wxClipboard_Clear 3453 +#define wxClipboard_Close 3454 +#define wxClipboard_Flush 3455 +#define wxClipboard_GetData 3456 +#define wxClipboard_IsOpened 3457 +#define wxClipboard_Open 3458 +#define wxClipboard_SetData 3459 +#define wxClipboard_UsePrimarySelection 3461 +#define wxClipboard_IsSupported 3462 +#define wxClipboard_Get 3463 +#define wxSpinEvent_GetPosition 3464 +#define wxSpinEvent_SetPosition 3465 +#define wxSplitterWindow_new_0 3466 +#define wxSplitterWindow_new_2 3467 +#define wxSplitterWindow_destruct 3468 +#define wxSplitterWindow_Create 3469 +#define wxSplitterWindow_GetMinimumPaneSize 3470 +#define wxSplitterWindow_GetSashGravity 3471 +#define wxSplitterWindow_GetSashPosition 3472 +#define wxSplitterWindow_GetSplitMode 3473 +#define wxSplitterWindow_GetWindow1 3474 +#define wxSplitterWindow_GetWindow2 3475 +#define wxSplitterWindow_Initialize 3476 +#define wxSplitterWindow_IsSplit 3477 +#define wxSplitterWindow_ReplaceWindow 3478 +#define wxSplitterWindow_SetSashGravity 3479 +#define wxSplitterWindow_SetSashPosition 3480 +#define wxSplitterWindow_SetSashSize 3481 +#define wxSplitterWindow_SetMinimumPaneSize 3482 +#define wxSplitterWindow_SetSplitMode 3483 +#define wxSplitterWindow_SplitHorizontally 3484 +#define wxSplitterWindow_SplitVertically 3485 +#define wxSplitterWindow_Unsplit 3486 +#define wxSplitterWindow_UpdateSize 3487 +#define wxSplitterEvent_GetSashPosition 3488 +#define wxSplitterEvent_GetX 3489 +#define wxSplitterEvent_GetY 3490 +#define wxSplitterEvent_GetWindowBeingRemoved 3491 +#define wxSplitterEvent_SetSashPosition 3492 +#define wxHtmlWindow_new_0 3493 +#define wxHtmlWindow_new_2 3494 +#define wxHtmlWindow_AppendToPage 3495 +#define wxHtmlWindow_GetOpenedAnchor 3496 +#define wxHtmlWindow_GetOpenedPage 3497 +#define wxHtmlWindow_GetOpenedPageTitle 3498 +#define wxHtmlWindow_GetRelatedFrame 3499 +#define wxHtmlWindow_HistoryBack 3500 +#define wxHtmlWindow_HistoryCanBack 3501 +#define wxHtmlWindow_HistoryCanForward 3502 +#define wxHtmlWindow_HistoryClear 3503 +#define wxHtmlWindow_HistoryForward 3504 +#define wxHtmlWindow_LoadFile 3505 +#define wxHtmlWindow_LoadPage 3506 +#define wxHtmlWindow_SelectAll 3507 +#define wxHtmlWindow_SelectionToText 3508 +#define wxHtmlWindow_SelectLine 3509 +#define wxHtmlWindow_SelectWord 3510 +#define wxHtmlWindow_SetBorders 3511 +#define wxHtmlWindow_SetFonts 3512 +#define wxHtmlWindow_SetPage 3513 +#define wxHtmlWindow_SetRelatedFrame 3514 +#define wxHtmlWindow_SetRelatedStatusBar 3515 +#define wxHtmlWindow_ToText 3516 +#define wxHtmlWindow_destroy 3517 +#define wxHtmlLinkEvent_GetLinkInfo 3518 +#define wxSystemSettings_GetColour 3519 +#define wxSystemSettings_GetFont 3520 +#define wxSystemSettings_GetMetric 3521 +#define wxSystemSettings_GetScreenType 3522 +#define wxSystemOptions_GetOption 3523 +#define wxSystemOptions_GetOptionInt 3524 +#define wxSystemOptions_HasOption 3525 +#define wxSystemOptions_IsFalse 3526 +#define wxSystemOptions_SetOption_2_1 3527 +#define wxSystemOptions_SetOption_2_0 3528 +#define wxAuiNotebookEvent_SetSelection 3529 +#define wxAuiNotebookEvent_GetSelection 3530 +#define wxAuiNotebookEvent_SetOldSelection 3531 +#define wxAuiNotebookEvent_GetOldSelection 3532 +#define wxAuiNotebookEvent_SetDragSource 3533 +#define wxAuiNotebookEvent_GetDragSource 3534 +#define wxAuiManagerEvent_SetManager 3535 +#define wxAuiManagerEvent_GetManager 3536 +#define wxAuiManagerEvent_SetPane 3537 +#define wxAuiManagerEvent_GetPane 3538 +#define wxAuiManagerEvent_SetButton 3539 +#define wxAuiManagerEvent_GetButton 3540 +#define wxAuiManagerEvent_SetDC 3541 +#define wxAuiManagerEvent_GetDC 3542 +#define wxAuiManagerEvent_Veto 3543 +#define wxAuiManagerEvent_GetVeto 3544 +#define wxAuiManagerEvent_SetCanVeto 3545 +#define wxAuiManagerEvent_CanVeto 3546 +#define wxLogNull_new 3547 +#define wxLogNull_destroy 3548 +#define wxTaskBarIcon_new 3549 +#define wxTaskBarIcon_destruct 3550 +#define wxTaskBarIcon_PopupMenu 3551 +#define wxTaskBarIcon_RemoveIcon 3552 +#define wxTaskBarIcon_SetIcon 3553 +#define wxLocale_new_0 3554 +#define wxLocale_new_2 3556 +#define wxLocale_destruct 3557 +#define wxLocale_Init 3559 +#define wxLocale_AddCatalog_1 3560 +#define wxLocale_AddCatalog_3 3561 +#define wxLocale_AddCatalogLookupPathPrefix 3562 +#define wxLocale_GetCanonicalName 3563 +#define wxLocale_GetLanguage 3564 +#define wxLocale_GetLanguageName 3565 +#define wxLocale_GetLocale 3566 +#define wxLocale_GetName 3567 +#define wxLocale_GetString_2 3568 +#define wxLocale_GetString_4 3569 +#define wxLocale_GetHeaderValue 3570 +#define wxLocale_GetSysName 3571 +#define wxLocale_GetSystemEncoding 3572 +#define wxLocale_GetSystemEncodingName 3573 +#define wxLocale_GetSystemLanguage 3574 +#define wxLocale_IsLoaded 3575 +#define wxLocale_IsOk 3576 +#define wxActivateEvent_GetActive 3577 +#define wxPopupWindow_new_2 3579 +#define wxPopupWindow_new_0 3580 +#define wxPopupWindow_destruct 3582 +#define wxPopupWindow_Create 3583 +#define wxPopupWindow_Position 3584 +#define wxPopupTransientWindow_new_0 3585 +#define wxPopupTransientWindow_new_2 3586 +#define wxPopupTransientWindow_destruct 3587 +#define wxPopupTransientWindow_Popup 3588 +#define wxPopupTransientWindow_Dismiss 3589 +#define wxOverlay_new 3590 +#define wxOverlay_destruct 3591 +#define wxOverlay_Reset 3592 +#define wxDCOverlay_new_6 3593 +#define wxDCOverlay_new_2 3594 +#define wxDCOverlay_destruct 3595 +#define wxDCOverlay_Clear 3596 +#define wxDropFilesEvent_GetPosition 3597 +#define wxDropFilesEvent_GetNumberOfFiles 3598 +#define wxDropFilesEvent_GetFiles 3599 diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl index 8dbfe0c30f..a14cc89cee 100644 --- a/lib/wx/include/wx.hrl +++ b/lib/wx/include/wx.hrl @@ -4092,3 +4092,7 @@ -define(wxWINDOW_VARIANT_MINI, 2). -define(wxWINDOW_VARIANT_LARGE, 3). -define(wxWINDOW_VARIANT_MAX, 4). +% From "xmlres.h": wxXmlResourceFlags +-define(wxXRC_USE_LOCALE, 1). +-define(wxXRC_NO_SUBCLASSING, 2). +-define(wxXRC_NO_RELOADING, 4). diff --git a/lib/wx/src/gen/gl.erl b/lib/wx/src/gen/gl.erl index e10b99b10a..3780cca651 100644 --- a/lib/wx/src/gen/gl.erl +++ b/lib/wx/src/gen/gl.erl @@ -283,7 +283,7 @@ call(Op, Args) -> Port = get(opengl_port), _ = erlang:port_control(Port,Op,Args), - rec(). + rec(Op). %% @hidden cast(Op, Args) -> @@ -292,11 +292,15 @@ cast(Op, Args) -> ok. %% @hidden -rec() -> - receive +rec(Op) -> + receive {'_egl_result_', Res} -> Res; - {'_egl_error_', Op, Res} -> error({error,Res,Op}) - end. + {'_egl_error_', Op, Res} -> error({error,Res,Op}); + {'_egl_error_', Other, Res} -> + Err = io_lib:format("~p in op: ~p", [Res, Other]), + error_logger:error_report([{gl, error}, {message, lists:flatten(Err)}]), + rec(Op) + end. %% @hidden send_bin(Bin) when is_binary(Bin) -> diff --git a/lib/wx/src/gen/wxAuiNotebook.erl b/lib/wx/src/gen/wxAuiNotebook.erl index 5d47bc8d6c..adb90c224f 100644 --- a/lib/wx/src/gen/wxAuiNotebook.erl +++ b/lib/wx/src/gen/wxAuiNotebook.erl @@ -45,8 +45,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -350,6 +350,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxBitmapButton.erl b/lib/wx/src/gen/wxBitmapButton.erl index 20d47eb4cd..d0a810bdb9 100644 --- a/lib/wx/src/gen/wxBitmapButton.erl +++ b/lib/wx/src/gen/wxBitmapButton.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -231,6 +231,8 @@ setDefault(This) -> wxButton:setDefault(This). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxButton.erl b/lib/wx/src/gen/wxButton.erl index f16e1a376e..f8e24beffa 100644 --- a/lib/wx/src/gen/wxButton.erl +++ b/lib/wx/src/gen/wxButton.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -180,6 +180,8 @@ destroy(Obj=#wx_ref{type=Type}) -> getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxCalendarCtrl.erl b/lib/wx/src/gen/wxCalendarCtrl.erl index 3d3f3ae242..bf033e9bc0 100644 --- a/lib/wx/src/gen/wxCalendarCtrl.erl +++ b/lib/wx/src/gen/wxCalendarCtrl.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -364,6 +364,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxCheckBox.erl b/lib/wx/src/gen/wxCheckBox.erl index 294831c3a6..5ed49d91b6 100644 --- a/lib/wx/src/gen/wxCheckBox.erl +++ b/lib/wx/src/gen/wxCheckBox.erl @@ -43,8 +43,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -217,6 +217,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxCheckListBox.erl b/lib/wx/src/gen/wxCheckListBox.erl index 758e929696..ddef6a29e2 100644 --- a/lib/wx/src/gen/wxCheckListBox.erl +++ b/lib/wx/src/gen/wxCheckListBox.erl @@ -45,24 +45,24 @@ fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1, getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1, getChildren/1,getClientData/2,getClientSize/1,getContainingSizer/1, - getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1, - getFont/1,getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, - getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSelection/1,getSelections/1, - getSize/1,getSizer/1,getString/2,getStringSelection/1,getTextExtent/2, - getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,hitTest/2,inheritAttributes/1,initDialog/1,insert/3,insert/4, - insertItems/3,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1,isEnabled/1, - isExposed/2,isExposed/3,isExposed/5,isRetained/1,isSelected/2,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, - refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, - reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, - scrollWindow/3,scrollWindow/4,select/2,set/2,setAcceleratorTable/2, + getContentScaleFactor/1,getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1, + getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1, + getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSelection/1,getSelections/1,getSize/1,getSizer/1,getString/2,getStringSelection/1, + getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1, + getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2, + hasTransparentBackground/1,hide/1,hitTest/2,inheritAttributes/1,initDialog/1, + insert/3,insert/4,insertItems/3,invalidateBestSize/1,isDoubleBuffered/1, + isEmpty/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1, + isSelected/2,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1, + makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2, + moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, + popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2, + scrollPages/2,scrollWindow/3,scrollWindow/4,select/2,set/2,setAcceleratorTable/2, setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, setClientData/3,setClientSize/2,setClientSize/3,setContainingSizer/2, setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFirstItem/2, @@ -223,6 +223,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxChoice.erl b/lib/wx/src/gen/wxChoice.erl index 2ce8935895..266a257442 100644 --- a/lib/wx/src/gen/wxChoice.erl +++ b/lib/wx/src/gen/wxChoice.erl @@ -44,36 +44,37 @@ enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, - getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1, - getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1, - getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2, - hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1, - insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, - refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, - reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, - scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2, - setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, - setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, - setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, - setSelection/2,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2, - setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2, - setSizerAndFit/3,setString/3,setStringSelection/2,setThemeEnabled/2, - setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, - setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, - setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, + getClientData/2,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1, + getFont/1,getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, + getScrollRange/2,getScrollThumb/2,getSelection/1,getSize/1,getSizer/1, + getString/2,getStringSelection/1,getTextExtent/2,getTextExtent/3, + getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, + getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, + hide/1,inheritAttributes/1,initDialog/1,insert/3,insert/4,invalidateBestSize/1, + isDoubleBuffered/1,isEmpty/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1, + makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2, + moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, + popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2, + scrollPages/2,scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2, + setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, + setClientData/3,setClientSize/2,setClientSize/3,setContainingSizer/2, + setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1, + setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,setId/2, + setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, + setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, + setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,setSize/2, + setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4, + setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3, + setStringSelection/2,setThemeEnabled/2,setToolTip/2,setTransparent/2, + setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3, + setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2, + shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, validate/1,warpPointer/3]). @@ -237,6 +238,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxChoicebook.erl b/lib/wx/src/gen/wxChoicebook.erl index 61ba0fe47f..c6e0941978 100644 --- a/lib/wx/src/gen/wxChoicebook.erl +++ b/lib/wx/src/gen/wxChoicebook.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -384,6 +384,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxColourDialog.erl b/lib/wx/src/gen/wxColourDialog.erl index 5b8d9f08d5..936c0e5099 100644 --- a/lib/wx/src/gen/wxColourDialog.erl +++ b/lib/wx/src/gen/wxColourDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -223,6 +223,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxColourPickerCtrl.erl b/lib/wx/src/gen/wxColourPickerCtrl.erl index 2fe55018dc..c97b194bc8 100644 --- a/lib/wx/src/gen/wxColourPickerCtrl.erl +++ b/lib/wx/src/gen/wxColourPickerCtrl.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getInternalMargin/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPickerCtrlProportion/1, getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -222,6 +222,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxComboBox.erl b/lib/wx/src/gen/wxComboBox.erl index 3de2721f38..9f8cf77445 100644 --- a/lib/wx/src/gen/wxComboBox.erl +++ b/lib/wx/src/gen/wxComboBox.erl @@ -46,38 +46,38 @@ enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, - getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1, - getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1, - getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2, - hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1, - insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, - refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, - reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, - scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2, - setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, - setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, - setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, - setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, - setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3, - setString/3,setStringSelection/2,setThemeEnabled/2,setToolTip/2,setTransparent/2, - setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3, - setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2, - shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, - transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, - validate/1,warpPointer/3]). + getClientData/2,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1, + getFont/1,getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, + getScrollRange/2,getScrollThumb/2,getSelection/1,getSize/1,getSizer/1, + getString/2,getStringSelection/1,getTextExtent/2,getTextExtent/3, + getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, + getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, + hide/1,inheritAttributes/1,initDialog/1,insert/3,insert/4,invalidateBestSize/1, + isDoubleBuffered/1,isEmpty/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1, + makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2, + moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, + popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2, + scrollPages/2,scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2, + setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, + setClientData/3,setClientSize/2,setClientSize/3,setContainingSizer/2, + setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1, + setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,setId/2, + setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, + setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, + setScrollPos/4,setScrollbar/5,setScrollbar/6,setSize/2,setSize/3,setSize/5, + setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2, + setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3,setStringSelection/2, + setThemeEnabled/2,setToolTip/2,setTransparent/2,setVirtualSize/2, + setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3,setVirtualSizeHints/4, + setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2,shouldInheritColours/1, + show/1,show/2,thaw/1,transferDataFromWindow/1,transferDataToWindow/1, + update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]). -export_type([wxComboBox/0]). %% @hidden @@ -372,6 +372,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxControl.erl b/lib/wx/src/gen/wxControl.erl index df911b0758..6be7574d80 100644 --- a/lib/wx/src/gen/wxControl.erl +++ b/lib/wx/src/gen/wxControl.erl @@ -40,8 +40,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getMaxSize/1,getMinSize/1, getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -97,6 +97,8 @@ setLabel(#wx_ref{type=ThisT,ref=ThisRef},Label) %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxControlWithItems.erl b/lib/wx/src/gen/wxControlWithItems.erl index 9c9769b5e3..47ffa7dcba 100644 --- a/lib/wx/src/gen/wxControlWithItems.erl +++ b/lib/wx/src/gen/wxControlWithItems.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -279,6 +279,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxDatePickerCtrl.erl b/lib/wx/src/gen/wxDatePickerCtrl.erl index 8f1af26cbc..743169c58e 100644 --- a/lib/wx/src/gen/wxDatePickerCtrl.erl +++ b/lib/wx/src/gen/wxDatePickerCtrl.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getInternalMargin/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPickerCtrlProportion/1, getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -198,6 +198,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxDialog.erl b/lib/wx/src/gen/wxDialog.erl index 178efde5c6..72f37df178 100644 --- a/lib/wx/src/gen/wxDialog.erl +++ b/lib/wx/src/gen/wxDialog.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2,getScrollRange/2, @@ -298,6 +298,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxDirDialog.erl b/lib/wx/src/gen/wxDirDialog.erl index c942116fd9..5a2df9821a 100644 --- a/lib/wx/src/gen/wxDirDialog.erl +++ b/lib/wx/src/gen/wxDirDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -231,6 +231,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxDirPickerCtrl.erl b/lib/wx/src/gen/wxDirPickerCtrl.erl index 014e90c120..9bfff7d458 100644 --- a/lib/wx/src/gen/wxDirPickerCtrl.erl +++ b/lib/wx/src/gen/wxDirPickerCtrl.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getInternalMargin/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPickerCtrlProportion/1, getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -215,6 +215,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFileDialog.erl b/lib/wx/src/gen/wxFileDialog.erl index de5d436c11..6032e38a16 100644 --- a/lib/wx/src/gen/wxFileDialog.erl +++ b/lib/wx/src/gen/wxFileDialog.erl @@ -46,8 +46,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -324,6 +324,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFilePickerCtrl.erl b/lib/wx/src/gen/wxFilePickerCtrl.erl index 24941ad87a..3b1943cbee 100644 --- a/lib/wx/src/gen/wxFilePickerCtrl.erl +++ b/lib/wx/src/gen/wxFilePickerCtrl.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getInternalMargin/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPickerCtrlProportion/1, getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -219,6 +219,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFindReplaceDialog.erl b/lib/wx/src/gen/wxFindReplaceDialog.erl index b5cd3350d2..9250c2fa2f 100644 --- a/lib/wx/src/gen/wxFindReplaceDialog.erl +++ b/lib/wx/src/gen/wxFindReplaceDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -227,6 +227,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFontDialog.erl b/lib/wx/src/gen/wxFontDialog.erl index c0ddb9439e..26010aa46b 100644 --- a/lib/wx/src/gen/wxFontDialog.erl +++ b/lib/wx/src/gen/wxFontDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -199,6 +199,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFontPickerCtrl.erl b/lib/wx/src/gen/wxFontPickerCtrl.erl index f87dcd2344..d1234c5589 100644 --- a/lib/wx/src/gen/wxFontPickerCtrl.erl +++ b/lib/wx/src/gen/wxFontPickerCtrl.erl @@ -43,8 +43,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getInternalMargin/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPickerCtrlProportion/1, getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -228,6 +228,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxFrame.erl b/lib/wx/src/gen/wxFrame.erl index 3e33f650d1..1dc6106bfa 100644 --- a/lib/wx/src/gen/wxFrame.erl +++ b/lib/wx/src/gen/wxFrame.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2,getScrollRange/2, @@ -375,6 +375,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxGLCanvas.erl b/lib/wx/src/gen/wxGLCanvas.erl index b31488de4c..8a94d1df26 100644 --- a/lib/wx/src/gen/wxGLCanvas.erl +++ b/lib/wx/src/gen/wxGLCanvas.erl @@ -40,8 +40,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -194,6 +194,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxGauge.erl b/lib/wx/src/gen/wxGauge.erl index a66b98d110..40f7f120b0 100644 --- a/lib/wx/src/gen/wxGauge.erl +++ b/lib/wx/src/gen/wxGauge.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -204,6 +204,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxGenericDirCtrl.erl b/lib/wx/src/gen/wxGenericDirCtrl.erl index 3c13e09359..383d592269 100644 --- a/lib/wx/src/gen/wxGenericDirCtrl.erl +++ b/lib/wx/src/gen/wxGenericDirCtrl.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -297,6 +297,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl index 0cdb37e9e4..b8c94ab555 100644 --- a/lib/wx/src/gen/wxGrid.erl +++ b/lib/wx/src/gen/wxGrid.erl @@ -94,34 +94,34 @@ doPrepareDC/2,dragAcceptFiles/2,enable/1,enable/2,enableScrolling/3, findWindow/2,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1, getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1, - getChildren/1,getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPixelsPerUnit/1,getScrollPos/2,getScrollRange/2, - getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3, - getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2, - raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, - removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3, - scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2, - setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2, - setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, - setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, - setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5, - setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2, - setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2, - setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2, - setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, + getChildren/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPixelsPerUnit/1, + getScrollPos/2,getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1, + getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getViewStart/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1, + initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1, + isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, + move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, + navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, + popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2, + refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2, + screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2, + scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, + setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, + setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, + setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1, + setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, + setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, + setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5, + setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3, + setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2, + setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2, + setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, @@ -2158,6 +2158,8 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxHtmlWindow.erl b/lib/wx/src/gen/wxHtmlWindow.erl index c8a3ed5188..7e3906b9a9 100644 --- a/lib/wx/src/gen/wxHtmlWindow.erl +++ b/lib/wx/src/gen/wxHtmlWindow.erl @@ -48,34 +48,34 @@ doPrepareDC/2,dragAcceptFiles/2,enable/1,enable/2,enableScrolling/3, findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1, getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1, - getChildren/1,getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPixelsPerUnit/1,getScrollPos/2,getScrollRange/2, - getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3, - getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2, - raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, - removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3, - scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2, - setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2, - setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, - setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, - setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5, - setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2, - setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2, - setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2, - setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, + getChildren/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPixelsPerUnit/1, + getScrollPos/2,getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1, + getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getViewStart/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1, + initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1, + isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, + move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, + navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, + popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2, + refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2, + screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2, + scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, + setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, + setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, + setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1, + setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, + setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, + setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5, + setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3, + setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2, + setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2, + setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, @@ -371,6 +371,8 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxListBox.erl b/lib/wx/src/gen/wxListBox.erl index e1c96f2501..86d8d41f36 100644 --- a/lib/wx/src/gen/wxListBox.erl +++ b/lib/wx/src/gen/wxListBox.erl @@ -44,36 +44,37 @@ enable/1,enable/2,findString/2,findString/3,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientData/2,getClientSize/1,getContainingSizer/1,getCount/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, - getSelection/1,getSize/1,getSizer/1,getString/2,getStringSelection/1, - getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1, - getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2, - hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1, - insert/3,insert/4,invalidateBestSize/1,isDoubleBuffered/1,isEmpty/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, - refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, - reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, - scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2,setAutoLayout/2, - setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientData/3, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, - setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, - setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, - setSelection/2,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2, - setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2, - setSizerAndFit/3,setString/3,setStringSelection/2,setThemeEnabled/2, - setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, - setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, - setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, + getClientData/2,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCount/1,getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1, + getFont/1,getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, + getScrollRange/2,getScrollThumb/2,getSelection/1,getSize/1,getSizer/1, + getString/2,getStringSelection/1,getTextExtent/2,getTextExtent/3, + getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, + getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, + hide/1,inheritAttributes/1,initDialog/1,insert/3,insert/4,invalidateBestSize/1, + isDoubleBuffered/1,isEmpty/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1, + makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2, + moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, + popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2, + scrollPages/2,scrollWindow/3,scrollWindow/4,select/2,setAcceleratorTable/2, + setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, + setClientData/3,setClientSize/2,setClientSize/3,setContainingSizer/2, + setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1, + setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,setId/2, + setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, + setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, + setScrollPos/4,setScrollbar/5,setScrollbar/6,setSelection/2,setSize/2, + setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4, + setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setString/3, + setStringSelection/2,setThemeEnabled/2,setToolTip/2,setTransparent/2, + setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3, + setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2, + shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, validate/1,warpPointer/3]). @@ -280,6 +281,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxListCtrl.erl b/lib/wx/src/gen/wxListCtrl.erl index 0c2e9d0d0a..10dc76f276 100644 --- a/lib/wx/src/gen/wxListCtrl.erl +++ b/lib/wx/src/gen/wxListCtrl.erl @@ -55,8 +55,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -875,6 +875,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxListView.erl b/lib/wx/src/gen/wxListView.erl index b2865ff7c6..adba629d5a 100644 --- a/lib/wx/src/gen/wxListView.erl +++ b/lib/wx/src/gen/wxListView.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -169,6 +169,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxListbook.erl b/lib/wx/src/gen/wxListbook.erl index d27efb2500..e2ea559587 100644 --- a/lib/wx/src/gen/wxListbook.erl +++ b/lib/wx/src/gen/wxListbook.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -384,6 +384,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMDIChildFrame.erl b/lib/wx/src/gen/wxMDIChildFrame.erl index 6ff47259b4..0d388c016a 100644 --- a/lib/wx/src/gen/wxMDIChildFrame.erl +++ b/lib/wx/src/gen/wxMDIChildFrame.erl @@ -45,42 +45,42 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, - getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getStatusBar/1, - getStatusBarPane/1,getTextExtent/2,getTextExtent/3,getTitle/1,getToolBar/1, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1, - isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3, - isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1, - isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1, - makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2, - raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, - removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, - screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3, - scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2, - setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, - setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, - setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2, - setForegroundColour/2,setHelpText/2,setIcon/2,setIcons/2,setId/2,setLabel/2, - setMaxSize/2,setMenuBar/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, - setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, - setScrollPos/4,setScrollbar/5,setScrollbar/6,setShape/2,setSize/2, - setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4, - setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setStatusBar/2, - setStatusBarPane/2,setStatusText/2,setStatusText/3,setStatusWidths/2, - setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2,setTransparent/2, - setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2,setVirtualSizeHints/3, - setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2,setWindowVariant/2, - shouldInheritColours/1,show/1,show/2,showFullScreen/2,showFullScreen/3, - thaw/1,transferDataFromWindow/1,transferDataToWindow/1,update/1,updateWindowUI/1, - updateWindowUI/2,validate/1,warpPointer/3]). + getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getIcon/1,getIcons/1,getId/1,getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getStatusBar/1,getStatusBarPane/1,getTextExtent/2, + getTextExtent/3,getTitle/1,getToolBar/1,getToolTip/1,getUpdateRegion/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2, + inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1, + isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, + move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, + navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, + popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2,raise/1,refresh/1, + refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, + reparent/2,requestUserAttention/1,requestUserAttention/2,screenToClient/1, + screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4, + sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2, + setBackgroundStyle/2,setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2, + setCursor/2,setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1, + setFocusFromKbd/1,setFont/2,setForegroundColour/2,setHelpText/2,setIcon/2, + setIcons/2,setId/2,setLabel/2,setMaxSize/2,setMenuBar/2,setMinSize/2, + setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, + setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, + setShape/2,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, + setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2,setSizerAndFit/3, + setStatusBar/2,setStatusBarPane/2,setStatusText/2,setStatusText/3, + setStatusWidths/2,setThemeEnabled/2,setTitle/2,setToolBar/2,setToolTip/2, + setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, + setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, + setWindowVariant/2,shouldInheritColours/1,show/1,show/2,showFullScreen/2, + showFullScreen/3,thaw/1,transferDataFromWindow/1,transferDataToWindow/1, + update/1,updateWindowUI/1,updateWindowUI/2,validate/1,warpPointer/3]). -export_type([wxMDIChildFrame/0]). %% @hidden @@ -275,6 +275,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMDIClientWindow.erl b/lib/wx/src/gen/wxMDIClientWindow.erl index a97b8ab49d..4fc080c64d 100644 --- a/lib/wx/src/gen/wxMDIClientWindow.erl +++ b/lib/wx/src/gen/wxMDIClientWindow.erl @@ -40,8 +40,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -136,6 +136,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMDIParentFrame.erl b/lib/wx/src/gen/wxMDIParentFrame.erl index f4d06a2658..59f24a1b40 100644 --- a/lib/wx/src/gen/wxMDIParentFrame.erl +++ b/lib/wx/src/gen/wxMDIParentFrame.erl @@ -46,24 +46,25 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, - getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getStatusBar/1, - getStatusBarPane/1,getTextExtent/2,getTextExtent/3,getTitle/1,getToolBar/1, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1, - isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3, - isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1, - isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1, - makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2, - moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, - popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, - processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3, - releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, + getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getIcon/1,getIcons/1,getId/1,getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getStatusBar/1,getStatusBarPane/1,getTextExtent/2, + getTextExtent/3,getTitle/1,getToolBar/1,getToolTip/1,getUpdateRegion/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2, + inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1, + isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1, + maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, + navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, + popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3, scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, @@ -313,6 +314,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMenuBar.erl b/lib/wx/src/gen/wxMenuBar.erl index bb976fd0ba..fa613c9f3b 100644 --- a/lib/wx/src/gen/wxMenuBar.erl +++ b/lib/wx/src/gen/wxMenuBar.erl @@ -44,23 +44,24 @@ dragAcceptFiles/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1, getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1, getCharHeight/1,getCharWidth/1,getChildren/1,getClientSize/1,getContainingSizer/1, - getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, - getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, - getId/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, - getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2,getScrollRange/2, - getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, - isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, - layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, - move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, - navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, - popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2, - refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1, - screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4, - setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2, - setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, + getContentScaleFactor/1,getCursor/1,getDropTarget/1,getEventHandler/1, + getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1, + getHandle/1,getHelpText/1,getId/1,getMaxSize/1,getMinSize/1,getName/1, + getParent/1,getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1, + getScrollPos/2,getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1, + getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1, + getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1,hasScrollbar/2, + hasTransparentBackground/1,hide/1,inheritAttributes/1,initDialog/1, + invalidateBestSize/1,isDoubleBuffered/1,isExposed/2,isExposed/3,isExposed/5, + isRetained/1,isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1, + makeModal/1,makeModal/2,move/2,move/3,move/4,moveAfterInTabOrder/2, + moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, + popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scrollLines/2, + scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2, + setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, + setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setMaxSize/2, setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, @@ -340,6 +341,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMessageDialog.erl b/lib/wx/src/gen/wxMessageDialog.erl index 46a832198c..a63f66741b 100644 --- a/lib/wx/src/gen/wxMessageDialog.erl +++ b/lib/wx/src/gen/wxMessageDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -192,6 +192,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMiniFrame.erl b/lib/wx/src/gen/wxMiniFrame.erl index a13ff18d9e..37dc2f2e04 100644 --- a/lib/wx/src/gen/wxMiniFrame.erl +++ b/lib/wx/src/gen/wxMiniFrame.erl @@ -44,24 +44,25 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, - getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getStatusBar/1, - getStatusBarPane/1,getTextExtent/2,getTextExtent/3,getTitle/1,getToolBar/1, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1, - isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3, - isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1, - isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1, - makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2, - moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, - popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, - processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3, - releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, + getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getIcon/1,getIcons/1,getId/1,getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getStatusBar/1,getStatusBarPane/1,getTextExtent/2, + getTextExtent/3,getTitle/1,getToolBar/1,getToolTip/1,getUpdateRegion/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2, + inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1, + isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1, + maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, + navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, + popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3, scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, @@ -241,6 +242,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxMultiChoiceDialog.erl b/lib/wx/src/gen/wxMultiChoiceDialog.erl index 9b3129cf53..eef15d561e 100644 --- a/lib/wx/src/gen/wxMultiChoiceDialog.erl +++ b/lib/wx/src/gen/wxMultiChoiceDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -217,6 +217,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxNotebook.erl b/lib/wx/src/gen/wxNotebook.erl index 3a65cf54cd..d7d1b0f87f 100644 --- a/lib/wx/src/gen/wxNotebook.erl +++ b/lib/wx/src/gen/wxNotebook.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -409,6 +409,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl index 9dcf124575..fc48d569af 100644 --- a/lib/wx/src/gen/wxPanel.erl +++ b/lib/wx/src/gen/wxPanel.erl @@ -40,8 +40,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -155,6 +155,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPasswordEntryDialog.erl b/lib/wx/src/gen/wxPasswordEntryDialog.erl index 5913834bb8..4667376783 100644 --- a/lib/wx/src/gen/wxPasswordEntryDialog.erl +++ b/lib/wx/src/gen/wxPasswordEntryDialog.erl @@ -45,8 +45,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -201,6 +201,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPickerBase.erl b/lib/wx/src/gen/wxPickerBase.erl index 50e21c72b3..0ea3a36d33 100644 --- a/lib/wx/src/gen/wxPickerBase.erl +++ b/lib/wx/src/gen/wxPickerBase.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -214,6 +214,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPopupTransientWindow.erl b/lib/wx/src/gen/wxPopupTransientWindow.erl index 00f133b952..6ec2fcae62 100644 --- a/lib/wx/src/gen/wxPopupTransientWindow.erl +++ b/lib/wx/src/gen/wxPopupTransientWindow.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -147,6 +147,8 @@ destroy(Obj=#wx_ref{type=Type}) -> position(This,PtOrigin,Size) -> wxPopupWindow:position(This,PtOrigin,Size). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPopupWindow.erl b/lib/wx/src/gen/wxPopupWindow.erl index e95d447d22..ddf1033841 100644 --- a/lib/wx/src/gen/wxPopupWindow.erl +++ b/lib/wx/src/gen/wxPopupWindow.erl @@ -40,8 +40,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -143,6 +143,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPreviewCanvas.erl b/lib/wx/src/gen/wxPreviewCanvas.erl index b1c6832aa9..4e869dd6f2 100644 --- a/lib/wx/src/gen/wxPreviewCanvas.erl +++ b/lib/wx/src/gen/wxPreviewCanvas.erl @@ -43,34 +43,34 @@ doPrepareDC/2,dragAcceptFiles/2,enable/1,enable/2,enableScrolling/3, findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1,getBackgroundColour/1, getBackgroundStyle/1,getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1, - getChildren/1,getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPixelsPerUnit/1,getScrollPos/2,getScrollRange/2, - getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3, - getToolTip/1,getUpdateRegion/1,getViewStart/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2, - raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, - removeChild/2,reparent/2,screenToClient/1,screenToClient/2,scroll/3, - scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4,setAcceleratorTable/2, - setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2,setCaret/2, - setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFocusIgnoringChildren/1,setFont/2,setForegroundColour/2,setHelpText/2, - setId/2,setLabel/2,setMaxSize/2,setMinSize/2,setName/2,setOwnBackgroundColour/2, - setOwnFont/2,setOwnForegroundColour/2,setPalette/2,setScrollPos/3, - setScrollPos/4,setScrollRate/3,setScrollbar/5,setScrollbar/6,setScrollbars/5, - setScrollbars/6,setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2, - setSizeHints/3,setSizeHints/4,setSizer/2,setSizer/3,setSizerAndFit/2, - setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2,setToolTip/2, - setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, + getChildren/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPixelsPerUnit/1, + getScrollPos/2,getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1, + getTextExtent/2,getTextExtent/3,getToolTip/1,getUpdateRegion/1,getViewStart/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1, + initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1, + isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, + move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, + navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, + popupMenu/2,popupMenu/3,popupMenu/4,prepareDC/2,raise/1,refresh/1,refresh/2, + refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2,reparent/2, + screenToClient/1,screenToClient/2,scroll/3,scrollLines/2,scrollPages/2, + scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, + setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, + setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, + setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFocusIgnoringChildren/1, + setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, + setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, + setPalette/2,setScrollPos/3,setScrollPos/4,setScrollRate/3,setScrollbar/5, + setScrollbar/6,setScrollbars/5,setScrollbars/6,setSize/2,setSize/3, + setSize/5,setSize/6,setSizeHints/2,setSizeHints/3,setSizeHints/4,setSizer/2, + setSizer/3,setSizerAndFit/2,setSizerAndFit/3,setTargetWindow/2,setThemeEnabled/2, + setToolTip/2,setTransparent/2,setVirtualSize/2,setVirtualSize/3,setVirtualSizeHints/2, setVirtualSizeHints/3,setVirtualSizeHints/4,setWindowStyle/2,setWindowStyleFlag/2, setWindowVariant/2,shouldInheritColours/1,show/1,show/2,thaw/1,transferDataFromWindow/1, transferDataToWindow/1,update/1,updateWindowUI/1,updateWindowUI/2, @@ -121,6 +121,8 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl index 46055202c4..cf17f40527 100644 --- a/lib/wx/src/gen/wxPreviewControlBar.erl +++ b/lib/wx/src/gen/wxPreviewControlBar.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -153,6 +153,8 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPreviewFrame.erl b/lib/wx/src/gen/wxPreviewFrame.erl index f509faa503..022b0cd46e 100644 --- a/lib/wx/src/gen/wxPreviewFrame.erl +++ b/lib/wx/src/gen/wxPreviewFrame.erl @@ -45,24 +45,25 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, - getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getStatusBar/1, - getStatusBarPane/1,getTextExtent/2,getTextExtent/3,getTitle/1,getToolBar/1, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1, - isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3, - isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1, - isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1, - makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2, - moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, - popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, - processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3, - releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, + getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getIcon/1,getIcons/1,getId/1,getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getStatusBar/1,getStatusBarPane/1,getTextExtent/2, + getTextExtent/3,getTitle/1,getToolBar/1,getToolTip/1,getUpdateRegion/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2, + inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1, + isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1, + maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, + navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, + popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3, scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, @@ -244,6 +245,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxPrintDialog.erl b/lib/wx/src/gen/wxPrintDialog.erl index f41383c829..4024036166 100644 --- a/lib/wx/src/gen/wxPrintDialog.erl +++ b/lib/wx/src/gen/wxPrintDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -214,6 +214,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxProgressDialog.erl b/lib/wx/src/gen/wxProgressDialog.erl index cadb8497dd..a17cb0383a 100644 --- a/lib/wx/src/gen/wxProgressDialog.erl +++ b/lib/wx/src/gen/wxProgressDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -229,6 +229,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxRadioBox.erl b/lib/wx/src/gen/wxRadioBox.erl index 34e7f038ec..13d3a496ac 100644 --- a/lib/wx/src/gen/wxRadioBox.erl +++ b/lib/wx/src/gen/wxRadioBox.erl @@ -44,26 +44,26 @@ dragAcceptFiles/2,findWindow/2,fit/1,fitInside/1,freeze/1,getAcceleratorTable/1, getBackgroundColour/1,getBackgroundStyle/1,getBestSize/1,getCaret/1, getCharHeight/1,getCharWidth/1,getChildren/1,getClientSize/1,getContainingSizer/1, - getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, - getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, - getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2, - getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, - isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, - isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, - move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, - navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, - popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, - refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, - reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, - scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, - setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, - setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, - setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2, - setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, + getContentScaleFactor/1,getCursor/1,getDropTarget/1,getEventHandler/1, + getExtraStyle/1,getFont/1,getForegroundColour/1,getGrandParent/1, + getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,getToolTip/1, + getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1, + hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1, + initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1, + isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, + move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, + navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1,popEventHandler/2, + popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2, + refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1, + screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4, + setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2, + setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, + setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, + setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, @@ -349,6 +349,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxRadioButton.erl b/lib/wx/src/gen/wxRadioButton.erl index f90afc82a5..b5635e8afe 100644 --- a/lib/wx/src/gen/wxRadioButton.erl +++ b/lib/wx/src/gen/wxRadioButton.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -172,6 +172,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSashLayoutWindow.erl b/lib/wx/src/gen/wxSashLayoutWindow.erl index 6c0c0a389f..a0e240b25d 100644 --- a/lib/wx/src/gen/wxSashLayoutWindow.erl +++ b/lib/wx/src/gen/wxSashLayoutWindow.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMaximumSizeX/1,getMaximumSizeY/1,getMinSize/1,getMinimumSizeX/1, getMinimumSizeY/1,getName/1,getParent/1,getPosition/1,getRect/1,getSashVisible/2, @@ -221,6 +221,8 @@ getMaximumSizeX(This) -> wxSashWindow:getMaximumSizeX(This). getSashVisible(This,Edge) -> wxSashWindow:getSashVisible(This,Edge). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSashWindow.erl b/lib/wx/src/gen/wxSashWindow.erl index b39e00fce2..5e66d79b11 100644 --- a/lib/wx/src/gen/wxSashWindow.erl +++ b/lib/wx/src/gen/wxSashWindow.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -208,6 +208,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxScrollBar.erl b/lib/wx/src/gen/wxScrollBar.erl index 392c7af7a4..a1138725cd 100644 --- a/lib/wx/src/gen/wxScrollBar.erl +++ b/lib/wx/src/gen/wxScrollBar.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -216,6 +216,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxScrolledWindow.erl b/lib/wx/src/gen/wxScrolledWindow.erl index 271c7f5c5a..e3f6122cfa 100644 --- a/lib/wx/src/gen/wxScrolledWindow.erl +++ b/lib/wx/src/gen/wxScrolledWindow.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -260,6 +260,8 @@ setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSingleChoiceDialog.erl b/lib/wx/src/gen/wxSingleChoiceDialog.erl index d5e4977abc..8b2991da4d 100644 --- a/lib/wx/src/gen/wxSingleChoiceDialog.erl +++ b/lib/wx/src/gen/wxSingleChoiceDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -224,6 +224,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSlider.erl b/lib/wx/src/gen/wxSlider.erl index 81a49d3506..7bdff00589 100644 --- a/lib/wx/src/gen/wxSlider.erl +++ b/lib/wx/src/gen/wxSlider.erl @@ -43,8 +43,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -248,6 +248,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSpinButton.erl b/lib/wx/src/gen/wxSpinButton.erl index e555875eb4..6c24176974 100644 --- a/lib/wx/src/gen/wxSpinButton.erl +++ b/lib/wx/src/gen/wxSpinButton.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -196,6 +196,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSpinCtrl.erl b/lib/wx/src/gen/wxSpinCtrl.erl index a1d359b117..c229b4caf1 100644 --- a/lib/wx/src/gen/wxSpinCtrl.erl +++ b/lib/wx/src/gen/wxSpinCtrl.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -233,6 +233,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSplashScreen.erl b/lib/wx/src/gen/wxSplashScreen.erl index 68eeb40f73..9729b3529b 100644 --- a/lib/wx/src/gen/wxSplashScreen.erl +++ b/lib/wx/src/gen/wxSplashScreen.erl @@ -44,24 +44,25 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getCursor/1, - getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, - getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1,getName/1,getParent/1, - getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, - getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getStatusBar/1, - getStatusBarPane/1,getTextExtent/2,getTextExtent/3,getTitle/1,getToolBar/1, - getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, - getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, - hide/1,iconize/1,iconize/2,inheritAttributes/1,initDialog/1,invalidateBestSize/1, - isActive/1,isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3, - isExposed/5,isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1, - isShown/1,isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1, - makeModal/2,maximize/1,maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2, - moveBeforeInTabOrder/2,navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1, - popEventHandler/1,popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4, - processCommand/2,raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3, - releaseMouse/1,removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, + getClientAreaOrigin/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getIcon/1,getIcons/1,getId/1,getLabel/1,getMaxSize/1,getMenuBar/1,getMinSize/1, + getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, + getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, + getSize/1,getSizer/1,getStatusBar/1,getStatusBarPane/1,getTextExtent/2, + getTextExtent/3,getTitle/1,getToolBar/1,getToolTip/1,getUpdateRegion/1, + getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1,hasCapture/1, + hasScrollbar/2,hasTransparentBackground/1,hide/1,iconize/1,iconize/2, + inheritAttributes/1,initDialog/1,invalidateBestSize/1,isActive/1, + isDoubleBuffered/1,isEnabled/1,isExposed/2,isExposed/3,isExposed/5, + isFullScreen/1,isIconized/1,isMaximized/1,isRetained/1,isShown/1,isTopLevel/1, + layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,maximize/1, + maximize/2,move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, + navigate/1,navigate/2,pageDown/1,pageUp/1,parent_class/1,popEventHandler/1, + popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,processCommand/2, + raise/1,refresh/1,refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1, + removeChild/2,reparent/2,requestUserAttention/1,requestUserAttention/2, screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3, scrollWindow/4,sendSizeEvent/1,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, @@ -230,6 +231,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxSplitterWindow.erl b/lib/wx/src/gen/wxSplitterWindow.erl index aeda0daa6e..fb2f355f43 100644 --- a/lib/wx/src/gen/wxSplitterWindow.erl +++ b/lib/wx/src/gen/wxSplitterWindow.erl @@ -45,8 +45,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -359,6 +359,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStaticBitmap.erl b/lib/wx/src/gen/wxStaticBitmap.erl index 9a46e3125e..64d8cc4364 100644 --- a/lib/wx/src/gen/wxStaticBitmap.erl +++ b/lib/wx/src/gen/wxStaticBitmap.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -168,6 +168,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStaticBox.erl b/lib/wx/src/gen/wxStaticBox.erl index 8a789d2d62..728c02e9e4 100644 --- a/lib/wx/src/gen/wxStaticBox.erl +++ b/lib/wx/src/gen/wxStaticBox.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -151,6 +151,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStaticLine.erl b/lib/wx/src/gen/wxStaticLine.erl index b31743eb03..3c648b7746 100644 --- a/lib/wx/src/gen/wxStaticLine.erl +++ b/lib/wx/src/gen/wxStaticLine.erl @@ -42,8 +42,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -168,6 +168,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStaticText.erl b/lib/wx/src/gen/wxStaticText.erl index 83e83305fb..34216f975f 100644 --- a/lib/wx/src/gen/wxStaticText.erl +++ b/lib/wx/src/gen/wxStaticText.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getMaxSize/1,getMinSize/1, getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -174,6 +174,8 @@ destroy(Obj=#wx_ref{type=Type}) -> %% From wxControl %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl index db86136f5a..8d9f77c209 100644 --- a/lib/wx/src/gen/wxStatusBar.erl +++ b/lib/wx/src/gen/wxStatusBar.erl @@ -43,8 +43,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -296,6 +296,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxStyledTextCtrl.erl b/lib/wx/src/gen/wxStyledTextCtrl.erl index c684141224..7e45245a72 100644 --- a/lib/wx/src/gen/wxStyledTextCtrl.erl +++ b/lib/wx/src/gen/wxStyledTextCtrl.erl @@ -143,8 +143,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -4079,6 +4079,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxTextCtrl.erl b/lib/wx/src/gen/wxTextCtrl.erl index 7ffb161cf5..3acc61ce02 100644 --- a/lib/wx/src/gen/wxTextCtrl.erl +++ b/lib/wx/src/gen/wxTextCtrl.erl @@ -49,8 +49,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -598,6 +598,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxTextEntryDialog.erl b/lib/wx/src/gen/wxTextEntryDialog.erl index d0b55fd769..c43a2d12b8 100644 --- a/lib/wx/src/gen/wxTextEntryDialog.erl +++ b/lib/wx/src/gen/wxTextEntryDialog.erl @@ -44,8 +44,8 @@ enable/1,enable/2,endModal/2,findWindow/2,fit/1,fitInside/1,freeze/1, getAcceleratorTable/1,getAffirmativeId/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getIcon/1,getIcons/1,getId/1, getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1,getPosition/1, getRect/1,getReturnCode/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, @@ -212,6 +212,8 @@ getIcons(This) -> wxTopLevelWindow:getIcons(This). getIcon(This) -> wxTopLevelWindow:getIcon(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxToggleButton.erl b/lib/wx/src/gen/wxToggleButton.erl index 6a41cef9ae..b82ff4fe68 100644 --- a/lib/wx/src/gen/wxToggleButton.erl +++ b/lib/wx/src/gen/wxToggleButton.erl @@ -41,8 +41,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -172,6 +172,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxToolBar.erl b/lib/wx/src/gen/wxToolBar.erl index a3d337ef59..e2835bf7c4 100644 --- a/lib/wx/src/gen/wxToolBar.erl +++ b/lib/wx/src/gen/wxToolBar.erl @@ -50,8 +50,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -674,6 +674,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxToolbook.erl b/lib/wx/src/gen/wxToolbook.erl index 787d4a468e..c22719680c 100644 --- a/lib/wx/src/gen/wxToolbook.erl +++ b/lib/wx/src/gen/wxToolbook.erl @@ -46,8 +46,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -384,6 +384,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxTopLevelWindow.erl b/lib/wx/src/gen/wxTopLevelWindow.erl index 96135052bc..64713099f6 100644 --- a/lib/wx/src/gen/wxTopLevelWindow.erl +++ b/lib/wx/src/gen/wxTopLevelWindow.erl @@ -44,8 +44,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -302,6 +302,8 @@ showFullScreen(#wx_ref{type=ThisT,ref=ThisRef},Show, Options) %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxTreeCtrl.erl b/lib/wx/src/gen/wxTreeCtrl.erl index 68ea754bef..373cb4c77f 100644 --- a/lib/wx/src/gen/wxTreeCtrl.erl +++ b/lib/wx/src/gen/wxTreeCtrl.erl @@ -62,8 +62,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -946,6 +946,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxTreebook.erl b/lib/wx/src/gen/wxTreebook.erl index 956652f221..dc95730224 100644 --- a/lib/wx/src/gen/wxTreebook.erl +++ b/lib/wx/src/gen/wxTreebook.erl @@ -47,8 +47,8 @@ dragAcceptFiles/2,enable/1,enable/2,findWindow/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCaret/1,getCharHeight/1,getCharWidth/1,getChildren/1, - getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, + getClientSize/1,getContainingSizer/1,getContentScaleFactor/1,getCursor/1, + getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, @@ -440,6 +440,8 @@ setLabel(This,Label) -> wxControl:setLabel(This,Label). getLabel(This) -> wxControl:getLabel(This). %% From wxWindow %% @hidden +getContentScaleFactor(This) -> wxWindow:getContentScaleFactor(This). +%% @hidden setDoubleBuffered(This,On) -> wxWindow:setDoubleBuffered(This,On). %% @hidden isDoubleBuffered(This) -> wxWindow:isDoubleBuffered(This). diff --git a/lib/wx/src/gen/wxWindow.erl b/lib/wx/src/gen/wxWindow.erl index be847861b1..9ace4533c8 100644 --- a/lib/wx/src/gen/wxWindow.erl +++ b/lib/wx/src/gen/wxWindow.erl @@ -37,26 +37,27 @@ findWindowByLabel/2,findWindowByName/1,findWindowByName/2,fit/1,fitInside/1, freeze/1,getAcceleratorTable/1,getBackgroundColour/1,getBackgroundStyle/1, getBestSize/1,getCapture/0,getCaret/1,getCharHeight/1,getCharWidth/1, - getChildren/1,getClientSize/1,getContainingSizer/1,getCursor/1,getDropTarget/1, - getEventHandler/1,getExtraStyle/1,getFont/1,getForegroundColour/1, - getGrandParent/1,getHandle/1,getHelpText/1,getId/1,getLabel/1,getMaxSize/1, - getMinSize/1,getName/1,getParent/1,getPosition/1,getRect/1,getScreenPosition/1, - getScreenRect/1,getScrollPos/2,getScrollRange/2,getScrollThumb/2, - getSize/1,getSizer/1,getTextExtent/2,getTextExtent/3,getToolTip/1, - getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1,getWindowVariant/1, - hasCapture/1,hasScrollbar/2,hasTransparentBackground/1,hide/1,inheritAttributes/1, - initDialog/1,invalidateBestSize/1,isDoubleBuffered/1,isEnabled/1, - isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1,isTopLevel/1, - layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2,move/2, - move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2,navigate/1, - navigate/2,new/0,new/2,new/3,pageDown/1,pageUp/1,popEventHandler/1,popEventHandler/2, - popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1,refresh/2,refreshRect/2, - refreshRect/3,releaseMouse/1,removeChild/2,reparent/2,screenToClient/1, - screenToClient/2,scrollLines/2,scrollPages/2,scrollWindow/3,scrollWindow/4, - setAcceleratorTable/2,setAutoLayout/2,setBackgroundColour/2,setBackgroundStyle/2, - setCaret/2,setClientSize/2,setClientSize/3,setContainingSizer/2,setCursor/2, - setDoubleBuffered/2,setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1, - setFont/2,setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, + getChildren/1,getClientSize/1,getContainingSizer/1,getContentScaleFactor/1, + getCursor/1,getDropTarget/1,getEventHandler/1,getExtraStyle/1,getFont/1, + getForegroundColour/1,getGrandParent/1,getHandle/1,getHelpText/1, + getId/1,getLabel/1,getMaxSize/1,getMinSize/1,getName/1,getParent/1, + getPosition/1,getRect/1,getScreenPosition/1,getScreenRect/1,getScrollPos/2, + getScrollRange/2,getScrollThumb/2,getSize/1,getSizer/1,getTextExtent/2, + getTextExtent/3,getToolTip/1,getUpdateRegion/1,getVirtualSize/1,getWindowStyleFlag/1, + getWindowVariant/1,hasCapture/1,hasScrollbar/2,hasTransparentBackground/1, + hide/1,inheritAttributes/1,initDialog/1,invalidateBestSize/1,isDoubleBuffered/1, + isEnabled/1,isExposed/2,isExposed/3,isExposed/5,isRetained/1,isShown/1, + isTopLevel/1,layout/1,lineDown/1,lineUp/1,lower/1,makeModal/1,makeModal/2, + move/2,move/3,move/4,moveAfterInTabOrder/2,moveBeforeInTabOrder/2, + navigate/1,navigate/2,new/0,new/2,new/3,pageDown/1,pageUp/1,popEventHandler/1, + popEventHandler/2,popupMenu/2,popupMenu/3,popupMenu/4,raise/1,refresh/1, + refresh/2,refreshRect/2,refreshRect/3,releaseMouse/1,removeChild/2, + reparent/2,screenToClient/1,screenToClient/2,scrollLines/2,scrollPages/2, + scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, + setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, + setClientSize/3,setContainingSizer/2,setCursor/2,setDoubleBuffered/2, + setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2, + setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/2, setMinSize/2,setName/2,setOwnBackgroundColour/2,setOwnFont/2,setOwnForegroundColour/2, setPalette/2,setScrollPos/3,setScrollPos/4,setScrollbar/5,setScrollbar/6, setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, @@ -1953,6 +1954,14 @@ setDoubleBuffered(#wx_ref{type=ThisT,ref=ThisRef},On) wxe_util:cast(?wxWindow_SetDoubleBuffered, <<ThisRef:32/?UI,(wxe_util:from_bool(On)):32/?UI>>). +%% @doc See <a href="http://www.wxwidgets.org/manuals/2.8.12/wx_wxwindow.html#wxwindowgetcontentscalefactor">external documentation</a>. +-spec getContentScaleFactor(This) -> number() when + This::wxWindow(). +getContentScaleFactor(#wx_ref{type=ThisT,ref=ThisRef}) -> + ?CLASS(ThisT,wxWindow), + wxe_util:call(?wxWindow_GetContentScaleFactor, + <<ThisRef:32/?UI>>). + %% @doc Destroys this object, do not use object again -spec destroy(This::wxWindow()) -> 'ok'. destroy(Obj=#wx_ref{type=Type}) -> diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl index d3314f03a9..58cb5298e6 100644 --- a/lib/wx/src/gen/wxe_debug.hrl +++ b/lib/wx/src/gen/wxe_debug.hrl @@ -197,3185 +197,3186 @@ wxdebug_table() -> {286, {wxWindow, canSetTransparent, 0}}, {287, {wxWindow, isDoubleBuffered, 0}}, {288, {wxWindow, setDoubleBuffered, 1}}, - {289, {wxTopLevelWindow, getIcon, 0}}, - {290, {wxTopLevelWindow, getIcons, 0}}, - {291, {wxTopLevelWindow, getTitle, 0}}, - {292, {wxTopLevelWindow, isActive, 0}}, - {293, {wxTopLevelWindow, iconize, 1}}, - {294, {wxTopLevelWindow, isFullScreen, 0}}, - {295, {wxTopLevelWindow, isIconized, 0}}, - {296, {wxTopLevelWindow, isMaximized, 0}}, - {297, {wxTopLevelWindow, maximize, 1}}, - {298, {wxTopLevelWindow, requestUserAttention, 1}}, - {299, {wxTopLevelWindow, setIcon, 1}}, - {300, {wxTopLevelWindow, setIcons, 1}}, - {301, {wxTopLevelWindow, centerOnScreen, 1}}, - {302, {wxTopLevelWindow, centreOnScreen, 1}}, - {304, {wxTopLevelWindow, setShape, 1}}, - {305, {wxTopLevelWindow, setTitle, 1}}, - {306, {wxTopLevelWindow, showFullScreen, 2}}, - {308, {wxFrame, new_4, 4}}, - {309, {wxFrame, new_0, 0}}, - {311, {wxFrame, destruct, 0}}, - {312, {wxFrame, create, 4}}, - {313, {wxFrame, createStatusBar, 1}}, - {314, {wxFrame, createToolBar, 1}}, - {315, {wxFrame, getClientAreaOrigin, 0}}, - {316, {wxFrame, getMenuBar, 0}}, - {317, {wxFrame, getStatusBar, 0}}, - {318, {wxFrame, getStatusBarPane, 0}}, - {319, {wxFrame, getToolBar, 0}}, - {320, {wxFrame, processCommand, 1}}, - {321, {wxFrame, sendSizeEvent, 0}}, - {322, {wxFrame, setMenuBar, 1}}, - {323, {wxFrame, setStatusBar, 1}}, - {324, {wxFrame, setStatusBarPane, 1}}, - {325, {wxFrame, setStatusText, 2}}, - {326, {wxFrame, setStatusWidths, 2}}, - {327, {wxFrame, setToolBar, 1}}, - {328, {wxMiniFrame, new_0, 0}}, - {329, {wxMiniFrame, new_4, 4}}, - {330, {wxMiniFrame, create, 4}}, - {331, {wxMiniFrame, 'Destroy', undefined}}, - {332, {wxSplashScreen, new_0, 0}}, - {333, {wxSplashScreen, new_6, 6}}, - {334, {wxSplashScreen, destruct, 0}}, - {335, {wxSplashScreen, getSplashStyle, 0}}, - {336, {wxSplashScreen, getTimeout, 0}}, - {337, {wxPanel, new_0, 0}}, - {338, {wxPanel, new_6, 6}}, - {339, {wxPanel, new_2, 2}}, - {340, {wxPanel, destruct, 0}}, - {341, {wxPanel, initDialog, 0}}, - {342, {wxPanel, setFocusIgnoringChildren, 0}}, - {343, {wxScrolledWindow, new_0, 0}}, - {344, {wxScrolledWindow, new_2, 2}}, - {345, {wxScrolledWindow, destruct, 0}}, - {346, {wxScrolledWindow, calcScrolledPosition_4, 4}}, - {347, {wxScrolledWindow, calcScrolledPosition_1, 1}}, - {348, {wxScrolledWindow, calcUnscrolledPosition_4, 4}}, - {349, {wxScrolledWindow, calcUnscrolledPosition_1, 1}}, - {350, {wxScrolledWindow, enableScrolling, 2}}, - {351, {wxScrolledWindow, getScrollPixelsPerUnit, 2}}, - {352, {wxScrolledWindow, getViewStart, 2}}, - {353, {wxScrolledWindow, doPrepareDC, 1}}, - {354, {wxScrolledWindow, prepareDC, 1}}, - {355, {wxScrolledWindow, scroll, 2}}, - {356, {wxScrolledWindow, setScrollbars, 5}}, - {357, {wxScrolledWindow, setScrollRate, 2}}, - {358, {wxScrolledWindow, setTargetWindow, 1}}, - {359, {wxSashWindow, new_0, 0}}, - {360, {wxSashWindow, new_2, 2}}, - {361, {wxSashWindow, destruct, 0}}, - {362, {wxSashWindow, getSashVisible, 1}}, - {363, {wxSashWindow, getMaximumSizeX, 0}}, - {364, {wxSashWindow, getMaximumSizeY, 0}}, - {365, {wxSashWindow, getMinimumSizeX, 0}}, - {366, {wxSashWindow, getMinimumSizeY, 0}}, - {367, {wxSashWindow, setMaximumSizeX, 1}}, - {368, {wxSashWindow, setMaximumSizeY, 1}}, - {369, {wxSashWindow, setMinimumSizeX, 1}}, - {370, {wxSashWindow, setMinimumSizeY, 1}}, - {371, {wxSashWindow, setSashVisible, 2}}, - {372, {wxSashLayoutWindow, new_0, 0}}, - {373, {wxSashLayoutWindow, new_2, 2}}, - {374, {wxSashLayoutWindow, create, 2}}, - {375, {wxSashLayoutWindow, getAlignment, 0}}, - {376, {wxSashLayoutWindow, getOrientation, 0}}, - {377, {wxSashLayoutWindow, setAlignment, 1}}, - {378, {wxSashLayoutWindow, setDefaultSize, 1}}, - {379, {wxSashLayoutWindow, setOrientation, 1}}, - {380, {wxSashLayoutWindow, 'Destroy', undefined}}, - {381, {wxGrid, new_0, 0}}, - {382, {wxGrid, new_3, 3}}, - {383, {wxGrid, new_4, 4}}, - {384, {wxGrid, destruct, 0}}, - {385, {wxGrid, appendCols, 1}}, - {386, {wxGrid, appendRows, 1}}, - {387, {wxGrid, autoSize, 0}}, - {388, {wxGrid, autoSizeColumn, 2}}, - {389, {wxGrid, autoSizeColumns, 1}}, - {390, {wxGrid, autoSizeRow, 2}}, - {391, {wxGrid, autoSizeRows, 1}}, - {392, {wxGrid, beginBatch, 0}}, - {393, {wxGrid, blockToDeviceRect, 2}}, - {394, {wxGrid, canDragColSize, 0}}, - {395, {wxGrid, canDragRowSize, 0}}, - {396, {wxGrid, canDragGridSize, 0}}, - {397, {wxGrid, canEnableCellControl, 0}}, - {398, {wxGrid, cellToRect_2, 2}}, - {399, {wxGrid, cellToRect_1, 1}}, - {400, {wxGrid, clearGrid, 0}}, - {401, {wxGrid, clearSelection, 0}}, - {402, {wxGrid, createGrid, 3}}, - {403, {wxGrid, deleteCols, 1}}, - {404, {wxGrid, deleteRows, 1}}, - {405, {wxGrid, disableCellEditControl, 0}}, - {406, {wxGrid, disableDragColSize, 0}}, - {407, {wxGrid, disableDragGridSize, 0}}, - {408, {wxGrid, disableDragRowSize, 0}}, - {409, {wxGrid, enableCellEditControl, 1}}, - {410, {wxGrid, enableDragColSize, 1}}, - {411, {wxGrid, enableDragGridSize, 1}}, - {412, {wxGrid, enableDragRowSize, 1}}, - {413, {wxGrid, enableEditing, 1}}, - {414, {wxGrid, enableGridLines, 1}}, - {415, {wxGrid, endBatch, 0}}, - {416, {wxGrid, fit, 0}}, - {417, {wxGrid, forceRefresh, 0}}, - {418, {wxGrid, getBatchCount, 0}}, - {419, {wxGrid, getCellAlignment, 4}}, - {420, {wxGrid, getCellBackgroundColour, 2}}, - {421, {wxGrid, getCellEditor, 2}}, - {422, {wxGrid, getCellFont, 2}}, - {423, {wxGrid, getCellRenderer, 2}}, - {424, {wxGrid, getCellTextColour, 2}}, - {425, {wxGrid, getCellValue_2, 2}}, - {426, {wxGrid, getCellValue_1, 1}}, - {427, {wxGrid, getColLabelAlignment, 2}}, - {428, {wxGrid, getColLabelSize, 0}}, - {429, {wxGrid, getColLabelValue, 1}}, - {430, {wxGrid, getColMinimalAcceptableWidth, 0}}, - {431, {wxGrid, getDefaultCellAlignment, 2}}, - {432, {wxGrid, getDefaultCellBackgroundColour, 0}}, - {433, {wxGrid, getDefaultCellFont, 0}}, - {434, {wxGrid, getDefaultCellTextColour, 0}}, - {435, {wxGrid, getDefaultColLabelSize, 0}}, - {436, {wxGrid, getDefaultColSize, 0}}, - {437, {wxGrid, getDefaultEditor, 0}}, - {438, {wxGrid, getDefaultEditorForCell_2, 2}}, - {439, {wxGrid, getDefaultEditorForCell_1, 1}}, - {440, {wxGrid, getDefaultEditorForType, 1}}, - {441, {wxGrid, getDefaultRenderer, 0}}, - {442, {wxGrid, getDefaultRendererForCell, 2}}, - {443, {wxGrid, getDefaultRendererForType, 1}}, - {444, {wxGrid, getDefaultRowLabelSize, 0}}, - {445, {wxGrid, getDefaultRowSize, 0}}, - {446, {wxGrid, getGridCursorCol, 0}}, - {447, {wxGrid, getGridCursorRow, 0}}, - {448, {wxGrid, getGridLineColour, 0}}, - {449, {wxGrid, gridLinesEnabled, 0}}, - {450, {wxGrid, getLabelBackgroundColour, 0}}, - {451, {wxGrid, getLabelFont, 0}}, - {452, {wxGrid, getLabelTextColour, 0}}, - {453, {wxGrid, getNumberCols, 0}}, - {454, {wxGrid, getNumberRows, 0}}, - {455, {wxGrid, getOrCreateCellAttr, 2}}, - {456, {wxGrid, getRowMinimalAcceptableHeight, 0}}, - {457, {wxGrid, getRowLabelAlignment, 2}}, - {458, {wxGrid, getRowLabelSize, 0}}, - {459, {wxGrid, getRowLabelValue, 1}}, - {460, {wxGrid, getRowSize, 1}}, - {461, {wxGrid, getScrollLineX, 0}}, - {462, {wxGrid, getScrollLineY, 0}}, - {463, {wxGrid, getSelectedCells, 0}}, - {464, {wxGrid, getSelectedCols, 0}}, - {465, {wxGrid, getSelectedRows, 0}}, - {466, {wxGrid, getSelectionBackground, 0}}, - {467, {wxGrid, getSelectionBlockTopLeft, 0}}, - {468, {wxGrid, getSelectionBlockBottomRight, 0}}, - {469, {wxGrid, getSelectionForeground, 0}}, - {470, {wxGrid, getViewWidth, 0}}, - {471, {wxGrid, getGridWindow, 0}}, - {472, {wxGrid, getGridRowLabelWindow, 0}}, - {473, {wxGrid, getGridColLabelWindow, 0}}, - {474, {wxGrid, getGridCornerLabelWindow, 0}}, - {475, {wxGrid, hideCellEditControl, 0}}, - {476, {wxGrid, insertCols, 1}}, - {477, {wxGrid, insertRows, 1}}, - {478, {wxGrid, isCellEditControlEnabled, 0}}, - {479, {wxGrid, isCurrentCellReadOnly, 0}}, - {480, {wxGrid, isEditable, 0}}, - {481, {wxGrid, isInSelection_2, 2}}, - {482, {wxGrid, isInSelection_1, 1}}, - {483, {wxGrid, isReadOnly, 2}}, - {484, {wxGrid, isSelection, 0}}, - {485, {wxGrid, isVisible_3, 3}}, - {486, {wxGrid, isVisible_2, 2}}, - {487, {wxGrid, makeCellVisible_2, 2}}, - {488, {wxGrid, makeCellVisible_1, 1}}, - {489, {wxGrid, moveCursorDown, 1}}, - {490, {wxGrid, moveCursorLeft, 1}}, - {491, {wxGrid, moveCursorRight, 1}}, - {492, {wxGrid, moveCursorUp, 1}}, - {493, {wxGrid, moveCursorDownBlock, 1}}, - {494, {wxGrid, moveCursorLeftBlock, 1}}, - {495, {wxGrid, moveCursorRightBlock, 1}}, - {496, {wxGrid, moveCursorUpBlock, 1}}, - {497, {wxGrid, movePageDown, 0}}, - {498, {wxGrid, movePageUp, 0}}, - {499, {wxGrid, registerDataType, 3}}, - {500, {wxGrid, saveEditControlValue, 0}}, - {501, {wxGrid, selectAll, 0}}, - {502, {wxGrid, selectBlock_5, 5}}, - {503, {wxGrid, selectBlock_3, 3}}, - {504, {wxGrid, selectCol, 2}}, - {505, {wxGrid, selectRow, 2}}, - {506, {wxGrid, setCellAlignment_4, 4}}, - {507, {wxGrid, setCellAlignment_3, 3}}, - {508, {wxGrid, setCellAlignment_1, 1}}, - {509, {wxGrid, setCellBackgroundColour_3_0, 3}}, - {510, {wxGrid, setCellBackgroundColour_1, 1}}, - {511, {wxGrid, setCellBackgroundColour_3_1, 3}}, - {512, {wxGrid, setCellEditor, 3}}, - {513, {wxGrid, setCellFont, 3}}, - {514, {wxGrid, setCellRenderer, 3}}, - {515, {wxGrid, setCellTextColour_3_0, 3}}, - {516, {wxGrid, setCellTextColour_3_1, 3}}, - {517, {wxGrid, setCellTextColour_1, 1}}, - {518, {wxGrid, setCellValue_3_0, 3}}, - {519, {wxGrid, setCellValue_2, 2}}, - {520, {wxGrid, setCellValue_3_1, 3}}, - {521, {wxGrid, setColAttr, 2}}, - {522, {wxGrid, setColFormatBool, 1}}, - {523, {wxGrid, setColFormatNumber, 1}}, - {524, {wxGrid, setColFormatFloat, 2}}, - {525, {wxGrid, setColFormatCustom, 2}}, - {526, {wxGrid, setColLabelAlignment, 2}}, - {527, {wxGrid, setColLabelSize, 1}}, - {528, {wxGrid, setColLabelValue, 2}}, - {529, {wxGrid, setColMinimalWidth, 2}}, - {530, {wxGrid, setColMinimalAcceptableWidth, 1}}, - {531, {wxGrid, setColSize, 2}}, - {532, {wxGrid, setDefaultCellAlignment, 2}}, - {533, {wxGrid, setDefaultCellBackgroundColour, 1}}, - {534, {wxGrid, setDefaultCellFont, 1}}, - {535, {wxGrid, setDefaultCellTextColour, 1}}, - {536, {wxGrid, setDefaultEditor, 1}}, - {537, {wxGrid, setDefaultRenderer, 1}}, - {538, {wxGrid, setDefaultColSize, 2}}, - {539, {wxGrid, setDefaultRowSize, 2}}, - {540, {wxGrid, setGridCursor, 2}}, - {541, {wxGrid, setGridLineColour, 1}}, - {542, {wxGrid, setLabelBackgroundColour, 1}}, - {543, {wxGrid, setLabelFont, 1}}, - {544, {wxGrid, setLabelTextColour, 1}}, - {545, {wxGrid, setMargins, 2}}, - {546, {wxGrid, setReadOnly, 3}}, - {547, {wxGrid, setRowAttr, 2}}, - {548, {wxGrid, setRowLabelAlignment, 2}}, - {549, {wxGrid, setRowLabelSize, 1}}, - {550, {wxGrid, setRowLabelValue, 2}}, - {551, {wxGrid, setRowMinimalHeight, 2}}, - {552, {wxGrid, setRowMinimalAcceptableHeight, 1}}, - {553, {wxGrid, setRowSize, 2}}, - {554, {wxGrid, setScrollLineX, 1}}, - {555, {wxGrid, setScrollLineY, 1}}, - {556, {wxGrid, setSelectionBackground, 1}}, - {557, {wxGrid, setSelectionForeground, 1}}, - {558, {wxGrid, setSelectionMode, 1}}, - {559, {wxGrid, showCellEditControl, 0}}, - {560, {wxGrid, xToCol, 2}}, - {561, {wxGrid, xToEdgeOfCol, 1}}, - {562, {wxGrid, yToEdgeOfRow, 1}}, - {563, {wxGrid, yToRow, 1}}, - {564, {wxGridCellRenderer, draw, 7}}, - {565, {wxGridCellRenderer, getBestSize, 5}}, - {566, {wxGridCellEditor, create, 3}}, - {567, {wxGridCellEditor, isCreated, 0}}, - {568, {wxGridCellEditor, setSize, 1}}, - {569, {wxGridCellEditor, show, 2}}, - {570, {wxGridCellEditor, paintBackground, 2}}, - {571, {wxGridCellEditor, beginEdit, 3}}, - {572, {wxGridCellEditor, endEdit, 3}}, - {573, {wxGridCellEditor, reset, 0}}, - {574, {wxGridCellEditor, startingKey, 1}}, - {575, {wxGridCellEditor, startingClick, 0}}, - {576, {wxGridCellEditor, handleReturn, 1}}, - {577, {wxGridCellBoolRenderer, new, 0}}, - {578, {wxGridCellBoolRenderer, 'Destroy', undefined}}, - {579, {wxGridCellBoolEditor, new, 0}}, - {580, {wxGridCellBoolEditor, isTrueValue, 1}}, - {581, {wxGridCellBoolEditor, useStringValues, 1}}, - {582, {wxGridCellBoolEditor, 'Destroy', undefined}}, - {583, {wxGridCellFloatRenderer, new, 1}}, - {584, {wxGridCellFloatRenderer, getPrecision, 0}}, - {585, {wxGridCellFloatRenderer, getWidth, 0}}, - {586, {wxGridCellFloatRenderer, setParameters, 1}}, - {587, {wxGridCellFloatRenderer, setPrecision, 1}}, - {588, {wxGridCellFloatRenderer, setWidth, 1}}, - {589, {wxGridCellFloatRenderer, 'Destroy', undefined}}, - {590, {wxGridCellFloatEditor, new, 1}}, - {591, {wxGridCellFloatEditor, setParameters, 1}}, - {592, {wxGridCellFloatEditor, 'Destroy', undefined}}, - {593, {wxGridCellStringRenderer, new, 0}}, - {594, {wxGridCellStringRenderer, 'Destroy', undefined}}, - {595, {wxGridCellTextEditor, new, 0}}, - {596, {wxGridCellTextEditor, setParameters, 1}}, - {597, {wxGridCellTextEditor, 'Destroy', undefined}}, - {599, {wxGridCellChoiceEditor, new, 2}}, - {600, {wxGridCellChoiceEditor, setParameters, 1}}, - {601, {wxGridCellChoiceEditor, 'Destroy', undefined}}, - {602, {wxGridCellNumberRenderer, new, 0}}, - {603, {wxGridCellNumberRenderer, 'Destroy', undefined}}, - {604, {wxGridCellNumberEditor, new, 1}}, - {605, {wxGridCellNumberEditor, getValue, 0}}, - {606, {wxGridCellNumberEditor, setParameters, 1}}, - {607, {wxGridCellNumberEditor, 'Destroy', undefined}}, - {608, {wxGridCellAttr, setTextColour, 1}}, - {609, {wxGridCellAttr, setBackgroundColour, 1}}, - {610, {wxGridCellAttr, setFont, 1}}, - {611, {wxGridCellAttr, setAlignment, 2}}, - {612, {wxGridCellAttr, setReadOnly, 1}}, - {613, {wxGridCellAttr, setRenderer, 1}}, - {614, {wxGridCellAttr, setEditor, 1}}, - {615, {wxGridCellAttr, hasTextColour, 0}}, - {616, {wxGridCellAttr, hasBackgroundColour, 0}}, - {617, {wxGridCellAttr, hasFont, 0}}, - {618, {wxGridCellAttr, hasAlignment, 0}}, - {619, {wxGridCellAttr, hasRenderer, 0}}, - {620, {wxGridCellAttr, hasEditor, 0}}, - {621, {wxGridCellAttr, getTextColour, 0}}, - {622, {wxGridCellAttr, getBackgroundColour, 0}}, - {623, {wxGridCellAttr, getFont, 0}}, - {624, {wxGridCellAttr, getAlignment, 2}}, - {625, {wxGridCellAttr, getRenderer, 3}}, - {626, {wxGridCellAttr, getEditor, 3}}, - {627, {wxGridCellAttr, isReadOnly, 0}}, - {628, {wxGridCellAttr, setDefAttr, 1}}, - {629, {wxDC, blit, 5}}, - {630, {wxDC, calcBoundingBox, 2}}, - {631, {wxDC, clear, 0}}, - {632, {wxDC, computeScaleAndOrigin, 0}}, - {633, {wxDC, crossHair, 1}}, - {634, {wxDC, destroyClippingRegion, 0}}, - {635, {wxDC, deviceToLogicalX, 1}}, - {636, {wxDC, deviceToLogicalXRel, 1}}, - {637, {wxDC, deviceToLogicalY, 1}}, - {638, {wxDC, deviceToLogicalYRel, 1}}, - {639, {wxDC, drawArc, 3}}, - {640, {wxDC, drawBitmap, 3}}, - {641, {wxDC, drawCheckMark, 1}}, - {642, {wxDC, drawCircle, 2}}, - {644, {wxDC, drawEllipse_2, 2}}, - {645, {wxDC, drawEllipse_1, 1}}, - {646, {wxDC, drawEllipticArc, 4}}, - {647, {wxDC, drawIcon, 2}}, - {648, {wxDC, drawLabel, 3}}, - {649, {wxDC, drawLine, 2}}, - {650, {wxDC, drawLines, 3}}, - {652, {wxDC, drawPolygon, 3}}, - {654, {wxDC, drawPoint, 1}}, - {656, {wxDC, drawRectangle_2, 2}}, - {657, {wxDC, drawRectangle_1, 1}}, - {658, {wxDC, drawRotatedText, 3}}, - {660, {wxDC, drawRoundedRectangle_3, 3}}, - {661, {wxDC, drawRoundedRectangle_2, 2}}, - {662, {wxDC, drawText, 2}}, - {663, {wxDC, endDoc, 0}}, - {664, {wxDC, endPage, 0}}, - {665, {wxDC, floodFill, 3}}, - {666, {wxDC, getBackground, 0}}, - {667, {wxDC, getBackgroundMode, 0}}, - {668, {wxDC, getBrush, 0}}, - {669, {wxDC, getCharHeight, 0}}, - {670, {wxDC, getCharWidth, 0}}, - {671, {wxDC, getClippingBox, 4}}, - {673, {wxDC, getFont, 0}}, - {674, {wxDC, getLayoutDirection, 0}}, - {675, {wxDC, getLogicalFunction, 0}}, - {676, {wxDC, getMapMode, 0}}, - {677, {wxDC, getMultiLineTextExtent_4, 4}}, - {678, {wxDC, getMultiLineTextExtent_1, 1}}, - {679, {wxDC, getPartialTextExtents, 2}}, - {680, {wxDC, getPen, 0}}, - {681, {wxDC, getPixel, 2}}, - {682, {wxDC, getPPI, 0}}, - {684, {wxDC, getSize, 0}}, - {686, {wxDC, getSizeMM, 0}}, - {687, {wxDC, getTextBackground, 0}}, - {688, {wxDC, getTextExtent_4, 4}}, - {689, {wxDC, getTextExtent_1, 1}}, - {691, {wxDC, getTextForeground, 0}}, - {692, {wxDC, getUserScale, 2}}, - {693, {wxDC, gradientFillConcentric_3, 3}}, - {694, {wxDC, gradientFillConcentric_4, 4}}, - {695, {wxDC, gradientFillLinear, 4}}, - {696, {wxDC, logicalToDeviceX, 1}}, - {697, {wxDC, logicalToDeviceXRel, 1}}, - {698, {wxDC, logicalToDeviceY, 1}}, - {699, {wxDC, logicalToDeviceYRel, 1}}, - {700, {wxDC, maxX, 0}}, - {701, {wxDC, maxY, 0}}, - {702, {wxDC, minX, 0}}, - {703, {wxDC, minY, 0}}, - {704, {wxDC, isOk, 0}}, - {705, {wxDC, resetBoundingBox, 0}}, - {706, {wxDC, setAxisOrientation, 2}}, - {707, {wxDC, setBackground, 1}}, - {708, {wxDC, setBackgroundMode, 1}}, - {709, {wxDC, setBrush, 1}}, - {711, {wxDC, setClippingRegion_2, 2}}, - {712, {wxDC, setClippingRegion_1_1, 1}}, - {713, {wxDC, setClippingRegion_1_0, 1}}, - {714, {wxDC, setDeviceOrigin, 2}}, - {715, {wxDC, setFont, 1}}, - {716, {wxDC, setLayoutDirection, 1}}, - {717, {wxDC, setLogicalFunction, 1}}, - {718, {wxDC, setMapMode, 1}}, - {719, {wxDC, setPalette, 1}}, - {720, {wxDC, setPen, 1}}, - {721, {wxDC, setTextBackground, 1}}, - {722, {wxDC, setTextForeground, 1}}, - {723, {wxDC, setUserScale, 2}}, - {724, {wxDC, startDoc, 1}}, - {725, {wxDC, startPage, 0}}, - {726, {wxMirrorDC, new, 2}}, - {727, {wxMirrorDC, 'Destroy', undefined}}, - {728, {wxScreenDC, new, 0}}, - {729, {wxScreenDC, destruct, 0}}, - {730, {wxPostScriptDC, new_0, 0}}, - {731, {wxPostScriptDC, new_1, 1}}, - {732, {wxPostScriptDC, destruct, 0}}, - {733, {wxPostScriptDC, setResolution, 1}}, - {734, {wxPostScriptDC, getResolution, 0}}, - {735, {wxWindowDC, new_0, 0}}, - {736, {wxWindowDC, new_1, 1}}, - {737, {wxWindowDC, destruct, 0}}, - {738, {wxClientDC, new_0, 0}}, - {739, {wxClientDC, new_1, 1}}, - {740, {wxClientDC, 'Destroy', undefined}}, - {741, {wxPaintDC, new_0, 0}}, - {742, {wxPaintDC, new_1, 1}}, - {743, {wxPaintDC, 'Destroy', undefined}}, - {745, {wxMemoryDC, new_1_0, 1}}, - {746, {wxMemoryDC, new_1_1, 1}}, - {747, {wxMemoryDC, new_0, 0}}, - {749, {wxMemoryDC, destruct, 0}}, - {750, {wxMemoryDC, selectObject, 1}}, - {751, {wxMemoryDC, selectObjectAsSource, 1}}, - {752, {wxBufferedDC, new_0, 0}}, - {753, {wxBufferedDC, new_2, 2}}, - {754, {wxBufferedDC, new_3, 3}}, - {755, {wxBufferedDC, destruct, 0}}, - {756, {wxBufferedDC, init_2, 2}}, - {757, {wxBufferedDC, init_3, 3}}, - {758, {wxBufferedPaintDC, new_3, 3}}, - {759, {wxBufferedPaintDC, new_2, 2}}, - {760, {wxBufferedPaintDC, destruct, 0}}, - {761, {wxGraphicsObject, destruct, 0}}, - {762, {wxGraphicsObject, getRenderer, 0}}, - {763, {wxGraphicsObject, isNull, 0}}, - {764, {wxGraphicsContext, destruct, 0}}, - {765, {wxGraphicsContext, create_1_1, 1}}, - {766, {wxGraphicsContext, create_1_0, 1}}, - {767, {wxGraphicsContext, create_0, 0}}, - {768, {wxGraphicsContext, createPen, 1}}, - {769, {wxGraphicsContext, createBrush, 1}}, - {770, {wxGraphicsContext, createRadialGradientBrush, 7}}, - {771, {wxGraphicsContext, createLinearGradientBrush, 6}}, - {772, {wxGraphicsContext, createFont, 2}}, - {773, {wxGraphicsContext, createMatrix, 1}}, - {774, {wxGraphicsContext, createPath, 0}}, - {775, {wxGraphicsContext, clip_1, 1}}, - {776, {wxGraphicsContext, clip_4, 4}}, - {777, {wxGraphicsContext, resetClip, 0}}, - {778, {wxGraphicsContext, drawBitmap, 5}}, - {779, {wxGraphicsContext, drawEllipse, 4}}, - {780, {wxGraphicsContext, drawIcon, 5}}, - {781, {wxGraphicsContext, drawLines, 3}}, - {782, {wxGraphicsContext, drawPath, 2}}, - {783, {wxGraphicsContext, drawRectangle, 4}}, - {784, {wxGraphicsContext, drawRoundedRectangle, 5}}, - {785, {wxGraphicsContext, drawText_3, 3}}, - {786, {wxGraphicsContext, drawText_4_0, 4}}, - {787, {wxGraphicsContext, drawText_4_1, 4}}, - {788, {wxGraphicsContext, drawText_5, 5}}, - {789, {wxGraphicsContext, fillPath, 2}}, - {790, {wxGraphicsContext, strokePath, 1}}, - {791, {wxGraphicsContext, getPartialTextExtents, 2}}, - {792, {wxGraphicsContext, getTextExtent, 5}}, - {793, {wxGraphicsContext, rotate, 1}}, - {794, {wxGraphicsContext, scale, 2}}, - {795, {wxGraphicsContext, translate, 2}}, - {796, {wxGraphicsContext, getTransform, 0}}, - {797, {wxGraphicsContext, setTransform, 1}}, - {798, {wxGraphicsContext, concatTransform, 1}}, - {799, {wxGraphicsContext, setBrush_1_1, 1}}, - {800, {wxGraphicsContext, setBrush_1_0, 1}}, - {801, {wxGraphicsContext, setFont_1, 1}}, - {802, {wxGraphicsContext, setFont_2, 2}}, - {803, {wxGraphicsContext, setPen_1_0, 1}}, - {804, {wxGraphicsContext, setPen_1_1, 1}}, - {805, {wxGraphicsContext, strokeLine, 4}}, - {806, {wxGraphicsContext, strokeLines, 2}}, - {808, {wxGraphicsMatrix, concat, 1}}, - {810, {wxGraphicsMatrix, get, 1}}, - {811, {wxGraphicsMatrix, invert, 0}}, - {812, {wxGraphicsMatrix, isEqual, 1}}, - {814, {wxGraphicsMatrix, isIdentity, 0}}, - {815, {wxGraphicsMatrix, rotate, 1}}, - {816, {wxGraphicsMatrix, scale, 2}}, - {817, {wxGraphicsMatrix, translate, 2}}, - {818, {wxGraphicsMatrix, set, 1}}, - {819, {wxGraphicsMatrix, transformPoint, 2}}, - {820, {wxGraphicsMatrix, transformDistance, 2}}, - {821, {wxGraphicsPath, moveToPoint_2, 2}}, - {822, {wxGraphicsPath, moveToPoint_1, 1}}, - {823, {wxGraphicsPath, addArc_6, 6}}, - {824, {wxGraphicsPath, addArc_5, 5}}, - {825, {wxGraphicsPath, addArcToPoint, 5}}, - {826, {wxGraphicsPath, addCircle, 3}}, - {827, {wxGraphicsPath, addCurveToPoint_6, 6}}, - {828, {wxGraphicsPath, addCurveToPoint_3, 3}}, - {829, {wxGraphicsPath, addEllipse, 4}}, - {830, {wxGraphicsPath, addLineToPoint_2, 2}}, - {831, {wxGraphicsPath, addLineToPoint_1, 1}}, - {832, {wxGraphicsPath, addPath, 1}}, - {833, {wxGraphicsPath, addQuadCurveToPoint, 4}}, - {834, {wxGraphicsPath, addRectangle, 4}}, - {835, {wxGraphicsPath, addRoundedRectangle, 5}}, - {836, {wxGraphicsPath, closeSubpath, 0}}, - {837, {wxGraphicsPath, contains_3, 3}}, - {838, {wxGraphicsPath, contains_2, 2}}, - {840, {wxGraphicsPath, getBox, 0}}, - {842, {wxGraphicsPath, getCurrentPoint, 0}}, - {843, {wxGraphicsPath, transform, 1}}, - {844, {wxGraphicsRenderer, getDefaultRenderer, 0}}, - {845, {wxGraphicsRenderer, createContext_1_1, 1}}, - {846, {wxGraphicsRenderer, createContext_1_0, 1}}, - {847, {wxGraphicsRenderer, createPen, 1}}, - {848, {wxGraphicsRenderer, createBrush, 1}}, - {849, {wxGraphicsRenderer, createLinearGradientBrush, 6}}, - {850, {wxGraphicsRenderer, createRadialGradientBrush, 7}}, - {851, {wxGraphicsRenderer, createFont, 2}}, - {852, {wxGraphicsRenderer, createMatrix, 1}}, - {853, {wxGraphicsRenderer, createPath, 0}}, - {855, {wxMenuBar, new_1, 1}}, - {857, {wxMenuBar, new_0, 0}}, - {859, {wxMenuBar, destruct, 0}}, - {860, {wxMenuBar, append, 2}}, - {861, {wxMenuBar, check, 2}}, - {862, {wxMenuBar, enable_2, 2}}, - {863, {wxMenuBar, enable_1, 1}}, - {864, {wxMenuBar, enableTop, 2}}, - {865, {wxMenuBar, findMenu, 1}}, - {866, {wxMenuBar, findMenuItem, 2}}, - {867, {wxMenuBar, findItem, 2}}, - {868, {wxMenuBar, getHelpString, 1}}, - {869, {wxMenuBar, getLabel_1, 1}}, - {870, {wxMenuBar, getLabel_0, 0}}, - {871, {wxMenuBar, getLabelTop, 1}}, - {872, {wxMenuBar, getMenu, 1}}, - {873, {wxMenuBar, getMenuCount, 0}}, - {874, {wxMenuBar, insert, 3}}, - {875, {wxMenuBar, isChecked, 1}}, - {876, {wxMenuBar, isEnabled_1, 1}}, - {877, {wxMenuBar, isEnabled_0, 0}}, - {878, {wxMenuBar, remove, 1}}, - {879, {wxMenuBar, replace, 3}}, - {880, {wxMenuBar, setHelpString, 2}}, - {881, {wxMenuBar, setLabel_2, 2}}, - {882, {wxMenuBar, setLabel_1, 1}}, - {883, {wxMenuBar, setLabelTop, 2}}, - {884, {wxControl, getLabel, 0}}, - {885, {wxControl, setLabel, 1}}, - {886, {wxControlWithItems, append_1, 1}}, - {887, {wxControlWithItems, append_2, 2}}, - {888, {wxControlWithItems, appendStrings_1, 1}}, - {889, {wxControlWithItems, clear, 0}}, - {890, {wxControlWithItems, delete, 1}}, - {891, {wxControlWithItems, findString, 2}}, - {892, {wxControlWithItems, getClientData, 1}}, - {893, {wxControlWithItems, setClientData, 2}}, - {894, {wxControlWithItems, getCount, 0}}, - {895, {wxControlWithItems, getSelection, 0}}, - {896, {wxControlWithItems, getString, 1}}, - {897, {wxControlWithItems, getStringSelection, 0}}, - {898, {wxControlWithItems, insert_2, 2}}, - {899, {wxControlWithItems, insert_3, 3}}, - {900, {wxControlWithItems, isEmpty, 0}}, - {901, {wxControlWithItems, select, 1}}, - {902, {wxControlWithItems, setSelection, 1}}, - {903, {wxControlWithItems, setString, 2}}, - {904, {wxControlWithItems, setStringSelection, 1}}, - {907, {wxMenu, new_2, 2}}, - {908, {wxMenu, new_1, 1}}, - {910, {wxMenu, destruct, 0}}, - {911, {wxMenu, append_3, 3}}, - {912, {wxMenu, append_1, 1}}, - {913, {wxMenu, append_4_0, 4}}, - {914, {wxMenu, append_4_1, 4}}, - {915, {wxMenu, appendCheckItem, 3}}, - {916, {wxMenu, appendRadioItem, 3}}, - {917, {wxMenu, appendSeparator, 0}}, - {918, {wxMenu, break, 0}}, - {919, {wxMenu, check, 2}}, - {920, {wxMenu, delete_1_0, 1}}, - {921, {wxMenu, delete_1_1, 1}}, - {922, {wxMenu, destroy_1_0, 1}}, - {923, {wxMenu, destroy_1_1, 1}}, - {924, {wxMenu, enable, 2}}, - {925, {wxMenu, findItem_1, 1}}, - {926, {wxMenu, findItem_2, 2}}, - {927, {wxMenu, findItemByPosition, 1}}, - {928, {wxMenu, getHelpString, 1}}, - {929, {wxMenu, getLabel, 1}}, - {930, {wxMenu, getMenuItemCount, 0}}, - {931, {wxMenu, getMenuItems, 0}}, - {933, {wxMenu, getTitle, 0}}, - {934, {wxMenu, insert_2, 2}}, - {935, {wxMenu, insert_3, 3}}, - {936, {wxMenu, insert_5_1, 5}}, - {937, {wxMenu, insert_5_0, 5}}, - {938, {wxMenu, insertCheckItem, 4}}, - {939, {wxMenu, insertRadioItem, 4}}, - {940, {wxMenu, insertSeparator, 1}}, - {941, {wxMenu, isChecked, 1}}, - {942, {wxMenu, isEnabled, 1}}, - {943, {wxMenu, prepend_1, 1}}, - {944, {wxMenu, prepend_2, 2}}, - {945, {wxMenu, prepend_4_1, 4}}, - {946, {wxMenu, prepend_4_0, 4}}, - {947, {wxMenu, prependCheckItem, 3}}, - {948, {wxMenu, prependRadioItem, 3}}, - {949, {wxMenu, prependSeparator, 0}}, - {950, {wxMenu, remove_1_0, 1}}, - {951, {wxMenu, remove_1_1, 1}}, - {952, {wxMenu, setHelpString, 2}}, - {953, {wxMenu, setLabel, 2}}, - {954, {wxMenu, setTitle, 1}}, - {955, {wxMenuItem, new, 1}}, - {957, {wxMenuItem, destruct, 0}}, - {958, {wxMenuItem, check, 1}}, - {959, {wxMenuItem, enable, 1}}, - {960, {wxMenuItem, getBitmap, 0}}, - {961, {wxMenuItem, getHelp, 0}}, - {962, {wxMenuItem, getId, 0}}, - {963, {wxMenuItem, getKind, 0}}, - {964, {wxMenuItem, getLabel, 0}}, - {965, {wxMenuItem, getLabelFromText, 1}}, - {966, {wxMenuItem, getMenu, 0}}, - {967, {wxMenuItem, getText, 0}}, - {968, {wxMenuItem, getSubMenu, 0}}, - {969, {wxMenuItem, isCheckable, 0}}, - {970, {wxMenuItem, isChecked, 0}}, - {971, {wxMenuItem, isEnabled, 0}}, - {972, {wxMenuItem, isSeparator, 0}}, - {973, {wxMenuItem, isSubMenu, 0}}, - {974, {wxMenuItem, setBitmap, 1}}, - {975, {wxMenuItem, setHelp, 1}}, - {976, {wxMenuItem, setMenu, 1}}, - {977, {wxMenuItem, setSubMenu, 1}}, - {978, {wxMenuItem, setText, 1}}, - {979, {wxToolBar, addControl, 1}}, - {980, {wxToolBar, addSeparator, 0}}, - {981, {wxToolBar, addTool_5, 5}}, - {982, {wxToolBar, addTool_4_0, 4}}, - {983, {wxToolBar, addTool_1, 1}}, - {984, {wxToolBar, addTool_4_1, 4}}, - {985, {wxToolBar, addTool_3, 3}}, - {986, {wxToolBar, addTool_6, 6}}, - {987, {wxToolBar, addCheckTool, 4}}, - {988, {wxToolBar, addRadioTool, 4}}, - {989, {wxToolBar, addStretchableSpace, 0}}, - {990, {wxToolBar, insertStretchableSpace, 1}}, - {991, {wxToolBar, deleteTool, 1}}, - {992, {wxToolBar, deleteToolByPos, 1}}, - {993, {wxToolBar, enableTool, 2}}, - {994, {wxToolBar, findById, 1}}, - {995, {wxToolBar, findControl, 1}}, - {996, {wxToolBar, findToolForPosition, 2}}, - {997, {wxToolBar, getToolSize, 0}}, - {998, {wxToolBar, getToolBitmapSize, 0}}, - {999, {wxToolBar, getMargins, 0}}, - {1000, {wxToolBar, getToolEnabled, 1}}, - {1001, {wxToolBar, getToolLongHelp, 1}}, - {1002, {wxToolBar, getToolPacking, 0}}, - {1003, {wxToolBar, getToolPos, 1}}, - {1004, {wxToolBar, getToolSeparation, 0}}, - {1005, {wxToolBar, getToolShortHelp, 1}}, - {1006, {wxToolBar, getToolState, 1}}, - {1007, {wxToolBar, insertControl, 2}}, - {1008, {wxToolBar, insertSeparator, 1}}, - {1009, {wxToolBar, insertTool_5, 5}}, - {1010, {wxToolBar, insertTool_2, 2}}, - {1011, {wxToolBar, insertTool_4, 4}}, - {1012, {wxToolBar, realize, 0}}, - {1013, {wxToolBar, removeTool, 1}}, - {1014, {wxToolBar, setMargins, 2}}, - {1015, {wxToolBar, setToolBitmapSize, 1}}, - {1016, {wxToolBar, setToolLongHelp, 2}}, - {1017, {wxToolBar, setToolPacking, 1}}, - {1018, {wxToolBar, setToolShortHelp, 2}}, - {1019, {wxToolBar, setToolSeparation, 1}}, - {1020, {wxToolBar, toggleTool, 2}}, - {1022, {wxStatusBar, new_0, 0}}, - {1023, {wxStatusBar, new_2, 2}}, - {1025, {wxStatusBar, destruct, 0}}, - {1026, {wxStatusBar, create, 2}}, - {1027, {wxStatusBar, getFieldRect, 2}}, - {1028, {wxStatusBar, getFieldsCount, 0}}, - {1029, {wxStatusBar, getStatusText, 1}}, - {1030, {wxStatusBar, popStatusText, 1}}, - {1031, {wxStatusBar, pushStatusText, 2}}, - {1032, {wxStatusBar, setFieldsCount, 2}}, - {1033, {wxStatusBar, setMinHeight, 1}}, - {1034, {wxStatusBar, setStatusText, 2}}, - {1035, {wxStatusBar, setStatusWidths, 2}}, - {1036, {wxStatusBar, setStatusStyles, 2}}, - {1037, {wxBitmap, new_0, 0}}, - {1038, {wxBitmap, new_3, 3}}, - {1039, {wxBitmap, new_4, 4}}, - {1040, {wxBitmap, new_2_0, 2}}, - {1041, {wxBitmap, new_2_1, 2}}, - {1042, {wxBitmap, destruct, 0}}, - {1043, {wxBitmap, convertToImage, 0}}, - {1044, {wxBitmap, copyFromIcon, 1}}, - {1045, {wxBitmap, create, 3}}, - {1046, {wxBitmap, getDepth, 0}}, - {1047, {wxBitmap, getHeight, 0}}, - {1048, {wxBitmap, getPalette, 0}}, - {1049, {wxBitmap, getMask, 0}}, - {1050, {wxBitmap, getWidth, 0}}, - {1051, {wxBitmap, getSubBitmap, 1}}, - {1052, {wxBitmap, loadFile, 2}}, - {1053, {wxBitmap, ok, 0}}, - {1054, {wxBitmap, saveFile, 3}}, - {1055, {wxBitmap, setDepth, 1}}, - {1056, {wxBitmap, setHeight, 1}}, - {1057, {wxBitmap, setMask, 1}}, - {1058, {wxBitmap, setPalette, 1}}, - {1059, {wxBitmap, setWidth, 1}}, - {1060, {wxIcon, new_0, 0}}, - {1061, {wxIcon, new_2, 2}}, - {1062, {wxIcon, new_1, 1}}, - {1063, {wxIcon, copyFromBitmap, 1}}, - {1064, {wxIcon, 'Destroy', undefined}}, - {1065, {wxIconBundle, new_0, 0}}, - {1066, {wxIconBundle, new_2, 2}}, - {1067, {wxIconBundle, new_1_0, 1}}, - {1068, {wxIconBundle, new_1_1, 1}}, - {1069, {wxIconBundle, destruct, 0}}, - {1070, {wxIconBundle, addIcon_2, 2}}, - {1071, {wxIconBundle, addIcon_1, 1}}, - {1072, {wxIconBundle, getIcon_1_1, 1}}, - {1073, {wxIconBundle, getIcon_1_0, 1}}, - {1074, {wxCursor, new_0, 0}}, - {1075, {wxCursor, new_1_0, 1}}, - {1076, {wxCursor, new_1_1, 1}}, - {1077, {wxCursor, new_4, 4}}, - {1078, {wxCursor, destruct, 0}}, - {1079, {wxCursor, ok, 0}}, - {1080, {wxMask, new_0, 0}}, - {1081, {wxMask, new_2_1, 2}}, - {1082, {wxMask, new_2_0, 2}}, - {1083, {wxMask, new_1, 1}}, - {1084, {wxMask, destruct, 0}}, - {1085, {wxMask, create_2_1, 2}}, - {1086, {wxMask, create_2_0, 2}}, - {1087, {wxMask, create_1, 1}}, - {1088, {wxImage, new_0, 0}}, - {1089, {wxImage, new_3_0, 3}}, - {1090, {wxImage, new_4, 4}}, - {1091, {wxImage, new_5, 5}}, - {1092, {wxImage, new_2, 2}}, - {1093, {wxImage, new_3_1, 3}}, - {1094, {wxImage, blur, 1}}, - {1095, {wxImage, blurHorizontal, 1}}, - {1096, {wxImage, blurVertical, 1}}, - {1097, {wxImage, convertAlphaToMask, 1}}, - {1098, {wxImage, convertToGreyscale, 1}}, - {1099, {wxImage, convertToMono, 3}}, - {1100, {wxImage, copy, 0}}, - {1101, {wxImage, create_3, 3}}, - {1102, {wxImage, create_4, 4}}, - {1103, {wxImage, create_5, 5}}, - {1104, {wxImage, 'Destroy', 0}}, - {1105, {wxImage, findFirstUnusedColour, 4}}, - {1106, {wxImage, getImageExtWildcard, 0}}, - {1107, {wxImage, getAlpha_2, 2}}, - {1108, {wxImage, getAlpha_0, 0}}, - {1109, {wxImage, getBlue, 2}}, - {1110, {wxImage, getData, 0}}, - {1111, {wxImage, getGreen, 2}}, - {1112, {wxImage, getImageCount, 2}}, - {1113, {wxImage, getHeight, 0}}, - {1114, {wxImage, getMaskBlue, 0}}, - {1115, {wxImage, getMaskGreen, 0}}, - {1116, {wxImage, getMaskRed, 0}}, - {1117, {wxImage, getOrFindMaskColour, 3}}, - {1118, {wxImage, getPalette, 0}}, - {1119, {wxImage, getRed, 2}}, - {1120, {wxImage, getSubImage, 1}}, - {1121, {wxImage, getWidth, 0}}, - {1122, {wxImage, hasAlpha, 0}}, - {1123, {wxImage, hasMask, 0}}, - {1124, {wxImage, getOption, 1}}, - {1125, {wxImage, getOptionInt, 1}}, - {1126, {wxImage, hasOption, 1}}, - {1127, {wxImage, initAlpha, 0}}, - {1128, {wxImage, initStandardHandlers, 0}}, - {1129, {wxImage, isTransparent, 3}}, - {1130, {wxImage, loadFile_2, 2}}, - {1131, {wxImage, loadFile_3, 3}}, - {1132, {wxImage, ok, 0}}, - {1133, {wxImage, removeHandler, 1}}, - {1134, {wxImage, mirror, 1}}, - {1135, {wxImage, replace, 6}}, - {1136, {wxImage, rescale, 3}}, - {1137, {wxImage, resize, 3}}, - {1138, {wxImage, rotate, 3}}, - {1139, {wxImage, rotateHue, 1}}, - {1140, {wxImage, rotate90, 1}}, - {1141, {wxImage, saveFile_1, 1}}, - {1142, {wxImage, saveFile_2_0, 2}}, - {1143, {wxImage, saveFile_2_1, 2}}, - {1144, {wxImage, scale, 3}}, - {1145, {wxImage, size, 3}}, - {1146, {wxImage, setAlpha_3, 3}}, - {1147, {wxImage, setAlpha_2, 2}}, - {1148, {wxImage, setData_2, 2}}, - {1149, {wxImage, setData_4, 4}}, - {1150, {wxImage, setMask, 1}}, - {1151, {wxImage, setMaskColour, 3}}, - {1152, {wxImage, setMaskFromImage, 4}}, - {1153, {wxImage, setOption_2_1, 2}}, - {1154, {wxImage, setOption_2_0, 2}}, - {1155, {wxImage, setPalette, 1}}, - {1156, {wxImage, setRGB_5, 5}}, - {1157, {wxImage, setRGB_4, 4}}, - {1158, {wxImage, 'Destroy', undefined}}, - {1159, {wxBrush, new_0, 0}}, - {1160, {wxBrush, new_2, 2}}, - {1161, {wxBrush, new_1, 1}}, - {1163, {wxBrush, destruct, 0}}, - {1164, {wxBrush, getColour, 0}}, - {1165, {wxBrush, getStipple, 0}}, - {1166, {wxBrush, getStyle, 0}}, - {1167, {wxBrush, isHatch, 0}}, - {1168, {wxBrush, isOk, 0}}, - {1169, {wxBrush, setColour_1, 1}}, - {1170, {wxBrush, setColour_3, 3}}, - {1171, {wxBrush, setStipple, 1}}, - {1172, {wxBrush, setStyle, 1}}, - {1173, {wxPen, new_0, 0}}, - {1174, {wxPen, new_2, 2}}, - {1175, {wxPen, destruct, 0}}, - {1176, {wxPen, getCap, 0}}, - {1177, {wxPen, getColour, 0}}, - {1178, {wxPen, getJoin, 0}}, - {1179, {wxPen, getStyle, 0}}, - {1180, {wxPen, getWidth, 0}}, - {1181, {wxPen, isOk, 0}}, - {1182, {wxPen, setCap, 1}}, - {1183, {wxPen, setColour_1, 1}}, - {1184, {wxPen, setColour_3, 3}}, - {1185, {wxPen, setJoin, 1}}, - {1186, {wxPen, setStyle, 1}}, - {1187, {wxPen, setWidth, 1}}, - {1188, {wxRegion, new_0, 0}}, - {1189, {wxRegion, new_4, 4}}, - {1190, {wxRegion, new_2, 2}}, - {1191, {wxRegion, new_1_1, 1}}, - {1193, {wxRegion, new_1_0, 1}}, - {1195, {wxRegion, destruct, 0}}, - {1196, {wxRegion, clear, 0}}, - {1197, {wxRegion, contains_2, 2}}, - {1198, {wxRegion, contains_1_0, 1}}, - {1199, {wxRegion, contains_4, 4}}, - {1200, {wxRegion, contains_1_1, 1}}, - {1201, {wxRegion, convertToBitmap, 0}}, - {1202, {wxRegion, getBox, 0}}, - {1203, {wxRegion, intersect_4, 4}}, - {1204, {wxRegion, intersect_1_1, 1}}, - {1205, {wxRegion, intersect_1_0, 1}}, - {1206, {wxRegion, isEmpty, 0}}, - {1207, {wxRegion, subtract_4, 4}}, - {1208, {wxRegion, subtract_1_1, 1}}, - {1209, {wxRegion, subtract_1_0, 1}}, - {1210, {wxRegion, offset_2, 2}}, - {1211, {wxRegion, offset_1, 1}}, - {1212, {wxRegion, union_4, 4}}, - {1213, {wxRegion, union_1_2, 1}}, - {1214, {wxRegion, union_1_1, 1}}, - {1215, {wxRegion, union_1_0, 1}}, - {1216, {wxRegion, union_3, 3}}, - {1217, {wxRegion, xor_4, 4}}, - {1218, {wxRegion, xor_1_1, 1}}, - {1219, {wxRegion, xor_1_0, 1}}, - {1220, {wxAcceleratorTable, new_0, 0}}, - {1221, {wxAcceleratorTable, new_2, 2}}, - {1222, {wxAcceleratorTable, destruct, 0}}, - {1223, {wxAcceleratorTable, ok, 0}}, - {1224, {wxAcceleratorEntry, new_1_0, 1}}, - {1225, {wxAcceleratorEntry, new_1_1, 1}}, - {1226, {wxAcceleratorEntry, getCommand, 0}}, - {1227, {wxAcceleratorEntry, getFlags, 0}}, - {1228, {wxAcceleratorEntry, getKeyCode, 0}}, - {1229, {wxAcceleratorEntry, set, 4}}, - {1230, {wxAcceleratorEntry, 'Destroy', undefined}}, - {1235, {wxCaret, new_3, 3}}, - {1236, {wxCaret, new_2, 2}}, - {1238, {wxCaret, destruct, 0}}, - {1239, {wxCaret, create_3, 3}}, - {1240, {wxCaret, create_2, 2}}, - {1241, {wxCaret, getBlinkTime, 0}}, - {1243, {wxCaret, getPosition, 0}}, - {1245, {wxCaret, getSize, 0}}, - {1246, {wxCaret, getWindow, 0}}, - {1247, {wxCaret, hide, 0}}, - {1248, {wxCaret, isOk, 0}}, - {1249, {wxCaret, isVisible, 0}}, - {1250, {wxCaret, move_2, 2}}, - {1251, {wxCaret, move_1, 1}}, - {1252, {wxCaret, setBlinkTime, 1}}, - {1253, {wxCaret, setSize_2, 2}}, - {1254, {wxCaret, setSize_1, 1}}, - {1255, {wxCaret, show, 1}}, - {1256, {wxSizer, add_2_1, 2}}, - {1257, {wxSizer, add_2_0, 2}}, - {1258, {wxSizer, add_3, 3}}, - {1259, {wxSizer, add_2_3, 2}}, - {1260, {wxSizer, add_2_2, 2}}, - {1261, {wxSizer, addSpacer, 1}}, - {1262, {wxSizer, addStretchSpacer, 1}}, - {1263, {wxSizer, calcMin, 0}}, - {1264, {wxSizer, clear, 1}}, - {1265, {wxSizer, detach_1_2, 1}}, - {1266, {wxSizer, detach_1_1, 1}}, - {1267, {wxSizer, detach_1_0, 1}}, - {1268, {wxSizer, fit, 1}}, - {1269, {wxSizer, fitInside, 1}}, - {1270, {wxSizer, getChildren, 0}}, - {1271, {wxSizer, getItem_2_1, 2}}, - {1272, {wxSizer, getItem_2_0, 2}}, - {1273, {wxSizer, getItem_1, 1}}, - {1274, {wxSizer, getSize, 0}}, - {1275, {wxSizer, getPosition, 0}}, - {1276, {wxSizer, getMinSize, 0}}, - {1277, {wxSizer, hide_2_0, 2}}, - {1278, {wxSizer, hide_2_1, 2}}, - {1279, {wxSizer, hide_1, 1}}, - {1280, {wxSizer, insert_3_1, 3}}, - {1281, {wxSizer, insert_3_0, 3}}, - {1282, {wxSizer, insert_4, 4}}, - {1283, {wxSizer, insert_3_3, 3}}, - {1284, {wxSizer, insert_3_2, 3}}, - {1285, {wxSizer, insert_2, 2}}, - {1286, {wxSizer, insertSpacer, 2}}, - {1287, {wxSizer, insertStretchSpacer, 2}}, - {1288, {wxSizer, isShown_1_2, 1}}, - {1289, {wxSizer, isShown_1_1, 1}}, - {1290, {wxSizer, isShown_1_0, 1}}, - {1291, {wxSizer, layout, 0}}, - {1292, {wxSizer, prepend_2_1, 2}}, - {1293, {wxSizer, prepend_2_0, 2}}, - {1294, {wxSizer, prepend_3, 3}}, - {1295, {wxSizer, prepend_2_3, 2}}, - {1296, {wxSizer, prepend_2_2, 2}}, - {1297, {wxSizer, prepend_1, 1}}, - {1298, {wxSizer, prependSpacer, 1}}, - {1299, {wxSizer, prependStretchSpacer, 1}}, - {1300, {wxSizer, recalcSizes, 0}}, - {1301, {wxSizer, remove_1_1, 1}}, - {1302, {wxSizer, remove_1_0, 1}}, - {1303, {wxSizer, replace_3_1, 3}}, - {1304, {wxSizer, replace_3_0, 3}}, - {1305, {wxSizer, replace_2, 2}}, - {1306, {wxSizer, setDimension, 4}}, - {1307, {wxSizer, setMinSize_2, 2}}, - {1308, {wxSizer, setMinSize_1, 1}}, - {1309, {wxSizer, setItemMinSize_3_2, 3}}, - {1310, {wxSizer, setItemMinSize_2_2, 2}}, - {1311, {wxSizer, setItemMinSize_3_1, 3}}, - {1312, {wxSizer, setItemMinSize_2_1, 2}}, - {1313, {wxSizer, setItemMinSize_3_0, 3}}, - {1314, {wxSizer, setItemMinSize_2_0, 2}}, - {1315, {wxSizer, setSizeHints, 1}}, - {1316, {wxSizer, setVirtualSizeHints, 1}}, - {1317, {wxSizer, show_2_2, 2}}, - {1318, {wxSizer, show_2_1, 2}}, - {1319, {wxSizer, show_2_0, 2}}, - {1320, {wxSizer, show_1, 1}}, - {1321, {wxSizerFlags, new, 1}}, - {1322, {wxSizerFlags, align, 1}}, - {1323, {wxSizerFlags, border_2, 2}}, - {1324, {wxSizerFlags, border_1, 1}}, - {1325, {wxSizerFlags, center, 0}}, - {1326, {wxSizerFlags, centre, 0}}, - {1327, {wxSizerFlags, expand, 0}}, - {1328, {wxSizerFlags, left, 0}}, - {1329, {wxSizerFlags, proportion, 1}}, - {1330, {wxSizerFlags, right, 0}}, - {1331, {wxSizerFlags, 'Destroy', undefined}}, - {1332, {wxSizerItem, new_5_1, 5}}, - {1333, {wxSizerItem, new_2_1, 2}}, - {1334, {wxSizerItem, new_5_0, 5}}, - {1335, {wxSizerItem, new_2_0, 2}}, - {1336, {wxSizerItem, new_6, 6}}, - {1337, {wxSizerItem, new_3, 3}}, - {1338, {wxSizerItem, new_0, 0}}, - {1339, {wxSizerItem, destruct, 0}}, - {1340, {wxSizerItem, calcMin, 0}}, - {1341, {wxSizerItem, deleteWindows, 0}}, - {1342, {wxSizerItem, detachSizer, 0}}, - {1343, {wxSizerItem, getBorder, 0}}, - {1344, {wxSizerItem, getFlag, 0}}, - {1345, {wxSizerItem, getMinSize, 0}}, - {1346, {wxSizerItem, getPosition, 0}}, - {1347, {wxSizerItem, getProportion, 0}}, - {1348, {wxSizerItem, getRatio, 0}}, - {1349, {wxSizerItem, getRect, 0}}, - {1350, {wxSizerItem, getSize, 0}}, - {1351, {wxSizerItem, getSizer, 0}}, - {1352, {wxSizerItem, getSpacer, 0}}, - {1353, {wxSizerItem, getUserData, 0}}, - {1354, {wxSizerItem, getWindow, 0}}, - {1355, {wxSizerItem, isSizer, 0}}, - {1356, {wxSizerItem, isShown, 0}}, - {1357, {wxSizerItem, isSpacer, 0}}, - {1358, {wxSizerItem, isWindow, 0}}, - {1359, {wxSizerItem, setBorder, 1}}, - {1360, {wxSizerItem, setDimension, 2}}, - {1361, {wxSizerItem, setFlag, 1}}, - {1362, {wxSizerItem, setInitSize, 2}}, - {1363, {wxSizerItem, setMinSize_1, 1}}, - {1364, {wxSizerItem, setMinSize_2, 2}}, - {1365, {wxSizerItem, setProportion, 1}}, - {1366, {wxSizerItem, setRatio_2, 2}}, - {1367, {wxSizerItem, setRatio_1_1, 1}}, - {1368, {wxSizerItem, setRatio_1_0, 1}}, - {1369, {wxSizerItem, setSizer, 1}}, - {1370, {wxSizerItem, setSpacer_1, 1}}, - {1371, {wxSizerItem, setSpacer_2, 2}}, - {1372, {wxSizerItem, setWindow, 1}}, - {1373, {wxSizerItem, show, 1}}, - {1374, {wxBoxSizer, new, 1}}, - {1375, {wxBoxSizer, getOrientation, 0}}, - {1376, {wxBoxSizer, 'Destroy', undefined}}, - {1377, {wxStaticBoxSizer, new_2, 2}}, - {1378, {wxStaticBoxSizer, new_3, 3}}, - {1379, {wxStaticBoxSizer, getStaticBox, 0}}, - {1380, {wxStaticBoxSizer, 'Destroy', undefined}}, - {1381, {wxGridSizer, new_4, 4}}, - {1382, {wxGridSizer, new_2, 2}}, - {1383, {wxGridSizer, getCols, 0}}, - {1384, {wxGridSizer, getHGap, 0}}, - {1385, {wxGridSizer, getRows, 0}}, - {1386, {wxGridSizer, getVGap, 0}}, - {1387, {wxGridSizer, setCols, 1}}, - {1388, {wxGridSizer, setHGap, 1}}, - {1389, {wxGridSizer, setRows, 1}}, - {1390, {wxGridSizer, setVGap, 1}}, - {1391, {wxGridSizer, 'Destroy', undefined}}, - {1392, {wxFlexGridSizer, new_4, 4}}, - {1393, {wxFlexGridSizer, new_2, 2}}, - {1394, {wxFlexGridSizer, addGrowableCol, 2}}, - {1395, {wxFlexGridSizer, addGrowableRow, 2}}, - {1396, {wxFlexGridSizer, getFlexibleDirection, 0}}, - {1397, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}}, - {1398, {wxFlexGridSizer, removeGrowableCol, 1}}, - {1399, {wxFlexGridSizer, removeGrowableRow, 1}}, - {1400, {wxFlexGridSizer, setFlexibleDirection, 1}}, - {1401, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}}, - {1402, {wxFlexGridSizer, 'Destroy', undefined}}, - {1403, {wxGridBagSizer, new, 1}}, - {1404, {wxGridBagSizer, add_3_2, 3}}, - {1405, {wxGridBagSizer, add_3_1, 3}}, - {1406, {wxGridBagSizer, add_4, 4}}, - {1407, {wxGridBagSizer, add_1_0, 1}}, - {1408, {wxGridBagSizer, add_2_1, 2}}, - {1409, {wxGridBagSizer, add_2_0, 2}}, - {1410, {wxGridBagSizer, add_3_0, 3}}, - {1411, {wxGridBagSizer, add_1_1, 1}}, - {1412, {wxGridBagSizer, calcMin, 0}}, - {1413, {wxGridBagSizer, checkForIntersection_2, 2}}, - {1414, {wxGridBagSizer, checkForIntersection_3, 3}}, - {1415, {wxGridBagSizer, findItem_1_1, 1}}, - {1416, {wxGridBagSizer, findItem_1_0, 1}}, - {1417, {wxGridBagSizer, findItemAtPoint, 1}}, - {1418, {wxGridBagSizer, findItemAtPosition, 1}}, - {1419, {wxGridBagSizer, findItemWithData, 1}}, - {1420, {wxGridBagSizer, getCellSize, 2}}, - {1421, {wxGridBagSizer, getEmptyCellSize, 0}}, - {1422, {wxGridBagSizer, getItemPosition_1_2, 1}}, - {1423, {wxGridBagSizer, getItemPosition_1_1, 1}}, - {1424, {wxGridBagSizer, getItemPosition_1_0, 1}}, - {1425, {wxGridBagSizer, getItemSpan_1_2, 1}}, - {1426, {wxGridBagSizer, getItemSpan_1_1, 1}}, - {1427, {wxGridBagSizer, getItemSpan_1_0, 1}}, - {1428, {wxGridBagSizer, setEmptyCellSize, 1}}, - {1429, {wxGridBagSizer, setItemPosition_2_2, 2}}, - {1430, {wxGridBagSizer, setItemPosition_2_1, 2}}, - {1431, {wxGridBagSizer, setItemPosition_2_0, 2}}, - {1432, {wxGridBagSizer, setItemSpan_2_2, 2}}, - {1433, {wxGridBagSizer, setItemSpan_2_1, 2}}, - {1434, {wxGridBagSizer, setItemSpan_2_0, 2}}, - {1435, {wxGridBagSizer, 'Destroy', undefined}}, - {1436, {wxStdDialogButtonSizer, new, 0}}, - {1437, {wxStdDialogButtonSizer, addButton, 1}}, - {1438, {wxStdDialogButtonSizer, realize, 0}}, - {1439, {wxStdDialogButtonSizer, setAffirmativeButton, 1}}, - {1440, {wxStdDialogButtonSizer, setCancelButton, 1}}, - {1441, {wxStdDialogButtonSizer, setNegativeButton, 1}}, - {1442, {wxStdDialogButtonSizer, 'Destroy', undefined}}, - {1443, {wxFont, new_0, 0}}, - {1444, {wxFont, new_1, 1}}, - {1445, {wxFont, new_5, 5}}, - {1447, {wxFont, destruct, 0}}, - {1448, {wxFont, isFixedWidth, 0}}, - {1449, {wxFont, getDefaultEncoding, 0}}, - {1450, {wxFont, getFaceName, 0}}, - {1451, {wxFont, getFamily, 0}}, - {1452, {wxFont, getNativeFontInfoDesc, 0}}, - {1453, {wxFont, getNativeFontInfoUserDesc, 0}}, - {1454, {wxFont, getPointSize, 0}}, - {1455, {wxFont, getStyle, 0}}, - {1456, {wxFont, getUnderlined, 0}}, - {1457, {wxFont, getWeight, 0}}, - {1458, {wxFont, ok, 0}}, - {1459, {wxFont, setDefaultEncoding, 1}}, - {1460, {wxFont, setFaceName, 1}}, - {1461, {wxFont, setFamily, 1}}, - {1462, {wxFont, setPointSize, 1}}, - {1463, {wxFont, setStyle, 1}}, - {1464, {wxFont, setUnderlined, 1}}, - {1465, {wxFont, setWeight, 1}}, - {1466, {wxToolTip, enable, 1}}, - {1467, {wxToolTip, setDelay, 1}}, - {1468, {wxToolTip, new, 1}}, - {1469, {wxToolTip, setTip, 1}}, - {1470, {wxToolTip, getTip, 0}}, - {1471, {wxToolTip, getWindow, 0}}, - {1472, {wxToolTip, 'Destroy', undefined}}, - {1474, {wxButton, new_3, 3}}, - {1475, {wxButton, new_0, 0}}, - {1476, {wxButton, destruct, 0}}, - {1477, {wxButton, create, 3}}, - {1478, {wxButton, getDefaultSize, 0}}, - {1479, {wxButton, setDefault, 0}}, - {1480, {wxButton, setLabel, 1}}, - {1482, {wxBitmapButton, new_4, 4}}, - {1483, {wxBitmapButton, new_0, 0}}, - {1484, {wxBitmapButton, create, 4}}, - {1485, {wxBitmapButton, getBitmapDisabled, 0}}, - {1487, {wxBitmapButton, getBitmapFocus, 0}}, - {1489, {wxBitmapButton, getBitmapLabel, 0}}, - {1491, {wxBitmapButton, getBitmapSelected, 0}}, - {1493, {wxBitmapButton, setBitmapDisabled, 1}}, - {1494, {wxBitmapButton, setBitmapFocus, 1}}, - {1495, {wxBitmapButton, setBitmapLabel, 1}}, - {1496, {wxBitmapButton, setBitmapSelected, 1}}, - {1497, {wxBitmapButton, 'Destroy', undefined}}, - {1498, {wxToggleButton, new_0, 0}}, - {1499, {wxToggleButton, new_4, 4}}, - {1500, {wxToggleButton, create, 4}}, - {1501, {wxToggleButton, getValue, 0}}, - {1502, {wxToggleButton, setValue, 1}}, - {1503, {wxToggleButton, 'Destroy', undefined}}, - {1504, {wxCalendarCtrl, new_0, 0}}, - {1505, {wxCalendarCtrl, new_3, 3}}, - {1506, {wxCalendarCtrl, create, 3}}, - {1507, {wxCalendarCtrl, destruct, 0}}, - {1508, {wxCalendarCtrl, setDate, 1}}, - {1509, {wxCalendarCtrl, getDate, 0}}, - {1510, {wxCalendarCtrl, enableYearChange, 1}}, - {1511, {wxCalendarCtrl, enableMonthChange, 1}}, - {1512, {wxCalendarCtrl, enableHolidayDisplay, 1}}, - {1513, {wxCalendarCtrl, setHeaderColours, 2}}, - {1514, {wxCalendarCtrl, getHeaderColourFg, 0}}, - {1515, {wxCalendarCtrl, getHeaderColourBg, 0}}, - {1516, {wxCalendarCtrl, setHighlightColours, 2}}, - {1517, {wxCalendarCtrl, getHighlightColourFg, 0}}, - {1518, {wxCalendarCtrl, getHighlightColourBg, 0}}, - {1519, {wxCalendarCtrl, setHolidayColours, 2}}, - {1520, {wxCalendarCtrl, getHolidayColourFg, 0}}, - {1521, {wxCalendarCtrl, getHolidayColourBg, 0}}, - {1522, {wxCalendarCtrl, getAttr, 1}}, - {1523, {wxCalendarCtrl, setAttr, 2}}, - {1524, {wxCalendarCtrl, setHoliday, 1}}, - {1525, {wxCalendarCtrl, resetAttr, 1}}, - {1526, {wxCalendarCtrl, hitTest, 2}}, - {1527, {wxCalendarDateAttr, new_0, 0}}, - {1528, {wxCalendarDateAttr, new_2_1, 2}}, - {1529, {wxCalendarDateAttr, new_2_0, 2}}, - {1530, {wxCalendarDateAttr, setTextColour, 1}}, - {1531, {wxCalendarDateAttr, setBackgroundColour, 1}}, - {1532, {wxCalendarDateAttr, setBorderColour, 1}}, - {1533, {wxCalendarDateAttr, setFont, 1}}, - {1534, {wxCalendarDateAttr, setBorder, 1}}, - {1535, {wxCalendarDateAttr, setHoliday, 1}}, - {1536, {wxCalendarDateAttr, hasTextColour, 0}}, - {1537, {wxCalendarDateAttr, hasBackgroundColour, 0}}, - {1538, {wxCalendarDateAttr, hasBorderColour, 0}}, - {1539, {wxCalendarDateAttr, hasFont, 0}}, - {1540, {wxCalendarDateAttr, hasBorder, 0}}, - {1541, {wxCalendarDateAttr, isHoliday, 0}}, - {1542, {wxCalendarDateAttr, getTextColour, 0}}, - {1543, {wxCalendarDateAttr, getBackgroundColour, 0}}, - {1544, {wxCalendarDateAttr, getBorderColour, 0}}, - {1545, {wxCalendarDateAttr, getFont, 0}}, - {1546, {wxCalendarDateAttr, getBorder, 0}}, - {1547, {wxCalendarDateAttr, 'Destroy', undefined}}, - {1549, {wxCheckBox, new_4, 4}}, - {1550, {wxCheckBox, new_0, 0}}, - {1551, {wxCheckBox, create, 4}}, - {1552, {wxCheckBox, getValue, 0}}, - {1553, {wxCheckBox, get3StateValue, 0}}, - {1554, {wxCheckBox, is3rdStateAllowedForUser, 0}}, - {1555, {wxCheckBox, is3State, 0}}, - {1556, {wxCheckBox, isChecked, 0}}, - {1557, {wxCheckBox, setValue, 1}}, - {1558, {wxCheckBox, set3StateValue, 1}}, - {1559, {wxCheckBox, 'Destroy', undefined}}, - {1560, {wxCheckListBox, new_0, 0}}, - {1562, {wxCheckListBox, new_3, 3}}, - {1563, {wxCheckListBox, check, 2}}, - {1564, {wxCheckListBox, isChecked, 1}}, - {1565, {wxCheckListBox, 'Destroy', undefined}}, - {1568, {wxChoice, new_3, 3}}, - {1569, {wxChoice, new_0, 0}}, - {1571, {wxChoice, destruct, 0}}, - {1573, {wxChoice, create, 6}}, - {1574, {wxChoice, delete, 1}}, - {1575, {wxChoice, getColumns, 0}}, - {1576, {wxChoice, setColumns, 1}}, - {1577, {wxComboBox, new_0, 0}}, - {1579, {wxComboBox, new_3, 3}}, - {1580, {wxComboBox, destruct, 0}}, - {1582, {wxComboBox, create, 7}}, - {1583, {wxComboBox, canCopy, 0}}, - {1584, {wxComboBox, canCut, 0}}, - {1585, {wxComboBox, canPaste, 0}}, - {1586, {wxComboBox, canRedo, 0}}, - {1587, {wxComboBox, canUndo, 0}}, - {1588, {wxComboBox, copy, 0}}, - {1589, {wxComboBox, cut, 0}}, - {1590, {wxComboBox, getInsertionPoint, 0}}, - {1591, {wxComboBox, getLastPosition, 0}}, - {1592, {wxComboBox, getValue, 0}}, - {1593, {wxComboBox, paste, 0}}, - {1594, {wxComboBox, redo, 0}}, - {1595, {wxComboBox, replace, 3}}, - {1596, {wxComboBox, remove, 2}}, - {1597, {wxComboBox, setInsertionPoint, 1}}, - {1598, {wxComboBox, setInsertionPointEnd, 0}}, - {1599, {wxComboBox, setSelection_1, 1}}, - {1600, {wxComboBox, setSelection_2, 2}}, - {1601, {wxComboBox, setValue, 1}}, - {1602, {wxComboBox, undo, 0}}, - {1603, {wxGauge, new_0, 0}}, - {1604, {wxGauge, new_4, 4}}, - {1605, {wxGauge, create, 4}}, - {1606, {wxGauge, getRange, 0}}, - {1607, {wxGauge, getValue, 0}}, - {1608, {wxGauge, isVertical, 0}}, - {1609, {wxGauge, setRange, 1}}, - {1610, {wxGauge, setValue, 1}}, - {1611, {wxGauge, pulse, 0}}, - {1612, {wxGauge, 'Destroy', undefined}}, - {1613, {wxGenericDirCtrl, new_0, 0}}, - {1614, {wxGenericDirCtrl, new_2, 2}}, - {1615, {wxGenericDirCtrl, destruct, 0}}, - {1616, {wxGenericDirCtrl, create, 2}}, - {1617, {wxGenericDirCtrl, init, 0}}, - {1618, {wxGenericDirCtrl, collapseTree, 0}}, - {1619, {wxGenericDirCtrl, expandPath, 1}}, - {1620, {wxGenericDirCtrl, getDefaultPath, 0}}, - {1621, {wxGenericDirCtrl, getPath, 0}}, - {1622, {wxGenericDirCtrl, getFilePath, 0}}, - {1623, {wxGenericDirCtrl, getFilter, 0}}, - {1624, {wxGenericDirCtrl, getFilterIndex, 0}}, - {1625, {wxGenericDirCtrl, getRootId, 0}}, - {1626, {wxGenericDirCtrl, getTreeCtrl, 0}}, - {1627, {wxGenericDirCtrl, reCreateTree, 0}}, - {1628, {wxGenericDirCtrl, setDefaultPath, 1}}, - {1629, {wxGenericDirCtrl, setFilter, 1}}, - {1630, {wxGenericDirCtrl, setFilterIndex, 1}}, - {1631, {wxGenericDirCtrl, setPath, 1}}, - {1633, {wxStaticBox, new_4, 4}}, - {1634, {wxStaticBox, new_0, 0}}, - {1635, {wxStaticBox, create, 4}}, - {1636, {wxStaticBox, 'Destroy', undefined}}, - {1638, {wxStaticLine, new_2, 2}}, - {1639, {wxStaticLine, new_0, 0}}, - {1640, {wxStaticLine, create, 2}}, - {1641, {wxStaticLine, isVertical, 0}}, - {1642, {wxStaticLine, getDefaultSize, 0}}, - {1643, {wxStaticLine, 'Destroy', undefined}}, - {1646, {wxListBox, new_3, 3}}, - {1647, {wxListBox, new_0, 0}}, - {1649, {wxListBox, destruct, 0}}, - {1651, {wxListBox, create, 6}}, - {1652, {wxListBox, deselect, 1}}, - {1653, {wxListBox, getSelections, 1}}, - {1654, {wxListBox, insertItems, 2}}, - {1655, {wxListBox, isSelected, 1}}, - {1656, {wxListBox, set, 1}}, - {1657, {wxListBox, hitTest, 1}}, - {1658, {wxListBox, setFirstItem_1_0, 1}}, - {1659, {wxListBox, setFirstItem_1_1, 1}}, - {1660, {wxListCtrl, new_0, 0}}, - {1661, {wxListCtrl, new_2, 2}}, - {1662, {wxListCtrl, arrange, 1}}, - {1663, {wxListCtrl, assignImageList, 2}}, - {1664, {wxListCtrl, clearAll, 0}}, - {1665, {wxListCtrl, create, 2}}, - {1666, {wxListCtrl, deleteAllItems, 0}}, - {1667, {wxListCtrl, deleteColumn, 1}}, - {1668, {wxListCtrl, deleteItem, 1}}, - {1669, {wxListCtrl, editLabel, 1}}, - {1670, {wxListCtrl, ensureVisible, 1}}, - {1671, {wxListCtrl, findItem_3_0, 3}}, - {1672, {wxListCtrl, findItem_3_1, 3}}, - {1673, {wxListCtrl, getColumn, 2}}, - {1674, {wxListCtrl, getColumnCount, 0}}, - {1675, {wxListCtrl, getColumnWidth, 1}}, - {1676, {wxListCtrl, getCountPerPage, 0}}, - {1677, {wxListCtrl, getEditControl, 0}}, - {1678, {wxListCtrl, getImageList, 1}}, - {1679, {wxListCtrl, getItem, 1}}, - {1680, {wxListCtrl, getItemBackgroundColour, 1}}, - {1681, {wxListCtrl, getItemCount, 0}}, - {1682, {wxListCtrl, getItemData, 1}}, - {1683, {wxListCtrl, getItemFont, 1}}, - {1684, {wxListCtrl, getItemPosition, 2}}, - {1685, {wxListCtrl, getItemRect, 3}}, - {1686, {wxListCtrl, getItemSpacing, 0}}, - {1687, {wxListCtrl, getItemState, 2}}, - {1688, {wxListCtrl, getItemText, 1}}, - {1689, {wxListCtrl, getItemTextColour, 1}}, - {1690, {wxListCtrl, getNextItem, 2}}, - {1691, {wxListCtrl, getSelectedItemCount, 0}}, - {1692, {wxListCtrl, getTextColour, 0}}, - {1693, {wxListCtrl, getTopItem, 0}}, - {1694, {wxListCtrl, getViewRect, 0}}, - {1695, {wxListCtrl, hitTest, 3}}, - {1696, {wxListCtrl, insertColumn_2, 2}}, - {1697, {wxListCtrl, insertColumn_3, 3}}, - {1698, {wxListCtrl, insertItem_1, 1}}, - {1699, {wxListCtrl, insertItem_2_1, 2}}, - {1700, {wxListCtrl, insertItem_2_0, 2}}, - {1701, {wxListCtrl, insertItem_3, 3}}, - {1702, {wxListCtrl, refreshItem, 1}}, - {1703, {wxListCtrl, refreshItems, 2}}, - {1704, {wxListCtrl, scrollList, 2}}, - {1705, {wxListCtrl, setBackgroundColour, 1}}, - {1706, {wxListCtrl, setColumn, 2}}, - {1707, {wxListCtrl, setColumnWidth, 2}}, - {1708, {wxListCtrl, setImageList, 2}}, - {1709, {wxListCtrl, setItem_1, 1}}, - {1710, {wxListCtrl, setItem_4, 4}}, - {1711, {wxListCtrl, setItemBackgroundColour, 2}}, - {1712, {wxListCtrl, setItemCount, 1}}, - {1713, {wxListCtrl, setItemData, 2}}, - {1714, {wxListCtrl, setItemFont, 2}}, - {1715, {wxListCtrl, setItemImage, 3}}, - {1716, {wxListCtrl, setItemColumnImage, 3}}, - {1717, {wxListCtrl, setItemPosition, 2}}, - {1718, {wxListCtrl, setItemState, 3}}, - {1719, {wxListCtrl, setItemText, 2}}, - {1720, {wxListCtrl, setItemTextColour, 2}}, - {1721, {wxListCtrl, setSingleStyle, 2}}, - {1722, {wxListCtrl, setTextColour, 1}}, - {1723, {wxListCtrl, setWindowStyleFlag, 1}}, - {1724, {wxListCtrl, sortItems, 2}}, - {1725, {wxListCtrl, 'Destroy', undefined}}, - {1726, {wxListView, clearColumnImage, 1}}, - {1727, {wxListView, focus, 1}}, - {1728, {wxListView, getFirstSelected, 0}}, - {1729, {wxListView, getFocusedItem, 0}}, - {1730, {wxListView, getNextSelected, 1}}, - {1731, {wxListView, isSelected, 1}}, - {1732, {wxListView, select, 2}}, - {1733, {wxListView, setColumnImage, 2}}, - {1734, {wxListItem, new_0, 0}}, - {1735, {wxListItem, new_1, 1}}, - {1736, {wxListItem, destruct, 0}}, - {1737, {wxListItem, clear, 0}}, - {1738, {wxListItem, getAlign, 0}}, - {1739, {wxListItem, getBackgroundColour, 0}}, - {1740, {wxListItem, getColumn, 0}}, - {1741, {wxListItem, getFont, 0}}, - {1742, {wxListItem, getId, 0}}, - {1743, {wxListItem, getImage, 0}}, - {1744, {wxListItem, getMask, 0}}, - {1745, {wxListItem, getState, 0}}, - {1746, {wxListItem, getText, 0}}, - {1747, {wxListItem, getTextColour, 0}}, - {1748, {wxListItem, getWidth, 0}}, - {1749, {wxListItem, setAlign, 1}}, - {1750, {wxListItem, setBackgroundColour, 1}}, - {1751, {wxListItem, setColumn, 1}}, - {1752, {wxListItem, setFont, 1}}, - {1753, {wxListItem, setId, 1}}, - {1754, {wxListItem, setImage, 1}}, - {1755, {wxListItem, setMask, 1}}, - {1756, {wxListItem, setState, 1}}, - {1757, {wxListItem, setStateMask, 1}}, - {1758, {wxListItem, setText, 1}}, - {1759, {wxListItem, setTextColour, 1}}, - {1760, {wxListItem, setWidth, 1}}, - {1761, {wxListItemAttr, new_0, 0}}, - {1762, {wxListItemAttr, new_3, 3}}, - {1763, {wxListItemAttr, getBackgroundColour, 0}}, - {1764, {wxListItemAttr, getFont, 0}}, - {1765, {wxListItemAttr, getTextColour, 0}}, - {1766, {wxListItemAttr, hasBackgroundColour, 0}}, - {1767, {wxListItemAttr, hasFont, 0}}, - {1768, {wxListItemAttr, hasTextColour, 0}}, - {1769, {wxListItemAttr, setBackgroundColour, 1}}, - {1770, {wxListItemAttr, setFont, 1}}, - {1771, {wxListItemAttr, setTextColour, 1}}, - {1772, {wxListItemAttr, 'Destroy', undefined}}, - {1773, {wxImageList, new_0, 0}}, - {1774, {wxImageList, new_3, 3}}, - {1775, {wxImageList, add_1, 1}}, - {1776, {wxImageList, add_2_0, 2}}, - {1777, {wxImageList, add_2_1, 2}}, - {1778, {wxImageList, create, 3}}, - {1780, {wxImageList, draw, 5}}, - {1781, {wxImageList, getBitmap, 1}}, - {1782, {wxImageList, getIcon, 1}}, - {1783, {wxImageList, getImageCount, 0}}, - {1784, {wxImageList, getSize, 3}}, - {1785, {wxImageList, remove, 1}}, - {1786, {wxImageList, removeAll, 0}}, - {1787, {wxImageList, replace_2, 2}}, - {1788, {wxImageList, replace_3, 3}}, - {1789, {wxImageList, 'Destroy', undefined}}, - {1790, {wxTextAttr, new_0, 0}}, - {1791, {wxTextAttr, new_2, 2}}, - {1792, {wxTextAttr, getAlignment, 0}}, - {1793, {wxTextAttr, getBackgroundColour, 0}}, - {1794, {wxTextAttr, getFont, 0}}, - {1795, {wxTextAttr, getLeftIndent, 0}}, - {1796, {wxTextAttr, getLeftSubIndent, 0}}, - {1797, {wxTextAttr, getRightIndent, 0}}, - {1798, {wxTextAttr, getTabs, 0}}, - {1799, {wxTextAttr, getTextColour, 0}}, - {1800, {wxTextAttr, hasBackgroundColour, 0}}, - {1801, {wxTextAttr, hasFont, 0}}, - {1802, {wxTextAttr, hasTextColour, 0}}, - {1803, {wxTextAttr, getFlags, 0}}, - {1804, {wxTextAttr, isDefault, 0}}, - {1805, {wxTextAttr, setAlignment, 1}}, - {1806, {wxTextAttr, setBackgroundColour, 1}}, - {1807, {wxTextAttr, setFlags, 1}}, - {1808, {wxTextAttr, setFont, 2}}, - {1809, {wxTextAttr, setLeftIndent, 2}}, - {1810, {wxTextAttr, setRightIndent, 1}}, - {1811, {wxTextAttr, setTabs, 1}}, - {1812, {wxTextAttr, setTextColour, 1}}, - {1813, {wxTextAttr, 'Destroy', undefined}}, - {1815, {wxTextCtrl, new_3, 3}}, - {1816, {wxTextCtrl, new_0, 0}}, - {1818, {wxTextCtrl, destruct, 0}}, - {1819, {wxTextCtrl, appendText, 1}}, - {1820, {wxTextCtrl, canCopy, 0}}, - {1821, {wxTextCtrl, canCut, 0}}, - {1822, {wxTextCtrl, canPaste, 0}}, - {1823, {wxTextCtrl, canRedo, 0}}, - {1824, {wxTextCtrl, canUndo, 0}}, - {1825, {wxTextCtrl, clear, 0}}, - {1826, {wxTextCtrl, copy, 0}}, - {1827, {wxTextCtrl, create, 3}}, - {1828, {wxTextCtrl, cut, 0}}, - {1829, {wxTextCtrl, discardEdits, 0}}, - {1830, {wxTextCtrl, changeValue, 1}}, - {1831, {wxTextCtrl, emulateKeyPress, 1}}, - {1832, {wxTextCtrl, getDefaultStyle, 0}}, - {1833, {wxTextCtrl, getInsertionPoint, 0}}, - {1834, {wxTextCtrl, getLastPosition, 0}}, - {1835, {wxTextCtrl, getLineLength, 1}}, - {1836, {wxTextCtrl, getLineText, 1}}, - {1837, {wxTextCtrl, getNumberOfLines, 0}}, - {1838, {wxTextCtrl, getRange, 2}}, - {1839, {wxTextCtrl, getSelection, 2}}, - {1840, {wxTextCtrl, getStringSelection, 0}}, - {1841, {wxTextCtrl, getStyle, 2}}, - {1842, {wxTextCtrl, getValue, 0}}, - {1843, {wxTextCtrl, isEditable, 0}}, - {1844, {wxTextCtrl, isModified, 0}}, - {1845, {wxTextCtrl, isMultiLine, 0}}, - {1846, {wxTextCtrl, isSingleLine, 0}}, - {1847, {wxTextCtrl, loadFile, 2}}, - {1848, {wxTextCtrl, markDirty, 0}}, - {1849, {wxTextCtrl, paste, 0}}, - {1850, {wxTextCtrl, positionToXY, 3}}, - {1851, {wxTextCtrl, redo, 0}}, - {1852, {wxTextCtrl, remove, 2}}, - {1853, {wxTextCtrl, replace, 3}}, - {1854, {wxTextCtrl, saveFile, 1}}, - {1855, {wxTextCtrl, setDefaultStyle, 1}}, - {1856, {wxTextCtrl, setEditable, 1}}, - {1857, {wxTextCtrl, setInsertionPoint, 1}}, - {1858, {wxTextCtrl, setInsertionPointEnd, 0}}, - {1860, {wxTextCtrl, setMaxLength, 1}}, - {1861, {wxTextCtrl, setSelection, 2}}, - {1862, {wxTextCtrl, setStyle, 3}}, - {1863, {wxTextCtrl, setValue, 1}}, - {1864, {wxTextCtrl, showPosition, 1}}, - {1865, {wxTextCtrl, undo, 0}}, - {1866, {wxTextCtrl, writeText, 1}}, - {1867, {wxTextCtrl, xYToPosition, 2}}, - {1870, {wxNotebook, new_0, 0}}, - {1871, {wxNotebook, new_3, 3}}, - {1872, {wxNotebook, destruct, 0}}, - {1873, {wxNotebook, addPage, 3}}, - {1874, {wxNotebook, advanceSelection, 1}}, - {1875, {wxNotebook, assignImageList, 1}}, - {1876, {wxNotebook, create, 3}}, - {1877, {wxNotebook, deleteAllPages, 0}}, - {1878, {wxNotebook, deletePage, 1}}, - {1879, {wxNotebook, removePage, 1}}, - {1880, {wxNotebook, getCurrentPage, 0}}, - {1881, {wxNotebook, getImageList, 0}}, - {1883, {wxNotebook, getPage, 1}}, - {1884, {wxNotebook, getPageCount, 0}}, - {1885, {wxNotebook, getPageImage, 1}}, - {1886, {wxNotebook, getPageText, 1}}, - {1887, {wxNotebook, getRowCount, 0}}, - {1888, {wxNotebook, getSelection, 0}}, - {1889, {wxNotebook, getThemeBackgroundColour, 0}}, - {1891, {wxNotebook, hitTest, 2}}, - {1893, {wxNotebook, insertPage, 4}}, - {1894, {wxNotebook, setImageList, 1}}, - {1895, {wxNotebook, setPadding, 1}}, - {1896, {wxNotebook, setPageSize, 1}}, - {1897, {wxNotebook, setPageImage, 2}}, - {1898, {wxNotebook, setPageText, 2}}, - {1899, {wxNotebook, setSelection, 1}}, - {1900, {wxNotebook, changeSelection, 1}}, - {1901, {wxChoicebook, new_0, 0}}, - {1902, {wxChoicebook, new_3, 3}}, - {1903, {wxChoicebook, addPage, 3}}, - {1904, {wxChoicebook, advanceSelection, 1}}, - {1905, {wxChoicebook, assignImageList, 1}}, - {1906, {wxChoicebook, create, 3}}, - {1907, {wxChoicebook, deleteAllPages, 0}}, - {1908, {wxChoicebook, deletePage, 1}}, - {1909, {wxChoicebook, removePage, 1}}, - {1910, {wxChoicebook, getCurrentPage, 0}}, - {1911, {wxChoicebook, getImageList, 0}}, - {1913, {wxChoicebook, getPage, 1}}, - {1914, {wxChoicebook, getPageCount, 0}}, - {1915, {wxChoicebook, getPageImage, 1}}, - {1916, {wxChoicebook, getPageText, 1}}, - {1917, {wxChoicebook, getSelection, 0}}, - {1918, {wxChoicebook, hitTest, 2}}, - {1919, {wxChoicebook, insertPage, 4}}, - {1920, {wxChoicebook, setImageList, 1}}, - {1921, {wxChoicebook, setPageSize, 1}}, - {1922, {wxChoicebook, setPageImage, 2}}, - {1923, {wxChoicebook, setPageText, 2}}, - {1924, {wxChoicebook, setSelection, 1}}, - {1925, {wxChoicebook, changeSelection, 1}}, - {1926, {wxChoicebook, 'Destroy', undefined}}, - {1927, {wxToolbook, new_0, 0}}, - {1928, {wxToolbook, new_3, 3}}, - {1929, {wxToolbook, addPage, 3}}, - {1930, {wxToolbook, advanceSelection, 1}}, - {1931, {wxToolbook, assignImageList, 1}}, - {1932, {wxToolbook, create, 3}}, - {1933, {wxToolbook, deleteAllPages, 0}}, - {1934, {wxToolbook, deletePage, 1}}, - {1935, {wxToolbook, removePage, 1}}, - {1936, {wxToolbook, getCurrentPage, 0}}, - {1937, {wxToolbook, getImageList, 0}}, - {1939, {wxToolbook, getPage, 1}}, - {1940, {wxToolbook, getPageCount, 0}}, - {1941, {wxToolbook, getPageImage, 1}}, - {1942, {wxToolbook, getPageText, 1}}, - {1943, {wxToolbook, getSelection, 0}}, - {1945, {wxToolbook, hitTest, 2}}, - {1946, {wxToolbook, insertPage, 4}}, - {1947, {wxToolbook, setImageList, 1}}, - {1948, {wxToolbook, setPageSize, 1}}, - {1949, {wxToolbook, setPageImage, 2}}, - {1950, {wxToolbook, setPageText, 2}}, - {1951, {wxToolbook, setSelection, 1}}, - {1952, {wxToolbook, changeSelection, 1}}, - {1953, {wxToolbook, 'Destroy', undefined}}, - {1954, {wxListbook, new_0, 0}}, - {1955, {wxListbook, new_3, 3}}, - {1956, {wxListbook, addPage, 3}}, - {1957, {wxListbook, advanceSelection, 1}}, - {1958, {wxListbook, assignImageList, 1}}, - {1959, {wxListbook, create, 3}}, - {1960, {wxListbook, deleteAllPages, 0}}, - {1961, {wxListbook, deletePage, 1}}, - {1962, {wxListbook, removePage, 1}}, - {1963, {wxListbook, getCurrentPage, 0}}, - {1964, {wxListbook, getImageList, 0}}, - {1966, {wxListbook, getPage, 1}}, - {1967, {wxListbook, getPageCount, 0}}, - {1968, {wxListbook, getPageImage, 1}}, - {1969, {wxListbook, getPageText, 1}}, - {1970, {wxListbook, getSelection, 0}}, - {1972, {wxListbook, hitTest, 2}}, - {1973, {wxListbook, insertPage, 4}}, - {1974, {wxListbook, setImageList, 1}}, - {1975, {wxListbook, setPageSize, 1}}, - {1976, {wxListbook, setPageImage, 2}}, - {1977, {wxListbook, setPageText, 2}}, - {1978, {wxListbook, setSelection, 1}}, - {1979, {wxListbook, changeSelection, 1}}, - {1980, {wxListbook, 'Destroy', undefined}}, - {1981, {wxTreebook, new_0, 0}}, - {1982, {wxTreebook, new_3, 3}}, - {1983, {wxTreebook, addPage, 3}}, - {1984, {wxTreebook, advanceSelection, 1}}, - {1985, {wxTreebook, assignImageList, 1}}, - {1986, {wxTreebook, create, 3}}, - {1987, {wxTreebook, deleteAllPages, 0}}, - {1988, {wxTreebook, deletePage, 1}}, - {1989, {wxTreebook, removePage, 1}}, - {1990, {wxTreebook, getCurrentPage, 0}}, - {1991, {wxTreebook, getImageList, 0}}, - {1993, {wxTreebook, getPage, 1}}, - {1994, {wxTreebook, getPageCount, 0}}, - {1995, {wxTreebook, getPageImage, 1}}, - {1996, {wxTreebook, getPageText, 1}}, - {1997, {wxTreebook, getSelection, 0}}, - {1998, {wxTreebook, expandNode, 2}}, - {1999, {wxTreebook, isNodeExpanded, 1}}, - {2001, {wxTreebook, hitTest, 2}}, - {2002, {wxTreebook, insertPage, 4}}, - {2003, {wxTreebook, insertSubPage, 4}}, - {2004, {wxTreebook, setImageList, 1}}, - {2005, {wxTreebook, setPageSize, 1}}, - {2006, {wxTreebook, setPageImage, 2}}, - {2007, {wxTreebook, setPageText, 2}}, - {2008, {wxTreebook, setSelection, 1}}, - {2009, {wxTreebook, changeSelection, 1}}, - {2010, {wxTreebook, 'Destroy', undefined}}, - {2013, {wxTreeCtrl, new_2, 2}}, - {2014, {wxTreeCtrl, new_0, 0}}, - {2016, {wxTreeCtrl, destruct, 0}}, - {2017, {wxTreeCtrl, addRoot, 2}}, - {2018, {wxTreeCtrl, appendItem, 3}}, - {2019, {wxTreeCtrl, assignImageList, 1}}, - {2020, {wxTreeCtrl, assignStateImageList, 1}}, - {2021, {wxTreeCtrl, collapse, 1}}, - {2022, {wxTreeCtrl, collapseAndReset, 1}}, - {2023, {wxTreeCtrl, create, 2}}, - {2024, {wxTreeCtrl, delete, 1}}, - {2025, {wxTreeCtrl, deleteAllItems, 0}}, - {2026, {wxTreeCtrl, deleteChildren, 1}}, - {2027, {wxTreeCtrl, editLabel, 1}}, - {2028, {wxTreeCtrl, ensureVisible, 1}}, - {2029, {wxTreeCtrl, expand, 1}}, - {2030, {wxTreeCtrl, getBoundingRect, 3}}, - {2032, {wxTreeCtrl, getChildrenCount, 2}}, - {2033, {wxTreeCtrl, getCount, 0}}, - {2034, {wxTreeCtrl, getEditControl, 0}}, - {2035, {wxTreeCtrl, getFirstChild, 2}}, - {2036, {wxTreeCtrl, getNextChild, 2}}, - {2037, {wxTreeCtrl, getFirstVisibleItem, 0}}, - {2038, {wxTreeCtrl, getImageList, 0}}, - {2039, {wxTreeCtrl, getIndent, 0}}, - {2040, {wxTreeCtrl, getItemBackgroundColour, 1}}, - {2041, {wxTreeCtrl, getItemData, 1}}, - {2042, {wxTreeCtrl, getItemFont, 1}}, - {2043, {wxTreeCtrl, getItemImage_1, 1}}, - {2044, {wxTreeCtrl, getItemImage_2, 2}}, - {2045, {wxTreeCtrl, getItemText, 1}}, - {2046, {wxTreeCtrl, getItemTextColour, 1}}, - {2047, {wxTreeCtrl, getLastChild, 1}}, - {2048, {wxTreeCtrl, getNextSibling, 1}}, - {2049, {wxTreeCtrl, getNextVisible, 1}}, - {2050, {wxTreeCtrl, getItemParent, 1}}, - {2051, {wxTreeCtrl, getPrevSibling, 1}}, - {2052, {wxTreeCtrl, getPrevVisible, 1}}, - {2053, {wxTreeCtrl, getRootItem, 0}}, - {2054, {wxTreeCtrl, getSelection, 0}}, - {2055, {wxTreeCtrl, getSelections, 1}}, - {2056, {wxTreeCtrl, getStateImageList, 0}}, - {2057, {wxTreeCtrl, hitTest, 2}}, - {2059, {wxTreeCtrl, insertItem, 4}}, - {2060, {wxTreeCtrl, isBold, 1}}, - {2061, {wxTreeCtrl, isExpanded, 1}}, - {2062, {wxTreeCtrl, isSelected, 1}}, - {2063, {wxTreeCtrl, isVisible, 1}}, - {2064, {wxTreeCtrl, itemHasChildren, 1}}, - {2065, {wxTreeCtrl, isTreeItemIdOk, 1}}, - {2066, {wxTreeCtrl, prependItem, 3}}, - {2067, {wxTreeCtrl, scrollTo, 1}}, - {2068, {wxTreeCtrl, selectItem_1, 1}}, - {2069, {wxTreeCtrl, selectItem_2, 2}}, - {2070, {wxTreeCtrl, setIndent, 1}}, - {2071, {wxTreeCtrl, setImageList, 1}}, - {2072, {wxTreeCtrl, setItemBackgroundColour, 2}}, - {2073, {wxTreeCtrl, setItemBold, 2}}, - {2074, {wxTreeCtrl, setItemData, 2}}, - {2075, {wxTreeCtrl, setItemDropHighlight, 2}}, - {2076, {wxTreeCtrl, setItemFont, 2}}, - {2077, {wxTreeCtrl, setItemHasChildren, 2}}, - {2078, {wxTreeCtrl, setItemImage_2, 2}}, - {2079, {wxTreeCtrl, setItemImage_3, 3}}, - {2080, {wxTreeCtrl, setItemText, 2}}, - {2081, {wxTreeCtrl, setItemTextColour, 2}}, - {2082, {wxTreeCtrl, setStateImageList, 1}}, - {2083, {wxTreeCtrl, setWindowStyle, 1}}, - {2084, {wxTreeCtrl, sortChildren, 1}}, - {2085, {wxTreeCtrl, toggle, 1}}, - {2086, {wxTreeCtrl, toggleItemSelection, 1}}, - {2087, {wxTreeCtrl, unselect, 0}}, - {2088, {wxTreeCtrl, unselectAll, 0}}, - {2089, {wxTreeCtrl, unselectItem, 1}}, - {2090, {wxScrollBar, new_0, 0}}, - {2091, {wxScrollBar, new_3, 3}}, - {2092, {wxScrollBar, destruct, 0}}, - {2093, {wxScrollBar, create, 3}}, - {2094, {wxScrollBar, getRange, 0}}, - {2095, {wxScrollBar, getPageSize, 0}}, - {2096, {wxScrollBar, getThumbPosition, 0}}, - {2097, {wxScrollBar, getThumbSize, 0}}, - {2098, {wxScrollBar, setThumbPosition, 1}}, - {2099, {wxScrollBar, setScrollbar, 5}}, - {2101, {wxSpinButton, new_2, 2}}, - {2102, {wxSpinButton, new_0, 0}}, - {2103, {wxSpinButton, create, 2}}, - {2104, {wxSpinButton, getMax, 0}}, - {2105, {wxSpinButton, getMin, 0}}, - {2106, {wxSpinButton, getValue, 0}}, - {2107, {wxSpinButton, setRange, 2}}, - {2108, {wxSpinButton, setValue, 1}}, - {2109, {wxSpinButton, 'Destroy', undefined}}, - {2110, {wxSpinCtrl, new_0, 0}}, - {2111, {wxSpinCtrl, new_2, 2}}, - {2113, {wxSpinCtrl, create, 2}}, - {2116, {wxSpinCtrl, setValue_1_1, 1}}, - {2117, {wxSpinCtrl, setValue_1_0, 1}}, - {2119, {wxSpinCtrl, getValue, 0}}, - {2121, {wxSpinCtrl, setRange, 2}}, - {2122, {wxSpinCtrl, setSelection, 2}}, - {2124, {wxSpinCtrl, getMin, 0}}, - {2126, {wxSpinCtrl, getMax, 0}}, - {2127, {wxSpinCtrl, 'Destroy', undefined}}, - {2128, {wxStaticText, new_0, 0}}, - {2129, {wxStaticText, new_4, 4}}, - {2130, {wxStaticText, create, 4}}, - {2131, {wxStaticText, getLabel, 0}}, - {2132, {wxStaticText, setLabel, 1}}, - {2133, {wxStaticText, wrap, 1}}, - {2134, {wxStaticText, 'Destroy', undefined}}, - {2135, {wxStaticBitmap, new_0, 0}}, - {2136, {wxStaticBitmap, new_4, 4}}, - {2137, {wxStaticBitmap, create, 4}}, - {2138, {wxStaticBitmap, getBitmap, 0}}, - {2139, {wxStaticBitmap, setBitmap, 1}}, - {2140, {wxStaticBitmap, 'Destroy', undefined}}, - {2141, {wxRadioBox, new, 7}}, - {2143, {wxRadioBox, destruct, 0}}, - {2144, {wxRadioBox, create, 7}}, - {2145, {wxRadioBox, enable_2, 2}}, - {2146, {wxRadioBox, enable_1, 1}}, - {2147, {wxRadioBox, getSelection, 0}}, - {2148, {wxRadioBox, getString, 1}}, - {2149, {wxRadioBox, setSelection, 1}}, - {2150, {wxRadioBox, show_2, 2}}, - {2151, {wxRadioBox, show_1, 1}}, - {2152, {wxRadioBox, getColumnCount, 0}}, - {2153, {wxRadioBox, getItemHelpText, 1}}, - {2154, {wxRadioBox, getItemToolTip, 1}}, - {2156, {wxRadioBox, getItemFromPoint, 1}}, - {2157, {wxRadioBox, getRowCount, 0}}, - {2158, {wxRadioBox, isItemEnabled, 1}}, - {2159, {wxRadioBox, isItemShown, 1}}, - {2160, {wxRadioBox, setItemHelpText, 2}}, - {2161, {wxRadioBox, setItemToolTip, 2}}, - {2162, {wxRadioButton, new_0, 0}}, - {2163, {wxRadioButton, new_4, 4}}, - {2164, {wxRadioButton, create, 4}}, - {2165, {wxRadioButton, getValue, 0}}, - {2166, {wxRadioButton, setValue, 1}}, - {2167, {wxRadioButton, 'Destroy', undefined}}, - {2169, {wxSlider, new_6, 6}}, - {2170, {wxSlider, new_0, 0}}, - {2171, {wxSlider, create, 6}}, - {2172, {wxSlider, getLineSize, 0}}, - {2173, {wxSlider, getMax, 0}}, - {2174, {wxSlider, getMin, 0}}, - {2175, {wxSlider, getPageSize, 0}}, - {2176, {wxSlider, getThumbLength, 0}}, - {2177, {wxSlider, getValue, 0}}, - {2178, {wxSlider, setLineSize, 1}}, - {2179, {wxSlider, setPageSize, 1}}, - {2180, {wxSlider, setRange, 2}}, - {2181, {wxSlider, setThumbLength, 1}}, - {2182, {wxSlider, setValue, 1}}, - {2183, {wxSlider, 'Destroy', undefined}}, - {2185, {wxDialog, new_4, 4}}, - {2186, {wxDialog, new_0, 0}}, - {2188, {wxDialog, destruct, 0}}, - {2189, {wxDialog, create, 4}}, - {2190, {wxDialog, createButtonSizer, 1}}, - {2191, {wxDialog, createStdDialogButtonSizer, 1}}, - {2192, {wxDialog, endModal, 1}}, - {2193, {wxDialog, getAffirmativeId, 0}}, - {2194, {wxDialog, getReturnCode, 0}}, - {2195, {wxDialog, isModal, 0}}, - {2196, {wxDialog, setAffirmativeId, 1}}, - {2197, {wxDialog, setReturnCode, 1}}, - {2198, {wxDialog, show, 1}}, - {2199, {wxDialog, showModal, 0}}, - {2200, {wxColourDialog, new_0, 0}}, - {2201, {wxColourDialog, new_2, 2}}, - {2202, {wxColourDialog, destruct, 0}}, - {2203, {wxColourDialog, create, 2}}, - {2204, {wxColourDialog, getColourData, 0}}, - {2205, {wxColourData, new_0, 0}}, - {2206, {wxColourData, new_1, 1}}, - {2207, {wxColourData, destruct, 0}}, - {2208, {wxColourData, getChooseFull, 0}}, - {2209, {wxColourData, getColour, 0}}, - {2211, {wxColourData, getCustomColour, 1}}, - {2212, {wxColourData, setChooseFull, 1}}, - {2213, {wxColourData, setColour, 1}}, - {2214, {wxColourData, setCustomColour, 2}}, - {2215, {wxPalette, new_0, 0}}, - {2216, {wxPalette, new_4, 4}}, - {2218, {wxPalette, destruct, 0}}, - {2219, {wxPalette, create, 4}}, - {2220, {wxPalette, getColoursCount, 0}}, - {2221, {wxPalette, getPixel, 3}}, - {2222, {wxPalette, getRGB, 4}}, - {2223, {wxPalette, isOk, 0}}, - {2227, {wxDirDialog, new, 2}}, - {2228, {wxDirDialog, destruct, 0}}, - {2229, {wxDirDialog, getPath, 0}}, - {2230, {wxDirDialog, getMessage, 0}}, - {2231, {wxDirDialog, setMessage, 1}}, - {2232, {wxDirDialog, setPath, 1}}, - {2236, {wxFileDialog, new, 2}}, - {2237, {wxFileDialog, destruct, 0}}, - {2238, {wxFileDialog, getDirectory, 0}}, - {2239, {wxFileDialog, getFilename, 0}}, - {2240, {wxFileDialog, getFilenames, 1}}, - {2241, {wxFileDialog, getFilterIndex, 0}}, - {2242, {wxFileDialog, getMessage, 0}}, - {2243, {wxFileDialog, getPath, 0}}, - {2244, {wxFileDialog, getPaths, 1}}, - {2245, {wxFileDialog, getWildcard, 0}}, - {2246, {wxFileDialog, setDirectory, 1}}, - {2247, {wxFileDialog, setFilename, 1}}, - {2248, {wxFileDialog, setFilterIndex, 1}}, - {2249, {wxFileDialog, setMessage, 1}}, - {2250, {wxFileDialog, setPath, 1}}, - {2251, {wxFileDialog, setWildcard, 1}}, - {2252, {wxPickerBase, setInternalMargin, 1}}, - {2253, {wxPickerBase, getInternalMargin, 0}}, - {2254, {wxPickerBase, setTextCtrlProportion, 1}}, - {2255, {wxPickerBase, setPickerCtrlProportion, 1}}, - {2256, {wxPickerBase, getTextCtrlProportion, 0}}, - {2257, {wxPickerBase, getPickerCtrlProportion, 0}}, - {2258, {wxPickerBase, hasTextCtrl, 0}}, - {2259, {wxPickerBase, getTextCtrl, 0}}, - {2260, {wxPickerBase, isTextCtrlGrowable, 0}}, - {2261, {wxPickerBase, setPickerCtrlGrowable, 1}}, - {2262, {wxPickerBase, setTextCtrlGrowable, 1}}, - {2263, {wxPickerBase, isPickerCtrlGrowable, 0}}, - {2264, {wxFilePickerCtrl, new_0, 0}}, - {2265, {wxFilePickerCtrl, new_3, 3}}, - {2266, {wxFilePickerCtrl, create, 3}}, - {2267, {wxFilePickerCtrl, getPath, 0}}, - {2268, {wxFilePickerCtrl, setPath, 1}}, - {2269, {wxFilePickerCtrl, 'Destroy', undefined}}, - {2270, {wxDirPickerCtrl, new_0, 0}}, - {2271, {wxDirPickerCtrl, new_3, 3}}, - {2272, {wxDirPickerCtrl, create, 3}}, - {2273, {wxDirPickerCtrl, getPath, 0}}, - {2274, {wxDirPickerCtrl, setPath, 1}}, - {2275, {wxDirPickerCtrl, 'Destroy', undefined}}, - {2276, {wxColourPickerCtrl, new_0, 0}}, - {2277, {wxColourPickerCtrl, new_3, 3}}, - {2278, {wxColourPickerCtrl, create, 3}}, - {2279, {wxColourPickerCtrl, getColour, 0}}, - {2280, {wxColourPickerCtrl, setColour_1_1, 1}}, - {2281, {wxColourPickerCtrl, setColour_1_0, 1}}, - {2282, {wxColourPickerCtrl, 'Destroy', undefined}}, - {2283, {wxDatePickerCtrl, new_0, 0}}, - {2284, {wxDatePickerCtrl, new_3, 3}}, - {2285, {wxDatePickerCtrl, getRange, 2}}, - {2286, {wxDatePickerCtrl, getValue, 0}}, - {2287, {wxDatePickerCtrl, setRange, 2}}, - {2288, {wxDatePickerCtrl, setValue, 1}}, - {2289, {wxDatePickerCtrl, 'Destroy', undefined}}, - {2290, {wxFontPickerCtrl, new_0, 0}}, - {2291, {wxFontPickerCtrl, new_3, 3}}, - {2292, {wxFontPickerCtrl, create, 3}}, - {2293, {wxFontPickerCtrl, getSelectedFont, 0}}, - {2294, {wxFontPickerCtrl, setSelectedFont, 1}}, - {2295, {wxFontPickerCtrl, getMaxPointSize, 0}}, - {2296, {wxFontPickerCtrl, setMaxPointSize, 1}}, - {2297, {wxFontPickerCtrl, 'Destroy', undefined}}, - {2300, {wxFindReplaceDialog, new_0, 0}}, - {2301, {wxFindReplaceDialog, new_4, 4}}, - {2302, {wxFindReplaceDialog, destruct, 0}}, - {2303, {wxFindReplaceDialog, create, 4}}, - {2304, {wxFindReplaceDialog, getData, 0}}, - {2305, {wxFindReplaceData, new_0, 0}}, - {2306, {wxFindReplaceData, new_1, 1}}, - {2307, {wxFindReplaceData, getFindString, 0}}, - {2308, {wxFindReplaceData, getReplaceString, 0}}, - {2309, {wxFindReplaceData, getFlags, 0}}, - {2310, {wxFindReplaceData, setFlags, 1}}, - {2311, {wxFindReplaceData, setFindString, 1}}, - {2312, {wxFindReplaceData, setReplaceString, 1}}, - {2313, {wxFindReplaceData, 'Destroy', undefined}}, - {2314, {wxMultiChoiceDialog, new_0, 0}}, - {2316, {wxMultiChoiceDialog, new_5, 5}}, - {2317, {wxMultiChoiceDialog, getSelections, 0}}, - {2318, {wxMultiChoiceDialog, setSelections, 1}}, - {2319, {wxMultiChoiceDialog, 'Destroy', undefined}}, - {2320, {wxSingleChoiceDialog, new_0, 0}}, - {2322, {wxSingleChoiceDialog, new_5, 5}}, - {2323, {wxSingleChoiceDialog, getSelection, 0}}, - {2324, {wxSingleChoiceDialog, getStringSelection, 0}}, - {2325, {wxSingleChoiceDialog, setSelection, 1}}, - {2326, {wxSingleChoiceDialog, 'Destroy', undefined}}, - {2327, {wxTextEntryDialog, new, 3}}, - {2328, {wxTextEntryDialog, getValue, 0}}, - {2329, {wxTextEntryDialog, setValue, 1}}, - {2330, {wxTextEntryDialog, 'Destroy', undefined}}, - {2331, {wxPasswordEntryDialog, new, 3}}, - {2332, {wxPasswordEntryDialog, 'Destroy', undefined}}, - {2333, {wxFontData, new_0, 0}}, - {2334, {wxFontData, new_1, 1}}, - {2335, {wxFontData, destruct, 0}}, - {2336, {wxFontData, enableEffects, 1}}, - {2337, {wxFontData, getAllowSymbols, 0}}, - {2338, {wxFontData, getColour, 0}}, - {2339, {wxFontData, getChosenFont, 0}}, - {2340, {wxFontData, getEnableEffects, 0}}, - {2341, {wxFontData, getInitialFont, 0}}, - {2342, {wxFontData, getShowHelp, 0}}, - {2343, {wxFontData, setAllowSymbols, 1}}, - {2344, {wxFontData, setChosenFont, 1}}, - {2345, {wxFontData, setColour, 1}}, - {2346, {wxFontData, setInitialFont, 1}}, - {2347, {wxFontData, setRange, 2}}, - {2348, {wxFontData, setShowHelp, 1}}, - {2352, {wxFontDialog, new_0, 0}}, - {2354, {wxFontDialog, new_2, 2}}, - {2356, {wxFontDialog, create, 2}}, - {2357, {wxFontDialog, getFontData, 0}}, - {2359, {wxFontDialog, 'Destroy', undefined}}, - {2360, {wxProgressDialog, new, 3}}, - {2361, {wxProgressDialog, destruct, 0}}, - {2362, {wxProgressDialog, resume, 0}}, - {2363, {wxProgressDialog, update_2, 2}}, - {2364, {wxProgressDialog, update_0, 0}}, - {2365, {wxMessageDialog, new, 3}}, - {2366, {wxMessageDialog, destruct, 0}}, - {2367, {wxPageSetupDialog, new, 2}}, - {2368, {wxPageSetupDialog, destruct, 0}}, - {2369, {wxPageSetupDialog, getPageSetupData, 0}}, - {2370, {wxPageSetupDialog, showModal, 0}}, - {2371, {wxPageSetupDialogData, new_0, 0}}, - {2372, {wxPageSetupDialogData, new_1_0, 1}}, - {2373, {wxPageSetupDialogData, new_1_1, 1}}, - {2374, {wxPageSetupDialogData, destruct, 0}}, - {2375, {wxPageSetupDialogData, enableHelp, 1}}, - {2376, {wxPageSetupDialogData, enableMargins, 1}}, - {2377, {wxPageSetupDialogData, enableOrientation, 1}}, - {2378, {wxPageSetupDialogData, enablePaper, 1}}, - {2379, {wxPageSetupDialogData, enablePrinter, 1}}, - {2380, {wxPageSetupDialogData, getDefaultMinMargins, 0}}, - {2381, {wxPageSetupDialogData, getEnableMargins, 0}}, - {2382, {wxPageSetupDialogData, getEnableOrientation, 0}}, - {2383, {wxPageSetupDialogData, getEnablePaper, 0}}, - {2384, {wxPageSetupDialogData, getEnablePrinter, 0}}, - {2385, {wxPageSetupDialogData, getEnableHelp, 0}}, - {2386, {wxPageSetupDialogData, getDefaultInfo, 0}}, - {2387, {wxPageSetupDialogData, getMarginTopLeft, 0}}, - {2388, {wxPageSetupDialogData, getMarginBottomRight, 0}}, - {2389, {wxPageSetupDialogData, getMinMarginTopLeft, 0}}, - {2390, {wxPageSetupDialogData, getMinMarginBottomRight, 0}}, - {2391, {wxPageSetupDialogData, getPaperId, 0}}, - {2392, {wxPageSetupDialogData, getPaperSize, 0}}, - {2394, {wxPageSetupDialogData, getPrintData, 0}}, - {2395, {wxPageSetupDialogData, isOk, 0}}, - {2396, {wxPageSetupDialogData, setDefaultInfo, 1}}, - {2397, {wxPageSetupDialogData, setDefaultMinMargins, 1}}, - {2398, {wxPageSetupDialogData, setMarginTopLeft, 1}}, - {2399, {wxPageSetupDialogData, setMarginBottomRight, 1}}, - {2400, {wxPageSetupDialogData, setMinMarginTopLeft, 1}}, - {2401, {wxPageSetupDialogData, setMinMarginBottomRight, 1}}, - {2402, {wxPageSetupDialogData, setPaperId, 1}}, - {2403, {wxPageSetupDialogData, setPaperSize_1_1, 1}}, - {2404, {wxPageSetupDialogData, setPaperSize_1_0, 1}}, - {2405, {wxPageSetupDialogData, setPrintData, 1}}, - {2406, {wxPrintDialog, new_2_0, 2}}, - {2407, {wxPrintDialog, new_2_1, 2}}, - {2408, {wxPrintDialog, destruct, 0}}, - {2409, {wxPrintDialog, getPrintDialogData, 0}}, - {2410, {wxPrintDialog, getPrintDC, 0}}, - {2411, {wxPrintDialogData, new_0, 0}}, - {2412, {wxPrintDialogData, new_1_1, 1}}, - {2413, {wxPrintDialogData, new_1_0, 1}}, - {2414, {wxPrintDialogData, destruct, 0}}, - {2415, {wxPrintDialogData, enableHelp, 1}}, - {2416, {wxPrintDialogData, enablePageNumbers, 1}}, - {2417, {wxPrintDialogData, enablePrintToFile, 1}}, - {2418, {wxPrintDialogData, enableSelection, 1}}, - {2419, {wxPrintDialogData, getAllPages, 0}}, - {2420, {wxPrintDialogData, getCollate, 0}}, - {2421, {wxPrintDialogData, getFromPage, 0}}, - {2422, {wxPrintDialogData, getMaxPage, 0}}, - {2423, {wxPrintDialogData, getMinPage, 0}}, - {2424, {wxPrintDialogData, getNoCopies, 0}}, - {2425, {wxPrintDialogData, getPrintData, 0}}, - {2426, {wxPrintDialogData, getPrintToFile, 0}}, - {2427, {wxPrintDialogData, getSelection, 0}}, - {2428, {wxPrintDialogData, getToPage, 0}}, - {2429, {wxPrintDialogData, isOk, 0}}, - {2430, {wxPrintDialogData, setCollate, 1}}, - {2431, {wxPrintDialogData, setFromPage, 1}}, - {2432, {wxPrintDialogData, setMaxPage, 1}}, - {2433, {wxPrintDialogData, setMinPage, 1}}, - {2434, {wxPrintDialogData, setNoCopies, 1}}, - {2435, {wxPrintDialogData, setPrintData, 1}}, - {2436, {wxPrintDialogData, setPrintToFile, 1}}, - {2437, {wxPrintDialogData, setSelection, 1}}, - {2438, {wxPrintDialogData, setToPage, 1}}, - {2439, {wxPrintData, new_0, 0}}, - {2440, {wxPrintData, new_1, 1}}, - {2441, {wxPrintData, destruct, 0}}, - {2442, {wxPrintData, getCollate, 0}}, - {2443, {wxPrintData, getBin, 0}}, - {2444, {wxPrintData, getColour, 0}}, - {2445, {wxPrintData, getDuplex, 0}}, - {2446, {wxPrintData, getNoCopies, 0}}, - {2447, {wxPrintData, getOrientation, 0}}, - {2448, {wxPrintData, getPaperId, 0}}, - {2449, {wxPrintData, getPrinterName, 0}}, - {2450, {wxPrintData, getQuality, 0}}, - {2451, {wxPrintData, isOk, 0}}, - {2452, {wxPrintData, setBin, 1}}, - {2453, {wxPrintData, setCollate, 1}}, - {2454, {wxPrintData, setColour, 1}}, - {2455, {wxPrintData, setDuplex, 1}}, - {2456, {wxPrintData, setNoCopies, 1}}, - {2457, {wxPrintData, setOrientation, 1}}, - {2458, {wxPrintData, setPaperId, 1}}, - {2459, {wxPrintData, setPrinterName, 1}}, - {2460, {wxPrintData, setQuality, 1}}, - {2463, {wxPrintPreview, new_2, 2}}, - {2464, {wxPrintPreview, new_3, 3}}, - {2466, {wxPrintPreview, destruct, 0}}, - {2467, {wxPrintPreview, getCanvas, 0}}, - {2468, {wxPrintPreview, getCurrentPage, 0}}, - {2469, {wxPrintPreview, getFrame, 0}}, - {2470, {wxPrintPreview, getMaxPage, 0}}, - {2471, {wxPrintPreview, getMinPage, 0}}, - {2472, {wxPrintPreview, getPrintout, 0}}, - {2473, {wxPrintPreview, getPrintoutForPrinting, 0}}, - {2474, {wxPrintPreview, isOk, 0}}, - {2475, {wxPrintPreview, paintPage, 2}}, - {2476, {wxPrintPreview, print, 1}}, - {2477, {wxPrintPreview, renderPage, 1}}, - {2478, {wxPrintPreview, setCanvas, 1}}, - {2479, {wxPrintPreview, setCurrentPage, 1}}, - {2480, {wxPrintPreview, setFrame, 1}}, - {2481, {wxPrintPreview, setPrintout, 1}}, - {2482, {wxPrintPreview, setZoom, 1}}, - {2483, {wxPreviewFrame, new, 3}}, - {2484, {wxPreviewFrame, destruct, 0}}, - {2485, {wxPreviewFrame, createControlBar, 0}}, - {2486, {wxPreviewFrame, createCanvas, 0}}, - {2487, {wxPreviewFrame, initialize, 0}}, - {2488, {wxPreviewFrame, onCloseWindow, 1}}, - {2489, {wxPreviewControlBar, new, 4}}, - {2490, {wxPreviewControlBar, destruct, 0}}, - {2491, {wxPreviewControlBar, createButtons, 0}}, - {2492, {wxPreviewControlBar, getPrintPreview, 0}}, - {2493, {wxPreviewControlBar, getZoomControl, 0}}, - {2494, {wxPreviewControlBar, setZoomControl, 1}}, - {2496, {wxPrinter, new, 1}}, - {2497, {wxPrinter, createAbortWindow, 2}}, - {2498, {wxPrinter, getAbort, 0}}, - {2499, {wxPrinter, getLastError, 0}}, - {2500, {wxPrinter, getPrintDialogData, 0}}, - {2501, {wxPrinter, print, 3}}, - {2502, {wxPrinter, printDialog, 1}}, - {2503, {wxPrinter, reportError, 3}}, - {2504, {wxPrinter, setup, 1}}, - {2505, {wxPrinter, 'Destroy', undefined}}, - {2506, {wxXmlResource, new_1, 1}}, - {2507, {wxXmlResource, new_2, 2}}, - {2508, {wxXmlResource, destruct, 0}}, - {2509, {wxXmlResource, attachUnknownControl, 3}}, - {2510, {wxXmlResource, clearHandlers, 0}}, - {2511, {wxXmlResource, compareVersion, 4}}, - {2512, {wxXmlResource, get, 0}}, - {2513, {wxXmlResource, getFlags, 0}}, - {2514, {wxXmlResource, getVersion, 0}}, - {2515, {wxXmlResource, getXRCID, 2}}, - {2516, {wxXmlResource, initAllHandlers, 0}}, - {2517, {wxXmlResource, load, 1}}, - {2518, {wxXmlResource, loadBitmap, 1}}, - {2519, {wxXmlResource, loadDialog_2, 2}}, - {2520, {wxXmlResource, loadDialog_3, 3}}, - {2521, {wxXmlResource, loadFrame_2, 2}}, - {2522, {wxXmlResource, loadFrame_3, 3}}, - {2523, {wxXmlResource, loadIcon, 1}}, - {2524, {wxXmlResource, loadMenu, 1}}, - {2525, {wxXmlResource, loadMenuBar_2, 2}}, - {2526, {wxXmlResource, loadMenuBar_1, 1}}, - {2527, {wxXmlResource, loadPanel_2, 2}}, - {2528, {wxXmlResource, loadPanel_3, 3}}, - {2529, {wxXmlResource, loadToolBar, 2}}, - {2530, {wxXmlResource, set, 1}}, - {2531, {wxXmlResource, setFlags, 1}}, - {2532, {wxXmlResource, unload, 1}}, - {2533, {wxXmlResource, xrcctrl, 3}}, - {2534, {wxHtmlEasyPrinting, new, 1}}, - {2535, {wxHtmlEasyPrinting, destruct, 0}}, - {2536, {wxHtmlEasyPrinting, getPrintData, 0}}, - {2537, {wxHtmlEasyPrinting, getPageSetupData, 0}}, - {2538, {wxHtmlEasyPrinting, previewFile, 1}}, - {2539, {wxHtmlEasyPrinting, previewText, 2}}, - {2540, {wxHtmlEasyPrinting, printFile, 1}}, - {2541, {wxHtmlEasyPrinting, printText, 2}}, - {2542, {wxHtmlEasyPrinting, pageSetup, 0}}, - {2543, {wxHtmlEasyPrinting, setFonts, 3}}, - {2544, {wxHtmlEasyPrinting, setHeader, 2}}, - {2545, {wxHtmlEasyPrinting, setFooter, 2}}, - {2547, {wxGLCanvas, new_2, 2}}, - {2548, {wxGLCanvas, new_3_1, 3}}, - {2549, {wxGLCanvas, new_3_0, 3}}, - {2550, {wxGLCanvas, getContext, 0}}, - {2552, {wxGLCanvas, setCurrent, 0}}, - {2553, {wxGLCanvas, swapBuffers, 0}}, - {2554, {wxGLCanvas, 'Destroy', undefined}}, - {2555, {wxAuiManager, new, 1}}, - {2556, {wxAuiManager, destruct, 0}}, - {2557, {wxAuiManager, addPane_2_1, 2}}, - {2558, {wxAuiManager, addPane_3, 3}}, - {2559, {wxAuiManager, addPane_2_0, 2}}, - {2560, {wxAuiManager, detachPane, 1}}, - {2561, {wxAuiManager, getAllPanes, 0}}, - {2562, {wxAuiManager, getArtProvider, 0}}, - {2563, {wxAuiManager, getDockSizeConstraint, 2}}, - {2564, {wxAuiManager, getFlags, 0}}, - {2565, {wxAuiManager, getManagedWindow, 0}}, - {2566, {wxAuiManager, getManager, 1}}, - {2567, {wxAuiManager, getPane_1_1, 1}}, - {2568, {wxAuiManager, getPane_1_0, 1}}, - {2569, {wxAuiManager, hideHint, 0}}, - {2570, {wxAuiManager, insertPane, 3}}, - {2571, {wxAuiManager, loadPaneInfo, 2}}, - {2572, {wxAuiManager, loadPerspective, 2}}, - {2573, {wxAuiManager, savePaneInfo, 1}}, - {2574, {wxAuiManager, savePerspective, 0}}, - {2575, {wxAuiManager, setArtProvider, 1}}, - {2576, {wxAuiManager, setDockSizeConstraint, 2}}, - {2577, {wxAuiManager, setFlags, 1}}, - {2578, {wxAuiManager, setManagedWindow, 1}}, - {2579, {wxAuiManager, showHint, 1}}, - {2580, {wxAuiManager, unInit, 0}}, - {2581, {wxAuiManager, update, 0}}, - {2582, {wxAuiPaneInfo, new_0, 0}}, - {2583, {wxAuiPaneInfo, new_1, 1}}, - {2584, {wxAuiPaneInfo, destruct, 0}}, - {2585, {wxAuiPaneInfo, bestSize_1, 1}}, - {2586, {wxAuiPaneInfo, bestSize_2, 2}}, - {2587, {wxAuiPaneInfo, bottom, 0}}, - {2588, {wxAuiPaneInfo, bottomDockable, 1}}, - {2589, {wxAuiPaneInfo, caption, 1}}, - {2590, {wxAuiPaneInfo, captionVisible, 1}}, - {2591, {wxAuiPaneInfo, centre, 0}}, - {2592, {wxAuiPaneInfo, centrePane, 0}}, - {2593, {wxAuiPaneInfo, closeButton, 1}}, - {2594, {wxAuiPaneInfo, defaultPane, 0}}, - {2595, {wxAuiPaneInfo, destroyOnClose, 1}}, - {2596, {wxAuiPaneInfo, direction, 1}}, - {2597, {wxAuiPaneInfo, dock, 0}}, - {2598, {wxAuiPaneInfo, dockable, 1}}, - {2599, {wxAuiPaneInfo, fixed, 0}}, - {2600, {wxAuiPaneInfo, float, 0}}, - {2601, {wxAuiPaneInfo, floatable, 1}}, - {2602, {wxAuiPaneInfo, floatingPosition_1, 1}}, - {2603, {wxAuiPaneInfo, floatingPosition_2, 2}}, - {2604, {wxAuiPaneInfo, floatingSize_1, 1}}, - {2605, {wxAuiPaneInfo, floatingSize_2, 2}}, - {2606, {wxAuiPaneInfo, gripper, 1}}, - {2607, {wxAuiPaneInfo, gripperTop, 1}}, - {2608, {wxAuiPaneInfo, hasBorder, 0}}, - {2609, {wxAuiPaneInfo, hasCaption, 0}}, - {2610, {wxAuiPaneInfo, hasCloseButton, 0}}, - {2611, {wxAuiPaneInfo, hasFlag, 1}}, - {2612, {wxAuiPaneInfo, hasGripper, 0}}, - {2613, {wxAuiPaneInfo, hasGripperTop, 0}}, - {2614, {wxAuiPaneInfo, hasMaximizeButton, 0}}, - {2615, {wxAuiPaneInfo, hasMinimizeButton, 0}}, - {2616, {wxAuiPaneInfo, hasPinButton, 0}}, - {2617, {wxAuiPaneInfo, hide, 0}}, - {2618, {wxAuiPaneInfo, isBottomDockable, 0}}, - {2619, {wxAuiPaneInfo, isDocked, 0}}, - {2620, {wxAuiPaneInfo, isFixed, 0}}, - {2621, {wxAuiPaneInfo, isFloatable, 0}}, - {2622, {wxAuiPaneInfo, isFloating, 0}}, - {2623, {wxAuiPaneInfo, isLeftDockable, 0}}, - {2624, {wxAuiPaneInfo, isMovable, 0}}, - {2625, {wxAuiPaneInfo, isOk, 0}}, - {2626, {wxAuiPaneInfo, isResizable, 0}}, - {2627, {wxAuiPaneInfo, isRightDockable, 0}}, - {2628, {wxAuiPaneInfo, isShown, 0}}, - {2629, {wxAuiPaneInfo, isToolbar, 0}}, - {2630, {wxAuiPaneInfo, isTopDockable, 0}}, - {2631, {wxAuiPaneInfo, layer, 1}}, - {2632, {wxAuiPaneInfo, left, 0}}, - {2633, {wxAuiPaneInfo, leftDockable, 1}}, - {2634, {wxAuiPaneInfo, maxSize_1, 1}}, - {2635, {wxAuiPaneInfo, maxSize_2, 2}}, - {2636, {wxAuiPaneInfo, maximizeButton, 1}}, - {2637, {wxAuiPaneInfo, minSize_1, 1}}, - {2638, {wxAuiPaneInfo, minSize_2, 2}}, - {2639, {wxAuiPaneInfo, minimizeButton, 1}}, - {2640, {wxAuiPaneInfo, movable, 1}}, - {2641, {wxAuiPaneInfo, name, 1}}, - {2642, {wxAuiPaneInfo, paneBorder, 1}}, - {2643, {wxAuiPaneInfo, pinButton, 1}}, - {2644, {wxAuiPaneInfo, position, 1}}, - {2645, {wxAuiPaneInfo, resizable, 1}}, - {2646, {wxAuiPaneInfo, right, 0}}, - {2647, {wxAuiPaneInfo, rightDockable, 1}}, - {2648, {wxAuiPaneInfo, row, 1}}, - {2649, {wxAuiPaneInfo, safeSet, 1}}, - {2650, {wxAuiPaneInfo, setFlag, 2}}, - {2651, {wxAuiPaneInfo, show, 1}}, - {2652, {wxAuiPaneInfo, toolbarPane, 0}}, - {2653, {wxAuiPaneInfo, top, 0}}, - {2654, {wxAuiPaneInfo, topDockable, 1}}, - {2655, {wxAuiPaneInfo, window, 1}}, - {2656, {wxAuiPaneInfo, getWindow, 0}}, - {2657, {wxAuiPaneInfo, getFrame, 0}}, - {2658, {wxAuiPaneInfo, getDirection, 0}}, - {2659, {wxAuiPaneInfo, getLayer, 0}}, - {2660, {wxAuiPaneInfo, getRow, 0}}, - {2661, {wxAuiPaneInfo, getPosition, 0}}, - {2662, {wxAuiPaneInfo, getFloatingPosition, 0}}, - {2663, {wxAuiPaneInfo, getFloatingSize, 0}}, - {2664, {wxAuiNotebook, new_0, 0}}, - {2665, {wxAuiNotebook, new_2, 2}}, - {2666, {wxAuiNotebook, addPage, 3}}, - {2667, {wxAuiNotebook, create, 2}}, - {2668, {wxAuiNotebook, deletePage, 1}}, - {2669, {wxAuiNotebook, getArtProvider, 0}}, - {2670, {wxAuiNotebook, getPage, 1}}, - {2671, {wxAuiNotebook, getPageBitmap, 1}}, - {2672, {wxAuiNotebook, getPageCount, 0}}, - {2673, {wxAuiNotebook, getPageIndex, 1}}, - {2674, {wxAuiNotebook, getPageText, 1}}, - {2675, {wxAuiNotebook, getSelection, 0}}, - {2676, {wxAuiNotebook, insertPage, 4}}, - {2677, {wxAuiNotebook, removePage, 1}}, - {2678, {wxAuiNotebook, setArtProvider, 1}}, - {2679, {wxAuiNotebook, setFont, 1}}, - {2680, {wxAuiNotebook, setPageBitmap, 2}}, - {2681, {wxAuiNotebook, setPageText, 2}}, - {2682, {wxAuiNotebook, setSelection, 1}}, - {2683, {wxAuiNotebook, setTabCtrlHeight, 1}}, - {2684, {wxAuiNotebook, setUniformBitmapSize, 1}}, - {2685, {wxAuiNotebook, 'Destroy', undefined}}, - {2686, {wxAuiTabArt, setFlags, 1}}, - {2687, {wxAuiTabArt, setMeasuringFont, 1}}, - {2688, {wxAuiTabArt, setNormalFont, 1}}, - {2689, {wxAuiTabArt, setSelectedFont, 1}}, - {2690, {wxAuiTabArt, setColour, 1}}, - {2691, {wxAuiTabArt, setActiveColour, 1}}, - {2692, {wxAuiDockArt, getColour, 1}}, - {2693, {wxAuiDockArt, getFont, 1}}, - {2694, {wxAuiDockArt, getMetric, 1}}, - {2695, {wxAuiDockArt, setColour, 2}}, - {2696, {wxAuiDockArt, setFont, 2}}, - {2697, {wxAuiDockArt, setMetric, 2}}, - {2698, {wxAuiSimpleTabArt, new, 0}}, - {2699, {wxAuiSimpleTabArt, 'Destroy', undefined}}, - {2700, {wxMDIParentFrame, new_0, 0}}, - {2701, {wxMDIParentFrame, new_4, 4}}, - {2702, {wxMDIParentFrame, destruct, 0}}, - {2703, {wxMDIParentFrame, activateNext, 0}}, - {2704, {wxMDIParentFrame, activatePrevious, 0}}, - {2705, {wxMDIParentFrame, arrangeIcons, 0}}, - {2706, {wxMDIParentFrame, cascade, 0}}, - {2707, {wxMDIParentFrame, create, 4}}, - {2708, {wxMDIParentFrame, getActiveChild, 0}}, - {2709, {wxMDIParentFrame, getClientWindow, 0}}, - {2710, {wxMDIParentFrame, tile, 1}}, - {2711, {wxMDIChildFrame, new_0, 0}}, - {2712, {wxMDIChildFrame, new_4, 4}}, - {2713, {wxMDIChildFrame, destruct, 0}}, - {2714, {wxMDIChildFrame, activate, 0}}, - {2715, {wxMDIChildFrame, create, 4}}, - {2716, {wxMDIChildFrame, maximize, 1}}, - {2717, {wxMDIChildFrame, restore, 0}}, - {2718, {wxMDIClientWindow, new_0, 0}}, - {2719, {wxMDIClientWindow, new_2, 2}}, - {2720, {wxMDIClientWindow, destruct, 0}}, - {2721, {wxMDIClientWindow, createClient, 2}}, - {2722, {wxLayoutAlgorithm, new, 0}}, - {2723, {wxLayoutAlgorithm, layoutFrame, 2}}, - {2724, {wxLayoutAlgorithm, layoutMDIFrame, 2}}, - {2725, {wxLayoutAlgorithm, layoutWindow, 2}}, - {2726, {wxLayoutAlgorithm, 'Destroy', undefined}}, - {2727, {wxEvent, getId, 0}}, - {2728, {wxEvent, getSkipped, 0}}, - {2729, {wxEvent, getTimestamp, 0}}, - {2730, {wxEvent, isCommandEvent, 0}}, - {2731, {wxEvent, resumePropagation, 1}}, - {2732, {wxEvent, shouldPropagate, 0}}, - {2733, {wxEvent, skip, 1}}, - {2734, {wxEvent, stopPropagation, 0}}, - {2735, {wxCommandEvent, getClientData, 0}}, - {2736, {wxCommandEvent, getExtraLong, 0}}, - {2737, {wxCommandEvent, getInt, 0}}, - {2738, {wxCommandEvent, getSelection, 0}}, - {2739, {wxCommandEvent, getString, 0}}, - {2740, {wxCommandEvent, isChecked, 0}}, - {2741, {wxCommandEvent, isSelection, 0}}, - {2742, {wxCommandEvent, setInt, 1}}, - {2743, {wxCommandEvent, setString, 1}}, - {2744, {wxScrollEvent, getOrientation, 0}}, - {2745, {wxScrollEvent, getPosition, 0}}, - {2746, {wxScrollWinEvent, getOrientation, 0}}, - {2747, {wxScrollWinEvent, getPosition, 0}}, - {2748, {wxMouseEvent, altDown, 0}}, - {2749, {wxMouseEvent, button, 1}}, - {2750, {wxMouseEvent, buttonDClick, 1}}, - {2751, {wxMouseEvent, buttonDown, 1}}, - {2752, {wxMouseEvent, buttonUp, 1}}, - {2753, {wxMouseEvent, cmdDown, 0}}, - {2754, {wxMouseEvent, controlDown, 0}}, - {2755, {wxMouseEvent, dragging, 0}}, - {2756, {wxMouseEvent, entering, 0}}, - {2757, {wxMouseEvent, getButton, 0}}, - {2760, {wxMouseEvent, getPosition, 0}}, - {2761, {wxMouseEvent, getLogicalPosition, 1}}, - {2762, {wxMouseEvent, getLinesPerAction, 0}}, - {2763, {wxMouseEvent, getWheelRotation, 0}}, - {2764, {wxMouseEvent, getWheelDelta, 0}}, - {2765, {wxMouseEvent, getX, 0}}, - {2766, {wxMouseEvent, getY, 0}}, - {2767, {wxMouseEvent, isButton, 0}}, - {2768, {wxMouseEvent, isPageScroll, 0}}, - {2769, {wxMouseEvent, leaving, 0}}, - {2770, {wxMouseEvent, leftDClick, 0}}, - {2771, {wxMouseEvent, leftDown, 0}}, - {2772, {wxMouseEvent, leftIsDown, 0}}, - {2773, {wxMouseEvent, leftUp, 0}}, - {2774, {wxMouseEvent, metaDown, 0}}, - {2775, {wxMouseEvent, middleDClick, 0}}, - {2776, {wxMouseEvent, middleDown, 0}}, - {2777, {wxMouseEvent, middleIsDown, 0}}, - {2778, {wxMouseEvent, middleUp, 0}}, - {2779, {wxMouseEvent, moving, 0}}, - {2780, {wxMouseEvent, rightDClick, 0}}, - {2781, {wxMouseEvent, rightDown, 0}}, - {2782, {wxMouseEvent, rightIsDown, 0}}, - {2783, {wxMouseEvent, rightUp, 0}}, - {2784, {wxMouseEvent, shiftDown, 0}}, - {2785, {wxSetCursorEvent, getCursor, 0}}, - {2786, {wxSetCursorEvent, getX, 0}}, - {2787, {wxSetCursorEvent, getY, 0}}, - {2788, {wxSetCursorEvent, hasCursor, 0}}, - {2789, {wxSetCursorEvent, setCursor, 1}}, - {2790, {wxKeyEvent, altDown, 0}}, - {2791, {wxKeyEvent, cmdDown, 0}}, - {2792, {wxKeyEvent, controlDown, 0}}, - {2793, {wxKeyEvent, getKeyCode, 0}}, - {2794, {wxKeyEvent, getModifiers, 0}}, - {2797, {wxKeyEvent, getPosition, 0}}, - {2798, {wxKeyEvent, getRawKeyCode, 0}}, - {2799, {wxKeyEvent, getRawKeyFlags, 0}}, - {2800, {wxKeyEvent, getUnicodeKey, 0}}, - {2801, {wxKeyEvent, getX, 0}}, - {2802, {wxKeyEvent, getY, 0}}, - {2803, {wxKeyEvent, hasModifiers, 0}}, - {2804, {wxKeyEvent, metaDown, 0}}, - {2805, {wxKeyEvent, shiftDown, 0}}, - {2806, {wxSizeEvent, getSize, 0}}, - {2807, {wxMoveEvent, getPosition, 0}}, - {2808, {wxEraseEvent, getDC, 0}}, - {2809, {wxFocusEvent, getWindow, 0}}, - {2810, {wxChildFocusEvent, getWindow, 0}}, - {2811, {wxMenuEvent, getMenu, 0}}, - {2812, {wxMenuEvent, getMenuId, 0}}, - {2813, {wxMenuEvent, isPopup, 0}}, - {2814, {wxCloseEvent, canVeto, 0}}, - {2815, {wxCloseEvent, getLoggingOff, 0}}, - {2816, {wxCloseEvent, setCanVeto, 1}}, - {2817, {wxCloseEvent, setLoggingOff, 1}}, - {2818, {wxCloseEvent, veto, 1}}, - {2819, {wxShowEvent, setShow, 1}}, - {2820, {wxShowEvent, getShow, 0}}, - {2821, {wxIconizeEvent, iconized, 0}}, - {2822, {wxJoystickEvent, buttonDown, 1}}, - {2823, {wxJoystickEvent, buttonIsDown, 1}}, - {2824, {wxJoystickEvent, buttonUp, 1}}, - {2825, {wxJoystickEvent, getButtonChange, 0}}, - {2826, {wxJoystickEvent, getButtonState, 0}}, - {2827, {wxJoystickEvent, getJoystick, 0}}, - {2828, {wxJoystickEvent, getPosition, 0}}, - {2829, {wxJoystickEvent, getZPosition, 0}}, - {2830, {wxJoystickEvent, isButton, 0}}, - {2831, {wxJoystickEvent, isMove, 0}}, - {2832, {wxJoystickEvent, isZMove, 0}}, - {2833, {wxUpdateUIEvent, canUpdate, 1}}, - {2834, {wxUpdateUIEvent, check, 1}}, - {2835, {wxUpdateUIEvent, enable, 1}}, - {2836, {wxUpdateUIEvent, show, 1}}, - {2837, {wxUpdateUIEvent, getChecked, 0}}, - {2838, {wxUpdateUIEvent, getEnabled, 0}}, - {2839, {wxUpdateUIEvent, getShown, 0}}, - {2840, {wxUpdateUIEvent, getSetChecked, 0}}, - {2841, {wxUpdateUIEvent, getSetEnabled, 0}}, - {2842, {wxUpdateUIEvent, getSetShown, 0}}, - {2843, {wxUpdateUIEvent, getSetText, 0}}, - {2844, {wxUpdateUIEvent, getText, 0}}, - {2845, {wxUpdateUIEvent, getMode, 0}}, - {2846, {wxUpdateUIEvent, getUpdateInterval, 0}}, - {2847, {wxUpdateUIEvent, resetUpdateTime, 0}}, - {2848, {wxUpdateUIEvent, setMode, 1}}, - {2849, {wxUpdateUIEvent, setText, 1}}, - {2850, {wxUpdateUIEvent, setUpdateInterval, 1}}, - {2851, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}}, - {2852, {wxPaletteChangedEvent, setChangedWindow, 1}}, - {2853, {wxPaletteChangedEvent, getChangedWindow, 0}}, - {2854, {wxQueryNewPaletteEvent, setPaletteRealized, 1}}, - {2855, {wxQueryNewPaletteEvent, getPaletteRealized, 0}}, - {2856, {wxNavigationKeyEvent, getDirection, 0}}, - {2857, {wxNavigationKeyEvent, setDirection, 1}}, - {2858, {wxNavigationKeyEvent, isWindowChange, 0}}, - {2859, {wxNavigationKeyEvent, setWindowChange, 1}}, - {2860, {wxNavigationKeyEvent, isFromTab, 0}}, - {2861, {wxNavigationKeyEvent, setFromTab, 1}}, - {2862, {wxNavigationKeyEvent, getCurrentFocus, 0}}, - {2863, {wxNavigationKeyEvent, setCurrentFocus, 1}}, - {2864, {wxHelpEvent, getOrigin, 0}}, - {2865, {wxHelpEvent, getPosition, 0}}, - {2866, {wxHelpEvent, setOrigin, 1}}, - {2867, {wxHelpEvent, setPosition, 1}}, - {2868, {wxContextMenuEvent, getPosition, 0}}, - {2869, {wxContextMenuEvent, setPosition, 1}}, - {2870, {wxIdleEvent, canSend, 1}}, - {2871, {wxIdleEvent, getMode, 0}}, - {2872, {wxIdleEvent, requestMore, 1}}, - {2873, {wxIdleEvent, moreRequested, 0}}, - {2874, {wxIdleEvent, setMode, 1}}, - {2875, {wxGridEvent, altDown, 0}}, - {2876, {wxGridEvent, controlDown, 0}}, - {2877, {wxGridEvent, getCol, 0}}, - {2878, {wxGridEvent, getPosition, 0}}, - {2879, {wxGridEvent, getRow, 0}}, - {2880, {wxGridEvent, metaDown, 0}}, - {2881, {wxGridEvent, selecting, 0}}, - {2882, {wxGridEvent, shiftDown, 0}}, - {2883, {wxNotifyEvent, allow, 0}}, - {2884, {wxNotifyEvent, isAllowed, 0}}, - {2885, {wxNotifyEvent, veto, 0}}, - {2886, {wxSashEvent, getEdge, 0}}, - {2887, {wxSashEvent, getDragRect, 0}}, - {2888, {wxSashEvent, getDragStatus, 0}}, - {2889, {wxListEvent, getCacheFrom, 0}}, - {2890, {wxListEvent, getCacheTo, 0}}, - {2891, {wxListEvent, getKeyCode, 0}}, - {2892, {wxListEvent, getIndex, 0}}, - {2893, {wxListEvent, getColumn, 0}}, - {2894, {wxListEvent, getPoint, 0}}, - {2895, {wxListEvent, getLabel, 0}}, - {2896, {wxListEvent, getText, 0}}, - {2897, {wxListEvent, getImage, 0}}, - {2898, {wxListEvent, getData, 0}}, - {2899, {wxListEvent, getMask, 0}}, - {2900, {wxListEvent, getItem, 0}}, - {2901, {wxListEvent, isEditCancelled, 0}}, - {2902, {wxDateEvent, getDate, 0}}, - {2903, {wxCalendarEvent, getWeekDay, 0}}, - {2904, {wxFileDirPickerEvent, getPath, 0}}, - {2905, {wxColourPickerEvent, getColour, 0}}, - {2906, {wxFontPickerEvent, getFont, 0}}, - {2907, {wxStyledTextEvent, getPosition, 0}}, - {2908, {wxStyledTextEvent, getKey, 0}}, - {2909, {wxStyledTextEvent, getModifiers, 0}}, - {2910, {wxStyledTextEvent, getModificationType, 0}}, - {2911, {wxStyledTextEvent, getText, 0}}, - {2912, {wxStyledTextEvent, getLength, 0}}, - {2913, {wxStyledTextEvent, getLinesAdded, 0}}, - {2914, {wxStyledTextEvent, getLine, 0}}, - {2915, {wxStyledTextEvent, getFoldLevelNow, 0}}, - {2916, {wxStyledTextEvent, getFoldLevelPrev, 0}}, - {2917, {wxStyledTextEvent, getMargin, 0}}, - {2918, {wxStyledTextEvent, getMessage, 0}}, - {2919, {wxStyledTextEvent, getWParam, 0}}, - {2920, {wxStyledTextEvent, getLParam, 0}}, - {2921, {wxStyledTextEvent, getListType, 0}}, - {2922, {wxStyledTextEvent, getX, 0}}, - {2923, {wxStyledTextEvent, getY, 0}}, - {2924, {wxStyledTextEvent, getDragText, 0}}, - {2925, {wxStyledTextEvent, getDragAllowMove, 0}}, - {2926, {wxStyledTextEvent, getDragResult, 0}}, - {2927, {wxStyledTextEvent, getShift, 0}}, - {2928, {wxStyledTextEvent, getControl, 0}}, - {2929, {wxStyledTextEvent, getAlt, 0}}, - {2930, {utils, getKeyState, 1}}, - {2931, {utils, getMousePosition, 2}}, - {2932, {utils, getMouseState, 0}}, - {2933, {utils, setDetectableAutoRepeat, 1}}, - {2934, {utils, bell, 0}}, - {2935, {utils, findMenuItemId, 3}}, - {2936, {utils, genericFindWindowAtPoint, 1}}, - {2937, {utils, findWindowAtPoint, 1}}, - {2938, {utils, beginBusyCursor, 1}}, - {2939, {utils, endBusyCursor, 0}}, - {2940, {utils, isBusy, 0}}, - {2941, {utils, shutdown, 1}}, - {2942, {utils, shell, 1}}, - {2943, {utils, launchDefaultBrowser, 2}}, - {2944, {utils, getEmailAddress, 0}}, - {2945, {utils, getUserId, 0}}, - {2946, {utils, getHomeDir, 0}}, - {2947, {utils, newId, 0}}, - {2948, {utils, registerId, 1}}, - {2949, {utils, getCurrentId, 0}}, - {2950, {utils, getOsDescription, 0}}, - {2951, {utils, isPlatformLittleEndian, 0}}, - {2952, {utils, isPlatform64Bit, 0}}, - {2953, {gdicmn, displaySize, 2}}, - {2954, {gdicmn, setCursor, 1}}, - {2955, {wxPrintout, new, 1}}, - {2956, {wxPrintout, destruct, 0}}, - {2957, {wxPrintout, getDC, 0}}, - {2958, {wxPrintout, getPageSizeMM, 2}}, - {2959, {wxPrintout, getPageSizePixels, 2}}, - {2960, {wxPrintout, getPaperRectPixels, 0}}, - {2961, {wxPrintout, getPPIPrinter, 2}}, - {2962, {wxPrintout, getPPIScreen, 2}}, - {2963, {wxPrintout, getTitle, 0}}, - {2964, {wxPrintout, isPreview, 0}}, - {2965, {wxPrintout, fitThisSizeToPaper, 1}}, - {2966, {wxPrintout, fitThisSizeToPage, 1}}, - {2967, {wxPrintout, fitThisSizeToPageMargins, 2}}, - {2968, {wxPrintout, mapScreenSizeToPaper, 0}}, - {2969, {wxPrintout, mapScreenSizeToPage, 0}}, - {2970, {wxPrintout, mapScreenSizeToPageMargins, 1}}, - {2971, {wxPrintout, mapScreenSizeToDevice, 0}}, - {2972, {wxPrintout, getLogicalPaperRect, 0}}, - {2973, {wxPrintout, getLogicalPageRect, 0}}, - {2974, {wxPrintout, getLogicalPageMarginsRect, 1}}, - {2975, {wxPrintout, setLogicalOrigin, 2}}, - {2976, {wxPrintout, offsetLogicalOrigin, 2}}, - {2977, {wxStyledTextCtrl, new_2, 2}}, - {2978, {wxStyledTextCtrl, new_0, 0}}, - {2979, {wxStyledTextCtrl, destruct, 0}}, - {2980, {wxStyledTextCtrl, create, 2}}, - {2981, {wxStyledTextCtrl, addText, 1}}, - {2982, {wxStyledTextCtrl, addStyledText, 1}}, - {2983, {wxStyledTextCtrl, insertText, 2}}, - {2984, {wxStyledTextCtrl, clearAll, 0}}, - {2985, {wxStyledTextCtrl, clearDocumentStyle, 0}}, - {2986, {wxStyledTextCtrl, getLength, 0}}, - {2987, {wxStyledTextCtrl, getCharAt, 1}}, - {2988, {wxStyledTextCtrl, getCurrentPos, 0}}, - {2989, {wxStyledTextCtrl, getAnchor, 0}}, - {2990, {wxStyledTextCtrl, getStyleAt, 1}}, - {2991, {wxStyledTextCtrl, redo, 0}}, - {2992, {wxStyledTextCtrl, setUndoCollection, 1}}, - {2993, {wxStyledTextCtrl, selectAll, 0}}, - {2994, {wxStyledTextCtrl, setSavePoint, 0}}, - {2995, {wxStyledTextCtrl, getStyledText, 2}}, - {2996, {wxStyledTextCtrl, canRedo, 0}}, - {2997, {wxStyledTextCtrl, markerLineFromHandle, 1}}, - {2998, {wxStyledTextCtrl, markerDeleteHandle, 1}}, - {2999, {wxStyledTextCtrl, getUndoCollection, 0}}, - {3000, {wxStyledTextCtrl, getViewWhiteSpace, 0}}, - {3001, {wxStyledTextCtrl, setViewWhiteSpace, 1}}, - {3002, {wxStyledTextCtrl, positionFromPoint, 1}}, - {3003, {wxStyledTextCtrl, positionFromPointClose, 2}}, - {3004, {wxStyledTextCtrl, gotoLine, 1}}, - {3005, {wxStyledTextCtrl, gotoPos, 1}}, - {3006, {wxStyledTextCtrl, setAnchor, 1}}, - {3007, {wxStyledTextCtrl, getCurLine, 1}}, - {3008, {wxStyledTextCtrl, getEndStyled, 0}}, - {3009, {wxStyledTextCtrl, convertEOLs, 1}}, - {3010, {wxStyledTextCtrl, getEOLMode, 0}}, - {3011, {wxStyledTextCtrl, setEOLMode, 1}}, - {3012, {wxStyledTextCtrl, startStyling, 2}}, - {3013, {wxStyledTextCtrl, setStyling, 2}}, - {3014, {wxStyledTextCtrl, getBufferedDraw, 0}}, - {3015, {wxStyledTextCtrl, setBufferedDraw, 1}}, - {3016, {wxStyledTextCtrl, setTabWidth, 1}}, - {3017, {wxStyledTextCtrl, getTabWidth, 0}}, - {3018, {wxStyledTextCtrl, setCodePage, 1}}, - {3019, {wxStyledTextCtrl, markerDefine, 3}}, - {3020, {wxStyledTextCtrl, markerSetForeground, 2}}, - {3021, {wxStyledTextCtrl, markerSetBackground, 2}}, - {3022, {wxStyledTextCtrl, markerAdd, 2}}, - {3023, {wxStyledTextCtrl, markerDelete, 2}}, - {3024, {wxStyledTextCtrl, markerDeleteAll, 1}}, - {3025, {wxStyledTextCtrl, markerGet, 1}}, - {3026, {wxStyledTextCtrl, markerNext, 2}}, - {3027, {wxStyledTextCtrl, markerPrevious, 2}}, - {3028, {wxStyledTextCtrl, markerDefineBitmap, 2}}, - {3029, {wxStyledTextCtrl, markerAddSet, 2}}, - {3030, {wxStyledTextCtrl, markerSetAlpha, 2}}, - {3031, {wxStyledTextCtrl, setMarginType, 2}}, - {3032, {wxStyledTextCtrl, getMarginType, 1}}, - {3033, {wxStyledTextCtrl, setMarginWidth, 2}}, - {3034, {wxStyledTextCtrl, getMarginWidth, 1}}, - {3035, {wxStyledTextCtrl, setMarginMask, 2}}, - {3036, {wxStyledTextCtrl, getMarginMask, 1}}, - {3037, {wxStyledTextCtrl, setMarginSensitive, 2}}, - {3038, {wxStyledTextCtrl, getMarginSensitive, 1}}, - {3039, {wxStyledTextCtrl, styleClearAll, 0}}, - {3040, {wxStyledTextCtrl, styleSetForeground, 2}}, - {3041, {wxStyledTextCtrl, styleSetBackground, 2}}, - {3042, {wxStyledTextCtrl, styleSetBold, 2}}, - {3043, {wxStyledTextCtrl, styleSetItalic, 2}}, - {3044, {wxStyledTextCtrl, styleSetSize, 2}}, - {3045, {wxStyledTextCtrl, styleSetFaceName, 2}}, - {3046, {wxStyledTextCtrl, styleSetEOLFilled, 2}}, - {3047, {wxStyledTextCtrl, styleResetDefault, 0}}, - {3048, {wxStyledTextCtrl, styleSetUnderline, 2}}, - {3049, {wxStyledTextCtrl, styleSetCase, 2}}, - {3050, {wxStyledTextCtrl, styleSetHotSpot, 2}}, - {3051, {wxStyledTextCtrl, setSelForeground, 2}}, - {3052, {wxStyledTextCtrl, setSelBackground, 2}}, - {3053, {wxStyledTextCtrl, getSelAlpha, 0}}, - {3054, {wxStyledTextCtrl, setSelAlpha, 1}}, - {3055, {wxStyledTextCtrl, setCaretForeground, 1}}, - {3056, {wxStyledTextCtrl, cmdKeyAssign, 3}}, - {3057, {wxStyledTextCtrl, cmdKeyClear, 2}}, - {3058, {wxStyledTextCtrl, cmdKeyClearAll, 0}}, - {3059, {wxStyledTextCtrl, setStyleBytes, 2}}, - {3060, {wxStyledTextCtrl, styleSetVisible, 2}}, - {3061, {wxStyledTextCtrl, getCaretPeriod, 0}}, - {3062, {wxStyledTextCtrl, setCaretPeriod, 1}}, - {3063, {wxStyledTextCtrl, setWordChars, 1}}, - {3064, {wxStyledTextCtrl, beginUndoAction, 0}}, - {3065, {wxStyledTextCtrl, endUndoAction, 0}}, - {3066, {wxStyledTextCtrl, indicatorSetStyle, 2}}, - {3067, {wxStyledTextCtrl, indicatorGetStyle, 1}}, - {3068, {wxStyledTextCtrl, indicatorSetForeground, 2}}, - {3069, {wxStyledTextCtrl, indicatorGetForeground, 1}}, - {3070, {wxStyledTextCtrl, setWhitespaceForeground, 2}}, - {3071, {wxStyledTextCtrl, setWhitespaceBackground, 2}}, - {3072, {wxStyledTextCtrl, getStyleBits, 0}}, - {3073, {wxStyledTextCtrl, setLineState, 2}}, - {3074, {wxStyledTextCtrl, getLineState, 1}}, - {3075, {wxStyledTextCtrl, getMaxLineState, 0}}, - {3076, {wxStyledTextCtrl, getCaretLineVisible, 0}}, - {3077, {wxStyledTextCtrl, setCaretLineVisible, 1}}, - {3078, {wxStyledTextCtrl, getCaretLineBackground, 0}}, - {3079, {wxStyledTextCtrl, setCaretLineBackground, 1}}, - {3080, {wxStyledTextCtrl, autoCompShow, 2}}, - {3081, {wxStyledTextCtrl, autoCompCancel, 0}}, - {3082, {wxStyledTextCtrl, autoCompActive, 0}}, - {3083, {wxStyledTextCtrl, autoCompPosStart, 0}}, - {3084, {wxStyledTextCtrl, autoCompComplete, 0}}, - {3085, {wxStyledTextCtrl, autoCompStops, 1}}, - {3086, {wxStyledTextCtrl, autoCompSetSeparator, 1}}, - {3087, {wxStyledTextCtrl, autoCompGetSeparator, 0}}, - {3088, {wxStyledTextCtrl, autoCompSelect, 1}}, - {3089, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}}, - {3090, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}}, - {3091, {wxStyledTextCtrl, autoCompSetFillUps, 1}}, - {3092, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}}, - {3093, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}}, - {3094, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}}, - {3095, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}}, - {3096, {wxStyledTextCtrl, userListShow, 2}}, - {3097, {wxStyledTextCtrl, autoCompSetAutoHide, 1}}, - {3098, {wxStyledTextCtrl, autoCompGetAutoHide, 0}}, - {3099, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}}, - {3100, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}}, - {3101, {wxStyledTextCtrl, registerImage, 2}}, - {3102, {wxStyledTextCtrl, clearRegisteredImages, 0}}, - {3103, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}}, - {3104, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}}, - {3105, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}}, - {3106, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}}, - {3107, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}}, - {3108, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}}, - {3109, {wxStyledTextCtrl, setIndent, 1}}, - {3110, {wxStyledTextCtrl, getIndent, 0}}, - {3111, {wxStyledTextCtrl, setUseTabs, 1}}, - {3112, {wxStyledTextCtrl, getUseTabs, 0}}, - {3113, {wxStyledTextCtrl, setLineIndentation, 2}}, - {3114, {wxStyledTextCtrl, getLineIndentation, 1}}, - {3115, {wxStyledTextCtrl, getLineIndentPosition, 1}}, - {3116, {wxStyledTextCtrl, getColumn, 1}}, - {3117, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}}, - {3118, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}}, - {3119, {wxStyledTextCtrl, setIndentationGuides, 1}}, - {3120, {wxStyledTextCtrl, getIndentationGuides, 0}}, - {3121, {wxStyledTextCtrl, setHighlightGuide, 1}}, - {3122, {wxStyledTextCtrl, getHighlightGuide, 0}}, - {3123, {wxStyledTextCtrl, getLineEndPosition, 1}}, - {3124, {wxStyledTextCtrl, getCodePage, 0}}, - {3125, {wxStyledTextCtrl, getCaretForeground, 0}}, - {3126, {wxStyledTextCtrl, getReadOnly, 0}}, - {3127, {wxStyledTextCtrl, setCurrentPos, 1}}, - {3128, {wxStyledTextCtrl, setSelectionStart, 1}}, - {3129, {wxStyledTextCtrl, getSelectionStart, 0}}, - {3130, {wxStyledTextCtrl, setSelectionEnd, 1}}, - {3131, {wxStyledTextCtrl, getSelectionEnd, 0}}, - {3132, {wxStyledTextCtrl, setPrintMagnification, 1}}, - {3133, {wxStyledTextCtrl, getPrintMagnification, 0}}, - {3134, {wxStyledTextCtrl, setPrintColourMode, 1}}, - {3135, {wxStyledTextCtrl, getPrintColourMode, 0}}, - {3136, {wxStyledTextCtrl, findText, 4}}, - {3137, {wxStyledTextCtrl, formatRange, 7}}, - {3138, {wxStyledTextCtrl, getFirstVisibleLine, 0}}, - {3139, {wxStyledTextCtrl, getLine, 1}}, - {3140, {wxStyledTextCtrl, getLineCount, 0}}, - {3141, {wxStyledTextCtrl, setMarginLeft, 1}}, - {3142, {wxStyledTextCtrl, getMarginLeft, 0}}, - {3143, {wxStyledTextCtrl, setMarginRight, 1}}, - {3144, {wxStyledTextCtrl, getMarginRight, 0}}, - {3145, {wxStyledTextCtrl, getModify, 0}}, - {3146, {wxStyledTextCtrl, setSelection, 2}}, - {3147, {wxStyledTextCtrl, getSelectedText, 0}}, - {3148, {wxStyledTextCtrl, getTextRange, 2}}, - {3149, {wxStyledTextCtrl, hideSelection, 1}}, - {3150, {wxStyledTextCtrl, lineFromPosition, 1}}, - {3151, {wxStyledTextCtrl, positionFromLine, 1}}, - {3152, {wxStyledTextCtrl, lineScroll, 2}}, - {3153, {wxStyledTextCtrl, ensureCaretVisible, 0}}, - {3154, {wxStyledTextCtrl, replaceSelection, 1}}, - {3155, {wxStyledTextCtrl, setReadOnly, 1}}, - {3156, {wxStyledTextCtrl, canPaste, 0}}, - {3157, {wxStyledTextCtrl, canUndo, 0}}, - {3158, {wxStyledTextCtrl, emptyUndoBuffer, 0}}, - {3159, {wxStyledTextCtrl, undo, 0}}, - {3160, {wxStyledTextCtrl, cut, 0}}, - {3161, {wxStyledTextCtrl, copy, 0}}, - {3162, {wxStyledTextCtrl, paste, 0}}, - {3163, {wxStyledTextCtrl, clear, 0}}, - {3164, {wxStyledTextCtrl, setText, 1}}, - {3165, {wxStyledTextCtrl, getText, 0}}, - {3166, {wxStyledTextCtrl, getTextLength, 0}}, - {3167, {wxStyledTextCtrl, getOvertype, 0}}, - {3168, {wxStyledTextCtrl, setCaretWidth, 1}}, - {3169, {wxStyledTextCtrl, getCaretWidth, 0}}, - {3170, {wxStyledTextCtrl, setTargetStart, 1}}, - {3171, {wxStyledTextCtrl, getTargetStart, 0}}, - {3172, {wxStyledTextCtrl, setTargetEnd, 1}}, - {3173, {wxStyledTextCtrl, getTargetEnd, 0}}, - {3174, {wxStyledTextCtrl, replaceTarget, 1}}, - {3175, {wxStyledTextCtrl, searchInTarget, 1}}, - {3176, {wxStyledTextCtrl, setSearchFlags, 1}}, - {3177, {wxStyledTextCtrl, getSearchFlags, 0}}, - {3178, {wxStyledTextCtrl, callTipShow, 2}}, - {3179, {wxStyledTextCtrl, callTipCancel, 0}}, - {3180, {wxStyledTextCtrl, callTipActive, 0}}, - {3181, {wxStyledTextCtrl, callTipPosAtStart, 0}}, - {3182, {wxStyledTextCtrl, callTipSetHighlight, 2}}, - {3183, {wxStyledTextCtrl, callTipSetBackground, 1}}, - {3184, {wxStyledTextCtrl, callTipSetForeground, 1}}, - {3185, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}}, - {3186, {wxStyledTextCtrl, callTipUseStyle, 1}}, - {3187, {wxStyledTextCtrl, visibleFromDocLine, 1}}, - {3188, {wxStyledTextCtrl, docLineFromVisible, 1}}, - {3189, {wxStyledTextCtrl, wrapCount, 1}}, - {3190, {wxStyledTextCtrl, setFoldLevel, 2}}, - {3191, {wxStyledTextCtrl, getFoldLevel, 1}}, - {3192, {wxStyledTextCtrl, getLastChild, 2}}, - {3193, {wxStyledTextCtrl, getFoldParent, 1}}, - {3194, {wxStyledTextCtrl, showLines, 2}}, - {3195, {wxStyledTextCtrl, hideLines, 2}}, - {3196, {wxStyledTextCtrl, getLineVisible, 1}}, - {3197, {wxStyledTextCtrl, setFoldExpanded, 2}}, - {3198, {wxStyledTextCtrl, getFoldExpanded, 1}}, - {3199, {wxStyledTextCtrl, toggleFold, 1}}, - {3200, {wxStyledTextCtrl, ensureVisible, 1}}, - {3201, {wxStyledTextCtrl, setFoldFlags, 1}}, - {3202, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}}, - {3203, {wxStyledTextCtrl, setTabIndents, 1}}, - {3204, {wxStyledTextCtrl, getTabIndents, 0}}, - {3205, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}}, - {3206, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}}, - {3207, {wxStyledTextCtrl, setMouseDwellTime, 1}}, - {3208, {wxStyledTextCtrl, getMouseDwellTime, 0}}, - {3209, {wxStyledTextCtrl, wordStartPosition, 2}}, - {3210, {wxStyledTextCtrl, wordEndPosition, 2}}, - {3211, {wxStyledTextCtrl, setWrapMode, 1}}, - {3212, {wxStyledTextCtrl, getWrapMode, 0}}, - {3213, {wxStyledTextCtrl, setWrapVisualFlags, 1}}, - {3214, {wxStyledTextCtrl, getWrapVisualFlags, 0}}, - {3215, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}}, - {3216, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}}, - {3217, {wxStyledTextCtrl, setWrapStartIndent, 1}}, - {3218, {wxStyledTextCtrl, getWrapStartIndent, 0}}, - {3219, {wxStyledTextCtrl, setLayoutCache, 1}}, - {3220, {wxStyledTextCtrl, getLayoutCache, 0}}, - {3221, {wxStyledTextCtrl, setScrollWidth, 1}}, - {3222, {wxStyledTextCtrl, getScrollWidth, 0}}, - {3223, {wxStyledTextCtrl, textWidth, 2}}, - {3224, {wxStyledTextCtrl, getEndAtLastLine, 0}}, - {3225, {wxStyledTextCtrl, textHeight, 1}}, - {3226, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}}, - {3227, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}}, - {3228, {wxStyledTextCtrl, appendText, 1}}, - {3229, {wxStyledTextCtrl, getTwoPhaseDraw, 0}}, - {3230, {wxStyledTextCtrl, setTwoPhaseDraw, 1}}, - {3231, {wxStyledTextCtrl, targetFromSelection, 0}}, - {3232, {wxStyledTextCtrl, linesJoin, 0}}, - {3233, {wxStyledTextCtrl, linesSplit, 1}}, - {3234, {wxStyledTextCtrl, setFoldMarginColour, 2}}, - {3235, {wxStyledTextCtrl, setFoldMarginHiColour, 2}}, - {3236, {wxStyledTextCtrl, lineDown, 0}}, - {3237, {wxStyledTextCtrl, lineDownExtend, 0}}, - {3238, {wxStyledTextCtrl, lineUp, 0}}, - {3239, {wxStyledTextCtrl, lineUpExtend, 0}}, - {3240, {wxStyledTextCtrl, charLeft, 0}}, - {3241, {wxStyledTextCtrl, charLeftExtend, 0}}, - {3242, {wxStyledTextCtrl, charRight, 0}}, - {3243, {wxStyledTextCtrl, charRightExtend, 0}}, - {3244, {wxStyledTextCtrl, wordLeft, 0}}, - {3245, {wxStyledTextCtrl, wordLeftExtend, 0}}, - {3246, {wxStyledTextCtrl, wordRight, 0}}, - {3247, {wxStyledTextCtrl, wordRightExtend, 0}}, - {3248, {wxStyledTextCtrl, home, 0}}, - {3249, {wxStyledTextCtrl, homeExtend, 0}}, - {3250, {wxStyledTextCtrl, lineEnd, 0}}, - {3251, {wxStyledTextCtrl, lineEndExtend, 0}}, - {3252, {wxStyledTextCtrl, documentStart, 0}}, - {3253, {wxStyledTextCtrl, documentStartExtend, 0}}, - {3254, {wxStyledTextCtrl, documentEnd, 0}}, - {3255, {wxStyledTextCtrl, documentEndExtend, 0}}, - {3256, {wxStyledTextCtrl, pageUp, 0}}, - {3257, {wxStyledTextCtrl, pageUpExtend, 0}}, - {3258, {wxStyledTextCtrl, pageDown, 0}}, - {3259, {wxStyledTextCtrl, pageDownExtend, 0}}, - {3260, {wxStyledTextCtrl, editToggleOvertype, 0}}, - {3261, {wxStyledTextCtrl, cancel, 0}}, - {3262, {wxStyledTextCtrl, deleteBack, 0}}, - {3263, {wxStyledTextCtrl, tab, 0}}, - {3264, {wxStyledTextCtrl, backTab, 0}}, - {3265, {wxStyledTextCtrl, newLine, 0}}, - {3266, {wxStyledTextCtrl, formFeed, 0}}, - {3267, {wxStyledTextCtrl, vCHome, 0}}, - {3268, {wxStyledTextCtrl, vCHomeExtend, 0}}, - {3269, {wxStyledTextCtrl, zoomIn, 0}}, - {3270, {wxStyledTextCtrl, zoomOut, 0}}, - {3271, {wxStyledTextCtrl, delWordLeft, 0}}, - {3272, {wxStyledTextCtrl, delWordRight, 0}}, - {3273, {wxStyledTextCtrl, lineCut, 0}}, - {3274, {wxStyledTextCtrl, lineDelete, 0}}, - {3275, {wxStyledTextCtrl, lineTranspose, 0}}, - {3276, {wxStyledTextCtrl, lineDuplicate, 0}}, - {3277, {wxStyledTextCtrl, lowerCase, 0}}, - {3278, {wxStyledTextCtrl, upperCase, 0}}, - {3279, {wxStyledTextCtrl, lineScrollDown, 0}}, - {3280, {wxStyledTextCtrl, lineScrollUp, 0}}, - {3281, {wxStyledTextCtrl, deleteBackNotLine, 0}}, - {3282, {wxStyledTextCtrl, homeDisplay, 0}}, - {3283, {wxStyledTextCtrl, homeDisplayExtend, 0}}, - {3284, {wxStyledTextCtrl, lineEndDisplay, 0}}, - {3285, {wxStyledTextCtrl, lineEndDisplayExtend, 0}}, - {3286, {wxStyledTextCtrl, homeWrapExtend, 0}}, - {3287, {wxStyledTextCtrl, lineEndWrap, 0}}, - {3288, {wxStyledTextCtrl, lineEndWrapExtend, 0}}, - {3289, {wxStyledTextCtrl, vCHomeWrap, 0}}, - {3290, {wxStyledTextCtrl, vCHomeWrapExtend, 0}}, - {3291, {wxStyledTextCtrl, lineCopy, 0}}, - {3292, {wxStyledTextCtrl, moveCaretInsideView, 0}}, - {3293, {wxStyledTextCtrl, lineLength, 1}}, - {3294, {wxStyledTextCtrl, braceHighlight, 2}}, - {3295, {wxStyledTextCtrl, braceBadLight, 1}}, - {3296, {wxStyledTextCtrl, braceMatch, 1}}, - {3297, {wxStyledTextCtrl, getViewEOL, 0}}, - {3298, {wxStyledTextCtrl, setViewEOL, 1}}, - {3299, {wxStyledTextCtrl, setModEventMask, 1}}, - {3300, {wxStyledTextCtrl, getEdgeColumn, 0}}, - {3301, {wxStyledTextCtrl, setEdgeColumn, 1}}, - {3302, {wxStyledTextCtrl, setEdgeMode, 1}}, - {3303, {wxStyledTextCtrl, getEdgeMode, 0}}, - {3304, {wxStyledTextCtrl, getEdgeColour, 0}}, - {3305, {wxStyledTextCtrl, setEdgeColour, 1}}, - {3306, {wxStyledTextCtrl, searchAnchor, 0}}, - {3307, {wxStyledTextCtrl, searchNext, 2}}, - {3308, {wxStyledTextCtrl, searchPrev, 2}}, - {3309, {wxStyledTextCtrl, linesOnScreen, 0}}, - {3310, {wxStyledTextCtrl, usePopUp, 1}}, - {3311, {wxStyledTextCtrl, selectionIsRectangle, 0}}, - {3312, {wxStyledTextCtrl, setZoom, 1}}, - {3313, {wxStyledTextCtrl, getZoom, 0}}, - {3314, {wxStyledTextCtrl, getModEventMask, 0}}, - {3315, {wxStyledTextCtrl, setSTCFocus, 1}}, - {3316, {wxStyledTextCtrl, getSTCFocus, 0}}, - {3317, {wxStyledTextCtrl, setStatus, 1}}, - {3318, {wxStyledTextCtrl, getStatus, 0}}, - {3319, {wxStyledTextCtrl, setMouseDownCaptures, 1}}, - {3320, {wxStyledTextCtrl, getMouseDownCaptures, 0}}, - {3321, {wxStyledTextCtrl, setSTCCursor, 1}}, - {3322, {wxStyledTextCtrl, getSTCCursor, 0}}, - {3323, {wxStyledTextCtrl, setControlCharSymbol, 1}}, - {3324, {wxStyledTextCtrl, getControlCharSymbol, 0}}, - {3325, {wxStyledTextCtrl, wordPartLeft, 0}}, - {3326, {wxStyledTextCtrl, wordPartLeftExtend, 0}}, - {3327, {wxStyledTextCtrl, wordPartRight, 0}}, - {3328, {wxStyledTextCtrl, wordPartRightExtend, 0}}, - {3329, {wxStyledTextCtrl, setVisiblePolicy, 2}}, - {3330, {wxStyledTextCtrl, delLineLeft, 0}}, - {3331, {wxStyledTextCtrl, delLineRight, 0}}, - {3332, {wxStyledTextCtrl, getXOffset, 0}}, - {3333, {wxStyledTextCtrl, chooseCaretX, 0}}, - {3334, {wxStyledTextCtrl, setXCaretPolicy, 2}}, - {3335, {wxStyledTextCtrl, setYCaretPolicy, 2}}, - {3336, {wxStyledTextCtrl, getPrintWrapMode, 0}}, - {3337, {wxStyledTextCtrl, setHotspotActiveForeground, 2}}, - {3338, {wxStyledTextCtrl, setHotspotActiveBackground, 2}}, - {3339, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}}, - {3340, {wxStyledTextCtrl, setHotspotSingleLine, 1}}, - {3341, {wxStyledTextCtrl, paraDownExtend, 0}}, - {3342, {wxStyledTextCtrl, paraUp, 0}}, - {3343, {wxStyledTextCtrl, paraUpExtend, 0}}, - {3344, {wxStyledTextCtrl, positionBefore, 1}}, - {3345, {wxStyledTextCtrl, positionAfter, 1}}, - {3346, {wxStyledTextCtrl, copyRange, 2}}, - {3347, {wxStyledTextCtrl, copyText, 2}}, - {3348, {wxStyledTextCtrl, setSelectionMode, 1}}, - {3349, {wxStyledTextCtrl, getSelectionMode, 0}}, - {3350, {wxStyledTextCtrl, lineDownRectExtend, 0}}, - {3351, {wxStyledTextCtrl, lineUpRectExtend, 0}}, - {3352, {wxStyledTextCtrl, charLeftRectExtend, 0}}, - {3353, {wxStyledTextCtrl, charRightRectExtend, 0}}, - {3354, {wxStyledTextCtrl, homeRectExtend, 0}}, - {3355, {wxStyledTextCtrl, vCHomeRectExtend, 0}}, - {3356, {wxStyledTextCtrl, lineEndRectExtend, 0}}, - {3357, {wxStyledTextCtrl, pageUpRectExtend, 0}}, - {3358, {wxStyledTextCtrl, pageDownRectExtend, 0}}, - {3359, {wxStyledTextCtrl, stutteredPageUp, 0}}, - {3360, {wxStyledTextCtrl, stutteredPageUpExtend, 0}}, - {3361, {wxStyledTextCtrl, stutteredPageDown, 0}}, - {3362, {wxStyledTextCtrl, stutteredPageDownExtend, 0}}, - {3363, {wxStyledTextCtrl, wordLeftEnd, 0}}, - {3364, {wxStyledTextCtrl, wordLeftEndExtend, 0}}, - {3365, {wxStyledTextCtrl, wordRightEnd, 0}}, - {3366, {wxStyledTextCtrl, wordRightEndExtend, 0}}, - {3367, {wxStyledTextCtrl, setWhitespaceChars, 1}}, - {3368, {wxStyledTextCtrl, setCharsDefault, 0}}, - {3369, {wxStyledTextCtrl, autoCompGetCurrent, 0}}, - {3370, {wxStyledTextCtrl, allocate, 1}}, - {3371, {wxStyledTextCtrl, findColumn, 2}}, - {3372, {wxStyledTextCtrl, getCaretSticky, 0}}, - {3373, {wxStyledTextCtrl, setCaretSticky, 1}}, - {3374, {wxStyledTextCtrl, toggleCaretSticky, 0}}, - {3375, {wxStyledTextCtrl, setPasteConvertEndings, 1}}, - {3376, {wxStyledTextCtrl, getPasteConvertEndings, 0}}, - {3377, {wxStyledTextCtrl, selectionDuplicate, 0}}, - {3378, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}}, - {3379, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}}, - {3380, {wxStyledTextCtrl, startRecord, 0}}, - {3381, {wxStyledTextCtrl, stopRecord, 0}}, - {3382, {wxStyledTextCtrl, setLexer, 1}}, - {3383, {wxStyledTextCtrl, getLexer, 0}}, - {3384, {wxStyledTextCtrl, colourise, 2}}, - {3385, {wxStyledTextCtrl, setProperty, 2}}, - {3386, {wxStyledTextCtrl, setKeyWords, 2}}, - {3387, {wxStyledTextCtrl, setLexerLanguage, 1}}, - {3388, {wxStyledTextCtrl, getProperty, 1}}, - {3389, {wxStyledTextCtrl, getStyleBitsNeeded, 0}}, - {3390, {wxStyledTextCtrl, getCurrentLine, 0}}, - {3391, {wxStyledTextCtrl, styleSetSpec, 2}}, - {3392, {wxStyledTextCtrl, styleSetFont, 2}}, - {3393, {wxStyledTextCtrl, styleSetFontAttr, 7}}, - {3394, {wxStyledTextCtrl, styleSetCharacterSet, 2}}, - {3395, {wxStyledTextCtrl, styleSetFontEncoding, 2}}, - {3396, {wxStyledTextCtrl, cmdKeyExecute, 1}}, - {3397, {wxStyledTextCtrl, setMargins, 2}}, - {3398, {wxStyledTextCtrl, getSelection, 2}}, - {3399, {wxStyledTextCtrl, pointFromPosition, 1}}, - {3400, {wxStyledTextCtrl, scrollToLine, 1}}, - {3401, {wxStyledTextCtrl, scrollToColumn, 1}}, - {3402, {wxStyledTextCtrl, setVScrollBar, 1}}, - {3403, {wxStyledTextCtrl, setHScrollBar, 1}}, - {3404, {wxStyledTextCtrl, getLastKeydownProcessed, 0}}, - {3405, {wxStyledTextCtrl, setLastKeydownProcessed, 1}}, - {3406, {wxStyledTextCtrl, saveFile, 1}}, - {3407, {wxStyledTextCtrl, loadFile, 1}}, - {3408, {wxStyledTextCtrl, doDragOver, 3}}, - {3409, {wxStyledTextCtrl, doDropText, 3}}, - {3410, {wxStyledTextCtrl, getUseAntiAliasing, 0}}, - {3411, {wxStyledTextCtrl, addTextRaw, 1}}, - {3412, {wxStyledTextCtrl, insertTextRaw, 2}}, - {3413, {wxStyledTextCtrl, getCurLineRaw, 1}}, - {3414, {wxStyledTextCtrl, getLineRaw, 1}}, - {3415, {wxStyledTextCtrl, getSelectedTextRaw, 0}}, - {3416, {wxStyledTextCtrl, getTextRangeRaw, 2}}, - {3417, {wxStyledTextCtrl, setTextRaw, 1}}, - {3418, {wxStyledTextCtrl, getTextRaw, 0}}, - {3419, {wxStyledTextCtrl, appendTextRaw, 1}}, - {3420, {wxArtProvider, getBitmap, 2}}, - {3421, {wxArtProvider, getIcon, 2}}, - {3422, {wxTreeEvent, getKeyCode, 0}}, - {3423, {wxTreeEvent, getItem, 0}}, - {3424, {wxTreeEvent, getKeyEvent, 0}}, - {3425, {wxTreeEvent, getLabel, 0}}, - {3426, {wxTreeEvent, getOldItem, 0}}, - {3427, {wxTreeEvent, getPoint, 0}}, - {3428, {wxTreeEvent, isEditCancelled, 0}}, - {3429, {wxTreeEvent, setToolTip, 1}}, - {3430, {wxNotebookEvent, getOldSelection, 0}}, - {3431, {wxNotebookEvent, getSelection, 0}}, - {3432, {wxNotebookEvent, setOldSelection, 1}}, - {3433, {wxNotebookEvent, setSelection, 1}}, - {3434, {wxFileDataObject, new, 0}}, - {3435, {wxFileDataObject, addFile, 1}}, - {3436, {wxFileDataObject, getFilenames, 0}}, - {3437, {wxFileDataObject, 'Destroy', undefined}}, - {3438, {wxTextDataObject, new, 1}}, - {3439, {wxTextDataObject, getTextLength, 0}}, - {3440, {wxTextDataObject, getText, 0}}, - {3441, {wxTextDataObject, setText, 1}}, - {3442, {wxTextDataObject, 'Destroy', undefined}}, - {3443, {wxBitmapDataObject, new_1_1, 1}}, - {3444, {wxBitmapDataObject, new_1_0, 1}}, - {3445, {wxBitmapDataObject, getBitmap, 0}}, - {3446, {wxBitmapDataObject, setBitmap, 1}}, - {3447, {wxBitmapDataObject, 'Destroy', undefined}}, - {3449, {wxClipboard, new, 0}}, - {3450, {wxClipboard, destruct, 0}}, - {3451, {wxClipboard, addData, 1}}, - {3452, {wxClipboard, clear, 0}}, - {3453, {wxClipboard, close, 0}}, - {3454, {wxClipboard, flush, 0}}, - {3455, {wxClipboard, getData, 1}}, - {3456, {wxClipboard, isOpened, 0}}, - {3457, {wxClipboard, open, 0}}, - {3458, {wxClipboard, setData, 1}}, - {3460, {wxClipboard, usePrimarySelection, 1}}, - {3461, {wxClipboard, isSupported, 1}}, - {3462, {wxClipboard, get, 0}}, - {3463, {wxSpinEvent, getPosition, 0}}, - {3464, {wxSpinEvent, setPosition, 1}}, - {3465, {wxSplitterWindow, new_0, 0}}, - {3466, {wxSplitterWindow, new_2, 2}}, - {3467, {wxSplitterWindow, destruct, 0}}, - {3468, {wxSplitterWindow, create, 2}}, - {3469, {wxSplitterWindow, getMinimumPaneSize, 0}}, - {3470, {wxSplitterWindow, getSashGravity, 0}}, - {3471, {wxSplitterWindow, getSashPosition, 0}}, - {3472, {wxSplitterWindow, getSplitMode, 0}}, - {3473, {wxSplitterWindow, getWindow1, 0}}, - {3474, {wxSplitterWindow, getWindow2, 0}}, - {3475, {wxSplitterWindow, initialize, 1}}, - {3476, {wxSplitterWindow, isSplit, 0}}, - {3477, {wxSplitterWindow, replaceWindow, 2}}, - {3478, {wxSplitterWindow, setSashGravity, 1}}, - {3479, {wxSplitterWindow, setSashPosition, 2}}, - {3480, {wxSplitterWindow, setSashSize, 1}}, - {3481, {wxSplitterWindow, setMinimumPaneSize, 1}}, - {3482, {wxSplitterWindow, setSplitMode, 1}}, - {3483, {wxSplitterWindow, splitHorizontally, 3}}, - {3484, {wxSplitterWindow, splitVertically, 3}}, - {3485, {wxSplitterWindow, unsplit, 1}}, - {3486, {wxSplitterWindow, updateSize, 0}}, - {3487, {wxSplitterEvent, getSashPosition, 0}}, - {3488, {wxSplitterEvent, getX, 0}}, - {3489, {wxSplitterEvent, getY, 0}}, - {3490, {wxSplitterEvent, getWindowBeingRemoved, 0}}, - {3491, {wxSplitterEvent, setSashPosition, 1}}, - {3492, {wxHtmlWindow, new_0, 0}}, - {3493, {wxHtmlWindow, new_2, 2}}, - {3494, {wxHtmlWindow, appendToPage, 1}}, - {3495, {wxHtmlWindow, getOpenedAnchor, 0}}, - {3496, {wxHtmlWindow, getOpenedPage, 0}}, - {3497, {wxHtmlWindow, getOpenedPageTitle, 0}}, - {3498, {wxHtmlWindow, getRelatedFrame, 0}}, - {3499, {wxHtmlWindow, historyBack, 0}}, - {3500, {wxHtmlWindow, historyCanBack, 0}}, - {3501, {wxHtmlWindow, historyCanForward, 0}}, - {3502, {wxHtmlWindow, historyClear, 0}}, - {3503, {wxHtmlWindow, historyForward, 0}}, - {3504, {wxHtmlWindow, loadFile, 1}}, - {3505, {wxHtmlWindow, loadPage, 1}}, - {3506, {wxHtmlWindow, selectAll, 0}}, - {3507, {wxHtmlWindow, selectionToText, 0}}, - {3508, {wxHtmlWindow, selectLine, 1}}, - {3509, {wxHtmlWindow, selectWord, 1}}, - {3510, {wxHtmlWindow, setBorders, 1}}, - {3511, {wxHtmlWindow, setFonts, 3}}, - {3512, {wxHtmlWindow, setPage, 1}}, - {3513, {wxHtmlWindow, setRelatedFrame, 2}}, - {3514, {wxHtmlWindow, setRelatedStatusBar, 1}}, - {3515, {wxHtmlWindow, toText, 0}}, - {3516, {wxHtmlWindow, 'Destroy', undefined}}, - {3517, {wxHtmlLinkEvent, getLinkInfo, 0}}, - {3518, {wxSystemSettings, getColour, 1}}, - {3519, {wxSystemSettings, getFont, 1}}, - {3520, {wxSystemSettings, getMetric, 2}}, - {3521, {wxSystemSettings, getScreenType, 0}}, - {3522, {wxSystemOptions, getOption, 1}}, - {3523, {wxSystemOptions, getOptionInt, 1}}, - {3524, {wxSystemOptions, hasOption, 1}}, - {3525, {wxSystemOptions, isFalse, 1}}, - {3526, {wxSystemOptions, setOption_2_1, 2}}, - {3527, {wxSystemOptions, setOption_2_0, 2}}, - {3528, {wxAuiNotebookEvent, setSelection, 1}}, - {3529, {wxAuiNotebookEvent, getSelection, 0}}, - {3530, {wxAuiNotebookEvent, setOldSelection, 1}}, - {3531, {wxAuiNotebookEvent, getOldSelection, 0}}, - {3532, {wxAuiNotebookEvent, setDragSource, 1}}, - {3533, {wxAuiNotebookEvent, getDragSource, 0}}, - {3534, {wxAuiManagerEvent, setManager, 1}}, - {3535, {wxAuiManagerEvent, getManager, 0}}, - {3536, {wxAuiManagerEvent, setPane, 1}}, - {3537, {wxAuiManagerEvent, getPane, 0}}, - {3538, {wxAuiManagerEvent, setButton, 1}}, - {3539, {wxAuiManagerEvent, getButton, 0}}, - {3540, {wxAuiManagerEvent, setDC, 1}}, - {3541, {wxAuiManagerEvent, getDC, 0}}, - {3542, {wxAuiManagerEvent, veto, 1}}, - {3543, {wxAuiManagerEvent, getVeto, 0}}, - {3544, {wxAuiManagerEvent, setCanVeto, 1}}, - {3545, {wxAuiManagerEvent, canVeto, 0}}, - {3546, {wxLogNull, new, 0}}, - {3547, {wxLogNull, 'Destroy', undefined}}, - {3548, {wxTaskBarIcon, new, 0}}, - {3549, {wxTaskBarIcon, destruct, 0}}, - {3550, {wxTaskBarIcon, popupMenu, 1}}, - {3551, {wxTaskBarIcon, removeIcon, 0}}, - {3552, {wxTaskBarIcon, setIcon, 2}}, - {3553, {wxLocale, new_0, 0}}, - {3555, {wxLocale, new_2, 2}}, - {3556, {wxLocale, destruct, 0}}, - {3558, {wxLocale, init, 1}}, - {3559, {wxLocale, addCatalog_1, 1}}, - {3560, {wxLocale, addCatalog_3, 3}}, - {3561, {wxLocale, addCatalogLookupPathPrefix, 1}}, - {3562, {wxLocale, getCanonicalName, 0}}, - {3563, {wxLocale, getLanguage, 0}}, - {3564, {wxLocale, getLanguageName, 1}}, - {3565, {wxLocale, getLocale, 0}}, - {3566, {wxLocale, getName, 0}}, - {3567, {wxLocale, getString_2, 2}}, - {3568, {wxLocale, getString_4, 4}}, - {3569, {wxLocale, getHeaderValue, 2}}, - {3570, {wxLocale, getSysName, 0}}, - {3571, {wxLocale, getSystemEncoding, 0}}, - {3572, {wxLocale, getSystemEncodingName, 0}}, - {3573, {wxLocale, getSystemLanguage, 0}}, - {3574, {wxLocale, isLoaded, 1}}, - {3575, {wxLocale, isOk, 0}}, - {3576, {wxActivateEvent, getActive, 0}}, - {3578, {wxPopupWindow, new_2, 2}}, - {3579, {wxPopupWindow, new_0, 0}}, - {3581, {wxPopupWindow, destruct, 0}}, - {3582, {wxPopupWindow, create, 2}}, - {3583, {wxPopupWindow, position, 2}}, - {3584, {wxPopupTransientWindow, new_0, 0}}, - {3585, {wxPopupTransientWindow, new_2, 2}}, - {3586, {wxPopupTransientWindow, destruct, 0}}, - {3587, {wxPopupTransientWindow, popup, 1}}, - {3588, {wxPopupTransientWindow, dismiss, 0}}, - {3589, {wxOverlay, new, 0}}, - {3590, {wxOverlay, destruct, 0}}, - {3591, {wxOverlay, reset, 0}}, - {3592, {wxDCOverlay, new_6, 6}}, - {3593, {wxDCOverlay, new_2, 2}}, - {3594, {wxDCOverlay, destruct, 0}}, - {3595, {wxDCOverlay, clear, 0}}, - {3596, {wxDropFilesEvent, getPosition, 0}}, - {3597, {wxDropFilesEvent, getNumberOfFiles, 0}}, - {3598, {wxDropFilesEvent, getFiles, 0}}, + {289, {wxWindow, getContentScaleFactor, 0}}, + {290, {wxTopLevelWindow, getIcon, 0}}, + {291, {wxTopLevelWindow, getIcons, 0}}, + {292, {wxTopLevelWindow, getTitle, 0}}, + {293, {wxTopLevelWindow, isActive, 0}}, + {294, {wxTopLevelWindow, iconize, 1}}, + {295, {wxTopLevelWindow, isFullScreen, 0}}, + {296, {wxTopLevelWindow, isIconized, 0}}, + {297, {wxTopLevelWindow, isMaximized, 0}}, + {298, {wxTopLevelWindow, maximize, 1}}, + {299, {wxTopLevelWindow, requestUserAttention, 1}}, + {300, {wxTopLevelWindow, setIcon, 1}}, + {301, {wxTopLevelWindow, setIcons, 1}}, + {302, {wxTopLevelWindow, centerOnScreen, 1}}, + {303, {wxTopLevelWindow, centreOnScreen, 1}}, + {305, {wxTopLevelWindow, setShape, 1}}, + {306, {wxTopLevelWindow, setTitle, 1}}, + {307, {wxTopLevelWindow, showFullScreen, 2}}, + {309, {wxFrame, new_4, 4}}, + {310, {wxFrame, new_0, 0}}, + {312, {wxFrame, destruct, 0}}, + {313, {wxFrame, create, 4}}, + {314, {wxFrame, createStatusBar, 1}}, + {315, {wxFrame, createToolBar, 1}}, + {316, {wxFrame, getClientAreaOrigin, 0}}, + {317, {wxFrame, getMenuBar, 0}}, + {318, {wxFrame, getStatusBar, 0}}, + {319, {wxFrame, getStatusBarPane, 0}}, + {320, {wxFrame, getToolBar, 0}}, + {321, {wxFrame, processCommand, 1}}, + {322, {wxFrame, sendSizeEvent, 0}}, + {323, {wxFrame, setMenuBar, 1}}, + {324, {wxFrame, setStatusBar, 1}}, + {325, {wxFrame, setStatusBarPane, 1}}, + {326, {wxFrame, setStatusText, 2}}, + {327, {wxFrame, setStatusWidths, 2}}, + {328, {wxFrame, setToolBar, 1}}, + {329, {wxMiniFrame, new_0, 0}}, + {330, {wxMiniFrame, new_4, 4}}, + {331, {wxMiniFrame, create, 4}}, + {332, {wxMiniFrame, 'Destroy', undefined}}, + {333, {wxSplashScreen, new_0, 0}}, + {334, {wxSplashScreen, new_6, 6}}, + {335, {wxSplashScreen, destruct, 0}}, + {336, {wxSplashScreen, getSplashStyle, 0}}, + {337, {wxSplashScreen, getTimeout, 0}}, + {338, {wxPanel, new_0, 0}}, + {339, {wxPanel, new_6, 6}}, + {340, {wxPanel, new_2, 2}}, + {341, {wxPanel, destruct, 0}}, + {342, {wxPanel, initDialog, 0}}, + {343, {wxPanel, setFocusIgnoringChildren, 0}}, + {344, {wxScrolledWindow, new_0, 0}}, + {345, {wxScrolledWindow, new_2, 2}}, + {346, {wxScrolledWindow, destruct, 0}}, + {347, {wxScrolledWindow, calcScrolledPosition_4, 4}}, + {348, {wxScrolledWindow, calcScrolledPosition_1, 1}}, + {349, {wxScrolledWindow, calcUnscrolledPosition_4, 4}}, + {350, {wxScrolledWindow, calcUnscrolledPosition_1, 1}}, + {351, {wxScrolledWindow, enableScrolling, 2}}, + {352, {wxScrolledWindow, getScrollPixelsPerUnit, 2}}, + {353, {wxScrolledWindow, getViewStart, 2}}, + {354, {wxScrolledWindow, doPrepareDC, 1}}, + {355, {wxScrolledWindow, prepareDC, 1}}, + {356, {wxScrolledWindow, scroll, 2}}, + {357, {wxScrolledWindow, setScrollbars, 5}}, + {358, {wxScrolledWindow, setScrollRate, 2}}, + {359, {wxScrolledWindow, setTargetWindow, 1}}, + {360, {wxSashWindow, new_0, 0}}, + {361, {wxSashWindow, new_2, 2}}, + {362, {wxSashWindow, destruct, 0}}, + {363, {wxSashWindow, getSashVisible, 1}}, + {364, {wxSashWindow, getMaximumSizeX, 0}}, + {365, {wxSashWindow, getMaximumSizeY, 0}}, + {366, {wxSashWindow, getMinimumSizeX, 0}}, + {367, {wxSashWindow, getMinimumSizeY, 0}}, + {368, {wxSashWindow, setMaximumSizeX, 1}}, + {369, {wxSashWindow, setMaximumSizeY, 1}}, + {370, {wxSashWindow, setMinimumSizeX, 1}}, + {371, {wxSashWindow, setMinimumSizeY, 1}}, + {372, {wxSashWindow, setSashVisible, 2}}, + {373, {wxSashLayoutWindow, new_0, 0}}, + {374, {wxSashLayoutWindow, new_2, 2}}, + {375, {wxSashLayoutWindow, create, 2}}, + {376, {wxSashLayoutWindow, getAlignment, 0}}, + {377, {wxSashLayoutWindow, getOrientation, 0}}, + {378, {wxSashLayoutWindow, setAlignment, 1}}, + {379, {wxSashLayoutWindow, setDefaultSize, 1}}, + {380, {wxSashLayoutWindow, setOrientation, 1}}, + {381, {wxSashLayoutWindow, 'Destroy', undefined}}, + {382, {wxGrid, new_0, 0}}, + {383, {wxGrid, new_3, 3}}, + {384, {wxGrid, new_4, 4}}, + {385, {wxGrid, destruct, 0}}, + {386, {wxGrid, appendCols, 1}}, + {387, {wxGrid, appendRows, 1}}, + {388, {wxGrid, autoSize, 0}}, + {389, {wxGrid, autoSizeColumn, 2}}, + {390, {wxGrid, autoSizeColumns, 1}}, + {391, {wxGrid, autoSizeRow, 2}}, + {392, {wxGrid, autoSizeRows, 1}}, + {393, {wxGrid, beginBatch, 0}}, + {394, {wxGrid, blockToDeviceRect, 2}}, + {395, {wxGrid, canDragColSize, 0}}, + {396, {wxGrid, canDragRowSize, 0}}, + {397, {wxGrid, canDragGridSize, 0}}, + {398, {wxGrid, canEnableCellControl, 0}}, + {399, {wxGrid, cellToRect_2, 2}}, + {400, {wxGrid, cellToRect_1, 1}}, + {401, {wxGrid, clearGrid, 0}}, + {402, {wxGrid, clearSelection, 0}}, + {403, {wxGrid, createGrid, 3}}, + {404, {wxGrid, deleteCols, 1}}, + {405, {wxGrid, deleteRows, 1}}, + {406, {wxGrid, disableCellEditControl, 0}}, + {407, {wxGrid, disableDragColSize, 0}}, + {408, {wxGrid, disableDragGridSize, 0}}, + {409, {wxGrid, disableDragRowSize, 0}}, + {410, {wxGrid, enableCellEditControl, 1}}, + {411, {wxGrid, enableDragColSize, 1}}, + {412, {wxGrid, enableDragGridSize, 1}}, + {413, {wxGrid, enableDragRowSize, 1}}, + {414, {wxGrid, enableEditing, 1}}, + {415, {wxGrid, enableGridLines, 1}}, + {416, {wxGrid, endBatch, 0}}, + {417, {wxGrid, fit, 0}}, + {418, {wxGrid, forceRefresh, 0}}, + {419, {wxGrid, getBatchCount, 0}}, + {420, {wxGrid, getCellAlignment, 4}}, + {421, {wxGrid, getCellBackgroundColour, 2}}, + {422, {wxGrid, getCellEditor, 2}}, + {423, {wxGrid, getCellFont, 2}}, + {424, {wxGrid, getCellRenderer, 2}}, + {425, {wxGrid, getCellTextColour, 2}}, + {426, {wxGrid, getCellValue_2, 2}}, + {427, {wxGrid, getCellValue_1, 1}}, + {428, {wxGrid, getColLabelAlignment, 2}}, + {429, {wxGrid, getColLabelSize, 0}}, + {430, {wxGrid, getColLabelValue, 1}}, + {431, {wxGrid, getColMinimalAcceptableWidth, 0}}, + {432, {wxGrid, getDefaultCellAlignment, 2}}, + {433, {wxGrid, getDefaultCellBackgroundColour, 0}}, + {434, {wxGrid, getDefaultCellFont, 0}}, + {435, {wxGrid, getDefaultCellTextColour, 0}}, + {436, {wxGrid, getDefaultColLabelSize, 0}}, + {437, {wxGrid, getDefaultColSize, 0}}, + {438, {wxGrid, getDefaultEditor, 0}}, + {439, {wxGrid, getDefaultEditorForCell_2, 2}}, + {440, {wxGrid, getDefaultEditorForCell_1, 1}}, + {441, {wxGrid, getDefaultEditorForType, 1}}, + {442, {wxGrid, getDefaultRenderer, 0}}, + {443, {wxGrid, getDefaultRendererForCell, 2}}, + {444, {wxGrid, getDefaultRendererForType, 1}}, + {445, {wxGrid, getDefaultRowLabelSize, 0}}, + {446, {wxGrid, getDefaultRowSize, 0}}, + {447, {wxGrid, getGridCursorCol, 0}}, + {448, {wxGrid, getGridCursorRow, 0}}, + {449, {wxGrid, getGridLineColour, 0}}, + {450, {wxGrid, gridLinesEnabled, 0}}, + {451, {wxGrid, getLabelBackgroundColour, 0}}, + {452, {wxGrid, getLabelFont, 0}}, + {453, {wxGrid, getLabelTextColour, 0}}, + {454, {wxGrid, getNumberCols, 0}}, + {455, {wxGrid, getNumberRows, 0}}, + {456, {wxGrid, getOrCreateCellAttr, 2}}, + {457, {wxGrid, getRowMinimalAcceptableHeight, 0}}, + {458, {wxGrid, getRowLabelAlignment, 2}}, + {459, {wxGrid, getRowLabelSize, 0}}, + {460, {wxGrid, getRowLabelValue, 1}}, + {461, {wxGrid, getRowSize, 1}}, + {462, {wxGrid, getScrollLineX, 0}}, + {463, {wxGrid, getScrollLineY, 0}}, + {464, {wxGrid, getSelectedCells, 0}}, + {465, {wxGrid, getSelectedCols, 0}}, + {466, {wxGrid, getSelectedRows, 0}}, + {467, {wxGrid, getSelectionBackground, 0}}, + {468, {wxGrid, getSelectionBlockTopLeft, 0}}, + {469, {wxGrid, getSelectionBlockBottomRight, 0}}, + {470, {wxGrid, getSelectionForeground, 0}}, + {471, {wxGrid, getViewWidth, 0}}, + {472, {wxGrid, getGridWindow, 0}}, + {473, {wxGrid, getGridRowLabelWindow, 0}}, + {474, {wxGrid, getGridColLabelWindow, 0}}, + {475, {wxGrid, getGridCornerLabelWindow, 0}}, + {476, {wxGrid, hideCellEditControl, 0}}, + {477, {wxGrid, insertCols, 1}}, + {478, {wxGrid, insertRows, 1}}, + {479, {wxGrid, isCellEditControlEnabled, 0}}, + {480, {wxGrid, isCurrentCellReadOnly, 0}}, + {481, {wxGrid, isEditable, 0}}, + {482, {wxGrid, isInSelection_2, 2}}, + {483, {wxGrid, isInSelection_1, 1}}, + {484, {wxGrid, isReadOnly, 2}}, + {485, {wxGrid, isSelection, 0}}, + {486, {wxGrid, isVisible_3, 3}}, + {487, {wxGrid, isVisible_2, 2}}, + {488, {wxGrid, makeCellVisible_2, 2}}, + {489, {wxGrid, makeCellVisible_1, 1}}, + {490, {wxGrid, moveCursorDown, 1}}, + {491, {wxGrid, moveCursorLeft, 1}}, + {492, {wxGrid, moveCursorRight, 1}}, + {493, {wxGrid, moveCursorUp, 1}}, + {494, {wxGrid, moveCursorDownBlock, 1}}, + {495, {wxGrid, moveCursorLeftBlock, 1}}, + {496, {wxGrid, moveCursorRightBlock, 1}}, + {497, {wxGrid, moveCursorUpBlock, 1}}, + {498, {wxGrid, movePageDown, 0}}, + {499, {wxGrid, movePageUp, 0}}, + {500, {wxGrid, registerDataType, 3}}, + {501, {wxGrid, saveEditControlValue, 0}}, + {502, {wxGrid, selectAll, 0}}, + {503, {wxGrid, selectBlock_5, 5}}, + {504, {wxGrid, selectBlock_3, 3}}, + {505, {wxGrid, selectCol, 2}}, + {506, {wxGrid, selectRow, 2}}, + {507, {wxGrid, setCellAlignment_4, 4}}, + {508, {wxGrid, setCellAlignment_3, 3}}, + {509, {wxGrid, setCellAlignment_1, 1}}, + {510, {wxGrid, setCellBackgroundColour_3_0, 3}}, + {511, {wxGrid, setCellBackgroundColour_1, 1}}, + {512, {wxGrid, setCellBackgroundColour_3_1, 3}}, + {513, {wxGrid, setCellEditor, 3}}, + {514, {wxGrid, setCellFont, 3}}, + {515, {wxGrid, setCellRenderer, 3}}, + {516, {wxGrid, setCellTextColour_3_0, 3}}, + {517, {wxGrid, setCellTextColour_3_1, 3}}, + {518, {wxGrid, setCellTextColour_1, 1}}, + {519, {wxGrid, setCellValue_3_0, 3}}, + {520, {wxGrid, setCellValue_2, 2}}, + {521, {wxGrid, setCellValue_3_1, 3}}, + {522, {wxGrid, setColAttr, 2}}, + {523, {wxGrid, setColFormatBool, 1}}, + {524, {wxGrid, setColFormatNumber, 1}}, + {525, {wxGrid, setColFormatFloat, 2}}, + {526, {wxGrid, setColFormatCustom, 2}}, + {527, {wxGrid, setColLabelAlignment, 2}}, + {528, {wxGrid, setColLabelSize, 1}}, + {529, {wxGrid, setColLabelValue, 2}}, + {530, {wxGrid, setColMinimalWidth, 2}}, + {531, {wxGrid, setColMinimalAcceptableWidth, 1}}, + {532, {wxGrid, setColSize, 2}}, + {533, {wxGrid, setDefaultCellAlignment, 2}}, + {534, {wxGrid, setDefaultCellBackgroundColour, 1}}, + {535, {wxGrid, setDefaultCellFont, 1}}, + {536, {wxGrid, setDefaultCellTextColour, 1}}, + {537, {wxGrid, setDefaultEditor, 1}}, + {538, {wxGrid, setDefaultRenderer, 1}}, + {539, {wxGrid, setDefaultColSize, 2}}, + {540, {wxGrid, setDefaultRowSize, 2}}, + {541, {wxGrid, setGridCursor, 2}}, + {542, {wxGrid, setGridLineColour, 1}}, + {543, {wxGrid, setLabelBackgroundColour, 1}}, + {544, {wxGrid, setLabelFont, 1}}, + {545, {wxGrid, setLabelTextColour, 1}}, + {546, {wxGrid, setMargins, 2}}, + {547, {wxGrid, setReadOnly, 3}}, + {548, {wxGrid, setRowAttr, 2}}, + {549, {wxGrid, setRowLabelAlignment, 2}}, + {550, {wxGrid, setRowLabelSize, 1}}, + {551, {wxGrid, setRowLabelValue, 2}}, + {552, {wxGrid, setRowMinimalHeight, 2}}, + {553, {wxGrid, setRowMinimalAcceptableHeight, 1}}, + {554, {wxGrid, setRowSize, 2}}, + {555, {wxGrid, setScrollLineX, 1}}, + {556, {wxGrid, setScrollLineY, 1}}, + {557, {wxGrid, setSelectionBackground, 1}}, + {558, {wxGrid, setSelectionForeground, 1}}, + {559, {wxGrid, setSelectionMode, 1}}, + {560, {wxGrid, showCellEditControl, 0}}, + {561, {wxGrid, xToCol, 2}}, + {562, {wxGrid, xToEdgeOfCol, 1}}, + {563, {wxGrid, yToEdgeOfRow, 1}}, + {564, {wxGrid, yToRow, 1}}, + {565, {wxGridCellRenderer, draw, 7}}, + {566, {wxGridCellRenderer, getBestSize, 5}}, + {567, {wxGridCellEditor, create, 3}}, + {568, {wxGridCellEditor, isCreated, 0}}, + {569, {wxGridCellEditor, setSize, 1}}, + {570, {wxGridCellEditor, show, 2}}, + {571, {wxGridCellEditor, paintBackground, 2}}, + {572, {wxGridCellEditor, beginEdit, 3}}, + {573, {wxGridCellEditor, endEdit, 3}}, + {574, {wxGridCellEditor, reset, 0}}, + {575, {wxGridCellEditor, startingKey, 1}}, + {576, {wxGridCellEditor, startingClick, 0}}, + {577, {wxGridCellEditor, handleReturn, 1}}, + {578, {wxGridCellBoolRenderer, new, 0}}, + {579, {wxGridCellBoolRenderer, 'Destroy', undefined}}, + {580, {wxGridCellBoolEditor, new, 0}}, + {581, {wxGridCellBoolEditor, isTrueValue, 1}}, + {582, {wxGridCellBoolEditor, useStringValues, 1}}, + {583, {wxGridCellBoolEditor, 'Destroy', undefined}}, + {584, {wxGridCellFloatRenderer, new, 1}}, + {585, {wxGridCellFloatRenderer, getPrecision, 0}}, + {586, {wxGridCellFloatRenderer, getWidth, 0}}, + {587, {wxGridCellFloatRenderer, setParameters, 1}}, + {588, {wxGridCellFloatRenderer, setPrecision, 1}}, + {589, {wxGridCellFloatRenderer, setWidth, 1}}, + {590, {wxGridCellFloatRenderer, 'Destroy', undefined}}, + {591, {wxGridCellFloatEditor, new, 1}}, + {592, {wxGridCellFloatEditor, setParameters, 1}}, + {593, {wxGridCellFloatEditor, 'Destroy', undefined}}, + {594, {wxGridCellStringRenderer, new, 0}}, + {595, {wxGridCellStringRenderer, 'Destroy', undefined}}, + {596, {wxGridCellTextEditor, new, 0}}, + {597, {wxGridCellTextEditor, setParameters, 1}}, + {598, {wxGridCellTextEditor, 'Destroy', undefined}}, + {600, {wxGridCellChoiceEditor, new, 2}}, + {601, {wxGridCellChoiceEditor, setParameters, 1}}, + {602, {wxGridCellChoiceEditor, 'Destroy', undefined}}, + {603, {wxGridCellNumberRenderer, new, 0}}, + {604, {wxGridCellNumberRenderer, 'Destroy', undefined}}, + {605, {wxGridCellNumberEditor, new, 1}}, + {606, {wxGridCellNumberEditor, getValue, 0}}, + {607, {wxGridCellNumberEditor, setParameters, 1}}, + {608, {wxGridCellNumberEditor, 'Destroy', undefined}}, + {609, {wxGridCellAttr, setTextColour, 1}}, + {610, {wxGridCellAttr, setBackgroundColour, 1}}, + {611, {wxGridCellAttr, setFont, 1}}, + {612, {wxGridCellAttr, setAlignment, 2}}, + {613, {wxGridCellAttr, setReadOnly, 1}}, + {614, {wxGridCellAttr, setRenderer, 1}}, + {615, {wxGridCellAttr, setEditor, 1}}, + {616, {wxGridCellAttr, hasTextColour, 0}}, + {617, {wxGridCellAttr, hasBackgroundColour, 0}}, + {618, {wxGridCellAttr, hasFont, 0}}, + {619, {wxGridCellAttr, hasAlignment, 0}}, + {620, {wxGridCellAttr, hasRenderer, 0}}, + {621, {wxGridCellAttr, hasEditor, 0}}, + {622, {wxGridCellAttr, getTextColour, 0}}, + {623, {wxGridCellAttr, getBackgroundColour, 0}}, + {624, {wxGridCellAttr, getFont, 0}}, + {625, {wxGridCellAttr, getAlignment, 2}}, + {626, {wxGridCellAttr, getRenderer, 3}}, + {627, {wxGridCellAttr, getEditor, 3}}, + {628, {wxGridCellAttr, isReadOnly, 0}}, + {629, {wxGridCellAttr, setDefAttr, 1}}, + {630, {wxDC, blit, 5}}, + {631, {wxDC, calcBoundingBox, 2}}, + {632, {wxDC, clear, 0}}, + {633, {wxDC, computeScaleAndOrigin, 0}}, + {634, {wxDC, crossHair, 1}}, + {635, {wxDC, destroyClippingRegion, 0}}, + {636, {wxDC, deviceToLogicalX, 1}}, + {637, {wxDC, deviceToLogicalXRel, 1}}, + {638, {wxDC, deviceToLogicalY, 1}}, + {639, {wxDC, deviceToLogicalYRel, 1}}, + {640, {wxDC, drawArc, 3}}, + {641, {wxDC, drawBitmap, 3}}, + {642, {wxDC, drawCheckMark, 1}}, + {643, {wxDC, drawCircle, 2}}, + {645, {wxDC, drawEllipse_2, 2}}, + {646, {wxDC, drawEllipse_1, 1}}, + {647, {wxDC, drawEllipticArc, 4}}, + {648, {wxDC, drawIcon, 2}}, + {649, {wxDC, drawLabel, 3}}, + {650, {wxDC, drawLine, 2}}, + {651, {wxDC, drawLines, 3}}, + {653, {wxDC, drawPolygon, 3}}, + {655, {wxDC, drawPoint, 1}}, + {657, {wxDC, drawRectangle_2, 2}}, + {658, {wxDC, drawRectangle_1, 1}}, + {659, {wxDC, drawRotatedText, 3}}, + {661, {wxDC, drawRoundedRectangle_3, 3}}, + {662, {wxDC, drawRoundedRectangle_2, 2}}, + {663, {wxDC, drawText, 2}}, + {664, {wxDC, endDoc, 0}}, + {665, {wxDC, endPage, 0}}, + {666, {wxDC, floodFill, 3}}, + {667, {wxDC, getBackground, 0}}, + {668, {wxDC, getBackgroundMode, 0}}, + {669, {wxDC, getBrush, 0}}, + {670, {wxDC, getCharHeight, 0}}, + {671, {wxDC, getCharWidth, 0}}, + {672, {wxDC, getClippingBox, 4}}, + {674, {wxDC, getFont, 0}}, + {675, {wxDC, getLayoutDirection, 0}}, + {676, {wxDC, getLogicalFunction, 0}}, + {677, {wxDC, getMapMode, 0}}, + {678, {wxDC, getMultiLineTextExtent_4, 4}}, + {679, {wxDC, getMultiLineTextExtent_1, 1}}, + {680, {wxDC, getPartialTextExtents, 2}}, + {681, {wxDC, getPen, 0}}, + {682, {wxDC, getPixel, 2}}, + {683, {wxDC, getPPI, 0}}, + {685, {wxDC, getSize, 0}}, + {687, {wxDC, getSizeMM, 0}}, + {688, {wxDC, getTextBackground, 0}}, + {689, {wxDC, getTextExtent_4, 4}}, + {690, {wxDC, getTextExtent_1, 1}}, + {692, {wxDC, getTextForeground, 0}}, + {693, {wxDC, getUserScale, 2}}, + {694, {wxDC, gradientFillConcentric_3, 3}}, + {695, {wxDC, gradientFillConcentric_4, 4}}, + {696, {wxDC, gradientFillLinear, 4}}, + {697, {wxDC, logicalToDeviceX, 1}}, + {698, {wxDC, logicalToDeviceXRel, 1}}, + {699, {wxDC, logicalToDeviceY, 1}}, + {700, {wxDC, logicalToDeviceYRel, 1}}, + {701, {wxDC, maxX, 0}}, + {702, {wxDC, maxY, 0}}, + {703, {wxDC, minX, 0}}, + {704, {wxDC, minY, 0}}, + {705, {wxDC, isOk, 0}}, + {706, {wxDC, resetBoundingBox, 0}}, + {707, {wxDC, setAxisOrientation, 2}}, + {708, {wxDC, setBackground, 1}}, + {709, {wxDC, setBackgroundMode, 1}}, + {710, {wxDC, setBrush, 1}}, + {712, {wxDC, setClippingRegion_2, 2}}, + {713, {wxDC, setClippingRegion_1_1, 1}}, + {714, {wxDC, setClippingRegion_1_0, 1}}, + {715, {wxDC, setDeviceOrigin, 2}}, + {716, {wxDC, setFont, 1}}, + {717, {wxDC, setLayoutDirection, 1}}, + {718, {wxDC, setLogicalFunction, 1}}, + {719, {wxDC, setMapMode, 1}}, + {720, {wxDC, setPalette, 1}}, + {721, {wxDC, setPen, 1}}, + {722, {wxDC, setTextBackground, 1}}, + {723, {wxDC, setTextForeground, 1}}, + {724, {wxDC, setUserScale, 2}}, + {725, {wxDC, startDoc, 1}}, + {726, {wxDC, startPage, 0}}, + {727, {wxMirrorDC, new, 2}}, + {728, {wxMirrorDC, 'Destroy', undefined}}, + {729, {wxScreenDC, new, 0}}, + {730, {wxScreenDC, destruct, 0}}, + {731, {wxPostScriptDC, new_0, 0}}, + {732, {wxPostScriptDC, new_1, 1}}, + {733, {wxPostScriptDC, destruct, 0}}, + {734, {wxPostScriptDC, setResolution, 1}}, + {735, {wxPostScriptDC, getResolution, 0}}, + {736, {wxWindowDC, new_0, 0}}, + {737, {wxWindowDC, new_1, 1}}, + {738, {wxWindowDC, destruct, 0}}, + {739, {wxClientDC, new_0, 0}}, + {740, {wxClientDC, new_1, 1}}, + {741, {wxClientDC, 'Destroy', undefined}}, + {742, {wxPaintDC, new_0, 0}}, + {743, {wxPaintDC, new_1, 1}}, + {744, {wxPaintDC, 'Destroy', undefined}}, + {746, {wxMemoryDC, new_1_0, 1}}, + {747, {wxMemoryDC, new_1_1, 1}}, + {748, {wxMemoryDC, new_0, 0}}, + {750, {wxMemoryDC, destruct, 0}}, + {751, {wxMemoryDC, selectObject, 1}}, + {752, {wxMemoryDC, selectObjectAsSource, 1}}, + {753, {wxBufferedDC, new_0, 0}}, + {754, {wxBufferedDC, new_2, 2}}, + {755, {wxBufferedDC, new_3, 3}}, + {756, {wxBufferedDC, destruct, 0}}, + {757, {wxBufferedDC, init_2, 2}}, + {758, {wxBufferedDC, init_3, 3}}, + {759, {wxBufferedPaintDC, new_3, 3}}, + {760, {wxBufferedPaintDC, new_2, 2}}, + {761, {wxBufferedPaintDC, destruct, 0}}, + {762, {wxGraphicsObject, destruct, 0}}, + {763, {wxGraphicsObject, getRenderer, 0}}, + {764, {wxGraphicsObject, isNull, 0}}, + {765, {wxGraphicsContext, destruct, 0}}, + {766, {wxGraphicsContext, create_1_1, 1}}, + {767, {wxGraphicsContext, create_1_0, 1}}, + {768, {wxGraphicsContext, create_0, 0}}, + {769, {wxGraphicsContext, createPen, 1}}, + {770, {wxGraphicsContext, createBrush, 1}}, + {771, {wxGraphicsContext, createRadialGradientBrush, 7}}, + {772, {wxGraphicsContext, createLinearGradientBrush, 6}}, + {773, {wxGraphicsContext, createFont, 2}}, + {774, {wxGraphicsContext, createMatrix, 1}}, + {775, {wxGraphicsContext, createPath, 0}}, + {776, {wxGraphicsContext, clip_1, 1}}, + {777, {wxGraphicsContext, clip_4, 4}}, + {778, {wxGraphicsContext, resetClip, 0}}, + {779, {wxGraphicsContext, drawBitmap, 5}}, + {780, {wxGraphicsContext, drawEllipse, 4}}, + {781, {wxGraphicsContext, drawIcon, 5}}, + {782, {wxGraphicsContext, drawLines, 3}}, + {783, {wxGraphicsContext, drawPath, 2}}, + {784, {wxGraphicsContext, drawRectangle, 4}}, + {785, {wxGraphicsContext, drawRoundedRectangle, 5}}, + {786, {wxGraphicsContext, drawText_3, 3}}, + {787, {wxGraphicsContext, drawText_4_0, 4}}, + {788, {wxGraphicsContext, drawText_4_1, 4}}, + {789, {wxGraphicsContext, drawText_5, 5}}, + {790, {wxGraphicsContext, fillPath, 2}}, + {791, {wxGraphicsContext, strokePath, 1}}, + {792, {wxGraphicsContext, getPartialTextExtents, 2}}, + {793, {wxGraphicsContext, getTextExtent, 5}}, + {794, {wxGraphicsContext, rotate, 1}}, + {795, {wxGraphicsContext, scale, 2}}, + {796, {wxGraphicsContext, translate, 2}}, + {797, {wxGraphicsContext, getTransform, 0}}, + {798, {wxGraphicsContext, setTransform, 1}}, + {799, {wxGraphicsContext, concatTransform, 1}}, + {800, {wxGraphicsContext, setBrush_1_1, 1}}, + {801, {wxGraphicsContext, setBrush_1_0, 1}}, + {802, {wxGraphicsContext, setFont_1, 1}}, + {803, {wxGraphicsContext, setFont_2, 2}}, + {804, {wxGraphicsContext, setPen_1_0, 1}}, + {805, {wxGraphicsContext, setPen_1_1, 1}}, + {806, {wxGraphicsContext, strokeLine, 4}}, + {807, {wxGraphicsContext, strokeLines, 2}}, + {809, {wxGraphicsMatrix, concat, 1}}, + {811, {wxGraphicsMatrix, get, 1}}, + {812, {wxGraphicsMatrix, invert, 0}}, + {813, {wxGraphicsMatrix, isEqual, 1}}, + {815, {wxGraphicsMatrix, isIdentity, 0}}, + {816, {wxGraphicsMatrix, rotate, 1}}, + {817, {wxGraphicsMatrix, scale, 2}}, + {818, {wxGraphicsMatrix, translate, 2}}, + {819, {wxGraphicsMatrix, set, 1}}, + {820, {wxGraphicsMatrix, transformPoint, 2}}, + {821, {wxGraphicsMatrix, transformDistance, 2}}, + {822, {wxGraphicsPath, moveToPoint_2, 2}}, + {823, {wxGraphicsPath, moveToPoint_1, 1}}, + {824, {wxGraphicsPath, addArc_6, 6}}, + {825, {wxGraphicsPath, addArc_5, 5}}, + {826, {wxGraphicsPath, addArcToPoint, 5}}, + {827, {wxGraphicsPath, addCircle, 3}}, + {828, {wxGraphicsPath, addCurveToPoint_6, 6}}, + {829, {wxGraphicsPath, addCurveToPoint_3, 3}}, + {830, {wxGraphicsPath, addEllipse, 4}}, + {831, {wxGraphicsPath, addLineToPoint_2, 2}}, + {832, {wxGraphicsPath, addLineToPoint_1, 1}}, + {833, {wxGraphicsPath, addPath, 1}}, + {834, {wxGraphicsPath, addQuadCurveToPoint, 4}}, + {835, {wxGraphicsPath, addRectangle, 4}}, + {836, {wxGraphicsPath, addRoundedRectangle, 5}}, + {837, {wxGraphicsPath, closeSubpath, 0}}, + {838, {wxGraphicsPath, contains_3, 3}}, + {839, {wxGraphicsPath, contains_2, 2}}, + {841, {wxGraphicsPath, getBox, 0}}, + {843, {wxGraphicsPath, getCurrentPoint, 0}}, + {844, {wxGraphicsPath, transform, 1}}, + {845, {wxGraphicsRenderer, getDefaultRenderer, 0}}, + {846, {wxGraphicsRenderer, createContext_1_1, 1}}, + {847, {wxGraphicsRenderer, createContext_1_0, 1}}, + {848, {wxGraphicsRenderer, createPen, 1}}, + {849, {wxGraphicsRenderer, createBrush, 1}}, + {850, {wxGraphicsRenderer, createLinearGradientBrush, 6}}, + {851, {wxGraphicsRenderer, createRadialGradientBrush, 7}}, + {852, {wxGraphicsRenderer, createFont, 2}}, + {853, {wxGraphicsRenderer, createMatrix, 1}}, + {854, {wxGraphicsRenderer, createPath, 0}}, + {856, {wxMenuBar, new_1, 1}}, + {858, {wxMenuBar, new_0, 0}}, + {860, {wxMenuBar, destruct, 0}}, + {861, {wxMenuBar, append, 2}}, + {862, {wxMenuBar, check, 2}}, + {863, {wxMenuBar, enable_2, 2}}, + {864, {wxMenuBar, enable_1, 1}}, + {865, {wxMenuBar, enableTop, 2}}, + {866, {wxMenuBar, findMenu, 1}}, + {867, {wxMenuBar, findMenuItem, 2}}, + {868, {wxMenuBar, findItem, 2}}, + {869, {wxMenuBar, getHelpString, 1}}, + {870, {wxMenuBar, getLabel_1, 1}}, + {871, {wxMenuBar, getLabel_0, 0}}, + {872, {wxMenuBar, getLabelTop, 1}}, + {873, {wxMenuBar, getMenu, 1}}, + {874, {wxMenuBar, getMenuCount, 0}}, + {875, {wxMenuBar, insert, 3}}, + {876, {wxMenuBar, isChecked, 1}}, + {877, {wxMenuBar, isEnabled_1, 1}}, + {878, {wxMenuBar, isEnabled_0, 0}}, + {879, {wxMenuBar, remove, 1}}, + {880, {wxMenuBar, replace, 3}}, + {881, {wxMenuBar, setHelpString, 2}}, + {882, {wxMenuBar, setLabel_2, 2}}, + {883, {wxMenuBar, setLabel_1, 1}}, + {884, {wxMenuBar, setLabelTop, 2}}, + {885, {wxControl, getLabel, 0}}, + {886, {wxControl, setLabel, 1}}, + {887, {wxControlWithItems, append_1, 1}}, + {888, {wxControlWithItems, append_2, 2}}, + {889, {wxControlWithItems, appendStrings_1, 1}}, + {890, {wxControlWithItems, clear, 0}}, + {891, {wxControlWithItems, delete, 1}}, + {892, {wxControlWithItems, findString, 2}}, + {893, {wxControlWithItems, getClientData, 1}}, + {894, {wxControlWithItems, setClientData, 2}}, + {895, {wxControlWithItems, getCount, 0}}, + {896, {wxControlWithItems, getSelection, 0}}, + {897, {wxControlWithItems, getString, 1}}, + {898, {wxControlWithItems, getStringSelection, 0}}, + {899, {wxControlWithItems, insert_2, 2}}, + {900, {wxControlWithItems, insert_3, 3}}, + {901, {wxControlWithItems, isEmpty, 0}}, + {902, {wxControlWithItems, select, 1}}, + {903, {wxControlWithItems, setSelection, 1}}, + {904, {wxControlWithItems, setString, 2}}, + {905, {wxControlWithItems, setStringSelection, 1}}, + {908, {wxMenu, new_2, 2}}, + {909, {wxMenu, new_1, 1}}, + {911, {wxMenu, destruct, 0}}, + {912, {wxMenu, append_3, 3}}, + {913, {wxMenu, append_1, 1}}, + {914, {wxMenu, append_4_0, 4}}, + {915, {wxMenu, append_4_1, 4}}, + {916, {wxMenu, appendCheckItem, 3}}, + {917, {wxMenu, appendRadioItem, 3}}, + {918, {wxMenu, appendSeparator, 0}}, + {919, {wxMenu, break, 0}}, + {920, {wxMenu, check, 2}}, + {921, {wxMenu, delete_1_0, 1}}, + {922, {wxMenu, delete_1_1, 1}}, + {923, {wxMenu, destroy_1_0, 1}}, + {924, {wxMenu, destroy_1_1, 1}}, + {925, {wxMenu, enable, 2}}, + {926, {wxMenu, findItem_1, 1}}, + {927, {wxMenu, findItem_2, 2}}, + {928, {wxMenu, findItemByPosition, 1}}, + {929, {wxMenu, getHelpString, 1}}, + {930, {wxMenu, getLabel, 1}}, + {931, {wxMenu, getMenuItemCount, 0}}, + {932, {wxMenu, getMenuItems, 0}}, + {934, {wxMenu, getTitle, 0}}, + {935, {wxMenu, insert_2, 2}}, + {936, {wxMenu, insert_3, 3}}, + {937, {wxMenu, insert_5_1, 5}}, + {938, {wxMenu, insert_5_0, 5}}, + {939, {wxMenu, insertCheckItem, 4}}, + {940, {wxMenu, insertRadioItem, 4}}, + {941, {wxMenu, insertSeparator, 1}}, + {942, {wxMenu, isChecked, 1}}, + {943, {wxMenu, isEnabled, 1}}, + {944, {wxMenu, prepend_1, 1}}, + {945, {wxMenu, prepend_2, 2}}, + {946, {wxMenu, prepend_4_1, 4}}, + {947, {wxMenu, prepend_4_0, 4}}, + {948, {wxMenu, prependCheckItem, 3}}, + {949, {wxMenu, prependRadioItem, 3}}, + {950, {wxMenu, prependSeparator, 0}}, + {951, {wxMenu, remove_1_0, 1}}, + {952, {wxMenu, remove_1_1, 1}}, + {953, {wxMenu, setHelpString, 2}}, + {954, {wxMenu, setLabel, 2}}, + {955, {wxMenu, setTitle, 1}}, + {956, {wxMenuItem, new, 1}}, + {958, {wxMenuItem, destruct, 0}}, + {959, {wxMenuItem, check, 1}}, + {960, {wxMenuItem, enable, 1}}, + {961, {wxMenuItem, getBitmap, 0}}, + {962, {wxMenuItem, getHelp, 0}}, + {963, {wxMenuItem, getId, 0}}, + {964, {wxMenuItem, getKind, 0}}, + {965, {wxMenuItem, getLabel, 0}}, + {966, {wxMenuItem, getLabelFromText, 1}}, + {967, {wxMenuItem, getMenu, 0}}, + {968, {wxMenuItem, getText, 0}}, + {969, {wxMenuItem, getSubMenu, 0}}, + {970, {wxMenuItem, isCheckable, 0}}, + {971, {wxMenuItem, isChecked, 0}}, + {972, {wxMenuItem, isEnabled, 0}}, + {973, {wxMenuItem, isSeparator, 0}}, + {974, {wxMenuItem, isSubMenu, 0}}, + {975, {wxMenuItem, setBitmap, 1}}, + {976, {wxMenuItem, setHelp, 1}}, + {977, {wxMenuItem, setMenu, 1}}, + {978, {wxMenuItem, setSubMenu, 1}}, + {979, {wxMenuItem, setText, 1}}, + {980, {wxToolBar, addControl, 1}}, + {981, {wxToolBar, addSeparator, 0}}, + {982, {wxToolBar, addTool_5, 5}}, + {983, {wxToolBar, addTool_4_0, 4}}, + {984, {wxToolBar, addTool_1, 1}}, + {985, {wxToolBar, addTool_4_1, 4}}, + {986, {wxToolBar, addTool_3, 3}}, + {987, {wxToolBar, addTool_6, 6}}, + {988, {wxToolBar, addCheckTool, 4}}, + {989, {wxToolBar, addRadioTool, 4}}, + {990, {wxToolBar, addStretchableSpace, 0}}, + {991, {wxToolBar, insertStretchableSpace, 1}}, + {992, {wxToolBar, deleteTool, 1}}, + {993, {wxToolBar, deleteToolByPos, 1}}, + {994, {wxToolBar, enableTool, 2}}, + {995, {wxToolBar, findById, 1}}, + {996, {wxToolBar, findControl, 1}}, + {997, {wxToolBar, findToolForPosition, 2}}, + {998, {wxToolBar, getToolSize, 0}}, + {999, {wxToolBar, getToolBitmapSize, 0}}, + {1000, {wxToolBar, getMargins, 0}}, + {1001, {wxToolBar, getToolEnabled, 1}}, + {1002, {wxToolBar, getToolLongHelp, 1}}, + {1003, {wxToolBar, getToolPacking, 0}}, + {1004, {wxToolBar, getToolPos, 1}}, + {1005, {wxToolBar, getToolSeparation, 0}}, + {1006, {wxToolBar, getToolShortHelp, 1}}, + {1007, {wxToolBar, getToolState, 1}}, + {1008, {wxToolBar, insertControl, 2}}, + {1009, {wxToolBar, insertSeparator, 1}}, + {1010, {wxToolBar, insertTool_5, 5}}, + {1011, {wxToolBar, insertTool_2, 2}}, + {1012, {wxToolBar, insertTool_4, 4}}, + {1013, {wxToolBar, realize, 0}}, + {1014, {wxToolBar, removeTool, 1}}, + {1015, {wxToolBar, setMargins, 2}}, + {1016, {wxToolBar, setToolBitmapSize, 1}}, + {1017, {wxToolBar, setToolLongHelp, 2}}, + {1018, {wxToolBar, setToolPacking, 1}}, + {1019, {wxToolBar, setToolShortHelp, 2}}, + {1020, {wxToolBar, setToolSeparation, 1}}, + {1021, {wxToolBar, toggleTool, 2}}, + {1023, {wxStatusBar, new_0, 0}}, + {1024, {wxStatusBar, new_2, 2}}, + {1026, {wxStatusBar, destruct, 0}}, + {1027, {wxStatusBar, create, 2}}, + {1028, {wxStatusBar, getFieldRect, 2}}, + {1029, {wxStatusBar, getFieldsCount, 0}}, + {1030, {wxStatusBar, getStatusText, 1}}, + {1031, {wxStatusBar, popStatusText, 1}}, + {1032, {wxStatusBar, pushStatusText, 2}}, + {1033, {wxStatusBar, setFieldsCount, 2}}, + {1034, {wxStatusBar, setMinHeight, 1}}, + {1035, {wxStatusBar, setStatusText, 2}}, + {1036, {wxStatusBar, setStatusWidths, 2}}, + {1037, {wxStatusBar, setStatusStyles, 2}}, + {1038, {wxBitmap, new_0, 0}}, + {1039, {wxBitmap, new_3, 3}}, + {1040, {wxBitmap, new_4, 4}}, + {1041, {wxBitmap, new_2_0, 2}}, + {1042, {wxBitmap, new_2_1, 2}}, + {1043, {wxBitmap, destruct, 0}}, + {1044, {wxBitmap, convertToImage, 0}}, + {1045, {wxBitmap, copyFromIcon, 1}}, + {1046, {wxBitmap, create, 3}}, + {1047, {wxBitmap, getDepth, 0}}, + {1048, {wxBitmap, getHeight, 0}}, + {1049, {wxBitmap, getPalette, 0}}, + {1050, {wxBitmap, getMask, 0}}, + {1051, {wxBitmap, getWidth, 0}}, + {1052, {wxBitmap, getSubBitmap, 1}}, + {1053, {wxBitmap, loadFile, 2}}, + {1054, {wxBitmap, ok, 0}}, + {1055, {wxBitmap, saveFile, 3}}, + {1056, {wxBitmap, setDepth, 1}}, + {1057, {wxBitmap, setHeight, 1}}, + {1058, {wxBitmap, setMask, 1}}, + {1059, {wxBitmap, setPalette, 1}}, + {1060, {wxBitmap, setWidth, 1}}, + {1061, {wxIcon, new_0, 0}}, + {1062, {wxIcon, new_2, 2}}, + {1063, {wxIcon, new_1, 1}}, + {1064, {wxIcon, copyFromBitmap, 1}}, + {1065, {wxIcon, 'Destroy', undefined}}, + {1066, {wxIconBundle, new_0, 0}}, + {1067, {wxIconBundle, new_2, 2}}, + {1068, {wxIconBundle, new_1_0, 1}}, + {1069, {wxIconBundle, new_1_1, 1}}, + {1070, {wxIconBundle, destruct, 0}}, + {1071, {wxIconBundle, addIcon_2, 2}}, + {1072, {wxIconBundle, addIcon_1, 1}}, + {1073, {wxIconBundle, getIcon_1_1, 1}}, + {1074, {wxIconBundle, getIcon_1_0, 1}}, + {1075, {wxCursor, new_0, 0}}, + {1076, {wxCursor, new_1_0, 1}}, + {1077, {wxCursor, new_1_1, 1}}, + {1078, {wxCursor, new_4, 4}}, + {1079, {wxCursor, destruct, 0}}, + {1080, {wxCursor, ok, 0}}, + {1081, {wxMask, new_0, 0}}, + {1082, {wxMask, new_2_1, 2}}, + {1083, {wxMask, new_2_0, 2}}, + {1084, {wxMask, new_1, 1}}, + {1085, {wxMask, destruct, 0}}, + {1086, {wxMask, create_2_1, 2}}, + {1087, {wxMask, create_2_0, 2}}, + {1088, {wxMask, create_1, 1}}, + {1089, {wxImage, new_0, 0}}, + {1090, {wxImage, new_3_0, 3}}, + {1091, {wxImage, new_4, 4}}, + {1092, {wxImage, new_5, 5}}, + {1093, {wxImage, new_2, 2}}, + {1094, {wxImage, new_3_1, 3}}, + {1095, {wxImage, blur, 1}}, + {1096, {wxImage, blurHorizontal, 1}}, + {1097, {wxImage, blurVertical, 1}}, + {1098, {wxImage, convertAlphaToMask, 1}}, + {1099, {wxImage, convertToGreyscale, 1}}, + {1100, {wxImage, convertToMono, 3}}, + {1101, {wxImage, copy, 0}}, + {1102, {wxImage, create_3, 3}}, + {1103, {wxImage, create_4, 4}}, + {1104, {wxImage, create_5, 5}}, + {1105, {wxImage, 'Destroy', 0}}, + {1106, {wxImage, findFirstUnusedColour, 4}}, + {1107, {wxImage, getImageExtWildcard, 0}}, + {1108, {wxImage, getAlpha_2, 2}}, + {1109, {wxImage, getAlpha_0, 0}}, + {1110, {wxImage, getBlue, 2}}, + {1111, {wxImage, getData, 0}}, + {1112, {wxImage, getGreen, 2}}, + {1113, {wxImage, getImageCount, 2}}, + {1114, {wxImage, getHeight, 0}}, + {1115, {wxImage, getMaskBlue, 0}}, + {1116, {wxImage, getMaskGreen, 0}}, + {1117, {wxImage, getMaskRed, 0}}, + {1118, {wxImage, getOrFindMaskColour, 3}}, + {1119, {wxImage, getPalette, 0}}, + {1120, {wxImage, getRed, 2}}, + {1121, {wxImage, getSubImage, 1}}, + {1122, {wxImage, getWidth, 0}}, + {1123, {wxImage, hasAlpha, 0}}, + {1124, {wxImage, hasMask, 0}}, + {1125, {wxImage, getOption, 1}}, + {1126, {wxImage, getOptionInt, 1}}, + {1127, {wxImage, hasOption, 1}}, + {1128, {wxImage, initAlpha, 0}}, + {1129, {wxImage, initStandardHandlers, 0}}, + {1130, {wxImage, isTransparent, 3}}, + {1131, {wxImage, loadFile_2, 2}}, + {1132, {wxImage, loadFile_3, 3}}, + {1133, {wxImage, ok, 0}}, + {1134, {wxImage, removeHandler, 1}}, + {1135, {wxImage, mirror, 1}}, + {1136, {wxImage, replace, 6}}, + {1137, {wxImage, rescale, 3}}, + {1138, {wxImage, resize, 3}}, + {1139, {wxImage, rotate, 3}}, + {1140, {wxImage, rotateHue, 1}}, + {1141, {wxImage, rotate90, 1}}, + {1142, {wxImage, saveFile_1, 1}}, + {1143, {wxImage, saveFile_2_0, 2}}, + {1144, {wxImage, saveFile_2_1, 2}}, + {1145, {wxImage, scale, 3}}, + {1146, {wxImage, size, 3}}, + {1147, {wxImage, setAlpha_3, 3}}, + {1148, {wxImage, setAlpha_2, 2}}, + {1149, {wxImage, setData_2, 2}}, + {1150, {wxImage, setData_4, 4}}, + {1151, {wxImage, setMask, 1}}, + {1152, {wxImage, setMaskColour, 3}}, + {1153, {wxImage, setMaskFromImage, 4}}, + {1154, {wxImage, setOption_2_1, 2}}, + {1155, {wxImage, setOption_2_0, 2}}, + {1156, {wxImage, setPalette, 1}}, + {1157, {wxImage, setRGB_5, 5}}, + {1158, {wxImage, setRGB_4, 4}}, + {1159, {wxImage, 'Destroy', undefined}}, + {1160, {wxBrush, new_0, 0}}, + {1161, {wxBrush, new_2, 2}}, + {1162, {wxBrush, new_1, 1}}, + {1164, {wxBrush, destruct, 0}}, + {1165, {wxBrush, getColour, 0}}, + {1166, {wxBrush, getStipple, 0}}, + {1167, {wxBrush, getStyle, 0}}, + {1168, {wxBrush, isHatch, 0}}, + {1169, {wxBrush, isOk, 0}}, + {1170, {wxBrush, setColour_1, 1}}, + {1171, {wxBrush, setColour_3, 3}}, + {1172, {wxBrush, setStipple, 1}}, + {1173, {wxBrush, setStyle, 1}}, + {1174, {wxPen, new_0, 0}}, + {1175, {wxPen, new_2, 2}}, + {1176, {wxPen, destruct, 0}}, + {1177, {wxPen, getCap, 0}}, + {1178, {wxPen, getColour, 0}}, + {1179, {wxPen, getJoin, 0}}, + {1180, {wxPen, getStyle, 0}}, + {1181, {wxPen, getWidth, 0}}, + {1182, {wxPen, isOk, 0}}, + {1183, {wxPen, setCap, 1}}, + {1184, {wxPen, setColour_1, 1}}, + {1185, {wxPen, setColour_3, 3}}, + {1186, {wxPen, setJoin, 1}}, + {1187, {wxPen, setStyle, 1}}, + {1188, {wxPen, setWidth, 1}}, + {1189, {wxRegion, new_0, 0}}, + {1190, {wxRegion, new_4, 4}}, + {1191, {wxRegion, new_2, 2}}, + {1192, {wxRegion, new_1_1, 1}}, + {1194, {wxRegion, new_1_0, 1}}, + {1196, {wxRegion, destruct, 0}}, + {1197, {wxRegion, clear, 0}}, + {1198, {wxRegion, contains_2, 2}}, + {1199, {wxRegion, contains_1_0, 1}}, + {1200, {wxRegion, contains_4, 4}}, + {1201, {wxRegion, contains_1_1, 1}}, + {1202, {wxRegion, convertToBitmap, 0}}, + {1203, {wxRegion, getBox, 0}}, + {1204, {wxRegion, intersect_4, 4}}, + {1205, {wxRegion, intersect_1_1, 1}}, + {1206, {wxRegion, intersect_1_0, 1}}, + {1207, {wxRegion, isEmpty, 0}}, + {1208, {wxRegion, subtract_4, 4}}, + {1209, {wxRegion, subtract_1_1, 1}}, + {1210, {wxRegion, subtract_1_0, 1}}, + {1211, {wxRegion, offset_2, 2}}, + {1212, {wxRegion, offset_1, 1}}, + {1213, {wxRegion, union_4, 4}}, + {1214, {wxRegion, union_1_2, 1}}, + {1215, {wxRegion, union_1_1, 1}}, + {1216, {wxRegion, union_1_0, 1}}, + {1217, {wxRegion, union_3, 3}}, + {1218, {wxRegion, xor_4, 4}}, + {1219, {wxRegion, xor_1_1, 1}}, + {1220, {wxRegion, xor_1_0, 1}}, + {1221, {wxAcceleratorTable, new_0, 0}}, + {1222, {wxAcceleratorTable, new_2, 2}}, + {1223, {wxAcceleratorTable, destruct, 0}}, + {1224, {wxAcceleratorTable, ok, 0}}, + {1225, {wxAcceleratorEntry, new_1_0, 1}}, + {1226, {wxAcceleratorEntry, new_1_1, 1}}, + {1227, {wxAcceleratorEntry, getCommand, 0}}, + {1228, {wxAcceleratorEntry, getFlags, 0}}, + {1229, {wxAcceleratorEntry, getKeyCode, 0}}, + {1230, {wxAcceleratorEntry, set, 4}}, + {1231, {wxAcceleratorEntry, 'Destroy', undefined}}, + {1236, {wxCaret, new_3, 3}}, + {1237, {wxCaret, new_2, 2}}, + {1239, {wxCaret, destruct, 0}}, + {1240, {wxCaret, create_3, 3}}, + {1241, {wxCaret, create_2, 2}}, + {1242, {wxCaret, getBlinkTime, 0}}, + {1244, {wxCaret, getPosition, 0}}, + {1246, {wxCaret, getSize, 0}}, + {1247, {wxCaret, getWindow, 0}}, + {1248, {wxCaret, hide, 0}}, + {1249, {wxCaret, isOk, 0}}, + {1250, {wxCaret, isVisible, 0}}, + {1251, {wxCaret, move_2, 2}}, + {1252, {wxCaret, move_1, 1}}, + {1253, {wxCaret, setBlinkTime, 1}}, + {1254, {wxCaret, setSize_2, 2}}, + {1255, {wxCaret, setSize_1, 1}}, + {1256, {wxCaret, show, 1}}, + {1257, {wxSizer, add_2_1, 2}}, + {1258, {wxSizer, add_2_0, 2}}, + {1259, {wxSizer, add_3, 3}}, + {1260, {wxSizer, add_2_3, 2}}, + {1261, {wxSizer, add_2_2, 2}}, + {1262, {wxSizer, addSpacer, 1}}, + {1263, {wxSizer, addStretchSpacer, 1}}, + {1264, {wxSizer, calcMin, 0}}, + {1265, {wxSizer, clear, 1}}, + {1266, {wxSizer, detach_1_2, 1}}, + {1267, {wxSizer, detach_1_1, 1}}, + {1268, {wxSizer, detach_1_0, 1}}, + {1269, {wxSizer, fit, 1}}, + {1270, {wxSizer, fitInside, 1}}, + {1271, {wxSizer, getChildren, 0}}, + {1272, {wxSizer, getItem_2_1, 2}}, + {1273, {wxSizer, getItem_2_0, 2}}, + {1274, {wxSizer, getItem_1, 1}}, + {1275, {wxSizer, getSize, 0}}, + {1276, {wxSizer, getPosition, 0}}, + {1277, {wxSizer, getMinSize, 0}}, + {1278, {wxSizer, hide_2_0, 2}}, + {1279, {wxSizer, hide_2_1, 2}}, + {1280, {wxSizer, hide_1, 1}}, + {1281, {wxSizer, insert_3_1, 3}}, + {1282, {wxSizer, insert_3_0, 3}}, + {1283, {wxSizer, insert_4, 4}}, + {1284, {wxSizer, insert_3_3, 3}}, + {1285, {wxSizer, insert_3_2, 3}}, + {1286, {wxSizer, insert_2, 2}}, + {1287, {wxSizer, insertSpacer, 2}}, + {1288, {wxSizer, insertStretchSpacer, 2}}, + {1289, {wxSizer, isShown_1_2, 1}}, + {1290, {wxSizer, isShown_1_1, 1}}, + {1291, {wxSizer, isShown_1_0, 1}}, + {1292, {wxSizer, layout, 0}}, + {1293, {wxSizer, prepend_2_1, 2}}, + {1294, {wxSizer, prepend_2_0, 2}}, + {1295, {wxSizer, prepend_3, 3}}, + {1296, {wxSizer, prepend_2_3, 2}}, + {1297, {wxSizer, prepend_2_2, 2}}, + {1298, {wxSizer, prepend_1, 1}}, + {1299, {wxSizer, prependSpacer, 1}}, + {1300, {wxSizer, prependStretchSpacer, 1}}, + {1301, {wxSizer, recalcSizes, 0}}, + {1302, {wxSizer, remove_1_1, 1}}, + {1303, {wxSizer, remove_1_0, 1}}, + {1304, {wxSizer, replace_3_1, 3}}, + {1305, {wxSizer, replace_3_0, 3}}, + {1306, {wxSizer, replace_2, 2}}, + {1307, {wxSizer, setDimension, 4}}, + {1308, {wxSizer, setMinSize_2, 2}}, + {1309, {wxSizer, setMinSize_1, 1}}, + {1310, {wxSizer, setItemMinSize_3_2, 3}}, + {1311, {wxSizer, setItemMinSize_2_2, 2}}, + {1312, {wxSizer, setItemMinSize_3_1, 3}}, + {1313, {wxSizer, setItemMinSize_2_1, 2}}, + {1314, {wxSizer, setItemMinSize_3_0, 3}}, + {1315, {wxSizer, setItemMinSize_2_0, 2}}, + {1316, {wxSizer, setSizeHints, 1}}, + {1317, {wxSizer, setVirtualSizeHints, 1}}, + {1318, {wxSizer, show_2_2, 2}}, + {1319, {wxSizer, show_2_1, 2}}, + {1320, {wxSizer, show_2_0, 2}}, + {1321, {wxSizer, show_1, 1}}, + {1322, {wxSizerFlags, new, 1}}, + {1323, {wxSizerFlags, align, 1}}, + {1324, {wxSizerFlags, border_2, 2}}, + {1325, {wxSizerFlags, border_1, 1}}, + {1326, {wxSizerFlags, center, 0}}, + {1327, {wxSizerFlags, centre, 0}}, + {1328, {wxSizerFlags, expand, 0}}, + {1329, {wxSizerFlags, left, 0}}, + {1330, {wxSizerFlags, proportion, 1}}, + {1331, {wxSizerFlags, right, 0}}, + {1332, {wxSizerFlags, 'Destroy', undefined}}, + {1333, {wxSizerItem, new_5_1, 5}}, + {1334, {wxSizerItem, new_2_1, 2}}, + {1335, {wxSizerItem, new_5_0, 5}}, + {1336, {wxSizerItem, new_2_0, 2}}, + {1337, {wxSizerItem, new_6, 6}}, + {1338, {wxSizerItem, new_3, 3}}, + {1339, {wxSizerItem, new_0, 0}}, + {1340, {wxSizerItem, destruct, 0}}, + {1341, {wxSizerItem, calcMin, 0}}, + {1342, {wxSizerItem, deleteWindows, 0}}, + {1343, {wxSizerItem, detachSizer, 0}}, + {1344, {wxSizerItem, getBorder, 0}}, + {1345, {wxSizerItem, getFlag, 0}}, + {1346, {wxSizerItem, getMinSize, 0}}, + {1347, {wxSizerItem, getPosition, 0}}, + {1348, {wxSizerItem, getProportion, 0}}, + {1349, {wxSizerItem, getRatio, 0}}, + {1350, {wxSizerItem, getRect, 0}}, + {1351, {wxSizerItem, getSize, 0}}, + {1352, {wxSizerItem, getSizer, 0}}, + {1353, {wxSizerItem, getSpacer, 0}}, + {1354, {wxSizerItem, getUserData, 0}}, + {1355, {wxSizerItem, getWindow, 0}}, + {1356, {wxSizerItem, isSizer, 0}}, + {1357, {wxSizerItem, isShown, 0}}, + {1358, {wxSizerItem, isSpacer, 0}}, + {1359, {wxSizerItem, isWindow, 0}}, + {1360, {wxSizerItem, setBorder, 1}}, + {1361, {wxSizerItem, setDimension, 2}}, + {1362, {wxSizerItem, setFlag, 1}}, + {1363, {wxSizerItem, setInitSize, 2}}, + {1364, {wxSizerItem, setMinSize_1, 1}}, + {1365, {wxSizerItem, setMinSize_2, 2}}, + {1366, {wxSizerItem, setProportion, 1}}, + {1367, {wxSizerItem, setRatio_2, 2}}, + {1368, {wxSizerItem, setRatio_1_1, 1}}, + {1369, {wxSizerItem, setRatio_1_0, 1}}, + {1370, {wxSizerItem, setSizer, 1}}, + {1371, {wxSizerItem, setSpacer_1, 1}}, + {1372, {wxSizerItem, setSpacer_2, 2}}, + {1373, {wxSizerItem, setWindow, 1}}, + {1374, {wxSizerItem, show, 1}}, + {1375, {wxBoxSizer, new, 1}}, + {1376, {wxBoxSizer, getOrientation, 0}}, + {1377, {wxBoxSizer, 'Destroy', undefined}}, + {1378, {wxStaticBoxSizer, new_2, 2}}, + {1379, {wxStaticBoxSizer, new_3, 3}}, + {1380, {wxStaticBoxSizer, getStaticBox, 0}}, + {1381, {wxStaticBoxSizer, 'Destroy', undefined}}, + {1382, {wxGridSizer, new_4, 4}}, + {1383, {wxGridSizer, new_2, 2}}, + {1384, {wxGridSizer, getCols, 0}}, + {1385, {wxGridSizer, getHGap, 0}}, + {1386, {wxGridSizer, getRows, 0}}, + {1387, {wxGridSizer, getVGap, 0}}, + {1388, {wxGridSizer, setCols, 1}}, + {1389, {wxGridSizer, setHGap, 1}}, + {1390, {wxGridSizer, setRows, 1}}, + {1391, {wxGridSizer, setVGap, 1}}, + {1392, {wxGridSizer, 'Destroy', undefined}}, + {1393, {wxFlexGridSizer, new_4, 4}}, + {1394, {wxFlexGridSizer, new_2, 2}}, + {1395, {wxFlexGridSizer, addGrowableCol, 2}}, + {1396, {wxFlexGridSizer, addGrowableRow, 2}}, + {1397, {wxFlexGridSizer, getFlexibleDirection, 0}}, + {1398, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}}, + {1399, {wxFlexGridSizer, removeGrowableCol, 1}}, + {1400, {wxFlexGridSizer, removeGrowableRow, 1}}, + {1401, {wxFlexGridSizer, setFlexibleDirection, 1}}, + {1402, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}}, + {1403, {wxFlexGridSizer, 'Destroy', undefined}}, + {1404, {wxGridBagSizer, new, 1}}, + {1405, {wxGridBagSizer, add_3_2, 3}}, + {1406, {wxGridBagSizer, add_3_1, 3}}, + {1407, {wxGridBagSizer, add_4, 4}}, + {1408, {wxGridBagSizer, add_1_0, 1}}, + {1409, {wxGridBagSizer, add_2_1, 2}}, + {1410, {wxGridBagSizer, add_2_0, 2}}, + {1411, {wxGridBagSizer, add_3_0, 3}}, + {1412, {wxGridBagSizer, add_1_1, 1}}, + {1413, {wxGridBagSizer, calcMin, 0}}, + {1414, {wxGridBagSizer, checkForIntersection_2, 2}}, + {1415, {wxGridBagSizer, checkForIntersection_3, 3}}, + {1416, {wxGridBagSizer, findItem_1_1, 1}}, + {1417, {wxGridBagSizer, findItem_1_0, 1}}, + {1418, {wxGridBagSizer, findItemAtPoint, 1}}, + {1419, {wxGridBagSizer, findItemAtPosition, 1}}, + {1420, {wxGridBagSizer, findItemWithData, 1}}, + {1421, {wxGridBagSizer, getCellSize, 2}}, + {1422, {wxGridBagSizer, getEmptyCellSize, 0}}, + {1423, {wxGridBagSizer, getItemPosition_1_2, 1}}, + {1424, {wxGridBagSizer, getItemPosition_1_1, 1}}, + {1425, {wxGridBagSizer, getItemPosition_1_0, 1}}, + {1426, {wxGridBagSizer, getItemSpan_1_2, 1}}, + {1427, {wxGridBagSizer, getItemSpan_1_1, 1}}, + {1428, {wxGridBagSizer, getItemSpan_1_0, 1}}, + {1429, {wxGridBagSizer, setEmptyCellSize, 1}}, + {1430, {wxGridBagSizer, setItemPosition_2_2, 2}}, + {1431, {wxGridBagSizer, setItemPosition_2_1, 2}}, + {1432, {wxGridBagSizer, setItemPosition_2_0, 2}}, + {1433, {wxGridBagSizer, setItemSpan_2_2, 2}}, + {1434, {wxGridBagSizer, setItemSpan_2_1, 2}}, + {1435, {wxGridBagSizer, setItemSpan_2_0, 2}}, + {1436, {wxGridBagSizer, 'Destroy', undefined}}, + {1437, {wxStdDialogButtonSizer, new, 0}}, + {1438, {wxStdDialogButtonSizer, addButton, 1}}, + {1439, {wxStdDialogButtonSizer, realize, 0}}, + {1440, {wxStdDialogButtonSizer, setAffirmativeButton, 1}}, + {1441, {wxStdDialogButtonSizer, setCancelButton, 1}}, + {1442, {wxStdDialogButtonSizer, setNegativeButton, 1}}, + {1443, {wxStdDialogButtonSizer, 'Destroy', undefined}}, + {1444, {wxFont, new_0, 0}}, + {1445, {wxFont, new_1, 1}}, + {1446, {wxFont, new_5, 5}}, + {1448, {wxFont, destruct, 0}}, + {1449, {wxFont, isFixedWidth, 0}}, + {1450, {wxFont, getDefaultEncoding, 0}}, + {1451, {wxFont, getFaceName, 0}}, + {1452, {wxFont, getFamily, 0}}, + {1453, {wxFont, getNativeFontInfoDesc, 0}}, + {1454, {wxFont, getNativeFontInfoUserDesc, 0}}, + {1455, {wxFont, getPointSize, 0}}, + {1456, {wxFont, getStyle, 0}}, + {1457, {wxFont, getUnderlined, 0}}, + {1458, {wxFont, getWeight, 0}}, + {1459, {wxFont, ok, 0}}, + {1460, {wxFont, setDefaultEncoding, 1}}, + {1461, {wxFont, setFaceName, 1}}, + {1462, {wxFont, setFamily, 1}}, + {1463, {wxFont, setPointSize, 1}}, + {1464, {wxFont, setStyle, 1}}, + {1465, {wxFont, setUnderlined, 1}}, + {1466, {wxFont, setWeight, 1}}, + {1467, {wxToolTip, enable, 1}}, + {1468, {wxToolTip, setDelay, 1}}, + {1469, {wxToolTip, new, 1}}, + {1470, {wxToolTip, setTip, 1}}, + {1471, {wxToolTip, getTip, 0}}, + {1472, {wxToolTip, getWindow, 0}}, + {1473, {wxToolTip, 'Destroy', undefined}}, + {1475, {wxButton, new_3, 3}}, + {1476, {wxButton, new_0, 0}}, + {1477, {wxButton, destruct, 0}}, + {1478, {wxButton, create, 3}}, + {1479, {wxButton, getDefaultSize, 0}}, + {1480, {wxButton, setDefault, 0}}, + {1481, {wxButton, setLabel, 1}}, + {1483, {wxBitmapButton, new_4, 4}}, + {1484, {wxBitmapButton, new_0, 0}}, + {1485, {wxBitmapButton, create, 4}}, + {1486, {wxBitmapButton, getBitmapDisabled, 0}}, + {1488, {wxBitmapButton, getBitmapFocus, 0}}, + {1490, {wxBitmapButton, getBitmapLabel, 0}}, + {1492, {wxBitmapButton, getBitmapSelected, 0}}, + {1494, {wxBitmapButton, setBitmapDisabled, 1}}, + {1495, {wxBitmapButton, setBitmapFocus, 1}}, + {1496, {wxBitmapButton, setBitmapLabel, 1}}, + {1497, {wxBitmapButton, setBitmapSelected, 1}}, + {1498, {wxBitmapButton, 'Destroy', undefined}}, + {1499, {wxToggleButton, new_0, 0}}, + {1500, {wxToggleButton, new_4, 4}}, + {1501, {wxToggleButton, create, 4}}, + {1502, {wxToggleButton, getValue, 0}}, + {1503, {wxToggleButton, setValue, 1}}, + {1504, {wxToggleButton, 'Destroy', undefined}}, + {1505, {wxCalendarCtrl, new_0, 0}}, + {1506, {wxCalendarCtrl, new_3, 3}}, + {1507, {wxCalendarCtrl, create, 3}}, + {1508, {wxCalendarCtrl, destruct, 0}}, + {1509, {wxCalendarCtrl, setDate, 1}}, + {1510, {wxCalendarCtrl, getDate, 0}}, + {1511, {wxCalendarCtrl, enableYearChange, 1}}, + {1512, {wxCalendarCtrl, enableMonthChange, 1}}, + {1513, {wxCalendarCtrl, enableHolidayDisplay, 1}}, + {1514, {wxCalendarCtrl, setHeaderColours, 2}}, + {1515, {wxCalendarCtrl, getHeaderColourFg, 0}}, + {1516, {wxCalendarCtrl, getHeaderColourBg, 0}}, + {1517, {wxCalendarCtrl, setHighlightColours, 2}}, + {1518, {wxCalendarCtrl, getHighlightColourFg, 0}}, + {1519, {wxCalendarCtrl, getHighlightColourBg, 0}}, + {1520, {wxCalendarCtrl, setHolidayColours, 2}}, + {1521, {wxCalendarCtrl, getHolidayColourFg, 0}}, + {1522, {wxCalendarCtrl, getHolidayColourBg, 0}}, + {1523, {wxCalendarCtrl, getAttr, 1}}, + {1524, {wxCalendarCtrl, setAttr, 2}}, + {1525, {wxCalendarCtrl, setHoliday, 1}}, + {1526, {wxCalendarCtrl, resetAttr, 1}}, + {1527, {wxCalendarCtrl, hitTest, 2}}, + {1528, {wxCalendarDateAttr, new_0, 0}}, + {1529, {wxCalendarDateAttr, new_2_1, 2}}, + {1530, {wxCalendarDateAttr, new_2_0, 2}}, + {1531, {wxCalendarDateAttr, setTextColour, 1}}, + {1532, {wxCalendarDateAttr, setBackgroundColour, 1}}, + {1533, {wxCalendarDateAttr, setBorderColour, 1}}, + {1534, {wxCalendarDateAttr, setFont, 1}}, + {1535, {wxCalendarDateAttr, setBorder, 1}}, + {1536, {wxCalendarDateAttr, setHoliday, 1}}, + {1537, {wxCalendarDateAttr, hasTextColour, 0}}, + {1538, {wxCalendarDateAttr, hasBackgroundColour, 0}}, + {1539, {wxCalendarDateAttr, hasBorderColour, 0}}, + {1540, {wxCalendarDateAttr, hasFont, 0}}, + {1541, {wxCalendarDateAttr, hasBorder, 0}}, + {1542, {wxCalendarDateAttr, isHoliday, 0}}, + {1543, {wxCalendarDateAttr, getTextColour, 0}}, + {1544, {wxCalendarDateAttr, getBackgroundColour, 0}}, + {1545, {wxCalendarDateAttr, getBorderColour, 0}}, + {1546, {wxCalendarDateAttr, getFont, 0}}, + {1547, {wxCalendarDateAttr, getBorder, 0}}, + {1548, {wxCalendarDateAttr, 'Destroy', undefined}}, + {1550, {wxCheckBox, new_4, 4}}, + {1551, {wxCheckBox, new_0, 0}}, + {1552, {wxCheckBox, create, 4}}, + {1553, {wxCheckBox, getValue, 0}}, + {1554, {wxCheckBox, get3StateValue, 0}}, + {1555, {wxCheckBox, is3rdStateAllowedForUser, 0}}, + {1556, {wxCheckBox, is3State, 0}}, + {1557, {wxCheckBox, isChecked, 0}}, + {1558, {wxCheckBox, setValue, 1}}, + {1559, {wxCheckBox, set3StateValue, 1}}, + {1560, {wxCheckBox, 'Destroy', undefined}}, + {1561, {wxCheckListBox, new_0, 0}}, + {1563, {wxCheckListBox, new_3, 3}}, + {1564, {wxCheckListBox, check, 2}}, + {1565, {wxCheckListBox, isChecked, 1}}, + {1566, {wxCheckListBox, 'Destroy', undefined}}, + {1569, {wxChoice, new_3, 3}}, + {1570, {wxChoice, new_0, 0}}, + {1572, {wxChoice, destruct, 0}}, + {1574, {wxChoice, create, 6}}, + {1575, {wxChoice, delete, 1}}, + {1576, {wxChoice, getColumns, 0}}, + {1577, {wxChoice, setColumns, 1}}, + {1578, {wxComboBox, new_0, 0}}, + {1580, {wxComboBox, new_3, 3}}, + {1581, {wxComboBox, destruct, 0}}, + {1583, {wxComboBox, create, 7}}, + {1584, {wxComboBox, canCopy, 0}}, + {1585, {wxComboBox, canCut, 0}}, + {1586, {wxComboBox, canPaste, 0}}, + {1587, {wxComboBox, canRedo, 0}}, + {1588, {wxComboBox, canUndo, 0}}, + {1589, {wxComboBox, copy, 0}}, + {1590, {wxComboBox, cut, 0}}, + {1591, {wxComboBox, getInsertionPoint, 0}}, + {1592, {wxComboBox, getLastPosition, 0}}, + {1593, {wxComboBox, getValue, 0}}, + {1594, {wxComboBox, paste, 0}}, + {1595, {wxComboBox, redo, 0}}, + {1596, {wxComboBox, replace, 3}}, + {1597, {wxComboBox, remove, 2}}, + {1598, {wxComboBox, setInsertionPoint, 1}}, + {1599, {wxComboBox, setInsertionPointEnd, 0}}, + {1600, {wxComboBox, setSelection_1, 1}}, + {1601, {wxComboBox, setSelection_2, 2}}, + {1602, {wxComboBox, setValue, 1}}, + {1603, {wxComboBox, undo, 0}}, + {1604, {wxGauge, new_0, 0}}, + {1605, {wxGauge, new_4, 4}}, + {1606, {wxGauge, create, 4}}, + {1607, {wxGauge, getRange, 0}}, + {1608, {wxGauge, getValue, 0}}, + {1609, {wxGauge, isVertical, 0}}, + {1610, {wxGauge, setRange, 1}}, + {1611, {wxGauge, setValue, 1}}, + {1612, {wxGauge, pulse, 0}}, + {1613, {wxGauge, 'Destroy', undefined}}, + {1614, {wxGenericDirCtrl, new_0, 0}}, + {1615, {wxGenericDirCtrl, new_2, 2}}, + {1616, {wxGenericDirCtrl, destruct, 0}}, + {1617, {wxGenericDirCtrl, create, 2}}, + {1618, {wxGenericDirCtrl, init, 0}}, + {1619, {wxGenericDirCtrl, collapseTree, 0}}, + {1620, {wxGenericDirCtrl, expandPath, 1}}, + {1621, {wxGenericDirCtrl, getDefaultPath, 0}}, + {1622, {wxGenericDirCtrl, getPath, 0}}, + {1623, {wxGenericDirCtrl, getFilePath, 0}}, + {1624, {wxGenericDirCtrl, getFilter, 0}}, + {1625, {wxGenericDirCtrl, getFilterIndex, 0}}, + {1626, {wxGenericDirCtrl, getRootId, 0}}, + {1627, {wxGenericDirCtrl, getTreeCtrl, 0}}, + {1628, {wxGenericDirCtrl, reCreateTree, 0}}, + {1629, {wxGenericDirCtrl, setDefaultPath, 1}}, + {1630, {wxGenericDirCtrl, setFilter, 1}}, + {1631, {wxGenericDirCtrl, setFilterIndex, 1}}, + {1632, {wxGenericDirCtrl, setPath, 1}}, + {1634, {wxStaticBox, new_4, 4}}, + {1635, {wxStaticBox, new_0, 0}}, + {1636, {wxStaticBox, create, 4}}, + {1637, {wxStaticBox, 'Destroy', undefined}}, + {1639, {wxStaticLine, new_2, 2}}, + {1640, {wxStaticLine, new_0, 0}}, + {1641, {wxStaticLine, create, 2}}, + {1642, {wxStaticLine, isVertical, 0}}, + {1643, {wxStaticLine, getDefaultSize, 0}}, + {1644, {wxStaticLine, 'Destroy', undefined}}, + {1647, {wxListBox, new_3, 3}}, + {1648, {wxListBox, new_0, 0}}, + {1650, {wxListBox, destruct, 0}}, + {1652, {wxListBox, create, 6}}, + {1653, {wxListBox, deselect, 1}}, + {1654, {wxListBox, getSelections, 1}}, + {1655, {wxListBox, insertItems, 2}}, + {1656, {wxListBox, isSelected, 1}}, + {1657, {wxListBox, set, 1}}, + {1658, {wxListBox, hitTest, 1}}, + {1659, {wxListBox, setFirstItem_1_0, 1}}, + {1660, {wxListBox, setFirstItem_1_1, 1}}, + {1661, {wxListCtrl, new_0, 0}}, + {1662, {wxListCtrl, new_2, 2}}, + {1663, {wxListCtrl, arrange, 1}}, + {1664, {wxListCtrl, assignImageList, 2}}, + {1665, {wxListCtrl, clearAll, 0}}, + {1666, {wxListCtrl, create, 2}}, + {1667, {wxListCtrl, deleteAllItems, 0}}, + {1668, {wxListCtrl, deleteColumn, 1}}, + {1669, {wxListCtrl, deleteItem, 1}}, + {1670, {wxListCtrl, editLabel, 1}}, + {1671, {wxListCtrl, ensureVisible, 1}}, + {1672, {wxListCtrl, findItem_3_0, 3}}, + {1673, {wxListCtrl, findItem_3_1, 3}}, + {1674, {wxListCtrl, getColumn, 2}}, + {1675, {wxListCtrl, getColumnCount, 0}}, + {1676, {wxListCtrl, getColumnWidth, 1}}, + {1677, {wxListCtrl, getCountPerPage, 0}}, + {1678, {wxListCtrl, getEditControl, 0}}, + {1679, {wxListCtrl, getImageList, 1}}, + {1680, {wxListCtrl, getItem, 1}}, + {1681, {wxListCtrl, getItemBackgroundColour, 1}}, + {1682, {wxListCtrl, getItemCount, 0}}, + {1683, {wxListCtrl, getItemData, 1}}, + {1684, {wxListCtrl, getItemFont, 1}}, + {1685, {wxListCtrl, getItemPosition, 2}}, + {1686, {wxListCtrl, getItemRect, 3}}, + {1687, {wxListCtrl, getItemSpacing, 0}}, + {1688, {wxListCtrl, getItemState, 2}}, + {1689, {wxListCtrl, getItemText, 1}}, + {1690, {wxListCtrl, getItemTextColour, 1}}, + {1691, {wxListCtrl, getNextItem, 2}}, + {1692, {wxListCtrl, getSelectedItemCount, 0}}, + {1693, {wxListCtrl, getTextColour, 0}}, + {1694, {wxListCtrl, getTopItem, 0}}, + {1695, {wxListCtrl, getViewRect, 0}}, + {1696, {wxListCtrl, hitTest, 3}}, + {1697, {wxListCtrl, insertColumn_2, 2}}, + {1698, {wxListCtrl, insertColumn_3, 3}}, + {1699, {wxListCtrl, insertItem_1, 1}}, + {1700, {wxListCtrl, insertItem_2_1, 2}}, + {1701, {wxListCtrl, insertItem_2_0, 2}}, + {1702, {wxListCtrl, insertItem_3, 3}}, + {1703, {wxListCtrl, refreshItem, 1}}, + {1704, {wxListCtrl, refreshItems, 2}}, + {1705, {wxListCtrl, scrollList, 2}}, + {1706, {wxListCtrl, setBackgroundColour, 1}}, + {1707, {wxListCtrl, setColumn, 2}}, + {1708, {wxListCtrl, setColumnWidth, 2}}, + {1709, {wxListCtrl, setImageList, 2}}, + {1710, {wxListCtrl, setItem_1, 1}}, + {1711, {wxListCtrl, setItem_4, 4}}, + {1712, {wxListCtrl, setItemBackgroundColour, 2}}, + {1713, {wxListCtrl, setItemCount, 1}}, + {1714, {wxListCtrl, setItemData, 2}}, + {1715, {wxListCtrl, setItemFont, 2}}, + {1716, {wxListCtrl, setItemImage, 3}}, + {1717, {wxListCtrl, setItemColumnImage, 3}}, + {1718, {wxListCtrl, setItemPosition, 2}}, + {1719, {wxListCtrl, setItemState, 3}}, + {1720, {wxListCtrl, setItemText, 2}}, + {1721, {wxListCtrl, setItemTextColour, 2}}, + {1722, {wxListCtrl, setSingleStyle, 2}}, + {1723, {wxListCtrl, setTextColour, 1}}, + {1724, {wxListCtrl, setWindowStyleFlag, 1}}, + {1725, {wxListCtrl, sortItems, 2}}, + {1726, {wxListCtrl, 'Destroy', undefined}}, + {1727, {wxListView, clearColumnImage, 1}}, + {1728, {wxListView, focus, 1}}, + {1729, {wxListView, getFirstSelected, 0}}, + {1730, {wxListView, getFocusedItem, 0}}, + {1731, {wxListView, getNextSelected, 1}}, + {1732, {wxListView, isSelected, 1}}, + {1733, {wxListView, select, 2}}, + {1734, {wxListView, setColumnImage, 2}}, + {1735, {wxListItem, new_0, 0}}, + {1736, {wxListItem, new_1, 1}}, + {1737, {wxListItem, destruct, 0}}, + {1738, {wxListItem, clear, 0}}, + {1739, {wxListItem, getAlign, 0}}, + {1740, {wxListItem, getBackgroundColour, 0}}, + {1741, {wxListItem, getColumn, 0}}, + {1742, {wxListItem, getFont, 0}}, + {1743, {wxListItem, getId, 0}}, + {1744, {wxListItem, getImage, 0}}, + {1745, {wxListItem, getMask, 0}}, + {1746, {wxListItem, getState, 0}}, + {1747, {wxListItem, getText, 0}}, + {1748, {wxListItem, getTextColour, 0}}, + {1749, {wxListItem, getWidth, 0}}, + {1750, {wxListItem, setAlign, 1}}, + {1751, {wxListItem, setBackgroundColour, 1}}, + {1752, {wxListItem, setColumn, 1}}, + {1753, {wxListItem, setFont, 1}}, + {1754, {wxListItem, setId, 1}}, + {1755, {wxListItem, setImage, 1}}, + {1756, {wxListItem, setMask, 1}}, + {1757, {wxListItem, setState, 1}}, + {1758, {wxListItem, setStateMask, 1}}, + {1759, {wxListItem, setText, 1}}, + {1760, {wxListItem, setTextColour, 1}}, + {1761, {wxListItem, setWidth, 1}}, + {1762, {wxListItemAttr, new_0, 0}}, + {1763, {wxListItemAttr, new_3, 3}}, + {1764, {wxListItemAttr, getBackgroundColour, 0}}, + {1765, {wxListItemAttr, getFont, 0}}, + {1766, {wxListItemAttr, getTextColour, 0}}, + {1767, {wxListItemAttr, hasBackgroundColour, 0}}, + {1768, {wxListItemAttr, hasFont, 0}}, + {1769, {wxListItemAttr, hasTextColour, 0}}, + {1770, {wxListItemAttr, setBackgroundColour, 1}}, + {1771, {wxListItemAttr, setFont, 1}}, + {1772, {wxListItemAttr, setTextColour, 1}}, + {1773, {wxListItemAttr, 'Destroy', undefined}}, + {1774, {wxImageList, new_0, 0}}, + {1775, {wxImageList, new_3, 3}}, + {1776, {wxImageList, add_1, 1}}, + {1777, {wxImageList, add_2_0, 2}}, + {1778, {wxImageList, add_2_1, 2}}, + {1779, {wxImageList, create, 3}}, + {1781, {wxImageList, draw, 5}}, + {1782, {wxImageList, getBitmap, 1}}, + {1783, {wxImageList, getIcon, 1}}, + {1784, {wxImageList, getImageCount, 0}}, + {1785, {wxImageList, getSize, 3}}, + {1786, {wxImageList, remove, 1}}, + {1787, {wxImageList, removeAll, 0}}, + {1788, {wxImageList, replace_2, 2}}, + {1789, {wxImageList, replace_3, 3}}, + {1790, {wxImageList, 'Destroy', undefined}}, + {1791, {wxTextAttr, new_0, 0}}, + {1792, {wxTextAttr, new_2, 2}}, + {1793, {wxTextAttr, getAlignment, 0}}, + {1794, {wxTextAttr, getBackgroundColour, 0}}, + {1795, {wxTextAttr, getFont, 0}}, + {1796, {wxTextAttr, getLeftIndent, 0}}, + {1797, {wxTextAttr, getLeftSubIndent, 0}}, + {1798, {wxTextAttr, getRightIndent, 0}}, + {1799, {wxTextAttr, getTabs, 0}}, + {1800, {wxTextAttr, getTextColour, 0}}, + {1801, {wxTextAttr, hasBackgroundColour, 0}}, + {1802, {wxTextAttr, hasFont, 0}}, + {1803, {wxTextAttr, hasTextColour, 0}}, + {1804, {wxTextAttr, getFlags, 0}}, + {1805, {wxTextAttr, isDefault, 0}}, + {1806, {wxTextAttr, setAlignment, 1}}, + {1807, {wxTextAttr, setBackgroundColour, 1}}, + {1808, {wxTextAttr, setFlags, 1}}, + {1809, {wxTextAttr, setFont, 2}}, + {1810, {wxTextAttr, setLeftIndent, 2}}, + {1811, {wxTextAttr, setRightIndent, 1}}, + {1812, {wxTextAttr, setTabs, 1}}, + {1813, {wxTextAttr, setTextColour, 1}}, + {1814, {wxTextAttr, 'Destroy', undefined}}, + {1816, {wxTextCtrl, new_3, 3}}, + {1817, {wxTextCtrl, new_0, 0}}, + {1819, {wxTextCtrl, destruct, 0}}, + {1820, {wxTextCtrl, appendText, 1}}, + {1821, {wxTextCtrl, canCopy, 0}}, + {1822, {wxTextCtrl, canCut, 0}}, + {1823, {wxTextCtrl, canPaste, 0}}, + {1824, {wxTextCtrl, canRedo, 0}}, + {1825, {wxTextCtrl, canUndo, 0}}, + {1826, {wxTextCtrl, clear, 0}}, + {1827, {wxTextCtrl, copy, 0}}, + {1828, {wxTextCtrl, create, 3}}, + {1829, {wxTextCtrl, cut, 0}}, + {1830, {wxTextCtrl, discardEdits, 0}}, + {1831, {wxTextCtrl, changeValue, 1}}, + {1832, {wxTextCtrl, emulateKeyPress, 1}}, + {1833, {wxTextCtrl, getDefaultStyle, 0}}, + {1834, {wxTextCtrl, getInsertionPoint, 0}}, + {1835, {wxTextCtrl, getLastPosition, 0}}, + {1836, {wxTextCtrl, getLineLength, 1}}, + {1837, {wxTextCtrl, getLineText, 1}}, + {1838, {wxTextCtrl, getNumberOfLines, 0}}, + {1839, {wxTextCtrl, getRange, 2}}, + {1840, {wxTextCtrl, getSelection, 2}}, + {1841, {wxTextCtrl, getStringSelection, 0}}, + {1842, {wxTextCtrl, getStyle, 2}}, + {1843, {wxTextCtrl, getValue, 0}}, + {1844, {wxTextCtrl, isEditable, 0}}, + {1845, {wxTextCtrl, isModified, 0}}, + {1846, {wxTextCtrl, isMultiLine, 0}}, + {1847, {wxTextCtrl, isSingleLine, 0}}, + {1848, {wxTextCtrl, loadFile, 2}}, + {1849, {wxTextCtrl, markDirty, 0}}, + {1850, {wxTextCtrl, paste, 0}}, + {1851, {wxTextCtrl, positionToXY, 3}}, + {1852, {wxTextCtrl, redo, 0}}, + {1853, {wxTextCtrl, remove, 2}}, + {1854, {wxTextCtrl, replace, 3}}, + {1855, {wxTextCtrl, saveFile, 1}}, + {1856, {wxTextCtrl, setDefaultStyle, 1}}, + {1857, {wxTextCtrl, setEditable, 1}}, + {1858, {wxTextCtrl, setInsertionPoint, 1}}, + {1859, {wxTextCtrl, setInsertionPointEnd, 0}}, + {1861, {wxTextCtrl, setMaxLength, 1}}, + {1862, {wxTextCtrl, setSelection, 2}}, + {1863, {wxTextCtrl, setStyle, 3}}, + {1864, {wxTextCtrl, setValue, 1}}, + {1865, {wxTextCtrl, showPosition, 1}}, + {1866, {wxTextCtrl, undo, 0}}, + {1867, {wxTextCtrl, writeText, 1}}, + {1868, {wxTextCtrl, xYToPosition, 2}}, + {1871, {wxNotebook, new_0, 0}}, + {1872, {wxNotebook, new_3, 3}}, + {1873, {wxNotebook, destruct, 0}}, + {1874, {wxNotebook, addPage, 3}}, + {1875, {wxNotebook, advanceSelection, 1}}, + {1876, {wxNotebook, assignImageList, 1}}, + {1877, {wxNotebook, create, 3}}, + {1878, {wxNotebook, deleteAllPages, 0}}, + {1879, {wxNotebook, deletePage, 1}}, + {1880, {wxNotebook, removePage, 1}}, + {1881, {wxNotebook, getCurrentPage, 0}}, + {1882, {wxNotebook, getImageList, 0}}, + {1884, {wxNotebook, getPage, 1}}, + {1885, {wxNotebook, getPageCount, 0}}, + {1886, {wxNotebook, getPageImage, 1}}, + {1887, {wxNotebook, getPageText, 1}}, + {1888, {wxNotebook, getRowCount, 0}}, + {1889, {wxNotebook, getSelection, 0}}, + {1890, {wxNotebook, getThemeBackgroundColour, 0}}, + {1892, {wxNotebook, hitTest, 2}}, + {1894, {wxNotebook, insertPage, 4}}, + {1895, {wxNotebook, setImageList, 1}}, + {1896, {wxNotebook, setPadding, 1}}, + {1897, {wxNotebook, setPageSize, 1}}, + {1898, {wxNotebook, setPageImage, 2}}, + {1899, {wxNotebook, setPageText, 2}}, + {1900, {wxNotebook, setSelection, 1}}, + {1901, {wxNotebook, changeSelection, 1}}, + {1902, {wxChoicebook, new_0, 0}}, + {1903, {wxChoicebook, new_3, 3}}, + {1904, {wxChoicebook, addPage, 3}}, + {1905, {wxChoicebook, advanceSelection, 1}}, + {1906, {wxChoicebook, assignImageList, 1}}, + {1907, {wxChoicebook, create, 3}}, + {1908, {wxChoicebook, deleteAllPages, 0}}, + {1909, {wxChoicebook, deletePage, 1}}, + {1910, {wxChoicebook, removePage, 1}}, + {1911, {wxChoicebook, getCurrentPage, 0}}, + {1912, {wxChoicebook, getImageList, 0}}, + {1914, {wxChoicebook, getPage, 1}}, + {1915, {wxChoicebook, getPageCount, 0}}, + {1916, {wxChoicebook, getPageImage, 1}}, + {1917, {wxChoicebook, getPageText, 1}}, + {1918, {wxChoicebook, getSelection, 0}}, + {1919, {wxChoicebook, hitTest, 2}}, + {1920, {wxChoicebook, insertPage, 4}}, + {1921, {wxChoicebook, setImageList, 1}}, + {1922, {wxChoicebook, setPageSize, 1}}, + {1923, {wxChoicebook, setPageImage, 2}}, + {1924, {wxChoicebook, setPageText, 2}}, + {1925, {wxChoicebook, setSelection, 1}}, + {1926, {wxChoicebook, changeSelection, 1}}, + {1927, {wxChoicebook, 'Destroy', undefined}}, + {1928, {wxToolbook, new_0, 0}}, + {1929, {wxToolbook, new_3, 3}}, + {1930, {wxToolbook, addPage, 3}}, + {1931, {wxToolbook, advanceSelection, 1}}, + {1932, {wxToolbook, assignImageList, 1}}, + {1933, {wxToolbook, create, 3}}, + {1934, {wxToolbook, deleteAllPages, 0}}, + {1935, {wxToolbook, deletePage, 1}}, + {1936, {wxToolbook, removePage, 1}}, + {1937, {wxToolbook, getCurrentPage, 0}}, + {1938, {wxToolbook, getImageList, 0}}, + {1940, {wxToolbook, getPage, 1}}, + {1941, {wxToolbook, getPageCount, 0}}, + {1942, {wxToolbook, getPageImage, 1}}, + {1943, {wxToolbook, getPageText, 1}}, + {1944, {wxToolbook, getSelection, 0}}, + {1946, {wxToolbook, hitTest, 2}}, + {1947, {wxToolbook, insertPage, 4}}, + {1948, {wxToolbook, setImageList, 1}}, + {1949, {wxToolbook, setPageSize, 1}}, + {1950, {wxToolbook, setPageImage, 2}}, + {1951, {wxToolbook, setPageText, 2}}, + {1952, {wxToolbook, setSelection, 1}}, + {1953, {wxToolbook, changeSelection, 1}}, + {1954, {wxToolbook, 'Destroy', undefined}}, + {1955, {wxListbook, new_0, 0}}, + {1956, {wxListbook, new_3, 3}}, + {1957, {wxListbook, addPage, 3}}, + {1958, {wxListbook, advanceSelection, 1}}, + {1959, {wxListbook, assignImageList, 1}}, + {1960, {wxListbook, create, 3}}, + {1961, {wxListbook, deleteAllPages, 0}}, + {1962, {wxListbook, deletePage, 1}}, + {1963, {wxListbook, removePage, 1}}, + {1964, {wxListbook, getCurrentPage, 0}}, + {1965, {wxListbook, getImageList, 0}}, + {1967, {wxListbook, getPage, 1}}, + {1968, {wxListbook, getPageCount, 0}}, + {1969, {wxListbook, getPageImage, 1}}, + {1970, {wxListbook, getPageText, 1}}, + {1971, {wxListbook, getSelection, 0}}, + {1973, {wxListbook, hitTest, 2}}, + {1974, {wxListbook, insertPage, 4}}, + {1975, {wxListbook, setImageList, 1}}, + {1976, {wxListbook, setPageSize, 1}}, + {1977, {wxListbook, setPageImage, 2}}, + {1978, {wxListbook, setPageText, 2}}, + {1979, {wxListbook, setSelection, 1}}, + {1980, {wxListbook, changeSelection, 1}}, + {1981, {wxListbook, 'Destroy', undefined}}, + {1982, {wxTreebook, new_0, 0}}, + {1983, {wxTreebook, new_3, 3}}, + {1984, {wxTreebook, addPage, 3}}, + {1985, {wxTreebook, advanceSelection, 1}}, + {1986, {wxTreebook, assignImageList, 1}}, + {1987, {wxTreebook, create, 3}}, + {1988, {wxTreebook, deleteAllPages, 0}}, + {1989, {wxTreebook, deletePage, 1}}, + {1990, {wxTreebook, removePage, 1}}, + {1991, {wxTreebook, getCurrentPage, 0}}, + {1992, {wxTreebook, getImageList, 0}}, + {1994, {wxTreebook, getPage, 1}}, + {1995, {wxTreebook, getPageCount, 0}}, + {1996, {wxTreebook, getPageImage, 1}}, + {1997, {wxTreebook, getPageText, 1}}, + {1998, {wxTreebook, getSelection, 0}}, + {1999, {wxTreebook, expandNode, 2}}, + {2000, {wxTreebook, isNodeExpanded, 1}}, + {2002, {wxTreebook, hitTest, 2}}, + {2003, {wxTreebook, insertPage, 4}}, + {2004, {wxTreebook, insertSubPage, 4}}, + {2005, {wxTreebook, setImageList, 1}}, + {2006, {wxTreebook, setPageSize, 1}}, + {2007, {wxTreebook, setPageImage, 2}}, + {2008, {wxTreebook, setPageText, 2}}, + {2009, {wxTreebook, setSelection, 1}}, + {2010, {wxTreebook, changeSelection, 1}}, + {2011, {wxTreebook, 'Destroy', undefined}}, + {2014, {wxTreeCtrl, new_2, 2}}, + {2015, {wxTreeCtrl, new_0, 0}}, + {2017, {wxTreeCtrl, destruct, 0}}, + {2018, {wxTreeCtrl, addRoot, 2}}, + {2019, {wxTreeCtrl, appendItem, 3}}, + {2020, {wxTreeCtrl, assignImageList, 1}}, + {2021, {wxTreeCtrl, assignStateImageList, 1}}, + {2022, {wxTreeCtrl, collapse, 1}}, + {2023, {wxTreeCtrl, collapseAndReset, 1}}, + {2024, {wxTreeCtrl, create, 2}}, + {2025, {wxTreeCtrl, delete, 1}}, + {2026, {wxTreeCtrl, deleteAllItems, 0}}, + {2027, {wxTreeCtrl, deleteChildren, 1}}, + {2028, {wxTreeCtrl, editLabel, 1}}, + {2029, {wxTreeCtrl, ensureVisible, 1}}, + {2030, {wxTreeCtrl, expand, 1}}, + {2031, {wxTreeCtrl, getBoundingRect, 3}}, + {2033, {wxTreeCtrl, getChildrenCount, 2}}, + {2034, {wxTreeCtrl, getCount, 0}}, + {2035, {wxTreeCtrl, getEditControl, 0}}, + {2036, {wxTreeCtrl, getFirstChild, 2}}, + {2037, {wxTreeCtrl, getNextChild, 2}}, + {2038, {wxTreeCtrl, getFirstVisibleItem, 0}}, + {2039, {wxTreeCtrl, getImageList, 0}}, + {2040, {wxTreeCtrl, getIndent, 0}}, + {2041, {wxTreeCtrl, getItemBackgroundColour, 1}}, + {2042, {wxTreeCtrl, getItemData, 1}}, + {2043, {wxTreeCtrl, getItemFont, 1}}, + {2044, {wxTreeCtrl, getItemImage_1, 1}}, + {2045, {wxTreeCtrl, getItemImage_2, 2}}, + {2046, {wxTreeCtrl, getItemText, 1}}, + {2047, {wxTreeCtrl, getItemTextColour, 1}}, + {2048, {wxTreeCtrl, getLastChild, 1}}, + {2049, {wxTreeCtrl, getNextSibling, 1}}, + {2050, {wxTreeCtrl, getNextVisible, 1}}, + {2051, {wxTreeCtrl, getItemParent, 1}}, + {2052, {wxTreeCtrl, getPrevSibling, 1}}, + {2053, {wxTreeCtrl, getPrevVisible, 1}}, + {2054, {wxTreeCtrl, getRootItem, 0}}, + {2055, {wxTreeCtrl, getSelection, 0}}, + {2056, {wxTreeCtrl, getSelections, 1}}, + {2057, {wxTreeCtrl, getStateImageList, 0}}, + {2058, {wxTreeCtrl, hitTest, 2}}, + {2060, {wxTreeCtrl, insertItem, 4}}, + {2061, {wxTreeCtrl, isBold, 1}}, + {2062, {wxTreeCtrl, isExpanded, 1}}, + {2063, {wxTreeCtrl, isSelected, 1}}, + {2064, {wxTreeCtrl, isVisible, 1}}, + {2065, {wxTreeCtrl, itemHasChildren, 1}}, + {2066, {wxTreeCtrl, isTreeItemIdOk, 1}}, + {2067, {wxTreeCtrl, prependItem, 3}}, + {2068, {wxTreeCtrl, scrollTo, 1}}, + {2069, {wxTreeCtrl, selectItem_1, 1}}, + {2070, {wxTreeCtrl, selectItem_2, 2}}, + {2071, {wxTreeCtrl, setIndent, 1}}, + {2072, {wxTreeCtrl, setImageList, 1}}, + {2073, {wxTreeCtrl, setItemBackgroundColour, 2}}, + {2074, {wxTreeCtrl, setItemBold, 2}}, + {2075, {wxTreeCtrl, setItemData, 2}}, + {2076, {wxTreeCtrl, setItemDropHighlight, 2}}, + {2077, {wxTreeCtrl, setItemFont, 2}}, + {2078, {wxTreeCtrl, setItemHasChildren, 2}}, + {2079, {wxTreeCtrl, setItemImage_2, 2}}, + {2080, {wxTreeCtrl, setItemImage_3, 3}}, + {2081, {wxTreeCtrl, setItemText, 2}}, + {2082, {wxTreeCtrl, setItemTextColour, 2}}, + {2083, {wxTreeCtrl, setStateImageList, 1}}, + {2084, {wxTreeCtrl, setWindowStyle, 1}}, + {2085, {wxTreeCtrl, sortChildren, 1}}, + {2086, {wxTreeCtrl, toggle, 1}}, + {2087, {wxTreeCtrl, toggleItemSelection, 1}}, + {2088, {wxTreeCtrl, unselect, 0}}, + {2089, {wxTreeCtrl, unselectAll, 0}}, + {2090, {wxTreeCtrl, unselectItem, 1}}, + {2091, {wxScrollBar, new_0, 0}}, + {2092, {wxScrollBar, new_3, 3}}, + {2093, {wxScrollBar, destruct, 0}}, + {2094, {wxScrollBar, create, 3}}, + {2095, {wxScrollBar, getRange, 0}}, + {2096, {wxScrollBar, getPageSize, 0}}, + {2097, {wxScrollBar, getThumbPosition, 0}}, + {2098, {wxScrollBar, getThumbSize, 0}}, + {2099, {wxScrollBar, setThumbPosition, 1}}, + {2100, {wxScrollBar, setScrollbar, 5}}, + {2102, {wxSpinButton, new_2, 2}}, + {2103, {wxSpinButton, new_0, 0}}, + {2104, {wxSpinButton, create, 2}}, + {2105, {wxSpinButton, getMax, 0}}, + {2106, {wxSpinButton, getMin, 0}}, + {2107, {wxSpinButton, getValue, 0}}, + {2108, {wxSpinButton, setRange, 2}}, + {2109, {wxSpinButton, setValue, 1}}, + {2110, {wxSpinButton, 'Destroy', undefined}}, + {2111, {wxSpinCtrl, new_0, 0}}, + {2112, {wxSpinCtrl, new_2, 2}}, + {2114, {wxSpinCtrl, create, 2}}, + {2117, {wxSpinCtrl, setValue_1_1, 1}}, + {2118, {wxSpinCtrl, setValue_1_0, 1}}, + {2120, {wxSpinCtrl, getValue, 0}}, + {2122, {wxSpinCtrl, setRange, 2}}, + {2123, {wxSpinCtrl, setSelection, 2}}, + {2125, {wxSpinCtrl, getMin, 0}}, + {2127, {wxSpinCtrl, getMax, 0}}, + {2128, {wxSpinCtrl, 'Destroy', undefined}}, + {2129, {wxStaticText, new_0, 0}}, + {2130, {wxStaticText, new_4, 4}}, + {2131, {wxStaticText, create, 4}}, + {2132, {wxStaticText, getLabel, 0}}, + {2133, {wxStaticText, setLabel, 1}}, + {2134, {wxStaticText, wrap, 1}}, + {2135, {wxStaticText, 'Destroy', undefined}}, + {2136, {wxStaticBitmap, new_0, 0}}, + {2137, {wxStaticBitmap, new_4, 4}}, + {2138, {wxStaticBitmap, create, 4}}, + {2139, {wxStaticBitmap, getBitmap, 0}}, + {2140, {wxStaticBitmap, setBitmap, 1}}, + {2141, {wxStaticBitmap, 'Destroy', undefined}}, + {2142, {wxRadioBox, new, 7}}, + {2144, {wxRadioBox, destruct, 0}}, + {2145, {wxRadioBox, create, 7}}, + {2146, {wxRadioBox, enable_2, 2}}, + {2147, {wxRadioBox, enable_1, 1}}, + {2148, {wxRadioBox, getSelection, 0}}, + {2149, {wxRadioBox, getString, 1}}, + {2150, {wxRadioBox, setSelection, 1}}, + {2151, {wxRadioBox, show_2, 2}}, + {2152, {wxRadioBox, show_1, 1}}, + {2153, {wxRadioBox, getColumnCount, 0}}, + {2154, {wxRadioBox, getItemHelpText, 1}}, + {2155, {wxRadioBox, getItemToolTip, 1}}, + {2157, {wxRadioBox, getItemFromPoint, 1}}, + {2158, {wxRadioBox, getRowCount, 0}}, + {2159, {wxRadioBox, isItemEnabled, 1}}, + {2160, {wxRadioBox, isItemShown, 1}}, + {2161, {wxRadioBox, setItemHelpText, 2}}, + {2162, {wxRadioBox, setItemToolTip, 2}}, + {2163, {wxRadioButton, new_0, 0}}, + {2164, {wxRadioButton, new_4, 4}}, + {2165, {wxRadioButton, create, 4}}, + {2166, {wxRadioButton, getValue, 0}}, + {2167, {wxRadioButton, setValue, 1}}, + {2168, {wxRadioButton, 'Destroy', undefined}}, + {2170, {wxSlider, new_6, 6}}, + {2171, {wxSlider, new_0, 0}}, + {2172, {wxSlider, create, 6}}, + {2173, {wxSlider, getLineSize, 0}}, + {2174, {wxSlider, getMax, 0}}, + {2175, {wxSlider, getMin, 0}}, + {2176, {wxSlider, getPageSize, 0}}, + {2177, {wxSlider, getThumbLength, 0}}, + {2178, {wxSlider, getValue, 0}}, + {2179, {wxSlider, setLineSize, 1}}, + {2180, {wxSlider, setPageSize, 1}}, + {2181, {wxSlider, setRange, 2}}, + {2182, {wxSlider, setThumbLength, 1}}, + {2183, {wxSlider, setValue, 1}}, + {2184, {wxSlider, 'Destroy', undefined}}, + {2186, {wxDialog, new_4, 4}}, + {2187, {wxDialog, new_0, 0}}, + {2189, {wxDialog, destruct, 0}}, + {2190, {wxDialog, create, 4}}, + {2191, {wxDialog, createButtonSizer, 1}}, + {2192, {wxDialog, createStdDialogButtonSizer, 1}}, + {2193, {wxDialog, endModal, 1}}, + {2194, {wxDialog, getAffirmativeId, 0}}, + {2195, {wxDialog, getReturnCode, 0}}, + {2196, {wxDialog, isModal, 0}}, + {2197, {wxDialog, setAffirmativeId, 1}}, + {2198, {wxDialog, setReturnCode, 1}}, + {2199, {wxDialog, show, 1}}, + {2200, {wxDialog, showModal, 0}}, + {2201, {wxColourDialog, new_0, 0}}, + {2202, {wxColourDialog, new_2, 2}}, + {2203, {wxColourDialog, destruct, 0}}, + {2204, {wxColourDialog, create, 2}}, + {2205, {wxColourDialog, getColourData, 0}}, + {2206, {wxColourData, new_0, 0}}, + {2207, {wxColourData, new_1, 1}}, + {2208, {wxColourData, destruct, 0}}, + {2209, {wxColourData, getChooseFull, 0}}, + {2210, {wxColourData, getColour, 0}}, + {2212, {wxColourData, getCustomColour, 1}}, + {2213, {wxColourData, setChooseFull, 1}}, + {2214, {wxColourData, setColour, 1}}, + {2215, {wxColourData, setCustomColour, 2}}, + {2216, {wxPalette, new_0, 0}}, + {2217, {wxPalette, new_4, 4}}, + {2219, {wxPalette, destruct, 0}}, + {2220, {wxPalette, create, 4}}, + {2221, {wxPalette, getColoursCount, 0}}, + {2222, {wxPalette, getPixel, 3}}, + {2223, {wxPalette, getRGB, 4}}, + {2224, {wxPalette, isOk, 0}}, + {2228, {wxDirDialog, new, 2}}, + {2229, {wxDirDialog, destruct, 0}}, + {2230, {wxDirDialog, getPath, 0}}, + {2231, {wxDirDialog, getMessage, 0}}, + {2232, {wxDirDialog, setMessage, 1}}, + {2233, {wxDirDialog, setPath, 1}}, + {2237, {wxFileDialog, new, 2}}, + {2238, {wxFileDialog, destruct, 0}}, + {2239, {wxFileDialog, getDirectory, 0}}, + {2240, {wxFileDialog, getFilename, 0}}, + {2241, {wxFileDialog, getFilenames, 1}}, + {2242, {wxFileDialog, getFilterIndex, 0}}, + {2243, {wxFileDialog, getMessage, 0}}, + {2244, {wxFileDialog, getPath, 0}}, + {2245, {wxFileDialog, getPaths, 1}}, + {2246, {wxFileDialog, getWildcard, 0}}, + {2247, {wxFileDialog, setDirectory, 1}}, + {2248, {wxFileDialog, setFilename, 1}}, + {2249, {wxFileDialog, setFilterIndex, 1}}, + {2250, {wxFileDialog, setMessage, 1}}, + {2251, {wxFileDialog, setPath, 1}}, + {2252, {wxFileDialog, setWildcard, 1}}, + {2253, {wxPickerBase, setInternalMargin, 1}}, + {2254, {wxPickerBase, getInternalMargin, 0}}, + {2255, {wxPickerBase, setTextCtrlProportion, 1}}, + {2256, {wxPickerBase, setPickerCtrlProportion, 1}}, + {2257, {wxPickerBase, getTextCtrlProportion, 0}}, + {2258, {wxPickerBase, getPickerCtrlProportion, 0}}, + {2259, {wxPickerBase, hasTextCtrl, 0}}, + {2260, {wxPickerBase, getTextCtrl, 0}}, + {2261, {wxPickerBase, isTextCtrlGrowable, 0}}, + {2262, {wxPickerBase, setPickerCtrlGrowable, 1}}, + {2263, {wxPickerBase, setTextCtrlGrowable, 1}}, + {2264, {wxPickerBase, isPickerCtrlGrowable, 0}}, + {2265, {wxFilePickerCtrl, new_0, 0}}, + {2266, {wxFilePickerCtrl, new_3, 3}}, + {2267, {wxFilePickerCtrl, create, 3}}, + {2268, {wxFilePickerCtrl, getPath, 0}}, + {2269, {wxFilePickerCtrl, setPath, 1}}, + {2270, {wxFilePickerCtrl, 'Destroy', undefined}}, + {2271, {wxDirPickerCtrl, new_0, 0}}, + {2272, {wxDirPickerCtrl, new_3, 3}}, + {2273, {wxDirPickerCtrl, create, 3}}, + {2274, {wxDirPickerCtrl, getPath, 0}}, + {2275, {wxDirPickerCtrl, setPath, 1}}, + {2276, {wxDirPickerCtrl, 'Destroy', undefined}}, + {2277, {wxColourPickerCtrl, new_0, 0}}, + {2278, {wxColourPickerCtrl, new_3, 3}}, + {2279, {wxColourPickerCtrl, create, 3}}, + {2280, {wxColourPickerCtrl, getColour, 0}}, + {2281, {wxColourPickerCtrl, setColour_1_1, 1}}, + {2282, {wxColourPickerCtrl, setColour_1_0, 1}}, + {2283, {wxColourPickerCtrl, 'Destroy', undefined}}, + {2284, {wxDatePickerCtrl, new_0, 0}}, + {2285, {wxDatePickerCtrl, new_3, 3}}, + {2286, {wxDatePickerCtrl, getRange, 2}}, + {2287, {wxDatePickerCtrl, getValue, 0}}, + {2288, {wxDatePickerCtrl, setRange, 2}}, + {2289, {wxDatePickerCtrl, setValue, 1}}, + {2290, {wxDatePickerCtrl, 'Destroy', undefined}}, + {2291, {wxFontPickerCtrl, new_0, 0}}, + {2292, {wxFontPickerCtrl, new_3, 3}}, + {2293, {wxFontPickerCtrl, create, 3}}, + {2294, {wxFontPickerCtrl, getSelectedFont, 0}}, + {2295, {wxFontPickerCtrl, setSelectedFont, 1}}, + {2296, {wxFontPickerCtrl, getMaxPointSize, 0}}, + {2297, {wxFontPickerCtrl, setMaxPointSize, 1}}, + {2298, {wxFontPickerCtrl, 'Destroy', undefined}}, + {2301, {wxFindReplaceDialog, new_0, 0}}, + {2302, {wxFindReplaceDialog, new_4, 4}}, + {2303, {wxFindReplaceDialog, destruct, 0}}, + {2304, {wxFindReplaceDialog, create, 4}}, + {2305, {wxFindReplaceDialog, getData, 0}}, + {2306, {wxFindReplaceData, new_0, 0}}, + {2307, {wxFindReplaceData, new_1, 1}}, + {2308, {wxFindReplaceData, getFindString, 0}}, + {2309, {wxFindReplaceData, getReplaceString, 0}}, + {2310, {wxFindReplaceData, getFlags, 0}}, + {2311, {wxFindReplaceData, setFlags, 1}}, + {2312, {wxFindReplaceData, setFindString, 1}}, + {2313, {wxFindReplaceData, setReplaceString, 1}}, + {2314, {wxFindReplaceData, 'Destroy', undefined}}, + {2315, {wxMultiChoiceDialog, new_0, 0}}, + {2317, {wxMultiChoiceDialog, new_5, 5}}, + {2318, {wxMultiChoiceDialog, getSelections, 0}}, + {2319, {wxMultiChoiceDialog, setSelections, 1}}, + {2320, {wxMultiChoiceDialog, 'Destroy', undefined}}, + {2321, {wxSingleChoiceDialog, new_0, 0}}, + {2323, {wxSingleChoiceDialog, new_5, 5}}, + {2324, {wxSingleChoiceDialog, getSelection, 0}}, + {2325, {wxSingleChoiceDialog, getStringSelection, 0}}, + {2326, {wxSingleChoiceDialog, setSelection, 1}}, + {2327, {wxSingleChoiceDialog, 'Destroy', undefined}}, + {2328, {wxTextEntryDialog, new, 3}}, + {2329, {wxTextEntryDialog, getValue, 0}}, + {2330, {wxTextEntryDialog, setValue, 1}}, + {2331, {wxTextEntryDialog, 'Destroy', undefined}}, + {2332, {wxPasswordEntryDialog, new, 3}}, + {2333, {wxPasswordEntryDialog, 'Destroy', undefined}}, + {2334, {wxFontData, new_0, 0}}, + {2335, {wxFontData, new_1, 1}}, + {2336, {wxFontData, destruct, 0}}, + {2337, {wxFontData, enableEffects, 1}}, + {2338, {wxFontData, getAllowSymbols, 0}}, + {2339, {wxFontData, getColour, 0}}, + {2340, {wxFontData, getChosenFont, 0}}, + {2341, {wxFontData, getEnableEffects, 0}}, + {2342, {wxFontData, getInitialFont, 0}}, + {2343, {wxFontData, getShowHelp, 0}}, + {2344, {wxFontData, setAllowSymbols, 1}}, + {2345, {wxFontData, setChosenFont, 1}}, + {2346, {wxFontData, setColour, 1}}, + {2347, {wxFontData, setInitialFont, 1}}, + {2348, {wxFontData, setRange, 2}}, + {2349, {wxFontData, setShowHelp, 1}}, + {2353, {wxFontDialog, new_0, 0}}, + {2355, {wxFontDialog, new_2, 2}}, + {2357, {wxFontDialog, create, 2}}, + {2358, {wxFontDialog, getFontData, 0}}, + {2360, {wxFontDialog, 'Destroy', undefined}}, + {2361, {wxProgressDialog, new, 3}}, + {2362, {wxProgressDialog, destruct, 0}}, + {2363, {wxProgressDialog, resume, 0}}, + {2364, {wxProgressDialog, update_2, 2}}, + {2365, {wxProgressDialog, update_0, 0}}, + {2366, {wxMessageDialog, new, 3}}, + {2367, {wxMessageDialog, destruct, 0}}, + {2368, {wxPageSetupDialog, new, 2}}, + {2369, {wxPageSetupDialog, destruct, 0}}, + {2370, {wxPageSetupDialog, getPageSetupData, 0}}, + {2371, {wxPageSetupDialog, showModal, 0}}, + {2372, {wxPageSetupDialogData, new_0, 0}}, + {2373, {wxPageSetupDialogData, new_1_0, 1}}, + {2374, {wxPageSetupDialogData, new_1_1, 1}}, + {2375, {wxPageSetupDialogData, destruct, 0}}, + {2376, {wxPageSetupDialogData, enableHelp, 1}}, + {2377, {wxPageSetupDialogData, enableMargins, 1}}, + {2378, {wxPageSetupDialogData, enableOrientation, 1}}, + {2379, {wxPageSetupDialogData, enablePaper, 1}}, + {2380, {wxPageSetupDialogData, enablePrinter, 1}}, + {2381, {wxPageSetupDialogData, getDefaultMinMargins, 0}}, + {2382, {wxPageSetupDialogData, getEnableMargins, 0}}, + {2383, {wxPageSetupDialogData, getEnableOrientation, 0}}, + {2384, {wxPageSetupDialogData, getEnablePaper, 0}}, + {2385, {wxPageSetupDialogData, getEnablePrinter, 0}}, + {2386, {wxPageSetupDialogData, getEnableHelp, 0}}, + {2387, {wxPageSetupDialogData, getDefaultInfo, 0}}, + {2388, {wxPageSetupDialogData, getMarginTopLeft, 0}}, + {2389, {wxPageSetupDialogData, getMarginBottomRight, 0}}, + {2390, {wxPageSetupDialogData, getMinMarginTopLeft, 0}}, + {2391, {wxPageSetupDialogData, getMinMarginBottomRight, 0}}, + {2392, {wxPageSetupDialogData, getPaperId, 0}}, + {2393, {wxPageSetupDialogData, getPaperSize, 0}}, + {2395, {wxPageSetupDialogData, getPrintData, 0}}, + {2396, {wxPageSetupDialogData, isOk, 0}}, + {2397, {wxPageSetupDialogData, setDefaultInfo, 1}}, + {2398, {wxPageSetupDialogData, setDefaultMinMargins, 1}}, + {2399, {wxPageSetupDialogData, setMarginTopLeft, 1}}, + {2400, {wxPageSetupDialogData, setMarginBottomRight, 1}}, + {2401, {wxPageSetupDialogData, setMinMarginTopLeft, 1}}, + {2402, {wxPageSetupDialogData, setMinMarginBottomRight, 1}}, + {2403, {wxPageSetupDialogData, setPaperId, 1}}, + {2404, {wxPageSetupDialogData, setPaperSize_1_1, 1}}, + {2405, {wxPageSetupDialogData, setPaperSize_1_0, 1}}, + {2406, {wxPageSetupDialogData, setPrintData, 1}}, + {2407, {wxPrintDialog, new_2_0, 2}}, + {2408, {wxPrintDialog, new_2_1, 2}}, + {2409, {wxPrintDialog, destruct, 0}}, + {2410, {wxPrintDialog, getPrintDialogData, 0}}, + {2411, {wxPrintDialog, getPrintDC, 0}}, + {2412, {wxPrintDialogData, new_0, 0}}, + {2413, {wxPrintDialogData, new_1_1, 1}}, + {2414, {wxPrintDialogData, new_1_0, 1}}, + {2415, {wxPrintDialogData, destruct, 0}}, + {2416, {wxPrintDialogData, enableHelp, 1}}, + {2417, {wxPrintDialogData, enablePageNumbers, 1}}, + {2418, {wxPrintDialogData, enablePrintToFile, 1}}, + {2419, {wxPrintDialogData, enableSelection, 1}}, + {2420, {wxPrintDialogData, getAllPages, 0}}, + {2421, {wxPrintDialogData, getCollate, 0}}, + {2422, {wxPrintDialogData, getFromPage, 0}}, + {2423, {wxPrintDialogData, getMaxPage, 0}}, + {2424, {wxPrintDialogData, getMinPage, 0}}, + {2425, {wxPrintDialogData, getNoCopies, 0}}, + {2426, {wxPrintDialogData, getPrintData, 0}}, + {2427, {wxPrintDialogData, getPrintToFile, 0}}, + {2428, {wxPrintDialogData, getSelection, 0}}, + {2429, {wxPrintDialogData, getToPage, 0}}, + {2430, {wxPrintDialogData, isOk, 0}}, + {2431, {wxPrintDialogData, setCollate, 1}}, + {2432, {wxPrintDialogData, setFromPage, 1}}, + {2433, {wxPrintDialogData, setMaxPage, 1}}, + {2434, {wxPrintDialogData, setMinPage, 1}}, + {2435, {wxPrintDialogData, setNoCopies, 1}}, + {2436, {wxPrintDialogData, setPrintData, 1}}, + {2437, {wxPrintDialogData, setPrintToFile, 1}}, + {2438, {wxPrintDialogData, setSelection, 1}}, + {2439, {wxPrintDialogData, setToPage, 1}}, + {2440, {wxPrintData, new_0, 0}}, + {2441, {wxPrintData, new_1, 1}}, + {2442, {wxPrintData, destruct, 0}}, + {2443, {wxPrintData, getCollate, 0}}, + {2444, {wxPrintData, getBin, 0}}, + {2445, {wxPrintData, getColour, 0}}, + {2446, {wxPrintData, getDuplex, 0}}, + {2447, {wxPrintData, getNoCopies, 0}}, + {2448, {wxPrintData, getOrientation, 0}}, + {2449, {wxPrintData, getPaperId, 0}}, + {2450, {wxPrintData, getPrinterName, 0}}, + {2451, {wxPrintData, getQuality, 0}}, + {2452, {wxPrintData, isOk, 0}}, + {2453, {wxPrintData, setBin, 1}}, + {2454, {wxPrintData, setCollate, 1}}, + {2455, {wxPrintData, setColour, 1}}, + {2456, {wxPrintData, setDuplex, 1}}, + {2457, {wxPrintData, setNoCopies, 1}}, + {2458, {wxPrintData, setOrientation, 1}}, + {2459, {wxPrintData, setPaperId, 1}}, + {2460, {wxPrintData, setPrinterName, 1}}, + {2461, {wxPrintData, setQuality, 1}}, + {2464, {wxPrintPreview, new_2, 2}}, + {2465, {wxPrintPreview, new_3, 3}}, + {2467, {wxPrintPreview, destruct, 0}}, + {2468, {wxPrintPreview, getCanvas, 0}}, + {2469, {wxPrintPreview, getCurrentPage, 0}}, + {2470, {wxPrintPreview, getFrame, 0}}, + {2471, {wxPrintPreview, getMaxPage, 0}}, + {2472, {wxPrintPreview, getMinPage, 0}}, + {2473, {wxPrintPreview, getPrintout, 0}}, + {2474, {wxPrintPreview, getPrintoutForPrinting, 0}}, + {2475, {wxPrintPreview, isOk, 0}}, + {2476, {wxPrintPreview, paintPage, 2}}, + {2477, {wxPrintPreview, print, 1}}, + {2478, {wxPrintPreview, renderPage, 1}}, + {2479, {wxPrintPreview, setCanvas, 1}}, + {2480, {wxPrintPreview, setCurrentPage, 1}}, + {2481, {wxPrintPreview, setFrame, 1}}, + {2482, {wxPrintPreview, setPrintout, 1}}, + {2483, {wxPrintPreview, setZoom, 1}}, + {2484, {wxPreviewFrame, new, 3}}, + {2485, {wxPreviewFrame, destruct, 0}}, + {2486, {wxPreviewFrame, createControlBar, 0}}, + {2487, {wxPreviewFrame, createCanvas, 0}}, + {2488, {wxPreviewFrame, initialize, 0}}, + {2489, {wxPreviewFrame, onCloseWindow, 1}}, + {2490, {wxPreviewControlBar, new, 4}}, + {2491, {wxPreviewControlBar, destruct, 0}}, + {2492, {wxPreviewControlBar, createButtons, 0}}, + {2493, {wxPreviewControlBar, getPrintPreview, 0}}, + {2494, {wxPreviewControlBar, getZoomControl, 0}}, + {2495, {wxPreviewControlBar, setZoomControl, 1}}, + {2497, {wxPrinter, new, 1}}, + {2498, {wxPrinter, createAbortWindow, 2}}, + {2499, {wxPrinter, getAbort, 0}}, + {2500, {wxPrinter, getLastError, 0}}, + {2501, {wxPrinter, getPrintDialogData, 0}}, + {2502, {wxPrinter, print, 3}}, + {2503, {wxPrinter, printDialog, 1}}, + {2504, {wxPrinter, reportError, 3}}, + {2505, {wxPrinter, setup, 1}}, + {2506, {wxPrinter, 'Destroy', undefined}}, + {2507, {wxXmlResource, new_1, 1}}, + {2508, {wxXmlResource, new_2, 2}}, + {2509, {wxXmlResource, destruct, 0}}, + {2510, {wxXmlResource, attachUnknownControl, 3}}, + {2511, {wxXmlResource, clearHandlers, 0}}, + {2512, {wxXmlResource, compareVersion, 4}}, + {2513, {wxXmlResource, get, 0}}, + {2514, {wxXmlResource, getFlags, 0}}, + {2515, {wxXmlResource, getVersion, 0}}, + {2516, {wxXmlResource, getXRCID, 2}}, + {2517, {wxXmlResource, initAllHandlers, 0}}, + {2518, {wxXmlResource, load, 1}}, + {2519, {wxXmlResource, loadBitmap, 1}}, + {2520, {wxXmlResource, loadDialog_2, 2}}, + {2521, {wxXmlResource, loadDialog_3, 3}}, + {2522, {wxXmlResource, loadFrame_2, 2}}, + {2523, {wxXmlResource, loadFrame_3, 3}}, + {2524, {wxXmlResource, loadIcon, 1}}, + {2525, {wxXmlResource, loadMenu, 1}}, + {2526, {wxXmlResource, loadMenuBar_2, 2}}, + {2527, {wxXmlResource, loadMenuBar_1, 1}}, + {2528, {wxXmlResource, loadPanel_2, 2}}, + {2529, {wxXmlResource, loadPanel_3, 3}}, + {2530, {wxXmlResource, loadToolBar, 2}}, + {2531, {wxXmlResource, set, 1}}, + {2532, {wxXmlResource, setFlags, 1}}, + {2533, {wxXmlResource, unload, 1}}, + {2534, {wxXmlResource, xrcctrl, 3}}, + {2535, {wxHtmlEasyPrinting, new, 1}}, + {2536, {wxHtmlEasyPrinting, destruct, 0}}, + {2537, {wxHtmlEasyPrinting, getPrintData, 0}}, + {2538, {wxHtmlEasyPrinting, getPageSetupData, 0}}, + {2539, {wxHtmlEasyPrinting, previewFile, 1}}, + {2540, {wxHtmlEasyPrinting, previewText, 2}}, + {2541, {wxHtmlEasyPrinting, printFile, 1}}, + {2542, {wxHtmlEasyPrinting, printText, 2}}, + {2543, {wxHtmlEasyPrinting, pageSetup, 0}}, + {2544, {wxHtmlEasyPrinting, setFonts, 3}}, + {2545, {wxHtmlEasyPrinting, setHeader, 2}}, + {2546, {wxHtmlEasyPrinting, setFooter, 2}}, + {2548, {wxGLCanvas, new_2, 2}}, + {2549, {wxGLCanvas, new_3_1, 3}}, + {2550, {wxGLCanvas, new_3_0, 3}}, + {2551, {wxGLCanvas, getContext, 0}}, + {2553, {wxGLCanvas, setCurrent, 0}}, + {2554, {wxGLCanvas, swapBuffers, 0}}, + {2555, {wxGLCanvas, 'Destroy', undefined}}, + {2556, {wxAuiManager, new, 1}}, + {2557, {wxAuiManager, destruct, 0}}, + {2558, {wxAuiManager, addPane_2_1, 2}}, + {2559, {wxAuiManager, addPane_3, 3}}, + {2560, {wxAuiManager, addPane_2_0, 2}}, + {2561, {wxAuiManager, detachPane, 1}}, + {2562, {wxAuiManager, getAllPanes, 0}}, + {2563, {wxAuiManager, getArtProvider, 0}}, + {2564, {wxAuiManager, getDockSizeConstraint, 2}}, + {2565, {wxAuiManager, getFlags, 0}}, + {2566, {wxAuiManager, getManagedWindow, 0}}, + {2567, {wxAuiManager, getManager, 1}}, + {2568, {wxAuiManager, getPane_1_1, 1}}, + {2569, {wxAuiManager, getPane_1_0, 1}}, + {2570, {wxAuiManager, hideHint, 0}}, + {2571, {wxAuiManager, insertPane, 3}}, + {2572, {wxAuiManager, loadPaneInfo, 2}}, + {2573, {wxAuiManager, loadPerspective, 2}}, + {2574, {wxAuiManager, savePaneInfo, 1}}, + {2575, {wxAuiManager, savePerspective, 0}}, + {2576, {wxAuiManager, setArtProvider, 1}}, + {2577, {wxAuiManager, setDockSizeConstraint, 2}}, + {2578, {wxAuiManager, setFlags, 1}}, + {2579, {wxAuiManager, setManagedWindow, 1}}, + {2580, {wxAuiManager, showHint, 1}}, + {2581, {wxAuiManager, unInit, 0}}, + {2582, {wxAuiManager, update, 0}}, + {2583, {wxAuiPaneInfo, new_0, 0}}, + {2584, {wxAuiPaneInfo, new_1, 1}}, + {2585, {wxAuiPaneInfo, destruct, 0}}, + {2586, {wxAuiPaneInfo, bestSize_1, 1}}, + {2587, {wxAuiPaneInfo, bestSize_2, 2}}, + {2588, {wxAuiPaneInfo, bottom, 0}}, + {2589, {wxAuiPaneInfo, bottomDockable, 1}}, + {2590, {wxAuiPaneInfo, caption, 1}}, + {2591, {wxAuiPaneInfo, captionVisible, 1}}, + {2592, {wxAuiPaneInfo, centre, 0}}, + {2593, {wxAuiPaneInfo, centrePane, 0}}, + {2594, {wxAuiPaneInfo, closeButton, 1}}, + {2595, {wxAuiPaneInfo, defaultPane, 0}}, + {2596, {wxAuiPaneInfo, destroyOnClose, 1}}, + {2597, {wxAuiPaneInfo, direction, 1}}, + {2598, {wxAuiPaneInfo, dock, 0}}, + {2599, {wxAuiPaneInfo, dockable, 1}}, + {2600, {wxAuiPaneInfo, fixed, 0}}, + {2601, {wxAuiPaneInfo, float, 0}}, + {2602, {wxAuiPaneInfo, floatable, 1}}, + {2603, {wxAuiPaneInfo, floatingPosition_1, 1}}, + {2604, {wxAuiPaneInfo, floatingPosition_2, 2}}, + {2605, {wxAuiPaneInfo, floatingSize_1, 1}}, + {2606, {wxAuiPaneInfo, floatingSize_2, 2}}, + {2607, {wxAuiPaneInfo, gripper, 1}}, + {2608, {wxAuiPaneInfo, gripperTop, 1}}, + {2609, {wxAuiPaneInfo, hasBorder, 0}}, + {2610, {wxAuiPaneInfo, hasCaption, 0}}, + {2611, {wxAuiPaneInfo, hasCloseButton, 0}}, + {2612, {wxAuiPaneInfo, hasFlag, 1}}, + {2613, {wxAuiPaneInfo, hasGripper, 0}}, + {2614, {wxAuiPaneInfo, hasGripperTop, 0}}, + {2615, {wxAuiPaneInfo, hasMaximizeButton, 0}}, + {2616, {wxAuiPaneInfo, hasMinimizeButton, 0}}, + {2617, {wxAuiPaneInfo, hasPinButton, 0}}, + {2618, {wxAuiPaneInfo, hide, 0}}, + {2619, {wxAuiPaneInfo, isBottomDockable, 0}}, + {2620, {wxAuiPaneInfo, isDocked, 0}}, + {2621, {wxAuiPaneInfo, isFixed, 0}}, + {2622, {wxAuiPaneInfo, isFloatable, 0}}, + {2623, {wxAuiPaneInfo, isFloating, 0}}, + {2624, {wxAuiPaneInfo, isLeftDockable, 0}}, + {2625, {wxAuiPaneInfo, isMovable, 0}}, + {2626, {wxAuiPaneInfo, isOk, 0}}, + {2627, {wxAuiPaneInfo, isResizable, 0}}, + {2628, {wxAuiPaneInfo, isRightDockable, 0}}, + {2629, {wxAuiPaneInfo, isShown, 0}}, + {2630, {wxAuiPaneInfo, isToolbar, 0}}, + {2631, {wxAuiPaneInfo, isTopDockable, 0}}, + {2632, {wxAuiPaneInfo, layer, 1}}, + {2633, {wxAuiPaneInfo, left, 0}}, + {2634, {wxAuiPaneInfo, leftDockable, 1}}, + {2635, {wxAuiPaneInfo, maxSize_1, 1}}, + {2636, {wxAuiPaneInfo, maxSize_2, 2}}, + {2637, {wxAuiPaneInfo, maximizeButton, 1}}, + {2638, {wxAuiPaneInfo, minSize_1, 1}}, + {2639, {wxAuiPaneInfo, minSize_2, 2}}, + {2640, {wxAuiPaneInfo, minimizeButton, 1}}, + {2641, {wxAuiPaneInfo, movable, 1}}, + {2642, {wxAuiPaneInfo, name, 1}}, + {2643, {wxAuiPaneInfo, paneBorder, 1}}, + {2644, {wxAuiPaneInfo, pinButton, 1}}, + {2645, {wxAuiPaneInfo, position, 1}}, + {2646, {wxAuiPaneInfo, resizable, 1}}, + {2647, {wxAuiPaneInfo, right, 0}}, + {2648, {wxAuiPaneInfo, rightDockable, 1}}, + {2649, {wxAuiPaneInfo, row, 1}}, + {2650, {wxAuiPaneInfo, safeSet, 1}}, + {2651, {wxAuiPaneInfo, setFlag, 2}}, + {2652, {wxAuiPaneInfo, show, 1}}, + {2653, {wxAuiPaneInfo, toolbarPane, 0}}, + {2654, {wxAuiPaneInfo, top, 0}}, + {2655, {wxAuiPaneInfo, topDockable, 1}}, + {2656, {wxAuiPaneInfo, window, 1}}, + {2657, {wxAuiPaneInfo, getWindow, 0}}, + {2658, {wxAuiPaneInfo, getFrame, 0}}, + {2659, {wxAuiPaneInfo, getDirection, 0}}, + {2660, {wxAuiPaneInfo, getLayer, 0}}, + {2661, {wxAuiPaneInfo, getRow, 0}}, + {2662, {wxAuiPaneInfo, getPosition, 0}}, + {2663, {wxAuiPaneInfo, getFloatingPosition, 0}}, + {2664, {wxAuiPaneInfo, getFloatingSize, 0}}, + {2665, {wxAuiNotebook, new_0, 0}}, + {2666, {wxAuiNotebook, new_2, 2}}, + {2667, {wxAuiNotebook, addPage, 3}}, + {2668, {wxAuiNotebook, create, 2}}, + {2669, {wxAuiNotebook, deletePage, 1}}, + {2670, {wxAuiNotebook, getArtProvider, 0}}, + {2671, {wxAuiNotebook, getPage, 1}}, + {2672, {wxAuiNotebook, getPageBitmap, 1}}, + {2673, {wxAuiNotebook, getPageCount, 0}}, + {2674, {wxAuiNotebook, getPageIndex, 1}}, + {2675, {wxAuiNotebook, getPageText, 1}}, + {2676, {wxAuiNotebook, getSelection, 0}}, + {2677, {wxAuiNotebook, insertPage, 4}}, + {2678, {wxAuiNotebook, removePage, 1}}, + {2679, {wxAuiNotebook, setArtProvider, 1}}, + {2680, {wxAuiNotebook, setFont, 1}}, + {2681, {wxAuiNotebook, setPageBitmap, 2}}, + {2682, {wxAuiNotebook, setPageText, 2}}, + {2683, {wxAuiNotebook, setSelection, 1}}, + {2684, {wxAuiNotebook, setTabCtrlHeight, 1}}, + {2685, {wxAuiNotebook, setUniformBitmapSize, 1}}, + {2686, {wxAuiNotebook, 'Destroy', undefined}}, + {2687, {wxAuiTabArt, setFlags, 1}}, + {2688, {wxAuiTabArt, setMeasuringFont, 1}}, + {2689, {wxAuiTabArt, setNormalFont, 1}}, + {2690, {wxAuiTabArt, setSelectedFont, 1}}, + {2691, {wxAuiTabArt, setColour, 1}}, + {2692, {wxAuiTabArt, setActiveColour, 1}}, + {2693, {wxAuiDockArt, getColour, 1}}, + {2694, {wxAuiDockArt, getFont, 1}}, + {2695, {wxAuiDockArt, getMetric, 1}}, + {2696, {wxAuiDockArt, setColour, 2}}, + {2697, {wxAuiDockArt, setFont, 2}}, + {2698, {wxAuiDockArt, setMetric, 2}}, + {2699, {wxAuiSimpleTabArt, new, 0}}, + {2700, {wxAuiSimpleTabArt, 'Destroy', undefined}}, + {2701, {wxMDIParentFrame, new_0, 0}}, + {2702, {wxMDIParentFrame, new_4, 4}}, + {2703, {wxMDIParentFrame, destruct, 0}}, + {2704, {wxMDIParentFrame, activateNext, 0}}, + {2705, {wxMDIParentFrame, activatePrevious, 0}}, + {2706, {wxMDIParentFrame, arrangeIcons, 0}}, + {2707, {wxMDIParentFrame, cascade, 0}}, + {2708, {wxMDIParentFrame, create, 4}}, + {2709, {wxMDIParentFrame, getActiveChild, 0}}, + {2710, {wxMDIParentFrame, getClientWindow, 0}}, + {2711, {wxMDIParentFrame, tile, 1}}, + {2712, {wxMDIChildFrame, new_0, 0}}, + {2713, {wxMDIChildFrame, new_4, 4}}, + {2714, {wxMDIChildFrame, destruct, 0}}, + {2715, {wxMDIChildFrame, activate, 0}}, + {2716, {wxMDIChildFrame, create, 4}}, + {2717, {wxMDIChildFrame, maximize, 1}}, + {2718, {wxMDIChildFrame, restore, 0}}, + {2719, {wxMDIClientWindow, new_0, 0}}, + {2720, {wxMDIClientWindow, new_2, 2}}, + {2721, {wxMDIClientWindow, destruct, 0}}, + {2722, {wxMDIClientWindow, createClient, 2}}, + {2723, {wxLayoutAlgorithm, new, 0}}, + {2724, {wxLayoutAlgorithm, layoutFrame, 2}}, + {2725, {wxLayoutAlgorithm, layoutMDIFrame, 2}}, + {2726, {wxLayoutAlgorithm, layoutWindow, 2}}, + {2727, {wxLayoutAlgorithm, 'Destroy', undefined}}, + {2728, {wxEvent, getId, 0}}, + {2729, {wxEvent, getSkipped, 0}}, + {2730, {wxEvent, getTimestamp, 0}}, + {2731, {wxEvent, isCommandEvent, 0}}, + {2732, {wxEvent, resumePropagation, 1}}, + {2733, {wxEvent, shouldPropagate, 0}}, + {2734, {wxEvent, skip, 1}}, + {2735, {wxEvent, stopPropagation, 0}}, + {2736, {wxCommandEvent, getClientData, 0}}, + {2737, {wxCommandEvent, getExtraLong, 0}}, + {2738, {wxCommandEvent, getInt, 0}}, + {2739, {wxCommandEvent, getSelection, 0}}, + {2740, {wxCommandEvent, getString, 0}}, + {2741, {wxCommandEvent, isChecked, 0}}, + {2742, {wxCommandEvent, isSelection, 0}}, + {2743, {wxCommandEvent, setInt, 1}}, + {2744, {wxCommandEvent, setString, 1}}, + {2745, {wxScrollEvent, getOrientation, 0}}, + {2746, {wxScrollEvent, getPosition, 0}}, + {2747, {wxScrollWinEvent, getOrientation, 0}}, + {2748, {wxScrollWinEvent, getPosition, 0}}, + {2749, {wxMouseEvent, altDown, 0}}, + {2750, {wxMouseEvent, button, 1}}, + {2751, {wxMouseEvent, buttonDClick, 1}}, + {2752, {wxMouseEvent, buttonDown, 1}}, + {2753, {wxMouseEvent, buttonUp, 1}}, + {2754, {wxMouseEvent, cmdDown, 0}}, + {2755, {wxMouseEvent, controlDown, 0}}, + {2756, {wxMouseEvent, dragging, 0}}, + {2757, {wxMouseEvent, entering, 0}}, + {2758, {wxMouseEvent, getButton, 0}}, + {2761, {wxMouseEvent, getPosition, 0}}, + {2762, {wxMouseEvent, getLogicalPosition, 1}}, + {2763, {wxMouseEvent, getLinesPerAction, 0}}, + {2764, {wxMouseEvent, getWheelRotation, 0}}, + {2765, {wxMouseEvent, getWheelDelta, 0}}, + {2766, {wxMouseEvent, getX, 0}}, + {2767, {wxMouseEvent, getY, 0}}, + {2768, {wxMouseEvent, isButton, 0}}, + {2769, {wxMouseEvent, isPageScroll, 0}}, + {2770, {wxMouseEvent, leaving, 0}}, + {2771, {wxMouseEvent, leftDClick, 0}}, + {2772, {wxMouseEvent, leftDown, 0}}, + {2773, {wxMouseEvent, leftIsDown, 0}}, + {2774, {wxMouseEvent, leftUp, 0}}, + {2775, {wxMouseEvent, metaDown, 0}}, + {2776, {wxMouseEvent, middleDClick, 0}}, + {2777, {wxMouseEvent, middleDown, 0}}, + {2778, {wxMouseEvent, middleIsDown, 0}}, + {2779, {wxMouseEvent, middleUp, 0}}, + {2780, {wxMouseEvent, moving, 0}}, + {2781, {wxMouseEvent, rightDClick, 0}}, + {2782, {wxMouseEvent, rightDown, 0}}, + {2783, {wxMouseEvent, rightIsDown, 0}}, + {2784, {wxMouseEvent, rightUp, 0}}, + {2785, {wxMouseEvent, shiftDown, 0}}, + {2786, {wxSetCursorEvent, getCursor, 0}}, + {2787, {wxSetCursorEvent, getX, 0}}, + {2788, {wxSetCursorEvent, getY, 0}}, + {2789, {wxSetCursorEvent, hasCursor, 0}}, + {2790, {wxSetCursorEvent, setCursor, 1}}, + {2791, {wxKeyEvent, altDown, 0}}, + {2792, {wxKeyEvent, cmdDown, 0}}, + {2793, {wxKeyEvent, controlDown, 0}}, + {2794, {wxKeyEvent, getKeyCode, 0}}, + {2795, {wxKeyEvent, getModifiers, 0}}, + {2798, {wxKeyEvent, getPosition, 0}}, + {2799, {wxKeyEvent, getRawKeyCode, 0}}, + {2800, {wxKeyEvent, getRawKeyFlags, 0}}, + {2801, {wxKeyEvent, getUnicodeKey, 0}}, + {2802, {wxKeyEvent, getX, 0}}, + {2803, {wxKeyEvent, getY, 0}}, + {2804, {wxKeyEvent, hasModifiers, 0}}, + {2805, {wxKeyEvent, metaDown, 0}}, + {2806, {wxKeyEvent, shiftDown, 0}}, + {2807, {wxSizeEvent, getSize, 0}}, + {2808, {wxMoveEvent, getPosition, 0}}, + {2809, {wxEraseEvent, getDC, 0}}, + {2810, {wxFocusEvent, getWindow, 0}}, + {2811, {wxChildFocusEvent, getWindow, 0}}, + {2812, {wxMenuEvent, getMenu, 0}}, + {2813, {wxMenuEvent, getMenuId, 0}}, + {2814, {wxMenuEvent, isPopup, 0}}, + {2815, {wxCloseEvent, canVeto, 0}}, + {2816, {wxCloseEvent, getLoggingOff, 0}}, + {2817, {wxCloseEvent, setCanVeto, 1}}, + {2818, {wxCloseEvent, setLoggingOff, 1}}, + {2819, {wxCloseEvent, veto, 1}}, + {2820, {wxShowEvent, setShow, 1}}, + {2821, {wxShowEvent, getShow, 0}}, + {2822, {wxIconizeEvent, iconized, 0}}, + {2823, {wxJoystickEvent, buttonDown, 1}}, + {2824, {wxJoystickEvent, buttonIsDown, 1}}, + {2825, {wxJoystickEvent, buttonUp, 1}}, + {2826, {wxJoystickEvent, getButtonChange, 0}}, + {2827, {wxJoystickEvent, getButtonState, 0}}, + {2828, {wxJoystickEvent, getJoystick, 0}}, + {2829, {wxJoystickEvent, getPosition, 0}}, + {2830, {wxJoystickEvent, getZPosition, 0}}, + {2831, {wxJoystickEvent, isButton, 0}}, + {2832, {wxJoystickEvent, isMove, 0}}, + {2833, {wxJoystickEvent, isZMove, 0}}, + {2834, {wxUpdateUIEvent, canUpdate, 1}}, + {2835, {wxUpdateUIEvent, check, 1}}, + {2836, {wxUpdateUIEvent, enable, 1}}, + {2837, {wxUpdateUIEvent, show, 1}}, + {2838, {wxUpdateUIEvent, getChecked, 0}}, + {2839, {wxUpdateUIEvent, getEnabled, 0}}, + {2840, {wxUpdateUIEvent, getShown, 0}}, + {2841, {wxUpdateUIEvent, getSetChecked, 0}}, + {2842, {wxUpdateUIEvent, getSetEnabled, 0}}, + {2843, {wxUpdateUIEvent, getSetShown, 0}}, + {2844, {wxUpdateUIEvent, getSetText, 0}}, + {2845, {wxUpdateUIEvent, getText, 0}}, + {2846, {wxUpdateUIEvent, getMode, 0}}, + {2847, {wxUpdateUIEvent, getUpdateInterval, 0}}, + {2848, {wxUpdateUIEvent, resetUpdateTime, 0}}, + {2849, {wxUpdateUIEvent, setMode, 1}}, + {2850, {wxUpdateUIEvent, setText, 1}}, + {2851, {wxUpdateUIEvent, setUpdateInterval, 1}}, + {2852, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}}, + {2853, {wxPaletteChangedEvent, setChangedWindow, 1}}, + {2854, {wxPaletteChangedEvent, getChangedWindow, 0}}, + {2855, {wxQueryNewPaletteEvent, setPaletteRealized, 1}}, + {2856, {wxQueryNewPaletteEvent, getPaletteRealized, 0}}, + {2857, {wxNavigationKeyEvent, getDirection, 0}}, + {2858, {wxNavigationKeyEvent, setDirection, 1}}, + {2859, {wxNavigationKeyEvent, isWindowChange, 0}}, + {2860, {wxNavigationKeyEvent, setWindowChange, 1}}, + {2861, {wxNavigationKeyEvent, isFromTab, 0}}, + {2862, {wxNavigationKeyEvent, setFromTab, 1}}, + {2863, {wxNavigationKeyEvent, getCurrentFocus, 0}}, + {2864, {wxNavigationKeyEvent, setCurrentFocus, 1}}, + {2865, {wxHelpEvent, getOrigin, 0}}, + {2866, {wxHelpEvent, getPosition, 0}}, + {2867, {wxHelpEvent, setOrigin, 1}}, + {2868, {wxHelpEvent, setPosition, 1}}, + {2869, {wxContextMenuEvent, getPosition, 0}}, + {2870, {wxContextMenuEvent, setPosition, 1}}, + {2871, {wxIdleEvent, canSend, 1}}, + {2872, {wxIdleEvent, getMode, 0}}, + {2873, {wxIdleEvent, requestMore, 1}}, + {2874, {wxIdleEvent, moreRequested, 0}}, + {2875, {wxIdleEvent, setMode, 1}}, + {2876, {wxGridEvent, altDown, 0}}, + {2877, {wxGridEvent, controlDown, 0}}, + {2878, {wxGridEvent, getCol, 0}}, + {2879, {wxGridEvent, getPosition, 0}}, + {2880, {wxGridEvent, getRow, 0}}, + {2881, {wxGridEvent, metaDown, 0}}, + {2882, {wxGridEvent, selecting, 0}}, + {2883, {wxGridEvent, shiftDown, 0}}, + {2884, {wxNotifyEvent, allow, 0}}, + {2885, {wxNotifyEvent, isAllowed, 0}}, + {2886, {wxNotifyEvent, veto, 0}}, + {2887, {wxSashEvent, getEdge, 0}}, + {2888, {wxSashEvent, getDragRect, 0}}, + {2889, {wxSashEvent, getDragStatus, 0}}, + {2890, {wxListEvent, getCacheFrom, 0}}, + {2891, {wxListEvent, getCacheTo, 0}}, + {2892, {wxListEvent, getKeyCode, 0}}, + {2893, {wxListEvent, getIndex, 0}}, + {2894, {wxListEvent, getColumn, 0}}, + {2895, {wxListEvent, getPoint, 0}}, + {2896, {wxListEvent, getLabel, 0}}, + {2897, {wxListEvent, getText, 0}}, + {2898, {wxListEvent, getImage, 0}}, + {2899, {wxListEvent, getData, 0}}, + {2900, {wxListEvent, getMask, 0}}, + {2901, {wxListEvent, getItem, 0}}, + {2902, {wxListEvent, isEditCancelled, 0}}, + {2903, {wxDateEvent, getDate, 0}}, + {2904, {wxCalendarEvent, getWeekDay, 0}}, + {2905, {wxFileDirPickerEvent, getPath, 0}}, + {2906, {wxColourPickerEvent, getColour, 0}}, + {2907, {wxFontPickerEvent, getFont, 0}}, + {2908, {wxStyledTextEvent, getPosition, 0}}, + {2909, {wxStyledTextEvent, getKey, 0}}, + {2910, {wxStyledTextEvent, getModifiers, 0}}, + {2911, {wxStyledTextEvent, getModificationType, 0}}, + {2912, {wxStyledTextEvent, getText, 0}}, + {2913, {wxStyledTextEvent, getLength, 0}}, + {2914, {wxStyledTextEvent, getLinesAdded, 0}}, + {2915, {wxStyledTextEvent, getLine, 0}}, + {2916, {wxStyledTextEvent, getFoldLevelNow, 0}}, + {2917, {wxStyledTextEvent, getFoldLevelPrev, 0}}, + {2918, {wxStyledTextEvent, getMargin, 0}}, + {2919, {wxStyledTextEvent, getMessage, 0}}, + {2920, {wxStyledTextEvent, getWParam, 0}}, + {2921, {wxStyledTextEvent, getLParam, 0}}, + {2922, {wxStyledTextEvent, getListType, 0}}, + {2923, {wxStyledTextEvent, getX, 0}}, + {2924, {wxStyledTextEvent, getY, 0}}, + {2925, {wxStyledTextEvent, getDragText, 0}}, + {2926, {wxStyledTextEvent, getDragAllowMove, 0}}, + {2927, {wxStyledTextEvent, getDragResult, 0}}, + {2928, {wxStyledTextEvent, getShift, 0}}, + {2929, {wxStyledTextEvent, getControl, 0}}, + {2930, {wxStyledTextEvent, getAlt, 0}}, + {2931, {utils, getKeyState, 1}}, + {2932, {utils, getMousePosition, 2}}, + {2933, {utils, getMouseState, 0}}, + {2934, {utils, setDetectableAutoRepeat, 1}}, + {2935, {utils, bell, 0}}, + {2936, {utils, findMenuItemId, 3}}, + {2937, {utils, genericFindWindowAtPoint, 1}}, + {2938, {utils, findWindowAtPoint, 1}}, + {2939, {utils, beginBusyCursor, 1}}, + {2940, {utils, endBusyCursor, 0}}, + {2941, {utils, isBusy, 0}}, + {2942, {utils, shutdown, 1}}, + {2943, {utils, shell, 1}}, + {2944, {utils, launchDefaultBrowser, 2}}, + {2945, {utils, getEmailAddress, 0}}, + {2946, {utils, getUserId, 0}}, + {2947, {utils, getHomeDir, 0}}, + {2948, {utils, newId, 0}}, + {2949, {utils, registerId, 1}}, + {2950, {utils, getCurrentId, 0}}, + {2951, {utils, getOsDescription, 0}}, + {2952, {utils, isPlatformLittleEndian, 0}}, + {2953, {utils, isPlatform64Bit, 0}}, + {2954, {gdicmn, displaySize, 2}}, + {2955, {gdicmn, setCursor, 1}}, + {2956, {wxPrintout, new, 1}}, + {2957, {wxPrintout, destruct, 0}}, + {2958, {wxPrintout, getDC, 0}}, + {2959, {wxPrintout, getPageSizeMM, 2}}, + {2960, {wxPrintout, getPageSizePixels, 2}}, + {2961, {wxPrintout, getPaperRectPixels, 0}}, + {2962, {wxPrintout, getPPIPrinter, 2}}, + {2963, {wxPrintout, getPPIScreen, 2}}, + {2964, {wxPrintout, getTitle, 0}}, + {2965, {wxPrintout, isPreview, 0}}, + {2966, {wxPrintout, fitThisSizeToPaper, 1}}, + {2967, {wxPrintout, fitThisSizeToPage, 1}}, + {2968, {wxPrintout, fitThisSizeToPageMargins, 2}}, + {2969, {wxPrintout, mapScreenSizeToPaper, 0}}, + {2970, {wxPrintout, mapScreenSizeToPage, 0}}, + {2971, {wxPrintout, mapScreenSizeToPageMargins, 1}}, + {2972, {wxPrintout, mapScreenSizeToDevice, 0}}, + {2973, {wxPrintout, getLogicalPaperRect, 0}}, + {2974, {wxPrintout, getLogicalPageRect, 0}}, + {2975, {wxPrintout, getLogicalPageMarginsRect, 1}}, + {2976, {wxPrintout, setLogicalOrigin, 2}}, + {2977, {wxPrintout, offsetLogicalOrigin, 2}}, + {2978, {wxStyledTextCtrl, new_2, 2}}, + {2979, {wxStyledTextCtrl, new_0, 0}}, + {2980, {wxStyledTextCtrl, destruct, 0}}, + {2981, {wxStyledTextCtrl, create, 2}}, + {2982, {wxStyledTextCtrl, addText, 1}}, + {2983, {wxStyledTextCtrl, addStyledText, 1}}, + {2984, {wxStyledTextCtrl, insertText, 2}}, + {2985, {wxStyledTextCtrl, clearAll, 0}}, + {2986, {wxStyledTextCtrl, clearDocumentStyle, 0}}, + {2987, {wxStyledTextCtrl, getLength, 0}}, + {2988, {wxStyledTextCtrl, getCharAt, 1}}, + {2989, {wxStyledTextCtrl, getCurrentPos, 0}}, + {2990, {wxStyledTextCtrl, getAnchor, 0}}, + {2991, {wxStyledTextCtrl, getStyleAt, 1}}, + {2992, {wxStyledTextCtrl, redo, 0}}, + {2993, {wxStyledTextCtrl, setUndoCollection, 1}}, + {2994, {wxStyledTextCtrl, selectAll, 0}}, + {2995, {wxStyledTextCtrl, setSavePoint, 0}}, + {2996, {wxStyledTextCtrl, getStyledText, 2}}, + {2997, {wxStyledTextCtrl, canRedo, 0}}, + {2998, {wxStyledTextCtrl, markerLineFromHandle, 1}}, + {2999, {wxStyledTextCtrl, markerDeleteHandle, 1}}, + {3000, {wxStyledTextCtrl, getUndoCollection, 0}}, + {3001, {wxStyledTextCtrl, getViewWhiteSpace, 0}}, + {3002, {wxStyledTextCtrl, setViewWhiteSpace, 1}}, + {3003, {wxStyledTextCtrl, positionFromPoint, 1}}, + {3004, {wxStyledTextCtrl, positionFromPointClose, 2}}, + {3005, {wxStyledTextCtrl, gotoLine, 1}}, + {3006, {wxStyledTextCtrl, gotoPos, 1}}, + {3007, {wxStyledTextCtrl, setAnchor, 1}}, + {3008, {wxStyledTextCtrl, getCurLine, 1}}, + {3009, {wxStyledTextCtrl, getEndStyled, 0}}, + {3010, {wxStyledTextCtrl, convertEOLs, 1}}, + {3011, {wxStyledTextCtrl, getEOLMode, 0}}, + {3012, {wxStyledTextCtrl, setEOLMode, 1}}, + {3013, {wxStyledTextCtrl, startStyling, 2}}, + {3014, {wxStyledTextCtrl, setStyling, 2}}, + {3015, {wxStyledTextCtrl, getBufferedDraw, 0}}, + {3016, {wxStyledTextCtrl, setBufferedDraw, 1}}, + {3017, {wxStyledTextCtrl, setTabWidth, 1}}, + {3018, {wxStyledTextCtrl, getTabWidth, 0}}, + {3019, {wxStyledTextCtrl, setCodePage, 1}}, + {3020, {wxStyledTextCtrl, markerDefine, 3}}, + {3021, {wxStyledTextCtrl, markerSetForeground, 2}}, + {3022, {wxStyledTextCtrl, markerSetBackground, 2}}, + {3023, {wxStyledTextCtrl, markerAdd, 2}}, + {3024, {wxStyledTextCtrl, markerDelete, 2}}, + {3025, {wxStyledTextCtrl, markerDeleteAll, 1}}, + {3026, {wxStyledTextCtrl, markerGet, 1}}, + {3027, {wxStyledTextCtrl, markerNext, 2}}, + {3028, {wxStyledTextCtrl, markerPrevious, 2}}, + {3029, {wxStyledTextCtrl, markerDefineBitmap, 2}}, + {3030, {wxStyledTextCtrl, markerAddSet, 2}}, + {3031, {wxStyledTextCtrl, markerSetAlpha, 2}}, + {3032, {wxStyledTextCtrl, setMarginType, 2}}, + {3033, {wxStyledTextCtrl, getMarginType, 1}}, + {3034, {wxStyledTextCtrl, setMarginWidth, 2}}, + {3035, {wxStyledTextCtrl, getMarginWidth, 1}}, + {3036, {wxStyledTextCtrl, setMarginMask, 2}}, + {3037, {wxStyledTextCtrl, getMarginMask, 1}}, + {3038, {wxStyledTextCtrl, setMarginSensitive, 2}}, + {3039, {wxStyledTextCtrl, getMarginSensitive, 1}}, + {3040, {wxStyledTextCtrl, styleClearAll, 0}}, + {3041, {wxStyledTextCtrl, styleSetForeground, 2}}, + {3042, {wxStyledTextCtrl, styleSetBackground, 2}}, + {3043, {wxStyledTextCtrl, styleSetBold, 2}}, + {3044, {wxStyledTextCtrl, styleSetItalic, 2}}, + {3045, {wxStyledTextCtrl, styleSetSize, 2}}, + {3046, {wxStyledTextCtrl, styleSetFaceName, 2}}, + {3047, {wxStyledTextCtrl, styleSetEOLFilled, 2}}, + {3048, {wxStyledTextCtrl, styleResetDefault, 0}}, + {3049, {wxStyledTextCtrl, styleSetUnderline, 2}}, + {3050, {wxStyledTextCtrl, styleSetCase, 2}}, + {3051, {wxStyledTextCtrl, styleSetHotSpot, 2}}, + {3052, {wxStyledTextCtrl, setSelForeground, 2}}, + {3053, {wxStyledTextCtrl, setSelBackground, 2}}, + {3054, {wxStyledTextCtrl, getSelAlpha, 0}}, + {3055, {wxStyledTextCtrl, setSelAlpha, 1}}, + {3056, {wxStyledTextCtrl, setCaretForeground, 1}}, + {3057, {wxStyledTextCtrl, cmdKeyAssign, 3}}, + {3058, {wxStyledTextCtrl, cmdKeyClear, 2}}, + {3059, {wxStyledTextCtrl, cmdKeyClearAll, 0}}, + {3060, {wxStyledTextCtrl, setStyleBytes, 2}}, + {3061, {wxStyledTextCtrl, styleSetVisible, 2}}, + {3062, {wxStyledTextCtrl, getCaretPeriod, 0}}, + {3063, {wxStyledTextCtrl, setCaretPeriod, 1}}, + {3064, {wxStyledTextCtrl, setWordChars, 1}}, + {3065, {wxStyledTextCtrl, beginUndoAction, 0}}, + {3066, {wxStyledTextCtrl, endUndoAction, 0}}, + {3067, {wxStyledTextCtrl, indicatorSetStyle, 2}}, + {3068, {wxStyledTextCtrl, indicatorGetStyle, 1}}, + {3069, {wxStyledTextCtrl, indicatorSetForeground, 2}}, + {3070, {wxStyledTextCtrl, indicatorGetForeground, 1}}, + {3071, {wxStyledTextCtrl, setWhitespaceForeground, 2}}, + {3072, {wxStyledTextCtrl, setWhitespaceBackground, 2}}, + {3073, {wxStyledTextCtrl, getStyleBits, 0}}, + {3074, {wxStyledTextCtrl, setLineState, 2}}, + {3075, {wxStyledTextCtrl, getLineState, 1}}, + {3076, {wxStyledTextCtrl, getMaxLineState, 0}}, + {3077, {wxStyledTextCtrl, getCaretLineVisible, 0}}, + {3078, {wxStyledTextCtrl, setCaretLineVisible, 1}}, + {3079, {wxStyledTextCtrl, getCaretLineBackground, 0}}, + {3080, {wxStyledTextCtrl, setCaretLineBackground, 1}}, + {3081, {wxStyledTextCtrl, autoCompShow, 2}}, + {3082, {wxStyledTextCtrl, autoCompCancel, 0}}, + {3083, {wxStyledTextCtrl, autoCompActive, 0}}, + {3084, {wxStyledTextCtrl, autoCompPosStart, 0}}, + {3085, {wxStyledTextCtrl, autoCompComplete, 0}}, + {3086, {wxStyledTextCtrl, autoCompStops, 1}}, + {3087, {wxStyledTextCtrl, autoCompSetSeparator, 1}}, + {3088, {wxStyledTextCtrl, autoCompGetSeparator, 0}}, + {3089, {wxStyledTextCtrl, autoCompSelect, 1}}, + {3090, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}}, + {3091, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}}, + {3092, {wxStyledTextCtrl, autoCompSetFillUps, 1}}, + {3093, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}}, + {3094, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}}, + {3095, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}}, + {3096, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}}, + {3097, {wxStyledTextCtrl, userListShow, 2}}, + {3098, {wxStyledTextCtrl, autoCompSetAutoHide, 1}}, + {3099, {wxStyledTextCtrl, autoCompGetAutoHide, 0}}, + {3100, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}}, + {3101, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}}, + {3102, {wxStyledTextCtrl, registerImage, 2}}, + {3103, {wxStyledTextCtrl, clearRegisteredImages, 0}}, + {3104, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}}, + {3105, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}}, + {3106, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}}, + {3107, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}}, + {3108, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}}, + {3109, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}}, + {3110, {wxStyledTextCtrl, setIndent, 1}}, + {3111, {wxStyledTextCtrl, getIndent, 0}}, + {3112, {wxStyledTextCtrl, setUseTabs, 1}}, + {3113, {wxStyledTextCtrl, getUseTabs, 0}}, + {3114, {wxStyledTextCtrl, setLineIndentation, 2}}, + {3115, {wxStyledTextCtrl, getLineIndentation, 1}}, + {3116, {wxStyledTextCtrl, getLineIndentPosition, 1}}, + {3117, {wxStyledTextCtrl, getColumn, 1}}, + {3118, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}}, + {3119, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}}, + {3120, {wxStyledTextCtrl, setIndentationGuides, 1}}, + {3121, {wxStyledTextCtrl, getIndentationGuides, 0}}, + {3122, {wxStyledTextCtrl, setHighlightGuide, 1}}, + {3123, {wxStyledTextCtrl, getHighlightGuide, 0}}, + {3124, {wxStyledTextCtrl, getLineEndPosition, 1}}, + {3125, {wxStyledTextCtrl, getCodePage, 0}}, + {3126, {wxStyledTextCtrl, getCaretForeground, 0}}, + {3127, {wxStyledTextCtrl, getReadOnly, 0}}, + {3128, {wxStyledTextCtrl, setCurrentPos, 1}}, + {3129, {wxStyledTextCtrl, setSelectionStart, 1}}, + {3130, {wxStyledTextCtrl, getSelectionStart, 0}}, + {3131, {wxStyledTextCtrl, setSelectionEnd, 1}}, + {3132, {wxStyledTextCtrl, getSelectionEnd, 0}}, + {3133, {wxStyledTextCtrl, setPrintMagnification, 1}}, + {3134, {wxStyledTextCtrl, getPrintMagnification, 0}}, + {3135, {wxStyledTextCtrl, setPrintColourMode, 1}}, + {3136, {wxStyledTextCtrl, getPrintColourMode, 0}}, + {3137, {wxStyledTextCtrl, findText, 4}}, + {3138, {wxStyledTextCtrl, formatRange, 7}}, + {3139, {wxStyledTextCtrl, getFirstVisibleLine, 0}}, + {3140, {wxStyledTextCtrl, getLine, 1}}, + {3141, {wxStyledTextCtrl, getLineCount, 0}}, + {3142, {wxStyledTextCtrl, setMarginLeft, 1}}, + {3143, {wxStyledTextCtrl, getMarginLeft, 0}}, + {3144, {wxStyledTextCtrl, setMarginRight, 1}}, + {3145, {wxStyledTextCtrl, getMarginRight, 0}}, + {3146, {wxStyledTextCtrl, getModify, 0}}, + {3147, {wxStyledTextCtrl, setSelection, 2}}, + {3148, {wxStyledTextCtrl, getSelectedText, 0}}, + {3149, {wxStyledTextCtrl, getTextRange, 2}}, + {3150, {wxStyledTextCtrl, hideSelection, 1}}, + {3151, {wxStyledTextCtrl, lineFromPosition, 1}}, + {3152, {wxStyledTextCtrl, positionFromLine, 1}}, + {3153, {wxStyledTextCtrl, lineScroll, 2}}, + {3154, {wxStyledTextCtrl, ensureCaretVisible, 0}}, + {3155, {wxStyledTextCtrl, replaceSelection, 1}}, + {3156, {wxStyledTextCtrl, setReadOnly, 1}}, + {3157, {wxStyledTextCtrl, canPaste, 0}}, + {3158, {wxStyledTextCtrl, canUndo, 0}}, + {3159, {wxStyledTextCtrl, emptyUndoBuffer, 0}}, + {3160, {wxStyledTextCtrl, undo, 0}}, + {3161, {wxStyledTextCtrl, cut, 0}}, + {3162, {wxStyledTextCtrl, copy, 0}}, + {3163, {wxStyledTextCtrl, paste, 0}}, + {3164, {wxStyledTextCtrl, clear, 0}}, + {3165, {wxStyledTextCtrl, setText, 1}}, + {3166, {wxStyledTextCtrl, getText, 0}}, + {3167, {wxStyledTextCtrl, getTextLength, 0}}, + {3168, {wxStyledTextCtrl, getOvertype, 0}}, + {3169, {wxStyledTextCtrl, setCaretWidth, 1}}, + {3170, {wxStyledTextCtrl, getCaretWidth, 0}}, + {3171, {wxStyledTextCtrl, setTargetStart, 1}}, + {3172, {wxStyledTextCtrl, getTargetStart, 0}}, + {3173, {wxStyledTextCtrl, setTargetEnd, 1}}, + {3174, {wxStyledTextCtrl, getTargetEnd, 0}}, + {3175, {wxStyledTextCtrl, replaceTarget, 1}}, + {3176, {wxStyledTextCtrl, searchInTarget, 1}}, + {3177, {wxStyledTextCtrl, setSearchFlags, 1}}, + {3178, {wxStyledTextCtrl, getSearchFlags, 0}}, + {3179, {wxStyledTextCtrl, callTipShow, 2}}, + {3180, {wxStyledTextCtrl, callTipCancel, 0}}, + {3181, {wxStyledTextCtrl, callTipActive, 0}}, + {3182, {wxStyledTextCtrl, callTipPosAtStart, 0}}, + {3183, {wxStyledTextCtrl, callTipSetHighlight, 2}}, + {3184, {wxStyledTextCtrl, callTipSetBackground, 1}}, + {3185, {wxStyledTextCtrl, callTipSetForeground, 1}}, + {3186, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}}, + {3187, {wxStyledTextCtrl, callTipUseStyle, 1}}, + {3188, {wxStyledTextCtrl, visibleFromDocLine, 1}}, + {3189, {wxStyledTextCtrl, docLineFromVisible, 1}}, + {3190, {wxStyledTextCtrl, wrapCount, 1}}, + {3191, {wxStyledTextCtrl, setFoldLevel, 2}}, + {3192, {wxStyledTextCtrl, getFoldLevel, 1}}, + {3193, {wxStyledTextCtrl, getLastChild, 2}}, + {3194, {wxStyledTextCtrl, getFoldParent, 1}}, + {3195, {wxStyledTextCtrl, showLines, 2}}, + {3196, {wxStyledTextCtrl, hideLines, 2}}, + {3197, {wxStyledTextCtrl, getLineVisible, 1}}, + {3198, {wxStyledTextCtrl, setFoldExpanded, 2}}, + {3199, {wxStyledTextCtrl, getFoldExpanded, 1}}, + {3200, {wxStyledTextCtrl, toggleFold, 1}}, + {3201, {wxStyledTextCtrl, ensureVisible, 1}}, + {3202, {wxStyledTextCtrl, setFoldFlags, 1}}, + {3203, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}}, + {3204, {wxStyledTextCtrl, setTabIndents, 1}}, + {3205, {wxStyledTextCtrl, getTabIndents, 0}}, + {3206, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}}, + {3207, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}}, + {3208, {wxStyledTextCtrl, setMouseDwellTime, 1}}, + {3209, {wxStyledTextCtrl, getMouseDwellTime, 0}}, + {3210, {wxStyledTextCtrl, wordStartPosition, 2}}, + {3211, {wxStyledTextCtrl, wordEndPosition, 2}}, + {3212, {wxStyledTextCtrl, setWrapMode, 1}}, + {3213, {wxStyledTextCtrl, getWrapMode, 0}}, + {3214, {wxStyledTextCtrl, setWrapVisualFlags, 1}}, + {3215, {wxStyledTextCtrl, getWrapVisualFlags, 0}}, + {3216, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}}, + {3217, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}}, + {3218, {wxStyledTextCtrl, setWrapStartIndent, 1}}, + {3219, {wxStyledTextCtrl, getWrapStartIndent, 0}}, + {3220, {wxStyledTextCtrl, setLayoutCache, 1}}, + {3221, {wxStyledTextCtrl, getLayoutCache, 0}}, + {3222, {wxStyledTextCtrl, setScrollWidth, 1}}, + {3223, {wxStyledTextCtrl, getScrollWidth, 0}}, + {3224, {wxStyledTextCtrl, textWidth, 2}}, + {3225, {wxStyledTextCtrl, getEndAtLastLine, 0}}, + {3226, {wxStyledTextCtrl, textHeight, 1}}, + {3227, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}}, + {3228, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}}, + {3229, {wxStyledTextCtrl, appendText, 1}}, + {3230, {wxStyledTextCtrl, getTwoPhaseDraw, 0}}, + {3231, {wxStyledTextCtrl, setTwoPhaseDraw, 1}}, + {3232, {wxStyledTextCtrl, targetFromSelection, 0}}, + {3233, {wxStyledTextCtrl, linesJoin, 0}}, + {3234, {wxStyledTextCtrl, linesSplit, 1}}, + {3235, {wxStyledTextCtrl, setFoldMarginColour, 2}}, + {3236, {wxStyledTextCtrl, setFoldMarginHiColour, 2}}, + {3237, {wxStyledTextCtrl, lineDown, 0}}, + {3238, {wxStyledTextCtrl, lineDownExtend, 0}}, + {3239, {wxStyledTextCtrl, lineUp, 0}}, + {3240, {wxStyledTextCtrl, lineUpExtend, 0}}, + {3241, {wxStyledTextCtrl, charLeft, 0}}, + {3242, {wxStyledTextCtrl, charLeftExtend, 0}}, + {3243, {wxStyledTextCtrl, charRight, 0}}, + {3244, {wxStyledTextCtrl, charRightExtend, 0}}, + {3245, {wxStyledTextCtrl, wordLeft, 0}}, + {3246, {wxStyledTextCtrl, wordLeftExtend, 0}}, + {3247, {wxStyledTextCtrl, wordRight, 0}}, + {3248, {wxStyledTextCtrl, wordRightExtend, 0}}, + {3249, {wxStyledTextCtrl, home, 0}}, + {3250, {wxStyledTextCtrl, homeExtend, 0}}, + {3251, {wxStyledTextCtrl, lineEnd, 0}}, + {3252, {wxStyledTextCtrl, lineEndExtend, 0}}, + {3253, {wxStyledTextCtrl, documentStart, 0}}, + {3254, {wxStyledTextCtrl, documentStartExtend, 0}}, + {3255, {wxStyledTextCtrl, documentEnd, 0}}, + {3256, {wxStyledTextCtrl, documentEndExtend, 0}}, + {3257, {wxStyledTextCtrl, pageUp, 0}}, + {3258, {wxStyledTextCtrl, pageUpExtend, 0}}, + {3259, {wxStyledTextCtrl, pageDown, 0}}, + {3260, {wxStyledTextCtrl, pageDownExtend, 0}}, + {3261, {wxStyledTextCtrl, editToggleOvertype, 0}}, + {3262, {wxStyledTextCtrl, cancel, 0}}, + {3263, {wxStyledTextCtrl, deleteBack, 0}}, + {3264, {wxStyledTextCtrl, tab, 0}}, + {3265, {wxStyledTextCtrl, backTab, 0}}, + {3266, {wxStyledTextCtrl, newLine, 0}}, + {3267, {wxStyledTextCtrl, formFeed, 0}}, + {3268, {wxStyledTextCtrl, vCHome, 0}}, + {3269, {wxStyledTextCtrl, vCHomeExtend, 0}}, + {3270, {wxStyledTextCtrl, zoomIn, 0}}, + {3271, {wxStyledTextCtrl, zoomOut, 0}}, + {3272, {wxStyledTextCtrl, delWordLeft, 0}}, + {3273, {wxStyledTextCtrl, delWordRight, 0}}, + {3274, {wxStyledTextCtrl, lineCut, 0}}, + {3275, {wxStyledTextCtrl, lineDelete, 0}}, + {3276, {wxStyledTextCtrl, lineTranspose, 0}}, + {3277, {wxStyledTextCtrl, lineDuplicate, 0}}, + {3278, {wxStyledTextCtrl, lowerCase, 0}}, + {3279, {wxStyledTextCtrl, upperCase, 0}}, + {3280, {wxStyledTextCtrl, lineScrollDown, 0}}, + {3281, {wxStyledTextCtrl, lineScrollUp, 0}}, + {3282, {wxStyledTextCtrl, deleteBackNotLine, 0}}, + {3283, {wxStyledTextCtrl, homeDisplay, 0}}, + {3284, {wxStyledTextCtrl, homeDisplayExtend, 0}}, + {3285, {wxStyledTextCtrl, lineEndDisplay, 0}}, + {3286, {wxStyledTextCtrl, lineEndDisplayExtend, 0}}, + {3287, {wxStyledTextCtrl, homeWrapExtend, 0}}, + {3288, {wxStyledTextCtrl, lineEndWrap, 0}}, + {3289, {wxStyledTextCtrl, lineEndWrapExtend, 0}}, + {3290, {wxStyledTextCtrl, vCHomeWrap, 0}}, + {3291, {wxStyledTextCtrl, vCHomeWrapExtend, 0}}, + {3292, {wxStyledTextCtrl, lineCopy, 0}}, + {3293, {wxStyledTextCtrl, moveCaretInsideView, 0}}, + {3294, {wxStyledTextCtrl, lineLength, 1}}, + {3295, {wxStyledTextCtrl, braceHighlight, 2}}, + {3296, {wxStyledTextCtrl, braceBadLight, 1}}, + {3297, {wxStyledTextCtrl, braceMatch, 1}}, + {3298, {wxStyledTextCtrl, getViewEOL, 0}}, + {3299, {wxStyledTextCtrl, setViewEOL, 1}}, + {3300, {wxStyledTextCtrl, setModEventMask, 1}}, + {3301, {wxStyledTextCtrl, getEdgeColumn, 0}}, + {3302, {wxStyledTextCtrl, setEdgeColumn, 1}}, + {3303, {wxStyledTextCtrl, setEdgeMode, 1}}, + {3304, {wxStyledTextCtrl, getEdgeMode, 0}}, + {3305, {wxStyledTextCtrl, getEdgeColour, 0}}, + {3306, {wxStyledTextCtrl, setEdgeColour, 1}}, + {3307, {wxStyledTextCtrl, searchAnchor, 0}}, + {3308, {wxStyledTextCtrl, searchNext, 2}}, + {3309, {wxStyledTextCtrl, searchPrev, 2}}, + {3310, {wxStyledTextCtrl, linesOnScreen, 0}}, + {3311, {wxStyledTextCtrl, usePopUp, 1}}, + {3312, {wxStyledTextCtrl, selectionIsRectangle, 0}}, + {3313, {wxStyledTextCtrl, setZoom, 1}}, + {3314, {wxStyledTextCtrl, getZoom, 0}}, + {3315, {wxStyledTextCtrl, getModEventMask, 0}}, + {3316, {wxStyledTextCtrl, setSTCFocus, 1}}, + {3317, {wxStyledTextCtrl, getSTCFocus, 0}}, + {3318, {wxStyledTextCtrl, setStatus, 1}}, + {3319, {wxStyledTextCtrl, getStatus, 0}}, + {3320, {wxStyledTextCtrl, setMouseDownCaptures, 1}}, + {3321, {wxStyledTextCtrl, getMouseDownCaptures, 0}}, + {3322, {wxStyledTextCtrl, setSTCCursor, 1}}, + {3323, {wxStyledTextCtrl, getSTCCursor, 0}}, + {3324, {wxStyledTextCtrl, setControlCharSymbol, 1}}, + {3325, {wxStyledTextCtrl, getControlCharSymbol, 0}}, + {3326, {wxStyledTextCtrl, wordPartLeft, 0}}, + {3327, {wxStyledTextCtrl, wordPartLeftExtend, 0}}, + {3328, {wxStyledTextCtrl, wordPartRight, 0}}, + {3329, {wxStyledTextCtrl, wordPartRightExtend, 0}}, + {3330, {wxStyledTextCtrl, setVisiblePolicy, 2}}, + {3331, {wxStyledTextCtrl, delLineLeft, 0}}, + {3332, {wxStyledTextCtrl, delLineRight, 0}}, + {3333, {wxStyledTextCtrl, getXOffset, 0}}, + {3334, {wxStyledTextCtrl, chooseCaretX, 0}}, + {3335, {wxStyledTextCtrl, setXCaretPolicy, 2}}, + {3336, {wxStyledTextCtrl, setYCaretPolicy, 2}}, + {3337, {wxStyledTextCtrl, getPrintWrapMode, 0}}, + {3338, {wxStyledTextCtrl, setHotspotActiveForeground, 2}}, + {3339, {wxStyledTextCtrl, setHotspotActiveBackground, 2}}, + {3340, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}}, + {3341, {wxStyledTextCtrl, setHotspotSingleLine, 1}}, + {3342, {wxStyledTextCtrl, paraDownExtend, 0}}, + {3343, {wxStyledTextCtrl, paraUp, 0}}, + {3344, {wxStyledTextCtrl, paraUpExtend, 0}}, + {3345, {wxStyledTextCtrl, positionBefore, 1}}, + {3346, {wxStyledTextCtrl, positionAfter, 1}}, + {3347, {wxStyledTextCtrl, copyRange, 2}}, + {3348, {wxStyledTextCtrl, copyText, 2}}, + {3349, {wxStyledTextCtrl, setSelectionMode, 1}}, + {3350, {wxStyledTextCtrl, getSelectionMode, 0}}, + {3351, {wxStyledTextCtrl, lineDownRectExtend, 0}}, + {3352, {wxStyledTextCtrl, lineUpRectExtend, 0}}, + {3353, {wxStyledTextCtrl, charLeftRectExtend, 0}}, + {3354, {wxStyledTextCtrl, charRightRectExtend, 0}}, + {3355, {wxStyledTextCtrl, homeRectExtend, 0}}, + {3356, {wxStyledTextCtrl, vCHomeRectExtend, 0}}, + {3357, {wxStyledTextCtrl, lineEndRectExtend, 0}}, + {3358, {wxStyledTextCtrl, pageUpRectExtend, 0}}, + {3359, {wxStyledTextCtrl, pageDownRectExtend, 0}}, + {3360, {wxStyledTextCtrl, stutteredPageUp, 0}}, + {3361, {wxStyledTextCtrl, stutteredPageUpExtend, 0}}, + {3362, {wxStyledTextCtrl, stutteredPageDown, 0}}, + {3363, {wxStyledTextCtrl, stutteredPageDownExtend, 0}}, + {3364, {wxStyledTextCtrl, wordLeftEnd, 0}}, + {3365, {wxStyledTextCtrl, wordLeftEndExtend, 0}}, + {3366, {wxStyledTextCtrl, wordRightEnd, 0}}, + {3367, {wxStyledTextCtrl, wordRightEndExtend, 0}}, + {3368, {wxStyledTextCtrl, setWhitespaceChars, 1}}, + {3369, {wxStyledTextCtrl, setCharsDefault, 0}}, + {3370, {wxStyledTextCtrl, autoCompGetCurrent, 0}}, + {3371, {wxStyledTextCtrl, allocate, 1}}, + {3372, {wxStyledTextCtrl, findColumn, 2}}, + {3373, {wxStyledTextCtrl, getCaretSticky, 0}}, + {3374, {wxStyledTextCtrl, setCaretSticky, 1}}, + {3375, {wxStyledTextCtrl, toggleCaretSticky, 0}}, + {3376, {wxStyledTextCtrl, setPasteConvertEndings, 1}}, + {3377, {wxStyledTextCtrl, getPasteConvertEndings, 0}}, + {3378, {wxStyledTextCtrl, selectionDuplicate, 0}}, + {3379, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}}, + {3380, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}}, + {3381, {wxStyledTextCtrl, startRecord, 0}}, + {3382, {wxStyledTextCtrl, stopRecord, 0}}, + {3383, {wxStyledTextCtrl, setLexer, 1}}, + {3384, {wxStyledTextCtrl, getLexer, 0}}, + {3385, {wxStyledTextCtrl, colourise, 2}}, + {3386, {wxStyledTextCtrl, setProperty, 2}}, + {3387, {wxStyledTextCtrl, setKeyWords, 2}}, + {3388, {wxStyledTextCtrl, setLexerLanguage, 1}}, + {3389, {wxStyledTextCtrl, getProperty, 1}}, + {3390, {wxStyledTextCtrl, getStyleBitsNeeded, 0}}, + {3391, {wxStyledTextCtrl, getCurrentLine, 0}}, + {3392, {wxStyledTextCtrl, styleSetSpec, 2}}, + {3393, {wxStyledTextCtrl, styleSetFont, 2}}, + {3394, {wxStyledTextCtrl, styleSetFontAttr, 7}}, + {3395, {wxStyledTextCtrl, styleSetCharacterSet, 2}}, + {3396, {wxStyledTextCtrl, styleSetFontEncoding, 2}}, + {3397, {wxStyledTextCtrl, cmdKeyExecute, 1}}, + {3398, {wxStyledTextCtrl, setMargins, 2}}, + {3399, {wxStyledTextCtrl, getSelection, 2}}, + {3400, {wxStyledTextCtrl, pointFromPosition, 1}}, + {3401, {wxStyledTextCtrl, scrollToLine, 1}}, + {3402, {wxStyledTextCtrl, scrollToColumn, 1}}, + {3403, {wxStyledTextCtrl, setVScrollBar, 1}}, + {3404, {wxStyledTextCtrl, setHScrollBar, 1}}, + {3405, {wxStyledTextCtrl, getLastKeydownProcessed, 0}}, + {3406, {wxStyledTextCtrl, setLastKeydownProcessed, 1}}, + {3407, {wxStyledTextCtrl, saveFile, 1}}, + {3408, {wxStyledTextCtrl, loadFile, 1}}, + {3409, {wxStyledTextCtrl, doDragOver, 3}}, + {3410, {wxStyledTextCtrl, doDropText, 3}}, + {3411, {wxStyledTextCtrl, getUseAntiAliasing, 0}}, + {3412, {wxStyledTextCtrl, addTextRaw, 1}}, + {3413, {wxStyledTextCtrl, insertTextRaw, 2}}, + {3414, {wxStyledTextCtrl, getCurLineRaw, 1}}, + {3415, {wxStyledTextCtrl, getLineRaw, 1}}, + {3416, {wxStyledTextCtrl, getSelectedTextRaw, 0}}, + {3417, {wxStyledTextCtrl, getTextRangeRaw, 2}}, + {3418, {wxStyledTextCtrl, setTextRaw, 1}}, + {3419, {wxStyledTextCtrl, getTextRaw, 0}}, + {3420, {wxStyledTextCtrl, appendTextRaw, 1}}, + {3421, {wxArtProvider, getBitmap, 2}}, + {3422, {wxArtProvider, getIcon, 2}}, + {3423, {wxTreeEvent, getKeyCode, 0}}, + {3424, {wxTreeEvent, getItem, 0}}, + {3425, {wxTreeEvent, getKeyEvent, 0}}, + {3426, {wxTreeEvent, getLabel, 0}}, + {3427, {wxTreeEvent, getOldItem, 0}}, + {3428, {wxTreeEvent, getPoint, 0}}, + {3429, {wxTreeEvent, isEditCancelled, 0}}, + {3430, {wxTreeEvent, setToolTip, 1}}, + {3431, {wxNotebookEvent, getOldSelection, 0}}, + {3432, {wxNotebookEvent, getSelection, 0}}, + {3433, {wxNotebookEvent, setOldSelection, 1}}, + {3434, {wxNotebookEvent, setSelection, 1}}, + {3435, {wxFileDataObject, new, 0}}, + {3436, {wxFileDataObject, addFile, 1}}, + {3437, {wxFileDataObject, getFilenames, 0}}, + {3438, {wxFileDataObject, 'Destroy', undefined}}, + {3439, {wxTextDataObject, new, 1}}, + {3440, {wxTextDataObject, getTextLength, 0}}, + {3441, {wxTextDataObject, getText, 0}}, + {3442, {wxTextDataObject, setText, 1}}, + {3443, {wxTextDataObject, 'Destroy', undefined}}, + {3444, {wxBitmapDataObject, new_1_1, 1}}, + {3445, {wxBitmapDataObject, new_1_0, 1}}, + {3446, {wxBitmapDataObject, getBitmap, 0}}, + {3447, {wxBitmapDataObject, setBitmap, 1}}, + {3448, {wxBitmapDataObject, 'Destroy', undefined}}, + {3450, {wxClipboard, new, 0}}, + {3451, {wxClipboard, destruct, 0}}, + {3452, {wxClipboard, addData, 1}}, + {3453, {wxClipboard, clear, 0}}, + {3454, {wxClipboard, close, 0}}, + {3455, {wxClipboard, flush, 0}}, + {3456, {wxClipboard, getData, 1}}, + {3457, {wxClipboard, isOpened, 0}}, + {3458, {wxClipboard, open, 0}}, + {3459, {wxClipboard, setData, 1}}, + {3461, {wxClipboard, usePrimarySelection, 1}}, + {3462, {wxClipboard, isSupported, 1}}, + {3463, {wxClipboard, get, 0}}, + {3464, {wxSpinEvent, getPosition, 0}}, + {3465, {wxSpinEvent, setPosition, 1}}, + {3466, {wxSplitterWindow, new_0, 0}}, + {3467, {wxSplitterWindow, new_2, 2}}, + {3468, {wxSplitterWindow, destruct, 0}}, + {3469, {wxSplitterWindow, create, 2}}, + {3470, {wxSplitterWindow, getMinimumPaneSize, 0}}, + {3471, {wxSplitterWindow, getSashGravity, 0}}, + {3472, {wxSplitterWindow, getSashPosition, 0}}, + {3473, {wxSplitterWindow, getSplitMode, 0}}, + {3474, {wxSplitterWindow, getWindow1, 0}}, + {3475, {wxSplitterWindow, getWindow2, 0}}, + {3476, {wxSplitterWindow, initialize, 1}}, + {3477, {wxSplitterWindow, isSplit, 0}}, + {3478, {wxSplitterWindow, replaceWindow, 2}}, + {3479, {wxSplitterWindow, setSashGravity, 1}}, + {3480, {wxSplitterWindow, setSashPosition, 2}}, + {3481, {wxSplitterWindow, setSashSize, 1}}, + {3482, {wxSplitterWindow, setMinimumPaneSize, 1}}, + {3483, {wxSplitterWindow, setSplitMode, 1}}, + {3484, {wxSplitterWindow, splitHorizontally, 3}}, + {3485, {wxSplitterWindow, splitVertically, 3}}, + {3486, {wxSplitterWindow, unsplit, 1}}, + {3487, {wxSplitterWindow, updateSize, 0}}, + {3488, {wxSplitterEvent, getSashPosition, 0}}, + {3489, {wxSplitterEvent, getX, 0}}, + {3490, {wxSplitterEvent, getY, 0}}, + {3491, {wxSplitterEvent, getWindowBeingRemoved, 0}}, + {3492, {wxSplitterEvent, setSashPosition, 1}}, + {3493, {wxHtmlWindow, new_0, 0}}, + {3494, {wxHtmlWindow, new_2, 2}}, + {3495, {wxHtmlWindow, appendToPage, 1}}, + {3496, {wxHtmlWindow, getOpenedAnchor, 0}}, + {3497, {wxHtmlWindow, getOpenedPage, 0}}, + {3498, {wxHtmlWindow, getOpenedPageTitle, 0}}, + {3499, {wxHtmlWindow, getRelatedFrame, 0}}, + {3500, {wxHtmlWindow, historyBack, 0}}, + {3501, {wxHtmlWindow, historyCanBack, 0}}, + {3502, {wxHtmlWindow, historyCanForward, 0}}, + {3503, {wxHtmlWindow, historyClear, 0}}, + {3504, {wxHtmlWindow, historyForward, 0}}, + {3505, {wxHtmlWindow, loadFile, 1}}, + {3506, {wxHtmlWindow, loadPage, 1}}, + {3507, {wxHtmlWindow, selectAll, 0}}, + {3508, {wxHtmlWindow, selectionToText, 0}}, + {3509, {wxHtmlWindow, selectLine, 1}}, + {3510, {wxHtmlWindow, selectWord, 1}}, + {3511, {wxHtmlWindow, setBorders, 1}}, + {3512, {wxHtmlWindow, setFonts, 3}}, + {3513, {wxHtmlWindow, setPage, 1}}, + {3514, {wxHtmlWindow, setRelatedFrame, 2}}, + {3515, {wxHtmlWindow, setRelatedStatusBar, 1}}, + {3516, {wxHtmlWindow, toText, 0}}, + {3517, {wxHtmlWindow, 'Destroy', undefined}}, + {3518, {wxHtmlLinkEvent, getLinkInfo, 0}}, + {3519, {wxSystemSettings, getColour, 1}}, + {3520, {wxSystemSettings, getFont, 1}}, + {3521, {wxSystemSettings, getMetric, 2}}, + {3522, {wxSystemSettings, getScreenType, 0}}, + {3523, {wxSystemOptions, getOption, 1}}, + {3524, {wxSystemOptions, getOptionInt, 1}}, + {3525, {wxSystemOptions, hasOption, 1}}, + {3526, {wxSystemOptions, isFalse, 1}}, + {3527, {wxSystemOptions, setOption_2_1, 2}}, + {3528, {wxSystemOptions, setOption_2_0, 2}}, + {3529, {wxAuiNotebookEvent, setSelection, 1}}, + {3530, {wxAuiNotebookEvent, getSelection, 0}}, + {3531, {wxAuiNotebookEvent, setOldSelection, 1}}, + {3532, {wxAuiNotebookEvent, getOldSelection, 0}}, + {3533, {wxAuiNotebookEvent, setDragSource, 1}}, + {3534, {wxAuiNotebookEvent, getDragSource, 0}}, + {3535, {wxAuiManagerEvent, setManager, 1}}, + {3536, {wxAuiManagerEvent, getManager, 0}}, + {3537, {wxAuiManagerEvent, setPane, 1}}, + {3538, {wxAuiManagerEvent, getPane, 0}}, + {3539, {wxAuiManagerEvent, setButton, 1}}, + {3540, {wxAuiManagerEvent, getButton, 0}}, + {3541, {wxAuiManagerEvent, setDC, 1}}, + {3542, {wxAuiManagerEvent, getDC, 0}}, + {3543, {wxAuiManagerEvent, veto, 1}}, + {3544, {wxAuiManagerEvent, getVeto, 0}}, + {3545, {wxAuiManagerEvent, setCanVeto, 1}}, + {3546, {wxAuiManagerEvent, canVeto, 0}}, + {3547, {wxLogNull, new, 0}}, + {3548, {wxLogNull, 'Destroy', undefined}}, + {3549, {wxTaskBarIcon, new, 0}}, + {3550, {wxTaskBarIcon, destruct, 0}}, + {3551, {wxTaskBarIcon, popupMenu, 1}}, + {3552, {wxTaskBarIcon, removeIcon, 0}}, + {3553, {wxTaskBarIcon, setIcon, 2}}, + {3554, {wxLocale, new_0, 0}}, + {3556, {wxLocale, new_2, 2}}, + {3557, {wxLocale, destruct, 0}}, + {3559, {wxLocale, init, 1}}, + {3560, {wxLocale, addCatalog_1, 1}}, + {3561, {wxLocale, addCatalog_3, 3}}, + {3562, {wxLocale, addCatalogLookupPathPrefix, 1}}, + {3563, {wxLocale, getCanonicalName, 0}}, + {3564, {wxLocale, getLanguage, 0}}, + {3565, {wxLocale, getLanguageName, 1}}, + {3566, {wxLocale, getLocale, 0}}, + {3567, {wxLocale, getName, 0}}, + {3568, {wxLocale, getString_2, 2}}, + {3569, {wxLocale, getString_4, 4}}, + {3570, {wxLocale, getHeaderValue, 2}}, + {3571, {wxLocale, getSysName, 0}}, + {3572, {wxLocale, getSystemEncoding, 0}}, + {3573, {wxLocale, getSystemEncodingName, 0}}, + {3574, {wxLocale, getSystemLanguage, 0}}, + {3575, {wxLocale, isLoaded, 1}}, + {3576, {wxLocale, isOk, 0}}, + {3577, {wxActivateEvent, getActive, 0}}, + {3579, {wxPopupWindow, new_2, 2}}, + {3580, {wxPopupWindow, new_0, 0}}, + {3582, {wxPopupWindow, destruct, 0}}, + {3583, {wxPopupWindow, create, 2}}, + {3584, {wxPopupWindow, position, 2}}, + {3585, {wxPopupTransientWindow, new_0, 0}}, + {3586, {wxPopupTransientWindow, new_2, 2}}, + {3587, {wxPopupTransientWindow, destruct, 0}}, + {3588, {wxPopupTransientWindow, popup, 1}}, + {3589, {wxPopupTransientWindow, dismiss, 0}}, + {3590, {wxOverlay, new, 0}}, + {3591, {wxOverlay, destruct, 0}}, + {3592, {wxOverlay, reset, 0}}, + {3593, {wxDCOverlay, new_6, 6}}, + {3594, {wxDCOverlay, new_2, 2}}, + {3595, {wxDCOverlay, destruct, 0}}, + {3596, {wxDCOverlay, clear, 0}}, + {3597, {wxDropFilesEvent, getPosition, 0}}, + {3598, {wxDropFilesEvent, getNumberOfFiles, 0}}, + {3599, {wxDropFilesEvent, getFiles, 0}}, {-1, {mod, func, -1}} ]. diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl index 4713889b0b..af0cee0dcd 100644 --- a/lib/wx/src/gen/wxe_funcs.hrl +++ b/lib/wx/src/gen/wxe_funcs.hrl @@ -194,3182 +194,3183 @@ -define(wxWindow_CanSetTransparent, 286). -define(wxWindow_IsDoubleBuffered, 287). -define(wxWindow_SetDoubleBuffered, 288). --define(wxTopLevelWindow_GetIcon, 289). --define(wxTopLevelWindow_GetIcons, 290). --define(wxTopLevelWindow_GetTitle, 291). --define(wxTopLevelWindow_IsActive, 292). --define(wxTopLevelWindow_Iconize, 293). --define(wxTopLevelWindow_IsFullScreen, 294). --define(wxTopLevelWindow_IsIconized, 295). --define(wxTopLevelWindow_IsMaximized, 296). --define(wxTopLevelWindow_Maximize, 297). --define(wxTopLevelWindow_RequestUserAttention, 298). --define(wxTopLevelWindow_SetIcon, 299). --define(wxTopLevelWindow_SetIcons, 300). --define(wxTopLevelWindow_CenterOnScreen, 301). --define(wxTopLevelWindow_CentreOnScreen, 302). --define(wxTopLevelWindow_SetShape, 304). --define(wxTopLevelWindow_SetTitle, 305). --define(wxTopLevelWindow_ShowFullScreen, 306). --define(wxFrame_new_4, 308). --define(wxFrame_new_0, 309). --define(wxFrame_destruct, 311). --define(wxFrame_Create, 312). --define(wxFrame_CreateStatusBar, 313). --define(wxFrame_CreateToolBar, 314). --define(wxFrame_GetClientAreaOrigin, 315). --define(wxFrame_GetMenuBar, 316). --define(wxFrame_GetStatusBar, 317). --define(wxFrame_GetStatusBarPane, 318). --define(wxFrame_GetToolBar, 319). --define(wxFrame_ProcessCommand, 320). --define(wxFrame_SendSizeEvent, 321). --define(wxFrame_SetMenuBar, 322). --define(wxFrame_SetStatusBar, 323). --define(wxFrame_SetStatusBarPane, 324). --define(wxFrame_SetStatusText, 325). --define(wxFrame_SetStatusWidths, 326). --define(wxFrame_SetToolBar, 327). --define(wxMiniFrame_new_0, 328). --define(wxMiniFrame_new_4, 329). --define(wxMiniFrame_Create, 330). --define(wxMiniFrame_destroy, 331). --define(wxSplashScreen_new_0, 332). --define(wxSplashScreen_new_6, 333). --define(wxSplashScreen_destruct, 334). --define(wxSplashScreen_GetSplashStyle, 335). --define(wxSplashScreen_GetTimeout, 336). --define(wxPanel_new_0, 337). --define(wxPanel_new_6, 338). --define(wxPanel_new_2, 339). --define(wxPanel_destruct, 340). --define(wxPanel_InitDialog, 341). --define(wxPanel_SetFocusIgnoringChildren, 342). --define(wxScrolledWindow_new_0, 343). --define(wxScrolledWindow_new_2, 344). --define(wxScrolledWindow_destruct, 345). --define(wxScrolledWindow_CalcScrolledPosition_4, 346). --define(wxScrolledWindow_CalcScrolledPosition_1, 347). --define(wxScrolledWindow_CalcUnscrolledPosition_4, 348). --define(wxScrolledWindow_CalcUnscrolledPosition_1, 349). --define(wxScrolledWindow_EnableScrolling, 350). --define(wxScrolledWindow_GetScrollPixelsPerUnit, 351). --define(wxScrolledWindow_GetViewStart, 352). --define(wxScrolledWindow_DoPrepareDC, 353). --define(wxScrolledWindow_PrepareDC, 354). --define(wxScrolledWindow_Scroll, 355). --define(wxScrolledWindow_SetScrollbars, 356). --define(wxScrolledWindow_SetScrollRate, 357). --define(wxScrolledWindow_SetTargetWindow, 358). --define(wxSashWindow_new_0, 359). --define(wxSashWindow_new_2, 360). --define(wxSashWindow_destruct, 361). --define(wxSashWindow_GetSashVisible, 362). --define(wxSashWindow_GetMaximumSizeX, 363). --define(wxSashWindow_GetMaximumSizeY, 364). --define(wxSashWindow_GetMinimumSizeX, 365). --define(wxSashWindow_GetMinimumSizeY, 366). --define(wxSashWindow_SetMaximumSizeX, 367). --define(wxSashWindow_SetMaximumSizeY, 368). --define(wxSashWindow_SetMinimumSizeX, 369). --define(wxSashWindow_SetMinimumSizeY, 370). --define(wxSashWindow_SetSashVisible, 371). --define(wxSashLayoutWindow_new_0, 372). --define(wxSashLayoutWindow_new_2, 373). --define(wxSashLayoutWindow_Create, 374). --define(wxSashLayoutWindow_GetAlignment, 375). --define(wxSashLayoutWindow_GetOrientation, 376). --define(wxSashLayoutWindow_SetAlignment, 377). --define(wxSashLayoutWindow_SetDefaultSize, 378). --define(wxSashLayoutWindow_SetOrientation, 379). --define(wxSashLayoutWindow_destroy, 380). --define(wxGrid_new_0, 381). --define(wxGrid_new_3, 382). --define(wxGrid_new_4, 383). --define(wxGrid_destruct, 384). --define(wxGrid_AppendCols, 385). --define(wxGrid_AppendRows, 386). --define(wxGrid_AutoSize, 387). --define(wxGrid_AutoSizeColumn, 388). --define(wxGrid_AutoSizeColumns, 389). --define(wxGrid_AutoSizeRow, 390). --define(wxGrid_AutoSizeRows, 391). --define(wxGrid_BeginBatch, 392). --define(wxGrid_BlockToDeviceRect, 393). --define(wxGrid_CanDragColSize, 394). --define(wxGrid_CanDragRowSize, 395). --define(wxGrid_CanDragGridSize, 396). --define(wxGrid_CanEnableCellControl, 397). --define(wxGrid_CellToRect_2, 398). --define(wxGrid_CellToRect_1, 399). --define(wxGrid_ClearGrid, 400). --define(wxGrid_ClearSelection, 401). --define(wxGrid_CreateGrid, 402). --define(wxGrid_DeleteCols, 403). --define(wxGrid_DeleteRows, 404). --define(wxGrid_DisableCellEditControl, 405). --define(wxGrid_DisableDragColSize, 406). --define(wxGrid_DisableDragGridSize, 407). --define(wxGrid_DisableDragRowSize, 408). --define(wxGrid_EnableCellEditControl, 409). --define(wxGrid_EnableDragColSize, 410). --define(wxGrid_EnableDragGridSize, 411). --define(wxGrid_EnableDragRowSize, 412). --define(wxGrid_EnableEditing, 413). --define(wxGrid_EnableGridLines, 414). --define(wxGrid_EndBatch, 415). --define(wxGrid_Fit, 416). --define(wxGrid_ForceRefresh, 417). --define(wxGrid_GetBatchCount, 418). --define(wxGrid_GetCellAlignment, 419). --define(wxGrid_GetCellBackgroundColour, 420). --define(wxGrid_GetCellEditor, 421). --define(wxGrid_GetCellFont, 422). --define(wxGrid_GetCellRenderer, 423). --define(wxGrid_GetCellTextColour, 424). --define(wxGrid_GetCellValue_2, 425). --define(wxGrid_GetCellValue_1, 426). --define(wxGrid_GetColLabelAlignment, 427). --define(wxGrid_GetColLabelSize, 428). --define(wxGrid_GetColLabelValue, 429). --define(wxGrid_GetColMinimalAcceptableWidth, 430). --define(wxGrid_GetDefaultCellAlignment, 431). --define(wxGrid_GetDefaultCellBackgroundColour, 432). --define(wxGrid_GetDefaultCellFont, 433). --define(wxGrid_GetDefaultCellTextColour, 434). --define(wxGrid_GetDefaultColLabelSize, 435). --define(wxGrid_GetDefaultColSize, 436). --define(wxGrid_GetDefaultEditor, 437). --define(wxGrid_GetDefaultEditorForCell_2, 438). --define(wxGrid_GetDefaultEditorForCell_1, 439). --define(wxGrid_GetDefaultEditorForType, 440). --define(wxGrid_GetDefaultRenderer, 441). --define(wxGrid_GetDefaultRendererForCell, 442). --define(wxGrid_GetDefaultRendererForType, 443). --define(wxGrid_GetDefaultRowLabelSize, 444). --define(wxGrid_GetDefaultRowSize, 445). --define(wxGrid_GetGridCursorCol, 446). --define(wxGrid_GetGridCursorRow, 447). --define(wxGrid_GetGridLineColour, 448). --define(wxGrid_GridLinesEnabled, 449). --define(wxGrid_GetLabelBackgroundColour, 450). --define(wxGrid_GetLabelFont, 451). --define(wxGrid_GetLabelTextColour, 452). --define(wxGrid_GetNumberCols, 453). --define(wxGrid_GetNumberRows, 454). --define(wxGrid_GetOrCreateCellAttr, 455). --define(wxGrid_GetRowMinimalAcceptableHeight, 456). --define(wxGrid_GetRowLabelAlignment, 457). --define(wxGrid_GetRowLabelSize, 458). --define(wxGrid_GetRowLabelValue, 459). --define(wxGrid_GetRowSize, 460). --define(wxGrid_GetScrollLineX, 461). --define(wxGrid_GetScrollLineY, 462). --define(wxGrid_GetSelectedCells, 463). --define(wxGrid_GetSelectedCols, 464). --define(wxGrid_GetSelectedRows, 465). --define(wxGrid_GetSelectionBackground, 466). --define(wxGrid_GetSelectionBlockTopLeft, 467). --define(wxGrid_GetSelectionBlockBottomRight, 468). --define(wxGrid_GetSelectionForeground, 469). --define(wxGrid_GetViewWidth, 470). --define(wxGrid_GetGridWindow, 471). --define(wxGrid_GetGridRowLabelWindow, 472). --define(wxGrid_GetGridColLabelWindow, 473). --define(wxGrid_GetGridCornerLabelWindow, 474). --define(wxGrid_HideCellEditControl, 475). --define(wxGrid_InsertCols, 476). --define(wxGrid_InsertRows, 477). --define(wxGrid_IsCellEditControlEnabled, 478). --define(wxGrid_IsCurrentCellReadOnly, 479). --define(wxGrid_IsEditable, 480). --define(wxGrid_IsInSelection_2, 481). --define(wxGrid_IsInSelection_1, 482). --define(wxGrid_IsReadOnly, 483). --define(wxGrid_IsSelection, 484). --define(wxGrid_IsVisible_3, 485). --define(wxGrid_IsVisible_2, 486). --define(wxGrid_MakeCellVisible_2, 487). --define(wxGrid_MakeCellVisible_1, 488). --define(wxGrid_MoveCursorDown, 489). --define(wxGrid_MoveCursorLeft, 490). --define(wxGrid_MoveCursorRight, 491). --define(wxGrid_MoveCursorUp, 492). --define(wxGrid_MoveCursorDownBlock, 493). --define(wxGrid_MoveCursorLeftBlock, 494). --define(wxGrid_MoveCursorRightBlock, 495). --define(wxGrid_MoveCursorUpBlock, 496). --define(wxGrid_MovePageDown, 497). --define(wxGrid_MovePageUp, 498). --define(wxGrid_RegisterDataType, 499). --define(wxGrid_SaveEditControlValue, 500). --define(wxGrid_SelectAll, 501). --define(wxGrid_SelectBlock_5, 502). --define(wxGrid_SelectBlock_3, 503). --define(wxGrid_SelectCol, 504). --define(wxGrid_SelectRow, 505). --define(wxGrid_SetCellAlignment_4, 506). --define(wxGrid_SetCellAlignment_3, 507). --define(wxGrid_SetCellAlignment_1, 508). --define(wxGrid_SetCellBackgroundColour_3_0, 509). --define(wxGrid_SetCellBackgroundColour_1, 510). --define(wxGrid_SetCellBackgroundColour_3_1, 511). --define(wxGrid_SetCellEditor, 512). --define(wxGrid_SetCellFont, 513). --define(wxGrid_SetCellRenderer, 514). --define(wxGrid_SetCellTextColour_3_0, 515). --define(wxGrid_SetCellTextColour_3_1, 516). --define(wxGrid_SetCellTextColour_1, 517). --define(wxGrid_SetCellValue_3_0, 518). --define(wxGrid_SetCellValue_2, 519). --define(wxGrid_SetCellValue_3_1, 520). --define(wxGrid_SetColAttr, 521). --define(wxGrid_SetColFormatBool, 522). --define(wxGrid_SetColFormatNumber, 523). --define(wxGrid_SetColFormatFloat, 524). --define(wxGrid_SetColFormatCustom, 525). --define(wxGrid_SetColLabelAlignment, 526). --define(wxGrid_SetColLabelSize, 527). --define(wxGrid_SetColLabelValue, 528). --define(wxGrid_SetColMinimalWidth, 529). --define(wxGrid_SetColMinimalAcceptableWidth, 530). --define(wxGrid_SetColSize, 531). --define(wxGrid_SetDefaultCellAlignment, 532). --define(wxGrid_SetDefaultCellBackgroundColour, 533). --define(wxGrid_SetDefaultCellFont, 534). --define(wxGrid_SetDefaultCellTextColour, 535). --define(wxGrid_SetDefaultEditor, 536). --define(wxGrid_SetDefaultRenderer, 537). --define(wxGrid_SetDefaultColSize, 538). --define(wxGrid_SetDefaultRowSize, 539). --define(wxGrid_SetGridCursor, 540). --define(wxGrid_SetGridLineColour, 541). --define(wxGrid_SetLabelBackgroundColour, 542). --define(wxGrid_SetLabelFont, 543). --define(wxGrid_SetLabelTextColour, 544). --define(wxGrid_SetMargins, 545). --define(wxGrid_SetReadOnly, 546). --define(wxGrid_SetRowAttr, 547). --define(wxGrid_SetRowLabelAlignment, 548). --define(wxGrid_SetRowLabelSize, 549). --define(wxGrid_SetRowLabelValue, 550). --define(wxGrid_SetRowMinimalHeight, 551). --define(wxGrid_SetRowMinimalAcceptableHeight, 552). --define(wxGrid_SetRowSize, 553). --define(wxGrid_SetScrollLineX, 554). --define(wxGrid_SetScrollLineY, 555). --define(wxGrid_SetSelectionBackground, 556). --define(wxGrid_SetSelectionForeground, 557). --define(wxGrid_SetSelectionMode, 558). --define(wxGrid_ShowCellEditControl, 559). --define(wxGrid_XToCol, 560). --define(wxGrid_XToEdgeOfCol, 561). --define(wxGrid_YToEdgeOfRow, 562). --define(wxGrid_YToRow, 563). --define(wxGridCellRenderer_Draw, 564). --define(wxGridCellRenderer_GetBestSize, 565). --define(wxGridCellEditor_Create, 566). --define(wxGridCellEditor_IsCreated, 567). --define(wxGridCellEditor_SetSize, 568). --define(wxGridCellEditor_Show, 569). --define(wxGridCellEditor_PaintBackground, 570). --define(wxGridCellEditor_BeginEdit, 571). --define(wxGridCellEditor_EndEdit, 572). --define(wxGridCellEditor_Reset, 573). --define(wxGridCellEditor_StartingKey, 574). --define(wxGridCellEditor_StartingClick, 575). --define(wxGridCellEditor_HandleReturn, 576). --define(wxGridCellBoolRenderer_new, 577). --define(wxGridCellBoolRenderer_destroy, 578). --define(wxGridCellBoolEditor_new, 579). --define(wxGridCellBoolEditor_IsTrueValue, 580). --define(wxGridCellBoolEditor_UseStringValues, 581). --define(wxGridCellBoolEditor_destroy, 582). --define(wxGridCellFloatRenderer_new, 583). --define(wxGridCellFloatRenderer_GetPrecision, 584). --define(wxGridCellFloatRenderer_GetWidth, 585). --define(wxGridCellFloatRenderer_SetParameters, 586). --define(wxGridCellFloatRenderer_SetPrecision, 587). --define(wxGridCellFloatRenderer_SetWidth, 588). --define(wxGridCellFloatRenderer_destroy, 589). --define(wxGridCellFloatEditor_new, 590). --define(wxGridCellFloatEditor_SetParameters, 591). --define(wxGridCellFloatEditor_destroy, 592). --define(wxGridCellStringRenderer_new, 593). --define(wxGridCellStringRenderer_destroy, 594). --define(wxGridCellTextEditor_new, 595). --define(wxGridCellTextEditor_SetParameters, 596). --define(wxGridCellTextEditor_destroy, 597). --define(wxGridCellChoiceEditor_new, 599). --define(wxGridCellChoiceEditor_SetParameters, 600). --define(wxGridCellChoiceEditor_destroy, 601). --define(wxGridCellNumberRenderer_new, 602). --define(wxGridCellNumberRenderer_destroy, 603). --define(wxGridCellNumberEditor_new, 604). --define(wxGridCellNumberEditor_GetValue, 605). --define(wxGridCellNumberEditor_SetParameters, 606). --define(wxGridCellNumberEditor_destroy, 607). --define(wxGridCellAttr_SetTextColour, 608). --define(wxGridCellAttr_SetBackgroundColour, 609). --define(wxGridCellAttr_SetFont, 610). --define(wxGridCellAttr_SetAlignment, 611). --define(wxGridCellAttr_SetReadOnly, 612). --define(wxGridCellAttr_SetRenderer, 613). --define(wxGridCellAttr_SetEditor, 614). --define(wxGridCellAttr_HasTextColour, 615). --define(wxGridCellAttr_HasBackgroundColour, 616). --define(wxGridCellAttr_HasFont, 617). --define(wxGridCellAttr_HasAlignment, 618). --define(wxGridCellAttr_HasRenderer, 619). --define(wxGridCellAttr_HasEditor, 620). --define(wxGridCellAttr_GetTextColour, 621). --define(wxGridCellAttr_GetBackgroundColour, 622). --define(wxGridCellAttr_GetFont, 623). --define(wxGridCellAttr_GetAlignment, 624). --define(wxGridCellAttr_GetRenderer, 625). --define(wxGridCellAttr_GetEditor, 626). --define(wxGridCellAttr_IsReadOnly, 627). --define(wxGridCellAttr_SetDefAttr, 628). --define(wxDC_Blit, 629). --define(wxDC_CalcBoundingBox, 630). --define(wxDC_Clear, 631). --define(wxDC_ComputeScaleAndOrigin, 632). --define(wxDC_CrossHair, 633). --define(wxDC_DestroyClippingRegion, 634). --define(wxDC_DeviceToLogicalX, 635). --define(wxDC_DeviceToLogicalXRel, 636). --define(wxDC_DeviceToLogicalY, 637). --define(wxDC_DeviceToLogicalYRel, 638). --define(wxDC_DrawArc, 639). --define(wxDC_DrawBitmap, 640). --define(wxDC_DrawCheckMark, 641). --define(wxDC_DrawCircle, 642). --define(wxDC_DrawEllipse_2, 644). --define(wxDC_DrawEllipse_1, 645). --define(wxDC_DrawEllipticArc, 646). --define(wxDC_DrawIcon, 647). --define(wxDC_DrawLabel, 648). --define(wxDC_DrawLine, 649). --define(wxDC_DrawLines, 650). --define(wxDC_DrawPolygon, 652). --define(wxDC_DrawPoint, 654). --define(wxDC_DrawRectangle_2, 656). --define(wxDC_DrawRectangle_1, 657). --define(wxDC_DrawRotatedText, 658). --define(wxDC_DrawRoundedRectangle_3, 660). --define(wxDC_DrawRoundedRectangle_2, 661). --define(wxDC_DrawText, 662). --define(wxDC_EndDoc, 663). --define(wxDC_EndPage, 664). --define(wxDC_FloodFill, 665). --define(wxDC_GetBackground, 666). --define(wxDC_GetBackgroundMode, 667). --define(wxDC_GetBrush, 668). --define(wxDC_GetCharHeight, 669). --define(wxDC_GetCharWidth, 670). --define(wxDC_GetClippingBox, 671). --define(wxDC_GetFont, 673). --define(wxDC_GetLayoutDirection, 674). --define(wxDC_GetLogicalFunction, 675). --define(wxDC_GetMapMode, 676). --define(wxDC_GetMultiLineTextExtent_4, 677). --define(wxDC_GetMultiLineTextExtent_1, 678). --define(wxDC_GetPartialTextExtents, 679). --define(wxDC_GetPen, 680). --define(wxDC_GetPixel, 681). --define(wxDC_GetPPI, 682). --define(wxDC_GetSize, 684). --define(wxDC_GetSizeMM, 686). --define(wxDC_GetTextBackground, 687). --define(wxDC_GetTextExtent_4, 688). --define(wxDC_GetTextExtent_1, 689). --define(wxDC_GetTextForeground, 691). --define(wxDC_GetUserScale, 692). --define(wxDC_GradientFillConcentric_3, 693). --define(wxDC_GradientFillConcentric_4, 694). --define(wxDC_GradientFillLinear, 695). --define(wxDC_LogicalToDeviceX, 696). --define(wxDC_LogicalToDeviceXRel, 697). --define(wxDC_LogicalToDeviceY, 698). --define(wxDC_LogicalToDeviceYRel, 699). --define(wxDC_MaxX, 700). --define(wxDC_MaxY, 701). --define(wxDC_MinX, 702). --define(wxDC_MinY, 703). --define(wxDC_IsOk, 704). --define(wxDC_ResetBoundingBox, 705). --define(wxDC_SetAxisOrientation, 706). --define(wxDC_SetBackground, 707). --define(wxDC_SetBackgroundMode, 708). --define(wxDC_SetBrush, 709). --define(wxDC_SetClippingRegion_2, 711). --define(wxDC_SetClippingRegion_1_1, 712). --define(wxDC_SetClippingRegion_1_0, 713). --define(wxDC_SetDeviceOrigin, 714). --define(wxDC_SetFont, 715). --define(wxDC_SetLayoutDirection, 716). --define(wxDC_SetLogicalFunction, 717). --define(wxDC_SetMapMode, 718). --define(wxDC_SetPalette, 719). --define(wxDC_SetPen, 720). --define(wxDC_SetTextBackground, 721). --define(wxDC_SetTextForeground, 722). --define(wxDC_SetUserScale, 723). --define(wxDC_StartDoc, 724). --define(wxDC_StartPage, 725). --define(wxMirrorDC_new, 726). --define(wxMirrorDC_destroy, 727). --define(wxScreenDC_new, 728). --define(wxScreenDC_destruct, 729). --define(wxPostScriptDC_new_0, 730). --define(wxPostScriptDC_new_1, 731). --define(wxPostScriptDC_destruct, 732). --define(wxPostScriptDC_SetResolution, 733). --define(wxPostScriptDC_GetResolution, 734). --define(wxWindowDC_new_0, 735). --define(wxWindowDC_new_1, 736). --define(wxWindowDC_destruct, 737). --define(wxClientDC_new_0, 738). --define(wxClientDC_new_1, 739). --define(wxClientDC_destroy, 740). --define(wxPaintDC_new_0, 741). --define(wxPaintDC_new_1, 742). --define(wxPaintDC_destroy, 743). --define(wxMemoryDC_new_1_0, 745). --define(wxMemoryDC_new_1_1, 746). --define(wxMemoryDC_new_0, 747). --define(wxMemoryDC_destruct, 749). --define(wxMemoryDC_SelectObject, 750). --define(wxMemoryDC_SelectObjectAsSource, 751). --define(wxBufferedDC_new_0, 752). --define(wxBufferedDC_new_2, 753). --define(wxBufferedDC_new_3, 754). --define(wxBufferedDC_destruct, 755). --define(wxBufferedDC_Init_2, 756). --define(wxBufferedDC_Init_3, 757). --define(wxBufferedPaintDC_new_3, 758). --define(wxBufferedPaintDC_new_2, 759). --define(wxBufferedPaintDC_destruct, 760). --define(wxGraphicsObject_destruct, 761). --define(wxGraphicsObject_GetRenderer, 762). --define(wxGraphicsObject_IsNull, 763). --define(wxGraphicsContext_destruct, 764). --define(wxGraphicsContext_Create_1_1, 765). --define(wxGraphicsContext_Create_1_0, 766). --define(wxGraphicsContext_Create_0, 767). --define(wxGraphicsContext_CreatePen, 768). --define(wxGraphicsContext_CreateBrush, 769). --define(wxGraphicsContext_CreateRadialGradientBrush, 770). --define(wxGraphicsContext_CreateLinearGradientBrush, 771). --define(wxGraphicsContext_CreateFont, 772). --define(wxGraphicsContext_CreateMatrix, 773). --define(wxGraphicsContext_CreatePath, 774). --define(wxGraphicsContext_Clip_1, 775). --define(wxGraphicsContext_Clip_4, 776). --define(wxGraphicsContext_ResetClip, 777). --define(wxGraphicsContext_DrawBitmap, 778). --define(wxGraphicsContext_DrawEllipse, 779). --define(wxGraphicsContext_DrawIcon, 780). --define(wxGraphicsContext_DrawLines, 781). --define(wxGraphicsContext_DrawPath, 782). --define(wxGraphicsContext_DrawRectangle, 783). --define(wxGraphicsContext_DrawRoundedRectangle, 784). --define(wxGraphicsContext_DrawText_3, 785). --define(wxGraphicsContext_DrawText_4_0, 786). --define(wxGraphicsContext_DrawText_4_1, 787). --define(wxGraphicsContext_DrawText_5, 788). --define(wxGraphicsContext_FillPath, 789). --define(wxGraphicsContext_StrokePath, 790). --define(wxGraphicsContext_GetPartialTextExtents, 791). --define(wxGraphicsContext_GetTextExtent, 792). --define(wxGraphicsContext_Rotate, 793). --define(wxGraphicsContext_Scale, 794). --define(wxGraphicsContext_Translate, 795). --define(wxGraphicsContext_GetTransform, 796). --define(wxGraphicsContext_SetTransform, 797). --define(wxGraphicsContext_ConcatTransform, 798). --define(wxGraphicsContext_SetBrush_1_1, 799). --define(wxGraphicsContext_SetBrush_1_0, 800). --define(wxGraphicsContext_SetFont_1, 801). --define(wxGraphicsContext_SetFont_2, 802). --define(wxGraphicsContext_SetPen_1_0, 803). --define(wxGraphicsContext_SetPen_1_1, 804). --define(wxGraphicsContext_StrokeLine, 805). --define(wxGraphicsContext_StrokeLines, 806). --define(wxGraphicsMatrix_Concat, 808). --define(wxGraphicsMatrix_Get, 810). --define(wxGraphicsMatrix_Invert, 811). --define(wxGraphicsMatrix_IsEqual, 812). --define(wxGraphicsMatrix_IsIdentity, 814). --define(wxGraphicsMatrix_Rotate, 815). --define(wxGraphicsMatrix_Scale, 816). --define(wxGraphicsMatrix_Translate, 817). --define(wxGraphicsMatrix_Set, 818). --define(wxGraphicsMatrix_TransformPoint, 819). --define(wxGraphicsMatrix_TransformDistance, 820). --define(wxGraphicsPath_MoveToPoint_2, 821). --define(wxGraphicsPath_MoveToPoint_1, 822). --define(wxGraphicsPath_AddArc_6, 823). --define(wxGraphicsPath_AddArc_5, 824). --define(wxGraphicsPath_AddArcToPoint, 825). --define(wxGraphicsPath_AddCircle, 826). --define(wxGraphicsPath_AddCurveToPoint_6, 827). --define(wxGraphicsPath_AddCurveToPoint_3, 828). --define(wxGraphicsPath_AddEllipse, 829). --define(wxGraphicsPath_AddLineToPoint_2, 830). --define(wxGraphicsPath_AddLineToPoint_1, 831). --define(wxGraphicsPath_AddPath, 832). --define(wxGraphicsPath_AddQuadCurveToPoint, 833). --define(wxGraphicsPath_AddRectangle, 834). --define(wxGraphicsPath_AddRoundedRectangle, 835). --define(wxGraphicsPath_CloseSubpath, 836). --define(wxGraphicsPath_Contains_3, 837). --define(wxGraphicsPath_Contains_2, 838). --define(wxGraphicsPath_GetBox, 840). --define(wxGraphicsPath_GetCurrentPoint, 842). --define(wxGraphicsPath_Transform, 843). --define(wxGraphicsRenderer_GetDefaultRenderer, 844). --define(wxGraphicsRenderer_CreateContext_1_1, 845). --define(wxGraphicsRenderer_CreateContext_1_0, 846). --define(wxGraphicsRenderer_CreatePen, 847). --define(wxGraphicsRenderer_CreateBrush, 848). --define(wxGraphicsRenderer_CreateLinearGradientBrush, 849). --define(wxGraphicsRenderer_CreateRadialGradientBrush, 850). --define(wxGraphicsRenderer_CreateFont, 851). --define(wxGraphicsRenderer_CreateMatrix, 852). --define(wxGraphicsRenderer_CreatePath, 853). --define(wxMenuBar_new_1, 855). --define(wxMenuBar_new_0, 857). --define(wxMenuBar_destruct, 859). --define(wxMenuBar_Append, 860). --define(wxMenuBar_Check, 861). --define(wxMenuBar_Enable_2, 862). --define(wxMenuBar_Enable_1, 863). --define(wxMenuBar_EnableTop, 864). --define(wxMenuBar_FindMenu, 865). --define(wxMenuBar_FindMenuItem, 866). --define(wxMenuBar_FindItem, 867). --define(wxMenuBar_GetHelpString, 868). --define(wxMenuBar_GetLabel_1, 869). --define(wxMenuBar_GetLabel_0, 870). --define(wxMenuBar_GetLabelTop, 871). --define(wxMenuBar_GetMenu, 872). --define(wxMenuBar_GetMenuCount, 873). --define(wxMenuBar_Insert, 874). --define(wxMenuBar_IsChecked, 875). --define(wxMenuBar_IsEnabled_1, 876). --define(wxMenuBar_IsEnabled_0, 877). --define(wxMenuBar_Remove, 878). --define(wxMenuBar_Replace, 879). --define(wxMenuBar_SetHelpString, 880). --define(wxMenuBar_SetLabel_2, 881). --define(wxMenuBar_SetLabel_1, 882). --define(wxMenuBar_SetLabelTop, 883). --define(wxControl_GetLabel, 884). --define(wxControl_SetLabel, 885). --define(wxControlWithItems_Append_1, 886). --define(wxControlWithItems_Append_2, 887). --define(wxControlWithItems_appendStrings_1, 888). --define(wxControlWithItems_Clear, 889). --define(wxControlWithItems_Delete, 890). --define(wxControlWithItems_FindString, 891). --define(wxControlWithItems_getClientData, 892). --define(wxControlWithItems_setClientData, 893). --define(wxControlWithItems_GetCount, 894). --define(wxControlWithItems_GetSelection, 895). --define(wxControlWithItems_GetString, 896). --define(wxControlWithItems_GetStringSelection, 897). --define(wxControlWithItems_Insert_2, 898). --define(wxControlWithItems_Insert_3, 899). --define(wxControlWithItems_IsEmpty, 900). --define(wxControlWithItems_Select, 901). --define(wxControlWithItems_SetSelection, 902). --define(wxControlWithItems_SetString, 903). --define(wxControlWithItems_SetStringSelection, 904). --define(wxMenu_new_2, 907). --define(wxMenu_new_1, 908). --define(wxMenu_destruct, 910). --define(wxMenu_Append_3, 911). --define(wxMenu_Append_1, 912). --define(wxMenu_Append_4_0, 913). --define(wxMenu_Append_4_1, 914). --define(wxMenu_AppendCheckItem, 915). --define(wxMenu_AppendRadioItem, 916). --define(wxMenu_AppendSeparator, 917). --define(wxMenu_Break, 918). --define(wxMenu_Check, 919). --define(wxMenu_Delete_1_0, 920). --define(wxMenu_Delete_1_1, 921). --define(wxMenu_Destroy_1_0, 922). --define(wxMenu_Destroy_1_1, 923). --define(wxMenu_Enable, 924). --define(wxMenu_FindItem_1, 925). --define(wxMenu_FindItem_2, 926). --define(wxMenu_FindItemByPosition, 927). --define(wxMenu_GetHelpString, 928). --define(wxMenu_GetLabel, 929). --define(wxMenu_GetMenuItemCount, 930). --define(wxMenu_GetMenuItems, 931). --define(wxMenu_GetTitle, 933). --define(wxMenu_Insert_2, 934). --define(wxMenu_Insert_3, 935). --define(wxMenu_Insert_5_1, 936). --define(wxMenu_Insert_5_0, 937). --define(wxMenu_InsertCheckItem, 938). --define(wxMenu_InsertRadioItem, 939). --define(wxMenu_InsertSeparator, 940). --define(wxMenu_IsChecked, 941). --define(wxMenu_IsEnabled, 942). --define(wxMenu_Prepend_1, 943). --define(wxMenu_Prepend_2, 944). --define(wxMenu_Prepend_4_1, 945). --define(wxMenu_Prepend_4_0, 946). --define(wxMenu_PrependCheckItem, 947). --define(wxMenu_PrependRadioItem, 948). --define(wxMenu_PrependSeparator, 949). --define(wxMenu_Remove_1_0, 950). --define(wxMenu_Remove_1_1, 951). --define(wxMenu_SetHelpString, 952). --define(wxMenu_SetLabel, 953). --define(wxMenu_SetTitle, 954). --define(wxMenuItem_new, 955). --define(wxMenuItem_destruct, 957). --define(wxMenuItem_Check, 958). --define(wxMenuItem_Enable, 959). --define(wxMenuItem_GetBitmap, 960). --define(wxMenuItem_GetHelp, 961). --define(wxMenuItem_GetId, 962). --define(wxMenuItem_GetKind, 963). --define(wxMenuItem_GetLabel, 964). --define(wxMenuItem_GetLabelFromText, 965). --define(wxMenuItem_GetMenu, 966). --define(wxMenuItem_GetText, 967). --define(wxMenuItem_GetSubMenu, 968). --define(wxMenuItem_IsCheckable, 969). --define(wxMenuItem_IsChecked, 970). --define(wxMenuItem_IsEnabled, 971). --define(wxMenuItem_IsSeparator, 972). --define(wxMenuItem_IsSubMenu, 973). --define(wxMenuItem_SetBitmap, 974). --define(wxMenuItem_SetHelp, 975). --define(wxMenuItem_SetMenu, 976). --define(wxMenuItem_SetSubMenu, 977). --define(wxMenuItem_SetText, 978). --define(wxToolBar_AddControl, 979). --define(wxToolBar_AddSeparator, 980). --define(wxToolBar_AddTool_5, 981). --define(wxToolBar_AddTool_4_0, 982). --define(wxToolBar_AddTool_1, 983). --define(wxToolBar_AddTool_4_1, 984). --define(wxToolBar_AddTool_3, 985). --define(wxToolBar_AddTool_6, 986). --define(wxToolBar_AddCheckTool, 987). --define(wxToolBar_AddRadioTool, 988). --define(wxToolBar_AddStretchableSpace, 989). --define(wxToolBar_InsertStretchableSpace, 990). --define(wxToolBar_DeleteTool, 991). --define(wxToolBar_DeleteToolByPos, 992). --define(wxToolBar_EnableTool, 993). --define(wxToolBar_FindById, 994). --define(wxToolBar_FindControl, 995). --define(wxToolBar_FindToolForPosition, 996). --define(wxToolBar_GetToolSize, 997). --define(wxToolBar_GetToolBitmapSize, 998). --define(wxToolBar_GetMargins, 999). --define(wxToolBar_GetToolEnabled, 1000). --define(wxToolBar_GetToolLongHelp, 1001). --define(wxToolBar_GetToolPacking, 1002). --define(wxToolBar_GetToolPos, 1003). --define(wxToolBar_GetToolSeparation, 1004). --define(wxToolBar_GetToolShortHelp, 1005). --define(wxToolBar_GetToolState, 1006). --define(wxToolBar_InsertControl, 1007). --define(wxToolBar_InsertSeparator, 1008). --define(wxToolBar_InsertTool_5, 1009). --define(wxToolBar_InsertTool_2, 1010). --define(wxToolBar_InsertTool_4, 1011). --define(wxToolBar_Realize, 1012). --define(wxToolBar_RemoveTool, 1013). --define(wxToolBar_SetMargins, 1014). --define(wxToolBar_SetToolBitmapSize, 1015). --define(wxToolBar_SetToolLongHelp, 1016). --define(wxToolBar_SetToolPacking, 1017). --define(wxToolBar_SetToolShortHelp, 1018). --define(wxToolBar_SetToolSeparation, 1019). --define(wxToolBar_ToggleTool, 1020). --define(wxStatusBar_new_0, 1022). --define(wxStatusBar_new_2, 1023). --define(wxStatusBar_destruct, 1025). --define(wxStatusBar_Create, 1026). --define(wxStatusBar_GetFieldRect, 1027). --define(wxStatusBar_GetFieldsCount, 1028). --define(wxStatusBar_GetStatusText, 1029). --define(wxStatusBar_PopStatusText, 1030). --define(wxStatusBar_PushStatusText, 1031). --define(wxStatusBar_SetFieldsCount, 1032). --define(wxStatusBar_SetMinHeight, 1033). --define(wxStatusBar_SetStatusText, 1034). --define(wxStatusBar_SetStatusWidths, 1035). --define(wxStatusBar_SetStatusStyles, 1036). --define(wxBitmap_new_0, 1037). --define(wxBitmap_new_3, 1038). --define(wxBitmap_new_4, 1039). --define(wxBitmap_new_2_0, 1040). --define(wxBitmap_new_2_1, 1041). --define(wxBitmap_destruct, 1042). --define(wxBitmap_ConvertToImage, 1043). --define(wxBitmap_CopyFromIcon, 1044). --define(wxBitmap_Create, 1045). --define(wxBitmap_GetDepth, 1046). --define(wxBitmap_GetHeight, 1047). --define(wxBitmap_GetPalette, 1048). --define(wxBitmap_GetMask, 1049). --define(wxBitmap_GetWidth, 1050). --define(wxBitmap_GetSubBitmap, 1051). --define(wxBitmap_LoadFile, 1052). --define(wxBitmap_Ok, 1053). --define(wxBitmap_SaveFile, 1054). --define(wxBitmap_SetDepth, 1055). --define(wxBitmap_SetHeight, 1056). --define(wxBitmap_SetMask, 1057). --define(wxBitmap_SetPalette, 1058). --define(wxBitmap_SetWidth, 1059). --define(wxIcon_new_0, 1060). --define(wxIcon_new_2, 1061). --define(wxIcon_new_1, 1062). --define(wxIcon_CopyFromBitmap, 1063). --define(wxIcon_destroy, 1064). --define(wxIconBundle_new_0, 1065). --define(wxIconBundle_new_2, 1066). --define(wxIconBundle_new_1_0, 1067). --define(wxIconBundle_new_1_1, 1068). --define(wxIconBundle_destruct, 1069). --define(wxIconBundle_AddIcon_2, 1070). --define(wxIconBundle_AddIcon_1, 1071). --define(wxIconBundle_GetIcon_1_1, 1072). --define(wxIconBundle_GetIcon_1_0, 1073). --define(wxCursor_new_0, 1074). --define(wxCursor_new_1_0, 1075). --define(wxCursor_new_1_1, 1076). --define(wxCursor_new_4, 1077). --define(wxCursor_destruct, 1078). --define(wxCursor_Ok, 1079). --define(wxMask_new_0, 1080). --define(wxMask_new_2_1, 1081). --define(wxMask_new_2_0, 1082). --define(wxMask_new_1, 1083). --define(wxMask_destruct, 1084). --define(wxMask_Create_2_1, 1085). --define(wxMask_Create_2_0, 1086). --define(wxMask_Create_1, 1087). --define(wxImage_new_0, 1088). --define(wxImage_new_3_0, 1089). --define(wxImage_new_4, 1090). --define(wxImage_new_5, 1091). --define(wxImage_new_2, 1092). --define(wxImage_new_3_1, 1093). --define(wxImage_Blur, 1094). --define(wxImage_BlurHorizontal, 1095). --define(wxImage_BlurVertical, 1096). --define(wxImage_ConvertAlphaToMask, 1097). --define(wxImage_ConvertToGreyscale, 1098). --define(wxImage_ConvertToMono, 1099). --define(wxImage_Copy, 1100). --define(wxImage_Create_3, 1101). --define(wxImage_Create_4, 1102). --define(wxImage_Create_5, 1103). --define(wxImage_Destroy, 1104). --define(wxImage_FindFirstUnusedColour, 1105). --define(wxImage_GetImageExtWildcard, 1106). --define(wxImage_GetAlpha_2, 1107). --define(wxImage_GetAlpha_0, 1108). --define(wxImage_GetBlue, 1109). --define(wxImage_GetData, 1110). --define(wxImage_GetGreen, 1111). --define(wxImage_GetImageCount, 1112). --define(wxImage_GetHeight, 1113). --define(wxImage_GetMaskBlue, 1114). --define(wxImage_GetMaskGreen, 1115). --define(wxImage_GetMaskRed, 1116). --define(wxImage_GetOrFindMaskColour, 1117). --define(wxImage_GetPalette, 1118). --define(wxImage_GetRed, 1119). --define(wxImage_GetSubImage, 1120). --define(wxImage_GetWidth, 1121). --define(wxImage_HasAlpha, 1122). --define(wxImage_HasMask, 1123). --define(wxImage_GetOption, 1124). --define(wxImage_GetOptionInt, 1125). --define(wxImage_HasOption, 1126). --define(wxImage_InitAlpha, 1127). --define(wxImage_InitStandardHandlers, 1128). --define(wxImage_IsTransparent, 1129). --define(wxImage_LoadFile_2, 1130). --define(wxImage_LoadFile_3, 1131). --define(wxImage_Ok, 1132). --define(wxImage_RemoveHandler, 1133). --define(wxImage_Mirror, 1134). --define(wxImage_Replace, 1135). --define(wxImage_Rescale, 1136). --define(wxImage_Resize, 1137). --define(wxImage_Rotate, 1138). --define(wxImage_RotateHue, 1139). --define(wxImage_Rotate90, 1140). --define(wxImage_SaveFile_1, 1141). --define(wxImage_SaveFile_2_0, 1142). --define(wxImage_SaveFile_2_1, 1143). --define(wxImage_Scale, 1144). --define(wxImage_Size, 1145). --define(wxImage_SetAlpha_3, 1146). --define(wxImage_SetAlpha_2, 1147). --define(wxImage_SetData_2, 1148). --define(wxImage_SetData_4, 1149). --define(wxImage_SetMask, 1150). --define(wxImage_SetMaskColour, 1151). --define(wxImage_SetMaskFromImage, 1152). --define(wxImage_SetOption_2_1, 1153). --define(wxImage_SetOption_2_0, 1154). --define(wxImage_SetPalette, 1155). --define(wxImage_SetRGB_5, 1156). --define(wxImage_SetRGB_4, 1157). --define(wxImage_destroy, 1158). --define(wxBrush_new_0, 1159). --define(wxBrush_new_2, 1160). --define(wxBrush_new_1, 1161). --define(wxBrush_destruct, 1163). --define(wxBrush_GetColour, 1164). --define(wxBrush_GetStipple, 1165). --define(wxBrush_GetStyle, 1166). --define(wxBrush_IsHatch, 1167). --define(wxBrush_IsOk, 1168). --define(wxBrush_SetColour_1, 1169). --define(wxBrush_SetColour_3, 1170). --define(wxBrush_SetStipple, 1171). --define(wxBrush_SetStyle, 1172). --define(wxPen_new_0, 1173). --define(wxPen_new_2, 1174). --define(wxPen_destruct, 1175). --define(wxPen_GetCap, 1176). --define(wxPen_GetColour, 1177). --define(wxPen_GetJoin, 1178). --define(wxPen_GetStyle, 1179). --define(wxPen_GetWidth, 1180). --define(wxPen_IsOk, 1181). --define(wxPen_SetCap, 1182). --define(wxPen_SetColour_1, 1183). --define(wxPen_SetColour_3, 1184). --define(wxPen_SetJoin, 1185). --define(wxPen_SetStyle, 1186). --define(wxPen_SetWidth, 1187). --define(wxRegion_new_0, 1188). --define(wxRegion_new_4, 1189). --define(wxRegion_new_2, 1190). --define(wxRegion_new_1_1, 1191). --define(wxRegion_new_1_0, 1193). --define(wxRegion_destruct, 1195). --define(wxRegion_Clear, 1196). --define(wxRegion_Contains_2, 1197). --define(wxRegion_Contains_1_0, 1198). --define(wxRegion_Contains_4, 1199). --define(wxRegion_Contains_1_1, 1200). --define(wxRegion_ConvertToBitmap, 1201). --define(wxRegion_GetBox, 1202). --define(wxRegion_Intersect_4, 1203). --define(wxRegion_Intersect_1_1, 1204). --define(wxRegion_Intersect_1_0, 1205). --define(wxRegion_IsEmpty, 1206). --define(wxRegion_Subtract_4, 1207). --define(wxRegion_Subtract_1_1, 1208). --define(wxRegion_Subtract_1_0, 1209). --define(wxRegion_Offset_2, 1210). --define(wxRegion_Offset_1, 1211). --define(wxRegion_Union_4, 1212). --define(wxRegion_Union_1_2, 1213). --define(wxRegion_Union_1_1, 1214). --define(wxRegion_Union_1_0, 1215). --define(wxRegion_Union_3, 1216). --define(wxRegion_Xor_4, 1217). --define(wxRegion_Xor_1_1, 1218). --define(wxRegion_Xor_1_0, 1219). --define(wxAcceleratorTable_new_0, 1220). --define(wxAcceleratorTable_new_2, 1221). --define(wxAcceleratorTable_destruct, 1222). --define(wxAcceleratorTable_Ok, 1223). --define(wxAcceleratorEntry_new_1_0, 1224). --define(wxAcceleratorEntry_new_1_1, 1225). --define(wxAcceleratorEntry_GetCommand, 1226). --define(wxAcceleratorEntry_GetFlags, 1227). --define(wxAcceleratorEntry_GetKeyCode, 1228). --define(wxAcceleratorEntry_Set, 1229). --define(wxAcceleratorEntry_destroy, 1230). --define(wxCaret_new_3, 1235). --define(wxCaret_new_2, 1236). --define(wxCaret_destruct, 1238). --define(wxCaret_Create_3, 1239). --define(wxCaret_Create_2, 1240). --define(wxCaret_GetBlinkTime, 1241). --define(wxCaret_GetPosition, 1243). --define(wxCaret_GetSize, 1245). --define(wxCaret_GetWindow, 1246). --define(wxCaret_Hide, 1247). --define(wxCaret_IsOk, 1248). --define(wxCaret_IsVisible, 1249). --define(wxCaret_Move_2, 1250). --define(wxCaret_Move_1, 1251). --define(wxCaret_SetBlinkTime, 1252). --define(wxCaret_SetSize_2, 1253). --define(wxCaret_SetSize_1, 1254). --define(wxCaret_Show, 1255). --define(wxSizer_Add_2_1, 1256). --define(wxSizer_Add_2_0, 1257). --define(wxSizer_Add_3, 1258). --define(wxSizer_Add_2_3, 1259). --define(wxSizer_Add_2_2, 1260). --define(wxSizer_AddSpacer, 1261). --define(wxSizer_AddStretchSpacer, 1262). --define(wxSizer_CalcMin, 1263). --define(wxSizer_Clear, 1264). --define(wxSizer_Detach_1_2, 1265). --define(wxSizer_Detach_1_1, 1266). --define(wxSizer_Detach_1_0, 1267). --define(wxSizer_Fit, 1268). --define(wxSizer_FitInside, 1269). --define(wxSizer_GetChildren, 1270). --define(wxSizer_GetItem_2_1, 1271). --define(wxSizer_GetItem_2_0, 1272). --define(wxSizer_GetItem_1, 1273). --define(wxSizer_GetSize, 1274). --define(wxSizer_GetPosition, 1275). --define(wxSizer_GetMinSize, 1276). --define(wxSizer_Hide_2_0, 1277). --define(wxSizer_Hide_2_1, 1278). --define(wxSizer_Hide_1, 1279). --define(wxSizer_Insert_3_1, 1280). --define(wxSizer_Insert_3_0, 1281). --define(wxSizer_Insert_4, 1282). --define(wxSizer_Insert_3_3, 1283). --define(wxSizer_Insert_3_2, 1284). --define(wxSizer_Insert_2, 1285). --define(wxSizer_InsertSpacer, 1286). --define(wxSizer_InsertStretchSpacer, 1287). --define(wxSizer_IsShown_1_2, 1288). --define(wxSizer_IsShown_1_1, 1289). --define(wxSizer_IsShown_1_0, 1290). --define(wxSizer_Layout, 1291). --define(wxSizer_Prepend_2_1, 1292). --define(wxSizer_Prepend_2_0, 1293). --define(wxSizer_Prepend_3, 1294). --define(wxSizer_Prepend_2_3, 1295). --define(wxSizer_Prepend_2_2, 1296). --define(wxSizer_Prepend_1, 1297). --define(wxSizer_PrependSpacer, 1298). --define(wxSizer_PrependStretchSpacer, 1299). --define(wxSizer_RecalcSizes, 1300). --define(wxSizer_Remove_1_1, 1301). --define(wxSizer_Remove_1_0, 1302). --define(wxSizer_Replace_3_1, 1303). --define(wxSizer_Replace_3_0, 1304). --define(wxSizer_Replace_2, 1305). --define(wxSizer_SetDimension, 1306). --define(wxSizer_SetMinSize_2, 1307). --define(wxSizer_SetMinSize_1, 1308). --define(wxSizer_SetItemMinSize_3_2, 1309). --define(wxSizer_SetItemMinSize_2_2, 1310). --define(wxSizer_SetItemMinSize_3_1, 1311). --define(wxSizer_SetItemMinSize_2_1, 1312). --define(wxSizer_SetItemMinSize_3_0, 1313). --define(wxSizer_SetItemMinSize_2_0, 1314). --define(wxSizer_SetSizeHints, 1315). --define(wxSizer_SetVirtualSizeHints, 1316). --define(wxSizer_Show_2_2, 1317). --define(wxSizer_Show_2_1, 1318). --define(wxSizer_Show_2_0, 1319). --define(wxSizer_Show_1, 1320). --define(wxSizerFlags_new, 1321). --define(wxSizerFlags_Align, 1322). --define(wxSizerFlags_Border_2, 1323). --define(wxSizerFlags_Border_1, 1324). --define(wxSizerFlags_Center, 1325). --define(wxSizerFlags_Centre, 1326). --define(wxSizerFlags_Expand, 1327). --define(wxSizerFlags_Left, 1328). --define(wxSizerFlags_Proportion, 1329). --define(wxSizerFlags_Right, 1330). --define(wxSizerFlags_destroy, 1331). --define(wxSizerItem_new_5_1, 1332). --define(wxSizerItem_new_2_1, 1333). --define(wxSizerItem_new_5_0, 1334). --define(wxSizerItem_new_2_0, 1335). --define(wxSizerItem_new_6, 1336). --define(wxSizerItem_new_3, 1337). --define(wxSizerItem_new_0, 1338). --define(wxSizerItem_destruct, 1339). --define(wxSizerItem_CalcMin, 1340). --define(wxSizerItem_DeleteWindows, 1341). --define(wxSizerItem_DetachSizer, 1342). --define(wxSizerItem_GetBorder, 1343). --define(wxSizerItem_GetFlag, 1344). --define(wxSizerItem_GetMinSize, 1345). --define(wxSizerItem_GetPosition, 1346). --define(wxSizerItem_GetProportion, 1347). --define(wxSizerItem_GetRatio, 1348). --define(wxSizerItem_GetRect, 1349). --define(wxSizerItem_GetSize, 1350). --define(wxSizerItem_GetSizer, 1351). --define(wxSizerItem_GetSpacer, 1352). --define(wxSizerItem_GetUserData, 1353). --define(wxSizerItem_GetWindow, 1354). --define(wxSizerItem_IsSizer, 1355). --define(wxSizerItem_IsShown, 1356). --define(wxSizerItem_IsSpacer, 1357). --define(wxSizerItem_IsWindow, 1358). --define(wxSizerItem_SetBorder, 1359). --define(wxSizerItem_SetDimension, 1360). --define(wxSizerItem_SetFlag, 1361). --define(wxSizerItem_SetInitSize, 1362). --define(wxSizerItem_SetMinSize_1, 1363). --define(wxSizerItem_SetMinSize_2, 1364). --define(wxSizerItem_SetProportion, 1365). --define(wxSizerItem_SetRatio_2, 1366). --define(wxSizerItem_SetRatio_1_1, 1367). --define(wxSizerItem_SetRatio_1_0, 1368). --define(wxSizerItem_SetSizer, 1369). --define(wxSizerItem_SetSpacer_1, 1370). --define(wxSizerItem_SetSpacer_2, 1371). --define(wxSizerItem_SetWindow, 1372). --define(wxSizerItem_Show, 1373). --define(wxBoxSizer_new, 1374). --define(wxBoxSizer_GetOrientation, 1375). --define(wxBoxSizer_destroy, 1376). --define(wxStaticBoxSizer_new_2, 1377). --define(wxStaticBoxSizer_new_3, 1378). --define(wxStaticBoxSizer_GetStaticBox, 1379). --define(wxStaticBoxSizer_destroy, 1380). --define(wxGridSizer_new_4, 1381). --define(wxGridSizer_new_2, 1382). --define(wxGridSizer_GetCols, 1383). --define(wxGridSizer_GetHGap, 1384). --define(wxGridSizer_GetRows, 1385). --define(wxGridSizer_GetVGap, 1386). --define(wxGridSizer_SetCols, 1387). --define(wxGridSizer_SetHGap, 1388). --define(wxGridSizer_SetRows, 1389). --define(wxGridSizer_SetVGap, 1390). --define(wxGridSizer_destroy, 1391). --define(wxFlexGridSizer_new_4, 1392). --define(wxFlexGridSizer_new_2, 1393). --define(wxFlexGridSizer_AddGrowableCol, 1394). --define(wxFlexGridSizer_AddGrowableRow, 1395). --define(wxFlexGridSizer_GetFlexibleDirection, 1396). --define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1397). --define(wxFlexGridSizer_RemoveGrowableCol, 1398). --define(wxFlexGridSizer_RemoveGrowableRow, 1399). --define(wxFlexGridSizer_SetFlexibleDirection, 1400). --define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1401). --define(wxFlexGridSizer_destroy, 1402). --define(wxGridBagSizer_new, 1403). --define(wxGridBagSizer_Add_3_2, 1404). --define(wxGridBagSizer_Add_3_1, 1405). --define(wxGridBagSizer_Add_4, 1406). --define(wxGridBagSizer_Add_1_0, 1407). --define(wxGridBagSizer_Add_2_1, 1408). --define(wxGridBagSizer_Add_2_0, 1409). --define(wxGridBagSizer_Add_3_0, 1410). --define(wxGridBagSizer_Add_1_1, 1411). --define(wxGridBagSizer_CalcMin, 1412). --define(wxGridBagSizer_CheckForIntersection_2, 1413). --define(wxGridBagSizer_CheckForIntersection_3, 1414). --define(wxGridBagSizer_FindItem_1_1, 1415). --define(wxGridBagSizer_FindItem_1_0, 1416). --define(wxGridBagSizer_FindItemAtPoint, 1417). --define(wxGridBagSizer_FindItemAtPosition, 1418). --define(wxGridBagSizer_FindItemWithData, 1419). --define(wxGridBagSizer_GetCellSize, 1420). --define(wxGridBagSizer_GetEmptyCellSize, 1421). --define(wxGridBagSizer_GetItemPosition_1_2, 1422). --define(wxGridBagSizer_GetItemPosition_1_1, 1423). --define(wxGridBagSizer_GetItemPosition_1_0, 1424). --define(wxGridBagSizer_GetItemSpan_1_2, 1425). --define(wxGridBagSizer_GetItemSpan_1_1, 1426). --define(wxGridBagSizer_GetItemSpan_1_0, 1427). --define(wxGridBagSizer_SetEmptyCellSize, 1428). --define(wxGridBagSizer_SetItemPosition_2_2, 1429). --define(wxGridBagSizer_SetItemPosition_2_1, 1430). --define(wxGridBagSizer_SetItemPosition_2_0, 1431). --define(wxGridBagSizer_SetItemSpan_2_2, 1432). --define(wxGridBagSizer_SetItemSpan_2_1, 1433). --define(wxGridBagSizer_SetItemSpan_2_0, 1434). --define(wxGridBagSizer_destroy, 1435). --define(wxStdDialogButtonSizer_new, 1436). --define(wxStdDialogButtonSizer_AddButton, 1437). --define(wxStdDialogButtonSizer_Realize, 1438). --define(wxStdDialogButtonSizer_SetAffirmativeButton, 1439). --define(wxStdDialogButtonSizer_SetCancelButton, 1440). --define(wxStdDialogButtonSizer_SetNegativeButton, 1441). --define(wxStdDialogButtonSizer_destroy, 1442). --define(wxFont_new_0, 1443). --define(wxFont_new_1, 1444). --define(wxFont_new_5, 1445). --define(wxFont_destruct, 1447). --define(wxFont_IsFixedWidth, 1448). --define(wxFont_GetDefaultEncoding, 1449). --define(wxFont_GetFaceName, 1450). --define(wxFont_GetFamily, 1451). --define(wxFont_GetNativeFontInfoDesc, 1452). --define(wxFont_GetNativeFontInfoUserDesc, 1453). --define(wxFont_GetPointSize, 1454). --define(wxFont_GetStyle, 1455). --define(wxFont_GetUnderlined, 1456). --define(wxFont_GetWeight, 1457). --define(wxFont_Ok, 1458). --define(wxFont_SetDefaultEncoding, 1459). --define(wxFont_SetFaceName, 1460). --define(wxFont_SetFamily, 1461). --define(wxFont_SetPointSize, 1462). --define(wxFont_SetStyle, 1463). --define(wxFont_SetUnderlined, 1464). --define(wxFont_SetWeight, 1465). --define(wxToolTip_Enable, 1466). --define(wxToolTip_SetDelay, 1467). --define(wxToolTip_new, 1468). --define(wxToolTip_SetTip, 1469). --define(wxToolTip_GetTip, 1470). --define(wxToolTip_GetWindow, 1471). --define(wxToolTip_destroy, 1472). --define(wxButton_new_3, 1474). --define(wxButton_new_0, 1475). --define(wxButton_destruct, 1476). --define(wxButton_Create, 1477). --define(wxButton_GetDefaultSize, 1478). --define(wxButton_SetDefault, 1479). --define(wxButton_SetLabel, 1480). --define(wxBitmapButton_new_4, 1482). --define(wxBitmapButton_new_0, 1483). --define(wxBitmapButton_Create, 1484). --define(wxBitmapButton_GetBitmapDisabled, 1485). --define(wxBitmapButton_GetBitmapFocus, 1487). --define(wxBitmapButton_GetBitmapLabel, 1489). --define(wxBitmapButton_GetBitmapSelected, 1491). --define(wxBitmapButton_SetBitmapDisabled, 1493). --define(wxBitmapButton_SetBitmapFocus, 1494). --define(wxBitmapButton_SetBitmapLabel, 1495). --define(wxBitmapButton_SetBitmapSelected, 1496). --define(wxBitmapButton_destroy, 1497). --define(wxToggleButton_new_0, 1498). --define(wxToggleButton_new_4, 1499). --define(wxToggleButton_Create, 1500). --define(wxToggleButton_GetValue, 1501). --define(wxToggleButton_SetValue, 1502). --define(wxToggleButton_destroy, 1503). --define(wxCalendarCtrl_new_0, 1504). --define(wxCalendarCtrl_new_3, 1505). --define(wxCalendarCtrl_Create, 1506). --define(wxCalendarCtrl_destruct, 1507). --define(wxCalendarCtrl_SetDate, 1508). --define(wxCalendarCtrl_GetDate, 1509). --define(wxCalendarCtrl_EnableYearChange, 1510). --define(wxCalendarCtrl_EnableMonthChange, 1511). --define(wxCalendarCtrl_EnableHolidayDisplay, 1512). --define(wxCalendarCtrl_SetHeaderColours, 1513). --define(wxCalendarCtrl_GetHeaderColourFg, 1514). --define(wxCalendarCtrl_GetHeaderColourBg, 1515). --define(wxCalendarCtrl_SetHighlightColours, 1516). --define(wxCalendarCtrl_GetHighlightColourFg, 1517). --define(wxCalendarCtrl_GetHighlightColourBg, 1518). --define(wxCalendarCtrl_SetHolidayColours, 1519). --define(wxCalendarCtrl_GetHolidayColourFg, 1520). --define(wxCalendarCtrl_GetHolidayColourBg, 1521). --define(wxCalendarCtrl_GetAttr, 1522). --define(wxCalendarCtrl_SetAttr, 1523). --define(wxCalendarCtrl_SetHoliday, 1524). --define(wxCalendarCtrl_ResetAttr, 1525). --define(wxCalendarCtrl_HitTest, 1526). --define(wxCalendarDateAttr_new_0, 1527). --define(wxCalendarDateAttr_new_2_1, 1528). --define(wxCalendarDateAttr_new_2_0, 1529). --define(wxCalendarDateAttr_SetTextColour, 1530). --define(wxCalendarDateAttr_SetBackgroundColour, 1531). --define(wxCalendarDateAttr_SetBorderColour, 1532). --define(wxCalendarDateAttr_SetFont, 1533). --define(wxCalendarDateAttr_SetBorder, 1534). --define(wxCalendarDateAttr_SetHoliday, 1535). --define(wxCalendarDateAttr_HasTextColour, 1536). --define(wxCalendarDateAttr_HasBackgroundColour, 1537). --define(wxCalendarDateAttr_HasBorderColour, 1538). --define(wxCalendarDateAttr_HasFont, 1539). --define(wxCalendarDateAttr_HasBorder, 1540). --define(wxCalendarDateAttr_IsHoliday, 1541). --define(wxCalendarDateAttr_GetTextColour, 1542). --define(wxCalendarDateAttr_GetBackgroundColour, 1543). --define(wxCalendarDateAttr_GetBorderColour, 1544). --define(wxCalendarDateAttr_GetFont, 1545). --define(wxCalendarDateAttr_GetBorder, 1546). --define(wxCalendarDateAttr_destroy, 1547). --define(wxCheckBox_new_4, 1549). --define(wxCheckBox_new_0, 1550). --define(wxCheckBox_Create, 1551). --define(wxCheckBox_GetValue, 1552). --define(wxCheckBox_Get3StateValue, 1553). --define(wxCheckBox_Is3rdStateAllowedForUser, 1554). --define(wxCheckBox_Is3State, 1555). --define(wxCheckBox_IsChecked, 1556). --define(wxCheckBox_SetValue, 1557). --define(wxCheckBox_Set3StateValue, 1558). --define(wxCheckBox_destroy, 1559). --define(wxCheckListBox_new_0, 1560). --define(wxCheckListBox_new_3, 1562). --define(wxCheckListBox_Check, 1563). --define(wxCheckListBox_IsChecked, 1564). --define(wxCheckListBox_destroy, 1565). --define(wxChoice_new_3, 1568). --define(wxChoice_new_0, 1569). --define(wxChoice_destruct, 1571). --define(wxChoice_Create, 1573). --define(wxChoice_Delete, 1574). --define(wxChoice_GetColumns, 1575). --define(wxChoice_SetColumns, 1576). --define(wxComboBox_new_0, 1577). --define(wxComboBox_new_3, 1579). --define(wxComboBox_destruct, 1580). --define(wxComboBox_Create, 1582). --define(wxComboBox_CanCopy, 1583). --define(wxComboBox_CanCut, 1584). --define(wxComboBox_CanPaste, 1585). --define(wxComboBox_CanRedo, 1586). --define(wxComboBox_CanUndo, 1587). --define(wxComboBox_Copy, 1588). --define(wxComboBox_Cut, 1589). --define(wxComboBox_GetInsertionPoint, 1590). --define(wxComboBox_GetLastPosition, 1591). --define(wxComboBox_GetValue, 1592). --define(wxComboBox_Paste, 1593). --define(wxComboBox_Redo, 1594). --define(wxComboBox_Replace, 1595). --define(wxComboBox_Remove, 1596). --define(wxComboBox_SetInsertionPoint, 1597). --define(wxComboBox_SetInsertionPointEnd, 1598). --define(wxComboBox_SetSelection_1, 1599). --define(wxComboBox_SetSelection_2, 1600). --define(wxComboBox_SetValue, 1601). --define(wxComboBox_Undo, 1602). --define(wxGauge_new_0, 1603). --define(wxGauge_new_4, 1604). --define(wxGauge_Create, 1605). --define(wxGauge_GetRange, 1606). --define(wxGauge_GetValue, 1607). --define(wxGauge_IsVertical, 1608). --define(wxGauge_SetRange, 1609). --define(wxGauge_SetValue, 1610). --define(wxGauge_Pulse, 1611). --define(wxGauge_destroy, 1612). --define(wxGenericDirCtrl_new_0, 1613). --define(wxGenericDirCtrl_new_2, 1614). --define(wxGenericDirCtrl_destruct, 1615). --define(wxGenericDirCtrl_Create, 1616). --define(wxGenericDirCtrl_Init, 1617). --define(wxGenericDirCtrl_CollapseTree, 1618). --define(wxGenericDirCtrl_ExpandPath, 1619). --define(wxGenericDirCtrl_GetDefaultPath, 1620). --define(wxGenericDirCtrl_GetPath, 1621). --define(wxGenericDirCtrl_GetFilePath, 1622). --define(wxGenericDirCtrl_GetFilter, 1623). --define(wxGenericDirCtrl_GetFilterIndex, 1624). --define(wxGenericDirCtrl_GetRootId, 1625). --define(wxGenericDirCtrl_GetTreeCtrl, 1626). --define(wxGenericDirCtrl_ReCreateTree, 1627). --define(wxGenericDirCtrl_SetDefaultPath, 1628). --define(wxGenericDirCtrl_SetFilter, 1629). --define(wxGenericDirCtrl_SetFilterIndex, 1630). --define(wxGenericDirCtrl_SetPath, 1631). --define(wxStaticBox_new_4, 1633). --define(wxStaticBox_new_0, 1634). --define(wxStaticBox_Create, 1635). --define(wxStaticBox_destroy, 1636). --define(wxStaticLine_new_2, 1638). --define(wxStaticLine_new_0, 1639). --define(wxStaticLine_Create, 1640). --define(wxStaticLine_IsVertical, 1641). --define(wxStaticLine_GetDefaultSize, 1642). --define(wxStaticLine_destroy, 1643). --define(wxListBox_new_3, 1646). --define(wxListBox_new_0, 1647). --define(wxListBox_destruct, 1649). --define(wxListBox_Create, 1651). --define(wxListBox_Deselect, 1652). --define(wxListBox_GetSelections, 1653). --define(wxListBox_InsertItems, 1654). --define(wxListBox_IsSelected, 1655). --define(wxListBox_Set, 1656). --define(wxListBox_HitTest, 1657). --define(wxListBox_SetFirstItem_1_0, 1658). --define(wxListBox_SetFirstItem_1_1, 1659). --define(wxListCtrl_new_0, 1660). --define(wxListCtrl_new_2, 1661). --define(wxListCtrl_Arrange, 1662). --define(wxListCtrl_AssignImageList, 1663). --define(wxListCtrl_ClearAll, 1664). --define(wxListCtrl_Create, 1665). --define(wxListCtrl_DeleteAllItems, 1666). --define(wxListCtrl_DeleteColumn, 1667). --define(wxListCtrl_DeleteItem, 1668). --define(wxListCtrl_EditLabel, 1669). --define(wxListCtrl_EnsureVisible, 1670). --define(wxListCtrl_FindItem_3_0, 1671). --define(wxListCtrl_FindItem_3_1, 1672). --define(wxListCtrl_GetColumn, 1673). --define(wxListCtrl_GetColumnCount, 1674). --define(wxListCtrl_GetColumnWidth, 1675). --define(wxListCtrl_GetCountPerPage, 1676). --define(wxListCtrl_GetEditControl, 1677). --define(wxListCtrl_GetImageList, 1678). --define(wxListCtrl_GetItem, 1679). --define(wxListCtrl_GetItemBackgroundColour, 1680). --define(wxListCtrl_GetItemCount, 1681). --define(wxListCtrl_GetItemData, 1682). --define(wxListCtrl_GetItemFont, 1683). --define(wxListCtrl_GetItemPosition, 1684). --define(wxListCtrl_GetItemRect, 1685). --define(wxListCtrl_GetItemSpacing, 1686). --define(wxListCtrl_GetItemState, 1687). --define(wxListCtrl_GetItemText, 1688). --define(wxListCtrl_GetItemTextColour, 1689). --define(wxListCtrl_GetNextItem, 1690). --define(wxListCtrl_GetSelectedItemCount, 1691). --define(wxListCtrl_GetTextColour, 1692). --define(wxListCtrl_GetTopItem, 1693). --define(wxListCtrl_GetViewRect, 1694). --define(wxListCtrl_HitTest, 1695). --define(wxListCtrl_InsertColumn_2, 1696). --define(wxListCtrl_InsertColumn_3, 1697). --define(wxListCtrl_InsertItem_1, 1698). --define(wxListCtrl_InsertItem_2_1, 1699). --define(wxListCtrl_InsertItem_2_0, 1700). --define(wxListCtrl_InsertItem_3, 1701). --define(wxListCtrl_RefreshItem, 1702). --define(wxListCtrl_RefreshItems, 1703). --define(wxListCtrl_ScrollList, 1704). --define(wxListCtrl_SetBackgroundColour, 1705). --define(wxListCtrl_SetColumn, 1706). --define(wxListCtrl_SetColumnWidth, 1707). --define(wxListCtrl_SetImageList, 1708). --define(wxListCtrl_SetItem_1, 1709). --define(wxListCtrl_SetItem_4, 1710). --define(wxListCtrl_SetItemBackgroundColour, 1711). --define(wxListCtrl_SetItemCount, 1712). --define(wxListCtrl_SetItemData, 1713). --define(wxListCtrl_SetItemFont, 1714). --define(wxListCtrl_SetItemImage, 1715). --define(wxListCtrl_SetItemColumnImage, 1716). --define(wxListCtrl_SetItemPosition, 1717). --define(wxListCtrl_SetItemState, 1718). --define(wxListCtrl_SetItemText, 1719). --define(wxListCtrl_SetItemTextColour, 1720). --define(wxListCtrl_SetSingleStyle, 1721). --define(wxListCtrl_SetTextColour, 1722). --define(wxListCtrl_SetWindowStyleFlag, 1723). --define(wxListCtrl_SortItems, 1724). --define(wxListCtrl_destroy, 1725). --define(wxListView_ClearColumnImage, 1726). --define(wxListView_Focus, 1727). --define(wxListView_GetFirstSelected, 1728). --define(wxListView_GetFocusedItem, 1729). --define(wxListView_GetNextSelected, 1730). --define(wxListView_IsSelected, 1731). --define(wxListView_Select, 1732). --define(wxListView_SetColumnImage, 1733). --define(wxListItem_new_0, 1734). --define(wxListItem_new_1, 1735). --define(wxListItem_destruct, 1736). --define(wxListItem_Clear, 1737). --define(wxListItem_GetAlign, 1738). --define(wxListItem_GetBackgroundColour, 1739). --define(wxListItem_GetColumn, 1740). --define(wxListItem_GetFont, 1741). --define(wxListItem_GetId, 1742). --define(wxListItem_GetImage, 1743). --define(wxListItem_GetMask, 1744). --define(wxListItem_GetState, 1745). --define(wxListItem_GetText, 1746). --define(wxListItem_GetTextColour, 1747). --define(wxListItem_GetWidth, 1748). --define(wxListItem_SetAlign, 1749). --define(wxListItem_SetBackgroundColour, 1750). --define(wxListItem_SetColumn, 1751). --define(wxListItem_SetFont, 1752). --define(wxListItem_SetId, 1753). --define(wxListItem_SetImage, 1754). --define(wxListItem_SetMask, 1755). --define(wxListItem_SetState, 1756). --define(wxListItem_SetStateMask, 1757). --define(wxListItem_SetText, 1758). --define(wxListItem_SetTextColour, 1759). --define(wxListItem_SetWidth, 1760). --define(wxListItemAttr_new_0, 1761). --define(wxListItemAttr_new_3, 1762). --define(wxListItemAttr_GetBackgroundColour, 1763). --define(wxListItemAttr_GetFont, 1764). --define(wxListItemAttr_GetTextColour, 1765). --define(wxListItemAttr_HasBackgroundColour, 1766). --define(wxListItemAttr_HasFont, 1767). --define(wxListItemAttr_HasTextColour, 1768). --define(wxListItemAttr_SetBackgroundColour, 1769). --define(wxListItemAttr_SetFont, 1770). --define(wxListItemAttr_SetTextColour, 1771). --define(wxListItemAttr_destroy, 1772). --define(wxImageList_new_0, 1773). --define(wxImageList_new_3, 1774). --define(wxImageList_Add_1, 1775). --define(wxImageList_Add_2_0, 1776). --define(wxImageList_Add_2_1, 1777). --define(wxImageList_Create, 1778). --define(wxImageList_Draw, 1780). --define(wxImageList_GetBitmap, 1781). --define(wxImageList_GetIcon, 1782). --define(wxImageList_GetImageCount, 1783). --define(wxImageList_GetSize, 1784). --define(wxImageList_Remove, 1785). --define(wxImageList_RemoveAll, 1786). --define(wxImageList_Replace_2, 1787). --define(wxImageList_Replace_3, 1788). --define(wxImageList_destroy, 1789). --define(wxTextAttr_new_0, 1790). --define(wxTextAttr_new_2, 1791). --define(wxTextAttr_GetAlignment, 1792). --define(wxTextAttr_GetBackgroundColour, 1793). --define(wxTextAttr_GetFont, 1794). --define(wxTextAttr_GetLeftIndent, 1795). --define(wxTextAttr_GetLeftSubIndent, 1796). --define(wxTextAttr_GetRightIndent, 1797). --define(wxTextAttr_GetTabs, 1798). --define(wxTextAttr_GetTextColour, 1799). --define(wxTextAttr_HasBackgroundColour, 1800). --define(wxTextAttr_HasFont, 1801). --define(wxTextAttr_HasTextColour, 1802). --define(wxTextAttr_GetFlags, 1803). --define(wxTextAttr_IsDefault, 1804). --define(wxTextAttr_SetAlignment, 1805). --define(wxTextAttr_SetBackgroundColour, 1806). --define(wxTextAttr_SetFlags, 1807). --define(wxTextAttr_SetFont, 1808). --define(wxTextAttr_SetLeftIndent, 1809). --define(wxTextAttr_SetRightIndent, 1810). --define(wxTextAttr_SetTabs, 1811). --define(wxTextAttr_SetTextColour, 1812). --define(wxTextAttr_destroy, 1813). --define(wxTextCtrl_new_3, 1815). --define(wxTextCtrl_new_0, 1816). --define(wxTextCtrl_destruct, 1818). --define(wxTextCtrl_AppendText, 1819). --define(wxTextCtrl_CanCopy, 1820). --define(wxTextCtrl_CanCut, 1821). --define(wxTextCtrl_CanPaste, 1822). --define(wxTextCtrl_CanRedo, 1823). --define(wxTextCtrl_CanUndo, 1824). --define(wxTextCtrl_Clear, 1825). --define(wxTextCtrl_Copy, 1826). --define(wxTextCtrl_Create, 1827). --define(wxTextCtrl_Cut, 1828). --define(wxTextCtrl_DiscardEdits, 1829). --define(wxTextCtrl_ChangeValue, 1830). --define(wxTextCtrl_EmulateKeyPress, 1831). --define(wxTextCtrl_GetDefaultStyle, 1832). --define(wxTextCtrl_GetInsertionPoint, 1833). --define(wxTextCtrl_GetLastPosition, 1834). --define(wxTextCtrl_GetLineLength, 1835). --define(wxTextCtrl_GetLineText, 1836). --define(wxTextCtrl_GetNumberOfLines, 1837). --define(wxTextCtrl_GetRange, 1838). --define(wxTextCtrl_GetSelection, 1839). --define(wxTextCtrl_GetStringSelection, 1840). --define(wxTextCtrl_GetStyle, 1841). --define(wxTextCtrl_GetValue, 1842). --define(wxTextCtrl_IsEditable, 1843). --define(wxTextCtrl_IsModified, 1844). --define(wxTextCtrl_IsMultiLine, 1845). --define(wxTextCtrl_IsSingleLine, 1846). --define(wxTextCtrl_LoadFile, 1847). --define(wxTextCtrl_MarkDirty, 1848). --define(wxTextCtrl_Paste, 1849). --define(wxTextCtrl_PositionToXY, 1850). --define(wxTextCtrl_Redo, 1851). --define(wxTextCtrl_Remove, 1852). --define(wxTextCtrl_Replace, 1853). --define(wxTextCtrl_SaveFile, 1854). --define(wxTextCtrl_SetDefaultStyle, 1855). --define(wxTextCtrl_SetEditable, 1856). --define(wxTextCtrl_SetInsertionPoint, 1857). --define(wxTextCtrl_SetInsertionPointEnd, 1858). --define(wxTextCtrl_SetMaxLength, 1860). --define(wxTextCtrl_SetSelection, 1861). --define(wxTextCtrl_SetStyle, 1862). --define(wxTextCtrl_SetValue, 1863). --define(wxTextCtrl_ShowPosition, 1864). --define(wxTextCtrl_Undo, 1865). --define(wxTextCtrl_WriteText, 1866). --define(wxTextCtrl_XYToPosition, 1867). --define(wxNotebook_new_0, 1870). --define(wxNotebook_new_3, 1871). --define(wxNotebook_destruct, 1872). --define(wxNotebook_AddPage, 1873). --define(wxNotebook_AdvanceSelection, 1874). --define(wxNotebook_AssignImageList, 1875). --define(wxNotebook_Create, 1876). --define(wxNotebook_DeleteAllPages, 1877). --define(wxNotebook_DeletePage, 1878). --define(wxNotebook_RemovePage, 1879). --define(wxNotebook_GetCurrentPage, 1880). --define(wxNotebook_GetImageList, 1881). --define(wxNotebook_GetPage, 1883). --define(wxNotebook_GetPageCount, 1884). --define(wxNotebook_GetPageImage, 1885). --define(wxNotebook_GetPageText, 1886). --define(wxNotebook_GetRowCount, 1887). --define(wxNotebook_GetSelection, 1888). --define(wxNotebook_GetThemeBackgroundColour, 1889). --define(wxNotebook_HitTest, 1891). --define(wxNotebook_InsertPage, 1893). --define(wxNotebook_SetImageList, 1894). --define(wxNotebook_SetPadding, 1895). --define(wxNotebook_SetPageSize, 1896). --define(wxNotebook_SetPageImage, 1897). --define(wxNotebook_SetPageText, 1898). --define(wxNotebook_SetSelection, 1899). --define(wxNotebook_ChangeSelection, 1900). --define(wxChoicebook_new_0, 1901). --define(wxChoicebook_new_3, 1902). --define(wxChoicebook_AddPage, 1903). --define(wxChoicebook_AdvanceSelection, 1904). --define(wxChoicebook_AssignImageList, 1905). --define(wxChoicebook_Create, 1906). --define(wxChoicebook_DeleteAllPages, 1907). --define(wxChoicebook_DeletePage, 1908). --define(wxChoicebook_RemovePage, 1909). --define(wxChoicebook_GetCurrentPage, 1910). --define(wxChoicebook_GetImageList, 1911). --define(wxChoicebook_GetPage, 1913). --define(wxChoicebook_GetPageCount, 1914). --define(wxChoicebook_GetPageImage, 1915). --define(wxChoicebook_GetPageText, 1916). --define(wxChoicebook_GetSelection, 1917). --define(wxChoicebook_HitTest, 1918). --define(wxChoicebook_InsertPage, 1919). --define(wxChoicebook_SetImageList, 1920). --define(wxChoicebook_SetPageSize, 1921). --define(wxChoicebook_SetPageImage, 1922). --define(wxChoicebook_SetPageText, 1923). --define(wxChoicebook_SetSelection, 1924). --define(wxChoicebook_ChangeSelection, 1925). --define(wxChoicebook_destroy, 1926). --define(wxToolbook_new_0, 1927). --define(wxToolbook_new_3, 1928). --define(wxToolbook_AddPage, 1929). --define(wxToolbook_AdvanceSelection, 1930). --define(wxToolbook_AssignImageList, 1931). --define(wxToolbook_Create, 1932). --define(wxToolbook_DeleteAllPages, 1933). --define(wxToolbook_DeletePage, 1934). --define(wxToolbook_RemovePage, 1935). --define(wxToolbook_GetCurrentPage, 1936). --define(wxToolbook_GetImageList, 1937). --define(wxToolbook_GetPage, 1939). --define(wxToolbook_GetPageCount, 1940). --define(wxToolbook_GetPageImage, 1941). --define(wxToolbook_GetPageText, 1942). --define(wxToolbook_GetSelection, 1943). --define(wxToolbook_HitTest, 1945). --define(wxToolbook_InsertPage, 1946). --define(wxToolbook_SetImageList, 1947). --define(wxToolbook_SetPageSize, 1948). --define(wxToolbook_SetPageImage, 1949). --define(wxToolbook_SetPageText, 1950). --define(wxToolbook_SetSelection, 1951). --define(wxToolbook_ChangeSelection, 1952). --define(wxToolbook_destroy, 1953). --define(wxListbook_new_0, 1954). --define(wxListbook_new_3, 1955). --define(wxListbook_AddPage, 1956). --define(wxListbook_AdvanceSelection, 1957). --define(wxListbook_AssignImageList, 1958). --define(wxListbook_Create, 1959). --define(wxListbook_DeleteAllPages, 1960). --define(wxListbook_DeletePage, 1961). --define(wxListbook_RemovePage, 1962). --define(wxListbook_GetCurrentPage, 1963). --define(wxListbook_GetImageList, 1964). --define(wxListbook_GetPage, 1966). --define(wxListbook_GetPageCount, 1967). --define(wxListbook_GetPageImage, 1968). --define(wxListbook_GetPageText, 1969). --define(wxListbook_GetSelection, 1970). --define(wxListbook_HitTest, 1972). --define(wxListbook_InsertPage, 1973). --define(wxListbook_SetImageList, 1974). --define(wxListbook_SetPageSize, 1975). --define(wxListbook_SetPageImage, 1976). --define(wxListbook_SetPageText, 1977). --define(wxListbook_SetSelection, 1978). --define(wxListbook_ChangeSelection, 1979). --define(wxListbook_destroy, 1980). --define(wxTreebook_new_0, 1981). --define(wxTreebook_new_3, 1982). --define(wxTreebook_AddPage, 1983). --define(wxTreebook_AdvanceSelection, 1984). --define(wxTreebook_AssignImageList, 1985). --define(wxTreebook_Create, 1986). --define(wxTreebook_DeleteAllPages, 1987). --define(wxTreebook_DeletePage, 1988). --define(wxTreebook_RemovePage, 1989). --define(wxTreebook_GetCurrentPage, 1990). --define(wxTreebook_GetImageList, 1991). --define(wxTreebook_GetPage, 1993). --define(wxTreebook_GetPageCount, 1994). --define(wxTreebook_GetPageImage, 1995). --define(wxTreebook_GetPageText, 1996). --define(wxTreebook_GetSelection, 1997). --define(wxTreebook_ExpandNode, 1998). --define(wxTreebook_IsNodeExpanded, 1999). --define(wxTreebook_HitTest, 2001). --define(wxTreebook_InsertPage, 2002). --define(wxTreebook_InsertSubPage, 2003). --define(wxTreebook_SetImageList, 2004). --define(wxTreebook_SetPageSize, 2005). --define(wxTreebook_SetPageImage, 2006). --define(wxTreebook_SetPageText, 2007). --define(wxTreebook_SetSelection, 2008). --define(wxTreebook_ChangeSelection, 2009). --define(wxTreebook_destroy, 2010). --define(wxTreeCtrl_new_2, 2013). --define(wxTreeCtrl_new_0, 2014). --define(wxTreeCtrl_destruct, 2016). --define(wxTreeCtrl_AddRoot, 2017). --define(wxTreeCtrl_AppendItem, 2018). --define(wxTreeCtrl_AssignImageList, 2019). --define(wxTreeCtrl_AssignStateImageList, 2020). --define(wxTreeCtrl_Collapse, 2021). --define(wxTreeCtrl_CollapseAndReset, 2022). --define(wxTreeCtrl_Create, 2023). --define(wxTreeCtrl_Delete, 2024). --define(wxTreeCtrl_DeleteAllItems, 2025). --define(wxTreeCtrl_DeleteChildren, 2026). --define(wxTreeCtrl_EditLabel, 2027). --define(wxTreeCtrl_EnsureVisible, 2028). --define(wxTreeCtrl_Expand, 2029). --define(wxTreeCtrl_GetBoundingRect, 2030). --define(wxTreeCtrl_GetChildrenCount, 2032). --define(wxTreeCtrl_GetCount, 2033). --define(wxTreeCtrl_GetEditControl, 2034). --define(wxTreeCtrl_GetFirstChild, 2035). --define(wxTreeCtrl_GetNextChild, 2036). --define(wxTreeCtrl_GetFirstVisibleItem, 2037). --define(wxTreeCtrl_GetImageList, 2038). --define(wxTreeCtrl_GetIndent, 2039). --define(wxTreeCtrl_GetItemBackgroundColour, 2040). --define(wxTreeCtrl_GetItemData, 2041). --define(wxTreeCtrl_GetItemFont, 2042). --define(wxTreeCtrl_GetItemImage_1, 2043). --define(wxTreeCtrl_GetItemImage_2, 2044). --define(wxTreeCtrl_GetItemText, 2045). --define(wxTreeCtrl_GetItemTextColour, 2046). --define(wxTreeCtrl_GetLastChild, 2047). --define(wxTreeCtrl_GetNextSibling, 2048). --define(wxTreeCtrl_GetNextVisible, 2049). --define(wxTreeCtrl_GetItemParent, 2050). --define(wxTreeCtrl_GetPrevSibling, 2051). --define(wxTreeCtrl_GetPrevVisible, 2052). --define(wxTreeCtrl_GetRootItem, 2053). --define(wxTreeCtrl_GetSelection, 2054). --define(wxTreeCtrl_GetSelections, 2055). --define(wxTreeCtrl_GetStateImageList, 2056). --define(wxTreeCtrl_HitTest, 2057). --define(wxTreeCtrl_InsertItem, 2059). --define(wxTreeCtrl_IsBold, 2060). --define(wxTreeCtrl_IsExpanded, 2061). --define(wxTreeCtrl_IsSelected, 2062). --define(wxTreeCtrl_IsVisible, 2063). --define(wxTreeCtrl_ItemHasChildren, 2064). --define(wxTreeCtrl_IsTreeItemIdOk, 2065). --define(wxTreeCtrl_PrependItem, 2066). --define(wxTreeCtrl_ScrollTo, 2067). --define(wxTreeCtrl_SelectItem_1, 2068). --define(wxTreeCtrl_SelectItem_2, 2069). --define(wxTreeCtrl_SetIndent, 2070). --define(wxTreeCtrl_SetImageList, 2071). --define(wxTreeCtrl_SetItemBackgroundColour, 2072). --define(wxTreeCtrl_SetItemBold, 2073). --define(wxTreeCtrl_SetItemData, 2074). --define(wxTreeCtrl_SetItemDropHighlight, 2075). --define(wxTreeCtrl_SetItemFont, 2076). --define(wxTreeCtrl_SetItemHasChildren, 2077). --define(wxTreeCtrl_SetItemImage_2, 2078). --define(wxTreeCtrl_SetItemImage_3, 2079). --define(wxTreeCtrl_SetItemText, 2080). --define(wxTreeCtrl_SetItemTextColour, 2081). --define(wxTreeCtrl_SetStateImageList, 2082). --define(wxTreeCtrl_SetWindowStyle, 2083). --define(wxTreeCtrl_SortChildren, 2084). --define(wxTreeCtrl_Toggle, 2085). --define(wxTreeCtrl_ToggleItemSelection, 2086). --define(wxTreeCtrl_Unselect, 2087). --define(wxTreeCtrl_UnselectAll, 2088). --define(wxTreeCtrl_UnselectItem, 2089). --define(wxScrollBar_new_0, 2090). --define(wxScrollBar_new_3, 2091). --define(wxScrollBar_destruct, 2092). --define(wxScrollBar_Create, 2093). --define(wxScrollBar_GetRange, 2094). --define(wxScrollBar_GetPageSize, 2095). --define(wxScrollBar_GetThumbPosition, 2096). --define(wxScrollBar_GetThumbSize, 2097). --define(wxScrollBar_SetThumbPosition, 2098). --define(wxScrollBar_SetScrollbar, 2099). --define(wxSpinButton_new_2, 2101). --define(wxSpinButton_new_0, 2102). --define(wxSpinButton_Create, 2103). --define(wxSpinButton_GetMax, 2104). --define(wxSpinButton_GetMin, 2105). --define(wxSpinButton_GetValue, 2106). --define(wxSpinButton_SetRange, 2107). --define(wxSpinButton_SetValue, 2108). --define(wxSpinButton_destroy, 2109). --define(wxSpinCtrl_new_0, 2110). --define(wxSpinCtrl_new_2, 2111). --define(wxSpinCtrl_Create, 2113). --define(wxSpinCtrl_SetValue_1_1, 2116). --define(wxSpinCtrl_SetValue_1_0, 2117). --define(wxSpinCtrl_GetValue, 2119). --define(wxSpinCtrl_SetRange, 2121). --define(wxSpinCtrl_SetSelection, 2122). --define(wxSpinCtrl_GetMin, 2124). --define(wxSpinCtrl_GetMax, 2126). --define(wxSpinCtrl_destroy, 2127). --define(wxStaticText_new_0, 2128). --define(wxStaticText_new_4, 2129). --define(wxStaticText_Create, 2130). --define(wxStaticText_GetLabel, 2131). --define(wxStaticText_SetLabel, 2132). --define(wxStaticText_Wrap, 2133). --define(wxStaticText_destroy, 2134). --define(wxStaticBitmap_new_0, 2135). --define(wxStaticBitmap_new_4, 2136). --define(wxStaticBitmap_Create, 2137). --define(wxStaticBitmap_GetBitmap, 2138). --define(wxStaticBitmap_SetBitmap, 2139). --define(wxStaticBitmap_destroy, 2140). --define(wxRadioBox_new, 2141). --define(wxRadioBox_destruct, 2143). --define(wxRadioBox_Create, 2144). --define(wxRadioBox_Enable_2, 2145). --define(wxRadioBox_Enable_1, 2146). --define(wxRadioBox_GetSelection, 2147). --define(wxRadioBox_GetString, 2148). --define(wxRadioBox_SetSelection, 2149). --define(wxRadioBox_Show_2, 2150). --define(wxRadioBox_Show_1, 2151). --define(wxRadioBox_GetColumnCount, 2152). --define(wxRadioBox_GetItemHelpText, 2153). --define(wxRadioBox_GetItemToolTip, 2154). --define(wxRadioBox_GetItemFromPoint, 2156). --define(wxRadioBox_GetRowCount, 2157). --define(wxRadioBox_IsItemEnabled, 2158). --define(wxRadioBox_IsItemShown, 2159). --define(wxRadioBox_SetItemHelpText, 2160). --define(wxRadioBox_SetItemToolTip, 2161). --define(wxRadioButton_new_0, 2162). --define(wxRadioButton_new_4, 2163). --define(wxRadioButton_Create, 2164). --define(wxRadioButton_GetValue, 2165). --define(wxRadioButton_SetValue, 2166). --define(wxRadioButton_destroy, 2167). --define(wxSlider_new_6, 2169). --define(wxSlider_new_0, 2170). --define(wxSlider_Create, 2171). --define(wxSlider_GetLineSize, 2172). --define(wxSlider_GetMax, 2173). --define(wxSlider_GetMin, 2174). --define(wxSlider_GetPageSize, 2175). --define(wxSlider_GetThumbLength, 2176). --define(wxSlider_GetValue, 2177). --define(wxSlider_SetLineSize, 2178). --define(wxSlider_SetPageSize, 2179). --define(wxSlider_SetRange, 2180). --define(wxSlider_SetThumbLength, 2181). --define(wxSlider_SetValue, 2182). --define(wxSlider_destroy, 2183). --define(wxDialog_new_4, 2185). --define(wxDialog_new_0, 2186). --define(wxDialog_destruct, 2188). --define(wxDialog_Create, 2189). --define(wxDialog_CreateButtonSizer, 2190). --define(wxDialog_CreateStdDialogButtonSizer, 2191). --define(wxDialog_EndModal, 2192). --define(wxDialog_GetAffirmativeId, 2193). --define(wxDialog_GetReturnCode, 2194). --define(wxDialog_IsModal, 2195). --define(wxDialog_SetAffirmativeId, 2196). --define(wxDialog_SetReturnCode, 2197). --define(wxDialog_Show, 2198). --define(wxDialog_ShowModal, 2199). --define(wxColourDialog_new_0, 2200). --define(wxColourDialog_new_2, 2201). --define(wxColourDialog_destruct, 2202). --define(wxColourDialog_Create, 2203). --define(wxColourDialog_GetColourData, 2204). --define(wxColourData_new_0, 2205). --define(wxColourData_new_1, 2206). --define(wxColourData_destruct, 2207). --define(wxColourData_GetChooseFull, 2208). --define(wxColourData_GetColour, 2209). --define(wxColourData_GetCustomColour, 2211). --define(wxColourData_SetChooseFull, 2212). --define(wxColourData_SetColour, 2213). --define(wxColourData_SetCustomColour, 2214). --define(wxPalette_new_0, 2215). --define(wxPalette_new_4, 2216). --define(wxPalette_destruct, 2218). --define(wxPalette_Create, 2219). --define(wxPalette_GetColoursCount, 2220). --define(wxPalette_GetPixel, 2221). --define(wxPalette_GetRGB, 2222). --define(wxPalette_IsOk, 2223). --define(wxDirDialog_new, 2227). --define(wxDirDialog_destruct, 2228). --define(wxDirDialog_GetPath, 2229). --define(wxDirDialog_GetMessage, 2230). --define(wxDirDialog_SetMessage, 2231). --define(wxDirDialog_SetPath, 2232). --define(wxFileDialog_new, 2236). --define(wxFileDialog_destruct, 2237). --define(wxFileDialog_GetDirectory, 2238). --define(wxFileDialog_GetFilename, 2239). --define(wxFileDialog_GetFilenames, 2240). --define(wxFileDialog_GetFilterIndex, 2241). --define(wxFileDialog_GetMessage, 2242). --define(wxFileDialog_GetPath, 2243). --define(wxFileDialog_GetPaths, 2244). --define(wxFileDialog_GetWildcard, 2245). --define(wxFileDialog_SetDirectory, 2246). --define(wxFileDialog_SetFilename, 2247). --define(wxFileDialog_SetFilterIndex, 2248). --define(wxFileDialog_SetMessage, 2249). --define(wxFileDialog_SetPath, 2250). --define(wxFileDialog_SetWildcard, 2251). --define(wxPickerBase_SetInternalMargin, 2252). --define(wxPickerBase_GetInternalMargin, 2253). --define(wxPickerBase_SetTextCtrlProportion, 2254). --define(wxPickerBase_SetPickerCtrlProportion, 2255). --define(wxPickerBase_GetTextCtrlProportion, 2256). --define(wxPickerBase_GetPickerCtrlProportion, 2257). --define(wxPickerBase_HasTextCtrl, 2258). --define(wxPickerBase_GetTextCtrl, 2259). --define(wxPickerBase_IsTextCtrlGrowable, 2260). --define(wxPickerBase_SetPickerCtrlGrowable, 2261). --define(wxPickerBase_SetTextCtrlGrowable, 2262). --define(wxPickerBase_IsPickerCtrlGrowable, 2263). --define(wxFilePickerCtrl_new_0, 2264). --define(wxFilePickerCtrl_new_3, 2265). --define(wxFilePickerCtrl_Create, 2266). --define(wxFilePickerCtrl_GetPath, 2267). --define(wxFilePickerCtrl_SetPath, 2268). --define(wxFilePickerCtrl_destroy, 2269). --define(wxDirPickerCtrl_new_0, 2270). --define(wxDirPickerCtrl_new_3, 2271). --define(wxDirPickerCtrl_Create, 2272). --define(wxDirPickerCtrl_GetPath, 2273). --define(wxDirPickerCtrl_SetPath, 2274). --define(wxDirPickerCtrl_destroy, 2275). --define(wxColourPickerCtrl_new_0, 2276). --define(wxColourPickerCtrl_new_3, 2277). --define(wxColourPickerCtrl_Create, 2278). --define(wxColourPickerCtrl_GetColour, 2279). --define(wxColourPickerCtrl_SetColour_1_1, 2280). --define(wxColourPickerCtrl_SetColour_1_0, 2281). --define(wxColourPickerCtrl_destroy, 2282). --define(wxDatePickerCtrl_new_0, 2283). --define(wxDatePickerCtrl_new_3, 2284). --define(wxDatePickerCtrl_GetRange, 2285). --define(wxDatePickerCtrl_GetValue, 2286). --define(wxDatePickerCtrl_SetRange, 2287). --define(wxDatePickerCtrl_SetValue, 2288). --define(wxDatePickerCtrl_destroy, 2289). --define(wxFontPickerCtrl_new_0, 2290). --define(wxFontPickerCtrl_new_3, 2291). --define(wxFontPickerCtrl_Create, 2292). --define(wxFontPickerCtrl_GetSelectedFont, 2293). --define(wxFontPickerCtrl_SetSelectedFont, 2294). --define(wxFontPickerCtrl_GetMaxPointSize, 2295). --define(wxFontPickerCtrl_SetMaxPointSize, 2296). --define(wxFontPickerCtrl_destroy, 2297). --define(wxFindReplaceDialog_new_0, 2300). --define(wxFindReplaceDialog_new_4, 2301). --define(wxFindReplaceDialog_destruct, 2302). --define(wxFindReplaceDialog_Create, 2303). --define(wxFindReplaceDialog_GetData, 2304). --define(wxFindReplaceData_new_0, 2305). --define(wxFindReplaceData_new_1, 2306). --define(wxFindReplaceData_GetFindString, 2307). --define(wxFindReplaceData_GetReplaceString, 2308). --define(wxFindReplaceData_GetFlags, 2309). --define(wxFindReplaceData_SetFlags, 2310). --define(wxFindReplaceData_SetFindString, 2311). --define(wxFindReplaceData_SetReplaceString, 2312). --define(wxFindReplaceData_destroy, 2313). --define(wxMultiChoiceDialog_new_0, 2314). --define(wxMultiChoiceDialog_new_5, 2316). --define(wxMultiChoiceDialog_GetSelections, 2317). --define(wxMultiChoiceDialog_SetSelections, 2318). --define(wxMultiChoiceDialog_destroy, 2319). --define(wxSingleChoiceDialog_new_0, 2320). --define(wxSingleChoiceDialog_new_5, 2322). --define(wxSingleChoiceDialog_GetSelection, 2323). --define(wxSingleChoiceDialog_GetStringSelection, 2324). --define(wxSingleChoiceDialog_SetSelection, 2325). --define(wxSingleChoiceDialog_destroy, 2326). --define(wxTextEntryDialog_new, 2327). --define(wxTextEntryDialog_GetValue, 2328). --define(wxTextEntryDialog_SetValue, 2329). --define(wxTextEntryDialog_destroy, 2330). --define(wxPasswordEntryDialog_new, 2331). --define(wxPasswordEntryDialog_destroy, 2332). --define(wxFontData_new_0, 2333). --define(wxFontData_new_1, 2334). --define(wxFontData_destruct, 2335). --define(wxFontData_EnableEffects, 2336). --define(wxFontData_GetAllowSymbols, 2337). --define(wxFontData_GetColour, 2338). --define(wxFontData_GetChosenFont, 2339). --define(wxFontData_GetEnableEffects, 2340). --define(wxFontData_GetInitialFont, 2341). --define(wxFontData_GetShowHelp, 2342). --define(wxFontData_SetAllowSymbols, 2343). --define(wxFontData_SetChosenFont, 2344). --define(wxFontData_SetColour, 2345). --define(wxFontData_SetInitialFont, 2346). --define(wxFontData_SetRange, 2347). --define(wxFontData_SetShowHelp, 2348). --define(wxFontDialog_new_0, 2352). --define(wxFontDialog_new_2, 2354). --define(wxFontDialog_Create, 2356). --define(wxFontDialog_GetFontData, 2357). --define(wxFontDialog_destroy, 2359). --define(wxProgressDialog_new, 2360). --define(wxProgressDialog_destruct, 2361). --define(wxProgressDialog_Resume, 2362). --define(wxProgressDialog_Update_2, 2363). --define(wxProgressDialog_Update_0, 2364). --define(wxMessageDialog_new, 2365). --define(wxMessageDialog_destruct, 2366). --define(wxPageSetupDialog_new, 2367). --define(wxPageSetupDialog_destruct, 2368). --define(wxPageSetupDialog_GetPageSetupData, 2369). --define(wxPageSetupDialog_ShowModal, 2370). --define(wxPageSetupDialogData_new_0, 2371). --define(wxPageSetupDialogData_new_1_0, 2372). --define(wxPageSetupDialogData_new_1_1, 2373). --define(wxPageSetupDialogData_destruct, 2374). --define(wxPageSetupDialogData_EnableHelp, 2375). --define(wxPageSetupDialogData_EnableMargins, 2376). --define(wxPageSetupDialogData_EnableOrientation, 2377). --define(wxPageSetupDialogData_EnablePaper, 2378). --define(wxPageSetupDialogData_EnablePrinter, 2379). --define(wxPageSetupDialogData_GetDefaultMinMargins, 2380). --define(wxPageSetupDialogData_GetEnableMargins, 2381). --define(wxPageSetupDialogData_GetEnableOrientation, 2382). --define(wxPageSetupDialogData_GetEnablePaper, 2383). --define(wxPageSetupDialogData_GetEnablePrinter, 2384). --define(wxPageSetupDialogData_GetEnableHelp, 2385). --define(wxPageSetupDialogData_GetDefaultInfo, 2386). --define(wxPageSetupDialogData_GetMarginTopLeft, 2387). --define(wxPageSetupDialogData_GetMarginBottomRight, 2388). --define(wxPageSetupDialogData_GetMinMarginTopLeft, 2389). --define(wxPageSetupDialogData_GetMinMarginBottomRight, 2390). --define(wxPageSetupDialogData_GetPaperId, 2391). --define(wxPageSetupDialogData_GetPaperSize, 2392). --define(wxPageSetupDialogData_GetPrintData, 2394). --define(wxPageSetupDialogData_IsOk, 2395). --define(wxPageSetupDialogData_SetDefaultInfo, 2396). --define(wxPageSetupDialogData_SetDefaultMinMargins, 2397). --define(wxPageSetupDialogData_SetMarginTopLeft, 2398). --define(wxPageSetupDialogData_SetMarginBottomRight, 2399). --define(wxPageSetupDialogData_SetMinMarginTopLeft, 2400). --define(wxPageSetupDialogData_SetMinMarginBottomRight, 2401). --define(wxPageSetupDialogData_SetPaperId, 2402). --define(wxPageSetupDialogData_SetPaperSize_1_1, 2403). --define(wxPageSetupDialogData_SetPaperSize_1_0, 2404). --define(wxPageSetupDialogData_SetPrintData, 2405). --define(wxPrintDialog_new_2_0, 2406). --define(wxPrintDialog_new_2_1, 2407). --define(wxPrintDialog_destruct, 2408). --define(wxPrintDialog_GetPrintDialogData, 2409). --define(wxPrintDialog_GetPrintDC, 2410). --define(wxPrintDialogData_new_0, 2411). --define(wxPrintDialogData_new_1_1, 2412). --define(wxPrintDialogData_new_1_0, 2413). --define(wxPrintDialogData_destruct, 2414). --define(wxPrintDialogData_EnableHelp, 2415). --define(wxPrintDialogData_EnablePageNumbers, 2416). --define(wxPrintDialogData_EnablePrintToFile, 2417). --define(wxPrintDialogData_EnableSelection, 2418). --define(wxPrintDialogData_GetAllPages, 2419). --define(wxPrintDialogData_GetCollate, 2420). --define(wxPrintDialogData_GetFromPage, 2421). --define(wxPrintDialogData_GetMaxPage, 2422). --define(wxPrintDialogData_GetMinPage, 2423). --define(wxPrintDialogData_GetNoCopies, 2424). --define(wxPrintDialogData_GetPrintData, 2425). --define(wxPrintDialogData_GetPrintToFile, 2426). --define(wxPrintDialogData_GetSelection, 2427). --define(wxPrintDialogData_GetToPage, 2428). --define(wxPrintDialogData_IsOk, 2429). --define(wxPrintDialogData_SetCollate, 2430). --define(wxPrintDialogData_SetFromPage, 2431). --define(wxPrintDialogData_SetMaxPage, 2432). --define(wxPrintDialogData_SetMinPage, 2433). --define(wxPrintDialogData_SetNoCopies, 2434). --define(wxPrintDialogData_SetPrintData, 2435). --define(wxPrintDialogData_SetPrintToFile, 2436). --define(wxPrintDialogData_SetSelection, 2437). --define(wxPrintDialogData_SetToPage, 2438). --define(wxPrintData_new_0, 2439). --define(wxPrintData_new_1, 2440). --define(wxPrintData_destruct, 2441). --define(wxPrintData_GetCollate, 2442). --define(wxPrintData_GetBin, 2443). --define(wxPrintData_GetColour, 2444). --define(wxPrintData_GetDuplex, 2445). --define(wxPrintData_GetNoCopies, 2446). --define(wxPrintData_GetOrientation, 2447). --define(wxPrintData_GetPaperId, 2448). --define(wxPrintData_GetPrinterName, 2449). --define(wxPrintData_GetQuality, 2450). --define(wxPrintData_IsOk, 2451). --define(wxPrintData_SetBin, 2452). --define(wxPrintData_SetCollate, 2453). --define(wxPrintData_SetColour, 2454). --define(wxPrintData_SetDuplex, 2455). --define(wxPrintData_SetNoCopies, 2456). --define(wxPrintData_SetOrientation, 2457). --define(wxPrintData_SetPaperId, 2458). --define(wxPrintData_SetPrinterName, 2459). --define(wxPrintData_SetQuality, 2460). --define(wxPrintPreview_new_2, 2463). --define(wxPrintPreview_new_3, 2464). --define(wxPrintPreview_destruct, 2466). --define(wxPrintPreview_GetCanvas, 2467). --define(wxPrintPreview_GetCurrentPage, 2468). --define(wxPrintPreview_GetFrame, 2469). --define(wxPrintPreview_GetMaxPage, 2470). --define(wxPrintPreview_GetMinPage, 2471). --define(wxPrintPreview_GetPrintout, 2472). --define(wxPrintPreview_GetPrintoutForPrinting, 2473). --define(wxPrintPreview_IsOk, 2474). --define(wxPrintPreview_PaintPage, 2475). --define(wxPrintPreview_Print, 2476). --define(wxPrintPreview_RenderPage, 2477). --define(wxPrintPreview_SetCanvas, 2478). --define(wxPrintPreview_SetCurrentPage, 2479). --define(wxPrintPreview_SetFrame, 2480). --define(wxPrintPreview_SetPrintout, 2481). --define(wxPrintPreview_SetZoom, 2482). --define(wxPreviewFrame_new, 2483). --define(wxPreviewFrame_destruct, 2484). --define(wxPreviewFrame_CreateControlBar, 2485). --define(wxPreviewFrame_CreateCanvas, 2486). --define(wxPreviewFrame_Initialize, 2487). --define(wxPreviewFrame_OnCloseWindow, 2488). --define(wxPreviewControlBar_new, 2489). --define(wxPreviewControlBar_destruct, 2490). --define(wxPreviewControlBar_CreateButtons, 2491). --define(wxPreviewControlBar_GetPrintPreview, 2492). --define(wxPreviewControlBar_GetZoomControl, 2493). --define(wxPreviewControlBar_SetZoomControl, 2494). --define(wxPrinter_new, 2496). --define(wxPrinter_CreateAbortWindow, 2497). --define(wxPrinter_GetAbort, 2498). --define(wxPrinter_GetLastError, 2499). --define(wxPrinter_GetPrintDialogData, 2500). --define(wxPrinter_Print, 2501). --define(wxPrinter_PrintDialog, 2502). --define(wxPrinter_ReportError, 2503). --define(wxPrinter_Setup, 2504). --define(wxPrinter_destroy, 2505). --define(wxXmlResource_new_1, 2506). --define(wxXmlResource_new_2, 2507). --define(wxXmlResource_destruct, 2508). --define(wxXmlResource_AttachUnknownControl, 2509). --define(wxXmlResource_ClearHandlers, 2510). --define(wxXmlResource_CompareVersion, 2511). --define(wxXmlResource_Get, 2512). --define(wxXmlResource_GetFlags, 2513). --define(wxXmlResource_GetVersion, 2514). --define(wxXmlResource_GetXRCID, 2515). --define(wxXmlResource_InitAllHandlers, 2516). --define(wxXmlResource_Load, 2517). --define(wxXmlResource_LoadBitmap, 2518). --define(wxXmlResource_LoadDialog_2, 2519). --define(wxXmlResource_LoadDialog_3, 2520). --define(wxXmlResource_LoadFrame_2, 2521). --define(wxXmlResource_LoadFrame_3, 2522). --define(wxXmlResource_LoadIcon, 2523). --define(wxXmlResource_LoadMenu, 2524). --define(wxXmlResource_LoadMenuBar_2, 2525). --define(wxXmlResource_LoadMenuBar_1, 2526). --define(wxXmlResource_LoadPanel_2, 2527). --define(wxXmlResource_LoadPanel_3, 2528). --define(wxXmlResource_LoadToolBar, 2529). --define(wxXmlResource_Set, 2530). --define(wxXmlResource_SetFlags, 2531). --define(wxXmlResource_Unload, 2532). --define(wxXmlResource_xrcctrl, 2533). --define(wxHtmlEasyPrinting_new, 2534). --define(wxHtmlEasyPrinting_destruct, 2535). --define(wxHtmlEasyPrinting_GetPrintData, 2536). --define(wxHtmlEasyPrinting_GetPageSetupData, 2537). --define(wxHtmlEasyPrinting_PreviewFile, 2538). --define(wxHtmlEasyPrinting_PreviewText, 2539). --define(wxHtmlEasyPrinting_PrintFile, 2540). --define(wxHtmlEasyPrinting_PrintText, 2541). --define(wxHtmlEasyPrinting_PageSetup, 2542). --define(wxHtmlEasyPrinting_SetFonts, 2543). --define(wxHtmlEasyPrinting_SetHeader, 2544). --define(wxHtmlEasyPrinting_SetFooter, 2545). --define(wxGLCanvas_new_2, 2547). --define(wxGLCanvas_new_3_1, 2548). --define(wxGLCanvas_new_3_0, 2549). --define(wxGLCanvas_GetContext, 2550). --define(wxGLCanvas_SetCurrent, 2552). --define(wxGLCanvas_SwapBuffers, 2553). --define(wxGLCanvas_destroy, 2554). --define(wxAuiManager_new, 2555). --define(wxAuiManager_destruct, 2556). --define(wxAuiManager_AddPane_2_1, 2557). --define(wxAuiManager_AddPane_3, 2558). --define(wxAuiManager_AddPane_2_0, 2559). --define(wxAuiManager_DetachPane, 2560). --define(wxAuiManager_GetAllPanes, 2561). --define(wxAuiManager_GetArtProvider, 2562). --define(wxAuiManager_GetDockSizeConstraint, 2563). --define(wxAuiManager_GetFlags, 2564). --define(wxAuiManager_GetManagedWindow, 2565). --define(wxAuiManager_GetManager, 2566). --define(wxAuiManager_GetPane_1_1, 2567). --define(wxAuiManager_GetPane_1_0, 2568). --define(wxAuiManager_HideHint, 2569). --define(wxAuiManager_InsertPane, 2570). --define(wxAuiManager_LoadPaneInfo, 2571). --define(wxAuiManager_LoadPerspective, 2572). --define(wxAuiManager_SavePaneInfo, 2573). --define(wxAuiManager_SavePerspective, 2574). --define(wxAuiManager_SetArtProvider, 2575). --define(wxAuiManager_SetDockSizeConstraint, 2576). --define(wxAuiManager_SetFlags, 2577). --define(wxAuiManager_SetManagedWindow, 2578). --define(wxAuiManager_ShowHint, 2579). --define(wxAuiManager_UnInit, 2580). --define(wxAuiManager_Update, 2581). --define(wxAuiPaneInfo_new_0, 2582). --define(wxAuiPaneInfo_new_1, 2583). --define(wxAuiPaneInfo_destruct, 2584). --define(wxAuiPaneInfo_BestSize_1, 2585). --define(wxAuiPaneInfo_BestSize_2, 2586). --define(wxAuiPaneInfo_Bottom, 2587). --define(wxAuiPaneInfo_BottomDockable, 2588). --define(wxAuiPaneInfo_Caption, 2589). --define(wxAuiPaneInfo_CaptionVisible, 2590). --define(wxAuiPaneInfo_Centre, 2591). --define(wxAuiPaneInfo_CentrePane, 2592). --define(wxAuiPaneInfo_CloseButton, 2593). --define(wxAuiPaneInfo_DefaultPane, 2594). --define(wxAuiPaneInfo_DestroyOnClose, 2595). --define(wxAuiPaneInfo_Direction, 2596). --define(wxAuiPaneInfo_Dock, 2597). --define(wxAuiPaneInfo_Dockable, 2598). --define(wxAuiPaneInfo_Fixed, 2599). --define(wxAuiPaneInfo_Float, 2600). --define(wxAuiPaneInfo_Floatable, 2601). --define(wxAuiPaneInfo_FloatingPosition_1, 2602). --define(wxAuiPaneInfo_FloatingPosition_2, 2603). --define(wxAuiPaneInfo_FloatingSize_1, 2604). --define(wxAuiPaneInfo_FloatingSize_2, 2605). --define(wxAuiPaneInfo_Gripper, 2606). --define(wxAuiPaneInfo_GripperTop, 2607). --define(wxAuiPaneInfo_HasBorder, 2608). --define(wxAuiPaneInfo_HasCaption, 2609). --define(wxAuiPaneInfo_HasCloseButton, 2610). --define(wxAuiPaneInfo_HasFlag, 2611). --define(wxAuiPaneInfo_HasGripper, 2612). --define(wxAuiPaneInfo_HasGripperTop, 2613). --define(wxAuiPaneInfo_HasMaximizeButton, 2614). --define(wxAuiPaneInfo_HasMinimizeButton, 2615). --define(wxAuiPaneInfo_HasPinButton, 2616). --define(wxAuiPaneInfo_Hide, 2617). --define(wxAuiPaneInfo_IsBottomDockable, 2618). --define(wxAuiPaneInfo_IsDocked, 2619). --define(wxAuiPaneInfo_IsFixed, 2620). --define(wxAuiPaneInfo_IsFloatable, 2621). --define(wxAuiPaneInfo_IsFloating, 2622). --define(wxAuiPaneInfo_IsLeftDockable, 2623). --define(wxAuiPaneInfo_IsMovable, 2624). --define(wxAuiPaneInfo_IsOk, 2625). --define(wxAuiPaneInfo_IsResizable, 2626). --define(wxAuiPaneInfo_IsRightDockable, 2627). --define(wxAuiPaneInfo_IsShown, 2628). --define(wxAuiPaneInfo_IsToolbar, 2629). --define(wxAuiPaneInfo_IsTopDockable, 2630). --define(wxAuiPaneInfo_Layer, 2631). --define(wxAuiPaneInfo_Left, 2632). --define(wxAuiPaneInfo_LeftDockable, 2633). --define(wxAuiPaneInfo_MaxSize_1, 2634). --define(wxAuiPaneInfo_MaxSize_2, 2635). --define(wxAuiPaneInfo_MaximizeButton, 2636). --define(wxAuiPaneInfo_MinSize_1, 2637). --define(wxAuiPaneInfo_MinSize_2, 2638). --define(wxAuiPaneInfo_MinimizeButton, 2639). --define(wxAuiPaneInfo_Movable, 2640). --define(wxAuiPaneInfo_Name, 2641). --define(wxAuiPaneInfo_PaneBorder, 2642). --define(wxAuiPaneInfo_PinButton, 2643). --define(wxAuiPaneInfo_Position, 2644). --define(wxAuiPaneInfo_Resizable, 2645). --define(wxAuiPaneInfo_Right, 2646). --define(wxAuiPaneInfo_RightDockable, 2647). --define(wxAuiPaneInfo_Row, 2648). --define(wxAuiPaneInfo_SafeSet, 2649). --define(wxAuiPaneInfo_SetFlag, 2650). --define(wxAuiPaneInfo_Show, 2651). --define(wxAuiPaneInfo_ToolbarPane, 2652). --define(wxAuiPaneInfo_Top, 2653). --define(wxAuiPaneInfo_TopDockable, 2654). --define(wxAuiPaneInfo_Window, 2655). --define(wxAuiPaneInfo_GetWindow, 2656). --define(wxAuiPaneInfo_GetFrame, 2657). --define(wxAuiPaneInfo_GetDirection, 2658). --define(wxAuiPaneInfo_GetLayer, 2659). --define(wxAuiPaneInfo_GetRow, 2660). --define(wxAuiPaneInfo_GetPosition, 2661). --define(wxAuiPaneInfo_GetFloatingPosition, 2662). --define(wxAuiPaneInfo_GetFloatingSize, 2663). --define(wxAuiNotebook_new_0, 2664). --define(wxAuiNotebook_new_2, 2665). --define(wxAuiNotebook_AddPage, 2666). --define(wxAuiNotebook_Create, 2667). --define(wxAuiNotebook_DeletePage, 2668). --define(wxAuiNotebook_GetArtProvider, 2669). --define(wxAuiNotebook_GetPage, 2670). --define(wxAuiNotebook_GetPageBitmap, 2671). --define(wxAuiNotebook_GetPageCount, 2672). --define(wxAuiNotebook_GetPageIndex, 2673). --define(wxAuiNotebook_GetPageText, 2674). --define(wxAuiNotebook_GetSelection, 2675). --define(wxAuiNotebook_InsertPage, 2676). --define(wxAuiNotebook_RemovePage, 2677). --define(wxAuiNotebook_SetArtProvider, 2678). --define(wxAuiNotebook_SetFont, 2679). --define(wxAuiNotebook_SetPageBitmap, 2680). --define(wxAuiNotebook_SetPageText, 2681). --define(wxAuiNotebook_SetSelection, 2682). --define(wxAuiNotebook_SetTabCtrlHeight, 2683). --define(wxAuiNotebook_SetUniformBitmapSize, 2684). --define(wxAuiNotebook_destroy, 2685). --define(wxAuiTabArt_SetFlags, 2686). --define(wxAuiTabArt_SetMeasuringFont, 2687). --define(wxAuiTabArt_SetNormalFont, 2688). --define(wxAuiTabArt_SetSelectedFont, 2689). --define(wxAuiTabArt_SetColour, 2690). --define(wxAuiTabArt_SetActiveColour, 2691). --define(wxAuiDockArt_GetColour, 2692). --define(wxAuiDockArt_GetFont, 2693). --define(wxAuiDockArt_GetMetric, 2694). --define(wxAuiDockArt_SetColour, 2695). --define(wxAuiDockArt_SetFont, 2696). --define(wxAuiDockArt_SetMetric, 2697). --define(wxAuiSimpleTabArt_new, 2698). --define(wxAuiSimpleTabArt_destroy, 2699). --define(wxMDIParentFrame_new_0, 2700). --define(wxMDIParentFrame_new_4, 2701). --define(wxMDIParentFrame_destruct, 2702). --define(wxMDIParentFrame_ActivateNext, 2703). --define(wxMDIParentFrame_ActivatePrevious, 2704). --define(wxMDIParentFrame_ArrangeIcons, 2705). --define(wxMDIParentFrame_Cascade, 2706). --define(wxMDIParentFrame_Create, 2707). --define(wxMDIParentFrame_GetActiveChild, 2708). --define(wxMDIParentFrame_GetClientWindow, 2709). --define(wxMDIParentFrame_Tile, 2710). --define(wxMDIChildFrame_new_0, 2711). --define(wxMDIChildFrame_new_4, 2712). --define(wxMDIChildFrame_destruct, 2713). --define(wxMDIChildFrame_Activate, 2714). --define(wxMDIChildFrame_Create, 2715). --define(wxMDIChildFrame_Maximize, 2716). --define(wxMDIChildFrame_Restore, 2717). --define(wxMDIClientWindow_new_0, 2718). --define(wxMDIClientWindow_new_2, 2719). --define(wxMDIClientWindow_destruct, 2720). --define(wxMDIClientWindow_CreateClient, 2721). --define(wxLayoutAlgorithm_new, 2722). --define(wxLayoutAlgorithm_LayoutFrame, 2723). --define(wxLayoutAlgorithm_LayoutMDIFrame, 2724). --define(wxLayoutAlgorithm_LayoutWindow, 2725). --define(wxLayoutAlgorithm_destroy, 2726). --define(wxEvent_GetId, 2727). --define(wxEvent_GetSkipped, 2728). --define(wxEvent_GetTimestamp, 2729). --define(wxEvent_IsCommandEvent, 2730). --define(wxEvent_ResumePropagation, 2731). --define(wxEvent_ShouldPropagate, 2732). --define(wxEvent_Skip, 2733). --define(wxEvent_StopPropagation, 2734). --define(wxCommandEvent_getClientData, 2735). --define(wxCommandEvent_GetExtraLong, 2736). --define(wxCommandEvent_GetInt, 2737). --define(wxCommandEvent_GetSelection, 2738). --define(wxCommandEvent_GetString, 2739). --define(wxCommandEvent_IsChecked, 2740). --define(wxCommandEvent_IsSelection, 2741). --define(wxCommandEvent_SetInt, 2742). --define(wxCommandEvent_SetString, 2743). --define(wxScrollEvent_GetOrientation, 2744). --define(wxScrollEvent_GetPosition, 2745). --define(wxScrollWinEvent_GetOrientation, 2746). --define(wxScrollWinEvent_GetPosition, 2747). --define(wxMouseEvent_AltDown, 2748). --define(wxMouseEvent_Button, 2749). --define(wxMouseEvent_ButtonDClick, 2750). --define(wxMouseEvent_ButtonDown, 2751). --define(wxMouseEvent_ButtonUp, 2752). --define(wxMouseEvent_CmdDown, 2753). --define(wxMouseEvent_ControlDown, 2754). --define(wxMouseEvent_Dragging, 2755). --define(wxMouseEvent_Entering, 2756). --define(wxMouseEvent_GetButton, 2757). --define(wxMouseEvent_GetPosition, 2760). --define(wxMouseEvent_GetLogicalPosition, 2761). --define(wxMouseEvent_GetLinesPerAction, 2762). --define(wxMouseEvent_GetWheelRotation, 2763). --define(wxMouseEvent_GetWheelDelta, 2764). --define(wxMouseEvent_GetX, 2765). --define(wxMouseEvent_GetY, 2766). --define(wxMouseEvent_IsButton, 2767). --define(wxMouseEvent_IsPageScroll, 2768). --define(wxMouseEvent_Leaving, 2769). --define(wxMouseEvent_LeftDClick, 2770). --define(wxMouseEvent_LeftDown, 2771). --define(wxMouseEvent_LeftIsDown, 2772). --define(wxMouseEvent_LeftUp, 2773). --define(wxMouseEvent_MetaDown, 2774). --define(wxMouseEvent_MiddleDClick, 2775). --define(wxMouseEvent_MiddleDown, 2776). --define(wxMouseEvent_MiddleIsDown, 2777). --define(wxMouseEvent_MiddleUp, 2778). --define(wxMouseEvent_Moving, 2779). --define(wxMouseEvent_RightDClick, 2780). --define(wxMouseEvent_RightDown, 2781). --define(wxMouseEvent_RightIsDown, 2782). --define(wxMouseEvent_RightUp, 2783). --define(wxMouseEvent_ShiftDown, 2784). --define(wxSetCursorEvent_GetCursor, 2785). --define(wxSetCursorEvent_GetX, 2786). --define(wxSetCursorEvent_GetY, 2787). --define(wxSetCursorEvent_HasCursor, 2788). --define(wxSetCursorEvent_SetCursor, 2789). --define(wxKeyEvent_AltDown, 2790). --define(wxKeyEvent_CmdDown, 2791). --define(wxKeyEvent_ControlDown, 2792). --define(wxKeyEvent_GetKeyCode, 2793). --define(wxKeyEvent_GetModifiers, 2794). --define(wxKeyEvent_GetPosition, 2797). --define(wxKeyEvent_GetRawKeyCode, 2798). --define(wxKeyEvent_GetRawKeyFlags, 2799). --define(wxKeyEvent_GetUnicodeKey, 2800). --define(wxKeyEvent_GetX, 2801). --define(wxKeyEvent_GetY, 2802). --define(wxKeyEvent_HasModifiers, 2803). --define(wxKeyEvent_MetaDown, 2804). --define(wxKeyEvent_ShiftDown, 2805). --define(wxSizeEvent_GetSize, 2806). --define(wxMoveEvent_GetPosition, 2807). --define(wxEraseEvent_GetDC, 2808). --define(wxFocusEvent_GetWindow, 2809). --define(wxChildFocusEvent_GetWindow, 2810). --define(wxMenuEvent_GetMenu, 2811). --define(wxMenuEvent_GetMenuId, 2812). --define(wxMenuEvent_IsPopup, 2813). --define(wxCloseEvent_CanVeto, 2814). --define(wxCloseEvent_GetLoggingOff, 2815). --define(wxCloseEvent_SetCanVeto, 2816). --define(wxCloseEvent_SetLoggingOff, 2817). --define(wxCloseEvent_Veto, 2818). --define(wxShowEvent_SetShow, 2819). --define(wxShowEvent_GetShow, 2820). --define(wxIconizeEvent_Iconized, 2821). --define(wxJoystickEvent_ButtonDown, 2822). --define(wxJoystickEvent_ButtonIsDown, 2823). --define(wxJoystickEvent_ButtonUp, 2824). --define(wxJoystickEvent_GetButtonChange, 2825). --define(wxJoystickEvent_GetButtonState, 2826). --define(wxJoystickEvent_GetJoystick, 2827). --define(wxJoystickEvent_GetPosition, 2828). --define(wxJoystickEvent_GetZPosition, 2829). --define(wxJoystickEvent_IsButton, 2830). --define(wxJoystickEvent_IsMove, 2831). --define(wxJoystickEvent_IsZMove, 2832). --define(wxUpdateUIEvent_CanUpdate, 2833). --define(wxUpdateUIEvent_Check, 2834). --define(wxUpdateUIEvent_Enable, 2835). --define(wxUpdateUIEvent_Show, 2836). --define(wxUpdateUIEvent_GetChecked, 2837). --define(wxUpdateUIEvent_GetEnabled, 2838). --define(wxUpdateUIEvent_GetShown, 2839). --define(wxUpdateUIEvent_GetSetChecked, 2840). --define(wxUpdateUIEvent_GetSetEnabled, 2841). --define(wxUpdateUIEvent_GetSetShown, 2842). --define(wxUpdateUIEvent_GetSetText, 2843). --define(wxUpdateUIEvent_GetText, 2844). --define(wxUpdateUIEvent_GetMode, 2845). --define(wxUpdateUIEvent_GetUpdateInterval, 2846). --define(wxUpdateUIEvent_ResetUpdateTime, 2847). --define(wxUpdateUIEvent_SetMode, 2848). --define(wxUpdateUIEvent_SetText, 2849). --define(wxUpdateUIEvent_SetUpdateInterval, 2850). --define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2851). --define(wxPaletteChangedEvent_SetChangedWindow, 2852). --define(wxPaletteChangedEvent_GetChangedWindow, 2853). --define(wxQueryNewPaletteEvent_SetPaletteRealized, 2854). --define(wxQueryNewPaletteEvent_GetPaletteRealized, 2855). --define(wxNavigationKeyEvent_GetDirection, 2856). --define(wxNavigationKeyEvent_SetDirection, 2857). --define(wxNavigationKeyEvent_IsWindowChange, 2858). --define(wxNavigationKeyEvent_SetWindowChange, 2859). --define(wxNavigationKeyEvent_IsFromTab, 2860). --define(wxNavigationKeyEvent_SetFromTab, 2861). --define(wxNavigationKeyEvent_GetCurrentFocus, 2862). --define(wxNavigationKeyEvent_SetCurrentFocus, 2863). --define(wxHelpEvent_GetOrigin, 2864). --define(wxHelpEvent_GetPosition, 2865). --define(wxHelpEvent_SetOrigin, 2866). --define(wxHelpEvent_SetPosition, 2867). --define(wxContextMenuEvent_GetPosition, 2868). --define(wxContextMenuEvent_SetPosition, 2869). --define(wxIdleEvent_CanSend, 2870). --define(wxIdleEvent_GetMode, 2871). --define(wxIdleEvent_RequestMore, 2872). --define(wxIdleEvent_MoreRequested, 2873). --define(wxIdleEvent_SetMode, 2874). --define(wxGridEvent_AltDown, 2875). --define(wxGridEvent_ControlDown, 2876). --define(wxGridEvent_GetCol, 2877). --define(wxGridEvent_GetPosition, 2878). --define(wxGridEvent_GetRow, 2879). --define(wxGridEvent_MetaDown, 2880). --define(wxGridEvent_Selecting, 2881). --define(wxGridEvent_ShiftDown, 2882). --define(wxNotifyEvent_Allow, 2883). --define(wxNotifyEvent_IsAllowed, 2884). --define(wxNotifyEvent_Veto, 2885). --define(wxSashEvent_GetEdge, 2886). --define(wxSashEvent_GetDragRect, 2887). --define(wxSashEvent_GetDragStatus, 2888). --define(wxListEvent_GetCacheFrom, 2889). --define(wxListEvent_GetCacheTo, 2890). --define(wxListEvent_GetKeyCode, 2891). --define(wxListEvent_GetIndex, 2892). --define(wxListEvent_GetColumn, 2893). --define(wxListEvent_GetPoint, 2894). --define(wxListEvent_GetLabel, 2895). --define(wxListEvent_GetText, 2896). --define(wxListEvent_GetImage, 2897). --define(wxListEvent_GetData, 2898). --define(wxListEvent_GetMask, 2899). --define(wxListEvent_GetItem, 2900). --define(wxListEvent_IsEditCancelled, 2901). --define(wxDateEvent_GetDate, 2902). --define(wxCalendarEvent_GetWeekDay, 2903). --define(wxFileDirPickerEvent_GetPath, 2904). --define(wxColourPickerEvent_GetColour, 2905). --define(wxFontPickerEvent_GetFont, 2906). --define(wxStyledTextEvent_GetPosition, 2907). --define(wxStyledTextEvent_GetKey, 2908). --define(wxStyledTextEvent_GetModifiers, 2909). --define(wxStyledTextEvent_GetModificationType, 2910). --define(wxStyledTextEvent_GetText, 2911). --define(wxStyledTextEvent_GetLength, 2912). --define(wxStyledTextEvent_GetLinesAdded, 2913). --define(wxStyledTextEvent_GetLine, 2914). --define(wxStyledTextEvent_GetFoldLevelNow, 2915). --define(wxStyledTextEvent_GetFoldLevelPrev, 2916). --define(wxStyledTextEvent_GetMargin, 2917). --define(wxStyledTextEvent_GetMessage, 2918). --define(wxStyledTextEvent_GetWParam, 2919). --define(wxStyledTextEvent_GetLParam, 2920). --define(wxStyledTextEvent_GetListType, 2921). --define(wxStyledTextEvent_GetX, 2922). --define(wxStyledTextEvent_GetY, 2923). --define(wxStyledTextEvent_GetDragText, 2924). --define(wxStyledTextEvent_GetDragAllowMove, 2925). --define(wxStyledTextEvent_GetDragResult, 2926). --define(wxStyledTextEvent_GetShift, 2927). --define(wxStyledTextEvent_GetControl, 2928). --define(wxStyledTextEvent_GetAlt, 2929). --define(utils_wxGetKeyState, 2930). --define(utils_wxGetMousePosition, 2931). --define(utils_wxGetMouseState, 2932). --define(utils_wxSetDetectableAutoRepeat, 2933). --define(utils_wxBell, 2934). --define(utils_wxFindMenuItemId, 2935). --define(utils_wxGenericFindWindowAtPoint, 2936). --define(utils_wxFindWindowAtPoint, 2937). --define(utils_wxBeginBusyCursor, 2938). --define(utils_wxEndBusyCursor, 2939). --define(utils_wxIsBusy, 2940). --define(utils_wxShutdown, 2941). --define(utils_wxShell, 2942). --define(utils_wxLaunchDefaultBrowser, 2943). --define(utils_wxGetEmailAddress, 2944). --define(utils_wxGetUserId, 2945). --define(utils_wxGetHomeDir, 2946). --define(utils_wxNewId, 2947). --define(utils_wxRegisterId, 2948). --define(utils_wxGetCurrentId, 2949). --define(utils_wxGetOsDescription, 2950). --define(utils_wxIsPlatformLittleEndian, 2951). --define(utils_wxIsPlatform64Bit, 2952). --define(gdicmn_wxDisplaySize, 2953). --define(gdicmn_wxSetCursor, 2954). --define(wxPrintout_new, 2955). --define(wxPrintout_destruct, 2956). --define(wxPrintout_GetDC, 2957). --define(wxPrintout_GetPageSizeMM, 2958). --define(wxPrintout_GetPageSizePixels, 2959). --define(wxPrintout_GetPaperRectPixels, 2960). --define(wxPrintout_GetPPIPrinter, 2961). --define(wxPrintout_GetPPIScreen, 2962). --define(wxPrintout_GetTitle, 2963). --define(wxPrintout_IsPreview, 2964). --define(wxPrintout_FitThisSizeToPaper, 2965). --define(wxPrintout_FitThisSizeToPage, 2966). --define(wxPrintout_FitThisSizeToPageMargins, 2967). --define(wxPrintout_MapScreenSizeToPaper, 2968). --define(wxPrintout_MapScreenSizeToPage, 2969). --define(wxPrintout_MapScreenSizeToPageMargins, 2970). --define(wxPrintout_MapScreenSizeToDevice, 2971). --define(wxPrintout_GetLogicalPaperRect, 2972). --define(wxPrintout_GetLogicalPageRect, 2973). --define(wxPrintout_GetLogicalPageMarginsRect, 2974). --define(wxPrintout_SetLogicalOrigin, 2975). --define(wxPrintout_OffsetLogicalOrigin, 2976). --define(wxStyledTextCtrl_new_2, 2977). --define(wxStyledTextCtrl_new_0, 2978). --define(wxStyledTextCtrl_destruct, 2979). --define(wxStyledTextCtrl_Create, 2980). --define(wxStyledTextCtrl_AddText, 2981). --define(wxStyledTextCtrl_AddStyledText, 2982). --define(wxStyledTextCtrl_InsertText, 2983). --define(wxStyledTextCtrl_ClearAll, 2984). --define(wxStyledTextCtrl_ClearDocumentStyle, 2985). --define(wxStyledTextCtrl_GetLength, 2986). --define(wxStyledTextCtrl_GetCharAt, 2987). --define(wxStyledTextCtrl_GetCurrentPos, 2988). --define(wxStyledTextCtrl_GetAnchor, 2989). --define(wxStyledTextCtrl_GetStyleAt, 2990). --define(wxStyledTextCtrl_Redo, 2991). --define(wxStyledTextCtrl_SetUndoCollection, 2992). --define(wxStyledTextCtrl_SelectAll, 2993). --define(wxStyledTextCtrl_SetSavePoint, 2994). --define(wxStyledTextCtrl_GetStyledText, 2995). --define(wxStyledTextCtrl_CanRedo, 2996). --define(wxStyledTextCtrl_MarkerLineFromHandle, 2997). --define(wxStyledTextCtrl_MarkerDeleteHandle, 2998). --define(wxStyledTextCtrl_GetUndoCollection, 2999). --define(wxStyledTextCtrl_GetViewWhiteSpace, 3000). --define(wxStyledTextCtrl_SetViewWhiteSpace, 3001). --define(wxStyledTextCtrl_PositionFromPoint, 3002). --define(wxStyledTextCtrl_PositionFromPointClose, 3003). --define(wxStyledTextCtrl_GotoLine, 3004). --define(wxStyledTextCtrl_GotoPos, 3005). --define(wxStyledTextCtrl_SetAnchor, 3006). --define(wxStyledTextCtrl_GetCurLine, 3007). --define(wxStyledTextCtrl_GetEndStyled, 3008). --define(wxStyledTextCtrl_ConvertEOLs, 3009). --define(wxStyledTextCtrl_GetEOLMode, 3010). --define(wxStyledTextCtrl_SetEOLMode, 3011). --define(wxStyledTextCtrl_StartStyling, 3012). --define(wxStyledTextCtrl_SetStyling, 3013). --define(wxStyledTextCtrl_GetBufferedDraw, 3014). --define(wxStyledTextCtrl_SetBufferedDraw, 3015). --define(wxStyledTextCtrl_SetTabWidth, 3016). --define(wxStyledTextCtrl_GetTabWidth, 3017). --define(wxStyledTextCtrl_SetCodePage, 3018). --define(wxStyledTextCtrl_MarkerDefine, 3019). --define(wxStyledTextCtrl_MarkerSetForeground, 3020). --define(wxStyledTextCtrl_MarkerSetBackground, 3021). --define(wxStyledTextCtrl_MarkerAdd, 3022). --define(wxStyledTextCtrl_MarkerDelete, 3023). --define(wxStyledTextCtrl_MarkerDeleteAll, 3024). --define(wxStyledTextCtrl_MarkerGet, 3025). --define(wxStyledTextCtrl_MarkerNext, 3026). --define(wxStyledTextCtrl_MarkerPrevious, 3027). --define(wxStyledTextCtrl_MarkerDefineBitmap, 3028). --define(wxStyledTextCtrl_MarkerAddSet, 3029). --define(wxStyledTextCtrl_MarkerSetAlpha, 3030). --define(wxStyledTextCtrl_SetMarginType, 3031). --define(wxStyledTextCtrl_GetMarginType, 3032). --define(wxStyledTextCtrl_SetMarginWidth, 3033). --define(wxStyledTextCtrl_GetMarginWidth, 3034). --define(wxStyledTextCtrl_SetMarginMask, 3035). --define(wxStyledTextCtrl_GetMarginMask, 3036). --define(wxStyledTextCtrl_SetMarginSensitive, 3037). --define(wxStyledTextCtrl_GetMarginSensitive, 3038). --define(wxStyledTextCtrl_StyleClearAll, 3039). --define(wxStyledTextCtrl_StyleSetForeground, 3040). --define(wxStyledTextCtrl_StyleSetBackground, 3041). --define(wxStyledTextCtrl_StyleSetBold, 3042). --define(wxStyledTextCtrl_StyleSetItalic, 3043). --define(wxStyledTextCtrl_StyleSetSize, 3044). --define(wxStyledTextCtrl_StyleSetFaceName, 3045). --define(wxStyledTextCtrl_StyleSetEOLFilled, 3046). --define(wxStyledTextCtrl_StyleResetDefault, 3047). --define(wxStyledTextCtrl_StyleSetUnderline, 3048). --define(wxStyledTextCtrl_StyleSetCase, 3049). --define(wxStyledTextCtrl_StyleSetHotSpot, 3050). --define(wxStyledTextCtrl_SetSelForeground, 3051). --define(wxStyledTextCtrl_SetSelBackground, 3052). --define(wxStyledTextCtrl_GetSelAlpha, 3053). --define(wxStyledTextCtrl_SetSelAlpha, 3054). --define(wxStyledTextCtrl_SetCaretForeground, 3055). --define(wxStyledTextCtrl_CmdKeyAssign, 3056). --define(wxStyledTextCtrl_CmdKeyClear, 3057). --define(wxStyledTextCtrl_CmdKeyClearAll, 3058). --define(wxStyledTextCtrl_SetStyleBytes, 3059). --define(wxStyledTextCtrl_StyleSetVisible, 3060). --define(wxStyledTextCtrl_GetCaretPeriod, 3061). --define(wxStyledTextCtrl_SetCaretPeriod, 3062). --define(wxStyledTextCtrl_SetWordChars, 3063). --define(wxStyledTextCtrl_BeginUndoAction, 3064). --define(wxStyledTextCtrl_EndUndoAction, 3065). --define(wxStyledTextCtrl_IndicatorSetStyle, 3066). --define(wxStyledTextCtrl_IndicatorGetStyle, 3067). --define(wxStyledTextCtrl_IndicatorSetForeground, 3068). --define(wxStyledTextCtrl_IndicatorGetForeground, 3069). --define(wxStyledTextCtrl_SetWhitespaceForeground, 3070). --define(wxStyledTextCtrl_SetWhitespaceBackground, 3071). --define(wxStyledTextCtrl_GetStyleBits, 3072). --define(wxStyledTextCtrl_SetLineState, 3073). --define(wxStyledTextCtrl_GetLineState, 3074). --define(wxStyledTextCtrl_GetMaxLineState, 3075). --define(wxStyledTextCtrl_GetCaretLineVisible, 3076). --define(wxStyledTextCtrl_SetCaretLineVisible, 3077). --define(wxStyledTextCtrl_GetCaretLineBackground, 3078). --define(wxStyledTextCtrl_SetCaretLineBackground, 3079). --define(wxStyledTextCtrl_AutoCompShow, 3080). --define(wxStyledTextCtrl_AutoCompCancel, 3081). --define(wxStyledTextCtrl_AutoCompActive, 3082). --define(wxStyledTextCtrl_AutoCompPosStart, 3083). --define(wxStyledTextCtrl_AutoCompComplete, 3084). --define(wxStyledTextCtrl_AutoCompStops, 3085). --define(wxStyledTextCtrl_AutoCompSetSeparator, 3086). --define(wxStyledTextCtrl_AutoCompGetSeparator, 3087). --define(wxStyledTextCtrl_AutoCompSelect, 3088). --define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3089). --define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3090). --define(wxStyledTextCtrl_AutoCompSetFillUps, 3091). --define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3092). --define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3093). --define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3094). --define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3095). --define(wxStyledTextCtrl_UserListShow, 3096). --define(wxStyledTextCtrl_AutoCompSetAutoHide, 3097). --define(wxStyledTextCtrl_AutoCompGetAutoHide, 3098). --define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3099). --define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3100). --define(wxStyledTextCtrl_RegisterImage, 3101). --define(wxStyledTextCtrl_ClearRegisteredImages, 3102). --define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3103). --define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3104). --define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3105). --define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3106). --define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3107). --define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3108). --define(wxStyledTextCtrl_SetIndent, 3109). --define(wxStyledTextCtrl_GetIndent, 3110). --define(wxStyledTextCtrl_SetUseTabs, 3111). --define(wxStyledTextCtrl_GetUseTabs, 3112). --define(wxStyledTextCtrl_SetLineIndentation, 3113). --define(wxStyledTextCtrl_GetLineIndentation, 3114). --define(wxStyledTextCtrl_GetLineIndentPosition, 3115). --define(wxStyledTextCtrl_GetColumn, 3116). --define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3117). --define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3118). --define(wxStyledTextCtrl_SetIndentationGuides, 3119). --define(wxStyledTextCtrl_GetIndentationGuides, 3120). --define(wxStyledTextCtrl_SetHighlightGuide, 3121). --define(wxStyledTextCtrl_GetHighlightGuide, 3122). --define(wxStyledTextCtrl_GetLineEndPosition, 3123). --define(wxStyledTextCtrl_GetCodePage, 3124). --define(wxStyledTextCtrl_GetCaretForeground, 3125). --define(wxStyledTextCtrl_GetReadOnly, 3126). --define(wxStyledTextCtrl_SetCurrentPos, 3127). --define(wxStyledTextCtrl_SetSelectionStart, 3128). --define(wxStyledTextCtrl_GetSelectionStart, 3129). --define(wxStyledTextCtrl_SetSelectionEnd, 3130). --define(wxStyledTextCtrl_GetSelectionEnd, 3131). --define(wxStyledTextCtrl_SetPrintMagnification, 3132). --define(wxStyledTextCtrl_GetPrintMagnification, 3133). --define(wxStyledTextCtrl_SetPrintColourMode, 3134). --define(wxStyledTextCtrl_GetPrintColourMode, 3135). --define(wxStyledTextCtrl_FindText, 3136). --define(wxStyledTextCtrl_FormatRange, 3137). --define(wxStyledTextCtrl_GetFirstVisibleLine, 3138). --define(wxStyledTextCtrl_GetLine, 3139). --define(wxStyledTextCtrl_GetLineCount, 3140). --define(wxStyledTextCtrl_SetMarginLeft, 3141). --define(wxStyledTextCtrl_GetMarginLeft, 3142). --define(wxStyledTextCtrl_SetMarginRight, 3143). --define(wxStyledTextCtrl_GetMarginRight, 3144). --define(wxStyledTextCtrl_GetModify, 3145). --define(wxStyledTextCtrl_SetSelection, 3146). --define(wxStyledTextCtrl_GetSelectedText, 3147). --define(wxStyledTextCtrl_GetTextRange, 3148). --define(wxStyledTextCtrl_HideSelection, 3149). --define(wxStyledTextCtrl_LineFromPosition, 3150). --define(wxStyledTextCtrl_PositionFromLine, 3151). --define(wxStyledTextCtrl_LineScroll, 3152). --define(wxStyledTextCtrl_EnsureCaretVisible, 3153). --define(wxStyledTextCtrl_ReplaceSelection, 3154). --define(wxStyledTextCtrl_SetReadOnly, 3155). --define(wxStyledTextCtrl_CanPaste, 3156). --define(wxStyledTextCtrl_CanUndo, 3157). --define(wxStyledTextCtrl_EmptyUndoBuffer, 3158). --define(wxStyledTextCtrl_Undo, 3159). --define(wxStyledTextCtrl_Cut, 3160). --define(wxStyledTextCtrl_Copy, 3161). --define(wxStyledTextCtrl_Paste, 3162). --define(wxStyledTextCtrl_Clear, 3163). --define(wxStyledTextCtrl_SetText, 3164). --define(wxStyledTextCtrl_GetText, 3165). --define(wxStyledTextCtrl_GetTextLength, 3166). --define(wxStyledTextCtrl_GetOvertype, 3167). --define(wxStyledTextCtrl_SetCaretWidth, 3168). --define(wxStyledTextCtrl_GetCaretWidth, 3169). --define(wxStyledTextCtrl_SetTargetStart, 3170). --define(wxStyledTextCtrl_GetTargetStart, 3171). --define(wxStyledTextCtrl_SetTargetEnd, 3172). --define(wxStyledTextCtrl_GetTargetEnd, 3173). --define(wxStyledTextCtrl_ReplaceTarget, 3174). --define(wxStyledTextCtrl_SearchInTarget, 3175). --define(wxStyledTextCtrl_SetSearchFlags, 3176). --define(wxStyledTextCtrl_GetSearchFlags, 3177). --define(wxStyledTextCtrl_CallTipShow, 3178). --define(wxStyledTextCtrl_CallTipCancel, 3179). --define(wxStyledTextCtrl_CallTipActive, 3180). --define(wxStyledTextCtrl_CallTipPosAtStart, 3181). --define(wxStyledTextCtrl_CallTipSetHighlight, 3182). --define(wxStyledTextCtrl_CallTipSetBackground, 3183). --define(wxStyledTextCtrl_CallTipSetForeground, 3184). --define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3185). --define(wxStyledTextCtrl_CallTipUseStyle, 3186). --define(wxStyledTextCtrl_VisibleFromDocLine, 3187). --define(wxStyledTextCtrl_DocLineFromVisible, 3188). --define(wxStyledTextCtrl_WrapCount, 3189). --define(wxStyledTextCtrl_SetFoldLevel, 3190). --define(wxStyledTextCtrl_GetFoldLevel, 3191). --define(wxStyledTextCtrl_GetLastChild, 3192). --define(wxStyledTextCtrl_GetFoldParent, 3193). --define(wxStyledTextCtrl_ShowLines, 3194). --define(wxStyledTextCtrl_HideLines, 3195). --define(wxStyledTextCtrl_GetLineVisible, 3196). --define(wxStyledTextCtrl_SetFoldExpanded, 3197). --define(wxStyledTextCtrl_GetFoldExpanded, 3198). --define(wxStyledTextCtrl_ToggleFold, 3199). --define(wxStyledTextCtrl_EnsureVisible, 3200). --define(wxStyledTextCtrl_SetFoldFlags, 3201). --define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3202). --define(wxStyledTextCtrl_SetTabIndents, 3203). --define(wxStyledTextCtrl_GetTabIndents, 3204). --define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3205). --define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3206). --define(wxStyledTextCtrl_SetMouseDwellTime, 3207). --define(wxStyledTextCtrl_GetMouseDwellTime, 3208). --define(wxStyledTextCtrl_WordStartPosition, 3209). --define(wxStyledTextCtrl_WordEndPosition, 3210). --define(wxStyledTextCtrl_SetWrapMode, 3211). --define(wxStyledTextCtrl_GetWrapMode, 3212). --define(wxStyledTextCtrl_SetWrapVisualFlags, 3213). --define(wxStyledTextCtrl_GetWrapVisualFlags, 3214). --define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3215). --define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3216). --define(wxStyledTextCtrl_SetWrapStartIndent, 3217). --define(wxStyledTextCtrl_GetWrapStartIndent, 3218). --define(wxStyledTextCtrl_SetLayoutCache, 3219). --define(wxStyledTextCtrl_GetLayoutCache, 3220). --define(wxStyledTextCtrl_SetScrollWidth, 3221). --define(wxStyledTextCtrl_GetScrollWidth, 3222). --define(wxStyledTextCtrl_TextWidth, 3223). --define(wxStyledTextCtrl_GetEndAtLastLine, 3224). --define(wxStyledTextCtrl_TextHeight, 3225). --define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3226). --define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3227). --define(wxStyledTextCtrl_AppendText, 3228). --define(wxStyledTextCtrl_GetTwoPhaseDraw, 3229). --define(wxStyledTextCtrl_SetTwoPhaseDraw, 3230). --define(wxStyledTextCtrl_TargetFromSelection, 3231). --define(wxStyledTextCtrl_LinesJoin, 3232). --define(wxStyledTextCtrl_LinesSplit, 3233). --define(wxStyledTextCtrl_SetFoldMarginColour, 3234). --define(wxStyledTextCtrl_SetFoldMarginHiColour, 3235). --define(wxStyledTextCtrl_LineDown, 3236). --define(wxStyledTextCtrl_LineDownExtend, 3237). --define(wxStyledTextCtrl_LineUp, 3238). --define(wxStyledTextCtrl_LineUpExtend, 3239). --define(wxStyledTextCtrl_CharLeft, 3240). --define(wxStyledTextCtrl_CharLeftExtend, 3241). --define(wxStyledTextCtrl_CharRight, 3242). --define(wxStyledTextCtrl_CharRightExtend, 3243). --define(wxStyledTextCtrl_WordLeft, 3244). --define(wxStyledTextCtrl_WordLeftExtend, 3245). --define(wxStyledTextCtrl_WordRight, 3246). --define(wxStyledTextCtrl_WordRightExtend, 3247). --define(wxStyledTextCtrl_Home, 3248). --define(wxStyledTextCtrl_HomeExtend, 3249). --define(wxStyledTextCtrl_LineEnd, 3250). --define(wxStyledTextCtrl_LineEndExtend, 3251). --define(wxStyledTextCtrl_DocumentStart, 3252). --define(wxStyledTextCtrl_DocumentStartExtend, 3253). --define(wxStyledTextCtrl_DocumentEnd, 3254). --define(wxStyledTextCtrl_DocumentEndExtend, 3255). --define(wxStyledTextCtrl_PageUp, 3256). --define(wxStyledTextCtrl_PageUpExtend, 3257). --define(wxStyledTextCtrl_PageDown, 3258). --define(wxStyledTextCtrl_PageDownExtend, 3259). --define(wxStyledTextCtrl_EditToggleOvertype, 3260). --define(wxStyledTextCtrl_Cancel, 3261). --define(wxStyledTextCtrl_DeleteBack, 3262). --define(wxStyledTextCtrl_Tab, 3263). --define(wxStyledTextCtrl_BackTab, 3264). --define(wxStyledTextCtrl_NewLine, 3265). --define(wxStyledTextCtrl_FormFeed, 3266). --define(wxStyledTextCtrl_VCHome, 3267). --define(wxStyledTextCtrl_VCHomeExtend, 3268). --define(wxStyledTextCtrl_ZoomIn, 3269). --define(wxStyledTextCtrl_ZoomOut, 3270). --define(wxStyledTextCtrl_DelWordLeft, 3271). --define(wxStyledTextCtrl_DelWordRight, 3272). --define(wxStyledTextCtrl_LineCut, 3273). --define(wxStyledTextCtrl_LineDelete, 3274). --define(wxStyledTextCtrl_LineTranspose, 3275). --define(wxStyledTextCtrl_LineDuplicate, 3276). --define(wxStyledTextCtrl_LowerCase, 3277). --define(wxStyledTextCtrl_UpperCase, 3278). --define(wxStyledTextCtrl_LineScrollDown, 3279). --define(wxStyledTextCtrl_LineScrollUp, 3280). --define(wxStyledTextCtrl_DeleteBackNotLine, 3281). --define(wxStyledTextCtrl_HomeDisplay, 3282). --define(wxStyledTextCtrl_HomeDisplayExtend, 3283). --define(wxStyledTextCtrl_LineEndDisplay, 3284). --define(wxStyledTextCtrl_LineEndDisplayExtend, 3285). --define(wxStyledTextCtrl_HomeWrapExtend, 3286). --define(wxStyledTextCtrl_LineEndWrap, 3287). --define(wxStyledTextCtrl_LineEndWrapExtend, 3288). --define(wxStyledTextCtrl_VCHomeWrap, 3289). --define(wxStyledTextCtrl_VCHomeWrapExtend, 3290). --define(wxStyledTextCtrl_LineCopy, 3291). --define(wxStyledTextCtrl_MoveCaretInsideView, 3292). --define(wxStyledTextCtrl_LineLength, 3293). --define(wxStyledTextCtrl_BraceHighlight, 3294). --define(wxStyledTextCtrl_BraceBadLight, 3295). --define(wxStyledTextCtrl_BraceMatch, 3296). --define(wxStyledTextCtrl_GetViewEOL, 3297). --define(wxStyledTextCtrl_SetViewEOL, 3298). --define(wxStyledTextCtrl_SetModEventMask, 3299). --define(wxStyledTextCtrl_GetEdgeColumn, 3300). --define(wxStyledTextCtrl_SetEdgeColumn, 3301). --define(wxStyledTextCtrl_SetEdgeMode, 3302). --define(wxStyledTextCtrl_GetEdgeMode, 3303). --define(wxStyledTextCtrl_GetEdgeColour, 3304). --define(wxStyledTextCtrl_SetEdgeColour, 3305). --define(wxStyledTextCtrl_SearchAnchor, 3306). --define(wxStyledTextCtrl_SearchNext, 3307). --define(wxStyledTextCtrl_SearchPrev, 3308). --define(wxStyledTextCtrl_LinesOnScreen, 3309). --define(wxStyledTextCtrl_UsePopUp, 3310). --define(wxStyledTextCtrl_SelectionIsRectangle, 3311). --define(wxStyledTextCtrl_SetZoom, 3312). --define(wxStyledTextCtrl_GetZoom, 3313). --define(wxStyledTextCtrl_GetModEventMask, 3314). --define(wxStyledTextCtrl_SetSTCFocus, 3315). --define(wxStyledTextCtrl_GetSTCFocus, 3316). --define(wxStyledTextCtrl_SetStatus, 3317). --define(wxStyledTextCtrl_GetStatus, 3318). --define(wxStyledTextCtrl_SetMouseDownCaptures, 3319). --define(wxStyledTextCtrl_GetMouseDownCaptures, 3320). --define(wxStyledTextCtrl_SetSTCCursor, 3321). --define(wxStyledTextCtrl_GetSTCCursor, 3322). --define(wxStyledTextCtrl_SetControlCharSymbol, 3323). --define(wxStyledTextCtrl_GetControlCharSymbol, 3324). --define(wxStyledTextCtrl_WordPartLeft, 3325). --define(wxStyledTextCtrl_WordPartLeftExtend, 3326). --define(wxStyledTextCtrl_WordPartRight, 3327). --define(wxStyledTextCtrl_WordPartRightExtend, 3328). --define(wxStyledTextCtrl_SetVisiblePolicy, 3329). --define(wxStyledTextCtrl_DelLineLeft, 3330). --define(wxStyledTextCtrl_DelLineRight, 3331). --define(wxStyledTextCtrl_GetXOffset, 3332). --define(wxStyledTextCtrl_ChooseCaretX, 3333). --define(wxStyledTextCtrl_SetXCaretPolicy, 3334). --define(wxStyledTextCtrl_SetYCaretPolicy, 3335). --define(wxStyledTextCtrl_GetPrintWrapMode, 3336). --define(wxStyledTextCtrl_SetHotspotActiveForeground, 3337). --define(wxStyledTextCtrl_SetHotspotActiveBackground, 3338). --define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3339). --define(wxStyledTextCtrl_SetHotspotSingleLine, 3340). --define(wxStyledTextCtrl_ParaDownExtend, 3341). --define(wxStyledTextCtrl_ParaUp, 3342). --define(wxStyledTextCtrl_ParaUpExtend, 3343). --define(wxStyledTextCtrl_PositionBefore, 3344). --define(wxStyledTextCtrl_PositionAfter, 3345). --define(wxStyledTextCtrl_CopyRange, 3346). --define(wxStyledTextCtrl_CopyText, 3347). --define(wxStyledTextCtrl_SetSelectionMode, 3348). --define(wxStyledTextCtrl_GetSelectionMode, 3349). --define(wxStyledTextCtrl_LineDownRectExtend, 3350). --define(wxStyledTextCtrl_LineUpRectExtend, 3351). --define(wxStyledTextCtrl_CharLeftRectExtend, 3352). --define(wxStyledTextCtrl_CharRightRectExtend, 3353). --define(wxStyledTextCtrl_HomeRectExtend, 3354). --define(wxStyledTextCtrl_VCHomeRectExtend, 3355). --define(wxStyledTextCtrl_LineEndRectExtend, 3356). --define(wxStyledTextCtrl_PageUpRectExtend, 3357). --define(wxStyledTextCtrl_PageDownRectExtend, 3358). --define(wxStyledTextCtrl_StutteredPageUp, 3359). --define(wxStyledTextCtrl_StutteredPageUpExtend, 3360). --define(wxStyledTextCtrl_StutteredPageDown, 3361). --define(wxStyledTextCtrl_StutteredPageDownExtend, 3362). --define(wxStyledTextCtrl_WordLeftEnd, 3363). --define(wxStyledTextCtrl_WordLeftEndExtend, 3364). --define(wxStyledTextCtrl_WordRightEnd, 3365). --define(wxStyledTextCtrl_WordRightEndExtend, 3366). --define(wxStyledTextCtrl_SetWhitespaceChars, 3367). --define(wxStyledTextCtrl_SetCharsDefault, 3368). --define(wxStyledTextCtrl_AutoCompGetCurrent, 3369). --define(wxStyledTextCtrl_Allocate, 3370). --define(wxStyledTextCtrl_FindColumn, 3371). --define(wxStyledTextCtrl_GetCaretSticky, 3372). --define(wxStyledTextCtrl_SetCaretSticky, 3373). --define(wxStyledTextCtrl_ToggleCaretSticky, 3374). --define(wxStyledTextCtrl_SetPasteConvertEndings, 3375). --define(wxStyledTextCtrl_GetPasteConvertEndings, 3376). --define(wxStyledTextCtrl_SelectionDuplicate, 3377). --define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3378). --define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3379). --define(wxStyledTextCtrl_StartRecord, 3380). --define(wxStyledTextCtrl_StopRecord, 3381). --define(wxStyledTextCtrl_SetLexer, 3382). --define(wxStyledTextCtrl_GetLexer, 3383). --define(wxStyledTextCtrl_Colourise, 3384). --define(wxStyledTextCtrl_SetProperty, 3385). --define(wxStyledTextCtrl_SetKeyWords, 3386). --define(wxStyledTextCtrl_SetLexerLanguage, 3387). --define(wxStyledTextCtrl_GetProperty, 3388). --define(wxStyledTextCtrl_GetStyleBitsNeeded, 3389). --define(wxStyledTextCtrl_GetCurrentLine, 3390). --define(wxStyledTextCtrl_StyleSetSpec, 3391). --define(wxStyledTextCtrl_StyleSetFont, 3392). --define(wxStyledTextCtrl_StyleSetFontAttr, 3393). --define(wxStyledTextCtrl_StyleSetCharacterSet, 3394). --define(wxStyledTextCtrl_StyleSetFontEncoding, 3395). --define(wxStyledTextCtrl_CmdKeyExecute, 3396). --define(wxStyledTextCtrl_SetMargins, 3397). --define(wxStyledTextCtrl_GetSelection, 3398). --define(wxStyledTextCtrl_PointFromPosition, 3399). --define(wxStyledTextCtrl_ScrollToLine, 3400). --define(wxStyledTextCtrl_ScrollToColumn, 3401). --define(wxStyledTextCtrl_SetVScrollBar, 3402). --define(wxStyledTextCtrl_SetHScrollBar, 3403). --define(wxStyledTextCtrl_GetLastKeydownProcessed, 3404). --define(wxStyledTextCtrl_SetLastKeydownProcessed, 3405). --define(wxStyledTextCtrl_SaveFile, 3406). --define(wxStyledTextCtrl_LoadFile, 3407). --define(wxStyledTextCtrl_DoDragOver, 3408). --define(wxStyledTextCtrl_DoDropText, 3409). --define(wxStyledTextCtrl_GetUseAntiAliasing, 3410). --define(wxStyledTextCtrl_AddTextRaw, 3411). --define(wxStyledTextCtrl_InsertTextRaw, 3412). --define(wxStyledTextCtrl_GetCurLineRaw, 3413). --define(wxStyledTextCtrl_GetLineRaw, 3414). --define(wxStyledTextCtrl_GetSelectedTextRaw, 3415). --define(wxStyledTextCtrl_GetTextRangeRaw, 3416). --define(wxStyledTextCtrl_SetTextRaw, 3417). --define(wxStyledTextCtrl_GetTextRaw, 3418). --define(wxStyledTextCtrl_AppendTextRaw, 3419). --define(wxArtProvider_GetBitmap, 3420). --define(wxArtProvider_GetIcon, 3421). --define(wxTreeEvent_GetKeyCode, 3422). --define(wxTreeEvent_GetItem, 3423). --define(wxTreeEvent_GetKeyEvent, 3424). --define(wxTreeEvent_GetLabel, 3425). --define(wxTreeEvent_GetOldItem, 3426). --define(wxTreeEvent_GetPoint, 3427). --define(wxTreeEvent_IsEditCancelled, 3428). --define(wxTreeEvent_SetToolTip, 3429). --define(wxNotebookEvent_GetOldSelection, 3430). --define(wxNotebookEvent_GetSelection, 3431). --define(wxNotebookEvent_SetOldSelection, 3432). --define(wxNotebookEvent_SetSelection, 3433). --define(wxFileDataObject_new, 3434). --define(wxFileDataObject_AddFile, 3435). --define(wxFileDataObject_GetFilenames, 3436). --define(wxFileDataObject_destroy, 3437). --define(wxTextDataObject_new, 3438). --define(wxTextDataObject_GetTextLength, 3439). --define(wxTextDataObject_GetText, 3440). --define(wxTextDataObject_SetText, 3441). --define(wxTextDataObject_destroy, 3442). --define(wxBitmapDataObject_new_1_1, 3443). --define(wxBitmapDataObject_new_1_0, 3444). --define(wxBitmapDataObject_GetBitmap, 3445). --define(wxBitmapDataObject_SetBitmap, 3446). --define(wxBitmapDataObject_destroy, 3447). --define(wxClipboard_new, 3449). --define(wxClipboard_destruct, 3450). --define(wxClipboard_AddData, 3451). --define(wxClipboard_Clear, 3452). --define(wxClipboard_Close, 3453). --define(wxClipboard_Flush, 3454). --define(wxClipboard_GetData, 3455). --define(wxClipboard_IsOpened, 3456). --define(wxClipboard_Open, 3457). --define(wxClipboard_SetData, 3458). --define(wxClipboard_UsePrimarySelection, 3460). --define(wxClipboard_IsSupported, 3461). --define(wxClipboard_Get, 3462). --define(wxSpinEvent_GetPosition, 3463). --define(wxSpinEvent_SetPosition, 3464). --define(wxSplitterWindow_new_0, 3465). --define(wxSplitterWindow_new_2, 3466). --define(wxSplitterWindow_destruct, 3467). --define(wxSplitterWindow_Create, 3468). --define(wxSplitterWindow_GetMinimumPaneSize, 3469). --define(wxSplitterWindow_GetSashGravity, 3470). --define(wxSplitterWindow_GetSashPosition, 3471). --define(wxSplitterWindow_GetSplitMode, 3472). --define(wxSplitterWindow_GetWindow1, 3473). --define(wxSplitterWindow_GetWindow2, 3474). --define(wxSplitterWindow_Initialize, 3475). --define(wxSplitterWindow_IsSplit, 3476). --define(wxSplitterWindow_ReplaceWindow, 3477). --define(wxSplitterWindow_SetSashGravity, 3478). --define(wxSplitterWindow_SetSashPosition, 3479). --define(wxSplitterWindow_SetSashSize, 3480). --define(wxSplitterWindow_SetMinimumPaneSize, 3481). --define(wxSplitterWindow_SetSplitMode, 3482). --define(wxSplitterWindow_SplitHorizontally, 3483). --define(wxSplitterWindow_SplitVertically, 3484). --define(wxSplitterWindow_Unsplit, 3485). --define(wxSplitterWindow_UpdateSize, 3486). --define(wxSplitterEvent_GetSashPosition, 3487). --define(wxSplitterEvent_GetX, 3488). --define(wxSplitterEvent_GetY, 3489). --define(wxSplitterEvent_GetWindowBeingRemoved, 3490). --define(wxSplitterEvent_SetSashPosition, 3491). --define(wxHtmlWindow_new_0, 3492). --define(wxHtmlWindow_new_2, 3493). --define(wxHtmlWindow_AppendToPage, 3494). --define(wxHtmlWindow_GetOpenedAnchor, 3495). --define(wxHtmlWindow_GetOpenedPage, 3496). --define(wxHtmlWindow_GetOpenedPageTitle, 3497). --define(wxHtmlWindow_GetRelatedFrame, 3498). --define(wxHtmlWindow_HistoryBack, 3499). --define(wxHtmlWindow_HistoryCanBack, 3500). --define(wxHtmlWindow_HistoryCanForward, 3501). --define(wxHtmlWindow_HistoryClear, 3502). --define(wxHtmlWindow_HistoryForward, 3503). --define(wxHtmlWindow_LoadFile, 3504). --define(wxHtmlWindow_LoadPage, 3505). --define(wxHtmlWindow_SelectAll, 3506). --define(wxHtmlWindow_SelectionToText, 3507). --define(wxHtmlWindow_SelectLine, 3508). --define(wxHtmlWindow_SelectWord, 3509). --define(wxHtmlWindow_SetBorders, 3510). --define(wxHtmlWindow_SetFonts, 3511). --define(wxHtmlWindow_SetPage, 3512). --define(wxHtmlWindow_SetRelatedFrame, 3513). --define(wxHtmlWindow_SetRelatedStatusBar, 3514). --define(wxHtmlWindow_ToText, 3515). --define(wxHtmlWindow_destroy, 3516). --define(wxHtmlLinkEvent_GetLinkInfo, 3517). --define(wxSystemSettings_GetColour, 3518). --define(wxSystemSettings_GetFont, 3519). --define(wxSystemSettings_GetMetric, 3520). --define(wxSystemSettings_GetScreenType, 3521). --define(wxSystemOptions_GetOption, 3522). --define(wxSystemOptions_GetOptionInt, 3523). --define(wxSystemOptions_HasOption, 3524). --define(wxSystemOptions_IsFalse, 3525). --define(wxSystemOptions_SetOption_2_1, 3526). --define(wxSystemOptions_SetOption_2_0, 3527). --define(wxAuiNotebookEvent_SetSelection, 3528). --define(wxAuiNotebookEvent_GetSelection, 3529). --define(wxAuiNotebookEvent_SetOldSelection, 3530). --define(wxAuiNotebookEvent_GetOldSelection, 3531). --define(wxAuiNotebookEvent_SetDragSource, 3532). --define(wxAuiNotebookEvent_GetDragSource, 3533). --define(wxAuiManagerEvent_SetManager, 3534). --define(wxAuiManagerEvent_GetManager, 3535). --define(wxAuiManagerEvent_SetPane, 3536). --define(wxAuiManagerEvent_GetPane, 3537). --define(wxAuiManagerEvent_SetButton, 3538). --define(wxAuiManagerEvent_GetButton, 3539). --define(wxAuiManagerEvent_SetDC, 3540). --define(wxAuiManagerEvent_GetDC, 3541). --define(wxAuiManagerEvent_Veto, 3542). --define(wxAuiManagerEvent_GetVeto, 3543). --define(wxAuiManagerEvent_SetCanVeto, 3544). --define(wxAuiManagerEvent_CanVeto, 3545). --define(wxLogNull_new, 3546). --define(wxLogNull_destroy, 3547). --define(wxTaskBarIcon_new, 3548). --define(wxTaskBarIcon_destruct, 3549). --define(wxTaskBarIcon_PopupMenu, 3550). --define(wxTaskBarIcon_RemoveIcon, 3551). --define(wxTaskBarIcon_SetIcon, 3552). --define(wxLocale_new_0, 3553). --define(wxLocale_new_2, 3555). --define(wxLocale_destruct, 3556). --define(wxLocale_Init, 3558). --define(wxLocale_AddCatalog_1, 3559). --define(wxLocale_AddCatalog_3, 3560). --define(wxLocale_AddCatalogLookupPathPrefix, 3561). --define(wxLocale_GetCanonicalName, 3562). --define(wxLocale_GetLanguage, 3563). --define(wxLocale_GetLanguageName, 3564). --define(wxLocale_GetLocale, 3565). --define(wxLocale_GetName, 3566). --define(wxLocale_GetString_2, 3567). --define(wxLocale_GetString_4, 3568). --define(wxLocale_GetHeaderValue, 3569). --define(wxLocale_GetSysName, 3570). --define(wxLocale_GetSystemEncoding, 3571). --define(wxLocale_GetSystemEncodingName, 3572). --define(wxLocale_GetSystemLanguage, 3573). --define(wxLocale_IsLoaded, 3574). --define(wxLocale_IsOk, 3575). --define(wxActivateEvent_GetActive, 3576). --define(wxPopupWindow_new_2, 3578). --define(wxPopupWindow_new_0, 3579). --define(wxPopupWindow_destruct, 3581). --define(wxPopupWindow_Create, 3582). --define(wxPopupWindow_Position, 3583). --define(wxPopupTransientWindow_new_0, 3584). --define(wxPopupTransientWindow_new_2, 3585). --define(wxPopupTransientWindow_destruct, 3586). --define(wxPopupTransientWindow_Popup, 3587). --define(wxPopupTransientWindow_Dismiss, 3588). --define(wxOverlay_new, 3589). --define(wxOverlay_destruct, 3590). --define(wxOverlay_Reset, 3591). --define(wxDCOverlay_new_6, 3592). --define(wxDCOverlay_new_2, 3593). --define(wxDCOverlay_destruct, 3594). --define(wxDCOverlay_Clear, 3595). --define(wxDropFilesEvent_GetPosition, 3596). --define(wxDropFilesEvent_GetNumberOfFiles, 3597). --define(wxDropFilesEvent_GetFiles, 3598). +-define(wxWindow_GetContentScaleFactor, 289). +-define(wxTopLevelWindow_GetIcon, 290). +-define(wxTopLevelWindow_GetIcons, 291). +-define(wxTopLevelWindow_GetTitle, 292). +-define(wxTopLevelWindow_IsActive, 293). +-define(wxTopLevelWindow_Iconize, 294). +-define(wxTopLevelWindow_IsFullScreen, 295). +-define(wxTopLevelWindow_IsIconized, 296). +-define(wxTopLevelWindow_IsMaximized, 297). +-define(wxTopLevelWindow_Maximize, 298). +-define(wxTopLevelWindow_RequestUserAttention, 299). +-define(wxTopLevelWindow_SetIcon, 300). +-define(wxTopLevelWindow_SetIcons, 301). +-define(wxTopLevelWindow_CenterOnScreen, 302). +-define(wxTopLevelWindow_CentreOnScreen, 303). +-define(wxTopLevelWindow_SetShape, 305). +-define(wxTopLevelWindow_SetTitle, 306). +-define(wxTopLevelWindow_ShowFullScreen, 307). +-define(wxFrame_new_4, 309). +-define(wxFrame_new_0, 310). +-define(wxFrame_destruct, 312). +-define(wxFrame_Create, 313). +-define(wxFrame_CreateStatusBar, 314). +-define(wxFrame_CreateToolBar, 315). +-define(wxFrame_GetClientAreaOrigin, 316). +-define(wxFrame_GetMenuBar, 317). +-define(wxFrame_GetStatusBar, 318). +-define(wxFrame_GetStatusBarPane, 319). +-define(wxFrame_GetToolBar, 320). +-define(wxFrame_ProcessCommand, 321). +-define(wxFrame_SendSizeEvent, 322). +-define(wxFrame_SetMenuBar, 323). +-define(wxFrame_SetStatusBar, 324). +-define(wxFrame_SetStatusBarPane, 325). +-define(wxFrame_SetStatusText, 326). +-define(wxFrame_SetStatusWidths, 327). +-define(wxFrame_SetToolBar, 328). +-define(wxMiniFrame_new_0, 329). +-define(wxMiniFrame_new_4, 330). +-define(wxMiniFrame_Create, 331). +-define(wxMiniFrame_destroy, 332). +-define(wxSplashScreen_new_0, 333). +-define(wxSplashScreen_new_6, 334). +-define(wxSplashScreen_destruct, 335). +-define(wxSplashScreen_GetSplashStyle, 336). +-define(wxSplashScreen_GetTimeout, 337). +-define(wxPanel_new_0, 338). +-define(wxPanel_new_6, 339). +-define(wxPanel_new_2, 340). +-define(wxPanel_destruct, 341). +-define(wxPanel_InitDialog, 342). +-define(wxPanel_SetFocusIgnoringChildren, 343). +-define(wxScrolledWindow_new_0, 344). +-define(wxScrolledWindow_new_2, 345). +-define(wxScrolledWindow_destruct, 346). +-define(wxScrolledWindow_CalcScrolledPosition_4, 347). +-define(wxScrolledWindow_CalcScrolledPosition_1, 348). +-define(wxScrolledWindow_CalcUnscrolledPosition_4, 349). +-define(wxScrolledWindow_CalcUnscrolledPosition_1, 350). +-define(wxScrolledWindow_EnableScrolling, 351). +-define(wxScrolledWindow_GetScrollPixelsPerUnit, 352). +-define(wxScrolledWindow_GetViewStart, 353). +-define(wxScrolledWindow_DoPrepareDC, 354). +-define(wxScrolledWindow_PrepareDC, 355). +-define(wxScrolledWindow_Scroll, 356). +-define(wxScrolledWindow_SetScrollbars, 357). +-define(wxScrolledWindow_SetScrollRate, 358). +-define(wxScrolledWindow_SetTargetWindow, 359). +-define(wxSashWindow_new_0, 360). +-define(wxSashWindow_new_2, 361). +-define(wxSashWindow_destruct, 362). +-define(wxSashWindow_GetSashVisible, 363). +-define(wxSashWindow_GetMaximumSizeX, 364). +-define(wxSashWindow_GetMaximumSizeY, 365). +-define(wxSashWindow_GetMinimumSizeX, 366). +-define(wxSashWindow_GetMinimumSizeY, 367). +-define(wxSashWindow_SetMaximumSizeX, 368). +-define(wxSashWindow_SetMaximumSizeY, 369). +-define(wxSashWindow_SetMinimumSizeX, 370). +-define(wxSashWindow_SetMinimumSizeY, 371). +-define(wxSashWindow_SetSashVisible, 372). +-define(wxSashLayoutWindow_new_0, 373). +-define(wxSashLayoutWindow_new_2, 374). +-define(wxSashLayoutWindow_Create, 375). +-define(wxSashLayoutWindow_GetAlignment, 376). +-define(wxSashLayoutWindow_GetOrientation, 377). +-define(wxSashLayoutWindow_SetAlignment, 378). +-define(wxSashLayoutWindow_SetDefaultSize, 379). +-define(wxSashLayoutWindow_SetOrientation, 380). +-define(wxSashLayoutWindow_destroy, 381). +-define(wxGrid_new_0, 382). +-define(wxGrid_new_3, 383). +-define(wxGrid_new_4, 384). +-define(wxGrid_destruct, 385). +-define(wxGrid_AppendCols, 386). +-define(wxGrid_AppendRows, 387). +-define(wxGrid_AutoSize, 388). +-define(wxGrid_AutoSizeColumn, 389). +-define(wxGrid_AutoSizeColumns, 390). +-define(wxGrid_AutoSizeRow, 391). +-define(wxGrid_AutoSizeRows, 392). +-define(wxGrid_BeginBatch, 393). +-define(wxGrid_BlockToDeviceRect, 394). +-define(wxGrid_CanDragColSize, 395). +-define(wxGrid_CanDragRowSize, 396). +-define(wxGrid_CanDragGridSize, 397). +-define(wxGrid_CanEnableCellControl, 398). +-define(wxGrid_CellToRect_2, 399). +-define(wxGrid_CellToRect_1, 400). +-define(wxGrid_ClearGrid, 401). +-define(wxGrid_ClearSelection, 402). +-define(wxGrid_CreateGrid, 403). +-define(wxGrid_DeleteCols, 404). +-define(wxGrid_DeleteRows, 405). +-define(wxGrid_DisableCellEditControl, 406). +-define(wxGrid_DisableDragColSize, 407). +-define(wxGrid_DisableDragGridSize, 408). +-define(wxGrid_DisableDragRowSize, 409). +-define(wxGrid_EnableCellEditControl, 410). +-define(wxGrid_EnableDragColSize, 411). +-define(wxGrid_EnableDragGridSize, 412). +-define(wxGrid_EnableDragRowSize, 413). +-define(wxGrid_EnableEditing, 414). +-define(wxGrid_EnableGridLines, 415). +-define(wxGrid_EndBatch, 416). +-define(wxGrid_Fit, 417). +-define(wxGrid_ForceRefresh, 418). +-define(wxGrid_GetBatchCount, 419). +-define(wxGrid_GetCellAlignment, 420). +-define(wxGrid_GetCellBackgroundColour, 421). +-define(wxGrid_GetCellEditor, 422). +-define(wxGrid_GetCellFont, 423). +-define(wxGrid_GetCellRenderer, 424). +-define(wxGrid_GetCellTextColour, 425). +-define(wxGrid_GetCellValue_2, 426). +-define(wxGrid_GetCellValue_1, 427). +-define(wxGrid_GetColLabelAlignment, 428). +-define(wxGrid_GetColLabelSize, 429). +-define(wxGrid_GetColLabelValue, 430). +-define(wxGrid_GetColMinimalAcceptableWidth, 431). +-define(wxGrid_GetDefaultCellAlignment, 432). +-define(wxGrid_GetDefaultCellBackgroundColour, 433). +-define(wxGrid_GetDefaultCellFont, 434). +-define(wxGrid_GetDefaultCellTextColour, 435). +-define(wxGrid_GetDefaultColLabelSize, 436). +-define(wxGrid_GetDefaultColSize, 437). +-define(wxGrid_GetDefaultEditor, 438). +-define(wxGrid_GetDefaultEditorForCell_2, 439). +-define(wxGrid_GetDefaultEditorForCell_1, 440). +-define(wxGrid_GetDefaultEditorForType, 441). +-define(wxGrid_GetDefaultRenderer, 442). +-define(wxGrid_GetDefaultRendererForCell, 443). +-define(wxGrid_GetDefaultRendererForType, 444). +-define(wxGrid_GetDefaultRowLabelSize, 445). +-define(wxGrid_GetDefaultRowSize, 446). +-define(wxGrid_GetGridCursorCol, 447). +-define(wxGrid_GetGridCursorRow, 448). +-define(wxGrid_GetGridLineColour, 449). +-define(wxGrid_GridLinesEnabled, 450). +-define(wxGrid_GetLabelBackgroundColour, 451). +-define(wxGrid_GetLabelFont, 452). +-define(wxGrid_GetLabelTextColour, 453). +-define(wxGrid_GetNumberCols, 454). +-define(wxGrid_GetNumberRows, 455). +-define(wxGrid_GetOrCreateCellAttr, 456). +-define(wxGrid_GetRowMinimalAcceptableHeight, 457). +-define(wxGrid_GetRowLabelAlignment, 458). +-define(wxGrid_GetRowLabelSize, 459). +-define(wxGrid_GetRowLabelValue, 460). +-define(wxGrid_GetRowSize, 461). +-define(wxGrid_GetScrollLineX, 462). +-define(wxGrid_GetScrollLineY, 463). +-define(wxGrid_GetSelectedCells, 464). +-define(wxGrid_GetSelectedCols, 465). +-define(wxGrid_GetSelectedRows, 466). +-define(wxGrid_GetSelectionBackground, 467). +-define(wxGrid_GetSelectionBlockTopLeft, 468). +-define(wxGrid_GetSelectionBlockBottomRight, 469). +-define(wxGrid_GetSelectionForeground, 470). +-define(wxGrid_GetViewWidth, 471). +-define(wxGrid_GetGridWindow, 472). +-define(wxGrid_GetGridRowLabelWindow, 473). +-define(wxGrid_GetGridColLabelWindow, 474). +-define(wxGrid_GetGridCornerLabelWindow, 475). +-define(wxGrid_HideCellEditControl, 476). +-define(wxGrid_InsertCols, 477). +-define(wxGrid_InsertRows, 478). +-define(wxGrid_IsCellEditControlEnabled, 479). +-define(wxGrid_IsCurrentCellReadOnly, 480). +-define(wxGrid_IsEditable, 481). +-define(wxGrid_IsInSelection_2, 482). +-define(wxGrid_IsInSelection_1, 483). +-define(wxGrid_IsReadOnly, 484). +-define(wxGrid_IsSelection, 485). +-define(wxGrid_IsVisible_3, 486). +-define(wxGrid_IsVisible_2, 487). +-define(wxGrid_MakeCellVisible_2, 488). +-define(wxGrid_MakeCellVisible_1, 489). +-define(wxGrid_MoveCursorDown, 490). +-define(wxGrid_MoveCursorLeft, 491). +-define(wxGrid_MoveCursorRight, 492). +-define(wxGrid_MoveCursorUp, 493). +-define(wxGrid_MoveCursorDownBlock, 494). +-define(wxGrid_MoveCursorLeftBlock, 495). +-define(wxGrid_MoveCursorRightBlock, 496). +-define(wxGrid_MoveCursorUpBlock, 497). +-define(wxGrid_MovePageDown, 498). +-define(wxGrid_MovePageUp, 499). +-define(wxGrid_RegisterDataType, 500). +-define(wxGrid_SaveEditControlValue, 501). +-define(wxGrid_SelectAll, 502). +-define(wxGrid_SelectBlock_5, 503). +-define(wxGrid_SelectBlock_3, 504). +-define(wxGrid_SelectCol, 505). +-define(wxGrid_SelectRow, 506). +-define(wxGrid_SetCellAlignment_4, 507). +-define(wxGrid_SetCellAlignment_3, 508). +-define(wxGrid_SetCellAlignment_1, 509). +-define(wxGrid_SetCellBackgroundColour_3_0, 510). +-define(wxGrid_SetCellBackgroundColour_1, 511). +-define(wxGrid_SetCellBackgroundColour_3_1, 512). +-define(wxGrid_SetCellEditor, 513). +-define(wxGrid_SetCellFont, 514). +-define(wxGrid_SetCellRenderer, 515). +-define(wxGrid_SetCellTextColour_3_0, 516). +-define(wxGrid_SetCellTextColour_3_1, 517). +-define(wxGrid_SetCellTextColour_1, 518). +-define(wxGrid_SetCellValue_3_0, 519). +-define(wxGrid_SetCellValue_2, 520). +-define(wxGrid_SetCellValue_3_1, 521). +-define(wxGrid_SetColAttr, 522). +-define(wxGrid_SetColFormatBool, 523). +-define(wxGrid_SetColFormatNumber, 524). +-define(wxGrid_SetColFormatFloat, 525). +-define(wxGrid_SetColFormatCustom, 526). +-define(wxGrid_SetColLabelAlignment, 527). +-define(wxGrid_SetColLabelSize, 528). +-define(wxGrid_SetColLabelValue, 529). +-define(wxGrid_SetColMinimalWidth, 530). +-define(wxGrid_SetColMinimalAcceptableWidth, 531). +-define(wxGrid_SetColSize, 532). +-define(wxGrid_SetDefaultCellAlignment, 533). +-define(wxGrid_SetDefaultCellBackgroundColour, 534). +-define(wxGrid_SetDefaultCellFont, 535). +-define(wxGrid_SetDefaultCellTextColour, 536). +-define(wxGrid_SetDefaultEditor, 537). +-define(wxGrid_SetDefaultRenderer, 538). +-define(wxGrid_SetDefaultColSize, 539). +-define(wxGrid_SetDefaultRowSize, 540). +-define(wxGrid_SetGridCursor, 541). +-define(wxGrid_SetGridLineColour, 542). +-define(wxGrid_SetLabelBackgroundColour, 543). +-define(wxGrid_SetLabelFont, 544). +-define(wxGrid_SetLabelTextColour, 545). +-define(wxGrid_SetMargins, 546). +-define(wxGrid_SetReadOnly, 547). +-define(wxGrid_SetRowAttr, 548). +-define(wxGrid_SetRowLabelAlignment, 549). +-define(wxGrid_SetRowLabelSize, 550). +-define(wxGrid_SetRowLabelValue, 551). +-define(wxGrid_SetRowMinimalHeight, 552). +-define(wxGrid_SetRowMinimalAcceptableHeight, 553). +-define(wxGrid_SetRowSize, 554). +-define(wxGrid_SetScrollLineX, 555). +-define(wxGrid_SetScrollLineY, 556). +-define(wxGrid_SetSelectionBackground, 557). +-define(wxGrid_SetSelectionForeground, 558). +-define(wxGrid_SetSelectionMode, 559). +-define(wxGrid_ShowCellEditControl, 560). +-define(wxGrid_XToCol, 561). +-define(wxGrid_XToEdgeOfCol, 562). +-define(wxGrid_YToEdgeOfRow, 563). +-define(wxGrid_YToRow, 564). +-define(wxGridCellRenderer_Draw, 565). +-define(wxGridCellRenderer_GetBestSize, 566). +-define(wxGridCellEditor_Create, 567). +-define(wxGridCellEditor_IsCreated, 568). +-define(wxGridCellEditor_SetSize, 569). +-define(wxGridCellEditor_Show, 570). +-define(wxGridCellEditor_PaintBackground, 571). +-define(wxGridCellEditor_BeginEdit, 572). +-define(wxGridCellEditor_EndEdit, 573). +-define(wxGridCellEditor_Reset, 574). +-define(wxGridCellEditor_StartingKey, 575). +-define(wxGridCellEditor_StartingClick, 576). +-define(wxGridCellEditor_HandleReturn, 577). +-define(wxGridCellBoolRenderer_new, 578). +-define(wxGridCellBoolRenderer_destroy, 579). +-define(wxGridCellBoolEditor_new, 580). +-define(wxGridCellBoolEditor_IsTrueValue, 581). +-define(wxGridCellBoolEditor_UseStringValues, 582). +-define(wxGridCellBoolEditor_destroy, 583). +-define(wxGridCellFloatRenderer_new, 584). +-define(wxGridCellFloatRenderer_GetPrecision, 585). +-define(wxGridCellFloatRenderer_GetWidth, 586). +-define(wxGridCellFloatRenderer_SetParameters, 587). +-define(wxGridCellFloatRenderer_SetPrecision, 588). +-define(wxGridCellFloatRenderer_SetWidth, 589). +-define(wxGridCellFloatRenderer_destroy, 590). +-define(wxGridCellFloatEditor_new, 591). +-define(wxGridCellFloatEditor_SetParameters, 592). +-define(wxGridCellFloatEditor_destroy, 593). +-define(wxGridCellStringRenderer_new, 594). +-define(wxGridCellStringRenderer_destroy, 595). +-define(wxGridCellTextEditor_new, 596). +-define(wxGridCellTextEditor_SetParameters, 597). +-define(wxGridCellTextEditor_destroy, 598). +-define(wxGridCellChoiceEditor_new, 600). +-define(wxGridCellChoiceEditor_SetParameters, 601). +-define(wxGridCellChoiceEditor_destroy, 602). +-define(wxGridCellNumberRenderer_new, 603). +-define(wxGridCellNumberRenderer_destroy, 604). +-define(wxGridCellNumberEditor_new, 605). +-define(wxGridCellNumberEditor_GetValue, 606). +-define(wxGridCellNumberEditor_SetParameters, 607). +-define(wxGridCellNumberEditor_destroy, 608). +-define(wxGridCellAttr_SetTextColour, 609). +-define(wxGridCellAttr_SetBackgroundColour, 610). +-define(wxGridCellAttr_SetFont, 611). +-define(wxGridCellAttr_SetAlignment, 612). +-define(wxGridCellAttr_SetReadOnly, 613). +-define(wxGridCellAttr_SetRenderer, 614). +-define(wxGridCellAttr_SetEditor, 615). +-define(wxGridCellAttr_HasTextColour, 616). +-define(wxGridCellAttr_HasBackgroundColour, 617). +-define(wxGridCellAttr_HasFont, 618). +-define(wxGridCellAttr_HasAlignment, 619). +-define(wxGridCellAttr_HasRenderer, 620). +-define(wxGridCellAttr_HasEditor, 621). +-define(wxGridCellAttr_GetTextColour, 622). +-define(wxGridCellAttr_GetBackgroundColour, 623). +-define(wxGridCellAttr_GetFont, 624). +-define(wxGridCellAttr_GetAlignment, 625). +-define(wxGridCellAttr_GetRenderer, 626). +-define(wxGridCellAttr_GetEditor, 627). +-define(wxGridCellAttr_IsReadOnly, 628). +-define(wxGridCellAttr_SetDefAttr, 629). +-define(wxDC_Blit, 630). +-define(wxDC_CalcBoundingBox, 631). +-define(wxDC_Clear, 632). +-define(wxDC_ComputeScaleAndOrigin, 633). +-define(wxDC_CrossHair, 634). +-define(wxDC_DestroyClippingRegion, 635). +-define(wxDC_DeviceToLogicalX, 636). +-define(wxDC_DeviceToLogicalXRel, 637). +-define(wxDC_DeviceToLogicalY, 638). +-define(wxDC_DeviceToLogicalYRel, 639). +-define(wxDC_DrawArc, 640). +-define(wxDC_DrawBitmap, 641). +-define(wxDC_DrawCheckMark, 642). +-define(wxDC_DrawCircle, 643). +-define(wxDC_DrawEllipse_2, 645). +-define(wxDC_DrawEllipse_1, 646). +-define(wxDC_DrawEllipticArc, 647). +-define(wxDC_DrawIcon, 648). +-define(wxDC_DrawLabel, 649). +-define(wxDC_DrawLine, 650). +-define(wxDC_DrawLines, 651). +-define(wxDC_DrawPolygon, 653). +-define(wxDC_DrawPoint, 655). +-define(wxDC_DrawRectangle_2, 657). +-define(wxDC_DrawRectangle_1, 658). +-define(wxDC_DrawRotatedText, 659). +-define(wxDC_DrawRoundedRectangle_3, 661). +-define(wxDC_DrawRoundedRectangle_2, 662). +-define(wxDC_DrawText, 663). +-define(wxDC_EndDoc, 664). +-define(wxDC_EndPage, 665). +-define(wxDC_FloodFill, 666). +-define(wxDC_GetBackground, 667). +-define(wxDC_GetBackgroundMode, 668). +-define(wxDC_GetBrush, 669). +-define(wxDC_GetCharHeight, 670). +-define(wxDC_GetCharWidth, 671). +-define(wxDC_GetClippingBox, 672). +-define(wxDC_GetFont, 674). +-define(wxDC_GetLayoutDirection, 675). +-define(wxDC_GetLogicalFunction, 676). +-define(wxDC_GetMapMode, 677). +-define(wxDC_GetMultiLineTextExtent_4, 678). +-define(wxDC_GetMultiLineTextExtent_1, 679). +-define(wxDC_GetPartialTextExtents, 680). +-define(wxDC_GetPen, 681). +-define(wxDC_GetPixel, 682). +-define(wxDC_GetPPI, 683). +-define(wxDC_GetSize, 685). +-define(wxDC_GetSizeMM, 687). +-define(wxDC_GetTextBackground, 688). +-define(wxDC_GetTextExtent_4, 689). +-define(wxDC_GetTextExtent_1, 690). +-define(wxDC_GetTextForeground, 692). +-define(wxDC_GetUserScale, 693). +-define(wxDC_GradientFillConcentric_3, 694). +-define(wxDC_GradientFillConcentric_4, 695). +-define(wxDC_GradientFillLinear, 696). +-define(wxDC_LogicalToDeviceX, 697). +-define(wxDC_LogicalToDeviceXRel, 698). +-define(wxDC_LogicalToDeviceY, 699). +-define(wxDC_LogicalToDeviceYRel, 700). +-define(wxDC_MaxX, 701). +-define(wxDC_MaxY, 702). +-define(wxDC_MinX, 703). +-define(wxDC_MinY, 704). +-define(wxDC_IsOk, 705). +-define(wxDC_ResetBoundingBox, 706). +-define(wxDC_SetAxisOrientation, 707). +-define(wxDC_SetBackground, 708). +-define(wxDC_SetBackgroundMode, 709). +-define(wxDC_SetBrush, 710). +-define(wxDC_SetClippingRegion_2, 712). +-define(wxDC_SetClippingRegion_1_1, 713). +-define(wxDC_SetClippingRegion_1_0, 714). +-define(wxDC_SetDeviceOrigin, 715). +-define(wxDC_SetFont, 716). +-define(wxDC_SetLayoutDirection, 717). +-define(wxDC_SetLogicalFunction, 718). +-define(wxDC_SetMapMode, 719). +-define(wxDC_SetPalette, 720). +-define(wxDC_SetPen, 721). +-define(wxDC_SetTextBackground, 722). +-define(wxDC_SetTextForeground, 723). +-define(wxDC_SetUserScale, 724). +-define(wxDC_StartDoc, 725). +-define(wxDC_StartPage, 726). +-define(wxMirrorDC_new, 727). +-define(wxMirrorDC_destroy, 728). +-define(wxScreenDC_new, 729). +-define(wxScreenDC_destruct, 730). +-define(wxPostScriptDC_new_0, 731). +-define(wxPostScriptDC_new_1, 732). +-define(wxPostScriptDC_destruct, 733). +-define(wxPostScriptDC_SetResolution, 734). +-define(wxPostScriptDC_GetResolution, 735). +-define(wxWindowDC_new_0, 736). +-define(wxWindowDC_new_1, 737). +-define(wxWindowDC_destruct, 738). +-define(wxClientDC_new_0, 739). +-define(wxClientDC_new_1, 740). +-define(wxClientDC_destroy, 741). +-define(wxPaintDC_new_0, 742). +-define(wxPaintDC_new_1, 743). +-define(wxPaintDC_destroy, 744). +-define(wxMemoryDC_new_1_0, 746). +-define(wxMemoryDC_new_1_1, 747). +-define(wxMemoryDC_new_0, 748). +-define(wxMemoryDC_destruct, 750). +-define(wxMemoryDC_SelectObject, 751). +-define(wxMemoryDC_SelectObjectAsSource, 752). +-define(wxBufferedDC_new_0, 753). +-define(wxBufferedDC_new_2, 754). +-define(wxBufferedDC_new_3, 755). +-define(wxBufferedDC_destruct, 756). +-define(wxBufferedDC_Init_2, 757). +-define(wxBufferedDC_Init_3, 758). +-define(wxBufferedPaintDC_new_3, 759). +-define(wxBufferedPaintDC_new_2, 760). +-define(wxBufferedPaintDC_destruct, 761). +-define(wxGraphicsObject_destruct, 762). +-define(wxGraphicsObject_GetRenderer, 763). +-define(wxGraphicsObject_IsNull, 764). +-define(wxGraphicsContext_destruct, 765). +-define(wxGraphicsContext_Create_1_1, 766). +-define(wxGraphicsContext_Create_1_0, 767). +-define(wxGraphicsContext_Create_0, 768). +-define(wxGraphicsContext_CreatePen, 769). +-define(wxGraphicsContext_CreateBrush, 770). +-define(wxGraphicsContext_CreateRadialGradientBrush, 771). +-define(wxGraphicsContext_CreateLinearGradientBrush, 772). +-define(wxGraphicsContext_CreateFont, 773). +-define(wxGraphicsContext_CreateMatrix, 774). +-define(wxGraphicsContext_CreatePath, 775). +-define(wxGraphicsContext_Clip_1, 776). +-define(wxGraphicsContext_Clip_4, 777). +-define(wxGraphicsContext_ResetClip, 778). +-define(wxGraphicsContext_DrawBitmap, 779). +-define(wxGraphicsContext_DrawEllipse, 780). +-define(wxGraphicsContext_DrawIcon, 781). +-define(wxGraphicsContext_DrawLines, 782). +-define(wxGraphicsContext_DrawPath, 783). +-define(wxGraphicsContext_DrawRectangle, 784). +-define(wxGraphicsContext_DrawRoundedRectangle, 785). +-define(wxGraphicsContext_DrawText_3, 786). +-define(wxGraphicsContext_DrawText_4_0, 787). +-define(wxGraphicsContext_DrawText_4_1, 788). +-define(wxGraphicsContext_DrawText_5, 789). +-define(wxGraphicsContext_FillPath, 790). +-define(wxGraphicsContext_StrokePath, 791). +-define(wxGraphicsContext_GetPartialTextExtents, 792). +-define(wxGraphicsContext_GetTextExtent, 793). +-define(wxGraphicsContext_Rotate, 794). +-define(wxGraphicsContext_Scale, 795). +-define(wxGraphicsContext_Translate, 796). +-define(wxGraphicsContext_GetTransform, 797). +-define(wxGraphicsContext_SetTransform, 798). +-define(wxGraphicsContext_ConcatTransform, 799). +-define(wxGraphicsContext_SetBrush_1_1, 800). +-define(wxGraphicsContext_SetBrush_1_0, 801). +-define(wxGraphicsContext_SetFont_1, 802). +-define(wxGraphicsContext_SetFont_2, 803). +-define(wxGraphicsContext_SetPen_1_0, 804). +-define(wxGraphicsContext_SetPen_1_1, 805). +-define(wxGraphicsContext_StrokeLine, 806). +-define(wxGraphicsContext_StrokeLines, 807). +-define(wxGraphicsMatrix_Concat, 809). +-define(wxGraphicsMatrix_Get, 811). +-define(wxGraphicsMatrix_Invert, 812). +-define(wxGraphicsMatrix_IsEqual, 813). +-define(wxGraphicsMatrix_IsIdentity, 815). +-define(wxGraphicsMatrix_Rotate, 816). +-define(wxGraphicsMatrix_Scale, 817). +-define(wxGraphicsMatrix_Translate, 818). +-define(wxGraphicsMatrix_Set, 819). +-define(wxGraphicsMatrix_TransformPoint, 820). +-define(wxGraphicsMatrix_TransformDistance, 821). +-define(wxGraphicsPath_MoveToPoint_2, 822). +-define(wxGraphicsPath_MoveToPoint_1, 823). +-define(wxGraphicsPath_AddArc_6, 824). +-define(wxGraphicsPath_AddArc_5, 825). +-define(wxGraphicsPath_AddArcToPoint, 826). +-define(wxGraphicsPath_AddCircle, 827). +-define(wxGraphicsPath_AddCurveToPoint_6, 828). +-define(wxGraphicsPath_AddCurveToPoint_3, 829). +-define(wxGraphicsPath_AddEllipse, 830). +-define(wxGraphicsPath_AddLineToPoint_2, 831). +-define(wxGraphicsPath_AddLineToPoint_1, 832). +-define(wxGraphicsPath_AddPath, 833). +-define(wxGraphicsPath_AddQuadCurveToPoint, 834). +-define(wxGraphicsPath_AddRectangle, 835). +-define(wxGraphicsPath_AddRoundedRectangle, 836). +-define(wxGraphicsPath_CloseSubpath, 837). +-define(wxGraphicsPath_Contains_3, 838). +-define(wxGraphicsPath_Contains_2, 839). +-define(wxGraphicsPath_GetBox, 841). +-define(wxGraphicsPath_GetCurrentPoint, 843). +-define(wxGraphicsPath_Transform, 844). +-define(wxGraphicsRenderer_GetDefaultRenderer, 845). +-define(wxGraphicsRenderer_CreateContext_1_1, 846). +-define(wxGraphicsRenderer_CreateContext_1_0, 847). +-define(wxGraphicsRenderer_CreatePen, 848). +-define(wxGraphicsRenderer_CreateBrush, 849). +-define(wxGraphicsRenderer_CreateLinearGradientBrush, 850). +-define(wxGraphicsRenderer_CreateRadialGradientBrush, 851). +-define(wxGraphicsRenderer_CreateFont, 852). +-define(wxGraphicsRenderer_CreateMatrix, 853). +-define(wxGraphicsRenderer_CreatePath, 854). +-define(wxMenuBar_new_1, 856). +-define(wxMenuBar_new_0, 858). +-define(wxMenuBar_destruct, 860). +-define(wxMenuBar_Append, 861). +-define(wxMenuBar_Check, 862). +-define(wxMenuBar_Enable_2, 863). +-define(wxMenuBar_Enable_1, 864). +-define(wxMenuBar_EnableTop, 865). +-define(wxMenuBar_FindMenu, 866). +-define(wxMenuBar_FindMenuItem, 867). +-define(wxMenuBar_FindItem, 868). +-define(wxMenuBar_GetHelpString, 869). +-define(wxMenuBar_GetLabel_1, 870). +-define(wxMenuBar_GetLabel_0, 871). +-define(wxMenuBar_GetLabelTop, 872). +-define(wxMenuBar_GetMenu, 873). +-define(wxMenuBar_GetMenuCount, 874). +-define(wxMenuBar_Insert, 875). +-define(wxMenuBar_IsChecked, 876). +-define(wxMenuBar_IsEnabled_1, 877). +-define(wxMenuBar_IsEnabled_0, 878). +-define(wxMenuBar_Remove, 879). +-define(wxMenuBar_Replace, 880). +-define(wxMenuBar_SetHelpString, 881). +-define(wxMenuBar_SetLabel_2, 882). +-define(wxMenuBar_SetLabel_1, 883). +-define(wxMenuBar_SetLabelTop, 884). +-define(wxControl_GetLabel, 885). +-define(wxControl_SetLabel, 886). +-define(wxControlWithItems_Append_1, 887). +-define(wxControlWithItems_Append_2, 888). +-define(wxControlWithItems_appendStrings_1, 889). +-define(wxControlWithItems_Clear, 890). +-define(wxControlWithItems_Delete, 891). +-define(wxControlWithItems_FindString, 892). +-define(wxControlWithItems_getClientData, 893). +-define(wxControlWithItems_setClientData, 894). +-define(wxControlWithItems_GetCount, 895). +-define(wxControlWithItems_GetSelection, 896). +-define(wxControlWithItems_GetString, 897). +-define(wxControlWithItems_GetStringSelection, 898). +-define(wxControlWithItems_Insert_2, 899). +-define(wxControlWithItems_Insert_3, 900). +-define(wxControlWithItems_IsEmpty, 901). +-define(wxControlWithItems_Select, 902). +-define(wxControlWithItems_SetSelection, 903). +-define(wxControlWithItems_SetString, 904). +-define(wxControlWithItems_SetStringSelection, 905). +-define(wxMenu_new_2, 908). +-define(wxMenu_new_1, 909). +-define(wxMenu_destruct, 911). +-define(wxMenu_Append_3, 912). +-define(wxMenu_Append_1, 913). +-define(wxMenu_Append_4_0, 914). +-define(wxMenu_Append_4_1, 915). +-define(wxMenu_AppendCheckItem, 916). +-define(wxMenu_AppendRadioItem, 917). +-define(wxMenu_AppendSeparator, 918). +-define(wxMenu_Break, 919). +-define(wxMenu_Check, 920). +-define(wxMenu_Delete_1_0, 921). +-define(wxMenu_Delete_1_1, 922). +-define(wxMenu_Destroy_1_0, 923). +-define(wxMenu_Destroy_1_1, 924). +-define(wxMenu_Enable, 925). +-define(wxMenu_FindItem_1, 926). +-define(wxMenu_FindItem_2, 927). +-define(wxMenu_FindItemByPosition, 928). +-define(wxMenu_GetHelpString, 929). +-define(wxMenu_GetLabel, 930). +-define(wxMenu_GetMenuItemCount, 931). +-define(wxMenu_GetMenuItems, 932). +-define(wxMenu_GetTitle, 934). +-define(wxMenu_Insert_2, 935). +-define(wxMenu_Insert_3, 936). +-define(wxMenu_Insert_5_1, 937). +-define(wxMenu_Insert_5_0, 938). +-define(wxMenu_InsertCheckItem, 939). +-define(wxMenu_InsertRadioItem, 940). +-define(wxMenu_InsertSeparator, 941). +-define(wxMenu_IsChecked, 942). +-define(wxMenu_IsEnabled, 943). +-define(wxMenu_Prepend_1, 944). +-define(wxMenu_Prepend_2, 945). +-define(wxMenu_Prepend_4_1, 946). +-define(wxMenu_Prepend_4_0, 947). +-define(wxMenu_PrependCheckItem, 948). +-define(wxMenu_PrependRadioItem, 949). +-define(wxMenu_PrependSeparator, 950). +-define(wxMenu_Remove_1_0, 951). +-define(wxMenu_Remove_1_1, 952). +-define(wxMenu_SetHelpString, 953). +-define(wxMenu_SetLabel, 954). +-define(wxMenu_SetTitle, 955). +-define(wxMenuItem_new, 956). +-define(wxMenuItem_destruct, 958). +-define(wxMenuItem_Check, 959). +-define(wxMenuItem_Enable, 960). +-define(wxMenuItem_GetBitmap, 961). +-define(wxMenuItem_GetHelp, 962). +-define(wxMenuItem_GetId, 963). +-define(wxMenuItem_GetKind, 964). +-define(wxMenuItem_GetLabel, 965). +-define(wxMenuItem_GetLabelFromText, 966). +-define(wxMenuItem_GetMenu, 967). +-define(wxMenuItem_GetText, 968). +-define(wxMenuItem_GetSubMenu, 969). +-define(wxMenuItem_IsCheckable, 970). +-define(wxMenuItem_IsChecked, 971). +-define(wxMenuItem_IsEnabled, 972). +-define(wxMenuItem_IsSeparator, 973). +-define(wxMenuItem_IsSubMenu, 974). +-define(wxMenuItem_SetBitmap, 975). +-define(wxMenuItem_SetHelp, 976). +-define(wxMenuItem_SetMenu, 977). +-define(wxMenuItem_SetSubMenu, 978). +-define(wxMenuItem_SetText, 979). +-define(wxToolBar_AddControl, 980). +-define(wxToolBar_AddSeparator, 981). +-define(wxToolBar_AddTool_5, 982). +-define(wxToolBar_AddTool_4_0, 983). +-define(wxToolBar_AddTool_1, 984). +-define(wxToolBar_AddTool_4_1, 985). +-define(wxToolBar_AddTool_3, 986). +-define(wxToolBar_AddTool_6, 987). +-define(wxToolBar_AddCheckTool, 988). +-define(wxToolBar_AddRadioTool, 989). +-define(wxToolBar_AddStretchableSpace, 990). +-define(wxToolBar_InsertStretchableSpace, 991). +-define(wxToolBar_DeleteTool, 992). +-define(wxToolBar_DeleteToolByPos, 993). +-define(wxToolBar_EnableTool, 994). +-define(wxToolBar_FindById, 995). +-define(wxToolBar_FindControl, 996). +-define(wxToolBar_FindToolForPosition, 997). +-define(wxToolBar_GetToolSize, 998). +-define(wxToolBar_GetToolBitmapSize, 999). +-define(wxToolBar_GetMargins, 1000). +-define(wxToolBar_GetToolEnabled, 1001). +-define(wxToolBar_GetToolLongHelp, 1002). +-define(wxToolBar_GetToolPacking, 1003). +-define(wxToolBar_GetToolPos, 1004). +-define(wxToolBar_GetToolSeparation, 1005). +-define(wxToolBar_GetToolShortHelp, 1006). +-define(wxToolBar_GetToolState, 1007). +-define(wxToolBar_InsertControl, 1008). +-define(wxToolBar_InsertSeparator, 1009). +-define(wxToolBar_InsertTool_5, 1010). +-define(wxToolBar_InsertTool_2, 1011). +-define(wxToolBar_InsertTool_4, 1012). +-define(wxToolBar_Realize, 1013). +-define(wxToolBar_RemoveTool, 1014). +-define(wxToolBar_SetMargins, 1015). +-define(wxToolBar_SetToolBitmapSize, 1016). +-define(wxToolBar_SetToolLongHelp, 1017). +-define(wxToolBar_SetToolPacking, 1018). +-define(wxToolBar_SetToolShortHelp, 1019). +-define(wxToolBar_SetToolSeparation, 1020). +-define(wxToolBar_ToggleTool, 1021). +-define(wxStatusBar_new_0, 1023). +-define(wxStatusBar_new_2, 1024). +-define(wxStatusBar_destruct, 1026). +-define(wxStatusBar_Create, 1027). +-define(wxStatusBar_GetFieldRect, 1028). +-define(wxStatusBar_GetFieldsCount, 1029). +-define(wxStatusBar_GetStatusText, 1030). +-define(wxStatusBar_PopStatusText, 1031). +-define(wxStatusBar_PushStatusText, 1032). +-define(wxStatusBar_SetFieldsCount, 1033). +-define(wxStatusBar_SetMinHeight, 1034). +-define(wxStatusBar_SetStatusText, 1035). +-define(wxStatusBar_SetStatusWidths, 1036). +-define(wxStatusBar_SetStatusStyles, 1037). +-define(wxBitmap_new_0, 1038). +-define(wxBitmap_new_3, 1039). +-define(wxBitmap_new_4, 1040). +-define(wxBitmap_new_2_0, 1041). +-define(wxBitmap_new_2_1, 1042). +-define(wxBitmap_destruct, 1043). +-define(wxBitmap_ConvertToImage, 1044). +-define(wxBitmap_CopyFromIcon, 1045). +-define(wxBitmap_Create, 1046). +-define(wxBitmap_GetDepth, 1047). +-define(wxBitmap_GetHeight, 1048). +-define(wxBitmap_GetPalette, 1049). +-define(wxBitmap_GetMask, 1050). +-define(wxBitmap_GetWidth, 1051). +-define(wxBitmap_GetSubBitmap, 1052). +-define(wxBitmap_LoadFile, 1053). +-define(wxBitmap_Ok, 1054). +-define(wxBitmap_SaveFile, 1055). +-define(wxBitmap_SetDepth, 1056). +-define(wxBitmap_SetHeight, 1057). +-define(wxBitmap_SetMask, 1058). +-define(wxBitmap_SetPalette, 1059). +-define(wxBitmap_SetWidth, 1060). +-define(wxIcon_new_0, 1061). +-define(wxIcon_new_2, 1062). +-define(wxIcon_new_1, 1063). +-define(wxIcon_CopyFromBitmap, 1064). +-define(wxIcon_destroy, 1065). +-define(wxIconBundle_new_0, 1066). +-define(wxIconBundle_new_2, 1067). +-define(wxIconBundle_new_1_0, 1068). +-define(wxIconBundle_new_1_1, 1069). +-define(wxIconBundle_destruct, 1070). +-define(wxIconBundle_AddIcon_2, 1071). +-define(wxIconBundle_AddIcon_1, 1072). +-define(wxIconBundle_GetIcon_1_1, 1073). +-define(wxIconBundle_GetIcon_1_0, 1074). +-define(wxCursor_new_0, 1075). +-define(wxCursor_new_1_0, 1076). +-define(wxCursor_new_1_1, 1077). +-define(wxCursor_new_4, 1078). +-define(wxCursor_destruct, 1079). +-define(wxCursor_Ok, 1080). +-define(wxMask_new_0, 1081). +-define(wxMask_new_2_1, 1082). +-define(wxMask_new_2_0, 1083). +-define(wxMask_new_1, 1084). +-define(wxMask_destruct, 1085). +-define(wxMask_Create_2_1, 1086). +-define(wxMask_Create_2_0, 1087). +-define(wxMask_Create_1, 1088). +-define(wxImage_new_0, 1089). +-define(wxImage_new_3_0, 1090). +-define(wxImage_new_4, 1091). +-define(wxImage_new_5, 1092). +-define(wxImage_new_2, 1093). +-define(wxImage_new_3_1, 1094). +-define(wxImage_Blur, 1095). +-define(wxImage_BlurHorizontal, 1096). +-define(wxImage_BlurVertical, 1097). +-define(wxImage_ConvertAlphaToMask, 1098). +-define(wxImage_ConvertToGreyscale, 1099). +-define(wxImage_ConvertToMono, 1100). +-define(wxImage_Copy, 1101). +-define(wxImage_Create_3, 1102). +-define(wxImage_Create_4, 1103). +-define(wxImage_Create_5, 1104). +-define(wxImage_Destroy, 1105). +-define(wxImage_FindFirstUnusedColour, 1106). +-define(wxImage_GetImageExtWildcard, 1107). +-define(wxImage_GetAlpha_2, 1108). +-define(wxImage_GetAlpha_0, 1109). +-define(wxImage_GetBlue, 1110). +-define(wxImage_GetData, 1111). +-define(wxImage_GetGreen, 1112). +-define(wxImage_GetImageCount, 1113). +-define(wxImage_GetHeight, 1114). +-define(wxImage_GetMaskBlue, 1115). +-define(wxImage_GetMaskGreen, 1116). +-define(wxImage_GetMaskRed, 1117). +-define(wxImage_GetOrFindMaskColour, 1118). +-define(wxImage_GetPalette, 1119). +-define(wxImage_GetRed, 1120). +-define(wxImage_GetSubImage, 1121). +-define(wxImage_GetWidth, 1122). +-define(wxImage_HasAlpha, 1123). +-define(wxImage_HasMask, 1124). +-define(wxImage_GetOption, 1125). +-define(wxImage_GetOptionInt, 1126). +-define(wxImage_HasOption, 1127). +-define(wxImage_InitAlpha, 1128). +-define(wxImage_InitStandardHandlers, 1129). +-define(wxImage_IsTransparent, 1130). +-define(wxImage_LoadFile_2, 1131). +-define(wxImage_LoadFile_3, 1132). +-define(wxImage_Ok, 1133). +-define(wxImage_RemoveHandler, 1134). +-define(wxImage_Mirror, 1135). +-define(wxImage_Replace, 1136). +-define(wxImage_Rescale, 1137). +-define(wxImage_Resize, 1138). +-define(wxImage_Rotate, 1139). +-define(wxImage_RotateHue, 1140). +-define(wxImage_Rotate90, 1141). +-define(wxImage_SaveFile_1, 1142). +-define(wxImage_SaveFile_2_0, 1143). +-define(wxImage_SaveFile_2_1, 1144). +-define(wxImage_Scale, 1145). +-define(wxImage_Size, 1146). +-define(wxImage_SetAlpha_3, 1147). +-define(wxImage_SetAlpha_2, 1148). +-define(wxImage_SetData_2, 1149). +-define(wxImage_SetData_4, 1150). +-define(wxImage_SetMask, 1151). +-define(wxImage_SetMaskColour, 1152). +-define(wxImage_SetMaskFromImage, 1153). +-define(wxImage_SetOption_2_1, 1154). +-define(wxImage_SetOption_2_0, 1155). +-define(wxImage_SetPalette, 1156). +-define(wxImage_SetRGB_5, 1157). +-define(wxImage_SetRGB_4, 1158). +-define(wxImage_destroy, 1159). +-define(wxBrush_new_0, 1160). +-define(wxBrush_new_2, 1161). +-define(wxBrush_new_1, 1162). +-define(wxBrush_destruct, 1164). +-define(wxBrush_GetColour, 1165). +-define(wxBrush_GetStipple, 1166). +-define(wxBrush_GetStyle, 1167). +-define(wxBrush_IsHatch, 1168). +-define(wxBrush_IsOk, 1169). +-define(wxBrush_SetColour_1, 1170). +-define(wxBrush_SetColour_3, 1171). +-define(wxBrush_SetStipple, 1172). +-define(wxBrush_SetStyle, 1173). +-define(wxPen_new_0, 1174). +-define(wxPen_new_2, 1175). +-define(wxPen_destruct, 1176). +-define(wxPen_GetCap, 1177). +-define(wxPen_GetColour, 1178). +-define(wxPen_GetJoin, 1179). +-define(wxPen_GetStyle, 1180). +-define(wxPen_GetWidth, 1181). +-define(wxPen_IsOk, 1182). +-define(wxPen_SetCap, 1183). +-define(wxPen_SetColour_1, 1184). +-define(wxPen_SetColour_3, 1185). +-define(wxPen_SetJoin, 1186). +-define(wxPen_SetStyle, 1187). +-define(wxPen_SetWidth, 1188). +-define(wxRegion_new_0, 1189). +-define(wxRegion_new_4, 1190). +-define(wxRegion_new_2, 1191). +-define(wxRegion_new_1_1, 1192). +-define(wxRegion_new_1_0, 1194). +-define(wxRegion_destruct, 1196). +-define(wxRegion_Clear, 1197). +-define(wxRegion_Contains_2, 1198). +-define(wxRegion_Contains_1_0, 1199). +-define(wxRegion_Contains_4, 1200). +-define(wxRegion_Contains_1_1, 1201). +-define(wxRegion_ConvertToBitmap, 1202). +-define(wxRegion_GetBox, 1203). +-define(wxRegion_Intersect_4, 1204). +-define(wxRegion_Intersect_1_1, 1205). +-define(wxRegion_Intersect_1_0, 1206). +-define(wxRegion_IsEmpty, 1207). +-define(wxRegion_Subtract_4, 1208). +-define(wxRegion_Subtract_1_1, 1209). +-define(wxRegion_Subtract_1_0, 1210). +-define(wxRegion_Offset_2, 1211). +-define(wxRegion_Offset_1, 1212). +-define(wxRegion_Union_4, 1213). +-define(wxRegion_Union_1_2, 1214). +-define(wxRegion_Union_1_1, 1215). +-define(wxRegion_Union_1_0, 1216). +-define(wxRegion_Union_3, 1217). +-define(wxRegion_Xor_4, 1218). +-define(wxRegion_Xor_1_1, 1219). +-define(wxRegion_Xor_1_0, 1220). +-define(wxAcceleratorTable_new_0, 1221). +-define(wxAcceleratorTable_new_2, 1222). +-define(wxAcceleratorTable_destruct, 1223). +-define(wxAcceleratorTable_Ok, 1224). +-define(wxAcceleratorEntry_new_1_0, 1225). +-define(wxAcceleratorEntry_new_1_1, 1226). +-define(wxAcceleratorEntry_GetCommand, 1227). +-define(wxAcceleratorEntry_GetFlags, 1228). +-define(wxAcceleratorEntry_GetKeyCode, 1229). +-define(wxAcceleratorEntry_Set, 1230). +-define(wxAcceleratorEntry_destroy, 1231). +-define(wxCaret_new_3, 1236). +-define(wxCaret_new_2, 1237). +-define(wxCaret_destruct, 1239). +-define(wxCaret_Create_3, 1240). +-define(wxCaret_Create_2, 1241). +-define(wxCaret_GetBlinkTime, 1242). +-define(wxCaret_GetPosition, 1244). +-define(wxCaret_GetSize, 1246). +-define(wxCaret_GetWindow, 1247). +-define(wxCaret_Hide, 1248). +-define(wxCaret_IsOk, 1249). +-define(wxCaret_IsVisible, 1250). +-define(wxCaret_Move_2, 1251). +-define(wxCaret_Move_1, 1252). +-define(wxCaret_SetBlinkTime, 1253). +-define(wxCaret_SetSize_2, 1254). +-define(wxCaret_SetSize_1, 1255). +-define(wxCaret_Show, 1256). +-define(wxSizer_Add_2_1, 1257). +-define(wxSizer_Add_2_0, 1258). +-define(wxSizer_Add_3, 1259). +-define(wxSizer_Add_2_3, 1260). +-define(wxSizer_Add_2_2, 1261). +-define(wxSizer_AddSpacer, 1262). +-define(wxSizer_AddStretchSpacer, 1263). +-define(wxSizer_CalcMin, 1264). +-define(wxSizer_Clear, 1265). +-define(wxSizer_Detach_1_2, 1266). +-define(wxSizer_Detach_1_1, 1267). +-define(wxSizer_Detach_1_0, 1268). +-define(wxSizer_Fit, 1269). +-define(wxSizer_FitInside, 1270). +-define(wxSizer_GetChildren, 1271). +-define(wxSizer_GetItem_2_1, 1272). +-define(wxSizer_GetItem_2_0, 1273). +-define(wxSizer_GetItem_1, 1274). +-define(wxSizer_GetSize, 1275). +-define(wxSizer_GetPosition, 1276). +-define(wxSizer_GetMinSize, 1277). +-define(wxSizer_Hide_2_0, 1278). +-define(wxSizer_Hide_2_1, 1279). +-define(wxSizer_Hide_1, 1280). +-define(wxSizer_Insert_3_1, 1281). +-define(wxSizer_Insert_3_0, 1282). +-define(wxSizer_Insert_4, 1283). +-define(wxSizer_Insert_3_3, 1284). +-define(wxSizer_Insert_3_2, 1285). +-define(wxSizer_Insert_2, 1286). +-define(wxSizer_InsertSpacer, 1287). +-define(wxSizer_InsertStretchSpacer, 1288). +-define(wxSizer_IsShown_1_2, 1289). +-define(wxSizer_IsShown_1_1, 1290). +-define(wxSizer_IsShown_1_0, 1291). +-define(wxSizer_Layout, 1292). +-define(wxSizer_Prepend_2_1, 1293). +-define(wxSizer_Prepend_2_0, 1294). +-define(wxSizer_Prepend_3, 1295). +-define(wxSizer_Prepend_2_3, 1296). +-define(wxSizer_Prepend_2_2, 1297). +-define(wxSizer_Prepend_1, 1298). +-define(wxSizer_PrependSpacer, 1299). +-define(wxSizer_PrependStretchSpacer, 1300). +-define(wxSizer_RecalcSizes, 1301). +-define(wxSizer_Remove_1_1, 1302). +-define(wxSizer_Remove_1_0, 1303). +-define(wxSizer_Replace_3_1, 1304). +-define(wxSizer_Replace_3_0, 1305). +-define(wxSizer_Replace_2, 1306). +-define(wxSizer_SetDimension, 1307). +-define(wxSizer_SetMinSize_2, 1308). +-define(wxSizer_SetMinSize_1, 1309). +-define(wxSizer_SetItemMinSize_3_2, 1310). +-define(wxSizer_SetItemMinSize_2_2, 1311). +-define(wxSizer_SetItemMinSize_3_1, 1312). +-define(wxSizer_SetItemMinSize_2_1, 1313). +-define(wxSizer_SetItemMinSize_3_0, 1314). +-define(wxSizer_SetItemMinSize_2_0, 1315). +-define(wxSizer_SetSizeHints, 1316). +-define(wxSizer_SetVirtualSizeHints, 1317). +-define(wxSizer_Show_2_2, 1318). +-define(wxSizer_Show_2_1, 1319). +-define(wxSizer_Show_2_0, 1320). +-define(wxSizer_Show_1, 1321). +-define(wxSizerFlags_new, 1322). +-define(wxSizerFlags_Align, 1323). +-define(wxSizerFlags_Border_2, 1324). +-define(wxSizerFlags_Border_1, 1325). +-define(wxSizerFlags_Center, 1326). +-define(wxSizerFlags_Centre, 1327). +-define(wxSizerFlags_Expand, 1328). +-define(wxSizerFlags_Left, 1329). +-define(wxSizerFlags_Proportion, 1330). +-define(wxSizerFlags_Right, 1331). +-define(wxSizerFlags_destroy, 1332). +-define(wxSizerItem_new_5_1, 1333). +-define(wxSizerItem_new_2_1, 1334). +-define(wxSizerItem_new_5_0, 1335). +-define(wxSizerItem_new_2_0, 1336). +-define(wxSizerItem_new_6, 1337). +-define(wxSizerItem_new_3, 1338). +-define(wxSizerItem_new_0, 1339). +-define(wxSizerItem_destruct, 1340). +-define(wxSizerItem_CalcMin, 1341). +-define(wxSizerItem_DeleteWindows, 1342). +-define(wxSizerItem_DetachSizer, 1343). +-define(wxSizerItem_GetBorder, 1344). +-define(wxSizerItem_GetFlag, 1345). +-define(wxSizerItem_GetMinSize, 1346). +-define(wxSizerItem_GetPosition, 1347). +-define(wxSizerItem_GetProportion, 1348). +-define(wxSizerItem_GetRatio, 1349). +-define(wxSizerItem_GetRect, 1350). +-define(wxSizerItem_GetSize, 1351). +-define(wxSizerItem_GetSizer, 1352). +-define(wxSizerItem_GetSpacer, 1353). +-define(wxSizerItem_GetUserData, 1354). +-define(wxSizerItem_GetWindow, 1355). +-define(wxSizerItem_IsSizer, 1356). +-define(wxSizerItem_IsShown, 1357). +-define(wxSizerItem_IsSpacer, 1358). +-define(wxSizerItem_IsWindow, 1359). +-define(wxSizerItem_SetBorder, 1360). +-define(wxSizerItem_SetDimension, 1361). +-define(wxSizerItem_SetFlag, 1362). +-define(wxSizerItem_SetInitSize, 1363). +-define(wxSizerItem_SetMinSize_1, 1364). +-define(wxSizerItem_SetMinSize_2, 1365). +-define(wxSizerItem_SetProportion, 1366). +-define(wxSizerItem_SetRatio_2, 1367). +-define(wxSizerItem_SetRatio_1_1, 1368). +-define(wxSizerItem_SetRatio_1_0, 1369). +-define(wxSizerItem_SetSizer, 1370). +-define(wxSizerItem_SetSpacer_1, 1371). +-define(wxSizerItem_SetSpacer_2, 1372). +-define(wxSizerItem_SetWindow, 1373). +-define(wxSizerItem_Show, 1374). +-define(wxBoxSizer_new, 1375). +-define(wxBoxSizer_GetOrientation, 1376). +-define(wxBoxSizer_destroy, 1377). +-define(wxStaticBoxSizer_new_2, 1378). +-define(wxStaticBoxSizer_new_3, 1379). +-define(wxStaticBoxSizer_GetStaticBox, 1380). +-define(wxStaticBoxSizer_destroy, 1381). +-define(wxGridSizer_new_4, 1382). +-define(wxGridSizer_new_2, 1383). +-define(wxGridSizer_GetCols, 1384). +-define(wxGridSizer_GetHGap, 1385). +-define(wxGridSizer_GetRows, 1386). +-define(wxGridSizer_GetVGap, 1387). +-define(wxGridSizer_SetCols, 1388). +-define(wxGridSizer_SetHGap, 1389). +-define(wxGridSizer_SetRows, 1390). +-define(wxGridSizer_SetVGap, 1391). +-define(wxGridSizer_destroy, 1392). +-define(wxFlexGridSizer_new_4, 1393). +-define(wxFlexGridSizer_new_2, 1394). +-define(wxFlexGridSizer_AddGrowableCol, 1395). +-define(wxFlexGridSizer_AddGrowableRow, 1396). +-define(wxFlexGridSizer_GetFlexibleDirection, 1397). +-define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1398). +-define(wxFlexGridSizer_RemoveGrowableCol, 1399). +-define(wxFlexGridSizer_RemoveGrowableRow, 1400). +-define(wxFlexGridSizer_SetFlexibleDirection, 1401). +-define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1402). +-define(wxFlexGridSizer_destroy, 1403). +-define(wxGridBagSizer_new, 1404). +-define(wxGridBagSizer_Add_3_2, 1405). +-define(wxGridBagSizer_Add_3_1, 1406). +-define(wxGridBagSizer_Add_4, 1407). +-define(wxGridBagSizer_Add_1_0, 1408). +-define(wxGridBagSizer_Add_2_1, 1409). +-define(wxGridBagSizer_Add_2_0, 1410). +-define(wxGridBagSizer_Add_3_0, 1411). +-define(wxGridBagSizer_Add_1_1, 1412). +-define(wxGridBagSizer_CalcMin, 1413). +-define(wxGridBagSizer_CheckForIntersection_2, 1414). +-define(wxGridBagSizer_CheckForIntersection_3, 1415). +-define(wxGridBagSizer_FindItem_1_1, 1416). +-define(wxGridBagSizer_FindItem_1_0, 1417). +-define(wxGridBagSizer_FindItemAtPoint, 1418). +-define(wxGridBagSizer_FindItemAtPosition, 1419). +-define(wxGridBagSizer_FindItemWithData, 1420). +-define(wxGridBagSizer_GetCellSize, 1421). +-define(wxGridBagSizer_GetEmptyCellSize, 1422). +-define(wxGridBagSizer_GetItemPosition_1_2, 1423). +-define(wxGridBagSizer_GetItemPosition_1_1, 1424). +-define(wxGridBagSizer_GetItemPosition_1_0, 1425). +-define(wxGridBagSizer_GetItemSpan_1_2, 1426). +-define(wxGridBagSizer_GetItemSpan_1_1, 1427). +-define(wxGridBagSizer_GetItemSpan_1_0, 1428). +-define(wxGridBagSizer_SetEmptyCellSize, 1429). +-define(wxGridBagSizer_SetItemPosition_2_2, 1430). +-define(wxGridBagSizer_SetItemPosition_2_1, 1431). +-define(wxGridBagSizer_SetItemPosition_2_0, 1432). +-define(wxGridBagSizer_SetItemSpan_2_2, 1433). +-define(wxGridBagSizer_SetItemSpan_2_1, 1434). +-define(wxGridBagSizer_SetItemSpan_2_0, 1435). +-define(wxGridBagSizer_destroy, 1436). +-define(wxStdDialogButtonSizer_new, 1437). +-define(wxStdDialogButtonSizer_AddButton, 1438). +-define(wxStdDialogButtonSizer_Realize, 1439). +-define(wxStdDialogButtonSizer_SetAffirmativeButton, 1440). +-define(wxStdDialogButtonSizer_SetCancelButton, 1441). +-define(wxStdDialogButtonSizer_SetNegativeButton, 1442). +-define(wxStdDialogButtonSizer_destroy, 1443). +-define(wxFont_new_0, 1444). +-define(wxFont_new_1, 1445). +-define(wxFont_new_5, 1446). +-define(wxFont_destruct, 1448). +-define(wxFont_IsFixedWidth, 1449). +-define(wxFont_GetDefaultEncoding, 1450). +-define(wxFont_GetFaceName, 1451). +-define(wxFont_GetFamily, 1452). +-define(wxFont_GetNativeFontInfoDesc, 1453). +-define(wxFont_GetNativeFontInfoUserDesc, 1454). +-define(wxFont_GetPointSize, 1455). +-define(wxFont_GetStyle, 1456). +-define(wxFont_GetUnderlined, 1457). +-define(wxFont_GetWeight, 1458). +-define(wxFont_Ok, 1459). +-define(wxFont_SetDefaultEncoding, 1460). +-define(wxFont_SetFaceName, 1461). +-define(wxFont_SetFamily, 1462). +-define(wxFont_SetPointSize, 1463). +-define(wxFont_SetStyle, 1464). +-define(wxFont_SetUnderlined, 1465). +-define(wxFont_SetWeight, 1466). +-define(wxToolTip_Enable, 1467). +-define(wxToolTip_SetDelay, 1468). +-define(wxToolTip_new, 1469). +-define(wxToolTip_SetTip, 1470). +-define(wxToolTip_GetTip, 1471). +-define(wxToolTip_GetWindow, 1472). +-define(wxToolTip_destroy, 1473). +-define(wxButton_new_3, 1475). +-define(wxButton_new_0, 1476). +-define(wxButton_destruct, 1477). +-define(wxButton_Create, 1478). +-define(wxButton_GetDefaultSize, 1479). +-define(wxButton_SetDefault, 1480). +-define(wxButton_SetLabel, 1481). +-define(wxBitmapButton_new_4, 1483). +-define(wxBitmapButton_new_0, 1484). +-define(wxBitmapButton_Create, 1485). +-define(wxBitmapButton_GetBitmapDisabled, 1486). +-define(wxBitmapButton_GetBitmapFocus, 1488). +-define(wxBitmapButton_GetBitmapLabel, 1490). +-define(wxBitmapButton_GetBitmapSelected, 1492). +-define(wxBitmapButton_SetBitmapDisabled, 1494). +-define(wxBitmapButton_SetBitmapFocus, 1495). +-define(wxBitmapButton_SetBitmapLabel, 1496). +-define(wxBitmapButton_SetBitmapSelected, 1497). +-define(wxBitmapButton_destroy, 1498). +-define(wxToggleButton_new_0, 1499). +-define(wxToggleButton_new_4, 1500). +-define(wxToggleButton_Create, 1501). +-define(wxToggleButton_GetValue, 1502). +-define(wxToggleButton_SetValue, 1503). +-define(wxToggleButton_destroy, 1504). +-define(wxCalendarCtrl_new_0, 1505). +-define(wxCalendarCtrl_new_3, 1506). +-define(wxCalendarCtrl_Create, 1507). +-define(wxCalendarCtrl_destruct, 1508). +-define(wxCalendarCtrl_SetDate, 1509). +-define(wxCalendarCtrl_GetDate, 1510). +-define(wxCalendarCtrl_EnableYearChange, 1511). +-define(wxCalendarCtrl_EnableMonthChange, 1512). +-define(wxCalendarCtrl_EnableHolidayDisplay, 1513). +-define(wxCalendarCtrl_SetHeaderColours, 1514). +-define(wxCalendarCtrl_GetHeaderColourFg, 1515). +-define(wxCalendarCtrl_GetHeaderColourBg, 1516). +-define(wxCalendarCtrl_SetHighlightColours, 1517). +-define(wxCalendarCtrl_GetHighlightColourFg, 1518). +-define(wxCalendarCtrl_GetHighlightColourBg, 1519). +-define(wxCalendarCtrl_SetHolidayColours, 1520). +-define(wxCalendarCtrl_GetHolidayColourFg, 1521). +-define(wxCalendarCtrl_GetHolidayColourBg, 1522). +-define(wxCalendarCtrl_GetAttr, 1523). +-define(wxCalendarCtrl_SetAttr, 1524). +-define(wxCalendarCtrl_SetHoliday, 1525). +-define(wxCalendarCtrl_ResetAttr, 1526). +-define(wxCalendarCtrl_HitTest, 1527). +-define(wxCalendarDateAttr_new_0, 1528). +-define(wxCalendarDateAttr_new_2_1, 1529). +-define(wxCalendarDateAttr_new_2_0, 1530). +-define(wxCalendarDateAttr_SetTextColour, 1531). +-define(wxCalendarDateAttr_SetBackgroundColour, 1532). +-define(wxCalendarDateAttr_SetBorderColour, 1533). +-define(wxCalendarDateAttr_SetFont, 1534). +-define(wxCalendarDateAttr_SetBorder, 1535). +-define(wxCalendarDateAttr_SetHoliday, 1536). +-define(wxCalendarDateAttr_HasTextColour, 1537). +-define(wxCalendarDateAttr_HasBackgroundColour, 1538). +-define(wxCalendarDateAttr_HasBorderColour, 1539). +-define(wxCalendarDateAttr_HasFont, 1540). +-define(wxCalendarDateAttr_HasBorder, 1541). +-define(wxCalendarDateAttr_IsHoliday, 1542). +-define(wxCalendarDateAttr_GetTextColour, 1543). +-define(wxCalendarDateAttr_GetBackgroundColour, 1544). +-define(wxCalendarDateAttr_GetBorderColour, 1545). +-define(wxCalendarDateAttr_GetFont, 1546). +-define(wxCalendarDateAttr_GetBorder, 1547). +-define(wxCalendarDateAttr_destroy, 1548). +-define(wxCheckBox_new_4, 1550). +-define(wxCheckBox_new_0, 1551). +-define(wxCheckBox_Create, 1552). +-define(wxCheckBox_GetValue, 1553). +-define(wxCheckBox_Get3StateValue, 1554). +-define(wxCheckBox_Is3rdStateAllowedForUser, 1555). +-define(wxCheckBox_Is3State, 1556). +-define(wxCheckBox_IsChecked, 1557). +-define(wxCheckBox_SetValue, 1558). +-define(wxCheckBox_Set3StateValue, 1559). +-define(wxCheckBox_destroy, 1560). +-define(wxCheckListBox_new_0, 1561). +-define(wxCheckListBox_new_3, 1563). +-define(wxCheckListBox_Check, 1564). +-define(wxCheckListBox_IsChecked, 1565). +-define(wxCheckListBox_destroy, 1566). +-define(wxChoice_new_3, 1569). +-define(wxChoice_new_0, 1570). +-define(wxChoice_destruct, 1572). +-define(wxChoice_Create, 1574). +-define(wxChoice_Delete, 1575). +-define(wxChoice_GetColumns, 1576). +-define(wxChoice_SetColumns, 1577). +-define(wxComboBox_new_0, 1578). +-define(wxComboBox_new_3, 1580). +-define(wxComboBox_destruct, 1581). +-define(wxComboBox_Create, 1583). +-define(wxComboBox_CanCopy, 1584). +-define(wxComboBox_CanCut, 1585). +-define(wxComboBox_CanPaste, 1586). +-define(wxComboBox_CanRedo, 1587). +-define(wxComboBox_CanUndo, 1588). +-define(wxComboBox_Copy, 1589). +-define(wxComboBox_Cut, 1590). +-define(wxComboBox_GetInsertionPoint, 1591). +-define(wxComboBox_GetLastPosition, 1592). +-define(wxComboBox_GetValue, 1593). +-define(wxComboBox_Paste, 1594). +-define(wxComboBox_Redo, 1595). +-define(wxComboBox_Replace, 1596). +-define(wxComboBox_Remove, 1597). +-define(wxComboBox_SetInsertionPoint, 1598). +-define(wxComboBox_SetInsertionPointEnd, 1599). +-define(wxComboBox_SetSelection_1, 1600). +-define(wxComboBox_SetSelection_2, 1601). +-define(wxComboBox_SetValue, 1602). +-define(wxComboBox_Undo, 1603). +-define(wxGauge_new_0, 1604). +-define(wxGauge_new_4, 1605). +-define(wxGauge_Create, 1606). +-define(wxGauge_GetRange, 1607). +-define(wxGauge_GetValue, 1608). +-define(wxGauge_IsVertical, 1609). +-define(wxGauge_SetRange, 1610). +-define(wxGauge_SetValue, 1611). +-define(wxGauge_Pulse, 1612). +-define(wxGauge_destroy, 1613). +-define(wxGenericDirCtrl_new_0, 1614). +-define(wxGenericDirCtrl_new_2, 1615). +-define(wxGenericDirCtrl_destruct, 1616). +-define(wxGenericDirCtrl_Create, 1617). +-define(wxGenericDirCtrl_Init, 1618). +-define(wxGenericDirCtrl_CollapseTree, 1619). +-define(wxGenericDirCtrl_ExpandPath, 1620). +-define(wxGenericDirCtrl_GetDefaultPath, 1621). +-define(wxGenericDirCtrl_GetPath, 1622). +-define(wxGenericDirCtrl_GetFilePath, 1623). +-define(wxGenericDirCtrl_GetFilter, 1624). +-define(wxGenericDirCtrl_GetFilterIndex, 1625). +-define(wxGenericDirCtrl_GetRootId, 1626). +-define(wxGenericDirCtrl_GetTreeCtrl, 1627). +-define(wxGenericDirCtrl_ReCreateTree, 1628). +-define(wxGenericDirCtrl_SetDefaultPath, 1629). +-define(wxGenericDirCtrl_SetFilter, 1630). +-define(wxGenericDirCtrl_SetFilterIndex, 1631). +-define(wxGenericDirCtrl_SetPath, 1632). +-define(wxStaticBox_new_4, 1634). +-define(wxStaticBox_new_0, 1635). +-define(wxStaticBox_Create, 1636). +-define(wxStaticBox_destroy, 1637). +-define(wxStaticLine_new_2, 1639). +-define(wxStaticLine_new_0, 1640). +-define(wxStaticLine_Create, 1641). +-define(wxStaticLine_IsVertical, 1642). +-define(wxStaticLine_GetDefaultSize, 1643). +-define(wxStaticLine_destroy, 1644). +-define(wxListBox_new_3, 1647). +-define(wxListBox_new_0, 1648). +-define(wxListBox_destruct, 1650). +-define(wxListBox_Create, 1652). +-define(wxListBox_Deselect, 1653). +-define(wxListBox_GetSelections, 1654). +-define(wxListBox_InsertItems, 1655). +-define(wxListBox_IsSelected, 1656). +-define(wxListBox_Set, 1657). +-define(wxListBox_HitTest, 1658). +-define(wxListBox_SetFirstItem_1_0, 1659). +-define(wxListBox_SetFirstItem_1_1, 1660). +-define(wxListCtrl_new_0, 1661). +-define(wxListCtrl_new_2, 1662). +-define(wxListCtrl_Arrange, 1663). +-define(wxListCtrl_AssignImageList, 1664). +-define(wxListCtrl_ClearAll, 1665). +-define(wxListCtrl_Create, 1666). +-define(wxListCtrl_DeleteAllItems, 1667). +-define(wxListCtrl_DeleteColumn, 1668). +-define(wxListCtrl_DeleteItem, 1669). +-define(wxListCtrl_EditLabel, 1670). +-define(wxListCtrl_EnsureVisible, 1671). +-define(wxListCtrl_FindItem_3_0, 1672). +-define(wxListCtrl_FindItem_3_1, 1673). +-define(wxListCtrl_GetColumn, 1674). +-define(wxListCtrl_GetColumnCount, 1675). +-define(wxListCtrl_GetColumnWidth, 1676). +-define(wxListCtrl_GetCountPerPage, 1677). +-define(wxListCtrl_GetEditControl, 1678). +-define(wxListCtrl_GetImageList, 1679). +-define(wxListCtrl_GetItem, 1680). +-define(wxListCtrl_GetItemBackgroundColour, 1681). +-define(wxListCtrl_GetItemCount, 1682). +-define(wxListCtrl_GetItemData, 1683). +-define(wxListCtrl_GetItemFont, 1684). +-define(wxListCtrl_GetItemPosition, 1685). +-define(wxListCtrl_GetItemRect, 1686). +-define(wxListCtrl_GetItemSpacing, 1687). +-define(wxListCtrl_GetItemState, 1688). +-define(wxListCtrl_GetItemText, 1689). +-define(wxListCtrl_GetItemTextColour, 1690). +-define(wxListCtrl_GetNextItem, 1691). +-define(wxListCtrl_GetSelectedItemCount, 1692). +-define(wxListCtrl_GetTextColour, 1693). +-define(wxListCtrl_GetTopItem, 1694). +-define(wxListCtrl_GetViewRect, 1695). +-define(wxListCtrl_HitTest, 1696). +-define(wxListCtrl_InsertColumn_2, 1697). +-define(wxListCtrl_InsertColumn_3, 1698). +-define(wxListCtrl_InsertItem_1, 1699). +-define(wxListCtrl_InsertItem_2_1, 1700). +-define(wxListCtrl_InsertItem_2_0, 1701). +-define(wxListCtrl_InsertItem_3, 1702). +-define(wxListCtrl_RefreshItem, 1703). +-define(wxListCtrl_RefreshItems, 1704). +-define(wxListCtrl_ScrollList, 1705). +-define(wxListCtrl_SetBackgroundColour, 1706). +-define(wxListCtrl_SetColumn, 1707). +-define(wxListCtrl_SetColumnWidth, 1708). +-define(wxListCtrl_SetImageList, 1709). +-define(wxListCtrl_SetItem_1, 1710). +-define(wxListCtrl_SetItem_4, 1711). +-define(wxListCtrl_SetItemBackgroundColour, 1712). +-define(wxListCtrl_SetItemCount, 1713). +-define(wxListCtrl_SetItemData, 1714). +-define(wxListCtrl_SetItemFont, 1715). +-define(wxListCtrl_SetItemImage, 1716). +-define(wxListCtrl_SetItemColumnImage, 1717). +-define(wxListCtrl_SetItemPosition, 1718). +-define(wxListCtrl_SetItemState, 1719). +-define(wxListCtrl_SetItemText, 1720). +-define(wxListCtrl_SetItemTextColour, 1721). +-define(wxListCtrl_SetSingleStyle, 1722). +-define(wxListCtrl_SetTextColour, 1723). +-define(wxListCtrl_SetWindowStyleFlag, 1724). +-define(wxListCtrl_SortItems, 1725). +-define(wxListCtrl_destroy, 1726). +-define(wxListView_ClearColumnImage, 1727). +-define(wxListView_Focus, 1728). +-define(wxListView_GetFirstSelected, 1729). +-define(wxListView_GetFocusedItem, 1730). +-define(wxListView_GetNextSelected, 1731). +-define(wxListView_IsSelected, 1732). +-define(wxListView_Select, 1733). +-define(wxListView_SetColumnImage, 1734). +-define(wxListItem_new_0, 1735). +-define(wxListItem_new_1, 1736). +-define(wxListItem_destruct, 1737). +-define(wxListItem_Clear, 1738). +-define(wxListItem_GetAlign, 1739). +-define(wxListItem_GetBackgroundColour, 1740). +-define(wxListItem_GetColumn, 1741). +-define(wxListItem_GetFont, 1742). +-define(wxListItem_GetId, 1743). +-define(wxListItem_GetImage, 1744). +-define(wxListItem_GetMask, 1745). +-define(wxListItem_GetState, 1746). +-define(wxListItem_GetText, 1747). +-define(wxListItem_GetTextColour, 1748). +-define(wxListItem_GetWidth, 1749). +-define(wxListItem_SetAlign, 1750). +-define(wxListItem_SetBackgroundColour, 1751). +-define(wxListItem_SetColumn, 1752). +-define(wxListItem_SetFont, 1753). +-define(wxListItem_SetId, 1754). +-define(wxListItem_SetImage, 1755). +-define(wxListItem_SetMask, 1756). +-define(wxListItem_SetState, 1757). +-define(wxListItem_SetStateMask, 1758). +-define(wxListItem_SetText, 1759). +-define(wxListItem_SetTextColour, 1760). +-define(wxListItem_SetWidth, 1761). +-define(wxListItemAttr_new_0, 1762). +-define(wxListItemAttr_new_3, 1763). +-define(wxListItemAttr_GetBackgroundColour, 1764). +-define(wxListItemAttr_GetFont, 1765). +-define(wxListItemAttr_GetTextColour, 1766). +-define(wxListItemAttr_HasBackgroundColour, 1767). +-define(wxListItemAttr_HasFont, 1768). +-define(wxListItemAttr_HasTextColour, 1769). +-define(wxListItemAttr_SetBackgroundColour, 1770). +-define(wxListItemAttr_SetFont, 1771). +-define(wxListItemAttr_SetTextColour, 1772). +-define(wxListItemAttr_destroy, 1773). +-define(wxImageList_new_0, 1774). +-define(wxImageList_new_3, 1775). +-define(wxImageList_Add_1, 1776). +-define(wxImageList_Add_2_0, 1777). +-define(wxImageList_Add_2_1, 1778). +-define(wxImageList_Create, 1779). +-define(wxImageList_Draw, 1781). +-define(wxImageList_GetBitmap, 1782). +-define(wxImageList_GetIcon, 1783). +-define(wxImageList_GetImageCount, 1784). +-define(wxImageList_GetSize, 1785). +-define(wxImageList_Remove, 1786). +-define(wxImageList_RemoveAll, 1787). +-define(wxImageList_Replace_2, 1788). +-define(wxImageList_Replace_3, 1789). +-define(wxImageList_destroy, 1790). +-define(wxTextAttr_new_0, 1791). +-define(wxTextAttr_new_2, 1792). +-define(wxTextAttr_GetAlignment, 1793). +-define(wxTextAttr_GetBackgroundColour, 1794). +-define(wxTextAttr_GetFont, 1795). +-define(wxTextAttr_GetLeftIndent, 1796). +-define(wxTextAttr_GetLeftSubIndent, 1797). +-define(wxTextAttr_GetRightIndent, 1798). +-define(wxTextAttr_GetTabs, 1799). +-define(wxTextAttr_GetTextColour, 1800). +-define(wxTextAttr_HasBackgroundColour, 1801). +-define(wxTextAttr_HasFont, 1802). +-define(wxTextAttr_HasTextColour, 1803). +-define(wxTextAttr_GetFlags, 1804). +-define(wxTextAttr_IsDefault, 1805). +-define(wxTextAttr_SetAlignment, 1806). +-define(wxTextAttr_SetBackgroundColour, 1807). +-define(wxTextAttr_SetFlags, 1808). +-define(wxTextAttr_SetFont, 1809). +-define(wxTextAttr_SetLeftIndent, 1810). +-define(wxTextAttr_SetRightIndent, 1811). +-define(wxTextAttr_SetTabs, 1812). +-define(wxTextAttr_SetTextColour, 1813). +-define(wxTextAttr_destroy, 1814). +-define(wxTextCtrl_new_3, 1816). +-define(wxTextCtrl_new_0, 1817). +-define(wxTextCtrl_destruct, 1819). +-define(wxTextCtrl_AppendText, 1820). +-define(wxTextCtrl_CanCopy, 1821). +-define(wxTextCtrl_CanCut, 1822). +-define(wxTextCtrl_CanPaste, 1823). +-define(wxTextCtrl_CanRedo, 1824). +-define(wxTextCtrl_CanUndo, 1825). +-define(wxTextCtrl_Clear, 1826). +-define(wxTextCtrl_Copy, 1827). +-define(wxTextCtrl_Create, 1828). +-define(wxTextCtrl_Cut, 1829). +-define(wxTextCtrl_DiscardEdits, 1830). +-define(wxTextCtrl_ChangeValue, 1831). +-define(wxTextCtrl_EmulateKeyPress, 1832). +-define(wxTextCtrl_GetDefaultStyle, 1833). +-define(wxTextCtrl_GetInsertionPoint, 1834). +-define(wxTextCtrl_GetLastPosition, 1835). +-define(wxTextCtrl_GetLineLength, 1836). +-define(wxTextCtrl_GetLineText, 1837). +-define(wxTextCtrl_GetNumberOfLines, 1838). +-define(wxTextCtrl_GetRange, 1839). +-define(wxTextCtrl_GetSelection, 1840). +-define(wxTextCtrl_GetStringSelection, 1841). +-define(wxTextCtrl_GetStyle, 1842). +-define(wxTextCtrl_GetValue, 1843). +-define(wxTextCtrl_IsEditable, 1844). +-define(wxTextCtrl_IsModified, 1845). +-define(wxTextCtrl_IsMultiLine, 1846). +-define(wxTextCtrl_IsSingleLine, 1847). +-define(wxTextCtrl_LoadFile, 1848). +-define(wxTextCtrl_MarkDirty, 1849). +-define(wxTextCtrl_Paste, 1850). +-define(wxTextCtrl_PositionToXY, 1851). +-define(wxTextCtrl_Redo, 1852). +-define(wxTextCtrl_Remove, 1853). +-define(wxTextCtrl_Replace, 1854). +-define(wxTextCtrl_SaveFile, 1855). +-define(wxTextCtrl_SetDefaultStyle, 1856). +-define(wxTextCtrl_SetEditable, 1857). +-define(wxTextCtrl_SetInsertionPoint, 1858). +-define(wxTextCtrl_SetInsertionPointEnd, 1859). +-define(wxTextCtrl_SetMaxLength, 1861). +-define(wxTextCtrl_SetSelection, 1862). +-define(wxTextCtrl_SetStyle, 1863). +-define(wxTextCtrl_SetValue, 1864). +-define(wxTextCtrl_ShowPosition, 1865). +-define(wxTextCtrl_Undo, 1866). +-define(wxTextCtrl_WriteText, 1867). +-define(wxTextCtrl_XYToPosition, 1868). +-define(wxNotebook_new_0, 1871). +-define(wxNotebook_new_3, 1872). +-define(wxNotebook_destruct, 1873). +-define(wxNotebook_AddPage, 1874). +-define(wxNotebook_AdvanceSelection, 1875). +-define(wxNotebook_AssignImageList, 1876). +-define(wxNotebook_Create, 1877). +-define(wxNotebook_DeleteAllPages, 1878). +-define(wxNotebook_DeletePage, 1879). +-define(wxNotebook_RemovePage, 1880). +-define(wxNotebook_GetCurrentPage, 1881). +-define(wxNotebook_GetImageList, 1882). +-define(wxNotebook_GetPage, 1884). +-define(wxNotebook_GetPageCount, 1885). +-define(wxNotebook_GetPageImage, 1886). +-define(wxNotebook_GetPageText, 1887). +-define(wxNotebook_GetRowCount, 1888). +-define(wxNotebook_GetSelection, 1889). +-define(wxNotebook_GetThemeBackgroundColour, 1890). +-define(wxNotebook_HitTest, 1892). +-define(wxNotebook_InsertPage, 1894). +-define(wxNotebook_SetImageList, 1895). +-define(wxNotebook_SetPadding, 1896). +-define(wxNotebook_SetPageSize, 1897). +-define(wxNotebook_SetPageImage, 1898). +-define(wxNotebook_SetPageText, 1899). +-define(wxNotebook_SetSelection, 1900). +-define(wxNotebook_ChangeSelection, 1901). +-define(wxChoicebook_new_0, 1902). +-define(wxChoicebook_new_3, 1903). +-define(wxChoicebook_AddPage, 1904). +-define(wxChoicebook_AdvanceSelection, 1905). +-define(wxChoicebook_AssignImageList, 1906). +-define(wxChoicebook_Create, 1907). +-define(wxChoicebook_DeleteAllPages, 1908). +-define(wxChoicebook_DeletePage, 1909). +-define(wxChoicebook_RemovePage, 1910). +-define(wxChoicebook_GetCurrentPage, 1911). +-define(wxChoicebook_GetImageList, 1912). +-define(wxChoicebook_GetPage, 1914). +-define(wxChoicebook_GetPageCount, 1915). +-define(wxChoicebook_GetPageImage, 1916). +-define(wxChoicebook_GetPageText, 1917). +-define(wxChoicebook_GetSelection, 1918). +-define(wxChoicebook_HitTest, 1919). +-define(wxChoicebook_InsertPage, 1920). +-define(wxChoicebook_SetImageList, 1921). +-define(wxChoicebook_SetPageSize, 1922). +-define(wxChoicebook_SetPageImage, 1923). +-define(wxChoicebook_SetPageText, 1924). +-define(wxChoicebook_SetSelection, 1925). +-define(wxChoicebook_ChangeSelection, 1926). +-define(wxChoicebook_destroy, 1927). +-define(wxToolbook_new_0, 1928). +-define(wxToolbook_new_3, 1929). +-define(wxToolbook_AddPage, 1930). +-define(wxToolbook_AdvanceSelection, 1931). +-define(wxToolbook_AssignImageList, 1932). +-define(wxToolbook_Create, 1933). +-define(wxToolbook_DeleteAllPages, 1934). +-define(wxToolbook_DeletePage, 1935). +-define(wxToolbook_RemovePage, 1936). +-define(wxToolbook_GetCurrentPage, 1937). +-define(wxToolbook_GetImageList, 1938). +-define(wxToolbook_GetPage, 1940). +-define(wxToolbook_GetPageCount, 1941). +-define(wxToolbook_GetPageImage, 1942). +-define(wxToolbook_GetPageText, 1943). +-define(wxToolbook_GetSelection, 1944). +-define(wxToolbook_HitTest, 1946). +-define(wxToolbook_InsertPage, 1947). +-define(wxToolbook_SetImageList, 1948). +-define(wxToolbook_SetPageSize, 1949). +-define(wxToolbook_SetPageImage, 1950). +-define(wxToolbook_SetPageText, 1951). +-define(wxToolbook_SetSelection, 1952). +-define(wxToolbook_ChangeSelection, 1953). +-define(wxToolbook_destroy, 1954). +-define(wxListbook_new_0, 1955). +-define(wxListbook_new_3, 1956). +-define(wxListbook_AddPage, 1957). +-define(wxListbook_AdvanceSelection, 1958). +-define(wxListbook_AssignImageList, 1959). +-define(wxListbook_Create, 1960). +-define(wxListbook_DeleteAllPages, 1961). +-define(wxListbook_DeletePage, 1962). +-define(wxListbook_RemovePage, 1963). +-define(wxListbook_GetCurrentPage, 1964). +-define(wxListbook_GetImageList, 1965). +-define(wxListbook_GetPage, 1967). +-define(wxListbook_GetPageCount, 1968). +-define(wxListbook_GetPageImage, 1969). +-define(wxListbook_GetPageText, 1970). +-define(wxListbook_GetSelection, 1971). +-define(wxListbook_HitTest, 1973). +-define(wxListbook_InsertPage, 1974). +-define(wxListbook_SetImageList, 1975). +-define(wxListbook_SetPageSize, 1976). +-define(wxListbook_SetPageImage, 1977). +-define(wxListbook_SetPageText, 1978). +-define(wxListbook_SetSelection, 1979). +-define(wxListbook_ChangeSelection, 1980). +-define(wxListbook_destroy, 1981). +-define(wxTreebook_new_0, 1982). +-define(wxTreebook_new_3, 1983). +-define(wxTreebook_AddPage, 1984). +-define(wxTreebook_AdvanceSelection, 1985). +-define(wxTreebook_AssignImageList, 1986). +-define(wxTreebook_Create, 1987). +-define(wxTreebook_DeleteAllPages, 1988). +-define(wxTreebook_DeletePage, 1989). +-define(wxTreebook_RemovePage, 1990). +-define(wxTreebook_GetCurrentPage, 1991). +-define(wxTreebook_GetImageList, 1992). +-define(wxTreebook_GetPage, 1994). +-define(wxTreebook_GetPageCount, 1995). +-define(wxTreebook_GetPageImage, 1996). +-define(wxTreebook_GetPageText, 1997). +-define(wxTreebook_GetSelection, 1998). +-define(wxTreebook_ExpandNode, 1999). +-define(wxTreebook_IsNodeExpanded, 2000). +-define(wxTreebook_HitTest, 2002). +-define(wxTreebook_InsertPage, 2003). +-define(wxTreebook_InsertSubPage, 2004). +-define(wxTreebook_SetImageList, 2005). +-define(wxTreebook_SetPageSize, 2006). +-define(wxTreebook_SetPageImage, 2007). +-define(wxTreebook_SetPageText, 2008). +-define(wxTreebook_SetSelection, 2009). +-define(wxTreebook_ChangeSelection, 2010). +-define(wxTreebook_destroy, 2011). +-define(wxTreeCtrl_new_2, 2014). +-define(wxTreeCtrl_new_0, 2015). +-define(wxTreeCtrl_destruct, 2017). +-define(wxTreeCtrl_AddRoot, 2018). +-define(wxTreeCtrl_AppendItem, 2019). +-define(wxTreeCtrl_AssignImageList, 2020). +-define(wxTreeCtrl_AssignStateImageList, 2021). +-define(wxTreeCtrl_Collapse, 2022). +-define(wxTreeCtrl_CollapseAndReset, 2023). +-define(wxTreeCtrl_Create, 2024). +-define(wxTreeCtrl_Delete, 2025). +-define(wxTreeCtrl_DeleteAllItems, 2026). +-define(wxTreeCtrl_DeleteChildren, 2027). +-define(wxTreeCtrl_EditLabel, 2028). +-define(wxTreeCtrl_EnsureVisible, 2029). +-define(wxTreeCtrl_Expand, 2030). +-define(wxTreeCtrl_GetBoundingRect, 2031). +-define(wxTreeCtrl_GetChildrenCount, 2033). +-define(wxTreeCtrl_GetCount, 2034). +-define(wxTreeCtrl_GetEditControl, 2035). +-define(wxTreeCtrl_GetFirstChild, 2036). +-define(wxTreeCtrl_GetNextChild, 2037). +-define(wxTreeCtrl_GetFirstVisibleItem, 2038). +-define(wxTreeCtrl_GetImageList, 2039). +-define(wxTreeCtrl_GetIndent, 2040). +-define(wxTreeCtrl_GetItemBackgroundColour, 2041). +-define(wxTreeCtrl_GetItemData, 2042). +-define(wxTreeCtrl_GetItemFont, 2043). +-define(wxTreeCtrl_GetItemImage_1, 2044). +-define(wxTreeCtrl_GetItemImage_2, 2045). +-define(wxTreeCtrl_GetItemText, 2046). +-define(wxTreeCtrl_GetItemTextColour, 2047). +-define(wxTreeCtrl_GetLastChild, 2048). +-define(wxTreeCtrl_GetNextSibling, 2049). +-define(wxTreeCtrl_GetNextVisible, 2050). +-define(wxTreeCtrl_GetItemParent, 2051). +-define(wxTreeCtrl_GetPrevSibling, 2052). +-define(wxTreeCtrl_GetPrevVisible, 2053). +-define(wxTreeCtrl_GetRootItem, 2054). +-define(wxTreeCtrl_GetSelection, 2055). +-define(wxTreeCtrl_GetSelections, 2056). +-define(wxTreeCtrl_GetStateImageList, 2057). +-define(wxTreeCtrl_HitTest, 2058). +-define(wxTreeCtrl_InsertItem, 2060). +-define(wxTreeCtrl_IsBold, 2061). +-define(wxTreeCtrl_IsExpanded, 2062). +-define(wxTreeCtrl_IsSelected, 2063). +-define(wxTreeCtrl_IsVisible, 2064). +-define(wxTreeCtrl_ItemHasChildren, 2065). +-define(wxTreeCtrl_IsTreeItemIdOk, 2066). +-define(wxTreeCtrl_PrependItem, 2067). +-define(wxTreeCtrl_ScrollTo, 2068). +-define(wxTreeCtrl_SelectItem_1, 2069). +-define(wxTreeCtrl_SelectItem_2, 2070). +-define(wxTreeCtrl_SetIndent, 2071). +-define(wxTreeCtrl_SetImageList, 2072). +-define(wxTreeCtrl_SetItemBackgroundColour, 2073). +-define(wxTreeCtrl_SetItemBold, 2074). +-define(wxTreeCtrl_SetItemData, 2075). +-define(wxTreeCtrl_SetItemDropHighlight, 2076). +-define(wxTreeCtrl_SetItemFont, 2077). +-define(wxTreeCtrl_SetItemHasChildren, 2078). +-define(wxTreeCtrl_SetItemImage_2, 2079). +-define(wxTreeCtrl_SetItemImage_3, 2080). +-define(wxTreeCtrl_SetItemText, 2081). +-define(wxTreeCtrl_SetItemTextColour, 2082). +-define(wxTreeCtrl_SetStateImageList, 2083). +-define(wxTreeCtrl_SetWindowStyle, 2084). +-define(wxTreeCtrl_SortChildren, 2085). +-define(wxTreeCtrl_Toggle, 2086). +-define(wxTreeCtrl_ToggleItemSelection, 2087). +-define(wxTreeCtrl_Unselect, 2088). +-define(wxTreeCtrl_UnselectAll, 2089). +-define(wxTreeCtrl_UnselectItem, 2090). +-define(wxScrollBar_new_0, 2091). +-define(wxScrollBar_new_3, 2092). +-define(wxScrollBar_destruct, 2093). +-define(wxScrollBar_Create, 2094). +-define(wxScrollBar_GetRange, 2095). +-define(wxScrollBar_GetPageSize, 2096). +-define(wxScrollBar_GetThumbPosition, 2097). +-define(wxScrollBar_GetThumbSize, 2098). +-define(wxScrollBar_SetThumbPosition, 2099). +-define(wxScrollBar_SetScrollbar, 2100). +-define(wxSpinButton_new_2, 2102). +-define(wxSpinButton_new_0, 2103). +-define(wxSpinButton_Create, 2104). +-define(wxSpinButton_GetMax, 2105). +-define(wxSpinButton_GetMin, 2106). +-define(wxSpinButton_GetValue, 2107). +-define(wxSpinButton_SetRange, 2108). +-define(wxSpinButton_SetValue, 2109). +-define(wxSpinButton_destroy, 2110). +-define(wxSpinCtrl_new_0, 2111). +-define(wxSpinCtrl_new_2, 2112). +-define(wxSpinCtrl_Create, 2114). +-define(wxSpinCtrl_SetValue_1_1, 2117). +-define(wxSpinCtrl_SetValue_1_0, 2118). +-define(wxSpinCtrl_GetValue, 2120). +-define(wxSpinCtrl_SetRange, 2122). +-define(wxSpinCtrl_SetSelection, 2123). +-define(wxSpinCtrl_GetMin, 2125). +-define(wxSpinCtrl_GetMax, 2127). +-define(wxSpinCtrl_destroy, 2128). +-define(wxStaticText_new_0, 2129). +-define(wxStaticText_new_4, 2130). +-define(wxStaticText_Create, 2131). +-define(wxStaticText_GetLabel, 2132). +-define(wxStaticText_SetLabel, 2133). +-define(wxStaticText_Wrap, 2134). +-define(wxStaticText_destroy, 2135). +-define(wxStaticBitmap_new_0, 2136). +-define(wxStaticBitmap_new_4, 2137). +-define(wxStaticBitmap_Create, 2138). +-define(wxStaticBitmap_GetBitmap, 2139). +-define(wxStaticBitmap_SetBitmap, 2140). +-define(wxStaticBitmap_destroy, 2141). +-define(wxRadioBox_new, 2142). +-define(wxRadioBox_destruct, 2144). +-define(wxRadioBox_Create, 2145). +-define(wxRadioBox_Enable_2, 2146). +-define(wxRadioBox_Enable_1, 2147). +-define(wxRadioBox_GetSelection, 2148). +-define(wxRadioBox_GetString, 2149). +-define(wxRadioBox_SetSelection, 2150). +-define(wxRadioBox_Show_2, 2151). +-define(wxRadioBox_Show_1, 2152). +-define(wxRadioBox_GetColumnCount, 2153). +-define(wxRadioBox_GetItemHelpText, 2154). +-define(wxRadioBox_GetItemToolTip, 2155). +-define(wxRadioBox_GetItemFromPoint, 2157). +-define(wxRadioBox_GetRowCount, 2158). +-define(wxRadioBox_IsItemEnabled, 2159). +-define(wxRadioBox_IsItemShown, 2160). +-define(wxRadioBox_SetItemHelpText, 2161). +-define(wxRadioBox_SetItemToolTip, 2162). +-define(wxRadioButton_new_0, 2163). +-define(wxRadioButton_new_4, 2164). +-define(wxRadioButton_Create, 2165). +-define(wxRadioButton_GetValue, 2166). +-define(wxRadioButton_SetValue, 2167). +-define(wxRadioButton_destroy, 2168). +-define(wxSlider_new_6, 2170). +-define(wxSlider_new_0, 2171). +-define(wxSlider_Create, 2172). +-define(wxSlider_GetLineSize, 2173). +-define(wxSlider_GetMax, 2174). +-define(wxSlider_GetMin, 2175). +-define(wxSlider_GetPageSize, 2176). +-define(wxSlider_GetThumbLength, 2177). +-define(wxSlider_GetValue, 2178). +-define(wxSlider_SetLineSize, 2179). +-define(wxSlider_SetPageSize, 2180). +-define(wxSlider_SetRange, 2181). +-define(wxSlider_SetThumbLength, 2182). +-define(wxSlider_SetValue, 2183). +-define(wxSlider_destroy, 2184). +-define(wxDialog_new_4, 2186). +-define(wxDialog_new_0, 2187). +-define(wxDialog_destruct, 2189). +-define(wxDialog_Create, 2190). +-define(wxDialog_CreateButtonSizer, 2191). +-define(wxDialog_CreateStdDialogButtonSizer, 2192). +-define(wxDialog_EndModal, 2193). +-define(wxDialog_GetAffirmativeId, 2194). +-define(wxDialog_GetReturnCode, 2195). +-define(wxDialog_IsModal, 2196). +-define(wxDialog_SetAffirmativeId, 2197). +-define(wxDialog_SetReturnCode, 2198). +-define(wxDialog_Show, 2199). +-define(wxDialog_ShowModal, 2200). +-define(wxColourDialog_new_0, 2201). +-define(wxColourDialog_new_2, 2202). +-define(wxColourDialog_destruct, 2203). +-define(wxColourDialog_Create, 2204). +-define(wxColourDialog_GetColourData, 2205). +-define(wxColourData_new_0, 2206). +-define(wxColourData_new_1, 2207). +-define(wxColourData_destruct, 2208). +-define(wxColourData_GetChooseFull, 2209). +-define(wxColourData_GetColour, 2210). +-define(wxColourData_GetCustomColour, 2212). +-define(wxColourData_SetChooseFull, 2213). +-define(wxColourData_SetColour, 2214). +-define(wxColourData_SetCustomColour, 2215). +-define(wxPalette_new_0, 2216). +-define(wxPalette_new_4, 2217). +-define(wxPalette_destruct, 2219). +-define(wxPalette_Create, 2220). +-define(wxPalette_GetColoursCount, 2221). +-define(wxPalette_GetPixel, 2222). +-define(wxPalette_GetRGB, 2223). +-define(wxPalette_IsOk, 2224). +-define(wxDirDialog_new, 2228). +-define(wxDirDialog_destruct, 2229). +-define(wxDirDialog_GetPath, 2230). +-define(wxDirDialog_GetMessage, 2231). +-define(wxDirDialog_SetMessage, 2232). +-define(wxDirDialog_SetPath, 2233). +-define(wxFileDialog_new, 2237). +-define(wxFileDialog_destruct, 2238). +-define(wxFileDialog_GetDirectory, 2239). +-define(wxFileDialog_GetFilename, 2240). +-define(wxFileDialog_GetFilenames, 2241). +-define(wxFileDialog_GetFilterIndex, 2242). +-define(wxFileDialog_GetMessage, 2243). +-define(wxFileDialog_GetPath, 2244). +-define(wxFileDialog_GetPaths, 2245). +-define(wxFileDialog_GetWildcard, 2246). +-define(wxFileDialog_SetDirectory, 2247). +-define(wxFileDialog_SetFilename, 2248). +-define(wxFileDialog_SetFilterIndex, 2249). +-define(wxFileDialog_SetMessage, 2250). +-define(wxFileDialog_SetPath, 2251). +-define(wxFileDialog_SetWildcard, 2252). +-define(wxPickerBase_SetInternalMargin, 2253). +-define(wxPickerBase_GetInternalMargin, 2254). +-define(wxPickerBase_SetTextCtrlProportion, 2255). +-define(wxPickerBase_SetPickerCtrlProportion, 2256). +-define(wxPickerBase_GetTextCtrlProportion, 2257). +-define(wxPickerBase_GetPickerCtrlProportion, 2258). +-define(wxPickerBase_HasTextCtrl, 2259). +-define(wxPickerBase_GetTextCtrl, 2260). +-define(wxPickerBase_IsTextCtrlGrowable, 2261). +-define(wxPickerBase_SetPickerCtrlGrowable, 2262). +-define(wxPickerBase_SetTextCtrlGrowable, 2263). +-define(wxPickerBase_IsPickerCtrlGrowable, 2264). +-define(wxFilePickerCtrl_new_0, 2265). +-define(wxFilePickerCtrl_new_3, 2266). +-define(wxFilePickerCtrl_Create, 2267). +-define(wxFilePickerCtrl_GetPath, 2268). +-define(wxFilePickerCtrl_SetPath, 2269). +-define(wxFilePickerCtrl_destroy, 2270). +-define(wxDirPickerCtrl_new_0, 2271). +-define(wxDirPickerCtrl_new_3, 2272). +-define(wxDirPickerCtrl_Create, 2273). +-define(wxDirPickerCtrl_GetPath, 2274). +-define(wxDirPickerCtrl_SetPath, 2275). +-define(wxDirPickerCtrl_destroy, 2276). +-define(wxColourPickerCtrl_new_0, 2277). +-define(wxColourPickerCtrl_new_3, 2278). +-define(wxColourPickerCtrl_Create, 2279). +-define(wxColourPickerCtrl_GetColour, 2280). +-define(wxColourPickerCtrl_SetColour_1_1, 2281). +-define(wxColourPickerCtrl_SetColour_1_0, 2282). +-define(wxColourPickerCtrl_destroy, 2283). +-define(wxDatePickerCtrl_new_0, 2284). +-define(wxDatePickerCtrl_new_3, 2285). +-define(wxDatePickerCtrl_GetRange, 2286). +-define(wxDatePickerCtrl_GetValue, 2287). +-define(wxDatePickerCtrl_SetRange, 2288). +-define(wxDatePickerCtrl_SetValue, 2289). +-define(wxDatePickerCtrl_destroy, 2290). +-define(wxFontPickerCtrl_new_0, 2291). +-define(wxFontPickerCtrl_new_3, 2292). +-define(wxFontPickerCtrl_Create, 2293). +-define(wxFontPickerCtrl_GetSelectedFont, 2294). +-define(wxFontPickerCtrl_SetSelectedFont, 2295). +-define(wxFontPickerCtrl_GetMaxPointSize, 2296). +-define(wxFontPickerCtrl_SetMaxPointSize, 2297). +-define(wxFontPickerCtrl_destroy, 2298). +-define(wxFindReplaceDialog_new_0, 2301). +-define(wxFindReplaceDialog_new_4, 2302). +-define(wxFindReplaceDialog_destruct, 2303). +-define(wxFindReplaceDialog_Create, 2304). +-define(wxFindReplaceDialog_GetData, 2305). +-define(wxFindReplaceData_new_0, 2306). +-define(wxFindReplaceData_new_1, 2307). +-define(wxFindReplaceData_GetFindString, 2308). +-define(wxFindReplaceData_GetReplaceString, 2309). +-define(wxFindReplaceData_GetFlags, 2310). +-define(wxFindReplaceData_SetFlags, 2311). +-define(wxFindReplaceData_SetFindString, 2312). +-define(wxFindReplaceData_SetReplaceString, 2313). +-define(wxFindReplaceData_destroy, 2314). +-define(wxMultiChoiceDialog_new_0, 2315). +-define(wxMultiChoiceDialog_new_5, 2317). +-define(wxMultiChoiceDialog_GetSelections, 2318). +-define(wxMultiChoiceDialog_SetSelections, 2319). +-define(wxMultiChoiceDialog_destroy, 2320). +-define(wxSingleChoiceDialog_new_0, 2321). +-define(wxSingleChoiceDialog_new_5, 2323). +-define(wxSingleChoiceDialog_GetSelection, 2324). +-define(wxSingleChoiceDialog_GetStringSelection, 2325). +-define(wxSingleChoiceDialog_SetSelection, 2326). +-define(wxSingleChoiceDialog_destroy, 2327). +-define(wxTextEntryDialog_new, 2328). +-define(wxTextEntryDialog_GetValue, 2329). +-define(wxTextEntryDialog_SetValue, 2330). +-define(wxTextEntryDialog_destroy, 2331). +-define(wxPasswordEntryDialog_new, 2332). +-define(wxPasswordEntryDialog_destroy, 2333). +-define(wxFontData_new_0, 2334). +-define(wxFontData_new_1, 2335). +-define(wxFontData_destruct, 2336). +-define(wxFontData_EnableEffects, 2337). +-define(wxFontData_GetAllowSymbols, 2338). +-define(wxFontData_GetColour, 2339). +-define(wxFontData_GetChosenFont, 2340). +-define(wxFontData_GetEnableEffects, 2341). +-define(wxFontData_GetInitialFont, 2342). +-define(wxFontData_GetShowHelp, 2343). +-define(wxFontData_SetAllowSymbols, 2344). +-define(wxFontData_SetChosenFont, 2345). +-define(wxFontData_SetColour, 2346). +-define(wxFontData_SetInitialFont, 2347). +-define(wxFontData_SetRange, 2348). +-define(wxFontData_SetShowHelp, 2349). +-define(wxFontDialog_new_0, 2353). +-define(wxFontDialog_new_2, 2355). +-define(wxFontDialog_Create, 2357). +-define(wxFontDialog_GetFontData, 2358). +-define(wxFontDialog_destroy, 2360). +-define(wxProgressDialog_new, 2361). +-define(wxProgressDialog_destruct, 2362). +-define(wxProgressDialog_Resume, 2363). +-define(wxProgressDialog_Update_2, 2364). +-define(wxProgressDialog_Update_0, 2365). +-define(wxMessageDialog_new, 2366). +-define(wxMessageDialog_destruct, 2367). +-define(wxPageSetupDialog_new, 2368). +-define(wxPageSetupDialog_destruct, 2369). +-define(wxPageSetupDialog_GetPageSetupData, 2370). +-define(wxPageSetupDialog_ShowModal, 2371). +-define(wxPageSetupDialogData_new_0, 2372). +-define(wxPageSetupDialogData_new_1_0, 2373). +-define(wxPageSetupDialogData_new_1_1, 2374). +-define(wxPageSetupDialogData_destruct, 2375). +-define(wxPageSetupDialogData_EnableHelp, 2376). +-define(wxPageSetupDialogData_EnableMargins, 2377). +-define(wxPageSetupDialogData_EnableOrientation, 2378). +-define(wxPageSetupDialogData_EnablePaper, 2379). +-define(wxPageSetupDialogData_EnablePrinter, 2380). +-define(wxPageSetupDialogData_GetDefaultMinMargins, 2381). +-define(wxPageSetupDialogData_GetEnableMargins, 2382). +-define(wxPageSetupDialogData_GetEnableOrientation, 2383). +-define(wxPageSetupDialogData_GetEnablePaper, 2384). +-define(wxPageSetupDialogData_GetEnablePrinter, 2385). +-define(wxPageSetupDialogData_GetEnableHelp, 2386). +-define(wxPageSetupDialogData_GetDefaultInfo, 2387). +-define(wxPageSetupDialogData_GetMarginTopLeft, 2388). +-define(wxPageSetupDialogData_GetMarginBottomRight, 2389). +-define(wxPageSetupDialogData_GetMinMarginTopLeft, 2390). +-define(wxPageSetupDialogData_GetMinMarginBottomRight, 2391). +-define(wxPageSetupDialogData_GetPaperId, 2392). +-define(wxPageSetupDialogData_GetPaperSize, 2393). +-define(wxPageSetupDialogData_GetPrintData, 2395). +-define(wxPageSetupDialogData_IsOk, 2396). +-define(wxPageSetupDialogData_SetDefaultInfo, 2397). +-define(wxPageSetupDialogData_SetDefaultMinMargins, 2398). +-define(wxPageSetupDialogData_SetMarginTopLeft, 2399). +-define(wxPageSetupDialogData_SetMarginBottomRight, 2400). +-define(wxPageSetupDialogData_SetMinMarginTopLeft, 2401). +-define(wxPageSetupDialogData_SetMinMarginBottomRight, 2402). +-define(wxPageSetupDialogData_SetPaperId, 2403). +-define(wxPageSetupDialogData_SetPaperSize_1_1, 2404). +-define(wxPageSetupDialogData_SetPaperSize_1_0, 2405). +-define(wxPageSetupDialogData_SetPrintData, 2406). +-define(wxPrintDialog_new_2_0, 2407). +-define(wxPrintDialog_new_2_1, 2408). +-define(wxPrintDialog_destruct, 2409). +-define(wxPrintDialog_GetPrintDialogData, 2410). +-define(wxPrintDialog_GetPrintDC, 2411). +-define(wxPrintDialogData_new_0, 2412). +-define(wxPrintDialogData_new_1_1, 2413). +-define(wxPrintDialogData_new_1_0, 2414). +-define(wxPrintDialogData_destruct, 2415). +-define(wxPrintDialogData_EnableHelp, 2416). +-define(wxPrintDialogData_EnablePageNumbers, 2417). +-define(wxPrintDialogData_EnablePrintToFile, 2418). +-define(wxPrintDialogData_EnableSelection, 2419). +-define(wxPrintDialogData_GetAllPages, 2420). +-define(wxPrintDialogData_GetCollate, 2421). +-define(wxPrintDialogData_GetFromPage, 2422). +-define(wxPrintDialogData_GetMaxPage, 2423). +-define(wxPrintDialogData_GetMinPage, 2424). +-define(wxPrintDialogData_GetNoCopies, 2425). +-define(wxPrintDialogData_GetPrintData, 2426). +-define(wxPrintDialogData_GetPrintToFile, 2427). +-define(wxPrintDialogData_GetSelection, 2428). +-define(wxPrintDialogData_GetToPage, 2429). +-define(wxPrintDialogData_IsOk, 2430). +-define(wxPrintDialogData_SetCollate, 2431). +-define(wxPrintDialogData_SetFromPage, 2432). +-define(wxPrintDialogData_SetMaxPage, 2433). +-define(wxPrintDialogData_SetMinPage, 2434). +-define(wxPrintDialogData_SetNoCopies, 2435). +-define(wxPrintDialogData_SetPrintData, 2436). +-define(wxPrintDialogData_SetPrintToFile, 2437). +-define(wxPrintDialogData_SetSelection, 2438). +-define(wxPrintDialogData_SetToPage, 2439). +-define(wxPrintData_new_0, 2440). +-define(wxPrintData_new_1, 2441). +-define(wxPrintData_destruct, 2442). +-define(wxPrintData_GetCollate, 2443). +-define(wxPrintData_GetBin, 2444). +-define(wxPrintData_GetColour, 2445). +-define(wxPrintData_GetDuplex, 2446). +-define(wxPrintData_GetNoCopies, 2447). +-define(wxPrintData_GetOrientation, 2448). +-define(wxPrintData_GetPaperId, 2449). +-define(wxPrintData_GetPrinterName, 2450). +-define(wxPrintData_GetQuality, 2451). +-define(wxPrintData_IsOk, 2452). +-define(wxPrintData_SetBin, 2453). +-define(wxPrintData_SetCollate, 2454). +-define(wxPrintData_SetColour, 2455). +-define(wxPrintData_SetDuplex, 2456). +-define(wxPrintData_SetNoCopies, 2457). +-define(wxPrintData_SetOrientation, 2458). +-define(wxPrintData_SetPaperId, 2459). +-define(wxPrintData_SetPrinterName, 2460). +-define(wxPrintData_SetQuality, 2461). +-define(wxPrintPreview_new_2, 2464). +-define(wxPrintPreview_new_3, 2465). +-define(wxPrintPreview_destruct, 2467). +-define(wxPrintPreview_GetCanvas, 2468). +-define(wxPrintPreview_GetCurrentPage, 2469). +-define(wxPrintPreview_GetFrame, 2470). +-define(wxPrintPreview_GetMaxPage, 2471). +-define(wxPrintPreview_GetMinPage, 2472). +-define(wxPrintPreview_GetPrintout, 2473). +-define(wxPrintPreview_GetPrintoutForPrinting, 2474). +-define(wxPrintPreview_IsOk, 2475). +-define(wxPrintPreview_PaintPage, 2476). +-define(wxPrintPreview_Print, 2477). +-define(wxPrintPreview_RenderPage, 2478). +-define(wxPrintPreview_SetCanvas, 2479). +-define(wxPrintPreview_SetCurrentPage, 2480). +-define(wxPrintPreview_SetFrame, 2481). +-define(wxPrintPreview_SetPrintout, 2482). +-define(wxPrintPreview_SetZoom, 2483). +-define(wxPreviewFrame_new, 2484). +-define(wxPreviewFrame_destruct, 2485). +-define(wxPreviewFrame_CreateControlBar, 2486). +-define(wxPreviewFrame_CreateCanvas, 2487). +-define(wxPreviewFrame_Initialize, 2488). +-define(wxPreviewFrame_OnCloseWindow, 2489). +-define(wxPreviewControlBar_new, 2490). +-define(wxPreviewControlBar_destruct, 2491). +-define(wxPreviewControlBar_CreateButtons, 2492). +-define(wxPreviewControlBar_GetPrintPreview, 2493). +-define(wxPreviewControlBar_GetZoomControl, 2494). +-define(wxPreviewControlBar_SetZoomControl, 2495). +-define(wxPrinter_new, 2497). +-define(wxPrinter_CreateAbortWindow, 2498). +-define(wxPrinter_GetAbort, 2499). +-define(wxPrinter_GetLastError, 2500). +-define(wxPrinter_GetPrintDialogData, 2501). +-define(wxPrinter_Print, 2502). +-define(wxPrinter_PrintDialog, 2503). +-define(wxPrinter_ReportError, 2504). +-define(wxPrinter_Setup, 2505). +-define(wxPrinter_destroy, 2506). +-define(wxXmlResource_new_1, 2507). +-define(wxXmlResource_new_2, 2508). +-define(wxXmlResource_destruct, 2509). +-define(wxXmlResource_AttachUnknownControl, 2510). +-define(wxXmlResource_ClearHandlers, 2511). +-define(wxXmlResource_CompareVersion, 2512). +-define(wxXmlResource_Get, 2513). +-define(wxXmlResource_GetFlags, 2514). +-define(wxXmlResource_GetVersion, 2515). +-define(wxXmlResource_GetXRCID, 2516). +-define(wxXmlResource_InitAllHandlers, 2517). +-define(wxXmlResource_Load, 2518). +-define(wxXmlResource_LoadBitmap, 2519). +-define(wxXmlResource_LoadDialog_2, 2520). +-define(wxXmlResource_LoadDialog_3, 2521). +-define(wxXmlResource_LoadFrame_2, 2522). +-define(wxXmlResource_LoadFrame_3, 2523). +-define(wxXmlResource_LoadIcon, 2524). +-define(wxXmlResource_LoadMenu, 2525). +-define(wxXmlResource_LoadMenuBar_2, 2526). +-define(wxXmlResource_LoadMenuBar_1, 2527). +-define(wxXmlResource_LoadPanel_2, 2528). +-define(wxXmlResource_LoadPanel_3, 2529). +-define(wxXmlResource_LoadToolBar, 2530). +-define(wxXmlResource_Set, 2531). +-define(wxXmlResource_SetFlags, 2532). +-define(wxXmlResource_Unload, 2533). +-define(wxXmlResource_xrcctrl, 2534). +-define(wxHtmlEasyPrinting_new, 2535). +-define(wxHtmlEasyPrinting_destruct, 2536). +-define(wxHtmlEasyPrinting_GetPrintData, 2537). +-define(wxHtmlEasyPrinting_GetPageSetupData, 2538). +-define(wxHtmlEasyPrinting_PreviewFile, 2539). +-define(wxHtmlEasyPrinting_PreviewText, 2540). +-define(wxHtmlEasyPrinting_PrintFile, 2541). +-define(wxHtmlEasyPrinting_PrintText, 2542). +-define(wxHtmlEasyPrinting_PageSetup, 2543). +-define(wxHtmlEasyPrinting_SetFonts, 2544). +-define(wxHtmlEasyPrinting_SetHeader, 2545). +-define(wxHtmlEasyPrinting_SetFooter, 2546). +-define(wxGLCanvas_new_2, 2548). +-define(wxGLCanvas_new_3_1, 2549). +-define(wxGLCanvas_new_3_0, 2550). +-define(wxGLCanvas_GetContext, 2551). +-define(wxGLCanvas_SetCurrent, 2553). +-define(wxGLCanvas_SwapBuffers, 2554). +-define(wxGLCanvas_destroy, 2555). +-define(wxAuiManager_new, 2556). +-define(wxAuiManager_destruct, 2557). +-define(wxAuiManager_AddPane_2_1, 2558). +-define(wxAuiManager_AddPane_3, 2559). +-define(wxAuiManager_AddPane_2_0, 2560). +-define(wxAuiManager_DetachPane, 2561). +-define(wxAuiManager_GetAllPanes, 2562). +-define(wxAuiManager_GetArtProvider, 2563). +-define(wxAuiManager_GetDockSizeConstraint, 2564). +-define(wxAuiManager_GetFlags, 2565). +-define(wxAuiManager_GetManagedWindow, 2566). +-define(wxAuiManager_GetManager, 2567). +-define(wxAuiManager_GetPane_1_1, 2568). +-define(wxAuiManager_GetPane_1_0, 2569). +-define(wxAuiManager_HideHint, 2570). +-define(wxAuiManager_InsertPane, 2571). +-define(wxAuiManager_LoadPaneInfo, 2572). +-define(wxAuiManager_LoadPerspective, 2573). +-define(wxAuiManager_SavePaneInfo, 2574). +-define(wxAuiManager_SavePerspective, 2575). +-define(wxAuiManager_SetArtProvider, 2576). +-define(wxAuiManager_SetDockSizeConstraint, 2577). +-define(wxAuiManager_SetFlags, 2578). +-define(wxAuiManager_SetManagedWindow, 2579). +-define(wxAuiManager_ShowHint, 2580). +-define(wxAuiManager_UnInit, 2581). +-define(wxAuiManager_Update, 2582). +-define(wxAuiPaneInfo_new_0, 2583). +-define(wxAuiPaneInfo_new_1, 2584). +-define(wxAuiPaneInfo_destruct, 2585). +-define(wxAuiPaneInfo_BestSize_1, 2586). +-define(wxAuiPaneInfo_BestSize_2, 2587). +-define(wxAuiPaneInfo_Bottom, 2588). +-define(wxAuiPaneInfo_BottomDockable, 2589). +-define(wxAuiPaneInfo_Caption, 2590). +-define(wxAuiPaneInfo_CaptionVisible, 2591). +-define(wxAuiPaneInfo_Centre, 2592). +-define(wxAuiPaneInfo_CentrePane, 2593). +-define(wxAuiPaneInfo_CloseButton, 2594). +-define(wxAuiPaneInfo_DefaultPane, 2595). +-define(wxAuiPaneInfo_DestroyOnClose, 2596). +-define(wxAuiPaneInfo_Direction, 2597). +-define(wxAuiPaneInfo_Dock, 2598). +-define(wxAuiPaneInfo_Dockable, 2599). +-define(wxAuiPaneInfo_Fixed, 2600). +-define(wxAuiPaneInfo_Float, 2601). +-define(wxAuiPaneInfo_Floatable, 2602). +-define(wxAuiPaneInfo_FloatingPosition_1, 2603). +-define(wxAuiPaneInfo_FloatingPosition_2, 2604). +-define(wxAuiPaneInfo_FloatingSize_1, 2605). +-define(wxAuiPaneInfo_FloatingSize_2, 2606). +-define(wxAuiPaneInfo_Gripper, 2607). +-define(wxAuiPaneInfo_GripperTop, 2608). +-define(wxAuiPaneInfo_HasBorder, 2609). +-define(wxAuiPaneInfo_HasCaption, 2610). +-define(wxAuiPaneInfo_HasCloseButton, 2611). +-define(wxAuiPaneInfo_HasFlag, 2612). +-define(wxAuiPaneInfo_HasGripper, 2613). +-define(wxAuiPaneInfo_HasGripperTop, 2614). +-define(wxAuiPaneInfo_HasMaximizeButton, 2615). +-define(wxAuiPaneInfo_HasMinimizeButton, 2616). +-define(wxAuiPaneInfo_HasPinButton, 2617). +-define(wxAuiPaneInfo_Hide, 2618). +-define(wxAuiPaneInfo_IsBottomDockable, 2619). +-define(wxAuiPaneInfo_IsDocked, 2620). +-define(wxAuiPaneInfo_IsFixed, 2621). +-define(wxAuiPaneInfo_IsFloatable, 2622). +-define(wxAuiPaneInfo_IsFloating, 2623). +-define(wxAuiPaneInfo_IsLeftDockable, 2624). +-define(wxAuiPaneInfo_IsMovable, 2625). +-define(wxAuiPaneInfo_IsOk, 2626). +-define(wxAuiPaneInfo_IsResizable, 2627). +-define(wxAuiPaneInfo_IsRightDockable, 2628). +-define(wxAuiPaneInfo_IsShown, 2629). +-define(wxAuiPaneInfo_IsToolbar, 2630). +-define(wxAuiPaneInfo_IsTopDockable, 2631). +-define(wxAuiPaneInfo_Layer, 2632). +-define(wxAuiPaneInfo_Left, 2633). +-define(wxAuiPaneInfo_LeftDockable, 2634). +-define(wxAuiPaneInfo_MaxSize_1, 2635). +-define(wxAuiPaneInfo_MaxSize_2, 2636). +-define(wxAuiPaneInfo_MaximizeButton, 2637). +-define(wxAuiPaneInfo_MinSize_1, 2638). +-define(wxAuiPaneInfo_MinSize_2, 2639). +-define(wxAuiPaneInfo_MinimizeButton, 2640). +-define(wxAuiPaneInfo_Movable, 2641). +-define(wxAuiPaneInfo_Name, 2642). +-define(wxAuiPaneInfo_PaneBorder, 2643). +-define(wxAuiPaneInfo_PinButton, 2644). +-define(wxAuiPaneInfo_Position, 2645). +-define(wxAuiPaneInfo_Resizable, 2646). +-define(wxAuiPaneInfo_Right, 2647). +-define(wxAuiPaneInfo_RightDockable, 2648). +-define(wxAuiPaneInfo_Row, 2649). +-define(wxAuiPaneInfo_SafeSet, 2650). +-define(wxAuiPaneInfo_SetFlag, 2651). +-define(wxAuiPaneInfo_Show, 2652). +-define(wxAuiPaneInfo_ToolbarPane, 2653). +-define(wxAuiPaneInfo_Top, 2654). +-define(wxAuiPaneInfo_TopDockable, 2655). +-define(wxAuiPaneInfo_Window, 2656). +-define(wxAuiPaneInfo_GetWindow, 2657). +-define(wxAuiPaneInfo_GetFrame, 2658). +-define(wxAuiPaneInfo_GetDirection, 2659). +-define(wxAuiPaneInfo_GetLayer, 2660). +-define(wxAuiPaneInfo_GetRow, 2661). +-define(wxAuiPaneInfo_GetPosition, 2662). +-define(wxAuiPaneInfo_GetFloatingPosition, 2663). +-define(wxAuiPaneInfo_GetFloatingSize, 2664). +-define(wxAuiNotebook_new_0, 2665). +-define(wxAuiNotebook_new_2, 2666). +-define(wxAuiNotebook_AddPage, 2667). +-define(wxAuiNotebook_Create, 2668). +-define(wxAuiNotebook_DeletePage, 2669). +-define(wxAuiNotebook_GetArtProvider, 2670). +-define(wxAuiNotebook_GetPage, 2671). +-define(wxAuiNotebook_GetPageBitmap, 2672). +-define(wxAuiNotebook_GetPageCount, 2673). +-define(wxAuiNotebook_GetPageIndex, 2674). +-define(wxAuiNotebook_GetPageText, 2675). +-define(wxAuiNotebook_GetSelection, 2676). +-define(wxAuiNotebook_InsertPage, 2677). +-define(wxAuiNotebook_RemovePage, 2678). +-define(wxAuiNotebook_SetArtProvider, 2679). +-define(wxAuiNotebook_SetFont, 2680). +-define(wxAuiNotebook_SetPageBitmap, 2681). +-define(wxAuiNotebook_SetPageText, 2682). +-define(wxAuiNotebook_SetSelection, 2683). +-define(wxAuiNotebook_SetTabCtrlHeight, 2684). +-define(wxAuiNotebook_SetUniformBitmapSize, 2685). +-define(wxAuiNotebook_destroy, 2686). +-define(wxAuiTabArt_SetFlags, 2687). +-define(wxAuiTabArt_SetMeasuringFont, 2688). +-define(wxAuiTabArt_SetNormalFont, 2689). +-define(wxAuiTabArt_SetSelectedFont, 2690). +-define(wxAuiTabArt_SetColour, 2691). +-define(wxAuiTabArt_SetActiveColour, 2692). +-define(wxAuiDockArt_GetColour, 2693). +-define(wxAuiDockArt_GetFont, 2694). +-define(wxAuiDockArt_GetMetric, 2695). +-define(wxAuiDockArt_SetColour, 2696). +-define(wxAuiDockArt_SetFont, 2697). +-define(wxAuiDockArt_SetMetric, 2698). +-define(wxAuiSimpleTabArt_new, 2699). +-define(wxAuiSimpleTabArt_destroy, 2700). +-define(wxMDIParentFrame_new_0, 2701). +-define(wxMDIParentFrame_new_4, 2702). +-define(wxMDIParentFrame_destruct, 2703). +-define(wxMDIParentFrame_ActivateNext, 2704). +-define(wxMDIParentFrame_ActivatePrevious, 2705). +-define(wxMDIParentFrame_ArrangeIcons, 2706). +-define(wxMDIParentFrame_Cascade, 2707). +-define(wxMDIParentFrame_Create, 2708). +-define(wxMDIParentFrame_GetActiveChild, 2709). +-define(wxMDIParentFrame_GetClientWindow, 2710). +-define(wxMDIParentFrame_Tile, 2711). +-define(wxMDIChildFrame_new_0, 2712). +-define(wxMDIChildFrame_new_4, 2713). +-define(wxMDIChildFrame_destruct, 2714). +-define(wxMDIChildFrame_Activate, 2715). +-define(wxMDIChildFrame_Create, 2716). +-define(wxMDIChildFrame_Maximize, 2717). +-define(wxMDIChildFrame_Restore, 2718). +-define(wxMDIClientWindow_new_0, 2719). +-define(wxMDIClientWindow_new_2, 2720). +-define(wxMDIClientWindow_destruct, 2721). +-define(wxMDIClientWindow_CreateClient, 2722). +-define(wxLayoutAlgorithm_new, 2723). +-define(wxLayoutAlgorithm_LayoutFrame, 2724). +-define(wxLayoutAlgorithm_LayoutMDIFrame, 2725). +-define(wxLayoutAlgorithm_LayoutWindow, 2726). +-define(wxLayoutAlgorithm_destroy, 2727). +-define(wxEvent_GetId, 2728). +-define(wxEvent_GetSkipped, 2729). +-define(wxEvent_GetTimestamp, 2730). +-define(wxEvent_IsCommandEvent, 2731). +-define(wxEvent_ResumePropagation, 2732). +-define(wxEvent_ShouldPropagate, 2733). +-define(wxEvent_Skip, 2734). +-define(wxEvent_StopPropagation, 2735). +-define(wxCommandEvent_getClientData, 2736). +-define(wxCommandEvent_GetExtraLong, 2737). +-define(wxCommandEvent_GetInt, 2738). +-define(wxCommandEvent_GetSelection, 2739). +-define(wxCommandEvent_GetString, 2740). +-define(wxCommandEvent_IsChecked, 2741). +-define(wxCommandEvent_IsSelection, 2742). +-define(wxCommandEvent_SetInt, 2743). +-define(wxCommandEvent_SetString, 2744). +-define(wxScrollEvent_GetOrientation, 2745). +-define(wxScrollEvent_GetPosition, 2746). +-define(wxScrollWinEvent_GetOrientation, 2747). +-define(wxScrollWinEvent_GetPosition, 2748). +-define(wxMouseEvent_AltDown, 2749). +-define(wxMouseEvent_Button, 2750). +-define(wxMouseEvent_ButtonDClick, 2751). +-define(wxMouseEvent_ButtonDown, 2752). +-define(wxMouseEvent_ButtonUp, 2753). +-define(wxMouseEvent_CmdDown, 2754). +-define(wxMouseEvent_ControlDown, 2755). +-define(wxMouseEvent_Dragging, 2756). +-define(wxMouseEvent_Entering, 2757). +-define(wxMouseEvent_GetButton, 2758). +-define(wxMouseEvent_GetPosition, 2761). +-define(wxMouseEvent_GetLogicalPosition, 2762). +-define(wxMouseEvent_GetLinesPerAction, 2763). +-define(wxMouseEvent_GetWheelRotation, 2764). +-define(wxMouseEvent_GetWheelDelta, 2765). +-define(wxMouseEvent_GetX, 2766). +-define(wxMouseEvent_GetY, 2767). +-define(wxMouseEvent_IsButton, 2768). +-define(wxMouseEvent_IsPageScroll, 2769). +-define(wxMouseEvent_Leaving, 2770). +-define(wxMouseEvent_LeftDClick, 2771). +-define(wxMouseEvent_LeftDown, 2772). +-define(wxMouseEvent_LeftIsDown, 2773). +-define(wxMouseEvent_LeftUp, 2774). +-define(wxMouseEvent_MetaDown, 2775). +-define(wxMouseEvent_MiddleDClick, 2776). +-define(wxMouseEvent_MiddleDown, 2777). +-define(wxMouseEvent_MiddleIsDown, 2778). +-define(wxMouseEvent_MiddleUp, 2779). +-define(wxMouseEvent_Moving, 2780). +-define(wxMouseEvent_RightDClick, 2781). +-define(wxMouseEvent_RightDown, 2782). +-define(wxMouseEvent_RightIsDown, 2783). +-define(wxMouseEvent_RightUp, 2784). +-define(wxMouseEvent_ShiftDown, 2785). +-define(wxSetCursorEvent_GetCursor, 2786). +-define(wxSetCursorEvent_GetX, 2787). +-define(wxSetCursorEvent_GetY, 2788). +-define(wxSetCursorEvent_HasCursor, 2789). +-define(wxSetCursorEvent_SetCursor, 2790). +-define(wxKeyEvent_AltDown, 2791). +-define(wxKeyEvent_CmdDown, 2792). +-define(wxKeyEvent_ControlDown, 2793). +-define(wxKeyEvent_GetKeyCode, 2794). +-define(wxKeyEvent_GetModifiers, 2795). +-define(wxKeyEvent_GetPosition, 2798). +-define(wxKeyEvent_GetRawKeyCode, 2799). +-define(wxKeyEvent_GetRawKeyFlags, 2800). +-define(wxKeyEvent_GetUnicodeKey, 2801). +-define(wxKeyEvent_GetX, 2802). +-define(wxKeyEvent_GetY, 2803). +-define(wxKeyEvent_HasModifiers, 2804). +-define(wxKeyEvent_MetaDown, 2805). +-define(wxKeyEvent_ShiftDown, 2806). +-define(wxSizeEvent_GetSize, 2807). +-define(wxMoveEvent_GetPosition, 2808). +-define(wxEraseEvent_GetDC, 2809). +-define(wxFocusEvent_GetWindow, 2810). +-define(wxChildFocusEvent_GetWindow, 2811). +-define(wxMenuEvent_GetMenu, 2812). +-define(wxMenuEvent_GetMenuId, 2813). +-define(wxMenuEvent_IsPopup, 2814). +-define(wxCloseEvent_CanVeto, 2815). +-define(wxCloseEvent_GetLoggingOff, 2816). +-define(wxCloseEvent_SetCanVeto, 2817). +-define(wxCloseEvent_SetLoggingOff, 2818). +-define(wxCloseEvent_Veto, 2819). +-define(wxShowEvent_SetShow, 2820). +-define(wxShowEvent_GetShow, 2821). +-define(wxIconizeEvent_Iconized, 2822). +-define(wxJoystickEvent_ButtonDown, 2823). +-define(wxJoystickEvent_ButtonIsDown, 2824). +-define(wxJoystickEvent_ButtonUp, 2825). +-define(wxJoystickEvent_GetButtonChange, 2826). +-define(wxJoystickEvent_GetButtonState, 2827). +-define(wxJoystickEvent_GetJoystick, 2828). +-define(wxJoystickEvent_GetPosition, 2829). +-define(wxJoystickEvent_GetZPosition, 2830). +-define(wxJoystickEvent_IsButton, 2831). +-define(wxJoystickEvent_IsMove, 2832). +-define(wxJoystickEvent_IsZMove, 2833). +-define(wxUpdateUIEvent_CanUpdate, 2834). +-define(wxUpdateUIEvent_Check, 2835). +-define(wxUpdateUIEvent_Enable, 2836). +-define(wxUpdateUIEvent_Show, 2837). +-define(wxUpdateUIEvent_GetChecked, 2838). +-define(wxUpdateUIEvent_GetEnabled, 2839). +-define(wxUpdateUIEvent_GetShown, 2840). +-define(wxUpdateUIEvent_GetSetChecked, 2841). +-define(wxUpdateUIEvent_GetSetEnabled, 2842). +-define(wxUpdateUIEvent_GetSetShown, 2843). +-define(wxUpdateUIEvent_GetSetText, 2844). +-define(wxUpdateUIEvent_GetText, 2845). +-define(wxUpdateUIEvent_GetMode, 2846). +-define(wxUpdateUIEvent_GetUpdateInterval, 2847). +-define(wxUpdateUIEvent_ResetUpdateTime, 2848). +-define(wxUpdateUIEvent_SetMode, 2849). +-define(wxUpdateUIEvent_SetText, 2850). +-define(wxUpdateUIEvent_SetUpdateInterval, 2851). +-define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2852). +-define(wxPaletteChangedEvent_SetChangedWindow, 2853). +-define(wxPaletteChangedEvent_GetChangedWindow, 2854). +-define(wxQueryNewPaletteEvent_SetPaletteRealized, 2855). +-define(wxQueryNewPaletteEvent_GetPaletteRealized, 2856). +-define(wxNavigationKeyEvent_GetDirection, 2857). +-define(wxNavigationKeyEvent_SetDirection, 2858). +-define(wxNavigationKeyEvent_IsWindowChange, 2859). +-define(wxNavigationKeyEvent_SetWindowChange, 2860). +-define(wxNavigationKeyEvent_IsFromTab, 2861). +-define(wxNavigationKeyEvent_SetFromTab, 2862). +-define(wxNavigationKeyEvent_GetCurrentFocus, 2863). +-define(wxNavigationKeyEvent_SetCurrentFocus, 2864). +-define(wxHelpEvent_GetOrigin, 2865). +-define(wxHelpEvent_GetPosition, 2866). +-define(wxHelpEvent_SetOrigin, 2867). +-define(wxHelpEvent_SetPosition, 2868). +-define(wxContextMenuEvent_GetPosition, 2869). +-define(wxContextMenuEvent_SetPosition, 2870). +-define(wxIdleEvent_CanSend, 2871). +-define(wxIdleEvent_GetMode, 2872). +-define(wxIdleEvent_RequestMore, 2873). +-define(wxIdleEvent_MoreRequested, 2874). +-define(wxIdleEvent_SetMode, 2875). +-define(wxGridEvent_AltDown, 2876). +-define(wxGridEvent_ControlDown, 2877). +-define(wxGridEvent_GetCol, 2878). +-define(wxGridEvent_GetPosition, 2879). +-define(wxGridEvent_GetRow, 2880). +-define(wxGridEvent_MetaDown, 2881). +-define(wxGridEvent_Selecting, 2882). +-define(wxGridEvent_ShiftDown, 2883). +-define(wxNotifyEvent_Allow, 2884). +-define(wxNotifyEvent_IsAllowed, 2885). +-define(wxNotifyEvent_Veto, 2886). +-define(wxSashEvent_GetEdge, 2887). +-define(wxSashEvent_GetDragRect, 2888). +-define(wxSashEvent_GetDragStatus, 2889). +-define(wxListEvent_GetCacheFrom, 2890). +-define(wxListEvent_GetCacheTo, 2891). +-define(wxListEvent_GetKeyCode, 2892). +-define(wxListEvent_GetIndex, 2893). +-define(wxListEvent_GetColumn, 2894). +-define(wxListEvent_GetPoint, 2895). +-define(wxListEvent_GetLabel, 2896). +-define(wxListEvent_GetText, 2897). +-define(wxListEvent_GetImage, 2898). +-define(wxListEvent_GetData, 2899). +-define(wxListEvent_GetMask, 2900). +-define(wxListEvent_GetItem, 2901). +-define(wxListEvent_IsEditCancelled, 2902). +-define(wxDateEvent_GetDate, 2903). +-define(wxCalendarEvent_GetWeekDay, 2904). +-define(wxFileDirPickerEvent_GetPath, 2905). +-define(wxColourPickerEvent_GetColour, 2906). +-define(wxFontPickerEvent_GetFont, 2907). +-define(wxStyledTextEvent_GetPosition, 2908). +-define(wxStyledTextEvent_GetKey, 2909). +-define(wxStyledTextEvent_GetModifiers, 2910). +-define(wxStyledTextEvent_GetModificationType, 2911). +-define(wxStyledTextEvent_GetText, 2912). +-define(wxStyledTextEvent_GetLength, 2913). +-define(wxStyledTextEvent_GetLinesAdded, 2914). +-define(wxStyledTextEvent_GetLine, 2915). +-define(wxStyledTextEvent_GetFoldLevelNow, 2916). +-define(wxStyledTextEvent_GetFoldLevelPrev, 2917). +-define(wxStyledTextEvent_GetMargin, 2918). +-define(wxStyledTextEvent_GetMessage, 2919). +-define(wxStyledTextEvent_GetWParam, 2920). +-define(wxStyledTextEvent_GetLParam, 2921). +-define(wxStyledTextEvent_GetListType, 2922). +-define(wxStyledTextEvent_GetX, 2923). +-define(wxStyledTextEvent_GetY, 2924). +-define(wxStyledTextEvent_GetDragText, 2925). +-define(wxStyledTextEvent_GetDragAllowMove, 2926). +-define(wxStyledTextEvent_GetDragResult, 2927). +-define(wxStyledTextEvent_GetShift, 2928). +-define(wxStyledTextEvent_GetControl, 2929). +-define(wxStyledTextEvent_GetAlt, 2930). +-define(utils_wxGetKeyState, 2931). +-define(utils_wxGetMousePosition, 2932). +-define(utils_wxGetMouseState, 2933). +-define(utils_wxSetDetectableAutoRepeat, 2934). +-define(utils_wxBell, 2935). +-define(utils_wxFindMenuItemId, 2936). +-define(utils_wxGenericFindWindowAtPoint, 2937). +-define(utils_wxFindWindowAtPoint, 2938). +-define(utils_wxBeginBusyCursor, 2939). +-define(utils_wxEndBusyCursor, 2940). +-define(utils_wxIsBusy, 2941). +-define(utils_wxShutdown, 2942). +-define(utils_wxShell, 2943). +-define(utils_wxLaunchDefaultBrowser, 2944). +-define(utils_wxGetEmailAddress, 2945). +-define(utils_wxGetUserId, 2946). +-define(utils_wxGetHomeDir, 2947). +-define(utils_wxNewId, 2948). +-define(utils_wxRegisterId, 2949). +-define(utils_wxGetCurrentId, 2950). +-define(utils_wxGetOsDescription, 2951). +-define(utils_wxIsPlatformLittleEndian, 2952). +-define(utils_wxIsPlatform64Bit, 2953). +-define(gdicmn_wxDisplaySize, 2954). +-define(gdicmn_wxSetCursor, 2955). +-define(wxPrintout_new, 2956). +-define(wxPrintout_destruct, 2957). +-define(wxPrintout_GetDC, 2958). +-define(wxPrintout_GetPageSizeMM, 2959). +-define(wxPrintout_GetPageSizePixels, 2960). +-define(wxPrintout_GetPaperRectPixels, 2961). +-define(wxPrintout_GetPPIPrinter, 2962). +-define(wxPrintout_GetPPIScreen, 2963). +-define(wxPrintout_GetTitle, 2964). +-define(wxPrintout_IsPreview, 2965). +-define(wxPrintout_FitThisSizeToPaper, 2966). +-define(wxPrintout_FitThisSizeToPage, 2967). +-define(wxPrintout_FitThisSizeToPageMargins, 2968). +-define(wxPrintout_MapScreenSizeToPaper, 2969). +-define(wxPrintout_MapScreenSizeToPage, 2970). +-define(wxPrintout_MapScreenSizeToPageMargins, 2971). +-define(wxPrintout_MapScreenSizeToDevice, 2972). +-define(wxPrintout_GetLogicalPaperRect, 2973). +-define(wxPrintout_GetLogicalPageRect, 2974). +-define(wxPrintout_GetLogicalPageMarginsRect, 2975). +-define(wxPrintout_SetLogicalOrigin, 2976). +-define(wxPrintout_OffsetLogicalOrigin, 2977). +-define(wxStyledTextCtrl_new_2, 2978). +-define(wxStyledTextCtrl_new_0, 2979). +-define(wxStyledTextCtrl_destruct, 2980). +-define(wxStyledTextCtrl_Create, 2981). +-define(wxStyledTextCtrl_AddText, 2982). +-define(wxStyledTextCtrl_AddStyledText, 2983). +-define(wxStyledTextCtrl_InsertText, 2984). +-define(wxStyledTextCtrl_ClearAll, 2985). +-define(wxStyledTextCtrl_ClearDocumentStyle, 2986). +-define(wxStyledTextCtrl_GetLength, 2987). +-define(wxStyledTextCtrl_GetCharAt, 2988). +-define(wxStyledTextCtrl_GetCurrentPos, 2989). +-define(wxStyledTextCtrl_GetAnchor, 2990). +-define(wxStyledTextCtrl_GetStyleAt, 2991). +-define(wxStyledTextCtrl_Redo, 2992). +-define(wxStyledTextCtrl_SetUndoCollection, 2993). +-define(wxStyledTextCtrl_SelectAll, 2994). +-define(wxStyledTextCtrl_SetSavePoint, 2995). +-define(wxStyledTextCtrl_GetStyledText, 2996). +-define(wxStyledTextCtrl_CanRedo, 2997). +-define(wxStyledTextCtrl_MarkerLineFromHandle, 2998). +-define(wxStyledTextCtrl_MarkerDeleteHandle, 2999). +-define(wxStyledTextCtrl_GetUndoCollection, 3000). +-define(wxStyledTextCtrl_GetViewWhiteSpace, 3001). +-define(wxStyledTextCtrl_SetViewWhiteSpace, 3002). +-define(wxStyledTextCtrl_PositionFromPoint, 3003). +-define(wxStyledTextCtrl_PositionFromPointClose, 3004). +-define(wxStyledTextCtrl_GotoLine, 3005). +-define(wxStyledTextCtrl_GotoPos, 3006). +-define(wxStyledTextCtrl_SetAnchor, 3007). +-define(wxStyledTextCtrl_GetCurLine, 3008). +-define(wxStyledTextCtrl_GetEndStyled, 3009). +-define(wxStyledTextCtrl_ConvertEOLs, 3010). +-define(wxStyledTextCtrl_GetEOLMode, 3011). +-define(wxStyledTextCtrl_SetEOLMode, 3012). +-define(wxStyledTextCtrl_StartStyling, 3013). +-define(wxStyledTextCtrl_SetStyling, 3014). +-define(wxStyledTextCtrl_GetBufferedDraw, 3015). +-define(wxStyledTextCtrl_SetBufferedDraw, 3016). +-define(wxStyledTextCtrl_SetTabWidth, 3017). +-define(wxStyledTextCtrl_GetTabWidth, 3018). +-define(wxStyledTextCtrl_SetCodePage, 3019). +-define(wxStyledTextCtrl_MarkerDefine, 3020). +-define(wxStyledTextCtrl_MarkerSetForeground, 3021). +-define(wxStyledTextCtrl_MarkerSetBackground, 3022). +-define(wxStyledTextCtrl_MarkerAdd, 3023). +-define(wxStyledTextCtrl_MarkerDelete, 3024). +-define(wxStyledTextCtrl_MarkerDeleteAll, 3025). +-define(wxStyledTextCtrl_MarkerGet, 3026). +-define(wxStyledTextCtrl_MarkerNext, 3027). +-define(wxStyledTextCtrl_MarkerPrevious, 3028). +-define(wxStyledTextCtrl_MarkerDefineBitmap, 3029). +-define(wxStyledTextCtrl_MarkerAddSet, 3030). +-define(wxStyledTextCtrl_MarkerSetAlpha, 3031). +-define(wxStyledTextCtrl_SetMarginType, 3032). +-define(wxStyledTextCtrl_GetMarginType, 3033). +-define(wxStyledTextCtrl_SetMarginWidth, 3034). +-define(wxStyledTextCtrl_GetMarginWidth, 3035). +-define(wxStyledTextCtrl_SetMarginMask, 3036). +-define(wxStyledTextCtrl_GetMarginMask, 3037). +-define(wxStyledTextCtrl_SetMarginSensitive, 3038). +-define(wxStyledTextCtrl_GetMarginSensitive, 3039). +-define(wxStyledTextCtrl_StyleClearAll, 3040). +-define(wxStyledTextCtrl_StyleSetForeground, 3041). +-define(wxStyledTextCtrl_StyleSetBackground, 3042). +-define(wxStyledTextCtrl_StyleSetBold, 3043). +-define(wxStyledTextCtrl_StyleSetItalic, 3044). +-define(wxStyledTextCtrl_StyleSetSize, 3045). +-define(wxStyledTextCtrl_StyleSetFaceName, 3046). +-define(wxStyledTextCtrl_StyleSetEOLFilled, 3047). +-define(wxStyledTextCtrl_StyleResetDefault, 3048). +-define(wxStyledTextCtrl_StyleSetUnderline, 3049). +-define(wxStyledTextCtrl_StyleSetCase, 3050). +-define(wxStyledTextCtrl_StyleSetHotSpot, 3051). +-define(wxStyledTextCtrl_SetSelForeground, 3052). +-define(wxStyledTextCtrl_SetSelBackground, 3053). +-define(wxStyledTextCtrl_GetSelAlpha, 3054). +-define(wxStyledTextCtrl_SetSelAlpha, 3055). +-define(wxStyledTextCtrl_SetCaretForeground, 3056). +-define(wxStyledTextCtrl_CmdKeyAssign, 3057). +-define(wxStyledTextCtrl_CmdKeyClear, 3058). +-define(wxStyledTextCtrl_CmdKeyClearAll, 3059). +-define(wxStyledTextCtrl_SetStyleBytes, 3060). +-define(wxStyledTextCtrl_StyleSetVisible, 3061). +-define(wxStyledTextCtrl_GetCaretPeriod, 3062). +-define(wxStyledTextCtrl_SetCaretPeriod, 3063). +-define(wxStyledTextCtrl_SetWordChars, 3064). +-define(wxStyledTextCtrl_BeginUndoAction, 3065). +-define(wxStyledTextCtrl_EndUndoAction, 3066). +-define(wxStyledTextCtrl_IndicatorSetStyle, 3067). +-define(wxStyledTextCtrl_IndicatorGetStyle, 3068). +-define(wxStyledTextCtrl_IndicatorSetForeground, 3069). +-define(wxStyledTextCtrl_IndicatorGetForeground, 3070). +-define(wxStyledTextCtrl_SetWhitespaceForeground, 3071). +-define(wxStyledTextCtrl_SetWhitespaceBackground, 3072). +-define(wxStyledTextCtrl_GetStyleBits, 3073). +-define(wxStyledTextCtrl_SetLineState, 3074). +-define(wxStyledTextCtrl_GetLineState, 3075). +-define(wxStyledTextCtrl_GetMaxLineState, 3076). +-define(wxStyledTextCtrl_GetCaretLineVisible, 3077). +-define(wxStyledTextCtrl_SetCaretLineVisible, 3078). +-define(wxStyledTextCtrl_GetCaretLineBackground, 3079). +-define(wxStyledTextCtrl_SetCaretLineBackground, 3080). +-define(wxStyledTextCtrl_AutoCompShow, 3081). +-define(wxStyledTextCtrl_AutoCompCancel, 3082). +-define(wxStyledTextCtrl_AutoCompActive, 3083). +-define(wxStyledTextCtrl_AutoCompPosStart, 3084). +-define(wxStyledTextCtrl_AutoCompComplete, 3085). +-define(wxStyledTextCtrl_AutoCompStops, 3086). +-define(wxStyledTextCtrl_AutoCompSetSeparator, 3087). +-define(wxStyledTextCtrl_AutoCompGetSeparator, 3088). +-define(wxStyledTextCtrl_AutoCompSelect, 3089). +-define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3090). +-define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3091). +-define(wxStyledTextCtrl_AutoCompSetFillUps, 3092). +-define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3093). +-define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3094). +-define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3095). +-define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3096). +-define(wxStyledTextCtrl_UserListShow, 3097). +-define(wxStyledTextCtrl_AutoCompSetAutoHide, 3098). +-define(wxStyledTextCtrl_AutoCompGetAutoHide, 3099). +-define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3100). +-define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3101). +-define(wxStyledTextCtrl_RegisterImage, 3102). +-define(wxStyledTextCtrl_ClearRegisteredImages, 3103). +-define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3104). +-define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3105). +-define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3106). +-define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3107). +-define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3108). +-define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3109). +-define(wxStyledTextCtrl_SetIndent, 3110). +-define(wxStyledTextCtrl_GetIndent, 3111). +-define(wxStyledTextCtrl_SetUseTabs, 3112). +-define(wxStyledTextCtrl_GetUseTabs, 3113). +-define(wxStyledTextCtrl_SetLineIndentation, 3114). +-define(wxStyledTextCtrl_GetLineIndentation, 3115). +-define(wxStyledTextCtrl_GetLineIndentPosition, 3116). +-define(wxStyledTextCtrl_GetColumn, 3117). +-define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3118). +-define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3119). +-define(wxStyledTextCtrl_SetIndentationGuides, 3120). +-define(wxStyledTextCtrl_GetIndentationGuides, 3121). +-define(wxStyledTextCtrl_SetHighlightGuide, 3122). +-define(wxStyledTextCtrl_GetHighlightGuide, 3123). +-define(wxStyledTextCtrl_GetLineEndPosition, 3124). +-define(wxStyledTextCtrl_GetCodePage, 3125). +-define(wxStyledTextCtrl_GetCaretForeground, 3126). +-define(wxStyledTextCtrl_GetReadOnly, 3127). +-define(wxStyledTextCtrl_SetCurrentPos, 3128). +-define(wxStyledTextCtrl_SetSelectionStart, 3129). +-define(wxStyledTextCtrl_GetSelectionStart, 3130). +-define(wxStyledTextCtrl_SetSelectionEnd, 3131). +-define(wxStyledTextCtrl_GetSelectionEnd, 3132). +-define(wxStyledTextCtrl_SetPrintMagnification, 3133). +-define(wxStyledTextCtrl_GetPrintMagnification, 3134). +-define(wxStyledTextCtrl_SetPrintColourMode, 3135). +-define(wxStyledTextCtrl_GetPrintColourMode, 3136). +-define(wxStyledTextCtrl_FindText, 3137). +-define(wxStyledTextCtrl_FormatRange, 3138). +-define(wxStyledTextCtrl_GetFirstVisibleLine, 3139). +-define(wxStyledTextCtrl_GetLine, 3140). +-define(wxStyledTextCtrl_GetLineCount, 3141). +-define(wxStyledTextCtrl_SetMarginLeft, 3142). +-define(wxStyledTextCtrl_GetMarginLeft, 3143). +-define(wxStyledTextCtrl_SetMarginRight, 3144). +-define(wxStyledTextCtrl_GetMarginRight, 3145). +-define(wxStyledTextCtrl_GetModify, 3146). +-define(wxStyledTextCtrl_SetSelection, 3147). +-define(wxStyledTextCtrl_GetSelectedText, 3148). +-define(wxStyledTextCtrl_GetTextRange, 3149). +-define(wxStyledTextCtrl_HideSelection, 3150). +-define(wxStyledTextCtrl_LineFromPosition, 3151). +-define(wxStyledTextCtrl_PositionFromLine, 3152). +-define(wxStyledTextCtrl_LineScroll, 3153). +-define(wxStyledTextCtrl_EnsureCaretVisible, 3154). +-define(wxStyledTextCtrl_ReplaceSelection, 3155). +-define(wxStyledTextCtrl_SetReadOnly, 3156). +-define(wxStyledTextCtrl_CanPaste, 3157). +-define(wxStyledTextCtrl_CanUndo, 3158). +-define(wxStyledTextCtrl_EmptyUndoBuffer, 3159). +-define(wxStyledTextCtrl_Undo, 3160). +-define(wxStyledTextCtrl_Cut, 3161). +-define(wxStyledTextCtrl_Copy, 3162). +-define(wxStyledTextCtrl_Paste, 3163). +-define(wxStyledTextCtrl_Clear, 3164). +-define(wxStyledTextCtrl_SetText, 3165). +-define(wxStyledTextCtrl_GetText, 3166). +-define(wxStyledTextCtrl_GetTextLength, 3167). +-define(wxStyledTextCtrl_GetOvertype, 3168). +-define(wxStyledTextCtrl_SetCaretWidth, 3169). +-define(wxStyledTextCtrl_GetCaretWidth, 3170). +-define(wxStyledTextCtrl_SetTargetStart, 3171). +-define(wxStyledTextCtrl_GetTargetStart, 3172). +-define(wxStyledTextCtrl_SetTargetEnd, 3173). +-define(wxStyledTextCtrl_GetTargetEnd, 3174). +-define(wxStyledTextCtrl_ReplaceTarget, 3175). +-define(wxStyledTextCtrl_SearchInTarget, 3176). +-define(wxStyledTextCtrl_SetSearchFlags, 3177). +-define(wxStyledTextCtrl_GetSearchFlags, 3178). +-define(wxStyledTextCtrl_CallTipShow, 3179). +-define(wxStyledTextCtrl_CallTipCancel, 3180). +-define(wxStyledTextCtrl_CallTipActive, 3181). +-define(wxStyledTextCtrl_CallTipPosAtStart, 3182). +-define(wxStyledTextCtrl_CallTipSetHighlight, 3183). +-define(wxStyledTextCtrl_CallTipSetBackground, 3184). +-define(wxStyledTextCtrl_CallTipSetForeground, 3185). +-define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3186). +-define(wxStyledTextCtrl_CallTipUseStyle, 3187). +-define(wxStyledTextCtrl_VisibleFromDocLine, 3188). +-define(wxStyledTextCtrl_DocLineFromVisible, 3189). +-define(wxStyledTextCtrl_WrapCount, 3190). +-define(wxStyledTextCtrl_SetFoldLevel, 3191). +-define(wxStyledTextCtrl_GetFoldLevel, 3192). +-define(wxStyledTextCtrl_GetLastChild, 3193). +-define(wxStyledTextCtrl_GetFoldParent, 3194). +-define(wxStyledTextCtrl_ShowLines, 3195). +-define(wxStyledTextCtrl_HideLines, 3196). +-define(wxStyledTextCtrl_GetLineVisible, 3197). +-define(wxStyledTextCtrl_SetFoldExpanded, 3198). +-define(wxStyledTextCtrl_GetFoldExpanded, 3199). +-define(wxStyledTextCtrl_ToggleFold, 3200). +-define(wxStyledTextCtrl_EnsureVisible, 3201). +-define(wxStyledTextCtrl_SetFoldFlags, 3202). +-define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3203). +-define(wxStyledTextCtrl_SetTabIndents, 3204). +-define(wxStyledTextCtrl_GetTabIndents, 3205). +-define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3206). +-define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3207). +-define(wxStyledTextCtrl_SetMouseDwellTime, 3208). +-define(wxStyledTextCtrl_GetMouseDwellTime, 3209). +-define(wxStyledTextCtrl_WordStartPosition, 3210). +-define(wxStyledTextCtrl_WordEndPosition, 3211). +-define(wxStyledTextCtrl_SetWrapMode, 3212). +-define(wxStyledTextCtrl_GetWrapMode, 3213). +-define(wxStyledTextCtrl_SetWrapVisualFlags, 3214). +-define(wxStyledTextCtrl_GetWrapVisualFlags, 3215). +-define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3216). +-define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3217). +-define(wxStyledTextCtrl_SetWrapStartIndent, 3218). +-define(wxStyledTextCtrl_GetWrapStartIndent, 3219). +-define(wxStyledTextCtrl_SetLayoutCache, 3220). +-define(wxStyledTextCtrl_GetLayoutCache, 3221). +-define(wxStyledTextCtrl_SetScrollWidth, 3222). +-define(wxStyledTextCtrl_GetScrollWidth, 3223). +-define(wxStyledTextCtrl_TextWidth, 3224). +-define(wxStyledTextCtrl_GetEndAtLastLine, 3225). +-define(wxStyledTextCtrl_TextHeight, 3226). +-define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3227). +-define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3228). +-define(wxStyledTextCtrl_AppendText, 3229). +-define(wxStyledTextCtrl_GetTwoPhaseDraw, 3230). +-define(wxStyledTextCtrl_SetTwoPhaseDraw, 3231). +-define(wxStyledTextCtrl_TargetFromSelection, 3232). +-define(wxStyledTextCtrl_LinesJoin, 3233). +-define(wxStyledTextCtrl_LinesSplit, 3234). +-define(wxStyledTextCtrl_SetFoldMarginColour, 3235). +-define(wxStyledTextCtrl_SetFoldMarginHiColour, 3236). +-define(wxStyledTextCtrl_LineDown, 3237). +-define(wxStyledTextCtrl_LineDownExtend, 3238). +-define(wxStyledTextCtrl_LineUp, 3239). +-define(wxStyledTextCtrl_LineUpExtend, 3240). +-define(wxStyledTextCtrl_CharLeft, 3241). +-define(wxStyledTextCtrl_CharLeftExtend, 3242). +-define(wxStyledTextCtrl_CharRight, 3243). +-define(wxStyledTextCtrl_CharRightExtend, 3244). +-define(wxStyledTextCtrl_WordLeft, 3245). +-define(wxStyledTextCtrl_WordLeftExtend, 3246). +-define(wxStyledTextCtrl_WordRight, 3247). +-define(wxStyledTextCtrl_WordRightExtend, 3248). +-define(wxStyledTextCtrl_Home, 3249). +-define(wxStyledTextCtrl_HomeExtend, 3250). +-define(wxStyledTextCtrl_LineEnd, 3251). +-define(wxStyledTextCtrl_LineEndExtend, 3252). +-define(wxStyledTextCtrl_DocumentStart, 3253). +-define(wxStyledTextCtrl_DocumentStartExtend, 3254). +-define(wxStyledTextCtrl_DocumentEnd, 3255). +-define(wxStyledTextCtrl_DocumentEndExtend, 3256). +-define(wxStyledTextCtrl_PageUp, 3257). +-define(wxStyledTextCtrl_PageUpExtend, 3258). +-define(wxStyledTextCtrl_PageDown, 3259). +-define(wxStyledTextCtrl_PageDownExtend, 3260). +-define(wxStyledTextCtrl_EditToggleOvertype, 3261). +-define(wxStyledTextCtrl_Cancel, 3262). +-define(wxStyledTextCtrl_DeleteBack, 3263). +-define(wxStyledTextCtrl_Tab, 3264). +-define(wxStyledTextCtrl_BackTab, 3265). +-define(wxStyledTextCtrl_NewLine, 3266). +-define(wxStyledTextCtrl_FormFeed, 3267). +-define(wxStyledTextCtrl_VCHome, 3268). +-define(wxStyledTextCtrl_VCHomeExtend, 3269). +-define(wxStyledTextCtrl_ZoomIn, 3270). +-define(wxStyledTextCtrl_ZoomOut, 3271). +-define(wxStyledTextCtrl_DelWordLeft, 3272). +-define(wxStyledTextCtrl_DelWordRight, 3273). +-define(wxStyledTextCtrl_LineCut, 3274). +-define(wxStyledTextCtrl_LineDelete, 3275). +-define(wxStyledTextCtrl_LineTranspose, 3276). +-define(wxStyledTextCtrl_LineDuplicate, 3277). +-define(wxStyledTextCtrl_LowerCase, 3278). +-define(wxStyledTextCtrl_UpperCase, 3279). +-define(wxStyledTextCtrl_LineScrollDown, 3280). +-define(wxStyledTextCtrl_LineScrollUp, 3281). +-define(wxStyledTextCtrl_DeleteBackNotLine, 3282). +-define(wxStyledTextCtrl_HomeDisplay, 3283). +-define(wxStyledTextCtrl_HomeDisplayExtend, 3284). +-define(wxStyledTextCtrl_LineEndDisplay, 3285). +-define(wxStyledTextCtrl_LineEndDisplayExtend, 3286). +-define(wxStyledTextCtrl_HomeWrapExtend, 3287). +-define(wxStyledTextCtrl_LineEndWrap, 3288). +-define(wxStyledTextCtrl_LineEndWrapExtend, 3289). +-define(wxStyledTextCtrl_VCHomeWrap, 3290). +-define(wxStyledTextCtrl_VCHomeWrapExtend, 3291). +-define(wxStyledTextCtrl_LineCopy, 3292). +-define(wxStyledTextCtrl_MoveCaretInsideView, 3293). +-define(wxStyledTextCtrl_LineLength, 3294). +-define(wxStyledTextCtrl_BraceHighlight, 3295). +-define(wxStyledTextCtrl_BraceBadLight, 3296). +-define(wxStyledTextCtrl_BraceMatch, 3297). +-define(wxStyledTextCtrl_GetViewEOL, 3298). +-define(wxStyledTextCtrl_SetViewEOL, 3299). +-define(wxStyledTextCtrl_SetModEventMask, 3300). +-define(wxStyledTextCtrl_GetEdgeColumn, 3301). +-define(wxStyledTextCtrl_SetEdgeColumn, 3302). +-define(wxStyledTextCtrl_SetEdgeMode, 3303). +-define(wxStyledTextCtrl_GetEdgeMode, 3304). +-define(wxStyledTextCtrl_GetEdgeColour, 3305). +-define(wxStyledTextCtrl_SetEdgeColour, 3306). +-define(wxStyledTextCtrl_SearchAnchor, 3307). +-define(wxStyledTextCtrl_SearchNext, 3308). +-define(wxStyledTextCtrl_SearchPrev, 3309). +-define(wxStyledTextCtrl_LinesOnScreen, 3310). +-define(wxStyledTextCtrl_UsePopUp, 3311). +-define(wxStyledTextCtrl_SelectionIsRectangle, 3312). +-define(wxStyledTextCtrl_SetZoom, 3313). +-define(wxStyledTextCtrl_GetZoom, 3314). +-define(wxStyledTextCtrl_GetModEventMask, 3315). +-define(wxStyledTextCtrl_SetSTCFocus, 3316). +-define(wxStyledTextCtrl_GetSTCFocus, 3317). +-define(wxStyledTextCtrl_SetStatus, 3318). +-define(wxStyledTextCtrl_GetStatus, 3319). +-define(wxStyledTextCtrl_SetMouseDownCaptures, 3320). +-define(wxStyledTextCtrl_GetMouseDownCaptures, 3321). +-define(wxStyledTextCtrl_SetSTCCursor, 3322). +-define(wxStyledTextCtrl_GetSTCCursor, 3323). +-define(wxStyledTextCtrl_SetControlCharSymbol, 3324). +-define(wxStyledTextCtrl_GetControlCharSymbol, 3325). +-define(wxStyledTextCtrl_WordPartLeft, 3326). +-define(wxStyledTextCtrl_WordPartLeftExtend, 3327). +-define(wxStyledTextCtrl_WordPartRight, 3328). +-define(wxStyledTextCtrl_WordPartRightExtend, 3329). +-define(wxStyledTextCtrl_SetVisiblePolicy, 3330). +-define(wxStyledTextCtrl_DelLineLeft, 3331). +-define(wxStyledTextCtrl_DelLineRight, 3332). +-define(wxStyledTextCtrl_GetXOffset, 3333). +-define(wxStyledTextCtrl_ChooseCaretX, 3334). +-define(wxStyledTextCtrl_SetXCaretPolicy, 3335). +-define(wxStyledTextCtrl_SetYCaretPolicy, 3336). +-define(wxStyledTextCtrl_GetPrintWrapMode, 3337). +-define(wxStyledTextCtrl_SetHotspotActiveForeground, 3338). +-define(wxStyledTextCtrl_SetHotspotActiveBackground, 3339). +-define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3340). +-define(wxStyledTextCtrl_SetHotspotSingleLine, 3341). +-define(wxStyledTextCtrl_ParaDownExtend, 3342). +-define(wxStyledTextCtrl_ParaUp, 3343). +-define(wxStyledTextCtrl_ParaUpExtend, 3344). +-define(wxStyledTextCtrl_PositionBefore, 3345). +-define(wxStyledTextCtrl_PositionAfter, 3346). +-define(wxStyledTextCtrl_CopyRange, 3347). +-define(wxStyledTextCtrl_CopyText, 3348). +-define(wxStyledTextCtrl_SetSelectionMode, 3349). +-define(wxStyledTextCtrl_GetSelectionMode, 3350). +-define(wxStyledTextCtrl_LineDownRectExtend, 3351). +-define(wxStyledTextCtrl_LineUpRectExtend, 3352). +-define(wxStyledTextCtrl_CharLeftRectExtend, 3353). +-define(wxStyledTextCtrl_CharRightRectExtend, 3354). +-define(wxStyledTextCtrl_HomeRectExtend, 3355). +-define(wxStyledTextCtrl_VCHomeRectExtend, 3356). +-define(wxStyledTextCtrl_LineEndRectExtend, 3357). +-define(wxStyledTextCtrl_PageUpRectExtend, 3358). +-define(wxStyledTextCtrl_PageDownRectExtend, 3359). +-define(wxStyledTextCtrl_StutteredPageUp, 3360). +-define(wxStyledTextCtrl_StutteredPageUpExtend, 3361). +-define(wxStyledTextCtrl_StutteredPageDown, 3362). +-define(wxStyledTextCtrl_StutteredPageDownExtend, 3363). +-define(wxStyledTextCtrl_WordLeftEnd, 3364). +-define(wxStyledTextCtrl_WordLeftEndExtend, 3365). +-define(wxStyledTextCtrl_WordRightEnd, 3366). +-define(wxStyledTextCtrl_WordRightEndExtend, 3367). +-define(wxStyledTextCtrl_SetWhitespaceChars, 3368). +-define(wxStyledTextCtrl_SetCharsDefault, 3369). +-define(wxStyledTextCtrl_AutoCompGetCurrent, 3370). +-define(wxStyledTextCtrl_Allocate, 3371). +-define(wxStyledTextCtrl_FindColumn, 3372). +-define(wxStyledTextCtrl_GetCaretSticky, 3373). +-define(wxStyledTextCtrl_SetCaretSticky, 3374). +-define(wxStyledTextCtrl_ToggleCaretSticky, 3375). +-define(wxStyledTextCtrl_SetPasteConvertEndings, 3376). +-define(wxStyledTextCtrl_GetPasteConvertEndings, 3377). +-define(wxStyledTextCtrl_SelectionDuplicate, 3378). +-define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3379). +-define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3380). +-define(wxStyledTextCtrl_StartRecord, 3381). +-define(wxStyledTextCtrl_StopRecord, 3382). +-define(wxStyledTextCtrl_SetLexer, 3383). +-define(wxStyledTextCtrl_GetLexer, 3384). +-define(wxStyledTextCtrl_Colourise, 3385). +-define(wxStyledTextCtrl_SetProperty, 3386). +-define(wxStyledTextCtrl_SetKeyWords, 3387). +-define(wxStyledTextCtrl_SetLexerLanguage, 3388). +-define(wxStyledTextCtrl_GetProperty, 3389). +-define(wxStyledTextCtrl_GetStyleBitsNeeded, 3390). +-define(wxStyledTextCtrl_GetCurrentLine, 3391). +-define(wxStyledTextCtrl_StyleSetSpec, 3392). +-define(wxStyledTextCtrl_StyleSetFont, 3393). +-define(wxStyledTextCtrl_StyleSetFontAttr, 3394). +-define(wxStyledTextCtrl_StyleSetCharacterSet, 3395). +-define(wxStyledTextCtrl_StyleSetFontEncoding, 3396). +-define(wxStyledTextCtrl_CmdKeyExecute, 3397). +-define(wxStyledTextCtrl_SetMargins, 3398). +-define(wxStyledTextCtrl_GetSelection, 3399). +-define(wxStyledTextCtrl_PointFromPosition, 3400). +-define(wxStyledTextCtrl_ScrollToLine, 3401). +-define(wxStyledTextCtrl_ScrollToColumn, 3402). +-define(wxStyledTextCtrl_SetVScrollBar, 3403). +-define(wxStyledTextCtrl_SetHScrollBar, 3404). +-define(wxStyledTextCtrl_GetLastKeydownProcessed, 3405). +-define(wxStyledTextCtrl_SetLastKeydownProcessed, 3406). +-define(wxStyledTextCtrl_SaveFile, 3407). +-define(wxStyledTextCtrl_LoadFile, 3408). +-define(wxStyledTextCtrl_DoDragOver, 3409). +-define(wxStyledTextCtrl_DoDropText, 3410). +-define(wxStyledTextCtrl_GetUseAntiAliasing, 3411). +-define(wxStyledTextCtrl_AddTextRaw, 3412). +-define(wxStyledTextCtrl_InsertTextRaw, 3413). +-define(wxStyledTextCtrl_GetCurLineRaw, 3414). +-define(wxStyledTextCtrl_GetLineRaw, 3415). +-define(wxStyledTextCtrl_GetSelectedTextRaw, 3416). +-define(wxStyledTextCtrl_GetTextRangeRaw, 3417). +-define(wxStyledTextCtrl_SetTextRaw, 3418). +-define(wxStyledTextCtrl_GetTextRaw, 3419). +-define(wxStyledTextCtrl_AppendTextRaw, 3420). +-define(wxArtProvider_GetBitmap, 3421). +-define(wxArtProvider_GetIcon, 3422). +-define(wxTreeEvent_GetKeyCode, 3423). +-define(wxTreeEvent_GetItem, 3424). +-define(wxTreeEvent_GetKeyEvent, 3425). +-define(wxTreeEvent_GetLabel, 3426). +-define(wxTreeEvent_GetOldItem, 3427). +-define(wxTreeEvent_GetPoint, 3428). +-define(wxTreeEvent_IsEditCancelled, 3429). +-define(wxTreeEvent_SetToolTip, 3430). +-define(wxNotebookEvent_GetOldSelection, 3431). +-define(wxNotebookEvent_GetSelection, 3432). +-define(wxNotebookEvent_SetOldSelection, 3433). +-define(wxNotebookEvent_SetSelection, 3434). +-define(wxFileDataObject_new, 3435). +-define(wxFileDataObject_AddFile, 3436). +-define(wxFileDataObject_GetFilenames, 3437). +-define(wxFileDataObject_destroy, 3438). +-define(wxTextDataObject_new, 3439). +-define(wxTextDataObject_GetTextLength, 3440). +-define(wxTextDataObject_GetText, 3441). +-define(wxTextDataObject_SetText, 3442). +-define(wxTextDataObject_destroy, 3443). +-define(wxBitmapDataObject_new_1_1, 3444). +-define(wxBitmapDataObject_new_1_0, 3445). +-define(wxBitmapDataObject_GetBitmap, 3446). +-define(wxBitmapDataObject_SetBitmap, 3447). +-define(wxBitmapDataObject_destroy, 3448). +-define(wxClipboard_new, 3450). +-define(wxClipboard_destruct, 3451). +-define(wxClipboard_AddData, 3452). +-define(wxClipboard_Clear, 3453). +-define(wxClipboard_Close, 3454). +-define(wxClipboard_Flush, 3455). +-define(wxClipboard_GetData, 3456). +-define(wxClipboard_IsOpened, 3457). +-define(wxClipboard_Open, 3458). +-define(wxClipboard_SetData, 3459). +-define(wxClipboard_UsePrimarySelection, 3461). +-define(wxClipboard_IsSupported, 3462). +-define(wxClipboard_Get, 3463). +-define(wxSpinEvent_GetPosition, 3464). +-define(wxSpinEvent_SetPosition, 3465). +-define(wxSplitterWindow_new_0, 3466). +-define(wxSplitterWindow_new_2, 3467). +-define(wxSplitterWindow_destruct, 3468). +-define(wxSplitterWindow_Create, 3469). +-define(wxSplitterWindow_GetMinimumPaneSize, 3470). +-define(wxSplitterWindow_GetSashGravity, 3471). +-define(wxSplitterWindow_GetSashPosition, 3472). +-define(wxSplitterWindow_GetSplitMode, 3473). +-define(wxSplitterWindow_GetWindow1, 3474). +-define(wxSplitterWindow_GetWindow2, 3475). +-define(wxSplitterWindow_Initialize, 3476). +-define(wxSplitterWindow_IsSplit, 3477). +-define(wxSplitterWindow_ReplaceWindow, 3478). +-define(wxSplitterWindow_SetSashGravity, 3479). +-define(wxSplitterWindow_SetSashPosition, 3480). +-define(wxSplitterWindow_SetSashSize, 3481). +-define(wxSplitterWindow_SetMinimumPaneSize, 3482). +-define(wxSplitterWindow_SetSplitMode, 3483). +-define(wxSplitterWindow_SplitHorizontally, 3484). +-define(wxSplitterWindow_SplitVertically, 3485). +-define(wxSplitterWindow_Unsplit, 3486). +-define(wxSplitterWindow_UpdateSize, 3487). +-define(wxSplitterEvent_GetSashPosition, 3488). +-define(wxSplitterEvent_GetX, 3489). +-define(wxSplitterEvent_GetY, 3490). +-define(wxSplitterEvent_GetWindowBeingRemoved, 3491). +-define(wxSplitterEvent_SetSashPosition, 3492). +-define(wxHtmlWindow_new_0, 3493). +-define(wxHtmlWindow_new_2, 3494). +-define(wxHtmlWindow_AppendToPage, 3495). +-define(wxHtmlWindow_GetOpenedAnchor, 3496). +-define(wxHtmlWindow_GetOpenedPage, 3497). +-define(wxHtmlWindow_GetOpenedPageTitle, 3498). +-define(wxHtmlWindow_GetRelatedFrame, 3499). +-define(wxHtmlWindow_HistoryBack, 3500). +-define(wxHtmlWindow_HistoryCanBack, 3501). +-define(wxHtmlWindow_HistoryCanForward, 3502). +-define(wxHtmlWindow_HistoryClear, 3503). +-define(wxHtmlWindow_HistoryForward, 3504). +-define(wxHtmlWindow_LoadFile, 3505). +-define(wxHtmlWindow_LoadPage, 3506). +-define(wxHtmlWindow_SelectAll, 3507). +-define(wxHtmlWindow_SelectionToText, 3508). +-define(wxHtmlWindow_SelectLine, 3509). +-define(wxHtmlWindow_SelectWord, 3510). +-define(wxHtmlWindow_SetBorders, 3511). +-define(wxHtmlWindow_SetFonts, 3512). +-define(wxHtmlWindow_SetPage, 3513). +-define(wxHtmlWindow_SetRelatedFrame, 3514). +-define(wxHtmlWindow_SetRelatedStatusBar, 3515). +-define(wxHtmlWindow_ToText, 3516). +-define(wxHtmlWindow_destroy, 3517). +-define(wxHtmlLinkEvent_GetLinkInfo, 3518). +-define(wxSystemSettings_GetColour, 3519). +-define(wxSystemSettings_GetFont, 3520). +-define(wxSystemSettings_GetMetric, 3521). +-define(wxSystemSettings_GetScreenType, 3522). +-define(wxSystemOptions_GetOption, 3523). +-define(wxSystemOptions_GetOptionInt, 3524). +-define(wxSystemOptions_HasOption, 3525). +-define(wxSystemOptions_IsFalse, 3526). +-define(wxSystemOptions_SetOption_2_1, 3527). +-define(wxSystemOptions_SetOption_2_0, 3528). +-define(wxAuiNotebookEvent_SetSelection, 3529). +-define(wxAuiNotebookEvent_GetSelection, 3530). +-define(wxAuiNotebookEvent_SetOldSelection, 3531). +-define(wxAuiNotebookEvent_GetOldSelection, 3532). +-define(wxAuiNotebookEvent_SetDragSource, 3533). +-define(wxAuiNotebookEvent_GetDragSource, 3534). +-define(wxAuiManagerEvent_SetManager, 3535). +-define(wxAuiManagerEvent_GetManager, 3536). +-define(wxAuiManagerEvent_SetPane, 3537). +-define(wxAuiManagerEvent_GetPane, 3538). +-define(wxAuiManagerEvent_SetButton, 3539). +-define(wxAuiManagerEvent_GetButton, 3540). +-define(wxAuiManagerEvent_SetDC, 3541). +-define(wxAuiManagerEvent_GetDC, 3542). +-define(wxAuiManagerEvent_Veto, 3543). +-define(wxAuiManagerEvent_GetVeto, 3544). +-define(wxAuiManagerEvent_SetCanVeto, 3545). +-define(wxAuiManagerEvent_CanVeto, 3546). +-define(wxLogNull_new, 3547). +-define(wxLogNull_destroy, 3548). +-define(wxTaskBarIcon_new, 3549). +-define(wxTaskBarIcon_destruct, 3550). +-define(wxTaskBarIcon_PopupMenu, 3551). +-define(wxTaskBarIcon_RemoveIcon, 3552). +-define(wxTaskBarIcon_SetIcon, 3553). +-define(wxLocale_new_0, 3554). +-define(wxLocale_new_2, 3556). +-define(wxLocale_destruct, 3557). +-define(wxLocale_Init, 3559). +-define(wxLocale_AddCatalog_1, 3560). +-define(wxLocale_AddCatalog_3, 3561). +-define(wxLocale_AddCatalogLookupPathPrefix, 3562). +-define(wxLocale_GetCanonicalName, 3563). +-define(wxLocale_GetLanguage, 3564). +-define(wxLocale_GetLanguageName, 3565). +-define(wxLocale_GetLocale, 3566). +-define(wxLocale_GetName, 3567). +-define(wxLocale_GetString_2, 3568). +-define(wxLocale_GetString_4, 3569). +-define(wxLocale_GetHeaderValue, 3570). +-define(wxLocale_GetSysName, 3571). +-define(wxLocale_GetSystemEncoding, 3572). +-define(wxLocale_GetSystemEncodingName, 3573). +-define(wxLocale_GetSystemLanguage, 3574). +-define(wxLocale_IsLoaded, 3575). +-define(wxLocale_IsOk, 3576). +-define(wxActivateEvent_GetActive, 3577). +-define(wxPopupWindow_new_2, 3579). +-define(wxPopupWindow_new_0, 3580). +-define(wxPopupWindow_destruct, 3582). +-define(wxPopupWindow_Create, 3583). +-define(wxPopupWindow_Position, 3584). +-define(wxPopupTransientWindow_new_0, 3585). +-define(wxPopupTransientWindow_new_2, 3586). +-define(wxPopupTransientWindow_destruct, 3587). +-define(wxPopupTransientWindow_Popup, 3588). +-define(wxPopupTransientWindow_Dismiss, 3589). +-define(wxOverlay_new, 3590). +-define(wxOverlay_destruct, 3591). +-define(wxOverlay_Reset, 3592). +-define(wxDCOverlay_new_6, 3593). +-define(wxDCOverlay_new_2, 3594). +-define(wxDCOverlay_destruct, 3595). +-define(wxDCOverlay_Clear, 3596). +-define(wxDropFilesEvent_GetPosition, 3597). +-define(wxDropFilesEvent_GetNumberOfFiles, 3598). +-define(wxDropFilesEvent_GetFiles, 3599). diff --git a/lib/wx/test/wx_opengl_SUITE.erl b/lib/wx/test/wx_opengl_SUITE.erl index 643a0df6a3..3de9209fae 100644 --- a/lib/wx/test/wx_opengl_SUITE.erl +++ b/lib/wx/test/wx_opengl_SUITE.erl @@ -111,6 +111,8 @@ canvas(Config) -> ?m(false, wx:is_null(wxGLCanvas:getContext(Canvas))), ?m({'EXIT', {{error, no_gl_context,_},_}}, gl:getString(?GL_VENDOR)), + gl:viewport(0,0,50,50), %% Show cause an error report + ?m(ok, wxGLCanvas:setCurrent(Canvas)), io:format("Vendor: ~s~n", [gl:getString(?GL_VENDOR)]), diff --git a/otp_versions.table b/otp_versions.table index ee59f4729f..793f7bcd28 100644 --- a/otp_versions.table +++ b/otp_versions.table @@ -1,3 +1,5 @@ +OTP-19.1.6 : erts-8.1.1 # asn1-4.0.4 common_test-1.12.3 compiler-7.0.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7.1 debugger-4.2.1 dialyzer-3.0.2 diameter-1.12.1 edoc-0.8 eldap-1.2.2 erl_docgen-0.6 erl_interface-3.9.1 et-1.6 eunit-2.3.1 gs-1.6.2 hipe-3.15.2 ic-4.4.2 inets-6.3.3 jinterface-1.7.1 kernel-5.1 megaco-3.18.1 mnesia-4.14.1 observer-2.2.2 odbc-2.11.3 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.3 percept-0.9 public_key-1.2 reltool-0.7.2 runtime_tools-1.10.1 sasl-3.0.1 snmp-5.2.4 ssh-4.3.6 ssl-8.0.3 stdlib-3.1 syntax_tools-2.1 tools-2.8.6 typer-0.9.11 wx-1.7.1 xmerl-1.3.12 : +OTP-19.1.5 : ssh-4.3.6 # asn1-4.0.4 common_test-1.12.3 compiler-7.0.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7.1 debugger-4.2.1 dialyzer-3.0.2 diameter-1.12.1 edoc-0.8 eldap-1.2.2 erl_docgen-0.6 erl_interface-3.9.1 erts-8.1 et-1.6 eunit-2.3.1 gs-1.6.2 hipe-3.15.2 ic-4.4.2 inets-6.3.3 jinterface-1.7.1 kernel-5.1 megaco-3.18.1 mnesia-4.14.1 observer-2.2.2 odbc-2.11.3 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.3 percept-0.9 public_key-1.2 reltool-0.7.2 runtime_tools-1.10.1 sasl-3.0.1 snmp-5.2.4 ssl-8.0.3 stdlib-3.1 syntax_tools-2.1 tools-2.8.6 typer-0.9.11 wx-1.7.1 xmerl-1.3.12 : OTP-19.1.4 : ssh-4.3.5 # asn1-4.0.4 common_test-1.12.3 compiler-7.0.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7.1 debugger-4.2.1 dialyzer-3.0.2 diameter-1.12.1 edoc-0.8 eldap-1.2.2 erl_docgen-0.6 erl_interface-3.9.1 erts-8.1 et-1.6 eunit-2.3.1 gs-1.6.2 hipe-3.15.2 ic-4.4.2 inets-6.3.3 jinterface-1.7.1 kernel-5.1 megaco-3.18.1 mnesia-4.14.1 observer-2.2.2 odbc-2.11.3 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.3 percept-0.9 public_key-1.2 reltool-0.7.2 runtime_tools-1.10.1 sasl-3.0.1 snmp-5.2.4 ssl-8.0.3 stdlib-3.1 syntax_tools-2.1 tools-2.8.6 typer-0.9.11 wx-1.7.1 xmerl-1.3.12 : OTP-19.1.3 : ssh-4.3.4 # asn1-4.0.4 common_test-1.12.3 compiler-7.0.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7.1 debugger-4.2.1 dialyzer-3.0.2 diameter-1.12.1 edoc-0.8 eldap-1.2.2 erl_docgen-0.6 erl_interface-3.9.1 erts-8.1 et-1.6 eunit-2.3.1 gs-1.6.2 hipe-3.15.2 ic-4.4.2 inets-6.3.3 jinterface-1.7.1 kernel-5.1 megaco-3.18.1 mnesia-4.14.1 observer-2.2.2 odbc-2.11.3 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.3 percept-0.9 public_key-1.2 reltool-0.7.2 runtime_tools-1.10.1 sasl-3.0.1 snmp-5.2.4 ssl-8.0.3 stdlib-3.1 syntax_tools-2.1 tools-2.8.6 typer-0.9.11 wx-1.7.1 xmerl-1.3.12 : OTP-19.1.2 : ssh-4.3.3 # asn1-4.0.4 common_test-1.12.3 compiler-7.0.2 cosEvent-2.2.1 cosEventDomain-1.2.1 cosFileTransfer-1.2.1 cosNotification-1.2.2 cosProperty-1.2.1 cosTime-1.2.2 cosTransactions-1.3.2 crypto-3.7.1 debugger-4.2.1 dialyzer-3.0.2 diameter-1.12.1 edoc-0.8 eldap-1.2.2 erl_docgen-0.6 erl_interface-3.9.1 erts-8.1 et-1.6 eunit-2.3.1 gs-1.6.2 hipe-3.15.2 ic-4.4.2 inets-6.3.3 jinterface-1.7.1 kernel-5.1 megaco-3.18.1 mnesia-4.14.1 observer-2.2.2 odbc-2.11.3 orber-3.8.2 os_mon-2.4.1 otp_mibs-1.1.1 parsetools-2.1.3 percept-0.9 public_key-1.2 reltool-0.7.2 runtime_tools-1.10.1 sasl-3.0.1 snmp-5.2.4 ssl-8.0.3 stdlib-3.1 syntax_tools-2.1 tools-2.8.6 typer-0.9.11 wx-1.7.1 xmerl-1.3.12 : diff --git a/system/doc/design_principles/applications.xml b/system/doc/design_principles/applications.xml index 0a1b65ea8e..c673fde07e 100644 --- a/system/doc/design_principles/applications.xml +++ b/system/doc/design_principles/applications.xml @@ -11,7 +11,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at - + http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software @@ -19,7 +19,7 @@ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. - + </legalnotice> <title>Applications</title> @@ -172,31 +172,136 @@ ch_app:stop([])</code> </section> <section> - <marker id="app_dir"></marker> - <title>Directory Structure</title> - <p>When packaging code using <c>systools</c>, the code for each - application is placed in a separate directory, - <c>lib/Application-Vsn</c>, where <c>Vsn</c> is the version number.</p> - <p>This can be useful to know, even if <c>systools</c> is not used, - since Erlang/OTP is packaged according to the OTP principles - and thus comes with this directory structure. The code server - (see the <c>code(3)</c> manual page in Kernel) automatically - uses code from - the directory with the highest version number, if more than one - version of an application is present.</p> - <p>The application directory structure can also be used in the - development environment. The version number can then - be omitted from the name.</p> - <p>The application directory has the following sub-directories:</p> - <list type="bulleted"> - <item><c>src</c> - Contains the Erlang source code.</item> - <item><c>ebin</c> - Contains the Erlang object code, the - <c>beam</c> files. The <c>.app</c> file is also placed here.</item> - <item><c>priv</c> - Used for application specific files. For - example, C executables are placed here. The function - <c>code:priv_dir/1</c> is to be used to access this directory.</item> - <item><c>include</c> - Used for include files.</item> - </list> + <marker id="app_dir"></marker> + <title>Directory Structure</title> + <p>When packaging code using <c>systools</c>, the code for each + application is placed in a separate directory, + <c>lib/Application-Vsn</c>, where <c>Vsn</c> is the version number.</p> + <p>This can be useful to know, even if <c>systools</c> is not used, + since Erlang/OTP is packaged according to the OTP principles + and thus comes with a specific directory structure. The code server + (see the <seealso marker="kernel:code"><c>code(3)</c></seealso> manual + page in Kernel) automatically uses code from + the directory with the highest version number, if more than one + version of an application is present.</p> + <section> + <title>Directory Structure guidelines for a Development Environment</title> + <p>Any directory structure for development will suffice as long as the released directory structure + adhere to the <seealso marker="#app_dir_released">description below</seealso>, + but it is encouraged that the same directory structure + also be used in a development environment. The version number should be omitted from the + application directory name since this is an artifact of the release step. + </p> + <p> Some sub-directories are <em>required</em>. Some sub-directories are <em>optional</em>, meaning that it should + only be used if the application itself requires it. Finally, some sub-directories are <em>recommended</em>, + meaning it is encouraged that it is used and used as described here. For example, both documentation + and tests are encouraged to exist in an application for it to be deemed a proper OTP application.</p> +<code type="none"> + ─ ${application} +  ├── doc + │   ├── internal + │   ├── examples + │   └── src +  ├── include +  ├── priv +  ├── src + │  └── ${application}.app.src +  └── test +</code> + <list type="bulleted"> + <item><c>src</c> - Required. Contains the Erlang source code, the source of the <c>.app</c> file + and internal include files used by the application itself. Additional sub-directories within + <c>src</c> can be used as namespaces to organize source files. These directories should never + be deeper than one level.</item> + <item><c>priv</c> - Optional. Used for application specific files. </item> + <item><c>include</c> - Optional. Used for public include files that must be reachable from + other applications.</item> + <item><c>doc</c> - Recommended. Any source documentation should be placed in sub-directories here.</item> + <item><c>doc/internal</c> - Recommended. Any documentation that describes implementation details about + this application, not intended for publication, should be placed here.</item> + <item><c>doc/examples</c> - Recommended. Source code for examples on how to use this application should + be placed here. It is encouraged that examples are sourced to the public documentation from + this directory.</item> + <item><c>doc/src</c> - Recommended. All source files for documentation, such as Markdown, AsciiDoc or + XML-files, should be placed here.</item> + <item><c>test</c> - Recommended. All files regarding tests, such as test suites and test specifications, + should be placed here. </item> + </list> + + <p>Other directories in the development environment may be needed. If source code from languages other + than Erlang is used, for instance C-code for NIFs, that code should be placed in a separate directory. + By convention it is recommended to prefix such directories with the language name, for example + <c>c_src</c> for C, <c>java_src</c> for Java or <c>go_src</c> for Go. Directories with <c>_src</c> + suffix indicates that it is a part of the application and the compilation step. The final build artifacts + should target the <c>priv/lib</c> or <c>priv/bin</c> directories.</p> + <p>The <c>priv</c> directory holds assets that the application needs during runtime. Executables should + reside in <c>priv/bin</c> and dynamically-linked libraries should reside in <c>priv/lib</c>. Other assets + are free to reside within the <c>priv</c> directory but it is recommended it does so in a structured manner.</p> + <p>Source files from other languages that generate Erlang code, such as ASN.1 or Mibs, should be placed + in directories, at the top level or in <c>src</c>, with the same name as the source language, for example + <c>asn1</c> and <c>mibs</c>. Build artifacts should be placed in their respective language directory, + such as <c>src</c> for Erlang code or <c>java_src</c> for Java code.</p> + <p>The <c>.app</c> file for release may reside in the <c>ebin</c>-directory in a development environment + but it is encouraged that this is an artifact of the build step. By convention a <c>.app.src</c> file + is used, which resides in the <c>src</c> directory. This file is nearly identical as the + <c>.app</c> file but certain fields may be replaced during the build step, such as the application version.</p> + <p>Directory names should not be capitalized.</p> + <p>It is encouraged to omit empty directories.</p> + + </section> + + <section> + <marker id="app_dir_released"></marker> + <title>Directory Structure for a Released System</title> + <p>A released application must follow a certain structure. + </p> +<code type="none"> + ─ ${application}-${version} +  ├── bin +  ├── doc + │   ├── html + │   ├── man[1-9] + │   ├── pdf + │   ├── internal + │   └── examples +  ├── ebin + │  └── ${application}.app +  ├── include +  ├── priv + │   ├── lib + │   └── bin +  └── src +</code> + <list type="bulleted"> + <item><c>src</c> - Optional. Contains the Erlang source code and internal include files + used by the application itself. This directory is no longer required in a released application.</item> + <item><c>ebin</c> - Required. Contains the Erlang object code, the <c>beam</c> files. + The <c>.app</c> file must also be placed here.</item> + <item><c>priv</c> - Optional. Used for application specific files. <c>code:priv_dir/1</c> + is to be used to access this directory.</item> + <item><c>priv/lib</c> - Recommended. Any shared-object files that are used by the application, + such as NIFs or linked-in-drivers, should be placed here.</item> + <item><c>priv/bin</c> - Recommended. Any executable that is used by the application, + such as port-programs, should be placed here.</item> + <item><c>include</c> - Optional. Used for public include files that must be reachable from + other applications.</item> + <item><c>bin</c> - Optional. Any executable that is a product of the application, + such as escripts or shell-scripts, should be placed here.</item> + <item><c>doc</c> - Optional. Any released documentation should be placed in + sub-directories here.</item> + <item><c>doc/man1</c> - Recommended. Man pages for Application executables.</item> + <item><c>doc/man3</c> - Recommended. Man pages for module APIs.</item> + <item><c>doc/man6</c> - Recommended. Man pages for Application overview.</item> + <item><c>doc/html</c> - Optional. HTML pages for the entire Application.</item> + <item><c>doc/pdf</c> - Optional. PDF documentation for the entire Application.</item> + </list> + + <p>The <c>src</c> directory could be useful to release for debugging purposes but is not required. + The <c>include</c> directory should only be released if the applications has public include files.</p> + <p>The only documentation that is recommended to be released in this way are the man pages. HTML and PDF + will normally be distributed in some other manner.</p> + <p>It is encouraged to omit empty directories.</p> + </section> </section> <section> @@ -381,4 +486,3 @@ application:start(Application, Type)</code> <c>shutdown</c>, not <c>normal</c>.</p> </section> </chapter> - diff --git a/system/doc/design_principles/code_lock.dia b/system/doc/design_principles/code_lock.dia Binary files differindex 8e6ff8a898..eaa2aca5b0 100644 --- a/system/doc/design_principles/code_lock.dia +++ b/system/doc/design_principles/code_lock.dia diff --git a/system/doc/design_principles/code_lock.png b/system/doc/design_principles/code_lock.png Binary files differindex 745fd91920..40bd35fc74 100644 --- a/system/doc/design_principles/code_lock.png +++ b/system/doc/design_principles/code_lock.png diff --git a/system/doc/design_principles/code_lock_2.dia b/system/doc/design_principles/code_lock_2.dia Binary files differindex 142909a2f5..3b9ba554d8 100644 --- a/system/doc/design_principles/code_lock_2.dia +++ b/system/doc/design_principles/code_lock_2.dia diff --git a/system/doc/design_principles/code_lock_2.png b/system/doc/design_principles/code_lock_2.png Binary files differindex ecf7b0d799..3aca9dd5aa 100644 --- a/system/doc/design_principles/code_lock_2.png +++ b/system/doc/design_principles/code_lock_2.png diff --git a/system/doc/design_principles/statem.xml b/system/doc/design_principles/statem.xml index 57e47431b8..f627145f9f 100644 --- a/system/doc/design_principles/statem.xml +++ b/system/doc/design_principles/statem.xml @@ -29,7 +29,7 @@ <rev></rev> <file>statem.xml</file> </header> - <marker id="gen_statem behaviour"></marker> + <marker id="gen_statem Behaviour" /> <p> This section is to be read with the <seealso marker="stdlib:gen_statem"><c>gen_statem(3)</c></seealso> @@ -50,6 +50,7 @@ <!-- =================================================================== --> <section> + <marker id="Event-Driven State Machines" /> <title>Event-Driven State Machines</title> <p> Established Automata Theory does not deal much with @@ -94,7 +95,7 @@ State(S) x Event(E) -> Actions(A), State(S')</pre> <!-- =================================================================== --> <section> - <marker id="callback_modes" /> + <marker id="Callback Modes" /> <title>Callback Modes</title> <p> The <c>gen_statem</c> behavior supports two callback modes: @@ -109,8 +110,13 @@ State(S) x Event(E) -> Actions(A), State(S')</pre> </p> <pre> StateName(EventType, EventContent, Data) -> - .. code for actions here ... - {next_state, NewStateName, NewData}.</pre> + ... code for actions here ... + {next_state, NewStateName, NewData}. + </pre> + <p> + This form is used in most examples here for example in section + <seealso marker="#Example">Example</seealso>. + </p> </item> <item> <p> @@ -120,8 +126,14 @@ StateName(EventType, EventContent, Data) -> </p> <pre> handle_event(EventType, EventContent, State, Data) -> - .. code for actions here ... - {next_state, NewState, NewData}</pre> + ... code for actions here ... + {next_state, NewState, NewData} + </pre> + <p> + Se section + <seealso marker="#One Event Handler">One Event Handler</seealso> + for an example. + </p> </item> </list> <p> @@ -134,10 +146,11 @@ handle_event(EventType, EventContent, State, Data) -> </p> <section> + <marker id="Choosing the Callback Mode" /> <title>Choosing the Callback Mode</title> <p> The two - <seealso marker="#callback_modes">callback modes</seealso> + <seealso marker="#Callback Modes">callback modes</seealso> give different possibilities and restrictions, but one goal remains: you want to handle all possible combinations of @@ -195,10 +208,195 @@ handle_event(EventType, EventContent, State, Data) -> <!-- =================================================================== --> <section> + <marker id="State Enter Calls" /> + <title>State Enter Calls</title> + <p> + The <c>gen_statem</c> behavior can regardless of callback mode + automatically + <seealso marker="stdlib:gen_statem#type-state_enter"> + call the state callback + </seealso> + with special arguments whenever the state changes + so you can write state entry actions + near the rest of the state transition rules. + It typically looks like this: + </p> + <pre> +StateName(enter, _OldState, Data) -> + ... code for state entry actions here ... + {keep_state, NewData}; +StateName(EventType, EventContent, Data) -> + ... code for actions here ... + {next_state, NewStateName, NewData}.</pre> + <p> + Depending on how your state machine is specified, + this can be a very useful feature, + but it forces you to handle the state enter calls in all states. + See also the + <seealso marker="#State Entry Actions"> + State Entry Actions + </seealso> + chapter. + </p> + </section> + +<!-- =================================================================== --> + + <section> + <marker id="Actions" /> + <title>Actions</title> + <p> + In the first section + <seealso marker="#Event-Driven State Machines"> + Event-Driven State Machines + </seealso> + actions were mentioned as a part of + the general state machine model. These general actions + are implemented with the code that callback module + <c>gen_statem</c> executes in an event-handling + callback function before returning + to the <c>gen_statem</c> engine. + </p> + <p> + There are more specific state-transition actions + that a callback function can order the <c>gen_statem</c> + engine to do after the callback function return. + These are ordered by returning a list of + <seealso marker="stdlib:gen_statem#type-action">actions</seealso> + in the + <seealso marker="stdlib:gen_statem#type-state_callback_result">return tuple</seealso> + from the + <seealso marker="stdlib:gen_statem#Module:StateName/3">callback function</seealso>. + These state transition actions affect the <c>gen_statem</c> + engine itself and can do the following: + </p> + <list type="bulleted"> + <item> + <seealso marker="stdlib:gen_statem#type-postpone"> + Postpone + </seealso> + the current event, see section + <seealso marker="#Postponing Events">Postponing Events</seealso> + </item> + <item> + <seealso marker="stdlib:gen_statem#type-hibernate"> + Hibernate + </seealso> + the <c>gen_statem</c>, treated in + <seealso marker="#Hibernation">Hibernation</seealso> + </item> + <item> + Start a + <seealso marker="stdlib:gen_statem#type-state_timeout"> + state time-out</seealso>, + read more in section + <seealso marker="#State Time-Outs">State Time-Outs</seealso> + </item> + <item> + Start an + <seealso marker="stdlib:gen_statem#type-event_timeout">event time-out</seealso>, + see more in section + <seealso marker="#Event Time-Outs">Event Time-Outs</seealso> + </item> + <item> + <seealso marker="stdlib:gen_statem#type-reply_action"> + Reply + </seealso> + to a caller, mentioned at the end of section + <seealso marker="#All State Events">All State Events</seealso> + </item> + <item> + Generate the + <seealso marker="stdlib:gen_statem#type-action"> + next event + </seealso> + to handle, see section + <seealso marker="#Self-Generated Events">Self-Generated Events</seealso> + </item> + </list> + <p> + For details, see the + <seealso marker="stdlib:gen_statem#type-action"> + <c>gen_statem(3)</c> + </seealso> + manual page. + You can, for example, reply to many callers + and generate multiple next events to handle. + </p> + </section> + +<!-- =================================================================== --> + + <section> + <marker id="Event Types" /> + <title>Event Types</title> + <p> + Events are categorized in different + <seealso marker="stdlib:gen_statem#type-event_type">event types</seealso>. + Events of all types are handled in the same callback function, + for a given state, and the function gets + <c>EventType</c> and <c>EventContent</c> as arguments. + </p> + <p> + The following is a complete list of event types and where + they come from: + </p> + <taglist> + <tag><c>cast</c></tag> + <item> + Generated by + <seealso marker="stdlib:gen_statem#cast/2"><c>gen_statem:cast</c></seealso>. + </item> + <tag><c>{call,From}</c></tag> + <item> + Generated by + <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call</c></seealso>, + where <c>From</c> is the reply address to use + when replying either through the state transition action + <c>{reply,From,Msg}</c> or by calling + <seealso marker="stdlib:gen_statem#reply/1"><c>gen_statem:reply</c></seealso>. + </item> + <tag><c>info</c></tag> + <item> + Generated by any regular process message sent to + the <c>gen_statem</c> process. + </item> + <tag><c>state_timeout</c></tag> + <item> + Generated by state transition action + <seealso marker="stdlib:gen_statem#type-state_timeout"> + <c>{state_timeout,Time,EventContent}</c> + </seealso> + state timer timing out. + </item> + <tag><c>timeout</c></tag> + <item> + Generated by state transition action + <seealso marker="stdlib:gen_statem#type-event_timeout"> + <c>{timeout,Time,EventContent}</c> + </seealso> + (or its short form <c>Time</c>) + event timer timing out. + </item> + <tag><c>internal</c></tag> + <item> + Generated by state transition + <seealso marker="stdlib:gen_statem#type-action">action</seealso> + <c>{next_event,internal,EventContent}</c>. + All event types above can also be generated using + <c>{next_event,EventType,EventContent}</c>. + </item> + </taglist> + </section> + +<!-- =================================================================== --> + + <section> + <marker id="Example" /> <title>Example</title> <p> This example starts off as equivalent to the example in section - <seealso marker="fsm"><c>gen_fsm</c> Behavior</seealso>. + <seealso marker="fsm"><c>gen_fsm</c> Behavior</seealso>. In later sections, additions and tweaks are made using features in <c>gen_statem</c> that <c>gen_fsm</c> does not have. The end of this chapter provides the example again @@ -221,7 +419,6 @@ handle_event(EventType, EventContent, State, Data) -> This code lock state machine can be implemented using <c>gen_statem</c> with the following callback module: </p> - <marker id="ex"></marker> <code type="erl"><![CDATA[ -module(code_lock). -behaviour(gen_statem). @@ -241,7 +438,7 @@ button(Digit) -> init(Code) -> do_lock(), Data = #{code => Code, remaining => Code}, - {ok,locked,Data}. + {ok, locked, Data}. callback_mode() -> state_functions. @@ -252,19 +449,19 @@ locked( case Remaining of [Digit] -> do_unlock(), - {next_state,open,Data#{remaining := Code},10000}; + {next_state, open, Data#{remaining := Code}, + [{state_timeout,10000,lock}]; [Digit|Rest] -> % Incomplete - {next_state,locked,Data#{remaining := Rest}}; + {next_state, locked, Data#{remaining := Rest}}; _Wrong -> - {next_state,locked,Data#{remaining := Code}} + {next_state, locked, Data#{remaining := Code}} end. -open(timeout, _, Data) -> +open(state_timeout, lock, Data) -> do_lock(), - {next_state,locked,Data}; + {next_state, locked, Data}; open(cast, {button,_}, Data) -> - do_lock(), - {next_state,locked,Data}. + {next_state, open, Data}. do_lock() -> io:format("Lock~n", []). @@ -275,7 +472,7 @@ terminate(_Reason, State, _Data) -> State =/= locked andalso do_lock(), ok. code_change(_Vsn, State, Data, _Extra) -> - {ok,State,Data}. + {ok, State, Data}. ]]></code> <p>The code is explained in the next sections.</p> </section> @@ -283,6 +480,7 @@ code_change(_Vsn, State, Data, _Extra) -> <!-- =================================================================== --> <section> + <marker id="Starting gen_statem" /> <title>Starting gen_statem</title> <p> In the example in the previous section, <c>gen_statem</c> is @@ -345,7 +543,7 @@ start_link(Code) -> <p> If name registration succeeds, the new <c>gen_statem</c> process calls callback function <c>code_lock:init(Code)</c>. - This function is expected to return <c>{ok,State,Data}</c>, + This function is expected to return <c>{ok, State, Data}</c>, where <c>State</c> is the initial state of the <c>gen_statem</c>, in this case <c>locked</c>; assuming that the door is locked to begin with. <c>Data</c> is the internal server data of the <c>gen_statem</c>. @@ -386,7 +584,7 @@ callback_mode() -> Function <seealso marker="stdlib:gen_statem#Module:callback_mode/0"><c>Module:callback_mode/0</c></seealso> selects the - <seealso marker="#callback_modes"><c>CallbackMode</c></seealso> + <seealso marker="#Callback Modes"><c>CallbackMode</c></seealso> for the callback module, in this case <seealso marker="stdlib:gen_statem#type-callback_mode"><c>state_functions</c></seealso>. That is, each state has got its own handler function. @@ -397,6 +595,7 @@ callback_mode() -> <!-- =================================================================== --> <section> + <marker id="Handling Events" /> <title>Handling Events</title> <p>The function notifying the code lock about a button event is implemented using @@ -416,11 +615,13 @@ button(Digit) -> The event is made into a message and sent to the <c>gen_statem</c>. When the event is received, the <c>gen_statem</c> calls <c>StateName(cast, Event, Data)</c>, which is expected to - return a tuple <c>{next_state,NewStateName,NewData}</c>. + return a tuple <c>{next_state, NewStateName, NewData}</c>, + or <c>{next_state, NewStateName, NewData, Actions}</c>. <c>StateName</c> is the name of the current state and <c>NewStateName</c> is the name of the next state to go to. <c>NewData</c> is a new value for the server data of - the <c>gen_statem</c>. + the <c>gen_statem</c>, and <c>Actions</c> is a list of + actions on the <c>gen_statem</c> engine. </p> <code type="erl"><![CDATA[ locked( @@ -429,19 +630,19 @@ locked( case Remaining of [Digit] -> % Complete do_unlock(), - {next_state,open,Data#{remaining := Code},10000}; + {next_state, open, Data#{remaining := Code}, + [{state_timeout,10000,lock}]}; [Digit|Rest] -> % Incomplete - {next_state,locked,Data#{remaining := Rest}}; + {next_state, locked, Data#{remaining := Rest}}; [_|_] -> % Wrong - {next_state,locked,Data#{remaining := Code}} + {next_state, locked, Data#{remaining := Code}} end. -open(timeout, _, Data) -> +open(state_timeout, lock, Data) -> do_lock(), - {next_state,locked,Data}; + {next_state, locked, Data}; open(cast, {button,_}, Data) -> - do_lock(), - {next_state,locked,Data}. + {next_state, open, Data}. ]]></code> <p> If the door is locked and a button is pressed, the pressed @@ -455,38 +656,55 @@ open(cast, {button,_}, Data) -> restarts from the start of the code sequence. </p> <p> - In state <c>open</c>, any button locks the door, as - any event cancels the event timer, so no - time-out event occurs after a button event. + If the whole code is correct, the server changes states + to <c>open</c>. + </p> + <p> + In state <c>open</c>, a button event is ignored + by staying in the same state. This can also be done + by returning <c>{keep_state, Data}</c> or in this case + since <c>Data</c> unchanged even by returning + <c>keep_state_and_data</c>. </p> </section> <section> - <title>Event Time-Outs</title> + <marker id="State Time-Outs" /> + <title>State Time-Outs</title> <p> When a correct code has been given, the door is unlocked and the following tuple is returned from <c>locked/2</c>: </p> <code type="erl"><![CDATA[ -{next_state,open,Data#{remaining := Code},10000}; +{next_state, open, Data#{remaining := Code}, + [{state_timeout,10000,lock}]}; ]]></code> <p> 10,000 is a time-out value in milliseconds. After this time (10 seconds), a time-out occurs. - Then, <c>StateName(timeout, 10000, Data)</c> is called. + Then, <c>StateName(state_timeout, lock, Data)</c> is called. The time-out occurs when the door has been in state <c>open</c> for 10 seconds. After that the door is locked again: </p> <code type="erl"><![CDATA[ -open(timeout, _, Data) -> +open(state_timeout, lock, Data) -> do_lock(), - {next_state,locked,Data}; + {next_state, locked, Data}; ]]></code> + <p> + The timer for a state time-out is automatically cancelled + when the state machine changes states. You can restart + a state time-out by setting it to a new time, which cancels + the running timer and starts a new. This implies that + you can cancel a state time-out by restarting it with + time <c>infinity</c>. + </p> </section> <!-- =================================================================== --> <section> + <marker id="All State Events" /> <title>All State Events</title> <p> Sometimes events can arrive in any state of the <c>gen_statem</c>. @@ -519,21 +737,24 @@ open(EventType, EventContent, Data) -> handle_event(EventType, EventContent, Data). handle_event({call,From}, code_length, #{code := Code} = Data) -> - {keep_state,Data,[{reply,From,length(Code)}]}. + {keep_state, Data, [{reply,From,length(Code)}]}. ]]></code> <p> This example uses <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call/2</c></seealso>, which waits for a reply from the server. The reply is sent with a <c>{reply,From,Reply}</c> tuple - in an action list in the <c>{keep_state,...}</c> tuple - that retains the current state. + in an action list in the <c>{keep_state, ...}</c> tuple + that retains the current state. This return form is convenient + when you want to stay in the current state but do not know or + care about what it is. </p> </section> <!-- =================================================================== --> <section> + <marker id="One Event Handler" /> <title>One Event Handler</title> <p> If mode <c>handle_event_function</c> is used, @@ -557,19 +778,19 @@ handle_event(cast, {button,Digit}, State, #{code := Code} = Data) -> case maps:get(remaining, Data) of [Digit] -> % Complete do_unlock(), - {next_state,open,Data#{remaining := Code},10000}; + {next_state, open, Data#{remaining := Code}, + [{state_timeout,10000,lock}}; [Digit|Rest] -> % Incomplete - {keep_state,Data#{remaining := Rest}}; + {keep_state, Data#{remaining := Rest}}; [_|_] -> % Wrong - {keep_state,Data#{remaining := Code}} + {keep_state, Data#{remaining := Code}} end; open -> - do_lock(), - {next_state,locked,Data} + keep_state_and_data end; -handle_event(timeout, _, open, Data) -> +handle_event(state_timeout, lock, open, Data) -> do_lock(), - {next_state,locked,Data}. + {next_state, locked, Data}. ... ]]></code> @@ -578,9 +799,11 @@ handle_event(timeout, _, open, Data) -> <!-- =================================================================== --> <section> + <marker id="Stopping" /> <title>Stopping</title> <section> + <marker id="In a Supervision Tree" /> <title>In a Supervision Tree</title> <p> If the <c>gen_statem</c> is part of a supervision tree, @@ -620,6 +843,7 @@ terminate(_Reason, State, _Data) -> </section> <section> + <marker id="Standalone gen_statem" /> <title>Standalone gen_statem</title> <p> If the <c>gen_statem</c> is not part of a supervision tree, @@ -646,127 +870,77 @@ stop() -> <!-- =================================================================== --> <section> - <title>Actions</title> + <marker id="Event Time-Outs" /> + <title>Event Time-Outs</title> <p> - In the first sections actions were mentioned as a part of - the general state machine model. These general actions - are implemented with the code that callback module - <c>gen_statem</c> executes in an event-handling - callback function before returning - to the <c>gen_statem</c> engine. + A timeout feature inherited from <c>gen_statem</c>'s predecessor + <seealso marker="stdlib:gen_fsm"><c>gen_fsm</c></seealso>, + is an event time-out, that is, + if an event arrives the timer is cancelled. + You get either an event or a time-out, but not both. </p> <p> - There are more specific state-transition actions - that a callback function can order the <c>gen_statem</c> - engine to do after the callback function return. - These are ordered by returning a list of - <seealso marker="stdlib:gen_statem#type-action">actions</seealso> - in the - <seealso marker="stdlib:gen_statem#type-state_function_result">return tuple</seealso> - from the - <seealso marker="stdlib:gen_statem#Module:StateName/3">callback function</seealso>. - These state transition actions affect the <c>gen_statem</c> - engine itself and can do the following: + It is ordered by the state transition action + <c>{timeout,Time,EventContent}</c>, or just <c>Time</c>, + or even just <c>Time</c> instead of an action list + (the latter is a form inherited from <c>gen_fsm</c>. </p> - <list type="bulleted"> - <item>Postpone the current event</item> - <item>Hibernate the <c>gen_statem</c></item> - <item>Start an event time-out</item> - <item>Reply to a caller</item> - <item>Generate the next event to handle</item> - </list> <p> - In the example earlier was mentioned the event time-out - and replying to a caller. - An example of event postponing is included later in this chapter. - For details, see the - <seealso marker="stdlib:gen_statem#type-action"><c>gen_statem(3)</c></seealso> - manual page. - You can, for example, reply to many callers - and generate multiple next events to handle. + This type of time-out is useful to for example act on inactivity. + Let us start restart the code sequence + if no button is pressed for say 30 seconds: </p> - </section> - -<!-- =================================================================== --> + <code type="erl"><![CDATA[ +... - <section> - <title>Event Types</title> +locked( + timeout, _, + #{code := Code, remaining := Remaining} = Data) -> + {next_state, locked, Data#{remaining := Code}}; +locked( + cast, {button,Digit}, + #{code := Code, remaining := Remaining} = Data) -> +... + [Digit|Rest] -> % Incomplete + {next_state, locked, Data#{remaining := Rest}, 30000}; +... + ]]></code> <p> - The previous sections mentioned a few - <seealso marker="stdlib:gen_statem#type-event_type">event types</seealso>. - Events of all types are handled in the same callback function, - for a given state, and the function gets - <c>EventType</c> and <c>EventContent</c> as arguments. + Whenever we receive a button event we start an event timeout + of 30 seconds, and if we get an event type <c>timeout</c> + we reset the remaining code sequence. </p> <p> - The following is a complete list of event types and where - they come from: + An event timeout is cancelled by any other event so you either + get some other event or the timeout event. It is therefore + not possible nor needed to cancel or restart an event timeout. + Whatever event you act on has already cancelled + the event timeout... </p> - <taglist> - <tag><c>cast</c></tag> - <item> - Generated by - <seealso marker="stdlib:gen_statem#cast/2"><c>gen_statem:cast</c></seealso>. - </item> - <tag><c>{call,From}</c></tag> - <item> - Generated by - <seealso marker="stdlib:gen_statem#call/2"><c>gen_statem:call</c></seealso>, - where <c>From</c> is the reply address to use - when replying either through the state transition action - <c>{reply,From,Msg}</c> or by calling - <seealso marker="stdlib:gen_statem#reply/1"><c>gen_statem:reply</c></seealso>. - </item> - <tag><c>info</c></tag> - <item> - Generated by any regular process message sent to - the <c>gen_statem</c> process. - </item> - <tag><c>timeout</c></tag> - <item> - Generated by state transition action - <c>{timeout,Time,EventContent}</c> (or its short form <c>Time</c>) - timer timing out. - </item> - <tag><c>internal</c></tag> - <item> - Generated by state transition action - <c>{next_event,internal,EventContent}</c>. - All event types above can also be generated using - <c>{next_event,EventType,EventContent}</c>. - </item> - </taglist> </section> <!-- =================================================================== --> <section> - <title>State Time-Outs</title> + <marker id="Erlang Timers" /> + <title>Erlang Timers</title> <p> - The time-out event generated by state transition action - <c>{timeout,Time,EventContent}</c> is an event time-out, - that is, if an event arrives the timer is cancelled. - You get either an event or a time-out, but not both. + The previous example of state time-outs only work if + the state machine stays in the same state during the + time-out time. And event time-outs only work if no + disturbing unrelated events occur. </p> <p> - Often you want a timer not to be cancelled by any event - or you want to start a timer in one state and respond - to the time-out in another. This can be accomplished - with a regular Erlang timer: - <seealso marker="erts:erlang#start_timer/4"><c>erlang:start_timer</c></seealso>. + You may want to start a timer in one state and respond + to the time-out in another, maybe cancel the time-out + without changing states, or perhaps run multiple + time-outs in parallel. All this can be accomplished + with Erlang Timers: + <seealso marker="erts:erlang#start_timer/4"><c>erlang:start_timer3,4</c></seealso>. </p> <p> - For the example so far in this chapter: using the - <c>gen_statem</c> event timer has the consequence that - if a button event is generated while in the <c>open</c> state, - the time-out is cancelled and the button event is delivered. - So, we choose to lock the door if this occurred. - </p> - <p> - Suppose that we do not want a button to lock the door, - instead we want to ignore button events in the <c>open</c> state. - Then we start a timer when entering the <c>open</c> state - and wait for it to expire while ignoring button events: + Here is how to accomplish the state time-out + in the previous example by insted using an Erlang Timer: </p> <code type="erl"><![CDATA[ ... @@ -777,25 +951,37 @@ locked( [Digit] -> do_unlock(), Tref = erlang:start_timer(10000, self(), lock), - {next_state,open,Data#{remaining := Code, timer := Tref}}; + {next_state, open, Data#{remaining := Code, timer => Tref}}; ... open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) -> do_lock(), - {next_state,locked,Data}; + {next_state,locked,maps:remove(timer, Data)}; open(cast, {button,_}, Data) -> {keep_state,Data}; ... ]]></code> <p> + Removing the <c>timer</c> key from the map when we + change to state <c>locked</c> is not strictly + necessary since we can only get into state <c>open</c> + with an updated <c>timer</c> map value. But it can be nice + to not have outdated values in the state <c>Data</c>! + </p> + <p> If you need to cancel a timer because of some other event, you can use <seealso marker="erts:erlang#cancel_timer/2"><c>erlang:cancel_timer(Tref)</c></seealso>. - Notice that a time-out message cannot arrive after this, - unless you have postponed it (see the next section) before, + Note that a time-out message cannot arrive after this, + unless you have postponed it before (see the next section), so ensure that you do not accidentally postpone such messages. + Also note that a time-out message may have arrived + just before you cancelling it, so you may have to read out + such a message from the process mailbox depending on + the return value from + <seealso marker="erts:erlang#cancel_timer/2"><c>erlang:cancel_timer(Tref)</c></seealso>. </p> <p> - Another way to cancel a timer is not to cancel it, + Another way to handle a late time-out can be to not cancel it, but to ignore it if it arrives in a state where it is known to be late. </p> @@ -804,6 +990,7 @@ open(cast, {button,_}, Data) -> <!-- =================================================================== --> <section> + <marker id="Postponing Events" /> <title>Postponing Events</title> <p> If you want to ignore a particular event in the current state @@ -828,20 +1015,28 @@ open(cast, {button,_}, Data) -> ... ]]></code> <p> - The fact that a postponed event is only retried after a state change - translates into a requirement on the event and state space. - If you have a choice between storing a state data item - in the <c>State</c> or in the <c>Data</c>: - if a change in the item value affects which events that - are handled, then this item is to be part of the state. + Since a postponed event is only retried after a state change, + you have to think about where to keep a state data item. + You can keep it in the server <c>Data</c> + or in the <c>State</c> itself, + for example by having two more or less identical states + to keep a boolean value, or by using a complex state with + <seealso marker="#Callback Modes">callback mode</seealso> + <seealso marker="stdlib:gen_statem#type-callback_mode"><c>handle_event_function</c></seealso>. + If a change in the value changes the set of events that is handled, + then the value should be kept in the State. + Otherwise no postponed events will be retried + since only the server Data changes. </p> <p> - You want to avoid that you maybe much later decide - to postpone an event in one state and by misfortune it is never retried, - as the code only changes the <c>Data</c> but not the <c>State</c>. + This is not important if you do not postpone events. + But if you later decide to start postponing some events, + then the design flaw of not having separate states + when they should be, might become a hard to find bug. </p> <section> + <marker id="Fuzzy State Diagrams" /> <title>Fuzzy State Diagrams</title> <p> It is not uncommon that a state diagram does not specify @@ -858,6 +1053,7 @@ open(cast, {button,_}, Data) -> </section> <section> + <marker id="Selective Receive" /> <title>Selective Receive</title> <p> Erlang's selective receive statement is often used to @@ -937,6 +1133,59 @@ do_unlock() -> <!-- =================================================================== --> <section> + <marker id="State Entry Actions" /> + <title>State Entry Actions</title> + <p> + Say you have a state machine specification + that uses state entry actions. + Allthough you can code this using self-generated events + (described in the next section), especially if just + one or a few states has got state entry actions, + this is a perfect use case for the built in + <seealso marker="#State Enter Calls">state enter calls</seealso>. + </p> + <p> + You return a list containing <c>state_enter</c> from your + <seealso marker="stdlib:gen_statem#Module:callback_mode/0"><c>callback_mode/0</c></seealso> + function and the <c>gen_statem</c> engine will call your + state callback once with the arguments + <c>(enter, OldState, ...)</c> whenever the state changes. + Then you just need to handle these event-like calls in all states. + </p> + <code type="erl"><![CDATA[ +... +init(Code) -> + process_flag(trap_exit, true), + Data = #{code => Code}, + {ok, locked, Data}. + +callback_mode() -> + [state_functions,state_enter]. + +locked(enter, _OldState, Data) -> + do_lock(), + {keep_state,Data#{remaining => Code}}; +locked( + cast, {button,Digit}, + #{code := Code, remaining := Remaining} = Data) -> + case Remaining of + [Digit] -> + {next_state, open, Data}; +... + +open(enter, _OldState, _Data) -> + do_unlock(), + {keep_state_and_data, [{state_timeout,10000,lock}]}; +open(state_timeout, lock, Data) -> + {next_state, locked, Data}; +... + ]]></code> + </section> + +<!-- =================================================================== --> + + <section> + <marker id="Self-Generated Events" /> <title>Self-Generated Events</title> <p> It can sometimes be beneficial to be able to generate events @@ -954,64 +1203,71 @@ do_unlock() -> from your state machine to itself. </p> <p> - One example of using self-generated events can be when you have - a state machine specification that uses state entry actions. - You can code that using a dedicated function - to do the state transition. But if you want that code to be - visible besides the other state logic, you can insert - an <c>internal</c> event that does the entry actions. - This has the same unfortunate consequence as using - state transition functions: everywhere you go to - the state, you must explicitly - insert the <c>internal</c> event - or use a state transition function. + One example for this is to pre-process incoming data, for example + decrypting chunks or collecting characters up to a line break. + Purists may argue that this should be modelled with a separate + state machine that sends pre-processed events + to the main state machine. + But to decrease overhead the small pre-processing state machine + can be implemented in the common state event handling + of the main state machine using a few state data variables + that then sends the pre-processed events as internal events + to the main state machine. </p> <p> - The following is an implementation of entry actions - using <c>internal</c> events with content <c>enter</c> - using a helper function <c>enter/3</c> for state entry: + The following example uses an input model where you give the lock + characters with <c>put_chars(Chars)</c> and then call + <c>enter()</c> to finish the input. </p> <code type="erl"><![CDATA[ ... -init(Code) -> - process_flag(trap_exit, true), - Data = #{code => Code}, - enter(ok, locked, Data). +-export(put_chars/1, enter/0). +... +put_chars(Chars) when is_binary(Chars) -> + gen_statem:call(?NAME, {chars,Chars}). -callback_mode() -> - state_functions. +enter() -> + gen_statem:call(?NAME, enter). -locked(internal, enter, _Data) -> - do_lock(), - {keep_state,Data#{remaining => Code}}; -locked( - cast, {button,Digit}, - #{code := Code, remaining := Remaining} = Data) -> - case Remaining of - [Digit] -> - enter(next_state, open, Data); ... -open(internal, enter, _Data) -> - Tref = erlang:start_timer(10000, self(), lock), - do_unlock(), - {keep_state,Data#{timer => Tref}}; -open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) -> - enter(next_state, locked, Data); +locked(enter, _OldState, Data) -> + do_lock(), + {keep_state,Data#{remaining => Code, buf => []}}; ... -enter(Tag, State, Data) -> - {Tag,State,Data,[{next_event,internal,enter}]}. +handle_event({call,From}, {chars,Chars}, #{buf := Buf} = Data) -> + {keep_state, Data#{buf := [Chars|Buf], + [{reply,From,ok}]}; +handle_event({call,From}, enter, #{buf := Buf} = Data) -> + Chars = unicode:characters_to_binary(lists:reverse(Buf)), + try binary_to_integer(Chars) of + Digit -> + {keep_state, Data#{buf := []}, + [{reply,From,ok}, + {next_event,internal,{button,Chars}}]} + catch + error:badarg -> + {keep_state, Data#{buf := []}, + [{reply,From,{error,not_an_integer}}]} + end; +... ]]></code> + <p> + If you start this program with <c>code_lock:start([17])</c> + you can unlock with <c>code_lock:put_chars(<<"001">>), + code_lock:put_chars(<<"7">>), code_lock:enter()</c>. + </p> </section> <!-- =================================================================== --> <section> + <marker id="Example Revisited" /> <title>Example Revisited</title> <p> - This section includes the example after all mentioned modifications - and some more using the entry actions, + This section includes the example after most of the mentioned + modifications and some more using state enter calls, which deserves a new state diagram: </p> <image file="../design_principles/code_lock_2.png"> @@ -1027,6 +1283,7 @@ enter(Tag, State, Data) -> </p> <section> + <marker id="Callback Mode: state_functions" /> <title>Callback Mode: state_functions</title> <p> Using state functions: @@ -1054,43 +1311,44 @@ code_length() -> init(Code) -> process_flag(trap_exit, true), Data = #{code => Code}, - enter(ok, locked, Data). + {ok, locked, Data}. callback_mode() -> - state_functions. + [state_functions,state_enter]. -locked(internal, enter, #{code := Code} = Data) -> +locked(enter, _OldState, #{code := Code} = Data) -> do_lock(), - {keep_state,Data#{remaining => Code}}; + {keep_state, Data#{remaining => Code}}; +locked( + timeout, _, + #{code := Code, remaining := Remaining} = Data) -> + {keep_state, Data#{remaining := Code}}; locked( cast, {button,Digit}, #{code := Code, remaining := Remaining} = Data) -> case Remaining of [Digit] -> % Complete - enter(next_state, open, Data); + {next_state, open, Data}; [Digit|Rest] -> % Incomplete - {keep_state,Data#{remaining := Rest}}; + {keep_state, Data#{remaining := Rest}, 30000}; [_|_] -> % Wrong - {keep_state,Data#{remaining := Code}} + {keep_state, Data#{remaining := Code}} end; locked(EventType, EventContent, Data) -> handle_event(EventType, EventContent, Data). -open(internal, enter, Data) -> - Tref = erlang:start_timer(10000, self(), lock), +open(enter, _OldState, _Data) -> do_unlock(), - {keep_state,Data#{timer => Tref}}; -open(info, {timeout,Tref,lock}, #{timer := Tref} = Data) -> - enter(next_state, locked, Data); + {keep_state_and_data, [{state_timeout,10000,lock}]}; +open(state_timeout, lock, Data) -> + {next_state, locked, Data}; open(cast, {button,_}, _) -> - {keep_state_and_data,[postpone]}; + {keep_state_and_data, [postpone]}; open(EventType, EventContent, Data) -> handle_event(EventType, EventContent, Data). handle_event({call,From}, code_length, #{code := Code}) -> - {keep_state_and_data,[{reply,From,length(Code)}]}. -enter(Tag, State, Data) -> - {Tag,State,Data,[{next_event,internal,enter}]}. + {keep_state_and_data, [{reply,From,length(Code)}]}. do_lock() -> io:format("Locked~n", []). @@ -1106,13 +1364,14 @@ code_change(_Vsn, State, Data, _Extra) -> </section> <section> + <marker id="Callback Mode: handle_event_function" /> <title>Callback Mode: handle_event_function</title> <p> This section describes what to change in the example to use one <c>handle_event/4</c> function. The previously used approach to first branch depending on event - does not work that well here because of the generated - entry actions, so this example first branches depending on state: + does not work that well here because of the state enter calls, + so this example first branches depending on state: </p> <code type="erl"><![CDATA[ ... @@ -1120,44 +1379,49 @@ code_change(_Vsn, State, Data, _Extra) -> ... callback_mode() -> - handle_event_function. + [handle_event_function,state_enter]. %% State: locked -handle_event(internal, enter, locked, #{code := Code} = Data) -> +handle_event( + enter, _OldState, locked, + #{code := Code} = Data) -> do_lock(), - {keep_state,Data#{remaining => Code}}; + {keep_state, Data#{remaining => Code}}; +handle_event( + timeout, _, locked, + #{code := Code, remaining := Remaining} = Data) -> + {keep_state, Data#{remaining := Code}}; handle_event( cast, {button,Digit}, locked, #{code := Code, remaining := Remaining} = Data) -> case Remaining of [Digit] -> % Complete - enter(next_state, open, Data); + {next_state, open, Data}; [Digit|Rest] -> % Incomplete - {keep_state,Data#{remaining := Rest}}; + {keep_state, Data#{remaining := Rest}, 30000}; [_|_] -> % Wrong - {keep_state,Data#{remaining := Code}} + {keep_state, Data#{remaining := Code}} end; %% %% State: open -handle_event(internal, enter, open, Data) -> - Tref = erlang:start_timer(10000, self(), lock), +handle_event(enter, _OldState, open, _Data) -> do_unlock(), - {keep_state,Data#{timer => Tref}}; -handle_event(info, {timeout,Tref,lock}, open, #{timer := Tref} = Data) -> - enter(next_state, locked, Data); + {keep_state_and_data, [{state_timeout,10000,lock}]}; +handle_event(state_timeout, lock, open, Data) -> + {next_state, locked, Data}; handle_event(cast, {button,_}, open, _) -> {keep_state_and_data,[postpone]}; %% %% Any state handle_event({call,From}, code_length, _State, #{code := Code}) -> - {keep_state_and_data,[{reply,From,length(Code)}]}. + {keep_state_and_data, [{reply,From,length(Code)}]}. ... ]]></code> </section> <p> Notice that postponing buttons from the <c>locked</c> state - to the <c>open</c> state feels like the wrong thing to do + to the <c>open</c> state feels like a strange thing to do for a code lock, but it at least illustrates event postponing. </p> </section> @@ -1165,6 +1429,7 @@ handle_event({call,From}, code_length, _State, #{code := Code}) -> <!-- =================================================================== --> <section> + <marker id="Filter the State" /> <title>Filter the State</title> <p> The example servers so far in this chapter @@ -1225,12 +1490,13 @@ format_status(Opt, [_PDict,State,Data]) -> <!-- =================================================================== --> <section> + <marker id="Complex State" /> <title>Complex State</title> <p> The callback mode <seealso marker="stdlib:gen_statem#type-callback_mode"><c>handle_event_function</c></seealso> enables using a non-atom state as described in section - <seealso marker="#callback_modes">Callback Modes</seealso>, + <seealso marker="#Callback Modes">Callback Modes</seealso>, for example, a complex state term like a tuple. </p> <p> @@ -1304,71 +1570,68 @@ set_lock_button(LockButton) -> init({Code,LockButton}) -> process_flag(trap_exit, true), - Data = #{code => Code, remaining => undefined, timer => undefined}, - enter(ok, {locked,LockButton}, Data, []). + Data = #{code => Code, remaining => undefined}, + {ok, {locked,LockButton}, Data}. callback_mode() -> - handle_event_function. + [handle_event_function,state_enter]. handle_event( {call,From}, {set_lock_button,NewLockButton}, {StateName,OldLockButton}, Data) -> - {next_state,{StateName,NewLockButton},Data, + {next_state, {StateName,NewLockButton}, Data, [{reply,From,OldLockButton}]}; handle_event( {call,From}, code_length, {_StateName,_LockButton}, #{code := Code}) -> {keep_state_and_data, - [{reply,From,length(Code)}]}; + [{reply,From,length(Code)}]}; +%% +%% State: locked handle_event( EventType, EventContent, {locked,LockButton}, #{code := Code, remaining := Remaining} = Data) -> - case {EventType,EventContent} of - {internal,enter} -> + case {EventType, EventContent} of + {enter, _OldState} -> do_lock(), - {keep_state,Data#{remaining := Code}}; - {{call,From},{button,Digit}} -> + {keep_state, Data#{remaining := Code}}; + {timeout, _} -> + {keep_state, Data#{remaining := Code}}; + {{call,From}, {button,Digit}} -> case Remaining of [Digit] -> % Complete - next_state( - {open,LockButton}, Data, - [{reply,From,ok}]); + {next_state, {open,LockButton}, Data, + [{reply,From,ok}]}; [Digit|Rest] -> % Incomplete - {keep_state,Data#{remaining := Rest}, + {keep_state, Data#{remaining := Rest, 30000}, [{reply,From,ok}]}; [_|_] -> % Wrong - {keep_state,Data#{remaining := Code}, + {keep_state, Data#{remaining := Code}, [{reply,From,ok}]} end end; +%% +%% State: open handle_event( EventType, EventContent, - {open,LockButton}, #{timer := Timer} = Data) -> - case {EventType,EventContent} of - {internal,enter} -> - Tref = erlang:start_timer(10000, self(), lock), + {open,LockButton}, Data) -> + case {EventType, EventContent} of + {enter, _OldState} -> do_unlock(), - {keep_state,Data#{timer := Tref}}; - {info,{timeout,Timer,lock}} -> - next_state({locked,LockButton}, Data, []); - {{call,From},{button,Digit}} -> + {keep_state_and_data, [{state_timeout,10000,lock}]}; + {state_timeout, lock} -> + {next_state, {locked,LockButton}, Data}; + {{call,From}, {button,Digit}} -> if Digit =:= LockButton -> - erlang:cancel_timer(Timer), - next_state( - {locked,LockButton}, Data, - [{reply,From,locked}]); + {next_state, {locked,LockButton}, Data, + [{reply,From,locked}]); true -> {keep_state_and_data, [postpone]} end end. -next_state(State, Data, Actions) -> - enter(next_state, State, Data, Actions). -enter(Tag, State, Data, Actions) -> - {Tag,State,Data,[{next_event,internal,enter}|Actions]}. - do_lock() -> io:format("Locked~n", []). do_unlock() -> @@ -1405,6 +1668,7 @@ format_status(Opt, [_PDict,State,Data]) -> <!-- =================================================================== --> <section> + <marker id="Hibernation" /> <title>Hibernation</title> <p> If you have many servers in one node @@ -1430,20 +1694,21 @@ format_status(Opt, [_PDict,State,Data]) -> </p> <code type="erl"><![CDATA[ ... +%% State: open handle_event( EventType, EventContent, - {open,LockButton}, #{timer := Timer} = Data) -> - case {EventType,EventContent} of - {internal,enter} -> - Tref = erlang:start_timer(10000, self(), lock), + {open,LockButton}, Data) -> + case {EventType, EventContent} of + {enter, _OldState} -> do_unlock(), - {keep_state,Data#{timer := Tref},[hibernate]}; + {keep_state_and_data, + [{state_timeout,10000,lock},hibernate]}; ... ]]></code> <p> - The - <seealso marker="stdlib:gen_statem#type-hibernate"><c>[hibernate]</c></seealso> - action list on the last line + The atom + <seealso marker="stdlib:gen_statem#type-hibernate"><c>hibernate</c></seealso> + in the action list on the last line when entering the <c>{open,_}</c> state is the only change. If any event arrives in the <c>{open,_},</c> state, we do not bother to rehibernate, so the server stays @@ -1458,6 +1723,10 @@ handle_event( <c>{open,_}</c> state, which would clutter the code. </p> <p> + Another not uncommon scenario is to use the event time-out + to triger hibernation after a certain time of inactivity. + </p> + <p> This server probably does not use heap memory worth hibernating for. To gain anything from hibernation, your server would |