diff options
Diffstat (limited to 'lib')
342 files changed, 23900 insertions, 20127 deletions
diff --git a/lib/common_test/doc/src/ct.xml b/lib/common_test/doc/src/ct.xml index 53ef41dd5b..ea9f956271 100644 --- a/lib/common_test/doc/src/ct.xml +++ b/lib/common_test/doc/src/ct.xml @@ -740,7 +740,7 @@ <v>Format = string()</v> <v>FormatArgs = list()</v> <v>Opts = [Opt]</v> - <v>Opt = no_css | esc_chars</v> + <v>Opt = {heading,string()} | no_css | esc_chars</v> </type> <desc><marker id="log-5"/> <p>Prints from a test case to the log file.</p> @@ -798,53 +798,71 @@ <func> <name>pal(Format) -> ok</name> - <fsummary>Equivalent to pal(default, 50, Format, []).</fsummary> + <fsummary>Equivalent to pal(default, 50, Format, [], []).</fsummary> <desc><marker id="pal-1"/> <p>Equivalent to - <seealso marker="#pal-4"><c>ct:pal(default, 50, Format, - [])</c></seealso>.</p> + <seealso marker="#pal-5"><c>ct:pal(default, 50, Format, + [], [])</c></seealso>.</p> </desc> </func> <func> <name>pal(X1, X2) -> ok</name> <fsummary>Equivalent to pal(Category, Importance, Format, - FormatArgs).</fsummary> + FormatArgs, []).</fsummary> <type> <v>X1 = Category | Importance | Format</v> <v>X2 = Format | FormatArgs</v> </type> <desc><marker id="pal-2"/> - <p>Equivalent to <seealso marker="#pal-4"><c>ct:pal(Category, - Importance, Format, FormatArgs)</c></seealso>.</p> + <p>Equivalent to <seealso marker="#pal-5"><c>ct:pal(Category, + Importance, Format, FormatArgs, [])</c></seealso>.</p> </desc> </func> <func> <name>pal(X1, X2, X3) -> ok</name> <fsummary>Equivalent to pal(Category, Importance, Format, - FormatArgs).</fsummary> + FormatArgs, Opts).</fsummary> <type> <v>X1 = Category | Importance</v> <v>X2 = Importance | Format</v> - <v>X3 = Format | FormatArgs</v> + <v>X3 = Format | FormatArgs | Opts</v> </type> <desc><marker id="pal-3"/> - <p>Equivalent to <seealso marker="#pal-4"><c>ct:pal(Category, - Importance, Format, FormatArgs)</c></seealso>.</p> + <p>Equivalent to <seealso marker="#pal-5"><c>ct:pal(Category, + Importance, Format, FormatArgs, Opts)</c></seealso>.</p> + </desc> + </func> + + <func> + <name>pal(X1, X2, X3, X4) -> ok</name> + <fsummary>Equivalent to pal(Category, Importance, Format, + FormatArgs, Opts).</fsummary> + <type> + <v>X1 = Category | Importance</v> + <v>X2 = Importance | Format</v> + <v>X3 = Format | FormatArgs</v> + <v>X4 = FormatArgs | Opts</v> + </type> + <desc><marker id="pal-4"/> + <p>Equivalent to <seealso marker="#pal-5"><c>ct:pal(Category, + Importance, Format, FormatArgs, Opts)</c></seealso>.</p> </desc> </func> <func> - <name>pal(Category, Importance, Format, FormatArgs) -> ok</name> + <name>pal(Category, Importance, Format, FormatArgs, Opts) -> ok</name> <fsummary>Prints and logs from a test case.</fsummary> <type> <v>Category = atom()</v> <v>Importance = integer()</v> <v>Format = string()</v> <v>FormatArgs = list()</v> + <v>Opts = [Opt]</v> + <v>Opt = {heading,string()} | no_css</v> </type> - <desc><marker id="pal-4"/> + <desc><marker id="pal-5"/> <p>Prints and logs from a test case.</p> <p>This function is meant for printing a string from a test case, @@ -888,52 +906,70 @@ <func> <name>print(Format) -> ok</name> - <fsummary>Equivalent to print(default, 50, Format, []).</fsummary> + <fsummary>Equivalent to print(default, 50, Format, [], []).</fsummary> <desc><marker id="print-1"/> - <p>Equivalent to <seealso marker="#print-4"><c>ct:print(default, - 50, Format, [])</c></seealso>.</p> + <p>Equivalent to <seealso marker="#print-5"><c>ct:print(default, + 50, Format, [], [])</c></seealso>.</p> </desc> </func> <func> <name>print(X1, X2) -> ok</name> <fsummary>Equivalent to print(Category, Importance, Format, - FormatArgs).</fsummary> + FormatArgs, []).</fsummary> <type> <v>X1 = Category | Importance | Format</v> <v>X2 = Format | FormatArgs</v> </type> <desc><marker id="print-2"/> - <p>Equivalent to <seealso marker="#print-4"><c>ct:print(Category, - Importance, Format, FormatArgs)</c></seealso>.</p> + <p>Equivalent to <seealso marker="#print-5"><c>ct:print(Category, + Importance, Format, FormatArgs, [])</c></seealso>.</p> </desc> </func> <func> <name>print(X1, X2, X3) -> ok</name> <fsummary>Equivalent to print(Category, Importance, Format, - FormatArgs).</fsummary> + FormatArgs, Opts).</fsummary> <type> <v>X1 = Category | Importance</v> <v>X2 = Importance | Format</v> - <v>X3 = Format | FormatArgs</v> + <v>X3 = Format | FormatArgs | Opts</v> </type> <desc><marker id="print-3"/> - <p>Equivalent to <seealso marker="#print-4"><c>ct:print(Category, - Importance, Format, FormatArgs)</c></seealso>.</p> + <p>Equivalent to <seealso marker="#print-5"><c>ct:print(Category, + Importance, Format, FormatArgs, Opts)</c></seealso>.</p> + </desc> + </func> + + <func> + <name>print(X1, X2, X3, X4) -> ok</name> + <fsummary>Equivalent to print(Category, Importance, Format, + FormatArgs, Opts).</fsummary> + <type> + <v>X1 = Category | Importance</v> + <v>X2 = Importance | Format</v> + <v>X3 = Format | FormatArgs</v> + <v>X4 = FormatArgs | Opts</v> + </type> + <desc><marker id="print-4"/> + <p>Equivalent to <seealso marker="#print-5"><c>ct:print(Category, + Importance, Format, FormatArgs, Opts)</c></seealso>.</p> </desc> </func> <func> - <name>print(Category, Importance, Format, FormatArgs) -> ok</name> + <name>print(Category, Importance, Format, FormatArgs, Opts) -> ok</name> <fsummary>Prints from a test case to the console.</fsummary> <type> <v>Category = atom()</v> <v>Importance = integer()</v> <v>Format = string()</v> <v>FormatArgs = list()</v> + <v>Opts = [Opt]</v> + <v>Opt = {heading,string()}</v> </type> - <desc><marker id="print-4"/> + <desc><marker id="print-5"/> <p>Prints from a test case to the console.</p> <p>This function is meant for printing a string from a test case to diff --git a/lib/common_test/doc/src/write_test_chapter.xml b/lib/common_test/doc/src/write_test_chapter.xml index 1d3fbb6f76..f70bdb16c5 100644 --- a/lib/common_test/doc/src/write_test_chapter.xml +++ b/lib/common_test/doc/src/write_test_chapter.xml @@ -986,15 +986,17 @@ <c>io:put_chars/1</c>, and so on.</p> <p><c>Importance</c> is compared to a verbosity level set by the - <c>verbosity</c> start flag/option. The verbosity level can be set per - category or generally, or both. The default verbosity level, - <c>?STD_VERBOSITY</c>, is 50, that is, all standard I/O gets printed. - If a lower verbosity level is set, standard I/O printouts are ignored. - <c>Common Test</c> performs the following test:</p> + <c>verbosity</c> start flag/option. The level can be set per + category or generally, or both. If <c>verbosity</c> is not set by the user, + a level of 100 (<c>?MAX_VERBOSITY</c> = all printouts visible) is used as + default value. <c>Common Test</c> performs the following test:</p> <pre> - Importance >= (100-VerbosityLevel)</pre> - <p>This also means that verbosity level 0 effectively turns all logging off - (except from printouts made by <c>Common Test</c> itself).</p> +Importance >= (100-VerbosityLevel)</pre> + <p>The constant <c>?STD_VERBOSITY</c> has value 50 (see <c>ct.hrl</c>). + At this level, all standard I/O gets printed. If a lower verbosity level + is set, standard I/O printouts are ignored. Verbosity level 0 effectively + turns all logging off (except from printouts made by <c>Common Test</c> + itself).</p> <p>The general verbosity level is not associated with any particular category. This level sets the threshold for the standard I/O printouts, @@ -1003,17 +1005,17 @@ <p><em>Examples:</em></p> <p>Some printouts during test case execution:</p> - <pre> + <pre> io:format("1. Standard IO, importance = ~w~n", [?STD_IMPORTANCE]), ct:log("2. Uncategorized, importance = ~w", [?STD_IMPORTANCE]), - ct:log(info, "3. Categorized info, importance = ~w", [?STD_IMPORTANCE]]), + ct:log(info, "3. Categorized info, importance = ~w", [?STD_IMPORTANCE]), ct:log(info, ?LOW_IMPORTANCE, "4. Categorized info, importance = ~w", [?LOW_IMPORTANCE]), - ct:log(error, "5. Categorized error, importance = ~w", [?HI_IMPORTANCE]), - ct:log(error, ?HI_IMPORTANCE, "6. Categorized error, importance = ~w", [?MAX_IMPORTANCE]),</pre> + ct:log(error, ?HI_IMPORTANCE, "5. Categorized error, importance = ~w", [?HI_IMPORTANCE]), + ct:log(error, ?MAX_IMPORTANCE, "6. Categorized error, importance = ~w", [?MAX_IMPORTANCE]),</pre> - <p>If starting the test without specifying any verbosity levels as follows:</p> + <p>If starting the test with a general verbosity level of 50 (<c>?STD_VERBOSITY</c>):</p> <pre> - $ ct_run ...</pre> + $ ct_run -verbosity 50</pre> <p>the following is printed:</p> <pre> 1. Standard IO, importance = 50 @@ -1031,10 +1033,22 @@ 4. Categorized info, importance = 25 6. Categorized error, importance = 99</pre> + <p>Note that the category argument is not required in order to only specify the + importance of a printout. Example:</p> + <pre> +<c>ct:pal(?LOW_IMPORTANCE, "Info report: ~p", [Info])</c></pre> + <p>Or perhaps in combination with constants:</p> + <pre> +-define(INFO, ?LOW_IMPORTANCE). +-define(ERROR, ?HI_IMPORTANCE). + +ct:log(?INFO, "Info report: ~p", [Info]) +ct:pal(?ERROR, "Error report: ~p", [Error])</pre> + <p>The functions <seealso marker="ct#set_verbosity-2"><c>ct:set_verbosity/2</c></seealso> and <seealso marker="ct#get_verbosity-1"><c>ct:get_verbosity/1</c></seealso> may be used to modify and read verbosity levels during test execution.</p> - + <p>The arguments <c>Format</c> and <c>FormatArgs</c> in <c>ct:log/print/pal</c> are always passed on to the STDLIB function <c>io:format/3</c> (For details, see the <seealso marker="stdlib:io"><c>io</c></seealso> manual page).</p> 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.erl b/lib/common_test/src/ct.erl index f9f845e1a9..43abb91819 100644 --- a/lib/common_test/src/ct.erl +++ b/lib/common_test/src/ct.erl @@ -66,8 +66,8 @@ reload_config/1, escape_chars/1, escape_chars/2, log/1, log/2, log/3, log/4, log/5, - print/1, print/2, print/3, print/4, - pal/1, pal/2, pal/3, pal/4, + print/1, print/2, print/3, print/4, print/5, + pal/1, pal/2, pal/3, pal/4, pal/5, set_verbosity/2, get_verbosity/1, capture_start/0, capture_stop/0, capture_get/0, capture_get/1, fail/1, fail/2, comment/1, comment/2, make_priv_dir/0, @@ -592,7 +592,7 @@ log(X1,X2,X3,X4) -> %%% Format = string() %%% Args = list() %%% Opts = [Opt] -%%% Opt = esc_chars | no_css +%%% Opt = {heading,string()} | esc_chars | no_css %%% %%% @doc Printout from a test case to the log file. %%% @@ -610,43 +610,61 @@ log(Category,Importance,Format,Args,Opts) -> %%%----------------------------------------------------------------- %%% @spec print(Format) -> ok -%%% @equiv print(default,50,Format,[]) +%%% @equiv print(default,50,Format,[],[]) print(Format) -> - print(default,?STD_IMPORTANCE,Format,[]). + print(default,?STD_IMPORTANCE,Format,[],[]). %%%----------------------------------------------------------------- %%% @spec print(X1,X2) -> ok %%% X1 = Category | Importance | Format %%% X2 = Format | Args -%%% @equiv print(Category,Importance,Format,Args) +%%% @equiv print(Category,Importance,Format,Args,[]) print(X1,X2) -> {Category,Importance,Format,Args} = if is_atom(X1) -> {X1,?STD_IMPORTANCE,X2,[]}; is_integer(X1) -> {default,X1,X2,[]}; is_list(X1) -> {default,?STD_IMPORTANCE,X1,X2} end, - print(Category,Importance,Format,Args). + print(Category,Importance,Format,Args,[]). %%%----------------------------------------------------------------- %%% @spec print(X1,X2,X3) -> ok +%%% X1 = Category | Importance | Format +%%% X2 = Importance | Format | Args +%%% X3 = Format | Args | Opts +%%% @equiv print(Category,Importance,Format,Args,Opts) +print(X1,X2,X3) -> + {Category,Importance,Format,Args,Opts} = + if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[],[]}; + is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,[]}; + is_integer(X1) -> {default,X1,X2,X3,[]}; + is_list(X1), is_list(X2) -> {default,?STD_IMPORTANCE,X1,X2,X3} + end, + print(Category,Importance,Format,Args,Opts). + +%%%----------------------------------------------------------------- +%%% @spec print(X1,X2,X3,X4) -> ok %%% X1 = Category | Importance %%% X2 = Importance | Format %%% X3 = Format | Args -%%% @equiv print(Category,Importance,Format,Args) -print(X1,X2,X3) -> - {Category,Importance,Format,Args} = - if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[]}; - is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3}; - is_integer(X1) -> {default,X1,X2,X3} +%%% X4 = Args | Opts +%%% @equiv print(Category,Importance,Format,Args,Opts) +print(X1,X2,X3,X4) -> + {Category,Importance,Format,Args,Opts} = + if is_atom(X1), is_integer(X2) -> {X1,X2,X3,X4,[]}; + is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,X4}; + is_integer(X1) -> {default,X1,X2,X3,X4} end, - print(Category,Importance,Format,Args). + print(Category,Importance,Format,Args,Opts). %%%----------------------------------------------------------------- -%%% @spec print(Category,Importance,Format,Args) -> ok +%%% @spec print(Category,Importance,Format,Args,Opts) -> ok %%% Category = atom() %%% Importance = integer() %%% Format = string() %%% Args = list() +%%% Opts = [Opt] +%%% Opt = {heading,string()} %%% %%% @doc Printout from a test case to the console. %%% @@ -658,13 +676,13 @@ print(X1,X2,X3) -> %%% and default value for <c>Args</c> is <c>[]</c>.</p> %%% <p>Please see the User's Guide for details on <c>Category</c> %%% and <c>Importance</c>.</p> -print(Category,Importance,Format,Args) -> - ct_logs:tc_print(Category,Importance,Format,Args). +print(Category,Importance,Format,Args,Opts) -> + ct_logs:tc_print(Category,Importance,Format,Args,Opts). %%%----------------------------------------------------------------- %%% @spec pal(Format) -> ok -%%% @equiv pal(default,50,Format,[]) +%%% @equiv pal(default,50,Format,[],[]) pal(Format) -> pal(default,?STD_IMPORTANCE,Format,[]). @@ -672,35 +690,53 @@ pal(Format) -> %%% @spec pal(X1,X2) -> ok %%% X1 = Category | Importance | Format %%% X2 = Format | Args -%%% @equiv pal(Category,Importance,Format,Args) +%%% @equiv pal(Category,Importance,Format,Args,[]) pal(X1,X2) -> {Category,Importance,Format,Args} = if is_atom(X1) -> {X1,?STD_IMPORTANCE,X2,[]}; is_integer(X1) -> {default,X1,X2,[]}; is_list(X1) -> {default,?STD_IMPORTANCE,X1,X2} end, - pal(Category,Importance,Format,Args). + pal(Category,Importance,Format,Args,[]). %%%----------------------------------------------------------------- %%% @spec pal(X1,X2,X3) -> ok +%%% X1 = Category | Importance | Format +%%% X2 = Importance | Format | Args +%%% X3 = Format | Args | Opts +%%% @equiv pal(Category,Importance,Format,Args,Opts) +pal(X1,X2,X3) -> + {Category,Importance,Format,Args,Opts} = + if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[],[]}; + is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,[]}; + is_integer(X1) -> {default,X1,X2,X3,[]}; + is_list(X1), is_list(X2) -> {default,?STD_IMPORTANCE,X1,X2,X3} + end, + pal(Category,Importance,Format,Args,Opts). + +%%%----------------------------------------------------------------- +%%% @spec pal(X1,X2,X3,X4) -> ok %%% X1 = Category | Importance %%% X2 = Importance | Format %%% X3 = Format | Args -%%% @equiv pal(Category,Importance,Format,Args) -pal(X1,X2,X3) -> - {Category,Importance,Format,Args} = - if is_atom(X1), is_integer(X2) -> {X1,X2,X3,[]}; - is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3}; - is_integer(X1) -> {default,X1,X2,X3} +%%% X4 = Args | Opts +%%% @equiv pal(Category,Importance,Format,Args,Opts) +pal(X1,X2,X3,X4) -> + {Category,Importance,Format,Args,Opts} = + if is_atom(X1), is_integer(X2) -> {X1,X2,X3,X4,[]}; + is_atom(X1), is_list(X2) -> {X1,?STD_IMPORTANCE,X2,X3,X4}; + is_integer(X1) -> {default,X1,X2,X3,X4} end, - pal(Category,Importance,Format,Args). + pal(Category,Importance,Format,Args,Opts). %%%----------------------------------------------------------------- -%%% @spec pal(Category,Importance,Format,Args) -> ok +%%% @spec pal(Category,Importance,Format,Args,Opts) -> ok %%% Category = atom() %%% Importance = integer() %%% Format = string() %%% Args = list() +%%% Opts = [Opt] +%%% Opt = {heading,string()} | no_css %%% %%% @doc Print and log from a test case. %%% @@ -712,8 +748,8 @@ pal(X1,X2,X3) -> %%% and default value for <c>Args</c> is <c>[]</c>.</p> %%% <p>Please see the User's Guide for details on <c>Category</c> %%% and <c>Importance</c>.</p> -pal(Category,Importance,Format,Args) -> - ct_logs:tc_pal(Category,Importance,Format,Args). +pal(Category,Importance,Format,Args,Opts) -> + ct_logs:tc_pal(Category,Importance,Format,Args,Opts). %%%----------------------------------------------------------------- %%% @spec set_verbosity(Category, Level) -> ok 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..09ad709da5 100644 --- a/lib/common_test/src/ct_logs.erl +++ b/lib/common_test/src/ct_logs.erl @@ -45,8 +45,8 @@ %% Logging stuff directly from testcase -export([tc_log/3, tc_log/4, tc_log/5, tc_log/6, tc_log_async/3, tc_log_async/5, - tc_print/3, tc_print/4, - tc_pal/3, tc_pal/4, ct_log/3, + tc_print/3, tc_print/4, tc_print/5, + tc_pal/3, tc_pal/4, tc_pal/5, ct_log/3, basic_html/0]). %% Simulate logger process for use without ct environment running @@ -447,10 +447,10 @@ tc_log(Category,Importance,Format,Args,Opts) -> tc_log(Category,Importance,"User",Format,Args,Opts). %%%----------------------------------------------------------------- -%%% @spec tc_log(Category,Importance,Printer,Format,Args,Opts) -> ok +%%% @spec tc_log(Category,Importance,Heading,Format,Args,Opts) -> ok %%% Category = atom() %%% Importance = integer() -%%% Printer = string() +%%% Heading = string() %%% Format = string() %%% Args = list() %%% Opts = list() @@ -460,13 +460,18 @@ tc_log(Category,Importance,Format,Args,Opts) -> %%% <p>This function is called by <code>ct</code> when logging %%% stuff directly from a testcase (i.e. not from within the CT %%% framework).</p> -tc_log(Category,Importance,Printer,Format,Args,Opts) -> +tc_log(Category,Importance,Heading,Format,Args,Opts) -> Data = case lists:member(no_css, Opts) of true -> [{Format,Args}]; false -> - [{hd,div_header(Category,Printer),[]}, + Heading1 = + case proplists:get_value(heading, Opts) of + undefined -> Heading; + Str -> Str + end, + [{hd,div_header(Category,Heading1),[]}, {Format,Args}, {ft,div_footer(),[]}] end, @@ -484,7 +489,7 @@ tc_log_async(Category,Format,Args) -> %%% @spec tc_log_async(Category,Importance,Format,Args) -> ok %%% Category = atom() %%% Importance = integer() -%%% Printer = string() +%%% Heading = string() %%% Format = string() %%% Args = list() %%% @@ -495,31 +500,38 @@ tc_log_async(Category,Format,Args) -> %%% to avoid deadlocks when e.g. the hook that handles SASL printouts %%% prints to the test case log file at the same time test server %%% asks ct_logs for an html wrapper.</p> -tc_log_async(Category,Importance,Printer,Format,Args) -> +tc_log_async(Category,Importance,Heading,Format,Args) -> cast({log,async,self(),group_leader(),Category,Importance, - [{hd,div_header(Category,Printer),[]}, + [{hd,div_header(Category,Heading),[]}, {Format,Args}, {ft,div_footer(),[]}], true}), ok. %%%----------------------------------------------------------------- %%% @spec tc_print(Category,Format,Args) -%%% @equiv tc_print(Category,?STD_IMPORTANCE,Format,Args) +%%% @equiv tc_print(Category,?STD_IMPORTANCE,Format,Args,[]) tc_print(Category,Format,Args) -> - tc_print(Category,?STD_IMPORTANCE,Format,Args). + tc_print(Category,?STD_IMPORTANCE,Format,Args,[]). + +%%%----------------------------------------------------------------- +%%% @spec tc_print(Category,Importance,Format,Args) +%%% @equiv tc_print(Category,Importance,Format,Args,[]) +tc_print(Category,Importance,Format,Args) -> + tc_print(Category,Importance,Format,Args,[]). %%%----------------------------------------------------------------- -%%% @spec tc_print(Category,Importance,Format,Args) -> ok +%%% @spec tc_print(Category,Importance,Format,Args,Opts) -> ok %%% Category = atom() %%% Importance = integer() %%% Format = string() %%% Args = list() +%%% Opts = list() %%% %%% @doc Console printout from a testcase. %%% %%% <p>This function is called by <code>ct</code> when printing %%% stuff from a testcase on the user console.</p> -tc_print(Category,Importance,Format,Args) -> +tc_print(Category,Importance,Format,Args,Opts) -> VLvl = case ct_util:get_verbosity(Category) of undefined -> ct_util:get_verbosity('$unspecified'); @@ -531,50 +543,61 @@ 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), + Heading = + case proplists:get_value(heading, Opts) of + undefined -> atom_to_list(Category); + Hd -> Hd + end, + Str = lists:concat([get_header(Heading),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 end. -get_heading(default) -> +get_header("default") -> io_lib:format("\n-----------------------------" "-----------------------\n~s\n", [log_timestamp(?now)]); -get_heading(Category) -> +get_header(Heading) -> io_lib:format("\n-----------------------------" - "-----------------------\n~s ~w\n", - [log_timestamp(?now),Category]). + "-----------------------\n~s ~s\n", + [Heading,log_timestamp(?now)]). %%%----------------------------------------------------------------- %%% @spec tc_pal(Category,Format,Args) -> ok -%%% @equiv tc_pal(Category,?STD_IMPORTANCE,Format,Args) -> ok +%%% @equiv tc_pal(Category,?STD_IMPORTANCE,Format,Args,[]) -> ok tc_pal(Category,Format,Args) -> - tc_pal(Category,?STD_IMPORTANCE,Format,Args). + tc_pal(Category,?STD_IMPORTANCE,Format,Args,[]). %%%----------------------------------------------------------------- %%% @spec tc_pal(Category,Importance,Format,Args) -> ok +%%% @equiv tc_pal(Category,Importance,Format,Args,[]) -> ok +tc_pal(Category,Importance,Format,Args) -> + tc_pal(Category,Importance,Format,Args,[]). + +%%%----------------------------------------------------------------- +%%% @spec tc_pal(Category,Importance,Format,Args,Opts) -> ok %%% Category = atom() %%% Importance = integer() %%% Format = string() %%% Args = list() +%%% Opts = list() %%% %%% @doc Print and log from a testcase. %%% %%% <p>This function is called by <code>ct</code> when logging %%% stuff directly from a testcase. The info is written both in the %%% log and on the console.</p> -tc_pal(Category,Importance,Format,Args) -> - tc_print(Category,Importance,Format,Args), - cast({log,sync,self(),group_leader(),Category,Importance, - [{hd,div_header(Category),[]}, - {Format,Args}, - {ft,div_footer(),[]}], - true}), - ok. - +tc_pal(Category,Importance,Format,Args,Opts) -> + tc_print(Category,Importance,Format,Args,Opts), + tc_log(Category,Importance,"User",Format,Args,[esc_chars|Opts]). %%%----------------------------------------------------------------- %%% @spec ct_log(Category,Format,Args) -> ok @@ -603,9 +626,9 @@ int_footer() -> div_header(Class) -> div_header(Class,"User"). -div_header(Class,Printer) -> +div_header(Class,Heading) -> "\n</pre>\n<div class=\"" ++ atom_to_list(Class) ++ "\"><pre><b>*** " - ++ Printer ++ " " ++ log_timestamp(?now) ++ " ***</b>". + ++ Heading ++ " " ++ log_timestamp(?now) ++ " ***</b>". div_footer() -> "</pre></div>\n<pre>". @@ -679,7 +702,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 +710,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/common_test/src/test_server_gl.erl b/lib/common_test/src/test_server_gl.erl index 7d6fe64b92..4845b86dd3 100644 --- a/lib/common_test/src/test_server_gl.erl +++ b/lib/common_test/src/test_server_gl.erl @@ -24,7 +24,7 @@ %% through the test_server_io module/process. -module(test_server_gl). --export([start_link/0,stop/1,set_minor_fd/3,unset_minor_fd/1, +-export([start_link/1,stop/1,set_minor_fd/3,unset_minor_fd/1, get_tc_supervisor/1,print/4,set_props/2]). -export([init/1,handle_call/3,handle_cast/2,handle_info/2,terminate/2]). @@ -33,6 +33,7 @@ tc :: mfa() | 'undefined', %Current test case MFA minor :: 'none'|pid(), %Minor fd minor_monitor, %Monitor ref for minor fd + tsio_monitor, %Monitor red for controlling proc capture :: 'none'|pid(), %Capture output reject_io :: boolean(), %Reject I/O requests... permit_io, %... and exceptions @@ -45,8 +46,8 @@ %% Start a new group leader process. Only to be called by %% the test_server_io process. -start_link() -> - case gen_server:start_link(?MODULE, [], []) of +start_link(TSIO) -> + case gen_server:start_link(?MODULE, [TSIO], []) of {ok,Pid} -> {ok,Pid}; Other -> @@ -130,14 +131,16 @@ set_props(GL, PropList) -> %%% Internal functions. -init([]) -> +init([TSIO]) -> EscChars = case application:get_env(test_server, esc_chars) of {ok,ECBool} -> ECBool; _ -> true end, + Ref = erlang:monitor(process, TSIO), {ok,#st{tc_supervisor=none, minor=none, minor_monitor=none, + tsio_monitor=Ref, capture=none, reject_io=false, permit_io=gb_sets:empty(), @@ -176,6 +179,9 @@ handle_info({'DOWN',Ref,process,_,Reason}=D, #st{minor_monitor=Ref}=St) -> test_server_io:print_unexpected(Data) end, {noreply,St#st{minor=none,minor_monitor=none}}; +handle_info({'DOWN',Ref,process,_,_}, #st{tsio_monitor=Ref}=St) -> + %% controlling process (test_server_io) terminated, we're done + {stop,normal,St}; handle_info({permit_io,Pid}, #st{permit_io=P}=St) -> {noreply,St#st{permit_io=gb_sets:add(Pid, P)}}; handle_info({capture,Cap0}, St) -> diff --git a/lib/common_test/src/test_server_io.erl b/lib/common_test/src/test_server_io.erl index 3d5238052b..fdabf17b08 100644 --- a/lib/common_test/src/test_server_io.erl +++ b/lib/common_test/src/test_server_io.erl @@ -185,7 +185,7 @@ reset_state() -> init([]) -> process_flag(trap_exit, true), Empty = gb_trees:empty(), - {ok,Shared} = test_server_gl:start_link(), + {ok,Shared} = test_server_gl:start_link(self()), {ok,#st{fds=Empty,shared_gl=Shared,gls=gb_sets:empty(), io_buffering=gb_sets:empty(), buffered=Empty, @@ -200,7 +200,7 @@ req(Req) -> gen_server:call(?MODULE, Req, infinity). handle_call({get_gl,false}, _From, #st{gls=Gls,gl_props=Props}=St) -> - {ok,Pid} = test_server_gl:start_link(), + {ok,Pid} = test_server_gl:start_link(self()), test_server_gl:set_props(Pid, Props), {reply,Pid,St#st{gls=gb_sets:insert(Pid, Gls)}}; handle_call({get_gl,true}, _From, #st{shared_gl=Shared}=St) -> @@ -285,7 +285,7 @@ handle_call(reset_state, _From, #st{fds=Fds,tags=Tags,gls=Gls, ok end, Empty = gb_trees:empty(), - {ok,Shared} = test_server_gl:start_link(), + {ok,Shared} = test_server_gl:start_link(self()), {reply,ok,#st{fds=Empty,shared_gl=Shared,gls=gb_sets:empty(), io_buffering=gb_sets:empty(), buffered=Empty, diff --git a/lib/common_test/test/ct_log_SUITE.erl b/lib/common_test/test/ct_log_SUITE.erl index 9bdd44cbdf..93affda398 100644 --- a/lib/common_test/test/ct_log_SUITE.erl +++ b/lib/common_test/test/ct_log_SUITE.erl @@ -86,18 +86,7 @@ print(Config) -> io:format("5. Printing a pid: ~w~n", [Pid]), io:format("6. Printing HTML: <pre>~s</pre>~n", [String]), - %% --- API --- - %% pal(Format) -> - %% = ct:pal(default, 50, Format, []). - %% pal(X1, X2) -> ok - %% X1 = Category | Importance | Format - %% X2 = Format | FormatArgs - %% pal(X1, X2, X3) -> ok - %% X1 = Category | Importance - %% X2 = Importance | Format - %% X3 = Format | FormatArgs - %% pal(Category, Importance, Format, FormatArgs) -> ok - %% ------ + %% ct:pal ct:pal("1. Printing nothing"), ct:pal("2. Printing nothing", []), ct:pal("3. Printing a string: ~s", [String]), @@ -111,23 +100,16 @@ print(Config) -> ct:pal(50, "11. Printing with ~s", ["importance"]), ct:pal(ct_internal, 50, "12. Printing with ~s", ["category and importance"]), - %% --- API --- - %% log(Format) -> ok - %% = ct:log(default, 50, Format, [], []). - %% log(X1, X2) -> ok - %% X1 = Category | Importance | Format - %% X2 = Format | FormatArgs - %% log(X1, X2, X3) -> ok - %% X1 = Category | Importance - %% X2 = Importance | Format - %% X3 = Format | FormatArgs | Opts - %% log(X1, X2, X3, X4) -> ok - %% X1 = Category | Importance - %% X2 = Importance | Format - %% X3 = Format | FormatArgs - %% X4 = FormatArgs | Opts - %% log(Category, Importance, Format, FormatArgs, Opts) -> ok - %% ------ + ct:pal("13. Printing with heading", [], + [{heading,"This is a heading"}]), + ct:pal(ct_internal, "14. Printing with category and heading", [], + [{heading,"This is a heading"}]), + ct:pal(50, "15. Printing with importance and heading", [], + [{heading,"This is a heading"}]), + ct:pal(ct_internal, 50, "16. Printing with category, importance and heading", [], + [{heading,"This is a heading"}]), + + %% ct:log ct:log("1. Printing nothing"), ct:log("2. Printing nothing", []), ct:log("3. Printing a string: ~s", [String]), @@ -153,8 +135,37 @@ print(Config) -> ct:log(ct_internal, 50, "21. Printing a pid escaped with ~s, no_css: ~w", ["category and importance",Pid], [esc_chars,no_css]), + ct:log("22. Printing with heading", [], + [{heading,"This is a heading"}]), + ct:log(ct_internal, "23. Printing with category and heading", [], + [{heading,"This is a heading"}]), + ct:log(50, "24. Printing with importance and heading", [], + [{heading,"This is a heading"}]), + ct:log(ct_internal, 50, "25. Printing with category, importance and heading", [], + [{heading,"This is a heading"}]), + %% END mark ct:log("LOGGING END", [], [no_css]), + + + %% ct:print + ct:print("1. Does this show??"), + ct:print("2. Does this ~s", ["show??"]), + ct:print("3. Is this a non-html pid?? ~w", [self()]), + ct:print(ct_internal, "4. Printing with category"), + ct:print(ct_internal, "5. Printing with ~s", ["category"]), + ct:print(50, "6. Printing with importance"), + ct:print(50, "7. Printing with ~s", ["importance"]), + ct:print(ct_internal, 50, "8. Printing with ~s", ["category and importance"]), + ct:print("9. Printing with heading", [], + [{heading,"This is a heading"}]), + ct:print(ct_internal, "10. Printing with category and heading", [], + [{heading,"This is a heading"}]), + ct:print(50, "11. Printing with importance and heading", [], + [{heading,"This is a heading"}]), + ct:print(ct_internal, 50, "12. Printing with category, importance and heading", [], + [{heading,"This is a heading"}]), + {save_config,[{the_logfile,TcLogFile},{the_pid,Pid},{the_string,String}]}. @@ -169,6 +180,8 @@ verify(Config) -> {ok,Dev} = file:open(TcLogFile, [read]), ok = read_until(Dev, "LOGGING START\n"), + ct:pal("VERIFYING LOG ENTRIES...", []), + %% io:format match_line(Dev, "1. Printing nothing", []), read_nl(Dev), @@ -182,6 +195,7 @@ verify(Config) -> read_nl(Dev), match_line(Dev, "6. Printing HTML: <pre>~s</pre>", [String]), read_nl(Dev), + %% ct:pal read_header(Dev), match_line(Dev, "1. Printing nothing", []), @@ -219,6 +233,19 @@ verify(Config) -> read_header(Dev, "\"ct_internal\""), match_line(Dev, "12. Printing with ~s", ["category and importance"]), read_footer(Dev), + read_header(Dev, "\"default\"", "This is a heading"), + match_line(Dev, "13. Printing with heading", []), + read_footer(Dev), + read_header(Dev, "\"ct_internal\"", "This is a heading"), + match_line(Dev, "14. Printing with category and heading", []), + read_footer(Dev), + read_header(Dev, "\"default\"", "This is a heading"), + match_line(Dev, "15. Printing with importance and heading", []), + read_footer(Dev), + read_header(Dev, "\"ct_internal\"", "This is a heading"), + match_line(Dev, "16. Printing with category, importance and heading", []), + read_footer(Dev), + %% ct:log read_header(Dev), match_line(Dev, "1. Printing nothing", []), @@ -275,7 +302,18 @@ verify(Config) -> read_footer(Dev), match_line(Dev, "21. Printing a pid escaped with ~s, no_css: ~s", ["category and importance",EscPid]), - + read_header(Dev, "\"default\"", "This is a heading"), + match_line(Dev, "22. Printing with heading", []), + read_footer(Dev), + read_header(Dev, "\"ct_internal\"", "This is a heading"), + match_line(Dev, "23. Printing with category and heading", []), + read_footer(Dev), + read_header(Dev, "\"default\"", "This is a heading"), + match_line(Dev, "24. Printing with importance and heading", []), + read_footer(Dev), + read_header(Dev, "\"ct_internal\"", "This is a heading"), + match_line(Dev, "25. Printing with category, importance and heading", []), + read_footer(Dev), file:close(Dev), ok. @@ -298,29 +336,51 @@ read_until(Dev, Pat) -> match_line(Dev, Format, Args) -> Pat = lists:flatten(io_lib:format(Format, Args)), Line = element(2, file:read_line(Dev)), + + %% for debugging purposes: + ct:pal("L: ~tp", [Line], [no_css]), + case re:run(Line, Pat) of {match,_} -> ok; nomatch -> - ct:pal("ERROR! No match for ~p.\nLine = ~p", [Pat,Line]), + ct:pal("ERROR! No match for ~p", [Pat]), file:close(Dev), ct:fail({mismatch,Pat,Line}) end. read_header(Dev) -> - read_header(Dev, "\"default\""). + read_header(Dev, "\"default\"", "User"). read_header(Dev, Cat) -> + read_header(Dev, Cat, "User"). + +read_header(Dev, Cat, Heading) -> file:read_line(Dev), % \n "</pre>\n" = element(2, file:read_line(Dev)), - {match,_} = - re:run(element(2, file:read_line(Dev)), "<div class="++Cat++"><pre><b>" - "\\*\\*\\* User \\d{4}-\\d{2}-\\d{2} " - "\\d{2}:\\d{2}:\\d{2}.\\d{1,} \\*\\*\\*</b>"). + {ok,Hd} = file:read_line(Dev), + + %% for debugging purposes: + ct:pal("H: ~tp", [Hd], [no_css]), + + Pat = "<div class="++Cat++"><pre><b>"++ + "\\*\\*\\* "++Heading++" \\d{4}-\\d{2}-\\d{2} "++ + "\\d{2}:\\d{2}:\\d{2}.\\d{1,} \\*\\*\\*</b>", + + case re:run(Hd, Pat) of + {match,_} -> + ok; + _ -> + ct:pal("ERROR! No match for ~p", [Pat]), + file:close(Dev), + ct:fail({mismatch,Pat,Hd}) + end. read_footer(Dev) -> "</pre></div>\n" = element(2, file:read_line(Dev)), - "<pre>\n" = element(2, file:read_line(Dev)). + "<pre>\n" = element(2, file:read_line(Dev)), + %% for debugging purposes: + ct:pal("F: </pre></div><pre>", [], [no_css]). read_nl(Dev) -> file:read_line(Dev). diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index e951a25e04..97d63d399a 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -684,7 +684,7 @@ kernel_passes() -> {iff,core,?pass(save_core_code)}, %% Kernel Erlang and code generation. - {pass,v3_kernel}, + ?pass(v3_kernel), {iff,dkern,{listing,"kernel"}}, {iff,'to_kernel',{done,"kernel"}}, {pass,v3_life}, @@ -1241,6 +1241,17 @@ core_fold_module_after_inlining(#compile{code=Code0,options=Opts}=St) -> {ok,Code,_Ws} = sys_core_fold:module(Code0, Opts), {ok,St#compile{code=Code}}. +v3_kernel(#compile{code=Code0,options=Opts,warnings=Ws0}=St) -> + {ok,Code,Ws} = v3_kernel:module(Code0, Opts), + case Ws =:= [] orelse test_core_inliner(St) of + false -> + {ok,St#compile{code=Code,warnings=Ws0++Ws}}; + true -> + %% cerl_inline may produce code that generates spurious + %% warnings. Ignore any such warnings. + {ok,St#compile{code=Code}} + end. + test_old_inliner(#compile{options=Opts}) -> %% The point of this test is to avoid loading the old inliner %% if we know that it will not be used. 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/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl index f884e6e7d6..ff9bddc1e2 100644 --- a/lib/compiler/test/warnings_SUITE.erl +++ b/lib/compiler/test/warnings_SUITE.erl @@ -42,7 +42,7 @@ comprehensions/1,maps/1,maps_bin_opt_info/1, redundant_boolean_clauses/1, latin1_fallback/1,underscore/1,no_warnings/1, - bit_syntax/1]). + bit_syntax/1,inlining/1]). init_per_testcase(_Case, Config) -> Config. @@ -65,7 +65,7 @@ groups() -> bin_opt_info,bin_construction,comprehensions,maps, maps_bin_opt_info, redundant_boolean_clauses,latin1_fallback, - underscore,no_warnings,bit_syntax]}]. + underscore,no_warnings,bit_syntax,inlining]}]. init_per_suite(Config) -> Config. @@ -823,6 +823,30 @@ bit_syntax(Config) -> run(Config, Ts), ok. +inlining(Config) -> + %% Make sure that no spurious warnings are generated + %% when inlining. + Ts = [{inlining_1, + <<"-compile(inline). + compute1(X) -> add(X, 0). + add(1, 0) -> 1; + add(1, Y) -> 1 + Y; + add(X, Y) -> X + Y. + ">>, + [], + []}, + {inlining_2, + <<"-compile({inline,[add/2]}). + compute1(X) -> add(X, 0). + add(1, 0) -> 1; + add(1, Y) -> 1 + Y; + add(X, Y) -> X + Y. + ">>, + [], + []} + ], + run(Config, Ts), + ok. %%% %%% End of test cases. diff --git a/lib/dialyzer/RELEASE_NOTES b/lib/dialyzer/RELEASE_NOTES index 4e311bb543..2457faa07a 100644 --- a/lib/dialyzer/RELEASE_NOTES +++ b/lib/dialyzer/RELEASE_NOTES @@ -135,7 +135,7 @@ Version 1.9.1 (in Erlang/OTP R13B) Version 1.9.0 (in Erlang/OTP R13A) ---------------------------------- - The analysis accepts opaque type declarations and detects violations of - opaqueness of terms of such types. Starting with R13, many Erlang/OTP + opacity of terms of such types. Starting with R13, many Erlang/OTP standard libraries (array, dict, digraph, ets, gb_sets, gb_trees, queue, and sets) contain opaque type declarations of their main data types. Dialyzer will spit out warnings in code that explicitly depends on the diff --git a/lib/dialyzer/doc/manual.txt b/lib/dialyzer/doc/manual.txt index be1fd2f8bc..a571cd2e2b 100644 --- a/lib/dialyzer/doc/manual.txt +++ b/lib/dialyzer/doc/manual.txt @@ -255,7 +255,7 @@ Warning options: -Wno_match Suppress warnings for patterns that are unused or cannot match. -Wno_opaque - Suppress warnings for violations of opaqueness of data types. + Suppress warnings for violations of opacity of data types. -Wunmatched_returns *** Include warnings for function calls which ignore a structured return value or do not match against one of many possible return value(s). diff --git a/lib/dialyzer/doc/src/dialyzer.xml b/lib/dialyzer/doc/src/dialyzer.xml index 553bfef41b..4b7eb4ad68 100644 --- a/lib/dialyzer/doc/src/dialyzer.xml +++ b/lib/dialyzer/doc/src/dialyzer.xml @@ -346,7 +346,7 @@ dialyzer --plts plt_1 ... plt_n -- files_to_analyze</code> </item> <tag><c>-Wno_opaque</c></tag> <item> - <p>Suppress warnings for violations of opaqueness of data types.</p> + <p>Suppress warnings for violations of opacity of data types.</p> </item> <tag><c>-Wno_return</c></tag> <item> diff --git a/lib/dialyzer/doc/src/notes.xml b/lib/dialyzer/doc/src/notes.xml index b0f0a9aef0..d86deba48d 100644 --- a/lib/dialyzer/doc/src/notes.xml +++ b/lib/dialyzer/doc/src/notes.xml @@ -522,7 +522,7 @@ or modifying opaque types within the scope of a module. </p> <p> Hitherto the shape of terms (tuple, list, etc.) has been used to determine the opaque terms, but now the - contracts are used for decorating types with opaqueness. + contracts are used for decorating types with opacity. </p> <p> Own Id: OTP-10397</p> @@ -1505,7 +1505,7 @@ <list> <item> <p>The analysis accepts opaque type declarations and - detects violations of opaqueness of terms of such types. + detects violations of opacity of terms of such types. Starting with R13, many Erlang/OTP standard libraries (array, dict, digraph, ets, gb_sets, gb_trees, queue, and sets) contain opaque type declarations of their main data diff --git a/lib/dialyzer/src/dialyzer.erl b/lib/dialyzer/src/dialyzer.erl index 7f86520c06..d25ffd02a2 100644 --- a/lib/dialyzer/src/dialyzer.erl +++ b/lib/dialyzer/src/dialyzer.erl @@ -2,7 +2,7 @@ %%----------------------------------------------------------------------- %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2006-2015. All Rights Reserved. +%% Copyright Ericsson AB 2006-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. @@ -407,6 +407,10 @@ message_to_string({contract_range, [Contract, M, F, ArgStrings, Line, CRet]}) -> message_to_string({invalid_contract, [M, F, A, Sig]}) -> io_lib:format("Invalid type specification for function ~w:~w/~w." " The success typing is ~s\n", [M, F, A, Sig]); +message_to_string({contract_with_opaque, [M, F, A, OpaqueType, SigType]}) -> + io_lib:format("The specification for ~w:~w/~w" + " has an opaque subtype ~s which is violated by the" + " success typing ~s\n", [M, F, A, OpaqueType, SigType]); message_to_string({extra_range, [M, F, A, ExtraRanges, SigRange]}) -> io_lib:format("The specification for ~w:~w/~w states that the function" " might also return ~s but the inferred return is ~s\n", @@ -432,25 +436,25 @@ message_to_string({opaque_guard, [Arg1, Infix, Arg2, ArgNs]}) -> io_lib:format("Guard test ~s ~s ~s contains ~s\n", [Arg1, Infix, Arg2, form_positions(ArgNs)]); message_to_string({opaque_guard, [Guard, Args]}) -> - io_lib:format("Guard test ~w~s breaks the opaqueness of its argument\n", + io_lib:format("Guard test ~w~s breaks the opacity of its argument\n", [Guard, Args]); message_to_string({opaque_match, [Pat, OpaqueType, OpaqueTerm]}) -> Term = if OpaqueType =:= OpaqueTerm -> "the term"; true -> OpaqueTerm end, io_lib:format("The attempt to match a term of type ~s against the ~s" - " breaks the opaqueness of ~s\n", [OpaqueType, Pat, Term]); + " breaks the opacity of ~s\n", [OpaqueType, Pat, Term]); message_to_string({opaque_neq, [Type, _Op, OpaqueType]}) -> io_lib:format("Attempt to test for inequality between a term of type ~s" " and a term of opaque type ~s\n", [Type, OpaqueType]); message_to_string({opaque_type_test, [Fun, Args, Arg, ArgType]}) -> - io_lib:format("The type test ~s~s breaks the opaqueness of the term ~s~s\n", + io_lib:format("The type test ~s~s breaks the opacity of the term ~s~s\n", [Fun, Args, Arg, ArgType]); message_to_string({opaque_size, [SizeType, Size]}) -> - io_lib:format("The size ~s breaks the opaqueness of ~s\n", + io_lib:format("The size ~s breaks the opacity of ~s\n", [SizeType, Size]); message_to_string({opaque_call, [M, F, Args, Culprit, OpaqueType]}) -> - io_lib:format("The call ~s:~s~s breaks the opaqueness of the term ~s :: ~s\n", + io_lib:format("The call ~s:~s~s breaks the opacity of the term ~s :: ~s\n", [M, F, Args, Culprit, OpaqueType]); %%----- Warnings for concurrency errors -------------------- message_to_string({race_condition, [M, F, Args, Reason]}) -> 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_cl_parse.erl b/lib/dialyzer/src/dialyzer_cl_parse.erl index 934351aeeb..f668b81cd3 100644 --- a/lib/dialyzer/src/dialyzer_cl_parse.erl +++ b/lib/dialyzer/src/dialyzer_cl_parse.erl @@ -2,7 +2,7 @@ %%----------------------------------------------------------------------- %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2006-2015. All Rights Reserved. +%% Copyright Ericsson AB 2006-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. @@ -510,7 +510,7 @@ warning_options_msg() -> -Wno_match Suppress warnings for patterns that are unused or cannot match. -Wno_opaque - Suppress warnings for violations of opaqueness of data types. + Suppress warnings for violations of opacity of data types. -Wno_fail_call Suppress warnings for failing calls. -Wno_contracts diff --git a/lib/dialyzer/src/dialyzer_contracts.erl b/lib/dialyzer/src/dialyzer_contracts.erl index a72368f9f8..73b04b305b 100644 --- a/lib/dialyzer/src/dialyzer_contracts.erl +++ b/lib/dialyzer/src/dialyzer_contracts.erl @@ -232,7 +232,7 @@ check_contract(#contract{contracts = Contracts}, SuccType, Opaques) -> error -> {error, {overlapping_contract, []}}; ok -> - InfList = [erl_types:t_inf(Contract, SuccType, Opaques) + InfList = [{Contract, erl_types:t_inf(Contract, SuccType, Opaques)} || Contract <- Contracts2], case check_contract_inf_list(InfList, SuccType, Opaques) of {error, _} = Invalid -> Invalid; @@ -256,10 +256,21 @@ check_domains([Dom|Doms]) -> %% Allow a contract if one of the overloaded contracts is possible. %% We used to be more strict, e.g., all overloaded contracts had to be %% possible. -check_contract_inf_list([FunType|Left], SuccType, Opaques) -> +check_contract_inf_list(List, SuccType, Opaques) -> + case check_contract_inf_list(List, SuccType, Opaques, []) of + ok -> ok; + {error, []} -> {error, invalid_contract}; + {error, [{SigRange, ContrRange}|_]} -> + case erl_types:t_find_opaque_mismatch(SigRange, ContrRange, Opaques) of + error -> {error, invalid_contract}; + {ok, _T1, T2} -> {error, {opaque_mismatch, T2}} + end + end. + +check_contract_inf_list([{Contract, FunType}|Left], SuccType, Opaques, OM) -> FunArgs = erl_types:t_fun_args(FunType), case lists:any(fun erl_types:t_is_none_or_unit/1, FunArgs) of - true -> check_contract_inf_list(Left, SuccType, Opaques); + true -> check_contract_inf_list(Left, SuccType, Opaques, OM); false -> STRange = erl_types:t_fun_range(SuccType), case erl_types:t_is_none_or_unit(STRange) of @@ -267,13 +278,16 @@ check_contract_inf_list([FunType|Left], SuccType, Opaques) -> false -> Range = erl_types:t_fun_range(FunType), case erl_types:t_is_none(erl_types:t_inf(STRange, Range)) of - true -> check_contract_inf_list(Left, SuccType, Opaques); + true -> + CR = erl_types:t_fun_range(Contract), + NewOM = [{STRange, CR}|OM], + check_contract_inf_list(Left, SuccType, Opaques, NewOM); false -> ok end end end; -check_contract_inf_list([], _SuccType, _Opaques) -> - {error, invalid_contract}. +check_contract_inf_list([], _SuccType, _Opaques, OM) -> + {error, OM}. check_extraneous([], _SuccType) -> ok; check_extraneous([C|Cs], SuccType) -> @@ -687,6 +701,9 @@ get_invalid_contract_warnings_funs([{MFA, {FileLine, Contract, _Xtra}}|Left], case check_contract(Contract, Sig, Opaques) of {error, invalid_contract} -> [invalid_contract_warning(MFA, WarningInfo, Sig, RecDict)|Acc]; + {error, {opaque_mismatch, T2}} -> + W = contract_opaque_warning(MFA, WarningInfo, T2, Sig, RecDict), + [W|Acc]; {error, {overlapping_contract, []}} -> [overlapping_contract_warning(MFA, WarningInfo)|Acc]; {error, {extra_range, ExtraRanges, STRange}} -> @@ -740,6 +757,12 @@ invalid_contract_warning({M, F, A}, WarningInfo, SuccType, RecDict) -> SuccTypeStr = dialyzer_utils:format_sig(SuccType, RecDict), {?WARN_CONTRACT_TYPES, WarningInfo, {invalid_contract, [M, F, A, SuccTypeStr]}}. +contract_opaque_warning({M, F, A}, WarningInfo, OpType, SuccType, RecDict) -> + OpaqueStr = erl_types:t_to_string(OpType), + SuccTypeStr = dialyzer_utils:format_sig(SuccType, RecDict), + {?WARN_CONTRACT_TYPES, WarningInfo, + {contract_with_opaque, [M, F, A, OpaqueStr, SuccTypeStr]}}. + overlapping_contract_warning({M, F, A}, WarningInfo) -> {?WARN_CONTRACT_TYPES, WarningInfo, {overlapping_contract, [M, F, A]}}. diff --git a/lib/dialyzer/src/dialyzer_dataflow.erl b/lib/dialyzer/src/dialyzer_dataflow.erl index 963c953447..639ed426df 100644 --- a/lib/dialyzer/src/dialyzer_dataflow.erl +++ b/lib/dialyzer/src/dialyzer_dataflow.erl @@ -1211,7 +1211,7 @@ handle_tuple(Tree, Map, State) -> TagVal = cerl:atom_val(Tag), case state__lookup_record(TagVal, length(Left), State1) of error -> {State1, Map1, TupleType}; - {ok, RecType} -> + {ok, RecType, FieldNames} -> InfTupleType = t_inf(RecType, TupleType), case t_is_none(InfTupleType) of true -> @@ -1232,10 +1232,13 @@ handle_tuple(Tree, Map, State) -> Tree, Msg), {State2, Map1, t_none()}; {error, opaque, ErrorPat, ErrorType, OpaqueType} -> + OpaqueStr = format_type(OpaqueType, State1), + Name = field_name(Elements, ErrorPat, FieldNames), Msg = {opaque_match, - [format_patterns(ErrorPat), - format_type(ErrorType, State1), - format_type(OpaqueType, State1)]}, + ["record field" ++ Name ++ + " declared to be of type " ++ + format_type(ErrorType, State1), + OpaqueStr, OpaqueStr]}, State2 = state__add_warning(State1, ?WARN_OPAQUE, Tree, Msg), {State2, Map1, t_none()}; @@ -1252,6 +1255,15 @@ handle_tuple(Tree, Map, State) -> end end. +field_name(Elements, ErrorPat, FieldNames) -> + try + [Pat] = ErrorPat, + Take = lists:takewhile(fun(X) -> X =/= Pat end, Elements), + " " ++ format_atom(lists:nth(length(Take), FieldNames)) + catch + _:_ -> "" + end. + %%---------------------------------------- %% Clauses %% @@ -1632,7 +1644,7 @@ bind_pat_vars([Pat|PatLeft], [Type|TypeLeft], Acc, Map, State, Rev) -> TagAtom = cerl:atom_val(Tag), case state__lookup_record(TagAtom, length(Left), State) of error -> {false, t_tuple(length(Es))}; - {ok, Record} -> + {ok, Record, _FieldNames} -> [_Head|AnyTail] = [t_any() || _ <- Es], UntypedRecord = t_tuple([t_atom(TagAtom)|AnyTail]), {not t_is_equal(Record, UntypedRecord), Record} @@ -2160,7 +2172,7 @@ handle_guard_is_record(Guard, Map, Env, Eval, State) -> TupleType = case state__lookup_record(Tag, ArityMin1, State) of error -> Tuple; - {ok, Prototype} -> Prototype + {ok, Prototype, _FieldNames} -> Prototype end, Type = t_inf(TupleType, RecType, State#state.opaques), case t_is_none(Type) of @@ -2610,7 +2622,7 @@ bind_guard_case_clauses(Arg, Clauses, Map0, Env, Eval, State) -> Map = join_maps_begin(Map0), {GenMap, GenArgType} = bind_guard(Arg, Map, Env, dont_know, State), bind_guard_case_clauses(GenArgType, GenMap, Arg, Clauses1, Map, Env, Eval, - t_none(), [], State). + t_none(), [], [], State). filter_fail_clauses([Clause|Left]) -> case (cerl:clause_pats(Clause) =:= []) of @@ -2629,7 +2641,7 @@ filter_fail_clauses([]) -> []. bind_guard_case_clauses(GenArgType, GenMap, ArgExpr, [Clause|Left], - Map, Env, Eval, AccType, AccMaps, State) -> + Map, Env, Eval, AccType, AccMaps, Throws, State) -> Pats = cerl:clause_pats(Clause), {NewMap0, ArgType} = case Pats of @@ -2673,9 +2685,9 @@ bind_guard_case_clauses(GenArgType, GenMap, ArgExpr, [Clause|Left], case (NewMap1 =:= none) orelse t_is_none(GenArgType) of true -> bind_guard_case_clauses(NewGenArgType, GenMap, ArgExpr, Left, Map, Env, - Eval, AccType, AccMaps, State); + Eval, AccType, AccMaps, Throws, State); false -> - {NewAccType, NewAccMaps} = + {NewAccType, NewAccMaps, NewThrows} = try {NewMap2, GuardType} = bind_guard(Guard, NewMap1, Env, pos, State), case t_is_none(t_inf(t_atom(true), GuardType)) of @@ -2699,17 +2711,26 @@ bind_guard_case_clauses(GenArgType, GenMap, ArgExpr, [Clause|Left], dont_know -> ok end, - {t_sup(AccType, CType), [NewMap3|AccMaps]} + {t_sup(AccType, CType), [NewMap3|AccMaps], Throws} catch - throw:{fail, _What} -> {AccType, AccMaps} + throw:{fail, Reason} -> + Throws1 = case Reason of + none -> Throws; + _ -> Throws ++ [Reason] + end, + {AccType, AccMaps, Throws1} end, bind_guard_case_clauses(NewGenArgType, GenMap, ArgExpr, Left, Map, Env, - Eval, NewAccType, NewAccMaps, State) + Eval, NewAccType, NewAccMaps, NewThrows, State) end; bind_guard_case_clauses(_GenArgType, _GenMap, _ArgExpr, [], Map, _Env, _Eval, - AccType, AccMaps, _State) -> + AccType, AccMaps, Throws, _State) -> case t_is_none(AccType) of - true -> throw({fail, none}); + true -> + case Throws of + [Throw|_] -> throw({fail, Throw}); + [] -> throw({fail, none}) + end; false -> {join_maps_end(AccMaps, Map), AccType} end. @@ -3207,7 +3228,8 @@ state__lookup_record(Tag, Arity, #state{records = Records}) -> RecType = t_tuple([t_atom(Tag)| [FieldType || {_FieldName, _Abstr, FieldType} <- Fields]]), - {ok, RecType}; + FieldNames = [FieldName || {FieldName, _Abstr, _FieldType} <- Fields], + {ok, RecType, FieldNames}; error -> error end. @@ -3660,6 +3682,9 @@ map_pats(Pats) -> fold_literals(TreeList) -> [cerl:fold_literal(Tree) || Tree <- TreeList]. +format_atom(A) -> + format_cerl(cerl:c_atom(A)). + type(Tree) -> Folded = cerl:fold_literal(Tree), case cerl:type(Folded) of diff --git a/lib/dialyzer/src/dialyzer_gui_wx.erl b/lib/dialyzer/src/dialyzer_gui_wx.erl index 30d2bdeca4..4caf64d007 100644 --- a/lib/dialyzer/src/dialyzer_gui_wx.erl +++ b/lib/dialyzer/src/dialyzer_gui_wx.erl @@ -2,7 +2,7 @@ %%------------------------------------------------------------------------ %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2009-2015. All Rights Reserved. +%% Copyright Ericsson AB 2009-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. @@ -310,7 +310,7 @@ createWarningsMenu() -> addCheckedItem(WarningsMenu, ?menuID_WARN_FAIL_FUN_CALLS, "Failing function calls"), addCheckedItem(WarningsMenu, ?menuID_WARN_BAD_FUN, "Bad fun applications"), - addCheckedItem(WarningsMenu, ?menuID_WARN_OPAQUE, "Opaqueness violations"), + addCheckedItem(WarningsMenu, ?menuID_WARN_OPAQUE, "Opacity violations"), addCheckedItem(WarningsMenu, ?menuID_WARN_LIST_CONSTR, "Improper list constructions"), addCheckedItem(WarningsMenu, ?menuID_WARN_UNUSED_FUN, "Unused functions"), 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/map_SUITE_data/results/map_in_guard2 b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2 index f6fb98a863..46e2e8d36c 100644 --- a/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2 +++ b/lib/dialyzer/test/map_SUITE_data/results/map_in_guard2 @@ -2,11 +2,11 @@ map_in_guard2.erl:10: The call map_in_guard2:assoc_guard_clause('not_a_map') will never return since it differs in the 1st argument from the success typing arguments: (map()) map_in_guard2.erl:12: The pattern 'true' can never match the type 'false' map_in_guard2.erl:14: The call map_in_guard2:exact_guard_clause(#{}) will never return since it differs in the 1st argument from the success typing arguments: (#{'a':=_, _=>_}) -map_in_guard2.erl:17: Clause guard cannot succeed. The variable M was matched against the type 'not_a_map' +map_in_guard2.erl:17: Guard test is_map(M::'not_a_map') can never succeed map_in_guard2.erl:20: Function assoc_update/1 has no local return map_in_guard2.erl:20: Guard test is_map(M::'not_a_map') can never succeed -map_in_guard2.erl:22: Clause guard cannot succeed. The variable M was matched against the type 'not_a_map' map_in_guard2.erl:22: Function assoc_guard_clause/1 has no local return +map_in_guard2.erl:22: Guard test is_map(M::'not_a_map') can never succeed map_in_guard2.erl:24: Clause guard cannot succeed. The variable M was matched against the type #{} map_in_guard2.erl:27: Clause guard cannot succeed. The variable M was matched against the type #{} map_in_guard2.erl:27: Function exact_guard_clause/1 has no local return diff --git a/lib/dialyzer/test/map_SUITE_data/results/opaque_key b/lib/dialyzer/test/map_SUITE_data/results/opaque_key index fb7080cdc5..2ae0e0c5c6 100644 --- a/lib/dialyzer/test/map_SUITE_data/results/opaque_key +++ b/lib/dialyzer/test/map_SUITE_data/results/opaque_key @@ -6,10 +6,10 @@ opaque_key_adt.erl:59: Invalid type specification for function opaque_key_adt:sm opaque_key_use.erl:13: The test opaque_key_use:t() =:= opaque_key_use:t(integer()) can never evaluate to 'true' opaque_key_use.erl:24: Attempt to test for equality between a term of type opaque_key_adt:t(integer()) and a term of opaque type opaque_key_adt:t() opaque_key_use.erl:37: Function adt_mm1/0 has no local return -opaque_key_use.erl:40: The attempt to match a term of type opaque_key_adt:m() against the pattern #{A:=R} breaks the opaqueness of the term +opaque_key_use.erl:40: The attempt to match a term of type opaque_key_adt:m() against the pattern #{A:=R} breaks the opacity of the term opaque_key_use.erl:48: Function adt_mu1/0 has no local return -opaque_key_use.erl:51: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument +opaque_key_use.erl:51: Guard test is_map(M::opaque_key_adt:m()) breaks the opacity of its argument opaque_key_use.erl:53: Function adt_mu2/0 has no local return -opaque_key_use.erl:56: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument +opaque_key_use.erl:56: Guard test is_map(M::opaque_key_adt:m()) breaks the opacity of its argument opaque_key_use.erl:58: Function adt_mu3/0 has no local return -opaque_key_use.erl:60: Guard test is_map(M::opaque_key_adt:m()) breaks the opaqueness of its argument +opaque_key_use.erl:60: Guard test is_map(M::opaque_key_adt:m()) breaks the opacity of its argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/array b/lib/dialyzer/test/opaque_SUITE_data/results/array index 9921b61669..6f1aa1ce3d 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/array +++ b/lib/dialyzer/test/opaque_SUITE_data/results/array @@ -1,3 +1,3 @@ -array_use.erl:12: The type test is_tuple(array:array(_)) breaks the opaqueness of the term array:array(_) -array_use.erl:9: The attempt to match a term of type array:array(_) against the pattern {'array', _, _, 'undefined', _} breaks the opaqueness of the term +array_use.erl:12: The type test is_tuple(array:array(_)) breaks the opacity of the term array:array(_) +array_use.erl:9: The attempt to match a term of type array:array(_) against the pattern {'array', _, _, 'undefined', _} breaks the opacity of the term diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/dict b/lib/dialyzer/test/opaque_SUITE_data/results/dict index 42f6663191..3f8242c72d 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/dict +++ b/lib/dialyzer/test/opaque_SUITE_data/results/dict @@ -1,15 +1,15 @@ -dict_use.erl:41: The attempt to match a term of type dict:dict(_,_) against the pattern 'gazonk' breaks the opaqueness of the term -dict_use.erl:45: The attempt to match a term of type dict:dict(_,_) against the pattern [] breaks the opaqueness of the term -dict_use.erl:46: The attempt to match a term of type dict:dict(_,_) against the pattern 42 breaks the opaqueness of the term -dict_use.erl:51: The attempt to match a term of type dict:dict(_,_) against the pattern [] breaks the opaqueness of the term -dict_use.erl:52: The attempt to match a term of type dict:dict(_,_) against the pattern 42 breaks the opaqueness of the term +dict_use.erl:41: The attempt to match a term of type dict:dict(_,_) against the pattern 'gazonk' breaks the opacity of the term +dict_use.erl:45: The attempt to match a term of type dict:dict(_,_) against the pattern [] breaks the opacity of the term +dict_use.erl:46: The attempt to match a term of type dict:dict(_,_) against the pattern 42 breaks the opacity of the term +dict_use.erl:51: The attempt to match a term of type dict:dict(_,_) against the pattern [] breaks the opacity of the term +dict_use.erl:52: The attempt to match a term of type dict:dict(_,_) against the pattern 42 breaks the opacity of the term dict_use.erl:58: Attempt to test for equality between a term of type maybe_improper_list() and a term of opaque type dict:dict(_,_) dict_use.erl:60: Attempt to test for inequality between a term of type atom() and a term of opaque type dict:dict(_,_) -dict_use.erl:64: Guard test length(D::dict:dict(_,_)) breaks the opaqueness of its argument -dict_use.erl:65: Guard test is_atom(D::dict:dict(_,_)) breaks the opaqueness of its argument -dict_use.erl:66: Guard test is_list(D::dict:dict(_,_)) breaks the opaqueness of its argument -dict_use.erl:70: The type test is_list(dict:dict(_,_)) breaks the opaqueness of the term dict:dict(_,_) +dict_use.erl:64: Guard test length(D::dict:dict(_,_)) breaks the opacity of its argument +dict_use.erl:65: Guard test is_atom(D::dict:dict(_,_)) breaks the opacity of its argument +dict_use.erl:66: Guard test is_list(D::dict:dict(_,_)) breaks the opacity of its argument +dict_use.erl:70: The type test is_list(dict:dict(_,_)) breaks the opacity of the term dict:dict(_,_) dict_use.erl:73: The call dict:fetch('foo',[1 | 2 | 3,...]) does not have an opaque term of type dict:dict(_,_) as 2nd argument dict_use.erl:76: The call dict:merge(Fun::any(),42,[1 | 2,...]) does not have opaque terms as 2nd and 3rd arguments dict_use.erl:79: The call dict:store(42,'elli',{'dict',0,16,16,8,80,48,{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]},{{[],[],[],[],[],[],[],[],[],[],[],[],[],[],[],[]}}}) does not have an opaque term of type dict:dict(_,_) as 3rd argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/ets b/lib/dialyzer/test/opaque_SUITE_data/results/ets index e11c7a8352..5dde23fb15 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/ets +++ b/lib/dialyzer/test/opaque_SUITE_data/results/ets @@ -1,4 +1,4 @@ -ets_use.erl:12: Guard test is_integer(T::atom() | ets:tid()) breaks the opaqueness of its argument -ets_use.erl:20: The type test is_integer(atom() | ets:tid()) breaks the opaqueness of the term atom() | ets:tid() -ets_use.erl:7: Guard test is_integer(T::ets:tid()) breaks the opaqueness of its argument +ets_use.erl:12: Guard test is_integer(T::atom() | ets:tid()) breaks the opacity of its argument +ets_use.erl:20: The type test is_integer(atom() | ets:tid()) breaks the opacity of the term atom() | ets:tid() +ets_use.erl:7: Guard test is_integer(T::ets:tid()) breaks the opacity of its argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue index 1f25a6f9c3..67999b0e20 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/my_queue +++ b/lib/dialyzer/test/opaque_SUITE_data/results/my_queue @@ -1,7 +1,7 @@ my_queue_use.erl:15: The call my_queue_adt:is_empty([]) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument my_queue_use.erl:19: The call my_queue_adt:add(42,Q0::[]) does not have an opaque term of type my_queue_adt:my_queue() as 2nd argument -my_queue_use.erl:24: The attempt to match a term of type my_queue_adt:my_queue() against the pattern [42 | Q2] breaks the opaqueness of the term +my_queue_use.erl:24: The attempt to match a term of type my_queue_adt:my_queue() against the pattern [42 | Q2] breaks the opacity of the term my_queue_use.erl:30: Attempt to test for equality between a term of type [] and a term of opaque type my_queue_adt:my_queue() my_queue_use.erl:34: Cons will produce an improper list since its 2nd argument is my_queue_adt:my_queue() my_queue_use.erl:34: The call my_queue_adt:dequeue(nonempty_maybe_improper_list(42,my_queue_adt:my_queue())) does not have an opaque term of type my_queue_adt:my_queue() as 1st argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/opaque b/lib/dialyzer/test/opaque_SUITE_data/results/opaque index 5747f9061f..864e0d853c 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/opaque +++ b/lib/dialyzer/test/opaque_SUITE_data/results/opaque @@ -1,3 +1,3 @@ opaque_bug3.erl:19: The pattern 'a' can never match the type #c{} -opaque_bug4.erl:20: The attempt to match a term of type opaque_adt:abc() against the pattern 'a' breaks the opaqueness of the term +opaque_bug4.erl:20: The attempt to match a term of type opaque_adt:abc() against the pattern 'a' breaks the opacity of the term diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/para b/lib/dialyzer/test/opaque_SUITE_data/results/para index b23d0cae3a..37b5b7b44e 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/para +++ b/lib/dialyzer/test/opaque_SUITE_data/results/para @@ -16,9 +16,9 @@ para2.erl:88: The test para2:circ(integer()) =:= para2:circ(integer(),integer()) para3.erl:28: Invalid type specification for function para3:ot2/0. The success typing is () -> 'foo' para3.erl:36: The pattern {{{17}}} can never match the type {{{{{{_,_,_,_,_}}}}}} para3.erl:55: Invalid type specification for function para3:t2/0. The success typing is () -> 'foo' -para3.erl:65: The attempt to match a term of type {{{{{para3_adt:ot1(_,_,_,_,_)}}}}} against the pattern {{{{{17}}}}} breaks the opaqueness of para3_adt:ot1(_,_,_,_,_) +para3.erl:65: The attempt to match a term of type {{{{{para3_adt:ot1(_,_,_,_,_)}}}}} against the pattern {{{{{17}}}}} breaks the opacity of para3_adt:ot1(_,_,_,_,_) para3.erl:68: The pattern {{{{17}}}} can never match the type {{{{{para3_adt:ot1(_,_,_,_,_)}}}}} -para3.erl:74: Invalid type specification for function para3:exp_adt/0. The success typing is () -> 3 +para3.erl:74: The specification for para3:exp_adt/0 has an opaque subtype para3_adt:exp1(para3_adt:exp2()) which is violated by the success typing () -> 3 para4.erl:21: Invalid type specification for function para4:a/1. The success typing is (para4:d_all() | para4:d_atom()) -> [{atom() | integer(),atom() | integer()}] para4.erl:26: Invalid type specification for function para4:i/1. The success typing is (para4:d_all() | para4:d_integer()) -> [{atom() | integer(),atom() | integer()}] para4.erl:31: Invalid type specification for function para4:t/1. The success typing is (para4:d_all() | para4:d_tuple()) -> [{atom() | integer(),atom() | integer()}] diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/queue b/lib/dialyzer/test/opaque_SUITE_data/results/queue index 5b3813c418..9822b7168f 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/queue +++ b/lib/dialyzer/test/opaque_SUITE_data/results/queue @@ -1,11 +1,11 @@ queue_use.erl:18: The call queue:is_empty({[],[]}) does not have an opaque term of type queue:queue(_) as 1st argument queue_use.erl:22: The call queue:in(42,Q0::{[],[]}) does not have an opaque term of type queue:queue(_) as 2nd argument -queue_use.erl:27: The attempt to match a term of type queue:queue(_) against the pattern {"*", Q2} breaks the opaqueness of the term +queue_use.erl:27: The attempt to match a term of type queue:queue(_) against the pattern {"*", Q2} breaks the opacity of the term queue_use.erl:33: Attempt to test for equality between a term of type {[42,...],[]} and a term of opaque type queue:queue(_) -queue_use.erl:36: The attempt to match a term of type queue:queue(_) against the pattern {F, _R} breaks the opaqueness of the term +queue_use.erl:36: The attempt to match a term of type queue:queue(_) against the pattern {F, _R} breaks the opacity of the term queue_use.erl:40: The call queue:out({[42,...],[]}) does not have an opaque term of type queue:queue(_) as 1st argument queue_use.erl:51: The call queue_use:is_in_queue(E::42,DB::#db{p::[],q::queue:queue(_)}) contains an opaque term as 2nd argument when terms of different types are expected in these positions -queue_use.erl:56: The attempt to match a term of type #db{p::[],q::queue:queue(_)} against the pattern {'db', _, {L1, L2}} breaks the opaqueness of queue:queue(_) +queue_use.erl:56: The attempt to match a term of type #db{p::[],q::queue:queue(_)} against the pattern {'db', _, {L1, L2}} breaks the opacity of queue:queue(_) queue_use.erl:62: The call queue_use:tuple_queue({42,'gazonk'}) does not have a term of type {_,queue:queue(_)} (with opaque subterms) as 1st argument queue_use.erl:65: The call queue:in(F::42,Q::'gazonk') does not have an opaque term of type queue:queue(_) as 2nd argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/rec b/lib/dialyzer/test/opaque_SUITE_data/results/rec index 72736b3b3c..e9b217a93f 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/rec +++ b/lib/dialyzer/test/opaque_SUITE_data/results/rec @@ -1,6 +1,6 @@ -rec_use.erl:17: The attempt to match a term of type rec_adt:rec() against the pattern {'rec', _, 42} breaks the opaqueness of the term -rec_use.erl:18: Guard test tuple_size(R::rec_adt:rec()) breaks the opaqueness of its argument +rec_use.erl:17: The attempt to match a term of type rec_adt:rec() against the pattern {'rec', _, 42} breaks the opacity of the term +rec_use.erl:18: Guard test tuple_size(R::rec_adt:rec()) breaks the opacity of its argument rec_use.erl:23: The call rec_adt:get_a(R::tuple()) does not have an opaque term of type rec_adt:rec() as 1st argument rec_use.erl:27: Attempt to test for equality between a term of type {'rec','gazonk',42} and a term of opaque type rec_adt:rec() rec_use.erl:30: The call erlang:tuple_size(rec_adt:rec()) contains an opaque term as 1st argument when a structured term of type tuple() is expected diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/simple b/lib/dialyzer/test/opaque_SUITE_data/results/simple index 391c37664e..5cd8916aee 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/simple +++ b/lib/dialyzer/test/opaque_SUITE_data/results/simple @@ -1,29 +1,29 @@ exact_api.erl:17: The call exact_api:set_type(A::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph:graph() as 1st argument exact_api.erl:23: The call digraph:delete(G::#digraph{vtab::'notable',etab::'notable',ntab::'notable',cyclic::'true'}) does not have an opaque term of type digraph:graph() as 1st argument -exact_api.erl:55: The attempt to match a term of type exact_adt:exact_adt() against the pattern {'exact_adt'} breaks the opaqueness of the term +exact_api.erl:55: The attempt to match a term of type exact_adt:exact_adt() against the pattern {'exact_adt'} breaks the opacity of the term exact_api.erl:59: The call exact_adt:exact_adt_set_type2(A::#exact_adt{}) does not have an opaque term of type exact_adt:exact_adt() as 1st argument is_rec.erl:10: The call erlang:is_record(simple1_adt:d1(),'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions is_rec.erl:15: The call erlang:is_record(A::simple1_adt:d1(),'r',I::1 | 2 | 3) contains an opaque term as 1st argument when terms of different types are expected in these positions -is_rec.erl:19: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument -is_rec.erl:23: Guard test is_record({simple1_adt:d1(),1},'r',2) breaks the opaqueness of its argument +is_rec.erl:19: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opacity of its argument +is_rec.erl:23: Guard test is_record({simple1_adt:d1(),1},'r',2) breaks the opacity of its argument is_rec.erl:41: The call erlang:is_record(A::simple1_adt:d1(),R::'a') contains an opaque term as 1st argument when terms of different types are expected in these positions is_rec.erl:45: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),1) contains an opaque term as 2nd argument when terms of different types are expected in these positions is_rec.erl:49: The call erlang:is_record(A::simple1_adt:d1(),any(),1) contains an opaque term as 1st argument when terms of different types are expected in these positions is_rec.erl:53: The call erlang:is_record(A::simple1_adt:d1(),A::simple1_adt:d1(),any()) contains an opaque term as 2nd argument when terms of different types are expected in these positions -is_rec.erl:57: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opaqueness of its argument +is_rec.erl:57: Guard test is_record(A::simple1_adt:d1(),'r',2) breaks the opacity of its argument is_rec.erl:61: The record #r{f1::simple1_adt:d1()} violates the declared type for #r{} is_rec.erl:65: The call erlang:is_record({simple1_adt:d1(),1},'r',2) contains an opaque term as 1st argument when terms of different types are expected in these positions rec_api.erl:104: Matching of pattern {'r2', 10} tagged with a record name violates the declared type of #r2{f1::10} -rec_api.erl:113: The attempt to match a term of type #r3{f1::queue:queue(_)} against the pattern {'r3', 'a'} breaks the opaqueness of queue:queue(_) +rec_api.erl:113: The attempt to match a term of type #r3{f1::queue:queue(_)} against the pattern {'r3', 'a'} breaks the opacity of queue:queue(_) rec_api.erl:118: Record construction #r3{f1::10} violates the declared type of field f1::queue:queue(_) -rec_api.erl:123: The attempt to match a term of type #r3{f1::10} against the pattern {'r3', 10} breaks the opaqueness of queue:queue(_) +rec_api.erl:123: The attempt to match a term of type #r3{f1::10} against the pattern {'r3', 10} breaks the opacity of queue:queue(_) rec_api.erl:24: Record construction #r1{f1::10} violates the declared type of field f1::rec_api:a() rec_api.erl:29: Matching of pattern {'r1', 10} tagged with a record name violates the declared type of #r1{f1::10} -rec_api.erl:33: The attempt to match a term of type rec_adt:r1() against the pattern {'r1', 'a'} breaks the opaqueness of the term +rec_api.erl:33: The attempt to match a term of type rec_adt:r1() against the pattern {'r1', 'a'} breaks the opacity of the term rec_api.erl:35: Invalid type specification for function rec_api:adt_t1/1. The success typing is (#r1{f1::'a'}) -> #r1{f1::'a'} -rec_api.erl:40: Invalid type specification for function rec_api:adt_r1/0. The success typing is () -> #r1{f1::'a'} -rec_api.erl:85: The attempt to match a term of type rec_api:f() against the variable _ breaks the opaqueness of rec_adt:f() +rec_api.erl:40: The specification for rec_api:adt_r1/0 has an opaque subtype rec_adt:r1() which is violated by the success typing () -> #r1{f1::'a'} +rec_api.erl:85: The attempt to match a term of type rec_adt:f() against the record field 'f' declared to be of type rec_api:f() breaks the opacity of the term rec_api.erl:99: Record construction #r2{f1::10} violates the declared type of field f1::rec_api:a() simple1_api.erl:113: The test simple1_api:d1() =:= simple1_api:d2() can never evaluate to 'true' simple1_api.erl:118: Guard test simple1_api:d2() =:= A::simple1_api:d1() can never succeed @@ -35,20 +35,20 @@ simple1_api.erl:165: Attempt to test for equality between a term of type simple1 simple1_api.erl:181: Guard test A::simple1_adt:d1() =< B::simple1_adt:d2() contains opaque terms as 1st and 2nd arguments simple1_api.erl:185: Guard test 'a' =< B::simple1_adt:d2() contains an opaque term as 2nd argument simple1_api.erl:189: Guard test A::simple1_adt:d1() =< 'd' contains an opaque term as 1st argument -simple1_api.erl:197: The type test is_integer(A::simple1_adt:d1()) breaks the opaqueness of the term A::simple1_adt:d1() +simple1_api.erl:197: The type test is_integer(A::simple1_adt:d1()) breaks the opacity of the term A::simple1_adt:d1() simple1_api.erl:221: Guard test A::simple1_api:i1() > 3 can never succeed simple1_api.erl:225: Guard test A::simple1_adt:i1() > 3 contains an opaque term as 1st argument simple1_api.erl:233: Guard test A::simple1_adt:i1() < 3 contains an opaque term as 1st argument simple1_api.erl:239: Guard test A::1 > 3 can never succeed simple1_api.erl:243: Guard test A::1 > 3 can never succeed simple1_api.erl:257: Guard test is_function(T::simple1_api:o1()) can never succeed -simple1_api.erl:265: Guard test is_function(T::simple1_adt:o1()) breaks the opaqueness of its argument -simple1_api.erl:269: The type test is_function(T::simple1_adt:o1()) breaks the opaqueness of the term T::simple1_adt:o1() +simple1_api.erl:265: Guard test is_function(T::simple1_adt:o1()) breaks the opacity of its argument +simple1_api.erl:269: The type test is_function(T::simple1_adt:o1()) breaks the opacity of the term T::simple1_adt:o1() simple1_api.erl:274: Guard test is_function(T::simple1_api:o1(),A::simple1_api:i1()) can never succeed -simple1_api.erl:284: Guard test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of its argument -simple1_api.erl:289: The type test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opaqueness of the term T::simple1_adt:o1() +simple1_api.erl:284: Guard test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opacity of its argument +simple1_api.erl:289: The type test is_function(T::simple1_adt:o1(),A::simple1_adt:i1()) breaks the opacity of the term T::simple1_adt:o1() simple1_api.erl:294: The call erlang:is_function(T::simple1_api:o1(),A::simple1_adt:i1()) contains an opaque term as 2nd argument when terms of different types are expected in these positions -simple1_api.erl:300: The type test is_function(T::simple1_adt:o1(),A::simple1_api:i1()) breaks the opaqueness of the term T::simple1_adt:o1() +simple1_api.erl:300: The type test is_function(T::simple1_adt:o1(),A::simple1_api:i1()) breaks the opacity of the term T::simple1_adt:o1() simple1_api.erl:306: Guard test B::simple1_api:b2() =:= 'true' can never succeed simple1_api.erl:315: Guard test A::simple1_api:b1() =:= 'false' can never succeed simple1_api.erl:319: Guard test not('and'('true','true')) can never succeed @@ -60,14 +60,14 @@ simple1_api.erl:365: Clause guard cannot succeed. simple1_api.erl:368: Invalid type specification for function simple1_api:bool_adt_t8/2. The success typing is (boolean(),boolean()) -> 1 simple1_api.erl:378: Clause guard cannot succeed. simple1_api.erl:381: Invalid type specification for function simple1_api:bool_adt_t9/2. The success typing is ('false','false') -> 1 -simple1_api.erl:407: The size simple1_adt:i1() breaks the opaqueness of A -simple1_api.erl:418: The attempt to match a term of type non_neg_integer() against the variable A breaks the opaqueness of simple1_adt:i1() -simple1_api.erl:425: The attempt to match a term of type non_neg_integer() against the variable B breaks the opaqueness of simple1_adt:i1() +simple1_api.erl:407: The size simple1_adt:i1() breaks the opacity of A +simple1_api.erl:418: The attempt to match a term of type non_neg_integer() against the variable A breaks the opacity of simple1_adt:i1() +simple1_api.erl:425: The attempt to match a term of type non_neg_integer() against the variable B breaks the opacity of simple1_adt:i1() simple1_api.erl:432: The pattern <<_:B/integer-unit:1>> can never match the type any() -simple1_api.erl:448: The attempt to match a term of type non_neg_integer() against the variable Sz breaks the opaqueness of simple1_adt:i1() -simple1_api.erl:460: The attempt to match a term of type simple1_adt:bit1() against the pattern <<_/binary-unit:8>> breaks the opaqueness of the term -simple1_api.erl:478: The call 'foo':A(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a() -simple1_api.erl:486: The call A:'foo'(A::simple1_adt:a()) breaks the opaqueness of the term A :: simple1_adt:a() +simple1_api.erl:448: The attempt to match a term of type non_neg_integer() against the variable Sz breaks the opacity of simple1_adt:i1() +simple1_api.erl:460: The attempt to match a term of type simple1_adt:bit1() against the pattern <<_/binary-unit:8>> breaks the opacity of the term +simple1_api.erl:478: The call 'foo':A(A::simple1_adt:a()) breaks the opacity of the term A :: simple1_adt:a() +simple1_api.erl:486: The call A:'foo'(A::simple1_adt:a()) breaks the opacity of the term A :: simple1_adt:a() simple1_api.erl:499: The call 'foo':A(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i() simple1_api.erl:503: The call 'foo':A(A::simple1_adt:i()) requires that A is of type atom() not simple1_adt:i() simple1_api.erl:507: The call A:'foo'(A::simple1_api:i()) requires that A is of type atom() not simple1_api:i() @@ -79,7 +79,7 @@ simple1_api.erl:538: Guard test A::simple1_adt:d1() =:= 3 contains an opaque ter simple1_api.erl:548: The call erlang:'<'(A::simple1_adt:d1(),3) contains an opaque term as 1st argument when terms of different types are expected in these positions simple1_api.erl:558: The call erlang:'=<'(A::simple1_adt:d1(),B::simple1_adt:d2()) contains opaque terms as 1st and 2nd arguments when terms of different types are expected in these positions simple1_api.erl:565: Guard test {digraph:graph(),3} > {digraph:graph(),atom() | ets:tid()} contains an opaque term as 2nd argument -simple1_api.erl:91: Invalid type specification for function simple1_api:tup/0. The success typing is () -> {'a','b'} +simple1_api.erl:91: The specification for simple1_api:tup/0 has an opaque subtype simple1_adt:tuple1() which is violated by the success typing () -> {'a','b'} simple2_api.erl:100: The call lists:flatten(A::simple1_adt:tuple1()) contains an opaque term as 1st argument when a structured term of type [any()] is expected simple2_api.erl:116: The call lists:flatten({simple1_adt:tuple1()}) will never return since it differs in the 1st argument from the success typing arguments: ([any()]) simple2_api.erl:121: Guard test {simple1_adt:d1(),3} > {simple1_adt:d1(),simple1_adt:tuple1()} contains an opaque term as 2nd argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/timer b/lib/dialyzer/test/opaque_SUITE_data/results/timer index b1cfcd4e9f..46c5a86307 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/timer +++ b/lib/dialyzer/test/opaque_SUITE_data/results/timer @@ -1,4 +1,4 @@ timer_use.erl:16: The pattern 'gazonk' can never match the type {'error',_} | {'ok',timer:tref()} -timer_use.erl:17: The attempt to match a term of type {'error',_} | {'ok',timer:tref()} against the pattern {'ok', 42} breaks the opaqueness of timer:tref() -timer_use.erl:18: The attempt to match a term of type {'error',_} | {'ok',timer:tref()} against the pattern {Tag, 'gazonk'} breaks the opaqueness of timer:tref() +timer_use.erl:17: The attempt to match a term of type {'error',_} | {'ok',timer:tref()} against the pattern {'ok', 42} breaks the opacity of timer:tref() +timer_use.erl:18: The attempt to match a term of type {'error',_} | {'ok',timer:tref()} against the pattern {Tag, 'gazonk'} breaks the opacity of timer:tref() diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/union b/lib/dialyzer/test/opaque_SUITE_data/results/union index 98829b424a..8763088bf0 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/union +++ b/lib/dialyzer/test/opaque_SUITE_data/results/union @@ -1,5 +1,5 @@ -union_use.erl:12: The attempt to match a term of type union_adt:u() against the pattern 'aaa' breaks the opaqueness of the term -union_use.erl:16: The type test is_tuple(union_adt:u()) breaks the opaqueness of the term union_adt:u() -union_use.erl:7: Guard test is_atom(A::union_adt:u()) breaks the opaqueness of its argument -union_use.erl:8: Guard test is_tuple(T::union_adt:u()) breaks the opaqueness of its argument +union_use.erl:12: The attempt to match a term of type union_adt:u() against the pattern 'aaa' breaks the opacity of the term +union_use.erl:16: The type test is_tuple(union_adt:u()) breaks the opacity of the term union_adt:u() +union_use.erl:7: Guard test is_atom(A::union_adt:u()) breaks the opacity of its argument +union_use.erl:8: Guard test is_tuple(T::union_adt:u()) breaks the opacity of its argument diff --git a/lib/dialyzer/test/opaque_SUITE_data/results/wings b/lib/dialyzer/test/opaque_SUITE_data/results/wings index 511263b70a..391501d86f 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/results/wings +++ b/lib/dialyzer/test/opaque_SUITE_data/results/wings @@ -1,11 +1,11 @@ -wings_dissolve.erl:103: Guard test is_list(List::gb_sets:set(_)) breaks the opaqueness of its argument -wings_dissolve.erl:19: Guard test is_list(Faces::gb_sets:set(_)) breaks the opaqueness of its argument -wings_dissolve.erl:272: Guard test is_list(Faces::gb_sets:set(_)) breaks the opaqueness of its argument +wings_dissolve.erl:103: Guard test is_list(List::gb_sets:set(_)) breaks the opacity of its argument +wings_dissolve.erl:19: Guard test is_list(Faces::gb_sets:set(_)) breaks the opacity of its argument +wings_dissolve.erl:272: Guard test is_list(Faces::gb_sets:set(_)) breaks the opacity of its argument wings_dissolve.erl:31: The call gb_sets:is_empty(Faces::[any(),...]) does not have an opaque term of type gb_sets:set(_) as 1st argument wings_edge.erl:205: The pattern <Edge, 'hard', Htab> can never match the type <_,'soft',_> wings_edge_cmd.erl:30: The call gb_trees:size(P::gb_sets:set(_)) does not have an opaque term of type gb_trees:tree(_,_) as 1st argument wings_edge_cmd.erl:32: The pattern [_ | Parts] can never match the type [] wings_edge_cmd.erl:32: The pattern [{_, P} | _] can never match the type [] -wings_io.erl:30: The attempt to match a term of type {'empty',queue:queue(_)} against the pattern {'empty', {In, Out}} breaks the opaqueness of queue:queue(_) +wings_io.erl:30: The attempt to match a term of type {'empty',queue:queue(_)} against the pattern {'empty', {In, Out}} breaks the opacity of queue:queue(_) wings_we.erl:155: The call wings_util:gb_trees_largest_key(Etab::gb_trees:tree(_,_)) contains an opaque term as 1st argument when a structured term of type {_,{_,_,_,'nil' | {_,_,_,'nil' | {_,_,_,_}}}} is expected diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/dict/dict_use.erl b/lib/dialyzer/test/opaque_SUITE_data/src/dict/dict_use.erl index a4cec065ab..2527f166f2 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/dict/dict_use.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/dict/dict_use.erl @@ -34,7 +34,7 @@ middle() -> {w1(), w2()}. %%--------------------------------------------------------------------- -%% Cases that are problematic w.r.t. opaqueness of types +%% Cases that are problematic w.r.t. opacity of types %%--------------------------------------------------------------------- w1() -> diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/para/para3.erl b/lib/dialyzer/test/opaque_SUITE_data/src/para/para3.erl index 102215b28d..d8c1f561f7 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/para/para3.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/para/para3.erl @@ -62,7 +62,7 @@ t2() -> %% Shows that the list TypeNames in t_from_form must include ArgsLen. t1_adt() -> - {{{{{17}}}}} = para3_adt:t1(3). % breaks the opaqueness + {{{{{17}}}}} = para3_adt:t1(3). % breaks the opacity t2_adt() -> {{{{17}}}} = para3_adt:t1(3). % can never match diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/recrec/erl_types.erl b/lib/dialyzer/test/opaque_SUITE_data/src/recrec/erl_types.erl index 7826dada9d..449bf4cbb6 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/recrec/erl_types.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/recrec/erl_types.erl @@ -4366,7 +4366,7 @@ record_field_diffs_to_string(?tuple([_|Fs], Arity, Tag), RecDict) -> string:join(FieldDiffs, " and "). field_diffs([F|Fs], [{FName, _Abstr, DefType}|FDefs], RecDict, Acc) -> - %% Don't care about opaqueness for now. + %% Don't care about opacity for now. NewAcc = case not t_is_none(t_inf(F, DefType)) of true -> Acc; diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl index c19330eb30..597460ce77 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/exact_api.erl @@ -52,7 +52,7 @@ exact_api_set_type(#exact_api{}=E) -> E. -record(exact_adt, {}). exact_adt_test(X) -> - #exact_adt{} = exact_adt:exact_adt_set_type(X). % breaks the opaqueness + #exact_adt{} = exact_adt:exact_adt_set_type(X). % breaks the opacity exact_adt_new(A) -> A = #exact_adt{}, diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl index 2b157483bc..b906431b44 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/is_rec.erl @@ -16,11 +16,11 @@ ri11() -> ri13() -> A = simple1_adt:d1(), - if is_record(A, r) -> true end. % breaks the opaqueness + if is_record(A, r) -> true end. % breaks the opacity ri14() -> A = simple1_adt:d1(), - if is_record({A, 1}, r) -> true end. % breaks the opaqueness + if is_record({A, 1}, r) -> true end. % breaks the opacity -type '1-3-t'() :: 1..3. @@ -54,7 +54,7 @@ ri5() -> ri6() -> A = simple1_adt:d1(), - if is_record(A, r) -> true end. % breaks opaqueness + if is_record(A, r) -> true end. % breaks opacity ri7() -> A = simple1_adt:d1(), diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl index fb6d59d263..59b9e0fec4 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/rec_api.erl @@ -30,7 +30,7 @@ t3() -> adt_t1() -> R = rec_adt:r1(), - {r1, a} = R. % breaks the opaqueness + {r1, a} = R. % breaks the opacity -spec adt_t1(rec_adt:r1()) -> rec_adt:r1(). % invalid type spec @@ -82,7 +82,7 @@ f() -> r_adt() -> {{r, rec_adt:f(), 2}, - #r{f = rec_adt:f(), o = 2}}. % breaks the opaqueness + #r{f = rec_adt:f(), o = 2}}. % breaks the opacity -record(r2, % like #r1{}, but with initial value {f1 = a :: a()}). @@ -110,7 +110,7 @@ u3() -> v1() -> A = #r3{f1 = queue:new()}, - {r3, a} = A. % breaks the opaqueness + {r3, a} = A. % breaks the opacity v2() -> A = {r3, 10}, @@ -120,4 +120,4 @@ v2() -> v3() -> A = {r3, 10}, - #r3{f1 = 10} = A. % breaks the opaqueness + #r3{f1 = 10} = A. % breaks the opacity diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl index 7db1100597..d67aa913d8 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/simple/simple1_api.erl @@ -194,7 +194,7 @@ tt1() -> tt2() -> A = simple1_adt:d1(), - is_integer(A). % breaks the opaqueness + is_integer(A). % breaks the opacity %% Comparison with integers @@ -262,11 +262,11 @@ f2() -> adt_f1() -> T = simple1_adt:n1(), - if is_function(T) -> ok end. % breaks the opaqueness + if is_function(T) -> ok end. % breaks the opacity adt_f2() -> T = simple1_adt:n1(), - is_function(T). % breaks the opaqueness + is_function(T). % breaks the opacity f3() -> A = i1(), @@ -281,12 +281,12 @@ f4() -> adt_f3() -> A = simple1_adt:i1(), T = simple1_adt:n1(), - if is_function(T, A) -> ok end. % breaks the opaqueness + if is_function(T, A) -> ok end. % breaks the opacity adt_f4() -> A = simple1_adt:i1(), T = simple1_adt:n1(), - is_function(T, A). % breaks the opaqueness + is_function(T, A). % breaks the opacity adt_f4_a() -> A = simple1_adt:i1(), @@ -297,7 +297,7 @@ adt_f4_a() -> adt_f4_b() -> A = i1(), T = simple1_adt:n1(), - is_function(T, A). % breaks the opaqueness + is_function(T, A). % breaks the opacity %% A few Boolean examples @@ -404,7 +404,7 @@ bit_t1() -> bit_adt_t1() -> A = simple1_adt:i1(), - <<100:(A)>>. % breaks the opaqueness + <<100:(A)>>. % breaks the opacity bit_t3(A) -> B = i1(), @@ -415,14 +415,14 @@ bit_t3(A) -> bit_adt_t2() -> A = simple1_adt:i1(), case <<"hej">> of - <<_:A>> -> ok % breaks the opaqueness (but the message is strange) + <<_:A>> -> ok % breaks the opacity (but the message is strange) end. bit_adt_t3(A) -> B = simple1_adt:i1(), case none:none() of - <<A: % breaks the opaqueness (the message is less than perfect) + <<A: % breaks the opacity (the message is less than perfect) B>> -> 1 end. @@ -445,7 +445,7 @@ bit_t4(A) -> bit_adt_t4(A) -> Sz = simple1_adt:i1(), case A of - <<_:Sz>> -> 1 % breaks the opaqueness + <<_:Sz>> -> 1 % breaks the opacity end. bit_t5() -> @@ -457,7 +457,7 @@ bit_t5() -> bit_adt_t5() -> A = simple1_adt:bit1(), case A of - <<_/binary>> -> 1 % breaks the opaqueness + <<_/binary>> -> 1 % breaks the opacity end. -opaque bit1() :: binary(). @@ -475,7 +475,7 @@ call_f(A) -> call_f_adt(A) -> A = simple1_adt:a(), - foo:A(A). % breaks the opaqueness + foo:A(A). % breaks the opacity call_m(A) -> A = a(), @@ -483,7 +483,7 @@ call_m(A) -> call_m_adt(A) -> A = simple1_adt:a(), - A:foo(A). % breaks the opaqueness + A:foo(A). % breaks the opacity -opaque a() :: atom(). diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/timer/timer_use.erl b/lib/dialyzer/test/opaque_SUITE_data/src/timer/timer_use.erl index 9c8ea0af1c..ed6810634f 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/timer/timer_use.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/timer/timer_use.erl @@ -1,8 +1,8 @@ %%--------------------------------------------------------------------------- %% A test case with: %% - a genuine matching error -- 1st branch -%% - a violation of the opaqueness of timer:tref() -- 2nd branch -%% - a subtle violation of the opaqueness of timer:tref() -- 3rd branch +%% - a violation of the opacity of timer:tref() -- 2nd branch +%% - a subtle violation of the opacity of timer:tref() -- 3rd branch %% The test is supposed to check that these cases are treated properly. %%--------------------------------------------------------------------------- diff --git a/lib/dialyzer/test/opaque_SUITE_data/src/wings/wings_util.erl b/lib/dialyzer/test/opaque_SUITE_data/src/wings/wings_util.erl index ca6bc0ab4a..6b825d85fe 100644 --- a/lib/dialyzer/test/opaque_SUITE_data/src/wings/wings_util.erl +++ b/lib/dialyzer/test/opaque_SUITE_data/src/wings/wings_util.erl @@ -14,12 +14,12 @@ rel2fam(Rel) -> sofs:to_external(sofs:relation_to_family(sofs:relation(Rel))). -%% a definition that does not violate the opaqueness of gb_trees:tree() +%% a definition that does not violate the opacity of gb_trees:tree() gb_trees_smallest_key(Tree) -> {Key, _V} = gb_trees:smallest(Tree), Key. -%% a definition that violates the opaqueness of gb_trees:tree() +%% a definition that violates the opacity of gb_trees:tree() gb_trees_largest_key({_, Tree}) -> largest_key1(Tree). 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/results/guards b/lib/dialyzer/test/small_SUITE_data/results/guards index 824a7cfa24..cd0d3cace0 100644 --- a/lib/dialyzer/test/small_SUITE_data/results/guards +++ b/lib/dialyzer/test/small_SUITE_data/results/guards @@ -10,8 +10,8 @@ guards.erl:136: The call guards:t16('a') will never return since it differs in t guards.erl:136: The call guards:t16('c') will never return since it differs in the 1st argument from the success typing arguments: ('b') guards.erl:55: Function t5/1 has no local return guards.erl:55: Guard test is_integer(A::atom()) can never succeed -guards.erl:59: Clause guard cannot succeed. The variable A was matched against the type any() guards.erl:59: Function t6/1 has no local return +guards.erl:59: Guard test is_integer(A::atom()) can never succeed guards.erl:67: The call guards:t7({42}) will never return since it differs in the 1st argument from the success typing arguments: (atom() | integer()) guards.erl:75: The call guards:t8({42}) will never return since it differs in the 1st argument from the success typing arguments: (atom() | integer()) guards.erl:92: The variable _ can never match since previous clauses completely covered the type {'true','true'} 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/edoc/include/edoc_doclet.hrl b/lib/edoc/include/edoc_doclet.hrl index ac6763fb33..9893ff3ee0 100644 --- a/lib/edoc/include/edoc_doclet.hrl +++ b/lib/edoc/include/edoc_doclet.hrl @@ -15,7 +15,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% Author contact: [email protected] diff --git a/lib/edoc/src/edoc.erl b/lib/edoc/src/edoc.erl index 94013bb5ac..7d61b9e9c5 100644 --- a/lib/edoc/src/edoc.erl +++ b/lib/edoc/src/edoc.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2001-2007 Richard Carlsson diff --git a/lib/edoc/src/edoc.hrl b/lib/edoc/src/edoc.hrl index 5b0fb68cf9..4b28c0b12e 100644 --- a/lib/edoc/src/edoc.hrl +++ b/lib/edoc/src/edoc.hrl @@ -15,7 +15,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% Author contact: [email protected] diff --git a/lib/edoc/src/edoc_data.erl b/lib/edoc/src/edoc_data.erl index b797d74a71..86273b8352 100644 --- a/lib/edoc/src/edoc_data.erl +++ b/lib/edoc/src/edoc_data.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_doclet.erl b/lib/edoc/src/edoc_doclet.erl index 5961ca8cc0..9128c19a4d 100644 --- a/lib/edoc/src/edoc_doclet.erl +++ b/lib/edoc/src/edoc_doclet.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2003-2006 Richard Carlsson diff --git a/lib/edoc/src/edoc_extract.erl b/lib/edoc/src/edoc_extract.erl index 2d6cb04a6d..5c8c648319 100644 --- a/lib/edoc/src/edoc_extract.erl +++ b/lib/edoc/src/edoc_extract.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2001-2003 Richard Carlsson diff --git a/lib/edoc/src/edoc_layout.erl b/lib/edoc/src/edoc_layout.erl index ef57b7b084..41a0b193ec 100644 --- a/lib/edoc/src/edoc_layout.erl +++ b/lib/edoc/src/edoc_layout.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/edoc/src/edoc_lib.erl b/lib/edoc/src/edoc_lib.erl index cc0a8d0b94..8fbc83fa29 100644 --- a/lib/edoc/src/edoc_lib.erl +++ b/lib/edoc/src/edoc_lib.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2001-2003 Richard Carlsson diff --git a/lib/edoc/src/edoc_macros.erl b/lib/edoc/src/edoc_macros.erl index e1a54d5090..7c91cb0f57 100644 --- a/lib/edoc/src/edoc_macros.erl +++ b/lib/edoc/src/edoc_macros.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_refs.erl b/lib/edoc/src/edoc_refs.erl index b9a9391053..9a45d5b0fa 100644 --- a/lib/edoc/src/edoc_refs.erl +++ b/lib/edoc/src/edoc_refs.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_report.erl b/lib/edoc/src/edoc_report.erl index dc6320df6d..ce54e71538 100644 --- a/lib/edoc/src/edoc_report.erl +++ b/lib/edoc/src/edoc_report.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_run.erl b/lib/edoc/src/edoc_run.erl index 261a649c70..d69bddc999 100644 --- a/lib/edoc/src/edoc_run.erl +++ b/lib/edoc/src/edoc_run.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2003 Richard Carlsson diff --git a/lib/edoc/src/edoc_tags.erl b/lib/edoc/src/edoc_tags.erl index 93f423b906..919159e125 100644 --- a/lib/edoc/src/edoc_tags.erl +++ b/lib/edoc/src/edoc_tags.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_types.erl b/lib/edoc/src/edoc_types.erl index 5bb68e79fb..bd4a583b8e 100644 --- a/lib/edoc/src/edoc_types.erl +++ b/lib/edoc/src/edoc_types.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/edoc_types.hrl b/lib/edoc/src/edoc_types.hrl index 3e5e91484f..3f502068af 100644 --- a/lib/edoc/src/edoc_types.hrl +++ b/lib/edoc/src/edoc_types.hrl @@ -15,7 +15,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% Author contact: [email protected] diff --git a/lib/edoc/src/edoc_wiki.erl b/lib/edoc/src/edoc_wiki.erl index 5d0d78bf3c..5d15bbcfcc 100644 --- a/lib/edoc/src/edoc_wiki.erl +++ b/lib/edoc/src/edoc_wiki.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @private diff --git a/lib/edoc/src/otpsgml_layout.erl b/lib/edoc/src/otpsgml_layout.erl index 052c75b9d4..8458a52f2d 100644 --- a/lib/edoc/src/otpsgml_layout.erl +++ b/lib/edoc/src/otpsgml_layout.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> 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/eldap/vsn.mk b/lib/eldap/vsn.mk index 721387d97d..1636b6bb6d 100644 --- a/lib/eldap/vsn.mk +++ b/lib/eldap/vsn.mk @@ -1 +1 @@ -ELDAP_VSN = 1.2.2 +ELDAP_VSN = 1.2.3 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/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl index 8a4cad1e7e..0f7a15f669 100644 --- a/lib/eunit/include/eunit.hrl +++ b/lib/eunit/include/eunit.hrl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% Copyright (C) 2004-2006 Mickaël Rémond, Richard Carlsson diff --git a/lib/eunit/src/eunit.erl b/lib/eunit/src/eunit.erl index fbfd123c43..1009d76d5b 100644 --- a/lib/eunit/src/eunit.erl +++ b/lib/eunit/src/eunit.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2004-2009 Mickaël Rémond, Richard Carlsson diff --git a/lib/eunit/src/eunit_autoexport.erl b/lib/eunit/src/eunit_autoexport.erl index 7bb78f5ea8..a3eb64f9c8 100644 --- a/lib/eunit/src/eunit_autoexport.erl +++ b/lib/eunit/src/eunit_autoexport.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_data.erl b/lib/eunit/src/eunit_data.erl index cc002cb449..cea7bcd5c5 100644 --- a/lib/eunit/src/eunit_data.erl +++ b/lib/eunit/src/eunit_data.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_lib.erl b/lib/eunit/src/eunit_lib.erl index 9dbb4835f8..b19f50b990 100644 --- a/lib/eunit/src/eunit_lib.erl +++ b/lib/eunit/src/eunit_lib.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2004-2007 Mickaël Rémond, Richard Carlsson diff --git a/lib/eunit/src/eunit_proc.erl b/lib/eunit/src/eunit_proc.erl index 8bdf94c877..c6bb8bdbb3 100644 --- a/lib/eunit/src/eunit_proc.erl +++ b/lib/eunit/src/eunit_proc.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_serial.erl b/lib/eunit/src/eunit_serial.erl index da76064a53..bbda4400da 100644 --- a/lib/eunit/src/eunit_serial.erl +++ b/lib/eunit/src/eunit_serial.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_server.erl b/lib/eunit/src/eunit_server.erl index 387976eba1..e767822543 100644 --- a/lib/eunit/src/eunit_server.erl +++ b/lib/eunit/src/eunit_server.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_striptests.erl b/lib/eunit/src/eunit_striptests.erl index c6ade389ba..ae1a834662 100644 --- a/lib/eunit/src/eunit_striptests.erl +++ b/lib/eunit/src/eunit_striptests.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_surefire.erl b/lib/eunit/src/eunit_surefire.erl index 1b468551d8..a70b8bfd4c 100644 --- a/lib/eunit/src/eunit_surefire.erl +++ b/lib/eunit/src/eunit_surefire.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Mickaël Rémond <[email protected]> diff --git a/lib/eunit/src/eunit_test.erl b/lib/eunit/src/eunit_test.erl index 62d30b1930..f2b9fa46f2 100644 --- a/lib/eunit/src/eunit_test.erl +++ b/lib/eunit/src/eunit_test.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_tests.erl b/lib/eunit/src/eunit_tests.erl index 5dee1cb49e..7aadefb29f 100644 --- a/lib/eunit/src/eunit_tests.erl +++ b/lib/eunit/src/eunit_tests.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/eunit/src/eunit_tty.erl b/lib/eunit/src/eunit_tty.erl index f604ca5ba3..1fbc4edd45 100644 --- a/lib/eunit/src/eunit_tty.erl +++ b/lib/eunit/src/eunit_tty.erl @@ -10,7 +10,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @author Richard Carlsson <[email protected]> diff --git a/lib/hipe/cerl/erl_types.erl b/lib/hipe/cerl/erl_types.erl index 9ef119ba46..226a5d0f61 100644 --- a/lib/hipe/cerl/erl_types.erl +++ b/lib/hipe/cerl/erl_types.erl @@ -4377,7 +4377,7 @@ record_field_diffs_to_string(?tuple([_|Fs], Arity, Tag), RecDict) -> string:join(FieldDiffs, " and "). field_diffs([F|Fs], [{FName, _Abstr, DefType}|FDefs], RecDict, Acc) -> - %% Don't care about opaqueness for now. + %% Don't care about opacity for now. NewAcc = case not t_is_none(t_inf(F, DefType)) of true -> Acc; 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_call_elim.erl b/lib/hipe/icode/hipe_icode_call_elim.erl index 6a22133962..71c709a7d1 100644 --- a/lib/hipe/icode/hipe_icode_call_elim.erl +++ b/lib/hipe/icode/hipe_icode_call_elim.erl @@ -46,7 +46,8 @@ cfg(IcodeSSA) -> -spec elim_insn(icode_instr()) -> icode_instr(). elim_insn(Insn=#icode_call{'fun'={_,_,_}=MFA, args=Args, type=remote, dstlist=[Dst=#icode_variable{ - annotation={type_anno, RetType, _}}]}) -> + annotation={type_anno, RetType, _}}], + continuation=[], fail_label=[]}) -> Opaques = 'universe', case erl_types:t_is_singleton(RetType, Opaques) of true -> 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/main/hipe.erl b/lib/hipe/main/hipe.erl index 6c525dd143..38a5a64398 100644 --- a/lib/hipe/main/hipe.erl +++ b/lib/hipe/main/hipe.erl @@ -635,44 +635,51 @@ run_compiler(Name, DisasmFun, IcodeFun, Opts0) -> Opts = expand_basic_options(Opts0 ++ ?COMPILE_DEFAULTS), ?when_option(verbose, Opts, ?debug_msg("Compiling: ~p\n",[Name])), ?option_start_time("Compile", Opts), - Res = run_compiler_1(DisasmFun, IcodeFun, Opts), + Res = run_compiler_1(Name, DisasmFun, IcodeFun, Opts), ?option_stop_time("Compile", Opts), Res. -run_compiler_1(DisasmFun, IcodeFun, Options) -> +run_compiler_1(Name, DisasmFun, IcodeFun, Options) -> Parent = self(), {trap_exit,TrapExit} = process_info(Parent, trap_exit), %% Spawn a compilation process CompProc. In case this process gets %% killed, the trap_exit flag is restored to that of the Parent process. process_flag(trap_exit, true), - CompProc = spawn_link(fun () -> - %% Compiler process - set_architecture(Options), - pre_init(Options), - %% The full option expansion is not done - %% until the DisasmFun returns. - {Code, CompOpts} = DisasmFun(Options), - Opts0 = expand_options(Options ++ CompOpts, - get(hipe_target_arch)), - Opts = - case proplists:get_bool(to_llvm, Opts0) andalso - not llvm_support_available() of - true -> - ?error_msg("No LLVM version 3.4 or greater " - "found in $PATH; aborting " - "native code compilation.\n", []), - ?EXIT(cant_find_required_llvm_version); - false -> - Opts0 - end, - check_options(Opts), - ?when_option(verbose, Options, - ?debug_msg("Options: ~p.\n",[Opts])), - init(Opts), - {Icode, WholeModule} = IcodeFun(Code, Opts), - CompRes = compile_finish(Icode, WholeModule, Opts), - compiler_return(CompRes, Parent) - end), + CompProc = + spawn_link( + fun () -> + try + %% Compiler process + set_architecture(Options), + pre_init(Options), + %% The full option expansion is not done + %% until the DisasmFun returns. + {Code, CompOpts} = DisasmFun(Options), + Opts0 = expand_options(Options ++ CompOpts, + get(hipe_target_arch)), + Opts = + case proplists:get_bool(to_llvm, Opts0) andalso + not llvm_support_available() of + true -> + ?error_msg("No LLVM version 3.4 or greater " + "found in $PATH; aborting " + "native code compilation.\n", []), + ?EXIT(cant_find_required_llvm_version); + false -> + Opts0 + end, + check_options(Opts), + ?when_option(verbose, Options, + ?debug_msg("Options: ~p.\n",[Opts])), + init(Opts), + {Icode, WholeModule} = IcodeFun(Code, Opts), + CompRes = compile_finish(Icode, WholeModule, Opts), + compiler_return(CompRes, Parent) + catch error:Error -> + print_crash_message(Name, Error), + exit(Error) + end + end), Timeout = case proplists:get_value(timeout, Options) of N when is_integer(N), N >= 0 -> N; undefined -> ?DEFAULT_TIMEOUT; @@ -691,7 +698,7 @@ run_compiler_1(DisasmFun, IcodeFun, Options) -> exit(CompProc, kill), receive {'EXIT', CompProc, _} -> ok end, flush(), - ?error_msg("ERROR: Compilation timed out.\n",[]), + ?error_msg("ERROR: Compilation of ~w timed out.\n",[Name]), exit(timed_out) end, Result = receive {CompProc, Res} -> Res end, @@ -844,11 +851,25 @@ finalize_fun_sequential({MFA, Icode}, Opts, Servers) -> catch error:Error -> ?when_option(verbose, Opts, ?debug_untagged_msg("\n", [])), - ErrorInfo = {Error, erlang:get_stacktrace()}, - ?error_msg("ERROR: ~p~n", [ErrorInfo]), - ?EXIT(ErrorInfo) + print_crash_message(MFA, Error), + exit(Error) end. +print_crash_message(What, Error) -> + StackFun = fun(_,_,_) -> false end, + FormatFun = fun (Term, _) -> io_lib:format("~p", [Term]) end, + StackTrace = lib:format_stacktrace(1, erlang:get_stacktrace(), + StackFun, FormatFun), + WhatS = case What of + {M,F,A} -> io_lib:format("~w:~w/~w", [M,F,A]); + Mod -> io_lib:format("~w", [Mod]) + end, + ?error_msg("INTERNAL ERROR~n" + "while compiling ~s~n" + "crash reason: ~p~n" + "~s~n", + [WhatS, Error, StackTrace]). + pp_server_start(Opts) -> set_architecture(Opts), garbage_collect(), diff --git a/lib/hipe/main/hipe.hrl.src b/lib/hipe/main/hipe.hrl.src index 53b59f88f0..08bfd17f30 100644 --- a/lib/hipe/main/hipe.hrl.src +++ b/lib/hipe/main/hipe.hrl.src @@ -1,4 +1,4 @@ -%% -*- erlang-indent-level: 2 -*- +%% -*- mode: erlang; erlang-indent-level: 2 -*- %% %% %CopyrightBegin% %% @@ -70,20 +70,24 @@ code_server:info_msg(?MSGTAG ++ Msg, Args)). -define(untagged_msg(Msg, Args), code_server:info_msg(Msg, Args)). +-define(untagged_error_msg(Msg, Args), + code_server:error_msg(Msg, Args)). -else. -define(msg(Msg, Args), io:format(?MSGTAG ++ Msg, Args)). -define(untagged_msg(Msg, Args), io:format(Msg, Args)). +-define(untagged_error_msg(Msg, Args), + io:format(Msg, Args)). -endif. %% %% Define error and warning messages. %% -define(error_msg(Msg, Args), - code_server:error_msg(?MSGTAG ++ + ?untagged_error_msg(?MSGTAG ++ "Error: [~s:~w]: " ++ Msg, - [?MODULE,?LINE|Args])). + [?MODULE,?LINE|Args])). -define(WARNING_MSG(Msg, Args), ?msg("Warning: [~s:~w]: " ++ Msg, [?MODULE,?LINE|Args])). 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/hipe/test/maps_SUITE_data/maps_redundant_branch_is_key.erl b/lib/hipe/test/maps_SUITE_data/maps_redundant_branch_is_key.erl new file mode 100644 index 0000000000..17c3acd6af --- /dev/null +++ b/lib/hipe/test/maps_SUITE_data/maps_redundant_branch_is_key.erl @@ -0,0 +1,14 @@ +-module(maps_redundant_branch_is_key). +-export([test/0]). + +test() -> + ok = thingy(#{a => 1}), + ok = thingy(#{a => 2}), + ok. + +thingy(Map) -> + try + #{a := _} = Map, + ok + catch _ -> error + end. diff --git a/lib/inets/doc/src/http_uri.xml b/lib/inets/doc/src/http_uri.xml index 8e0301c520..2ef36d23ee 100644 --- a/lib/inets/doc/src/http_uri.xml +++ b/lib/inets/doc/src/http_uri.xml @@ -118,7 +118,7 @@ <v>Option = {ipv6_host_with_brackets, boolean()} | {scheme_defaults, scheme_defaults()} | {fragment, boolean()} | - {schema_validation_fun, fun()}]</v> + {scheme_validation_fun, fun()}]</v> <v>Result = {Scheme, UserInfo, Host, Port, Path, Query} | {Scheme, UserInfo, Host, Port, Path, Query, Fragment}</v> <v>UserInfo = user_info()</v> 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/src/http_client/httpc_handler.erl b/lib/inets/src/http_client/httpc_handler.erl index 59cb1299e9..a09019f6ad 100644 --- a/lib/inets/src/http_client/httpc_handler.erl +++ b/lib/inets/src/http_client/httpc_handler.erl @@ -1749,14 +1749,16 @@ tls_tunnel(Address, Request, #state{session = #session{socket = Socket, tls_tunnel_request(#request{headers = Headers, settings = Options, + id = RequestId, + from = From, address = {Host, Port}= Adress, ipv6_host_with_brackets = IPV6}) -> URI = Host ++":" ++ integer_to_list(Port), #request{ - id = make_ref(), - from = self(), + id = RequestId, + from = From, scheme = http, %% Use tcp-first and then upgrade! address = Adress, path = URI, diff --git a/lib/inets/src/http_client/httpc_request.erl b/lib/inets/src/http_client/httpc_request.erl index e8d020c165..89872a3831 100644 --- a/lib/inets/src/http_client/httpc_request.erl +++ b/lib/inets/src/http_client/httpc_request.erl @@ -88,9 +88,11 @@ send(SendAddr, Socket, SocketType, case Address of SendAddr -> {TmpHdrs2, Path ++ Query}; - _Proxy -> + _Proxy when SocketType == ip_comm -> TmpHdrs3 = handle_proxy(HttpOptions, TmpHdrs2), - {TmpHdrs3, AbsUri} + {TmpHdrs3, AbsUri}; + _ -> + {TmpHdrs2, Path ++ Query} end, FinalHeaders = 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/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index d907cef7d3..4c4a5c39cb 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -987,11 +987,6 @@ setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp</code> <p>Sets the line delimiting character for line-oriented protocols (<c>line</c>). Defaults to <c>$\n</c>.</p> </item> - <tag><c>{priority, Priority}</c></tag> - <item> - <p>Sets the protocol-defined priority for all packets to be sent - on this socket.</p> - </item> <tag><c>{raw, Protocol, OptionNum, ValueBin}</c></tag> <item> <p>See below.</p> diff --git a/lib/kernel/doc/src/rpc.xml b/lib/kernel/doc/src/rpc.xml index 5944e9321a..adec2d9520 100644 --- a/lib/kernel/doc/src/rpc.xml +++ b/lib/kernel/doc/src/rpc.xml @@ -88,6 +88,12 @@ to retrieve the value of evaluating <c>apply(<anno>Module</anno>, <anno>Function</anno>, <anno>Args</anno>)</c> on node <c><anno>Node</anno></c>.</p> + <note> + <p><seealso marker="#yield/1"><c>yield/1</c></seealso> and + <seealso marker="#nb_yield/1"><c>nb_yield/1,2</c></seealso> + must be called by the same process from which this function + was made otherwise they will never yield correctly.</p> + </note> </desc> </func> @@ -299,6 +305,11 @@ the tuple <c>{value, <anno>Val</anno>}</c> when the computation is finished, or <c>timeout</c> when <c><anno>Timeout</anno></c> milliseconds has elapsed.</p> + <note> + <p>This function must be called by the same process from which + <seealso marker="#async_call/4"><c>async_call/4</c></seealso> + was made otherwise it will only return <c>timeout</c>.</p> + </note> </desc> </func> @@ -407,6 +418,11 @@ If the answer is available, it is returned immediately. Otherwise, the calling process is suspended until the answer arrives from <c>Node</c>.</p> + <note> + <p>This function must be called by the same process from which + <seealso marker="#async_call/4"><c>async_call/4</c></seealso> + was made otherwise it will never return.</p> + </note> </desc> </func> </funcs> 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/megaco/test/megaco_app_test.erl b/lib/megaco/test/megaco_app_test.erl index 346a123c66..981d93f5dd 100644 --- a/lib/megaco/test/megaco_app_test.erl +++ b/lib/megaco/test/megaco_app_test.erl @@ -17,8 +17,6 @@ %% %% %CopyrightEnd% %% - -%% %%---------------------------------------------------------------------- %% Purpose: Verify the application specifics of the Megaco application %%---------------------------------------------------------------------- @@ -26,296 +24,26 @@ -compile(export_all). --include("megaco_test_lib.hrl"). - - -t() -> megaco_test_lib:t(?MODULE). -t(Case) -> megaco_test_lib:t({?MODULE, Case}). - - -%% Test server callbacks -init_per_testcase(undef_funcs = Case, Config) -> - NewConfig = [{tc_timeout, ?MINUTES(10)} | Config], - megaco_test_lib:init_per_testcase(Case, NewConfig); -init_per_testcase(Case, Config) -> - megaco_test_lib:init_per_testcase(Case, Config). - -end_per_testcase(Case, Config) -> - megaco_test_lib:end_per_testcase(Case, Config). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +-include_lib("common_test/include/ct.hrl"). +%%-------------------------------------------------------------------- +%% Common Test interface functions ----------------------------------- +%%-------------------------------------------------------------------- all() -> [ - fields, - modules, - exportall, - app_depend, - undef_funcs + app, + appup ]. -groups() -> - []. - -init_per_group(_GroupName, Config) -> - Config. - -end_per_group(_GroupName, Config) -> - Config. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -init_per_suite(suite) -> []; -init_per_suite(doc) -> []; -init_per_suite(Config) when is_list(Config) -> - case is_app(megaco) of - {ok, AppFile} -> - io:format("AppFile: ~n~p~n", [AppFile]), - case megaco_flex_scanner:is_enabled() of - true -> - case megaco_flex_scanner:is_reentrant_enabled() of - true -> - io:format("~nMegaco reentrant flex scanner enabled~n~n", []); - false -> - io:format("~nMegaco non-reentrant flex scanner enabled~n~n", []) - end; - false -> - io:format("~nMegaco flex scanner disabled~n~n", []) - end, - megaco:print_version_info(), - [{app_file, AppFile}|Config]; - {error, Reason} -> - fail(Reason) - end. - -is_app(App) -> - LibDir = code:lib_dir(App), - File = filename:join([LibDir, "ebin", atom_to_list(App) ++ ".app"]), - case file:consult(File) of - {ok, [{application, App, AppFile}]} -> - {ok, AppFile}; - {error, {LineNo, Mod, Code}} -> - IoList = lists:concat([File, ":", LineNo, ": ", - Mod:format_error(Code)]), - {error, list_to_atom(lists:flatten(IoList))}; - Error -> - {error, {invalid_format, Error}} - end. - - -end_per_suite(suite) -> []; -end_per_suite(doc) -> []; -end_per_suite(Config) when is_list(Config) -> - Config. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -fields(suite) -> - []; -fields(doc) -> - []; -fields(Config) when is_list(Config) -> - AppFile = key1search(app_file, Config), - Fields = [vsn, description, modules, registered, applications], - case check_fields(Fields, AppFile, []) of - [] -> - ok; - Missing -> - fail({missing_fields, Missing}) - end. - -check_fields([], _AppFile, Missing) -> - Missing; -check_fields([Field|Fields], AppFile, Missing) -> - check_fields(Fields, AppFile, check_field(Field, AppFile, Missing)). - -check_field(Name, AppFile, Missing) -> - io:format("checking field: ~p~n", [Name]), - case lists:keymember(Name, 1, AppFile) of - true -> - Missing; - false -> - [Name|Missing] - end. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -modules(suite) -> - []; -modules(doc) -> - []; -modules(Config) when is_list(Config) -> - AppFile = key1search(app_file, Config), - Mods = key1search(modules, AppFile), - EbinList = get_ebin_mods(megaco), - case missing_modules(Mods, EbinList, []) of - [] -> - ok; - Missing -> - throw({error, {missing_modules, Missing}}) - end, - case extra_modules(Mods, EbinList, []) of - [] -> - ok; - Extra -> - throw({error, {extra_modules, Extra}}) - end, - {ok, Mods}. - -get_ebin_mods(App) -> - LibDir = code:lib_dir(App), - EbinDir = filename:join([LibDir,"ebin"]), - {ok, Files0} = file:list_dir(EbinDir), - Files1 = [lists:reverse(File) || File <- Files0], - [list_to_atom(lists:reverse(Name)) || [$m,$a,$e,$b,$.|Name] <- Files1]. - - -missing_modules([], _Ebins, Missing) -> - Missing; -missing_modules([Mod|Mods], Ebins, Missing) -> - case lists:member(Mod, Ebins) of - true -> - missing_modules(Mods, Ebins, Missing); - false -> - io:format("missing module: ~p~n", [Mod]), - missing_modules(Mods, Ebins, [Mod|Missing]) - end. - - -extra_modules(_Mods, [], Extra) -> - Extra; -extra_modules(Mods, [Mod|Ebins], Extra) -> - case lists:member(Mod, Mods) of - true -> - extra_modules(Mods, Ebins, Extra); - false -> - io:format("supefluous module: ~p~n", [Mod]), - extra_modules(Mods, Ebins, [Mod|Extra]) - end. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -exportall(suite) -> - []; -exportall(doc) -> - []; -exportall(Config) when is_list(Config) -> - AppFile = key1search(app_file, Config), - Mods = key1search(modules, AppFile), - check_export_all(Mods). - - -check_export_all([]) -> - ok; -check_export_all([Mod|Mods]) -> - case (catch apply(Mod, module_info, [compile])) of - {'EXIT', {undef, _}} -> - check_export_all(Mods); - O -> - case lists:keysearch(options, 1, O) of - false -> - check_export_all(Mods); - {value, {options, List}} -> - case lists:member(export_all, List) of - true -> - throw({error, {export_all, Mod}}); - false -> - check_export_all(Mods) - end - end - end. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -app_depend(suite) -> - []; -app_depend(doc) -> - []; -app_depend(Config) when is_list(Config) -> - AppFile = key1search(app_file, Config), - Apps = key1search(applications, AppFile), - check_apps(Apps). - - -check_apps([]) -> - ok; -check_apps([App|Apps]) -> - case is_app(App) of - {ok, _} -> - check_apps(Apps); - Error -> - throw({error, {missing_app, {App, Error}}}) - end. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -undef_funcs(suite) -> - []; -undef_funcs(doc) -> - []; -undef_funcs(Config) when is_list(Config) -> - App = megaco, - AppFile = key1search(app_file, Config), - Mods = key1search(modules, AppFile), - Root = code:root_dir(), - LibDir = code:lib_dir(App), - EbinDir = filename:join([LibDir,"ebin"]), - XRefTestName = undef_funcs_make_name(App, xref_test_name), - {ok, XRef} = xref:start(XRefTestName), - ok = xref:set_default(XRef, - [{verbose,false},{warnings,false}]), - XRefName = undef_funcs_make_name(App, xref_name), - {ok, XRefName} = xref:add_release(XRef, Root, {name,XRefName}), - {ok, App} = xref:replace_application(XRef, App, EbinDir), - {ok, Undefs} = xref:analyze(XRef, undefined_function_calls), - xref:stop(XRef), - analyze_undefined_function_calls(Undefs, Mods, []). - -analyze_undefined_function_calls([], _, []) -> - ok; -analyze_undefined_function_calls([], _, AppUndefs) -> - exit({suite_failed, {undefined_function_calls, AppUndefs}}); -analyze_undefined_function_calls([{{Mod, _F, _A}, _C} = AppUndef|Undefs], - AppModules, AppUndefs) -> - %% Check that this module is our's - case lists:member(Mod,AppModules) of - true -> - {Calling,Called} = AppUndef, - {Mod1,Func1,Ar1} = Calling, - {Mod2,Func2,Ar2} = Called, - io:format("undefined function call: " - "~n ~w:~w/~w calls ~w:~w/~w~n", - [Mod1,Func1,Ar1,Mod2,Func2,Ar2]), - analyze_undefined_function_calls(Undefs, AppModules, - [AppUndef|AppUndefs]); - false -> - io:format("dropping ~p~n", [Mod]), - analyze_undefined_function_calls(Undefs, AppModules, AppUndefs) - end. - -%% This function is used simply to avoid cut-and-paste errors later... -undef_funcs_make_name(App, PostFix) -> - list_to_atom(atom_to_list(App) ++ "_" ++ atom_to_list(PostFix)). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - - -fail(Reason) -> - exit({suite_failed, Reason}). - -key1search(Key, L) -> - case lists:keysearch(Key, 1, L) of - undefined -> - fail({not_found, Key, L}); - {value, {Key, Value}} -> - Value - end. +%%-------------------------------------------------------------------- +%% Test Cases -------------------------------------------------------- +%%-------------------------------------------------------------------- +app() -> + [{doc, "Test that the megaco app file is ok"}]. +app(Config) when is_list(Config) -> + ok = test_server:app_test(megaco). +%%-------------------------------------------------------------------- +appup() -> + [{doc, "Test that the megaco appup file is ok"}]. +appup(Config) when is_list(Config) -> + ok = test_server:appup_test(megaco). diff --git a/lib/megaco/test/megaco_appup_test.erl b/lib/megaco/test/megaco_appup_test.erl index 325e7a6096..8dc3ad51a0 100644 --- a/lib/megaco/test/megaco_appup_test.erl +++ b/lib/megaco/test/megaco_appup_test.erl @@ -17,8 +17,6 @@ %% %% %CopyrightEnd% %% - -%% %%---------------------------------------------------------------------- %% Purpose: Verify the application specifics of the Megaco application %%---------------------------------------------------------------------- @@ -27,26 +25,18 @@ -compile(export_all). -compile({no_auto_import,[error/1]}). +-include_lib("common_test/include/ct.hrl"). -include("megaco_test_lib.hrl"). --define(APPLICATION, megaco). - -t() -> megaco_test_lib:t(?MODULE). -t(Case) -> megaco_test_lib:t({?MODULE, Case}). - - -%% Test server callbacks -init_per_testcase(Case, Config) -> - megaco_test_lib:init_per_testcase(Case, Config). - -end_per_testcase(Case, Config) -> - megaco_test_lib:end_per_testcase(Case, Config). - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% all() -> - [appup]. + Cases = + [ + appup_file + ], + Cases. groups() -> []. @@ -64,16 +54,9 @@ end_per_group(_GroupName, Config) -> init_per_suite(suite) -> []; init_per_suite(doc) -> []; init_per_suite(Config) when is_list(Config) -> - AppFile = file_name(?APPLICATION, ".app"), - AppupFile = file_name(?APPLICATION, ".appup"), - [{app_file, AppFile}, {appup_file, AppupFile}|Config]. + Config. -file_name(App, Ext) -> - LibDir = code:lib_dir(App), - filename:join([LibDir, "ebin", atom_to_list(App) ++ Ext]). - - end_per_suite(suite) -> []; end_per_suite(doc) -> []; end_per_suite(Config) when is_list(Config) -> @@ -82,468 +65,17 @@ end_per_suite(Config) when is_list(Config) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -appup(suite) -> - []; -appup(doc) -> - "perform a simple check of the appup file"; -appup(Config) when is_list(Config) -> - AppupFile = key1search(appup_file, Config), - AppFile = key1search(app_file, Config), - Modules = modules(AppFile), - check_appup(AppupFile, Modules). - -modules(File) -> - case file:consult(File) of - {ok, [{application,megaco,Info}]} -> - case lists:keysearch(modules,1,Info) of - {value, {modules, Modules}} -> - Modules; - false -> - fail({bad_appinfo, Info}) - end; - Error -> - fail({bad_appfile, Error}) - end. - - -check_appup(AppupFile, Modules) -> - case file:consult(AppupFile) of - {ok, [{V, UpFrom, DownTo}]} -> - check_appup(V, UpFrom, DownTo, Modules); - Else -> - fail({bad_appupfile, Else}) - end. - - -check_appup(V, UpFrom, DownTo, Modules) -> - check_version(V), - check_depends(up, UpFrom, Modules), - check_depends(down, DownTo, Modules), - check_module_subset(UpFrom), - check_module_subset(DownTo), - ok. - - -check_depends(_, [], _) -> - ok; -check_depends(UpDown, [Dep|Deps], Modules) -> - check_depend(UpDown, Dep, Modules), - check_depends(UpDown, Deps, Modules). - - -check_depend(up = UpDown, {add_application, ?APPLICATION} = Instr, Modules) -> - d("check_instructions(~w) -> entry with" - "~n Instruction: ~p" - "~n Modules: ~p", [UpDown, Instr, Modules]), - ok; -check_depend(down = UpDown, {remove_application, ?APPLICATION} = Instr, - Modules) -> - d("check_instructions(~w) -> entry with" - "~n Instruction: ~p" - "~n Modules: ~p", [UpDown, Instr, Modules]), - ok; -check_depend(UpDown, {V, Instructions}, Modules) -> - d("check_instructions(~w) -> entry with" - "~n V: ~p" - "~n Modules: ~p", [UpDown, V, Modules]), - check_version(V), - case check_instructions(UpDown, - Instructions, Instructions, [], [], Modules) of - {_Good, []} -> - ok; - {_, Bad} -> - fail({bad_instructions, Bad, UpDown}) - end. - - -check_instructions(_, [], _, Good, Bad, _) -> - {lists:reverse(Good), lists:reverse(Bad)}; -check_instructions(UpDown, [Instr|Instrs], AllInstr, Good, Bad, Modules) -> - d("check_instructions(~w) -> entry with" - "~n Instr: ~p", [UpDown,Instr]), - case (catch check_instruction(UpDown, Instr, AllInstr, Modules)) of - ok -> - check_instructions(UpDown, Instrs, AllInstr, - [Instr|Good], Bad, Modules); - {error, Reason} -> - d("check_instructions(~w) -> bad instruction: " - "~n Reason: ~p", [UpDown,Reason]), - check_instructions(UpDown, Instrs, AllInstr, Good, - [{Instr, Reason}|Bad], Modules) - end. - -%% A new module is added -check_instruction(up, {add_module, Module}, _, Modules) - when is_atom(Module) -> - d("check_instruction -> entry when up-add_module instruction with" - "~n Module: ~p", [Module]), - check_module(Module, Modules); - -%% An old module is re-added -check_instruction(down, {add_module, Module}, _, Modules) - when is_atom(Module) -> - d("check_instruction -> entry when down-add_module instruction with" - "~n Module: ~p", [Module]), - case (catch check_module(Module, Modules)) of - {error, {unknown_module, Module, Modules}} -> - ok; - ok -> - error({existing_readded_module, Module}) - end; - -%% Removing a module on upgrade: -%% - the module has been removed from the app-file. -%% - check that no module depends on this (removed) module -check_instruction(up, {remove, {Module, Pre, Post}}, _, Modules) - when is_atom(Module) andalso is_atom(Pre) andalso is_atom(Post) -> - d("check_instruction -> entry when up-remove instruction with" - "~n Module: ~p" - "~n Pre: ~p" - "~n Post: ~p", [Module, Pre, Post]), - case (catch check_module(Module, Modules)) of - {error, {unknown_module, Module, Modules}} -> - check_purge(Pre), - check_purge(Post); - ok -> - error({existing_removed_module, Module}) - end; - -%% Removing a module on downgrade: the module exist -%% in the app-file. -check_instruction(down, {remove, {Module, Pre, Post}}, AllInstr, Modules) - when is_atom(Module) andalso is_atom(Pre) andalso is_atom(Post) -> - d("check_instruction -> entry when down-remove instruction with" - "~n Module: ~p" - "~n Pre: ~p" - "~n Post: ~p", [Module, Pre, Post]), - case (catch check_module(Module, Modules)) of - ok -> - check_purge(Pre), - check_purge(Post), - check_no_remove_depends(Module, AllInstr); - {error, {unknown_module, Module, Modules}} -> - error({nonexisting_removed_module, Module}) - end; - -check_instruction(_, {load_module, Module, Pre, Post, Depend}, - AllInstr, Modules) - when is_atom(Module) andalso is_atom(Pre) andalso is_atom(Post) andalso is_list(Depend) -> - d("check_instruction -> entry when load_module instruction with" - "~n Module: ~p" - "~n Pre: ~p" - "~n Post: ~p" - "~n Depend: ~p", [Module, Pre, Post, Depend]), - check_module(Module, Modules), - check_module_depend(Module, Depend, Modules), - check_module_depend(Module, Depend, updated_modules(AllInstr, [])), - check_purge(Pre), - check_purge(Post); - -check_instruction(_, {update, Module, Change, Pre, Post, Depend}, - AllInstr, Modules) - when is_atom(Module) andalso is_atom(Pre) andalso is_atom(Post) andalso is_list(Depend) -> - d("check_instruction -> entry when update instruction with" - "~n Module: ~p" - "~n Change: ~p" - "~n Pre: ~p" - "~n Post: ~p" - "~n Depend: ~p", [Module, Change, Pre, Post, Depend]), - check_module(Module, Modules), - check_module_depend(Module, Depend, Modules), - check_module_depend(Module, Depend, updated_modules(AllInstr, [])), - check_change(Change), - check_purge(Pre), - check_purge(Post); - -check_instruction(_, {update, Module, supervisor}, _, Modules) - when is_atom(Module) -> - check_module(Module, Modules); - -check_instruction(_, {apply, {Module, Function, Args}}, _, Modules) - when is_atom(Module) andalso is_atom(Function) andalso is_list(Args) -> - d("check_instruction -> entry when down-apply instruction with" - "~n Module: ~p" - "~n Function: ~p" - "~n Args: ~p", [Module, Function, Args]), - check_module(Module, Modules), - check_apply(Module, Function, Args); - -check_instruction(_, {restart_application, ?APPLICATION}, _AllInstr, _Modules) -> - ok; - -check_instruction(_, Instr, _AllInstr, _Modules) -> - d("check_instruction -> entry when unknown instruction with" - "~n Instr: ~p", [Instr]), - error({error, {unknown_instruction, Instr}}). - - -%% If Module X depends on Module Y, then module Y must have an update -%% instruction of some sort (otherwise the depend is faulty). -updated_modules([], Modules) -> - d("update_modules -> entry when done with" - "~n Modules: ~p", [Modules]), - Modules; -updated_modules([Instr|Instrs], Modules) -> - d("update_modules -> entry with" - "~n Instr: ~p" - "~n Modules: ~p", [Instr,Modules]), - Module = instruction_module(Instr), - d("update_modules -> Module: ~p", [Module]), - updated_modules(Instrs, [Module|Modules]). - -instruction_module({add_module, Module}) -> - Module; -instruction_module({remove, {Module, _, _}}) -> - Module; -instruction_module({load_module, Module, _, _, _}) -> - Module; -instruction_module({update, Module, _, _, _, _}) -> - Module; -instruction_module({apply, {Module, _, _}}) -> - Module; -instruction_module(Instr) -> - d("instruction_module -> entry when unknown instruction with" - "~n Instr: ~p", [Instr]), - error({error, {unknown_instruction, Instr}}). - - -%% Check that the modules handled in an instruction set for version X -%% is a subset of the instruction set for version X-1. -check_module_subset(Instructions) -> - %% io:format("check_module_subset -> " - %% "~n Instructions: ~p" - %% "~n", [Instructions]), - do_check_module_subset(modules_of(Instructions)). - -do_check_module_subset([]) -> - ok; -do_check_module_subset([_]) -> - ok; -do_check_module_subset([{_V1, Mods1}|T]) -> - %% io:format("do_check_module_subset -> " - %% "~n V1: ~p" - %% "~n Mods1: ~p" - %% "~n T: ~p" - %% "~n", [_V1, Mods1, T]), - {V2, Mods2} = hd(T), - %% Check that the modules in V1 is a subset of V2 - case do_check_module_subset2(Mods1, Mods2) of - ok -> - do_check_module_subset(T); - {error, Modules} -> - fail({subset_missing_instructions, V2, Modules}) - end. - -do_check_module_subset2(Mods1, Mods2) -> - do_check_module_subset2(Mods1, Mods2, []). - -do_check_module_subset2([], _, []) -> - ok; -do_check_module_subset2([], _, Acc) -> - {error, lists:reverse(Acc)}; -do_check_module_subset2([Mod|Mods], Mods2, Acc) -> - case lists:member(Mod, Mods2) of - true -> - do_check_module_subset2(Mods, Mods2, Acc); - false -> - do_check_module_subset2(Mods, Mods2, [Mod|Acc]) - end. - - -modules_of(Instructions) -> - modules_of(Instructions, []). - -modules_of([], Acc) -> - lists:reverse(Acc); -modules_of([{V,Instructions}|T], Acc) -> - %% io:format("modules_of -> " - %% "~n V: ~p" - %% "~n Instructions: ~p" - %% "~n", [V, Instructions]), - case modules_of2(Instructions, []) of - Mods when is_list(Mods) -> - %% io:format("modules_of -> " - %% "~n Mods: ~p" - %% "~n", [Mods]), - modules_of(T, [{V, Mods}|Acc]); - skip -> - %% io:format("modules_of -> skip" - %% "~n", []), - modules_of(T, Acc) - end. - -modules_of2([], Acc) -> - lists:reverse(Acc); -modules_of2([Instr|Instructions], Acc) -> - case module_of(Instr) of - {value, Mod} -> - modules_of2(Instructions, [Mod|Acc]); - skip -> - skip; - false -> - modules_of2(Instructions, Acc) - end. - -module_of({add_module, Module}) -> - {value, Module}; -module_of({remove, {Module, _Pre, _Post}}) -> - {value, Module}; -module_of({load_module, Module, _Pre, _Post, _Depend}) -> - {value, Module}; -module_of({update, Module, _Change, _Pre, _Post, _Depend}) -> - {value, Module}; -module_of({restart_application, _App}) -> - skip; -module_of(_) -> - false. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -%% The version is a string consting of numbers separated by dots: "." -%% Example: "3.3.3" -%% -check_version(V) when is_list(V) -> - case do_check_version(string:tokens(V, [$.])) of - ok -> - ok; - {error, BadVersionPart} -> - throw({error, {bad_version, V, BadVersionPart}}) - end; -check_version(V) -> - error({bad_version, V}). - -do_check_version([]) -> - ok; -do_check_version([H|T]) -> - case (catch list_to_integer(H)) of - I when is_integer(I) -> - do_check_version(T); - _ -> - {error, H} - end. - -check_module(M, Modules) when is_atom(M) -> - case lists:member(M,Modules) of - true -> - ok; - false -> - error({unknown_module, M, Modules}) - end; -check_module(M, _) -> - error({bad_module, M}). - - -check_module_depend(M, [], _) when is_atom(M) -> - d("check_module_depend -> entry with" - "~n M: ~p", [M]), - ok; -check_module_depend(M, Deps, Modules) when is_atom(M) andalso is_list(Deps) -> - d("check_module_depend -> entry with" - "~n M: ~p" - "~n Deps: ~p" - "~n Modules: ~p", [M, Deps, Modules]), - case [Dep || Dep <- Deps, lists:member(Dep, Modules) == false] of - [] -> - ok; - Unknown -> - error({unknown_depend_modules, Unknown}) - end; -check_module_depend(_M, D, _Modules) -> - d("check_module_depend -> entry when bad depend with" - "~n D: ~p", [D]), - error({bad_depend, D}). - - -check_no_remove_depends(_Module, []) -> - ok; -check_no_remove_depends(Module, [Instr|Instrs]) -> - check_no_remove_depend(Module, Instr), - check_no_remove_depends(Module, Instrs). - -check_no_remove_depend(Module, {load_module, Mod, _Pre, _Post, Depend}) -> - case lists:member(Module, Depend) of - true -> - error({removed_module_in_depend, load_module, Mod, Module}); - false -> - ok - end; -check_no_remove_depend(Module, {update, Mod, _Change, _Pre, _Post, Depend}) -> - case lists:member(Module, Depend) of - true -> - error({removed_module_in_depend, update, Mod, Module}); - false -> - ok - end; -check_no_remove_depend(_, _) -> - ok. - - -check_change(soft) -> - ok; -check_change({advanced, _Something}) -> - ok; -check_change(Change) -> - error({bad_change, Change}). - - -check_purge(soft_purge) -> - ok; -check_purge(brutal_purge) -> - ok; -check_purge(Purge) -> - error({bad_purge, Purge}). - - -check_apply(Module, Function, Args) -> - case (catch Module:module_info()) of - Info when is_list(Info) -> - check_exported(Function, Args, Info); - {'EXIT', {undef, _}} -> - error({not_existing_module, Module}) - end. - -check_exported(Function, Args, Info) -> - case lists:keysearch(exports, 1, Info) of - {value, {exports, FuncList}} -> - Arity = length(Args), - Arities = [A || {F, A} <- FuncList, F == Function], - case lists:member(Arity, Arities) of - true -> - ok; - false -> - error({not_exported_function, Function, Arity}) - end; - _ -> - error({bad_export, Info}) - end. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -error(Reason) -> - throw({error, Reason}). - -fail(Reason) -> - exit({suite_failed, Reason}). +%% Test server callbacks +init_per_testcase(_Case, Config) when is_list(Config) -> + Config. -key1search(Key, L) -> - case lists:keysearch(Key, 1, L) of - undefined -> - fail({not_found, Key, L}); - {value, {Key, Value}} -> - Value - end. +end_per_testcase(_Case, Config) when is_list(Config) -> + Config. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -d(F, A) -> - d(false, F, A). +%% Perform a simple check of the appup file +appup_file(Config) when is_list(Config) -> + ok = ?t:appup_test(megaco). -d(true, F, A) -> - io:format(F ++ "~n", A); -d(_, _, _) -> - ok. - - diff --git a/lib/megaco/vsn.mk b/lib/megaco/vsn.mk index b95cd66a81..87a8151dbc 100644 --- a/lib/megaco/vsn.mk +++ b/lib/megaco/vsn.mk @@ -19,6 +19,6 @@ # %CopyrightEnd% APPLICATION = megaco -MEGACO_VSN = 3.18.1 +MEGACO_VSN = 3.18.2 PRE_VSN = APP_VSN = "$(APPLICATION)-$(MEGACO_VSN)$(PRE_VSN)" diff --git a/lib/mnesia/src/mnesia.erl b/lib/mnesia/src/mnesia.erl index 5bf2fc2dc3..34efeca4fa 100644 --- a/lib/mnesia/src/mnesia.erl +++ b/lib/mnesia/src/mnesia.erl @@ -1882,9 +1882,10 @@ any_table_info(Tab, Item) when is_atom(Tab) -> [] -> abort({no_exists, Tab, Item}); Props -> - lists:map(fun({setorbag, Type}) -> {type, Type}; - (Prop) -> Prop end, - Props) + Rename = fun ({setorbag, Type}) -> {type, Type}; + (Prop) -> Prop + end, + lists:sort(lists:map(Rename, Props)) end; name -> Tab; 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..305bf14bcf 100644 --- a/lib/mnesia/src/mnesia_tm.erl +++ b/lib/mnesia/src/mnesia_tm.erl @@ -80,6 +80,7 @@ start() -> init(Parent) -> register(?MODULE, self()), process_flag(trap_exit, true), + process_flag(message_queue_data, off_heap), %% Initialize the schema IgnoreFallback = mnesia_monitor:get_env(ignore_fallback_at_startup), @@ -950,7 +951,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/observer/priv/bin/cdv b/lib/observer/priv/bin/cdv index 1c44785ac2..d14fd47e41 100755 --- a/lib/observer/priv/bin/cdv +++ b/lib/observer/priv/bin/cdv @@ -1,4 +1,4 @@ #!/bin/sh -erl -sname cdv -noinput -s crashdump_viewer script_start $@ +erl -noinput -s crashdump_viewer script_start $@ diff --git a/lib/observer/priv/bin/cdv.bat b/lib/observer/priv/bin/cdv.bat index efa8bf8687..18136a30d6 100644 --- a/lib/observer/priv/bin/cdv.bat +++ b/lib/observer/priv/bin/cdv.bat @@ -1,2 +1,2 @@ @ECHO OFF -CALL werl -sname cdv -s crashdump_viewer script_start %* +CALL werl -s crashdump_viewer script_start %* diff --git a/lib/observer/priv/crashdump_viewer.tool b/lib/observer/priv/crashdump_viewer.tool deleted file mode 100644 index b6bd6bbdef..0000000000 --- a/lib/observer/priv/crashdump_viewer.tool +++ /dev/null @@ -1,2 +0,0 @@ -{version,"1.2"}. -[{config_func,{crashdump_viewer,configData,[]}}]. diff --git a/lib/observer/priv/crashdump_viewer/collapsd.gif b/lib/observer/priv/crashdump_viewer/collapsd.gif Binary files differdeleted file mode 100644 index 0b90c08a9a..0000000000 --- a/lib/observer/priv/crashdump_viewer/collapsd.gif +++ /dev/null diff --git a/lib/observer/priv/crashdump_viewer/exploded.gif b/lib/observer/priv/crashdump_viewer/exploded.gif Binary files differdeleted file mode 100644 index e3ab5ca2e9..0000000000 --- a/lib/observer/priv/crashdump_viewer/exploded.gif +++ /dev/null diff --git a/lib/observer/src/Makefile b/lib/observer/src/Makefile index dd7831fa2b..ff2bcbdb99 100644 --- a/lib/observer/src/Makefile +++ b/lib/observer/src/Makefile @@ -92,7 +92,7 @@ EXAMPLE_FILES= multitrace.erl TARGET_FILES= $(MODULES:%=$(EBIN)/%.$(EMULATOR)) $(APP_TARGET) $(APPUP_TARGET) PRIVDIR= ../priv -WEBTOOLFILES= $(PRIVDIR)/crashdump_viewer.tool $(PRIVDIR)/erlang_observer.png +PNGFILES= $(PRIVDIR)/erlang_observer.png BINDIR= $(PRIVDIR)/bin ifeq ($(findstring win32,$(TARGET)),win32) WIN32_EXECUTABLES= $(BINDIR)/etop.bat $(BINDIR)/cdv.bat @@ -103,10 +103,6 @@ EXECUTABLES= \ $(BINDIR)/etop \ $(BINDIR)/cdv \ $(WIN32_EXECUTABLES) -CDVDIR= $(PRIVDIR)/crashdump_viewer -GIF_FILES= \ - $(CDVDIR)/collapsd.gif \ - $(CDVDIR)/exploded.gif APP_FILE= observer.app @@ -163,9 +159,7 @@ release_spec: opt $(INSTALL_DATA) $(TARGET_FILES) "$(RELSYSDIR)/ebin" $(INSTALL_DIR) "$(RELSYSDIR)/priv/bin" $(INSTALL_SCRIPT) $(EXECUTABLES) "$(RELSYSDIR)/priv/bin" - $(INSTALL_DIR) "$(RELSYSDIR)/priv/crashdump_viewer" - $(INSTALL_DATA) $(WEBTOOLFILES) "$(RELSYSDIR)/priv" - $(INSTALL_DATA) $(GIF_FILES) "$(RELSYSDIR)/priv/crashdump_viewer" + $(INSTALL_DATA) $(PNGFILES) "$(RELSYSDIR)/priv" release_docs_spec: diff --git a/lib/observer/src/cdv_ets_cb.erl b/lib/observer/src/cdv_ets_cb.erl index 52a90b093b..ddd2d42df6 100644 --- a/lib/observer/src/cdv_ets_cb.erl +++ b/lib/observer/src/cdv_ets_cb.erl @@ -34,10 +34,8 @@ -define(COL_NAME, ?COL_ID+1). -define(COL_SLOT, ?COL_NAME+1). -define(COL_OWNER, ?COL_SLOT+1). --define(COL_BUCK, ?COL_OWNER+1). --define(COL_OBJ, ?COL_BUCK+1). +-define(COL_OBJ, ?COL_OWNER+1). -define(COL_MEM, ?COL_OBJ+1). --define(COL_TYPE, ?COL_MEM+1). %% Callbacks for cdv_virtual_list_wx col_to_elem(id) -> col_to_elem(?COL_ID); @@ -45,8 +43,6 @@ col_to_elem(?COL_ID) -> #ets_table.id; col_to_elem(?COL_NAME) -> #ets_table.name; col_to_elem(?COL_SLOT) -> #ets_table.slot; col_to_elem(?COL_OWNER) -> #ets_table.pid; -col_to_elem(?COL_TYPE) -> #ets_table.data_type; -col_to_elem(?COL_BUCK) -> #ets_table.buckets; col_to_elem(?COL_OBJ) -> #ets_table.size; col_to_elem(?COL_MEM) -> #ets_table.memory. @@ -57,7 +53,6 @@ col_spec() -> {"Owner", ?wxLIST_FORMAT_CENTRE, 120}, {"Objects", ?wxLIST_FORMAT_RIGHT, 80}, {"Memory", ?wxLIST_FORMAT_RIGHT, 80} -% {"Type", ?wxLIST_FORMAT_LEFT, 50} ]. get_info(Owner) -> diff --git a/lib/observer/src/cdv_mem_cb.erl b/lib/observer/src/cdv_mem_cb.erl index ba972d6963..abeddc7335 100644 --- a/lib/observer/src/cdv_mem_cb.erl +++ b/lib/observer/src/cdv_mem_cb.erl @@ -77,6 +77,10 @@ fix_alloc([{Title,Columns,Data}|Tables]) -> fix_alloc(Tables)]; fix_alloc([{Title,[{_,V}|_]=Data}|Tables]) -> fix_alloc([{Title,lists:duplicate(length(V),[]),Data}|Tables]); +fix_alloc([{"",[]}|Tables]) -> % no name and no data, probably truncated dump + fix_alloc(Tables); +fix_alloc([{Title,[]=Data}|Tables]) -> % no data, probably truncated dump + fix_alloc([{Title,[],Data}|Tables]); fix_alloc([]) -> []. diff --git a/lib/observer/src/crashdump_viewer.erl b/lib/observer/src/crashdump_viewer.erl index 9268dac180..2f9f81104a 100644 --- a/lib/observer/src/crashdump_viewer.erl +++ b/lib/observer/src/crashdump_viewer.erl @@ -90,6 +90,7 @@ %% All possible tags - use macros in order to avoid misspelling in the code +-define(abort,abort). -define(allocated_areas,allocated_areas). -define(allocator,allocator). -define(atoms,atoms). @@ -321,8 +322,16 @@ handle_call(general_info,_From,State=#state{file=File}) -> NumAtoms = GenInfo#general_info.num_atoms, WS = parse_vsn_str(GenInfo#general_info.system_vsn,4), TW = case get(truncated) of - true -> ["WARNING: The crash dump is truncated. " - "Some information might be missing."]; + true -> + case get(truncated_reason) of + undefined -> + ["WARNING: The crash dump is truncated. " + "Some information might be missing."]; + Reason -> + ["WARNING: The crash dump is truncated " + "("++Reason++"). " + "Some information might be missing."] + end; false -> [] end, ets:insert(cdv_reg_proc_table, @@ -515,8 +524,15 @@ truncated_warning([Tag|Tags]) -> false -> truncated_warning(Tags) end. truncated_warning() -> - ["WARNING: The crash dump is truncated here. " - "Some information might be missing."]. + case get(truncated_reason) of + undefined -> + ["WARNING: The crash dump is truncated here. " + "Some information might be missing."]; + Reason -> + ["WARNING: The crash dump is truncated here " + "("++Reason++"). " + "Some information might be missing."] + end. truncated_here(Tag) -> case get(truncated) of @@ -692,6 +708,7 @@ val(Fd, NoExist) -> {eof,[]} -> NoExist; [] -> NoExist; {eof,Val} -> Val; + "=abort:"++_ -> NoExist; Val -> Val end. @@ -787,7 +804,7 @@ do_read_file(File) -> ?erl_crash_dump -> reset_index_table(), insert_index(Tag,Id,N1+1), - put(last_tag,{Tag,""}), + put_last_tag(Tag,""), indexify(Fd,Rest,N1), end_progress(), check_if_truncated(), @@ -831,7 +848,7 @@ indexify(Fd,Bin,N) -> <<_:Pos/binary,TagAndRest/binary>> = Bin, {Tag,Id,Rest,N1} = tag(Fd,TagAndRest,N+Pos), insert_index(Tag,Id,N1+1), % +1 to get past newline - put(last_tag,{Tag,Id}), + put_last_tag(Tag,Id), indexify(Fd,Rest,N1); nomatch -> case progress_read(Fd) of @@ -1174,7 +1191,11 @@ parse_link_list("{from,"++Str,Links,Monitors,MonitoredBy) -> parse_link_list(", "++Rest,Links,Monitors,MonitoredBy) -> parse_link_list(Rest,Links,Monitors,MonitoredBy); parse_link_list([],Links,Monitors,MonitoredBy) -> - {lists:reverse(Links),lists:reverse(Monitors),lists:reverse(MonitoredBy)}. + {lists:reverse(Links),lists:reverse(Monitors),lists:reverse(MonitoredBy)}; +parse_link_list(Unexpected,Links,Monitors,MonitoredBy) -> + io:format("WARNING: found unexpected data in link list:~n~s~n",[Unexpected]), + parse_link_list([],Links,Monitors,MonitoredBy). + parse_port(Str) -> {Port,Rest} = parse_link(Str,[]), @@ -1813,16 +1834,16 @@ main_modinfo(_Fd,LM,_LineHead) -> all_modinfo(Fd,LM,LineHead) -> case LineHead of "Current attributes" -> - Str = hex_to_str(val(Fd)), + Str = hex_to_str(val(Fd,"")), LM#loaded_mod{current_attrib=Str}; "Current compilation info" -> - Str = hex_to_str(val(Fd)), + Str = hex_to_str(val(Fd,"")), LM#loaded_mod{current_comp_info=Str}; "Old attributes" -> - Str = hex_to_str(val(Fd)), + Str = hex_to_str(val(Fd,"")), LM#loaded_mod{old_attrib=Str}; "Old compilation info" -> - Str = hex_to_str(val(Fd)), + Str = hex_to_str(val(Fd,"")), LM#loaded_mod{old_comp_info=Str}; Other -> unexpected(Fd,Other,"loaded modules info"), @@ -1848,7 +1869,12 @@ hex_to_term([],Acc) -> Bin}; Term -> Term - end. + end; +hex_to_term(Rest,Acc) -> + {"WARNING: The term is probably truncated!", + "I can not convert hex to term.", + Rest,list_to_binary(lists:reverse(Acc))}. + hex_to_dec("F") -> 15; hex_to_dec("E") -> 14; @@ -2159,7 +2185,8 @@ sort_allocator_types([{Name,Data}|Allocators],Acc,DoTotal) -> Type = case string:tokens(Name,"[]") of [T,_Id] -> T; - [Name] -> Name + [Name] -> Name; + Other -> Other end, TypeData = proplists:get_value(Type,Acc,[]), {NewTypeData,NewDoTotal} = sort_type_data(Type,Data,TypeData,DoTotal), @@ -2686,6 +2713,7 @@ count_index(Tag) -> %%----------------------------------------------------------------- %% Convert tags read from crashdump to atoms used as first part of key %% in cdv_dump_index_table +tag_to_atom("abort") -> ?abort; tag_to_atom("allocated_areas") -> ?allocated_areas; tag_to_atom("allocator") -> ?allocator; tag_to_atom("atoms") -> ?atoms; @@ -2720,6 +2748,14 @@ tag_to_atom(UnknownTag) -> list_to_atom(UnknownTag). %%%----------------------------------------------------------------- +%%% Store last tag for use when truncated, and reason if aborted +put_last_tag(?abort,Reason) -> + %% Don't overwrite the real last tag + put(truncated_reason,Reason); +put_last_tag(Tag,Id) -> + put(last_tag,{Tag,Id}). + +%%%----------------------------------------------------------------- %%% Fetch next chunk from crashdump file lookup_and_parse_index(File,What,ParseFun,Str) when is_list(File) -> Indices = lookup_index(What), @@ -2815,7 +2851,16 @@ collect(Pids,Acc) -> update_progress(), collect(Pids,Acc); {'DOWN', _Ref, process, Pid, {pmap_done,Result}} -> - collect(lists:delete(Pid,Pids),[Result|Acc]) + collect(lists:delete(Pid,Pids),[Result|Acc]); + {'DOWN', _Ref, process, Pid, _Error} -> + Warning = + "WARNING: an error occured while parsing data.\n" ++ + case get(truncated) of + true -> "This might be because the dump is truncated.\n"; + false -> "" + end, + io:format(Warning), + collect(lists:delete(Pid,Pids),Acc) end. %%%----------------------------------------------------------------- diff --git a/lib/observer/test/crashdump_viewer_SUITE.erl b/lib/observer/test/crashdump_viewer_SUITE.erl index 73ed890802..8df69c6624 100644 --- a/lib/observer/test/crashdump_viewer_SUITE.erl +++ b/lib/observer/test/crashdump_viewer_SUITE.erl @@ -420,6 +420,10 @@ special(File,Procs) -> %% ".trunc" -> %% %% ???? %% ok; + ".trunc.bytes" -> + {ok,_,[TW]} = crashdump_viewer:general_info(), + {match,_} = re:run(TW,"CRASH DUMP SIZE LIMIT REACHED"), + ok; _ -> ok end, @@ -481,7 +485,11 @@ do_create_dumps(DataDir,Rel) -> current -> CD3 = dump_with_args(DataDir,Rel,"instr","+Mim true"), CD4 = dump_with_strange_module_name(DataDir,Rel,"strangemodname"), - {[CD1,CD2,CD3,CD4], DosDump}; + Bytes = rand:uniform(300000) + 100, + CD5 = dump_with_args(DataDir,Rel,"trunc.bytes", + "-env ERL_CRASH_DUMP_BYTES " ++ + integer_to_list(Bytes)), + {[CD1,CD2,CD3,CD4,CD5], DosDump}; _ -> {[CD1,CD2], DosDump} end. 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/public_key/doc/src/public_key.xml b/lib/public_key/doc/src/public_key.xml index 385604677c..edebfe0f84 100644 --- a/lib/public_key/doc/src/public_key.xml +++ b/lib/public_key/doc/src/public_key.xml @@ -822,6 +822,36 @@ fun(#'DistributionPoint'{}, #'CertificateList'{}, </func> <func> + <name>ssh_hostkey_fingerprint(HostKey) -> string()</name> + <name>ssh_hostkey_fingerprint(DigestType, HostKey) -> string()</name> + <fsummary>Calculates a ssh fingerprint for a hostkey.</fsummary> + <type> + <v>Key = public_key()</v> + <v>DigestType = digest_type()</v> + </type> + <desc> + <p>Calculates a ssh fingerprint from a public host key as openssh does.</p> + <p>The algorithm in <c>ssh_hostkey_fingerprint/1</c> is md5 to be compatible with older + ssh-keygen commands. The string from the second variant is prepended by the algorithm name + in uppercase as in newer ssh-keygen commands.</p> + <p>Examples:</p> + <code> + 2> public_key:ssh_hostkey_fingerprint(Key). + "f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84" + + 3> public_key:ssh_hostkey_fingerprint(md5,Key). + "MD5:f5:64:a6:c1:5a:cb:9f:0a:10:46:a2:5c:3e:2f:57:84" + + 4> public_key:ssh_hostkey_fingerprint(sha,Key). + "SHA1:bSLY/C4QXLDL/Iwmhyg0PGW9UbY" + + 5> public_key:ssh_hostkey_fingerprint(sha256,Key). + "SHA256:aZGXhabfbf4oxglxltItWeHU7ub3Dc31NcNw2cMJePQ" + </code> + </desc> + </func> + + <func> <name>verify(Msg, DigestType, Signature, Key) -> boolean()</name> <fsummary>Verifies a digital signature.</fsummary> <type> diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl index d23abfe256..fed3b09f36 100644 --- a/lib/public_key/src/public_key.erl +++ b/lib/public_key/src/public_key.erl @@ -49,6 +49,7 @@ pkix_normalize_name/1, pkix_path_validation/3, ssh_decode/2, ssh_encode/2, + ssh_hostkey_fingerprint/1, ssh_hostkey_fingerprint/2, ssh_curvename2oid/1, oid2ssh_curvename/1, pkix_crls_validate/3, pkix_dist_point/1, @@ -91,7 +92,8 @@ -type public_crypt_options() :: [{rsa_pad, rsa_padding()}]. -type rsa_digest_type() :: 'md5' | 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512'. -type dss_digest_type() :: 'none' | 'sha'. %% None is for backwards compatibility --type ecdsa_digest_type() :: 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512'. +-type ecdsa_digest_type() :: 'sha'| 'sha224' | 'sha256' | 'sha384' | 'sha512'. +-type digest_type() :: rsa_digest_type() | dss_digest_type() | ecdsa_digest_type(). -type crl_reason() :: unspecified | keyCompromise | cACompromise | affiliationChanged | superseded | cessationOfOperation | certificateHold | privilegeWithdrawn | aACompromise. -type oid() :: tuple(). @@ -819,6 +821,41 @@ oid2ssh_curvename(?'secp384r1') -> <<"nistp384">>; oid2ssh_curvename(?'secp521r1') -> <<"nistp521">>. %%-------------------------------------------------------------------- +-spec ssh_hostkey_fingerprint(public_key()) -> string(). +-spec ssh_hostkey_fingerprint(digest_type(), public_key()) -> string(). + +ssh_hostkey_fingerprint(Key) -> + sshfp_string(md5, Key). + +ssh_hostkey_fingerprint(HashAlg, Key) -> + lists:concat([sshfp_alg_name(HashAlg), + [$: | sshfp_string(HashAlg, Key)] + ]). + +sshfp_string(HashAlg, Key) -> + %% Other HashAlgs than md5 will be printed with + %% other formats than hextstr by + %% ssh-keygen -E <alg> -lf <file> + fp_fmt(sshfp_fmt(HashAlg), crypto:hash(HashAlg, public_key:ssh_encode(Key,ssh2_pubkey))). + +sshfp_alg_name(sha) -> "SHA1"; +sshfp_alg_name(Alg) -> string:to_upper(atom_to_list(Alg)). + +sshfp_fmt(md5) -> hexstr; +sshfp_fmt(_) -> b64. + +fp_fmt(hexstr, Bin) -> + lists:flatten(string:join([io_lib:format("~2.16.0b",[C1]) || <<C1>> <= Bin], ":")); +fp_fmt(b64, Bin) -> + %% This function clause *seems* to be + %% [C || C<-base64:encode_to_string(Bin), C =/= $=] + %% but I am not sure. Must be checked. + B64Chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", + BitsInLast = 8*size(Bin) rem 6, + Padding = (6-BitsInLast) rem 6, % Want BitsInLast = [1:5] to map to padding [5:1] and 0 -> 0 + [lists:nth(C+1,B64Chars) || <<C:6>> <= <<Bin/binary,0:Padding>> ]. + +%%-------------------------------------------------------------------- -spec short_name_hash({rdnSequence, [#'AttributeTypeAndValue'{}]}) -> string(). diff --git a/lib/public_key/test/public_key.cover b/lib/public_key/test/public_key.cover index ec00814578..6c46492bec 100644 --- a/lib/public_key/test/public_key.cover +++ b/lib/public_key/test/public_key.cover @@ -1,4 +1,4 @@ {incl_app,public_key,details}. -{excl_mods, public_key, ['OTP-PUB-KEY']}. +{excl_mods, public_key, ['OTP-PUB-KEY', 'PKCS-FRAME']}. diff --git a/lib/public_key/test/public_key_SUITE.erl b/lib/public_key/test/public_key_SUITE.erl index b22b69a0f2..cd24819899 100644 --- a/lib/public_key/test/public_key_SUITE.erl +++ b/lib/public_key/test/public_key_SUITE.erl @@ -45,7 +45,14 @@ all() -> {group, sign_verify}, pkix, pkix_countryname, pkix_emailaddress, pkix_path_validation, pkix_iso_rsa_oid, pkix_iso_dsa_oid, pkix_crl, general_name, - short_cert_issuer_hash, short_crl_issuer_hash]. + short_cert_issuer_hash, short_crl_issuer_hash, + ssh_hostkey_fingerprint_md5_implicit, + ssh_hostkey_fingerprint_md5, + ssh_hostkey_fingerprint_sha, + ssh_hostkey_fingerprint_sha256, + ssh_hostkey_fingerprint_sha384, + ssh_hostkey_fingerprint_sha512 + ]. groups() -> [{pem_decode_encode, [], [dsa_pem, rsa_pem, ec_pem, encrypted_pem, @@ -81,7 +88,25 @@ init_per_group(_GroupName, Config) -> end_per_group(_GroupName, Config) -> Config. %%------------------------------------------------------------------- -init_per_testcase(_TestCase, Config0) -> +init_per_testcase(TestCase, Config) -> + case TestCase of + ssh_hostkey_fingerprint_md5_implicit -> init_fingerprint_testcase(md5, Config); + ssh_hostkey_fingerprint_md5 -> init_fingerprint_testcase(md5, Config); + ssh_hostkey_fingerprint_sha -> init_fingerprint_testcase(sha, Config); + ssh_hostkey_fingerprint_sha256 -> init_fingerprint_testcase(sha256, Config); + ssh_hostkey_fingerprint_sha384 -> init_fingerprint_testcase(sha384, Config); + ssh_hostkey_fingerprint_sha512 -> init_fingerprint_testcase(sha512, Config); + _ -> init_common_per_testcase(Config) + end. + +init_fingerprint_testcase(Alg, Config) -> + CryptoSupports = lists:member(Alg, proplists:get_value(hashs, crypto:supports())), + case CryptoSupports of + false -> {skip,{Alg,not_supported}}; + true -> init_common_per_testcase(Config) + end. + +init_common_per_testcase(Config0) -> Config = lists:keydelete(watchdog, 1, Config0), Dog = ct:timetrap(?TIMEOUT), [{watchdog, Dog} | Config]. @@ -89,6 +114,7 @@ init_per_testcase(_TestCase, Config0) -> end_per_testcase(_TestCase, _Config) -> ok. + %%-------------------------------------------------------------------- %% Test Cases -------------------------------------------------------- %%-------------------------------------------------------------------- @@ -529,6 +555,48 @@ ssh_openssh_public_key_long_header(Config) when is_list(Config) -> Decoded = public_key:ssh_decode(Encoded, rfc4716_public_key). %%-------------------------------------------------------------------- +%% Check of different host keys left to later +ssh_hostkey_fingerprint_md5_implicit(_Config) -> + Expected = "4b:0b:63:de:0f:a7:3a:ab:2c:cc:2d:d1:21:37:1d:3a", + Expected = public_key:ssh_hostkey_fingerprint(ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- +%% Check of different host keys left to later +ssh_hostkey_fingerprint_md5(_Config) -> + Expected = "MD5:4b:0b:63:de:0f:a7:3a:ab:2c:cc:2d:d1:21:37:1d:3a", + Expected = public_key:ssh_hostkey_fingerprint(md5, ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- +%% Since this kind of fingerprint is not available yet on standard +%% distros, we do like this instead. The Expected is generated with: +%% $ openssh-7.3p1/ssh-keygen -E sha1 -lf <file> +%% 2048 SHA1:Soammnaqg06jrm2jivMSnzQGlmk [email protected] (RSA) +ssh_hostkey_fingerprint_sha(_Config) -> + Expected = "SHA1:Soammnaqg06jrm2jivMSnzQGlmk", + Expected = public_key:ssh_hostkey_fingerprint(sha, ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- +%% Since this kind of fingerprint is not available yet on standard +%% distros, we do like this instead. +ssh_hostkey_fingerprint_sha256(_Config) -> + Expected = "SHA256:T7F1BahkJWR7iJO8+rpzWOPbp7LZP4MlNrDExdNYOvY", + Expected = public_key:ssh_hostkey_fingerprint(sha256, ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- +%% Since this kind of fingerprint is not available yet on standard +%% distros, we do like this instead. +ssh_hostkey_fingerprint_sha384(_Config) -> + Expected = "SHA384:QhkLoGNI4KXdPvC//HxxSCP3uTQVADqxdajbgm+Gkx9zqz8N94HyP1JmH8C4/aEl", + Expected = public_key:ssh_hostkey_fingerprint(sha384, ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- +%% Since this kind of fingerprint is not available yet on standard +%% distros, we do like this instead. +ssh_hostkey_fingerprint_sha512(_Config) -> + Expected = "SHA512:ezUismvm3ADQQb6Nm0c1DwQ6ydInlJNfsnSQejFkXNmABg1Aenk9oi45CXeBOoTnlfTsGG8nFDm0smP10PBEeA", + Expected = public_key:ssh_hostkey_fingerprint(sha512, ssh_hostkey(rsa)). + +%%-------------------------------------------------------------------- encrypt_decrypt() -> [{doc, "Test public_key:encrypt_private and public_key:decrypt_public"}]. encrypt_decrypt(Config) when is_list(Config) -> @@ -929,3 +997,13 @@ incorrect_countryname_pkix_cert() -> incorrect_emailaddress_pkix_cert() -> <<48,130,3,74,48,130,2,50,2,9,0,133,49,203,25,198,156,252,230,48,13,6,9,42,134, 72,134,247,13,1,1,5,5,0,48,103,49,11,48,9,6,3,85,4,6,19,2,65,85,49,19,48,17, 6,3,85,4,8,12,10,83,111,109,101,45,83,116,97,116,101,49,33,48,31,6,3,85,4,10, 12,24,73,110,116,101,114,110,101,116,32,87,105,100,103,105,116,115,32,80,116, 121,32,76,116,100,49,32,48,30,6,9,42,134,72,134,247,13,1,9,1,12,17,105,110, 118,97,108,105,100,64,101,109,97,105,108,46,99,111,109,48,30,23,13,49,51,49, 49,48,55,50,48,53,54,49,56,90,23,13,49,52,49,49,48,55,50,48,53,54,49,56,90, 48,103,49,11,48,9,6,3,85,4,6,19,2,65,85,49,19,48,17,6,3,85,4,8,12,10,83,111, 109,101,45,83,116,97,116,101,49,33,48,31,6,3,85,4,10,12,24,73,110,116,101, 114,110,101,116,32,87,105,100,103,105,116,115,32,80,116,121,32,76,116,100,49, 32,48,30,6,9,42,134,72,134,247,13,1,9,1,12,17,105,110,118,97,108,105,100,64, 101,109,97,105,108,46,99,111,109,48,130,1,34,48,13,6,9,42,134,72,134,247,13, 1,1,1,5,0,3,130,1,15,0,48,130,1,10,2,130,1,1,0,190,243,49,213,219,60,232,105, 1,127,126,9,130,15,60,190,78,100,148,235,246,223,21,91,238,200,251,84,55,212, 78,32,120,61,85,172,0,144,248,5,165,29,143,79,64,178,51,153,203,76,115,238, 192,49,173,37,121,203,89,62,157,13,181,166,30,112,154,40,202,140,104,211,157, 73,244,9,78,236,70,153,195,158,233,141,42,238,2,143,160,225,249,27,30,140, 151,176,43,211,87,114,164,108,69,47,39,195,123,185,179,219,28,218,122,53,83, 77,48,81,184,14,91,243,12,62,146,86,210,248,228,171,146,225,87,51,146,155, 116,112,238,212,36,111,58,41,67,27,6,61,61,3,84,150,126,214,121,57,38,12,87, 121,67,244,37,45,145,234,131,115,134,58,194,5,36,166,52,59,229,32,47,152,80, 237,190,58,182,248,98,7,165,198,211,5,31,231,152,116,31,108,71,218,64,188, 178,143,27,167,79,15,112,196,103,116,212,65,197,94,37,4,132,103,91,217,73, 223,207,185,7,153,221,240,232,31,44,102,108,82,83,56,242,210,214,74,71,246, 177,217,148,227,220,230,4,176,226,74,194,37,2,3,1,0,1,48,13,6,9,42,134,72, 134,247,13,1,1,5,5,0,3,130,1,1,0,89,247,141,154,173,123,123,203,143,85,28,79, 73,37,164,6,17,89,171,224,149,22,134,17,198,146,158,192,241,41,253,58,230, 133,71,189,43,66,123,88,15,242,119,227,249,99,137,61,200,54,161,0,177,167, 169,114,80,148,90,22,97,78,162,181,75,93,209,116,245,46,81,232,64,157,93,136, 52,57,229,113,197,218,113,93,42,161,213,104,205,137,30,144,183,58,10,98,47, 227,177,96,40,233,98,150,209,217,68,22,221,133,27,161,152,237,46,36,179,59, 172,97,134,194,205,101,137,71,192,57,153,20,114,27,173,233,166,45,56,0,61, 205,45,202,139,7,132,103,248,193,157,184,123,43,62,172,236,110,49,62,209,78, 249,83,219,133,1,213,143,73,174,16,113,143,189,41,84,60,128,222,30,177,104, 134,220,52,239,171,76,59,176,36,113,176,214,118,16,44,235,21,167,199,216,200, 76,219,142,248,13,70,145,205,216,230,226,148,97,223,216,179,68,209,222,63, 140,137,24,164,192,149,194,79,119,247,75,159,49,116,70,241,70,116,11,40,119, 176,157,36,160,102,140,255,34,248,25,231,136,59>>. + + + +ssh_hostkey(rsa) -> + [{PKdecoded,_}] = + public_key:ssh_decode( + <<"ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDYXcYmsyJBstl4EfFYzfQJmSiUE162zvSGSoMYybShYOI6rnnyvvihfw8Aml+2gZ716F2tqG48FQ/yPZEGWNPMrCejPpJctaPWhpNdNMJ8KFXSEgr5bY2mEpa19DHmuDeXKzeJJ+X7s3fVdYc4FMk5731KIW6Huf019ZnTxbx0VKG6b1KAJBg3vpNsDxEMwQ4LFMB0JHVklOTzbxmpaeULuIxvl65A+eGeFVeo2Q+YI9UnwY1vSgmc9Azwy8Ie9Z0HpQBN5I7Uc5xnknT8V6xDhgNfXEfzsgsRdDfZLECt1WO/1gP9wkosvAGZWt5oG8pbNQWiQdFq536ck8WQD9WD [email protected]">>, + public_key), + PKdecoded. + diff --git a/lib/public_key/vsn.mk b/lib/public_key/vsn.mk index 84f6a659b5..2f541d8d84 100644 --- a/lib/public_key/vsn.mk +++ b/lib/public_key/vsn.mk @@ -1 +1 @@ -PUBLIC_KEY_VSN = 1.2 +PUBLIC_KEY_VSN = 1.3 diff --git a/lib/ssh/doc/src/introduction.xml b/lib/ssh/doc/src/introduction.xml index ca84528f3d..b7a73e2597 100644 --- a/lib/ssh/doc/src/introduction.xml +++ b/lib/ssh/doc/src/introduction.xml @@ -195,8 +195,6 @@ Transport Layer Protocol</item> <item><url href="http://www.ietf.org/rfc/rfc4254.txt">RFC 4254</url> - Connection Protocol</item> - <item><url href="http://www.ietf.org/rfc/rfc4255.txt">RFC 4255</url> - - Key Fingerprints</item> <item><url href="http://www.ietf.org/rfc/rfc4344.txt">RFC 4344</url> - Transport Layer Encryption Modes</item> <item><url href="http://www.ietf.org/rfc/rfc4716.txt">RFC 4716</url> - 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/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml index ef9f7cbd9b..6b49f89449 100644 --- a/lib/ssh/doc/src/ssh.xml +++ b/lib/ssh/doc/src/ssh.xml @@ -175,11 +175,21 @@ supplied with this option. </p> </item> - <tag><c><![CDATA[{silently_accept_hosts, boolean()}]]></c></tag> + <tag><c><![CDATA[{silently_accept_hosts, boolean() | accept_fun() | {crypto:digest_type(), accept_fun()} }]]></c> + <br/> + <c><![CDATA[accept_fun() :: fun(PeerName::string(), FingerPrint::string()) -> boolean()]]></c> + </tag> <item> <p>When <c>true</c>, hosts are added to the file <c><![CDATA[known_hosts]]></c> without asking the user. - Defaults to <c>false</c>. + Defaults to <c>false</c> which will give a user question on stdio of whether to accept or reject a previously + unseen host.</p> + <p>If the option value is has an <c>accept_fun()</c>, that fun will called with the arguments + <c>(PeerName, PeerHostKeyFingerPrint)</c>. The fingerprint is calculated on the Peer's Host Key with + <seealso marker="public_key:public_key#ssh_hostkey_fingerprint-1">public_key:ssh_hostkey_fingerprint/1</seealso>. + </p> + <p>If the <c>crypto:digest_type()</c> is present, the fingerprint is calculated with that digest type by the function + <seealso marker="public_key:public_key#ssh_hostkey_fingerprint-2">public_key:ssh_hostkey_fingerprint/2</seealso>. </p> </item> <tag><c><![CDATA[{user_interaction, boolean()}]]></c></tag> diff --git a/lib/ssh/doc/src/ssh_protocol.xml b/lib/ssh/doc/src/ssh_protocol.xml index 7288266cf7..013823b4df 100644 --- a/lib/ssh/doc/src/ssh_protocol.xml +++ b/lib/ssh/doc/src/ssh_protocol.xml @@ -138,8 +138,6 @@ Transport Layer Protocol.</item> <item><url href="http://www.ietf.org/rfc/rfc4254.txt">RFC 4254</url> - Connection Protocol.</item> - <item><url href="http://www.ietf.org/rfc/rfc4255.txt">RFC 4255</url> - - Key Fingerprints.</item> <item><url href="http://www.ietf.org/rfc/rfc4344.txt">RFC 4344</url> - Transport Layer Encryption Modes.</item> <item><url href="http://www.ietf.org/rfc/rfc4716.txt">RFC 4716</url> - 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.erl b/lib/ssh/src/ssh.erl index 1d7be3547b..31e343e81b 100644 --- a/lib/ssh/src/ssh.erl +++ b/lib/ssh/src/ssh.erl @@ -617,6 +617,15 @@ handle_ssh_option({user_dir_fun, Value} = Opt) when is_function(Value) -> Opt; handle_ssh_option({silently_accept_hosts, Value} = Opt) when is_boolean(Value) -> Opt; +handle_ssh_option({silently_accept_hosts, Value} = Opt) when is_function(Value,2) -> + Opt; +handle_ssh_option({silently_accept_hosts, {DigestAlg,Value}} = Opt) when is_function(Value,2) -> + case lists:member(DigestAlg, [md5, sha, sha224, sha256, sha384, sha512]) of + true -> + Opt; + false -> + throw({error, {eoptions, Opt}}) + end; handle_ssh_option({user_interaction, Value} = Opt) when is_boolean(Value) -> Opt; handle_ssh_option({preferred_algorithms,[_|_]} = Opt) -> 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.erl b/lib/ssh/src/ssh_connection.erl index d0f2d54c06..1153095135 100644 --- a/lib/ssh/src/ssh_connection.erl +++ b/lib/ssh/src/ssh_connection.erl @@ -287,6 +287,9 @@ handle_msg(#ssh_msg_channel_open_confirmation{recipient_channel = ChannelId, ssh_channel:cache_update(Cache, Channel#channel{ remote_id = RemoteId, + recv_packet_size = max(32768, % rfc4254/5.2 + min(PacketSz, Channel#channel.recv_packet_size) + ), send_window_size = WindowSz, send_packet_size = PacketSz}), {Reply, Connection} = reply_msg(Channel, Connection0, {open, ChannelId}), 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/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl index 15b80de30a..21ba34506a 100644 --- a/lib/ssh/src/ssh_transport.erl +++ b/lib/ssh/src/ssh_transport.erl @@ -734,12 +734,16 @@ public_algo({#'ECPoint'{},{namedCurve,OID}}) -> list_to_atom("ecdsa-sha2-" ++ binary_to_list(Curve)). -accepted_host(Ssh, PeerName, Opts) -> +accepted_host(Ssh, PeerName, Public, Opts) -> case proplists:get_value(silently_accept_hosts, Opts, false) of + F when is_function(F,2) -> + true == (catch F(PeerName, public_key:ssh_hostkey_fingerprint(Public))); + {DigestAlg,F} when is_function(F,2) -> + true == (catch F(PeerName, public_key:ssh_hostkey_fingerprint(DigestAlg,Public))); true -> - yes; + true; false -> - yes_no(Ssh, "New host " ++ PeerName ++ " accept") + yes == yes_no(Ssh, "New host " ++ PeerName ++ " accept") end. known_host_key(#ssh{opts = Opts, key_cb = Mod, peer = Peer} = Ssh, @@ -749,10 +753,10 @@ known_host_key(#ssh{opts = Opts, key_cb = Mod, peer = Peer} = Ssh, true -> ok; false -> - case accepted_host(Ssh, PeerName, Opts) of - yes -> + case accepted_host(Ssh, PeerName, Public, Opts) of + true -> Mod:add_host_key(PeerName, Public, Opts); - no -> + false -> {error, rejected} end end. diff --git a/lib/ssh/test/ssh.cover b/lib/ssh/test/ssh.cover index a4221fbbbe..69d2a1c4f8 100644 --- a/lib/ssh/test/ssh.cover +++ b/lib/ssh/test/ssh.cover @@ -1,2 +1,3 @@ {incl_app,ssh,details}. +{excl_mods, ssh, [ssh_dbg, ssh_info, ssh_server_key_api, ssh_sftpd_file_api]}.
\ No newline at end of file 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..2819a4dbd9 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,58 +399,80 @@ 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}, Result = - try collect_data(ConnectionRef, ChannelId) + try collect_data(ConnectionRef, ChannelId, EchoSize) 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. %%-------------------------------------------------------------------- @@ -909,36 +931,46 @@ big_cat_rx(ConnectionRef, ChannelId, Acc) -> timeout end. -collect_data(ConnectionRef, ChannelId) -> - ct:log("Listener ~p running! ConnectionRef=~p, ChannelId=~p",[self(),ConnectionRef,ChannelId]), - collect_data(ConnectionRef, ChannelId, [], 0). +collect_data(ConnectionRef, ChannelId, EchoSize) -> + ct:log("~p:~p Listener ~p running! ConnectionRef=~p, ChannelId=~p",[?MODULE,?LINE,self(),ConnectionRef,ChannelId]), + collect_data(ConnectionRef, ChannelId, EchoSize, [], 0). -collect_data(ConnectionRef, ChannelId, Acc, Sum) -> +collect_data(ConnectionRef, ChannelId, EchoSize, 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)]), - 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)]), - Bin - catch - C:E -> - ct:log("collect_data: received eof.~nAcc is strange...~nException=~p:~p~nAcc=~p", - [C,E,Acc]), - {error,{C,E}} - end; + ct:log("~p:~p collect_data: received ~p bytes. total ~p bytes, want ~p more", + [?MODULE,?LINE,size(Data),Sum+size(Data),EchoSize-Sum]), + ssh_connection:adjust_window(ConnectionRef, ChannelId, size(Data)), + collect_data(ConnectionRef, ChannelId, EchoSize, [Data | Acc], Sum+size(Data)); + {ssh_cm, ConnectionRef, Msg={eof, ChannelId}} -> + collect_data_report_end(Acc, Msg, EchoSize); + + {ssh_cm, ConnectionRef, Msg={closed,ChannelId}} -> + collect_data_report_end(Acc, Msg, EchoSize); + Msg -> - ct:log("collect_data: ***** unexpected message *****~n~p",[Msg]), - collect_data(ConnectionRef, ChannelId, Acc, Sum) + ct:log("~p:~p collect_data: ***** unexpected message *****~n~p",[?MODULE,?LINE,Msg]), + collect_data(ConnectionRef, ChannelId, EchoSize, Acc, Sum) after TO -> - ct:log("collect_data: ----- Nothing received for ~p seconds -----~n",[]), - collect_data(ConnectionRef, ChannelId, Acc, Sum) + ct:log("~p:~p collect_data: ----- Nothing received for ~p seconds -----~n",[?MODULE,?LINE,TO]), + collect_data(ConnectionRef, ChannelId, EchoSize, Acc, Sum) + end. + +collect_data_report_end(Acc, Msg, EchoSize) -> + try + iolist_to_binary(lists:reverse(Acc)) + of + Bin -> + ct:log("~p:~p collect_data: received ~p.~nGot in total ~p bytes, want ~p more", + [?MODULE,?LINE,Msg,size(Bin),EchoSize,size(Bin)]), + Bin + catch + C:E -> + ct:log("~p:~p collect_data: received ~p.~nAcc is strange...~nException=~p:~p~nAcc=~p", + [?MODULE,?LINE,Msg,C,E,Acc]), + {error,{C,E}} end. %%%------------------------------------------------------------------- diff --git a/lib/ssh/test/ssh_options_SUITE.erl b/lib/ssh/test/ssh_options_SUITE.erl index 61883c0647..8f060bebd8 100644 --- a/lib/ssh/test/ssh_options_SUITE.erl +++ b/lib/ssh/test/ssh_options_SUITE.erl @@ -61,7 +61,13 @@ unexpectedfun_option_client/1, unexpectedfun_option_server/1, user_dir_option/1, - connectfun_disconnectfun_server/1 + connectfun_disconnectfun_server/1, + hostkey_fingerprint_check/1, + hostkey_fingerprint_check_md5/1, + hostkey_fingerprint_check_sha/1, + hostkey_fingerprint_check_sha256/1, + hostkey_fingerprint_check_sha384/1, + hostkey_fingerprint_check_sha512/1 ]). %%% Common test callbacks @@ -100,6 +106,12 @@ all() -> disconnectfun_option_client, unexpectedfun_option_server, unexpectedfun_option_client, + hostkey_fingerprint_check, + hostkey_fingerprint_check_md5, + hostkey_fingerprint_check_sha, + hostkey_fingerprint_check_sha256, + hostkey_fingerprint_check_sha384, + hostkey_fingerprint_check_sha512, id_string_no_opt_client, id_string_own_string_client, id_string_random_client, @@ -540,10 +552,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 +669,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 @@ -774,6 +794,93 @@ unexpectedfun_option_client(Config) -> end. %%-------------------------------------------------------------------- +hostkey_fingerprint_check(Config) -> + do_hostkey_fingerprint_check(Config, old). + +hostkey_fingerprint_check_md5(Config) -> + do_hostkey_fingerprint_check(Config, md5). + +hostkey_fingerprint_check_sha(Config) -> + do_hostkey_fingerprint_check(Config, sha). + +hostkey_fingerprint_check_sha256(Config) -> + do_hostkey_fingerprint_check(Config, sha256). + +hostkey_fingerprint_check_sha384(Config) -> + do_hostkey_fingerprint_check(Config, sha384). + +hostkey_fingerprint_check_sha512(Config) -> + do_hostkey_fingerprint_check(Config, sha512). + + +%%%---- +do_hostkey_fingerprint_check(Config, HashAlg) -> + case supported_hash(HashAlg) of + true -> + really_do_hostkey_fingerprint_check(Config, HashAlg); + false -> + {skip,{unsupported_hash,HashAlg}} + end. + +supported_hash(old) -> true; +supported_hash(HashAlg) -> + proplists:get_value(HashAlg, + proplists:get_value(hashs, crypto:supports(), []), + false). + + +really_do_hostkey_fingerprint_check(Config, HashAlg) -> + PrivDir = proplists:get_value(priv_dir, Config), + UserDir = filename:join(PrivDir, nopubkey), % to make sure we don't use public-key-auth + file:make_dir(UserDir), + SysDir = proplists:get_value(data_dir, Config), + + %% All host key fingerprints. Trust that public_key has checked the ssh_hostkey_fingerprint + %% function since that function is used by the ssh client... + FPs = [case HashAlg of + old -> public_key:ssh_hostkey_fingerprint(Key); + _ -> public_key:ssh_hostkey_fingerprint(HashAlg, Key) + end + || FileCandidate <- begin + {ok,KeyFileCands} = file:list_dir(SysDir), + KeyFileCands + end, + nomatch =/= re:run(FileCandidate, ".*\\.pub", []), + {Key,_Cmnts} <- begin + {ok,Bin} = file:read_file(filename:join(SysDir, FileCandidate)), + try public_key:ssh_decode(Bin, public_key) + catch + _:_ -> [] + end + end], + ct:log("Fingerprints(~p) = ~p",[HashAlg,FPs]), + + %% Start daemon with the public keys that we got fingerprints from + {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SysDir}, + {user_dir, UserDir}, + {password, "morot"}]), + + FP_check_fun = fun(PeerName, FP) -> + ct:pal("PeerName = ~p, FP = ~p",[PeerName,FP]), + HostCheck = (Host == PeerName), + FPCheck = lists:member(FP, FPs), + ct:log("check ~p == ~p (~p) and ~n~p in ~p (~p)~n", + [PeerName,Host,HostCheck,FP,FPs,FPCheck]), + HostCheck and FPCheck + end, + + ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, + case HashAlg of + old -> FP_check_fun; + _ -> {HashAlg, FP_check_fun} + end}, + {user, "foo"}, + {password, "morot"}, + {user_dir, UserDir}, + {user_interaction, false}]), + ssh:stop_daemon(Pid). + +%%-------------------------------------------------------------------- %%% Test connect_timeout option in ssh:connect/4 ssh_connect_timeout(_Config) -> ConnTimeout = 2000, @@ -974,7 +1081,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 +1117,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_sftp_SUITE.erl b/lib/ssh/test/ssh_sftp_SUITE.erl index 19ad81e7da..70662f5d93 100644 --- a/lib/ssh/test/ssh_sftp_SUITE.erl +++ b/lib/ssh/test/ssh_sftp_SUITE.erl @@ -60,12 +60,16 @@ end_per_suite(_onfig) -> groups() -> [{not_unicode, [], [{group,erlang_server}, {group,openssh_server}, + {group,big_recvpkt_size}, sftp_nonexistent_subsystem]}, {unicode, [], [{group,erlang_server}, {group,openssh_server}, sftp_nonexistent_subsystem]}, + {big_recvpkt_size, [], [{group,erlang_server}, + {group,openssh_server}]}, + {erlang_server, [], [{group,write_read_tests}, version_option, {group,remote_tar}]}, @@ -149,6 +153,9 @@ init_per_group(unicode, Config) -> {skip, "Not unicode file encoding"} end; +init_per_group(big_recvpkt_size, Config) -> + [{pkt_sz,123456} | Config]; + init_per_group(erlang_server, Config) -> ct:comment("Begin ~p",[grps(Config)]), PrivDir = proplists:get_value(priv_dir, Config), @@ -257,7 +264,10 @@ init_per_testcase(Case, Config00) -> Dog = ct:timetrap(2 * ?default_timeout), User = proplists:get_value(user, Config0), Passwd = proplists:get_value(passwd, Config0), - + PktSzOpt = case proplists:get_value(pkt_sz, Config0) of + undefined -> []; + Sz -> [{packet_size,Sz}] + end, Config = case proplists:get_value(group,Config2) of erlang_server -> @@ -267,7 +277,9 @@ init_per_testcase(Case, Config00) -> [{user, User}, {password, Passwd}, {user_interaction, false}, - {silently_accept_hosts, true}] + {silently_accept_hosts, true} + | PktSzOpt + ] ), Sftp = {ChannelPid, Connection}, [{sftp, Sftp}, {watchdog, Dog} | Config2]; @@ -278,7 +290,9 @@ init_per_testcase(Case, Config00) -> {ok, ChannelPid, Connection} = ssh_sftp:start_channel(Host, [{user_interaction, false}, - {silently_accept_hosts, true}]), + {silently_accept_hosts, true} + | PktSzOpt + ]), Sftp = {ChannelPid, Connection}, [{sftp, Sftp}, {watchdog, Dog} | Config2] 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..c6a5990f41 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.4 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/Makefile b/lib/ssl/src/Makefile index b625db0656..e96b1b971f 100644 --- a/lib/ssl/src/Makefile +++ b/lib/ssl/src/Makefile @@ -50,6 +50,7 @@ MODULES= \ ssl_app \ ssl_dist_sup\ ssl_sup \ + dtls_udp_sup \ inet_tls_dist \ inet6_tls_dist \ ssl_certificate\ @@ -71,7 +72,9 @@ MODULES= \ ssl_crl\ ssl_crl_cache \ ssl_crl_hash_dir \ - ssl_socket \ + tls_socket \ + dtls_socket \ + dtls_udp_listener\ ssl_listen_tracker_sup \ tls_record \ dtls_record \ diff --git a/lib/ssl/src/dtls_connection.erl b/lib/ssl/src/dtls_connection.erl index 4f1f050e4b..68c6f93579 100644 --- a/lib/ssl/src/dtls_connection.erl +++ b/lib/ssl/src/dtls_connection.erl @@ -48,12 +48,12 @@ select_sni_extension/1]). %% Alert and close handling --export([send_alert/2, close/5]). +-export([encode_alert/3,send_alert/2, close/5]). %% Data handling --export([passive_receive/2, next_record_if_active/1, handle_common_event/4 - ]). +-export([encode_data/3, passive_receive/2, next_record_if_active/1, handle_common_event/4, + send/3]). %% gen_statem state functions -export([init/3, error/3, downgrade/3, %% Initiation and take down states @@ -93,61 +93,120 @@ start_fsm(Role, Host, Port, Socket, {#ssl_options{erl_dist = true},_, Tracker} = Error end. -send_handshake(Handshake, State) -> - send_handshake_flight(queue_handshake(Handshake, State)). +send_handshake(Handshake, #state{connection_states = ConnectionStates} = States) -> + #{epoch := Epoch} = ssl_record:current_connection_state(ConnectionStates, write), + send_handshake_flight(queue_handshake(Handshake, States), Epoch). + +queue_handshake(Handshake0, #state{tls_handshake_history = Hist0, + negotiated_version = Version, + flight_buffer = #{handshakes := HsBuffer0, + change_cipher_spec := undefined, + next_sequence := Seq} = Flight0} = State) -> + Handshake = dtls_handshake:encode_handshake(Handshake0, Version, Seq), + Hist = update_handshake_history(Handshake0, Handshake, Hist0), + State#state{flight_buffer = Flight0#{handshakes => [Handshake | HsBuffer0], + next_sequence => Seq +1}, + tls_handshake_history = Hist}; + +queue_handshake(Handshake0, #state{tls_handshake_history = Hist0, + negotiated_version = Version, + flight_buffer = #{handshakes_after_change_cipher_spec := Buffer0, + next_sequence := Seq} = Flight0} = State) -> + Handshake = dtls_handshake:encode_handshake(Handshake0, Version, Seq), + Hist = update_handshake_history(Handshake0, Handshake, Hist0), + State#state{flight_buffer = Flight0#{handshakes_after_change_cipher_spec => [Handshake | Buffer0], + next_sequence => Seq +1}, + tls_handshake_history = Hist}. -queue_flight_buffer(Msg, #state{negotiated_version = Version, - connection_states = ConnectionStates, - flight_buffer = Flight} = State) -> - ConnectionState = - ssl_record:current_connection_state(ConnectionStates, write), - Epoch = maps:get(epoch, ConnectionState), - State#state{flight_buffer = Flight ++ [{Version, Epoch, Msg}]}. - -queue_handshake(Handshake, #state{negotiated_version = Version, - tls_handshake_history = Hist0, - connection_states = ConnectionStates0} = State0) -> - {Frag, ConnectionStates, Hist} = - encode_handshake(Handshake, Version, ConnectionStates0, Hist0), - queue_flight_buffer(Frag, State0#state{connection_states = ConnectionStates, - tls_handshake_history = Hist}). send_handshake_flight(#state{socket = Socket, transport_cb = Transport, - flight_buffer = Flight, - connection_states = ConnectionStates0} = State0) -> - + flight_buffer = #{handshakes := Flight, + change_cipher_spec := undefined}, + negotiated_version = Version, + connection_states = ConnectionStates0} = State0, Epoch) -> + %% TODO remove hardcoded Max size {Encoded, ConnectionStates} = - encode_handshake_flight(Flight, ConnectionStates0), + encode_handshake_flight(lists:reverse(Flight), Version, 1400, Epoch, ConnectionStates0), + send(Transport, Socket, Encoded), + start_flight(State0#state{connection_states = ConnectionStates}); + +send_handshake_flight(#state{socket = Socket, + transport_cb = Transport, + flight_buffer = #{handshakes := [_|_] = Flight0, + change_cipher_spec := ChangeCipher, + handshakes_after_change_cipher_spec := []}, + negotiated_version = Version, + connection_states = ConnectionStates0} = State0, Epoch) -> + {HsBefore, ConnectionStates1} = + encode_handshake_flight(lists:reverse(Flight0), Version, 1400, Epoch, ConnectionStates0), + {EncChangeCipher, ConnectionStates} = encode_change_cipher(ChangeCipher, Version, Epoch, ConnectionStates1), + + send(Transport, Socket, [HsBefore, EncChangeCipher]), + start_flight(State0#state{connection_states = ConnectionStates}); - Transport:send(Socket, Encoded), - State0#state{flight_buffer = [], connection_states = ConnectionStates}. +send_handshake_flight(#state{socket = Socket, + transport_cb = Transport, + flight_buffer = #{handshakes := [_|_] = Flight0, + change_cipher_spec := ChangeCipher, + handshakes_after_change_cipher_spec := Flight1}, + negotiated_version = Version, + connection_states = ConnectionStates0} = State0, Epoch) -> + {HsBefore, ConnectionStates1} = + encode_handshake_flight(lists:reverse(Flight0), Version, 1400, Epoch-1, ConnectionStates0), + {EncChangeCipher, ConnectionStates2} = + encode_change_cipher(ChangeCipher, Version, Epoch-1, ConnectionStates1), + {HsAfter, ConnectionStates} = + encode_handshake_flight(lists:reverse(Flight1), Version, 1400, Epoch, ConnectionStates2), + send(Transport, Socket, [HsBefore, EncChangeCipher, HsAfter]), + start_flight(State0#state{connection_states = ConnectionStates}); -queue_change_cipher(Msg, State) -> - queue_flight_buffer(Msg, State). +send_handshake_flight(#state{socket = Socket, + transport_cb = Transport, + flight_buffer = #{handshakes := [], + change_cipher_spec := ChangeCipher, + handshakes_after_change_cipher_spec := Flight1}, + negotiated_version = Version, + connection_states = ConnectionStates0} = State0, Epoch) -> + {EncChangeCipher, ConnectionStates1} = + encode_change_cipher(ChangeCipher, Version, Epoch-1, ConnectionStates0), + {HsAfter, ConnectionStates} = + encode_handshake_flight(lists:reverse(Flight1), Version, 1400, Epoch, ConnectionStates1), + send(Transport, Socket, [EncChangeCipher, HsAfter]), + start_flight(State0#state{connection_states = ConnectionStates}). + +queue_change_cipher(ChangeCipher, #state{flight_buffer = Flight, + connection_states = ConnectionStates0} = State) -> + ConnectionStates = + dtls_record:next_epoch(ConnectionStates0, write), + State#state{flight_buffer = Flight#{change_cipher_spec => ChangeCipher}, + connection_states = ConnectionStates}. send_alert(Alert, #state{negotiated_version = Version, socket = Socket, transport_cb = Transport, connection_states = ConnectionStates0} = State0) -> {BinMsg, ConnectionStates} = - ssl_alert:encode(Alert, Version, ConnectionStates0), - Transport:send(Socket, BinMsg), + encode_alert(Alert, Version, ConnectionStates0), + send(Transport, Socket, BinMsg), State0#state{connection_states = ConnectionStates}. close(downgrade, _,_,_,_) -> ok; %% Other close(_, Socket, Transport, _,_) -> - Transport:close(Socket). + dtls_socket:close(Transport,Socket). reinit_handshake_data(#state{protocol_buffers = Buffers} = State) -> State#state{premaster_secret = undefined, public_key_info = undefined, tls_handshake_history = ssl_handshake:init_handshake_history(), protocol_buffers = - Buffers#protocol_buffers{dtls_fragment_state = - dtls_handshake:dtls_handshake_new_flight(0)}}. + Buffers#protocol_buffers{ + dtls_handshake_next_seq = 0, + dtls_handshake_next_fragments = [], + dtls_handshake_later_fragments = [] + }}. select_sni_extension(#client_hello{extensions = HelloExtensions}) -> HelloExtensions#hello_extensions.sni; @@ -160,7 +219,7 @@ select_sni_extension(_) -> %%-------------------------------------------------------------------- -spec start_link(atom(), host(), inet:port_number(), port(), list(), pid(), tuple()) -> - {ok, pid()} | ignore | {error, reason()}. + {ok, pid()} | ignore | {error, reason()}. %% %% Description: Creates a gen_fsm process which calls Module:init/1 to %% initialize. To ensure a synchronized start-up procedure, this function @@ -191,7 +250,6 @@ init({call, From}, {start, Timeout}, #state{host = Host, port = Port, role = client, ssl_options = SslOpts, session = #session{own_certificate = Cert} = Session0, - transport_cb = Transport, socket = Socket, connection_states = ConnectionStates0, renegotiation = {Renegotiation, _}, session_cache = Cache, @@ -199,23 +257,26 @@ init({call, From}, {start, Timeout}, } = State0) -> Timer = ssl_connection:start_or_recv_cancel_timer(Timeout, From), Hello = dtls_handshake:client_hello(Host, Port, ConnectionStates0, SslOpts, - Cache, CacheCb, Renegotiation, Cert), - + Cache, CacheCb, Renegotiation, Cert), + Version = Hello#client_hello.client_version, HelloVersion = dtls_record:lowest_protocol_version(SslOpts#ssl_options.versions), - Handshake0 = ssl_handshake:init_handshake_history(), - {BinMsg, ConnectionStates, Handshake} = - encode_handshake(Hello, HelloVersion, ConnectionStates0, Handshake0), - Transport:send(Socket, BinMsg), - State1 = State0#state{connection_states = ConnectionStates, - negotiated_version = Version, %% Requested version + State1 = prepare_flight(State0#state{negotiated_version = Version}), + State2 = send_handshake(Hello, State1#state{negotiated_version = HelloVersion}), + State3 = State2#state{negotiated_version = Version, %% Requested version session = Session0#session{session_id = Hello#client_hello.session_id}, - tls_handshake_history = Handshake, start_or_recv_from = From, timer = Timer}, - {Record, State} = next_record(State1), + {Record, State} = next_record(State3), next_event(hello, Record, State); +init({call, _} = Type, Event, #state{role = server, transport_cb = gen_udp} = State) -> + ssl_connection:init(Type, Event, + State#state{flight_state = {waiting, undefined, ?INITIAL_RETRANSMIT_TIMEOUT}}, + ?MODULE); +init({call, _} = Type, Event, #state{role = server} = State) -> + %% I.E. DTLS over sctp + ssl_connection:init(Type, Event, State#state{flight_state = reliable}, ?MODULE); init(Type, Event, State) -> ssl_connection:init(Type, Event, State, ?MODULE). @@ -232,34 +293,53 @@ error(_, _, _) -> #state{}) -> gen_statem:state_function_result(). %%-------------------------------------------------------------------- -hello(internal, #client_hello{client_version = ClientVersion} = Hello, - State = #state{connection_states = ConnectionStates0, - port = Port, session = #session{own_certificate = Cert} = Session0, - renegotiation = {Renegotiation, _}, - session_cache = Cache, - session_cache_cb = CacheCb, - negotiated_protocol = CurrentProtocol, - key_algorithm = KeyExAlg, - ssl_options = SslOpts}) -> - - case dtls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb, - ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of - #alert{} = Alert -> - ssl_connection:handle_own_alert(Alert, ClientVersion, hello, State); - {Version, {Type, Session}, - ConnectionStates, Protocol0, ServerHelloExt, HashSign} -> - Protocol = case Protocol0 of - undefined -> CurrentProtocol; - _ -> Protocol0 - end, - - ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt}, - State#state{connection_states = ConnectionStates, - negotiated_version = Version, - hashsign_algorithm = HashSign, - session = Session, - negotiated_protocol = Protocol}, ?MODULE) +hello(internal, #client_hello{cookie = <<>>, + client_version = Version} = Hello, #state{role = server, + transport_cb = Transport, + socket = Socket} = State0) -> + %% TODO: not hard code key + {ok, {IP, Port}} = dtls_socket:peername(Transport, Socket), + Cookie = dtls_handshake:cookie(<<"secret">>, IP, Port, Hello), + VerifyRequest = dtls_handshake:hello_verify_request(Cookie, Version), + State1 = prepare_flight(State0#state{negotiated_version = Version}), + State2 = send_handshake(VerifyRequest, State1), + {Record, State} = next_record(State2), + next_event(hello, Record, State#state{tls_handshake_history = ssl_handshake:init_handshake_history()}); +hello(internal, #client_hello{cookie = Cookie} = Hello, #state{role = server, + transport_cb = Transport, + socket = Socket} = State0) -> + {ok, {IP, Port}} = dtls_socket:peername(Transport, Socket), + %% TODO: not hard code key + case dtls_handshake:cookie(<<"secret">>, IP, Port, Hello) of + Cookie -> + handle_client_hello(Hello, State0); + _ -> + %% Handle bad cookie as new cookie request RFC 6347 4.1.2 + hello(internal, Hello#client_hello{cookie = <<>>}, State0) end; +hello(internal, #hello_verify_request{cookie = Cookie}, #state{role = client, + host = Host, port = Port, + ssl_options = SslOpts, + session = #session{own_certificate = OwnCert} + = Session0, + connection_states = ConnectionStates0, + renegotiation = {Renegotiation, _}, + session_cache = Cache, + session_cache_cb = CacheCb + } = State0) -> + State1 = prepare_flight(State0#state{tls_handshake_history = ssl_handshake:init_handshake_history()}), + Hello = dtls_handshake:client_hello(Host, Port, Cookie, ConnectionStates0, + SslOpts, + Cache, CacheCb, Renegotiation, OwnCert), + Version = Hello#client_hello.client_version, + HelloVersion = dtls_record:lowest_protocol_version(SslOpts#ssl_options.versions), + State2 = send_handshake(Hello, State1#state{negotiated_version = HelloVersion}), + State3 = State2#state{negotiated_version = Version, %% Requested version + session = + Session0#session{session_id = + Hello#client_hello.session_id}}, + {Record, State} = next_record(State3), + next_event(hello, Record, State); hello(internal, #server_hello{} = Hello, #state{connection_states = ConnectionStates0, negotiated_version = ReqVersion, @@ -273,24 +353,49 @@ hello(internal, #server_hello{} = Hello, ssl_connection:handle_session(Hello, Version, NewId, ConnectionStates, ProtoExt, Protocol, State) end; +hello(internal, {handshake, {#client_hello{cookie = <<>>} = Handshake, _}}, State) -> + %% Initial hello should not be in handshake history + {next_state, hello, State, [{next_event, internal, Handshake}]}; + +hello(internal, {handshake, {#hello_verify_request{} = Handshake, _}}, State) -> + %% hello_verify should not be in handshake history + {next_state, hello, State, [{next_event, internal, Handshake}]}; + hello(info, Event, State) -> handle_info(Event, hello, State); - hello(Type, Event, State) -> ssl_connection:hello(Type, Event, State, ?MODULE). abbreviated(info, Event, State) -> handle_info(Event, abbreviated, State); +abbreviated(internal = Type, + #change_cipher_spec{type = <<1>>} = Event, + #state{connection_states = ConnectionStates0} = State) -> + ConnectionStates1 = dtls_record:save_current_connection_state(ConnectionStates0, read), + ConnectionStates = dtls_record:next_epoch(ConnectionStates1, read), + ssl_connection:abbreviated(Type, Event, State#state{connection_states = ConnectionStates}, ?MODULE); +abbreviated(internal = Type, #finished{} = Event, #state{connection_states = ConnectionStates} = State) -> + ssl_connection:cipher(Type, Event, prepare_flight(State#state{connection_states = ConnectionStates}), ?MODULE); abbreviated(Type, Event, State) -> ssl_connection:abbreviated(Type, Event, State, ?MODULE). certify(info, Event, State) -> handle_info(Event, certify, State); +certify(internal = Type, #server_hello_done{} = Event, State) -> + ssl_connection:certify(Type, Event, prepare_flight(State), ?MODULE); certify(Type, Event, State) -> ssl_connection:certify(Type, Event, State, ?MODULE). cipher(info, Event, State) -> handle_info(Event, cipher, State); +cipher(internal = Type, #change_cipher_spec{type = <<1>>} = Event, + #state{connection_states = ConnectionStates0} = State) -> + ConnectionStates1 = dtls_record:save_current_connection_state(ConnectionStates0, read), + ConnectionStates = dtls_record:next_epoch(ConnectionStates1, read), + ssl_connection:cipher(Type, Event, State#state{connection_states = ConnectionStates}, ?MODULE); +cipher(internal = Type, #finished{} = Event, #state{connection_states = ConnectionStates} = State) -> + ssl_connection:cipher(Type, Event, + prepare_flight(State#state{connection_states = ConnectionStates}), ?MODULE); cipher(Type, Event, State) -> ssl_connection:cipher(Type, Event, State, ?MODULE). @@ -310,7 +415,6 @@ connection(internal, #hello_request{}, #state{host = Host, port = Port, State1#state{session = Session0#session{session_id = Hello#client_hello.session_id}}), next_event(hello, Record, State); - connection(internal, #client_hello{} = Hello, #state{role = server, allow_renegotiate = true} = State) -> %% Mitigate Computational DoS attack %% http://www.educatedguesswork.org/2011/10/ssltls_and_computational_dos.html @@ -319,14 +423,11 @@ connection(internal, #client_hello{} = Hello, #state{role = server, allow_renego %% renegotiations immediately after each other. erlang:send_after(?WAIT_TO_ALLOW_RENEGOTIATION, self(), allow_renegotiate), {next_state, hello, State#state{allow_renegotiate = false}, [{next_event, internal, Hello}]}; - - connection(internal, #client_hello{}, #state{role = server, allow_renegotiate = false} = State0) -> Alert = ?ALERT_REC(?WARNING, ?NO_RENEGOTIATION), State1 = send_alert(Alert, State0), {Record, State} = ssl_connection:prepare_connection(State1, ?MODULE), next_event(connection, Record, State); - connection(Type, Event, State) -> ssl_connection:connection(Type, Event, State, ?MODULE). @@ -341,15 +442,25 @@ downgrade(Type, Event, State) -> %%-------------------------------------------------------------------- %% raw data from socket, unpack records -handle_info({Protocol, _, Data}, StateName, +handle_info({_,flight_retransmission_timeout}, connection, _) -> + {next_state, keep_state_and_data}; +handle_info({Ref, flight_retransmission_timeout}, StateName, + #state{flight_state = {waiting, Ref, NextTimeout}} = State0) -> + State1 = send_handshake_flight(State0#state{flight_state = {retransmit_timer, NextTimeout}}, + retransmit_epoch(StateName, State0)), + {Record, State} = next_record(State1), + next_event(StateName, Record, State); +handle_info({_, flight_retransmission_timeout}, _, _) -> + {next_state, keep_state_and_data}; +handle_info({Protocol, _, _, _, Data}, StateName, #state{data_tag = Protocol} = State0) -> - case next_tls_record(Data, State0) of + case next_dtls_record(Data, State0) of {Record, State} -> next_event(StateName, Record, State); #alert{} = Alert -> ssl_connection:handle_normal_shutdown(Alert, StateName, State0), {stop, {shutdown, own_alert}} - end; + end; handle_info({CloseTag, Socket}, StateName, #state{socket = Socket, close_tag = CloseTag, negotiated_version = Version} = State) -> @@ -380,23 +491,26 @@ handle_common_event(internal, #alert{} = Alert, StateName, ssl_connection:handle_own_alert(Alert, Version, StateName, State); %%% DTLS record protocol level handshake messages -handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE} = Record, +handle_common_event(internal, #ssl_tls{type = ?HANDSHAKE, + fragment = Data}, StateName, - #state{protocol_buffers = - #protocol_buffers{dtls_packets = Packets0, - dtls_fragment_state = HsState0} = Buffers, + #state{protocol_buffers = Buffers0, negotiated_version = Version} = State0) -> try - {Packets1, HsState} = dtls_handshake:get_dtls_handshake(Record, HsState0), - State = - State0#state{protocol_buffers = - Buffers#protocol_buffers{dtls_fragment_state = HsState}}, - Events = dtls_handshake_events(Packets0 ++ Packets1), - case StateName of - connection -> - ssl_connection:hibernate_after(StateName, State, Events); - _ -> - {next_state, StateName, State, Events} + case dtls_handshake:get_dtls_handshake(Version, Data, Buffers0) of + {more_data, Buffers} -> + {Record, State} = next_record(State0#state{protocol_buffers = Buffers}), + next_event(StateName, Record, State); + {Packets, Buffers} -> + State = State0#state{protocol_buffers = Buffers}, + Events = dtls_handshake_events(Packets), + case StateName of + connection -> + ssl_connection:hibernate_after(StateName, State, Events); + _ -> + {next_state, StateName, + State#state{unprocessed_handshake_events = unprocessed_events(Events)}, Events} + end end catch throw:#alert{} = Alert -> ssl_connection:handle_own_alert(Alert, Version, StateName, State0) @@ -420,6 +534,10 @@ handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, Sta handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) -> {next_state, StateName, State}. +send(Transport, {_, {{_,_}, _} = Socket}, Data) -> + send(Transport, Socket, Data); +send(Transport, Socket, Data) -> + dtls_socket:send(Transport, Socket, Data). %%-------------------------------------------------------------------- %% Description:This function is called by a gen_fsm when it is about %% to terminate. It should be the opposite of Module:init/1 and do any @@ -442,96 +560,56 @@ format_status(Type, Data) -> %%-------------------------------------------------------------------- %%% Internal functions %%-------------------------------------------------------------------- +handle_client_hello(#client_hello{client_version = ClientVersion} = Hello, + #state{connection_states = ConnectionStates0, + port = Port, session = #session{own_certificate = Cert} = Session0, + renegotiation = {Renegotiation, _}, + session_cache = Cache, + session_cache_cb = CacheCb, + negotiated_protocol = CurrentProtocol, + key_algorithm = KeyExAlg, + ssl_options = SslOpts} = State0) -> + + case dtls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb, + ConnectionStates0, Cert, KeyExAlg}, Renegotiation) of + #alert{} = Alert -> + ssl_connection:handle_own_alert(Alert, ClientVersion, hello, State0); + {Version, {Type, Session}, + ConnectionStates, Protocol0, ServerHelloExt, HashSign} -> + Protocol = case Protocol0 of + undefined -> CurrentProtocol; + _ -> Protocol0 + end, -dtls_handshake_events([]) -> - throw(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake)); -dtls_handshake_events(Packets) -> - lists:map(fun(Packet) -> - {next_event, internal, {handshake, Packet}} - end, Packets). - - -encode_handshake(Handshake, Version, ConnectionStates0, Hist0) -> - {Seq, ConnectionStates} = sequence(ConnectionStates0), - {EncHandshake, Frag} = dtls_handshake:encode_handshake(Handshake, Version, Seq), - %% DTLS does not have an equivalent version to SSLv2. So v2 hello compatibility - %% will always be false - Hist = ssl_handshake:update_handshake_history(Hist0, EncHandshake, false), - {Frag, ConnectionStates, Hist}. - -encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) -> - dtls_record:encode_change_cipher_spec(Version, ConnectionStates). + State = prepare_flight(State0#state{connection_states = ConnectionStates, + negotiated_version = Version, + hashsign_algorithm = HashSign, + session = Session, + negotiated_protocol = Protocol}), + + ssl_connection:hello(internal, {common_client_hello, Type, ServerHelloExt}, + State, ?MODULE) + end. -encode_handshake_flight(Flight, ConnectionStates) -> - MSS = 1400, - encode_handshake_records(Flight, ConnectionStates, MSS, init_pack_records()). +encode_handshake_flight(Flight, Version, MaxFragmentSize, Epoch, ConnectionStates) -> + Fragments = lists:map(fun(Handshake) -> + dtls_handshake:fragment_handshake(Handshake, MaxFragmentSize) + end, Flight), + dtls_record:encode_handshake(Fragments, Version, Epoch, ConnectionStates). -encode_handshake_records([], CS, _MSS, Recs) -> - {finish_pack_records(Recs), CS}; +encode_change_cipher(#change_cipher_spec{}, Version, Epoch, ConnectionStates) -> + dtls_record:encode_change_cipher_spec(Version, Epoch, ConnectionStates). -encode_handshake_records([{Version, _Epoch, Frag = #change_cipher_spec{}}|Tail], ConnectionStates0, MSS, Recs0) -> - {Encoded, ConnectionStates} = - encode_change_cipher(Frag, Version, ConnectionStates0), - Recs = append_pack_records([Encoded], MSS, Recs0), - encode_handshake_records(Tail, ConnectionStates, MSS, Recs); - -encode_handshake_records([{Version, Epoch, {MsgType, MsgSeq, Bin}}|Tail], CS0, MSS, Recs0 = {Buf0, _}) -> - Space = MSS - iolist_size(Buf0), - Len = byte_size(Bin), - {Encoded, CS} = - encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin, 0, MSS, [], CS0), - Recs = append_pack_records(Encoded, MSS, Recs0), - encode_handshake_records(Tail, CS, MSS, Recs). - -%% TODO: move to dtls_handshake???? -encode_handshake_record(_Version, _Epoch, _Space, _MsgType, _MsgSeq, _Len, <<>>, _Offset, _MRS, Encoded, CS) - when length(Encoded) > 0 -> - %% make sure we encode at least one segment (for empty messages like Server Hello Done - {lists:reverse(Encoded), CS}; - -encode_handshake_record(Version, Epoch, Space, MsgType, MsgSeq, Len, Bin, - Offset, MRS, Encoded0, CS0) -> - MaxFragmentLen = Space - 25, - {BinFragment, Rest} = - case Bin of - <<BinFragment0:MaxFragmentLen/bytes, Rest0/binary>> -> - {BinFragment0, Rest0}; - _ -> - {Bin, <<>>} - end, - FragLength = byte_size(BinFragment), - Frag = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(Offset), ?uint24(FragLength), BinFragment], - %% TODO Real solution, now avoid dialyzer error {Encoded, CS} = ssl_record:encode_handshake({Epoch, Frag}, Version, CS0), - {Encoded, CS} = ssl_record:encode_handshake(Frag, Version, CS0), - encode_handshake_record(Version, Epoch, MRS, MsgType, MsgSeq, Len, Rest, Offset + FragLength, MRS, [Encoded|Encoded0], CS). - -init_pack_records() -> - {[], []}. - -append_pack_records([], MSS, Recs = {Buf0, Acc0}) -> - Remaining = MSS - iolist_size(Buf0), - if Remaining < 12 -> - {[], [lists:reverse(Buf0)|Acc0]}; - true -> - Recs - end; -append_pack_records([Head|Tail], MSS, {Buf0, Acc0}) -> - TotLen = iolist_size(Buf0) + iolist_size(Head), - if TotLen > MSS -> - append_pack_records(Tail, MSS, {[Head], [lists:reverse(Buf0)|Acc0]}); - true -> - append_pack_records(Tail, MSS, {[Head|Buf0], Acc0}) - end. +encode_data(Data, Version, ConnectionStates0)-> + dtls_record:encode_data(Data, Version, ConnectionStates0). -finish_pack_records({[], Acc}) -> - lists:reverse(Acc); -finish_pack_records({Buf, Acc}) -> - lists:reverse([lists:reverse(Buf)|Acc]). +encode_alert(#alert{} = Alert, Version, ConnectionStates) -> + dtls_record:encode_alert_record(Alert, Version, ConnectionStates). decode_alerts(Bin) -> ssl_alert:decode(Bin). -initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User, +initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions, _}, User, {CbModule, DataTag, CloseTag, ErrorTag}) -> #ssl_options{beast_mitigation = BeastMitigation} = SSLOptions, ConnectionStates = dtls_record:init_connection_states(Role, BeastMitigation), @@ -566,10 +644,11 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User, renegotiation = {false, first}, allow_renegotiate = SSLOptions#ssl_options.client_renegotiation, start_or_recv_from = undefined, - protocol_cb = ?MODULE + protocol_cb = ?MODULE, + flight_buffer = new_flight() }. -next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{ +next_dtls_record(Data, #state{protocol_buffers = #protocol_buffers{ dtls_record_buffer = Buf0, dtls_cipher_texts = CT0} = Buffers} = State0) -> case dtls_record:get_dtls_records(Data, Buf0) of @@ -578,14 +657,15 @@ next_tls_record(Data, #state{protocol_buffers = #protocol_buffers{ next_record(State0#state{protocol_buffers = Buffers#protocol_buffers{dtls_record_buffer = Buf1, dtls_cipher_texts = CT1}}); - #alert{} = Alert -> Alert - end. + end. -next_record(#state{%%flight = #flight{state = finished}, - protocol_buffers = - #protocol_buffers{dtls_packets = [], dtls_cipher_texts = [CT | Rest]} +next_record(#state{unprocessed_handshake_events = N} = State) when N > 0 -> + {no_record, State#state{unprocessed_handshake_events = N-1}}; + +next_record(#state{protocol_buffers = + #protocol_buffers{dtls_cipher_texts = [CT | Rest]} = Buffers, connection_states = ConnStates0} = State) -> case dtls_record:decode_cipher_text(CT, ConnStates0) of @@ -596,9 +676,15 @@ next_record(#state{%%flight = #flight{state = finished}, #alert{} = Alert -> {Alert, State} end; -next_record(#state{socket = Socket, - transport_cb = Transport} = State) -> %% when FlightState =/= finished - ssl_socket:setopts(Transport, Socket, [{active,once}]), +next_record(#state{role = server, + socket = {Listener, {Client, _}}, + transport_cb = gen_udp} = State) -> + dtls_udp_listener:active_once(Listener, Client, self()), + {no_record, State}; +next_record(#state{role = client, + socket = {_Server, Socket}, + transport_cb = Transport} = State) -> + dtls_socket:setopts(Transport, Socket, [{active,once}]), {no_record, State}; next_record(State) -> {no_record, State}. @@ -624,75 +710,89 @@ passive_receive(State0 = #state{user_data_buffer = Buffer}, StateName) -> next_event(StateName, Record, State) -> next_event(StateName, Record, State, []). -next_event(connection = StateName, no_record, State0, Actions) -> +next_event(connection = StateName, no_record, + #state{connection_states = #{current_read := #{epoch := CurrentEpoch}}} = State0, Actions) -> case next_record_if_active(State0) of {no_record, State} -> ssl_connection:hibernate_after(StateName, State, Actions); - {#ssl_tls{} = Record, State} -> + {#ssl_tls{epoch = CurrentEpoch} = Record, State} -> {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]}; + {#ssl_tls{epoch = Epoch, + type = ?HANDSHAKE, + version = _Version}, State1} = _Record when Epoch == CurrentEpoch-1 -> + State = send_handshake_flight(State1, Epoch), + {next_state, StateName, State, Actions}; + {#ssl_tls{epoch = _Epoch, + version = _Version}, State} -> + %% TODO maybe buffer later epoch + {next_state, StateName, State, Actions}; {#alert{} = Alert, State} -> {next_state, StateName, State, [{next_event, internal, Alert} | Actions]} end; -next_event(StateName, Record, State, Actions) -> +next_event(StateName, Record, + #state{connection_states = #{current_read := #{epoch := CurrentEpoch}}} = State, Actions) -> case Record of no_record -> {next_state, StateName, State, Actions}; - #ssl_tls{} = Record -> - {next_state, StateName, State, [{next_event, internal, {protocol_record, Record}} | Actions]}; + #ssl_tls{epoch = CurrentEpoch, + version = Version} = Record -> + {next_state, StateName, + dtls_version(StateName, Version, State), + [{next_event, internal, {protocol_record, Record}} | Actions]}; + #ssl_tls{epoch = _Epoch, + version = _Version} = _Record -> + %% TODO maybe buffer later epoch + {next_state, StateName, State, Actions}; #alert{} = Alert -> {next_state, StateName, State, [{next_event, internal, Alert} | Actions]} end. -%% TODO This generates dialyzer warnings, has to be handled differently. -%% handle_packet(Address, Port, Packet) -> -%% try dtls_record:get_dtls_records(Packet, <<>>) of -%% %% expect client hello -%% {[#ssl_tls{type = ?HANDSHAKE, version = {254, _}} = Record], <<>>} -> -%% handle_dtls_client_hello(Address, Port, Record); -%% _Other -> -%% {error, not_dtls} -%% catch -%% _Class:_Error -> -%% {error, not_dtls} -%% end. - -%% handle_dtls_client_hello(Address, Port, -%% #ssl_tls{epoch = Epoch, sequence_number = Seq, -%% version = Version} = Record) -> -%% {[{Hello, _}], _} = -%% dtls_handshake:get_dtls_handshake(Record, -%% dtls_handshake:dtls_handshake_new_flight(undefined)), -%% #client_hello{client_version = {Major, Minor}, -%% random = Random, -%% session_id = SessionId, -%% cipher_suites = CipherSuites, -%% compression_methods = CompressionMethods} = Hello, -%% CookieData = [address_to_bin(Address, Port), -%% <<?BYTE(Major), ?BYTE(Minor)>>, -%% Random, SessionId, CipherSuites, CompressionMethods], -%% Cookie = crypto:hmac(sha, <<"secret">>, CookieData), - -%% case Hello of -%% #client_hello{cookie = Cookie} -> -%% accept; - -%% _ -> -%% %% generate HelloVerifyRequest -%% {RequestFragment, _} = dtls_handshake:encode_handshake( -%% dtls_handshake:hello_verify_request(Cookie), -%% Version, 0), -%% HelloVerifyRequest = -%% dtls_record:encode_tls_cipher_text(?HANDSHAKE, Version, Epoch, Seq, RequestFragment), -%% {reply, HelloVerifyRequest} -%% end. - -%% address_to_bin({A,B,C,D}, Port) -> -%% <<0:80,16#ffff:16,A,B,C,D,Port:16>>; -%% address_to_bin({A,B,C,D,E,F,G,H}, Port) -> -%% <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>. - -sequence(#{write_msg_seq := Seq} = ConnectionState) -> - {Seq, ConnectionState#{write_msg_seq => Seq + 1}}. +dtls_version(hello, Version, #state{role = server} = State) -> + State#state{negotiated_version = Version}; %%Inital version +dtls_version(_,_, State) -> + State. + +prepare_flight(#state{flight_buffer = Flight, + connection_states = ConnectionStates0, + protocol_buffers = + #protocol_buffers{} = Buffers} = State) -> + ConnectionStates = dtls_record:save_current_connection_state(ConnectionStates0, write), + State#state{flight_buffer = next_flight(Flight), + connection_states = ConnectionStates, + protocol_buffers = Buffers#protocol_buffers{ + dtls_handshake_next_fragments = [], + dtls_handshake_later_fragments = []}}. +new_flight() -> + #{next_sequence => 0, + handshakes => [], + change_cipher_spec => undefined, + handshakes_after_change_cipher_spec => []}. + +next_flight(Flight) -> + Flight#{handshakes => [], + change_cipher_spec => undefined, + handshakes_after_change_cipher_spec => []}. + + +start_flight(#state{transport_cb = gen_udp, + flight_state = {retransmit_timer, Timeout}} = State) -> + Ref = erlang:make_ref(), + _ = erlang:send_after(Timeout, self(), {Ref, flight_retransmission_timeout}), + State#state{flight_state = {waiting, Ref, new_timeout(Timeout)}}; + +start_flight(State) -> + %% No retransmision needed i.e DTLS over SCTP + State#state{flight_state = reliable}. + +new_timeout(N) when N =< 30 -> + N * 2; +new_timeout(_) -> + 60. + +dtls_handshake_events(Packets) -> + lists:map(fun(Packet) -> + {next_event, internal, {handshake, Packet}} + end, Packets). renegotiate(#state{role = client} = State, Actions) -> %% Handle same way as if server requested @@ -722,3 +822,27 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State}) -> handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State)); handle_alerts([Alert | Alerts], {next_state, StateName, State, _Actions}) -> handle_alerts(Alerts, ssl_connection:handle_alert(Alert, StateName, State)). + +retransmit_epoch(StateName, #state{connection_states = ConnectionStates}) -> + #{epoch := Epoch} = + ssl_record:current_connection_state(ConnectionStates, write), + case StateName of + connection -> + Epoch-1; + _ -> + Epoch + end. + +update_handshake_history(#hello_verify_request{}, _, Hist) -> + Hist; +update_handshake_history(_, Handshake, Hist) -> + %% DTLS never needs option "v2_hello_compatible" to be true + ssl_handshake:update_handshake_history(Hist, iolist_to_binary(Handshake), false). + +unprocessed_events(Events) -> + %% The first handshake event will be processed immediately + %% as it is entered first in the event queue and + %% when it is processed there will be length(Events)-1 + %% handshake events left to process before we should + %% process more TLS-records received on the socket. + erlang:length(Events)-1. diff --git a/lib/ssl/src/dtls_connection.hrl b/lib/ssl/src/dtls_connection.hrl index ee3daa3c14..3dd78235d0 100644 --- a/lib/ssl/src/dtls_connection.hrl +++ b/lib/ssl/src/dtls_connection.hrl @@ -29,20 +29,14 @@ -include("ssl_connection.hrl"). -record(protocol_buffers, { - dtls_packets = [], %%::[binary()], % Not yet handled decode ssl/tls packets. - dtls_record_buffer = <<>>, %%:: binary(), % Buffer of incomplete records - dtls_fragment_state, %%:: [], % DTLS fragments - dtls_handshake_buffer = <<>>, %%:: binary(), % Buffer of incomplete handshakes - dtls_cipher_texts = [], %%:: [binary()], - dtls_cipher_texts_next %%:: [binary()] % Received for Epoch not yet active + dtls_record_buffer = <<>>, %% Buffer of incomplete records + dtls_handshake_next_seq = 0, + dtls_flight_last, + dtls_handshake_next_fragments = [], %% Fragments of the next handshake message + dtls_handshake_later_fragments = [], %% Fragments of handsake messages come after the one in next buffer + dtls_cipher_texts = [] %%:: [binary()], }). --record(flight, { - last_retransmit, - last_read_seq, - msl_timer, - state, - buffer % buffer of not yet ACKed TLS records - }). +-define(INITIAL_RETRANSMIT_TIMEOUT, 1000). %1 sec -endif. % -ifdef(dtls_connection). diff --git a/lib/ssl/src/dtls_connection_sup.erl b/lib/ssl/src/dtls_connection_sup.erl index dc7601a684..7d7be5743d 100644 --- a/lib/ssl/src/dtls_connection_sup.erl +++ b/lib/ssl/src/dtls_connection_sup.erl @@ -60,7 +60,7 @@ init(_O) -> StartFunc = {dtls_connection, start_link, []}, Restart = temporary, % E.g. should not be restarted Shutdown = 4000, - Modules = [dtls_connection], + Modules = [dtls_connection, ssl_connection], Type = worker, ChildSpec = {Name, StartFunc, Restart, Shutdown, Type, Modules}, diff --git a/lib/ssl/src/dtls_handshake.erl b/lib/ssl/src/dtls_handshake.erl index c6535d5928..af3708ddb7 100644 --- a/lib/ssl/src/dtls_handshake.erl +++ b/lib/ssl/src/dtls_handshake.erl @@ -18,15 +18,15 @@ %% %CopyrightEnd% -module(dtls_handshake). +-include("dtls_connection.hrl"). -include("dtls_handshake.hrl"). -include("dtls_record.hrl"). -include("ssl_internal.hrl"). -include("ssl_alert.hrl"). --export([client_hello/8, client_hello/9, hello/4, - hello_verify_request/1, get_dtls_handshake/2, - dtls_handshake_new_flight/1, dtls_handshake_new_epoch/1, - encode_handshake/3]). +-export([client_hello/8, client_hello/9, cookie/4, hello/4, + hello_verify_request/2, get_dtls_handshake/3, fragment_handshake/2, + handshake_bin/2, encode_handshake/3]). -type dtls_handshake() :: #client_hello{} | #hello_verify_request{} | ssl_handshake:ssl_handshake(). @@ -62,9 +62,10 @@ client_hello(Host, Port, Cookie, ConnectionStates, Version = dtls_record:highest_protocol_version(Versions), Pending = ssl_record:pending_connection_state(ConnectionStates, read), SecParams = maps:get(security_parameters, Pending), - CipherSuites = ssl_handshake:available_suites(UserSuites, Version), + TLSVersion = dtls_v1:corresponding_tls_version(Version), + CipherSuites = ssl_handshake:available_suites(UserSuites, TLSVersion), - Extensions = ssl_handshake:client_hello_extensions(Host, dtls_v1:corresponding_tls_version(Version), CipherSuites, + Extensions = ssl_handshake:client_hello_extensions(Host, TLSVersion, CipherSuites, SslOpts, ConnectionStates, Renegotiation), Id = ssl_session:client_id({Host, Port, SslOpts}, Cache, CacheCb, OwnCert), @@ -96,72 +97,51 @@ hello(#client_hello{client_version = ClientVersion} = Hello, #ssl_options{versions = Versions} = SslOpts, Info, Renegotiation) -> Version = ssl_handshake:select_version(dtls_record, ClientVersion, Versions), - %% - %% TODO: handle Cipher Fallback - %% handle_client_hello(Version, Hello, SslOpts, Info, Renegotiation). --spec hello_verify_request(binary()) -> #hello_verify_request{}. +cookie(Key, Address, Port, #client_hello{client_version = {Major, Minor}, + random = Random, + session_id = SessionId, + cipher_suites = CipherSuites, + compression_methods = CompressionMethods}) -> + CookieData = [address_to_bin(Address, Port), + <<?BYTE(Major), ?BYTE(Minor)>>, + Random, SessionId, CipherSuites, CompressionMethods], + crypto:hmac(sha, Key, CookieData). + +-spec hello_verify_request(binary(), dtls_record:dtls_version()) -> #hello_verify_request{}. %% %% Description: Creates a hello verify request message sent by server to %% verify client %%-------------------------------------------------------------------- -hello_verify_request(Cookie) -> - %% TODO: DTLS Versions????? - #hello_verify_request{protocol_version = {254, 255}, cookie = Cookie}. +hello_verify_request(Cookie, Version) -> + #hello_verify_request{protocol_version = Version, cookie = Cookie}. %%-------------------------------------------------------------------- -%% %%-------------------------------------------------------------------- -encode_handshake(Handshake, Version, MsgSeq) -> +encode_handshake(Handshake, Version, Seq) -> {MsgType, Bin} = enc_handshake(Handshake, Version), Len = byte_size(Bin), - Enc = [MsgType, ?uint24(Len), ?uint16(MsgSeq), ?uint24(0), ?uint24(Len), Bin], - Frag = {MsgType, MsgSeq, Bin}, - {Enc, Frag}. + [MsgType, ?uint24(Len), ?uint16(Seq), ?uint24(0), ?uint24(Len), Bin]. -%%-------------------------------------------------------------------- --spec get_dtls_handshake(#ssl_tls{}, #dtls_hs_state{} | undefined) -> - {[dtls_handshake()], #dtls_hs_state{}} | {retransmit, #dtls_hs_state{}}. -%% -%% Description: Given a DTLS state and new data from ssl_record, collects -%% and returns it as a list of handshake messages, also returns a new -%% DTLS state -%%-------------------------------------------------------------------- -get_dtls_handshake(Records, undefined) -> - HsState = #dtls_hs_state{highest_record_seq = 0, - starting_read_seq = 0, - fragments = gb_trees:empty(), - completed = []}, - get_dtls_handshake(Records, HsState); -get_dtls_handshake(Records, HsState0) when is_list(Records) -> - HsState1 = lists:foldr(fun get_dtls_handshake_aux/2, HsState0, Records), - get_dtls_handshake_completed(HsState1); -get_dtls_handshake(Record, HsState0) when is_record(Record, ssl_tls) -> - HsState1 = get_dtls_handshake_aux(Record, HsState0), - get_dtls_handshake_completed(HsState1). +fragment_handshake(Bin, _) when is_binary(Bin)-> + %% This is the change_cipher_spec not a "real handshake" but part of the flight + Bin; +fragment_handshake([MsgType, Len, Seq, _, Len, Bin], Size) -> + Bins = bin_fragments(Bin, Size), + handshake_fragments(MsgType, Seq, Len, Bins, []). +handshake_bin([Type, Length, Data], Seq) -> + handshake_bin(Type, Length, Seq, Data). + %%-------------------------------------------------------------------- --spec dtls_handshake_new_epoch(#dtls_hs_state{}) -> #dtls_hs_state{}. +-spec get_dtls_handshake(dtls_record:dtls_version(), binary(), #protocol_buffers{}) -> + {[{dtls_handshake(), binary()}], #protocol_buffers{}} | {more_data, #protocol_buffers{}}. %% -%% Description: Reset the DTLS decoder state for a new Epoch +%% Description: ... %%-------------------------------------------------------------------- -%% dtls_handshake_new_epoch(<<>>) -> -%% dtls_hs_state_init(); -dtls_handshake_new_epoch(HsState) -> - HsState#dtls_hs_state{highest_record_seq = 0, - starting_read_seq = HsState#dtls_hs_state.current_read_seq, - fragments = gb_trees:empty(), completed = []}. - -%-------------------------------------------------------------------- --spec dtls_handshake_new_flight(integer() | undefined) -> #dtls_hs_state{}. -% -% Description: Init the DTLS decoder state for a new Flight -dtls_handshake_new_flight(ExpectedReadReq) -> - #dtls_hs_state{current_read_seq = ExpectedReadReq, - highest_record_seq = 0, - starting_read_seq = 0, - fragments = gb_trees:empty(), completed = []}. +get_dtls_handshake(Version, Fragment, ProtocolBuffers) -> + handle_fragments(Version, Fragment, ProtocolBuffers, []). %%-------------------------------------------------------------------- %%% Internal functions @@ -170,27 +150,29 @@ handle_client_hello(Version, #client_hello{session_id = SugesstedId, cipher_suites = CipherSuites, compression_methods = Compressions, random = Random, - extensions = #hello_extensions{elliptic_curves = Curves, - signature_algs = ClientHashSigns} = HelloExt}, + extensions = + #hello_extensions{elliptic_curves = Curves, + signature_algs = ClientHashSigns} = HelloExt}, #ssl_options{versions = Versions, signature_algs = SupportedHashSigns} = SslOpts, {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert, _}, Renegotiation) -> case dtls_record:is_acceptable_version(Version, Versions) of true -> + TLSVersion = dtls_v1:corresponding_tls_version(Version), AvailableHashSigns = ssl_handshake:available_signature_algs( - ClientHashSigns, SupportedHashSigns, Cert, - dtls_v1:corresponding_tls_version(Version)), - ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(Version)), + ClientHashSigns, SupportedHashSigns, Cert,TLSVersion), + ECCCurve = ssl_handshake:select_curve(Curves, ssl_handshake:supported_ecc(TLSVersion)), {Type, #session{cipher_suite = CipherSuite} = Session1} = ssl_handshake:select_session(SugesstedId, CipherSuites, AvailableHashSigns, Compressions, - Port, Session0#session{ecc = ECCCurve}, Version, + Port, Session0#session{ecc = ECCCurve}, TLSVersion, SslOpts, Cache, CacheCb, Cert), case CipherSuite of no_suite -> ?ALERT_REC(?FATAL, ?INSUFFICIENT_SECURITY); _ -> {KeyExAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite), - case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, SupportedHashSigns, Version) of + case ssl_handshake:select_hashsign(ClientHashSigns, Cert, KeyExAlg, + SupportedHashSigns, TLSVersion) of #alert{} = Alert -> Alert; HashSign -> @@ -228,214 +210,15 @@ handle_server_hello_extensions(Version, SessionId, Random, CipherSuite, {Version, SessionId, ConnectionStates, ProtoExt, Protocol} end. -get_dtls_handshake_completed(HsState = #dtls_hs_state{completed = Completed}) -> - {lists:reverse(Completed), HsState#dtls_hs_state{completed = []}}. - -get_dtls_handshake_aux(#ssl_tls{version = Version, - sequence_number = SeqNo, - fragment = Data}, HsState) -> - get_dtls_handshake_aux(Version, SeqNo, Data, HsState). - -get_dtls_handshake_aux(Version, SeqNo, - <<?BYTE(Type), ?UINT24(Length), - ?UINT16(MessageSeq), - ?UINT24(FragmentOffset), ?UINT24(FragmentLength), - Body:FragmentLength/binary, Rest/binary>>, - HsState0) -> - case reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, HsState0) of - {HsState1, HighestSeqNo, MsgBody} -> - HsState2 = dec_dtls_fragment(Version, HighestSeqNo, Type, Length, MessageSeq, MsgBody, HsState1), - HsState3 = process_dtls_fragments(Version, HsState2), - get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3); - - HsState2 -> - HsState3 = process_dtls_fragments(Version, HsState2), - get_dtls_handshake_aux(Version, SeqNo, Rest, HsState3) - end; - -get_dtls_handshake_aux(_Version, _SeqNo, <<>>, HsState) -> - HsState. - -dec_dtls_fragment(Version, SeqNo, Type, Length, MessageSeq, MsgBody, - HsState = #dtls_hs_state{highest_record_seq = HighestSeqNo, completed = Acc}) -> - Raw = <<?BYTE(Type), ?UINT24(Length), ?UINT16(MessageSeq), ?UINT24(0), ?UINT24(Length), MsgBody/binary>>, - H = decode_handshake(Version, Type, MsgBody), - HsState#dtls_hs_state{completed = [{H,Raw}|Acc], highest_record_seq = erlang:max(HighestSeqNo, SeqNo)}. - -process_dtls_fragments(Version, - HsState0 = #dtls_hs_state{current_read_seq = CurrentReadSeq, - fragments = Fragments0}) -> - case gb_trees:is_empty(Fragments0) of - true -> - HsState0; - _ -> - case gb_trees:smallest(Fragments0) of - {CurrentReadSeq, {SeqNo, Type, Length, CurrentReadSeq, {Length, [{0, Length}], MsgBody}}} -> - HsState1 = dtls_hs_state_process_seq(HsState0), - HsState2 = dec_dtls_fragment(Version, SeqNo, Type, Length, CurrentReadSeq, MsgBody, HsState1), - process_dtls_fragments(Version, HsState2); - _ -> - HsState0 - end - end. - -dtls_hs_state_process_seq(HsState0 = #dtls_hs_state{current_read_seq = CurrentReadSeq, - fragments = Fragments0}) -> - Fragments1 = gb_trees:delete_any(CurrentReadSeq, Fragments0), - HsState0#dtls_hs_state{current_read_seq = CurrentReadSeq + 1, - fragments = Fragments1}. - -dtls_hs_state_add_fragment(MessageSeq, Fragment, HsState0 = #dtls_hs_state{fragments = Fragments0}) -> - Fragments1 = gb_trees:enter(MessageSeq, Fragment, Fragments0), - HsState0#dtls_hs_state{fragments = Fragments1}. - -reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, 0, Length, - Body, HsState0 = #dtls_hs_state{current_read_seq = undefined}) - when Type == ?CLIENT_HELLO; - Type == ?SERVER_HELLO; - Type == ?HELLO_VERIFY_REQUEST -> - %% First message, should be client hello - %% return the current message and set the next expected Sequence - %% - %% Note: this could (should?) be restricted further, ClientHello and - %% HelloVerifyRequest have to have message_seq = 0, ServerHello - %% can have a message_seq of 0 or 1 - %% - {HsState0#dtls_hs_state{current_read_seq = MessageSeq + 1}, SeqNo, Body}; - -reassemble_dtls_fragment(_SeqNo, _Type, Length, _MessageSeq, _, Length, - _Body, HsState = #dtls_hs_state{current_read_seq = undefined}) -> - %% not what we expected, drop it - HsState; - -reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length, - Body, HsState0 = - #dtls_hs_state{starting_read_seq = StartingReadSeq}) - when MessageSeq < StartingReadSeq -> - %% this has to be the start of a new flight, let it through - %% - %% Note: this could (should?) be restricted further, the first message of a - %% new flight has to have message_seq = 0 - %% - HsState = dtls_hs_state_process_seq(HsState0), - {HsState, SeqNo, Body}; - -reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, 0, Length, - _Body, HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq}) - when MessageSeq < CurrentReadSeq -> - HsState; - -reassemble_dtls_fragment(SeqNo, _Type, Length, MessageSeq, 0, Length, - Body, HsState0 = #dtls_hs_state{current_read_seq = MessageSeq}) -> - %% Message fully contained and it's the current seq - HsState1 = dtls_hs_state_process_seq(HsState0), - {HsState1, SeqNo, Body}; - -reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, 0, Length, - Body, HsState) -> - %% Message fully contained and it's the NOT the current seq -> buffer - Fragment = {SeqNo, Type, Length, MessageSeq, - dtls_fragment_init(Length, 0, Length, Body)}, - dtls_hs_state_add_fragment(MessageSeq, Fragment, HsState); - -reassemble_dtls_fragment(_SeqNo, _Type, Length, MessageSeq, FragmentOffset, FragmentLength, - _Body, - HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq}) - when FragmentOffset + FragmentLength == Length andalso MessageSeq == (CurrentReadSeq - 1) -> - {retransmit, HsState}; - -reassemble_dtls_fragment(_SeqNo, _Type, _Length, MessageSeq, _FragmentOffset, _FragmentLength, - _Body, - HsState = #dtls_hs_state{current_read_seq = CurrentReadSeq}) - when MessageSeq < CurrentReadSeq -> - HsState; - -reassemble_dtls_fragment(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, - HsState = #dtls_hs_state{fragments = Fragments0}) -> - case gb_trees:lookup(MessageSeq, Fragments0) of - {value, Fragment} -> - dtls_fragment_reassemble(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, Fragment, HsState); - none -> - dtls_fragment_start(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, HsState) - end. -dtls_fragment_start(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, HsState = #dtls_hs_state{fragments = Fragments0}) -> - Fragment = {SeqNo, Type, Length, MessageSeq, - dtls_fragment_init(Length, FragmentOffset, FragmentLength, Body)}, - Fragments1 = gb_trees:insert(MessageSeq, Fragment, Fragments0), - HsState#dtls_hs_state{fragments = Fragments1}. - -dtls_fragment_reassemble(SeqNo, Type, Length, MessageSeq, - FragmentOffset, FragmentLength, - Body, - {LastSeqNo, Type, Length, MessageSeq, FragBuffer0}, - HsState = #dtls_hs_state{fragments = Fragments0}) -> - FragBuffer1 = dtls_fragment_add(FragBuffer0, FragmentOffset, FragmentLength, Body), - Fragment = {erlang:max(SeqNo, LastSeqNo), Type, Length, MessageSeq, FragBuffer1}, - Fragments1 = gb_trees:enter(MessageSeq, Fragment, Fragments0), - HsState#dtls_hs_state{fragments = Fragments1}; - -%% Type, Length or Seq mismatch, drop everything... -%% Note: the RFC is not clear on how to handle this... -dtls_fragment_reassemble(_SeqNo, _Type, _Length, MessageSeq, - _FragmentOffset, _FragmentLength, _Body, _Fragment, - HsState = #dtls_hs_state{fragments = Fragments0}) -> - Fragments1 = gb_trees:delete_any(MessageSeq, Fragments0), - HsState#dtls_hs_state{fragments = Fragments1}. - -dtls_fragment_add({Length, FragmentList0, Bin0}, FragmentOffset, FragmentLength, Body) -> - Bin1 = dtls_fragment_bin_add(FragmentOffset, FragmentLength, Body, Bin0), - FragmentList1 = add_fragment(FragmentList0, {FragmentOffset, FragmentLength}), - {Length, FragmentList1, Bin1}. - -dtls_fragment_init(Length, 0, Length, Body) -> - {Length, [{0, Length}], Body}; -dtls_fragment_init(Length, FragmentOffset, FragmentLength, Body) -> - Bin = dtls_fragment_bin_add(FragmentOffset, FragmentLength, Body, <<0:(Length*8)>>), - {Length, [{FragmentOffset, FragmentOffset + FragmentLength}], Bin}. - -dtls_fragment_bin_add(FragmentOffset, FragmentLength, Add, Buffer) -> - <<First:FragmentOffset/bytes, _:FragmentLength/bytes, Rest/binary>> = Buffer, - <<First/binary, Add/binary, Rest/binary>>. - -merge_fragment_list([], Fragment, Acc) -> - lists:reverse([Fragment|Acc]); - -merge_fragment_list([H = {_, HEnd}|Rest], Frag = {FStart, _}, Acc) - when FStart > HEnd -> - merge_fragment_list(Rest, Frag, [H|Acc]); - -merge_fragment_list(Rest = [{HStart, _HEnd}|_], Frag = {_FStart, FEnd}, Acc) - when FEnd < HStart -> - lists:reverse(Acc) ++ [Frag|Rest]; - -merge_fragment_list([{HStart, HEnd}|Rest], _Frag = {FStart, FEnd}, Acc) - when - FStart =< HEnd orelse FEnd >= HStart -> - Start = erlang:min(HStart, FStart), - End = erlang:max(HEnd, FEnd), - NewFrag = {Start, End}, - merge_fragment_list(Rest, NewFrag, Acc). - -add_fragment(List, {FragmentOffset, FragmentLength}) -> - merge_fragment_list(List, {FragmentOffset, FragmentOffset + FragmentLength}, []). +%%%%%%% Encodeing %%%%%%%%%%%%% enc_handshake(#hello_verify_request{protocol_version = {Major, Minor}, cookie = Cookie}, _Version) -> - CookieLength = byte_size(Cookie), + CookieLength = byte_size(Cookie), {?HELLO_VERIFY_REQUEST, <<?BYTE(Major), ?BYTE(Minor), ?BYTE(CookieLength), - Cookie/binary>>}; + Cookie:CookieLength/binary>>}; enc_handshake(#hello_request{}, _Version) -> {?HELLO_REQUEST, <<>>}; @@ -459,38 +242,246 @@ enc_handshake(#client_hello{client_version = {Major, Minor}, ?BYTE(CookieLength), Cookie/binary, ?UINT16(CsLength), BinCipherSuites/binary, ?BYTE(CmLength), BinCompMethods/binary, ExtensionsBin/binary>>}; + +enc_handshake(#server_hello{} = HandshakeMsg, Version) -> + {Type, <<?BYTE(Major), ?BYTE(Minor), Rest/binary>>} = + ssl_handshake:encode_handshake(HandshakeMsg, Version), + {DTLSMajor, DTLSMinor} = dtls_v1:corresponding_dtls_version({Major, Minor}), + {Type, <<?BYTE(DTLSMajor), ?BYTE(DTLSMinor), Rest/binary>>}; + enc_handshake(HandshakeMsg, Version) -> ssl_handshake:encode_handshake(HandshakeMsg, Version). -decode_handshake(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary, +bin_fragments(Bin, Size) -> + bin_fragments(Bin, size(Bin), Size, 0, []). + +bin_fragments(Bin, BinSize, FragSize, Offset, Fragments) -> + case (BinSize - Offset - FragSize) > 0 of + true -> + Frag = binary:part(Bin, {Offset, FragSize}), + bin_fragments(Bin, BinSize, FragSize, Offset + FragSize, [{Frag, Offset} | Fragments]); + false -> + Frag = binary:part(Bin, {Offset, BinSize-Offset}), + lists:reverse([{Frag, Offset} | Fragments]) + end. + +handshake_fragments(_, _, _, [], Acc) -> + lists:reverse(Acc); +handshake_fragments(MsgType, Seq, Len, [{Bin, Offset} | Bins], Acc) -> + FragLen = size(Bin), + handshake_fragments(MsgType, Seq, Len, Bins, + [<<?BYTE(MsgType), Len/binary, Seq/binary, ?UINT24(Offset), + ?UINT24(FragLen), Bin/binary>> | Acc]). + +address_to_bin({A,B,C,D}, Port) -> + <<0:80,16#ffff:16,A,B,C,D,Port:16>>; +address_to_bin({A,B,C,D,E,F,G,H}, Port) -> + <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>. + +%%%%%%% Decodeing %%%%%%%%%%%%% + +handle_fragments(Version, FragmentData, Buffers0, Acc) -> + Fragments = decode_handshake_fragments(FragmentData), + do_handle_fragments(Version, Fragments, Buffers0, Acc). + +do_handle_fragments(_, [], Buffers, Acc) -> + {lists:reverse(Acc), Buffers}; +do_handle_fragments(Version, [Fragment | Fragments], Buffers0, Acc) -> + case reassemble(Version, Fragment, Buffers0) of + {more_data, _} = More when Acc == []-> + More; + {more_data, Buffers} when Fragments == [] -> + {lists:reverse(Acc), Buffers}; + {more_data, Buffers} -> + do_handle_fragments(Version, Fragments, Buffers, Acc); + {HsPacket, Buffers} -> + do_handle_fragments(Version, Fragments, Buffers, [HsPacket | Acc]) + end. + +decode_handshake(Version, <<?BYTE(Type), Bin/binary>>) -> + decode_handshake(Version, Type, Bin). + +decode_handshake(_, ?HELLO_REQUEST, <<>>) -> + #hello_request{}; +decode_handshake(_Version, ?CLIENT_HELLO, <<?UINT24(_), ?UINT16(_), + ?UINT24(_), ?UINT24(_), + ?BYTE(Major), ?BYTE(Minor), Random:32/binary, ?BYTE(SID_length), Session_ID:SID_length/binary, - ?BYTE(Cookie_length), Cookie:Cookie_length/binary, + ?BYTE(CookieLength), Cookie:CookieLength/binary, ?UINT16(Cs_length), CipherSuites:Cs_length/binary, ?BYTE(Cm_length), Comp_methods:Cm_length/binary, Extensions/binary>>) -> - DecodedExtensions = ssl_handshake:decode_hello_extensions(Extensions), - + DecodedExtensions = ssl_handshake:decode_hello_extensions({client, Extensions}), + #client_hello{ client_version = {Major,Minor}, random = Random, - session_id = Session_ID, cookie = Cookie, + session_id = Session_ID, cipher_suites = ssl_handshake:decode_suites('2_bytes', CipherSuites), compression_methods = Comp_methods, extensions = DecodedExtensions - }; + }; + +decode_handshake(_Version, ?HELLO_VERIFY_REQUEST, <<?UINT24(_), ?UINT16(_), + ?UINT24(_), ?UINT24(_), + ?BYTE(Major), ?BYTE(Minor), + ?BYTE(CookieLength), + Cookie:CookieLength/binary>>) -> + #hello_verify_request{protocol_version = {Major, Minor}, + cookie = Cookie}; + +decode_handshake(Version, Tag, <<?UINT24(_), ?UINT16(_), + ?UINT24(_), ?UINT24(_), Msg/binary>>) -> + %% DTLS specifics stripped + decode_tls_thandshake(Version, Tag, Msg). + +decode_tls_thandshake(Version, Tag, Msg) -> + TLSVersion = dtls_v1:corresponding_tls_version(Version), + ssl_handshake:decode_handshake(TLSVersion, Tag, Msg). + +decode_handshake_fragments(<<>>) -> + [<<>>]; +decode_handshake_fragments(<<?BYTE(Type), ?UINT24(Length), + ?UINT16(MessageSeq), + ?UINT24(FragmentOffset), ?UINT24(FragmentLength), + Fragment:FragmentLength/binary, Rest/binary>>) -> + [#handshake_fragment{type = Type, + length = Length, + message_seq = MessageSeq, + fragment_offset = FragmentOffset, + fragment_length = FragmentLength, + fragment = Fragment} | decode_handshake_fragments(Rest)]. + +reassemble(Version, #handshake_fragment{message_seq = Seq} = Fragment, + #protocol_buffers{dtls_handshake_next_seq = Seq, + dtls_handshake_next_fragments = Fragments0, + dtls_handshake_later_fragments = LaterFragments0} = + Buffers0)-> + case reassemble_fragments(Fragment, Fragments0) of + {more_data, Fragments} -> + {more_data, Buffers0#protocol_buffers{dtls_handshake_next_fragments = Fragments}}; + {raw, RawHandshake} -> + Handshake = decode_handshake(Version, RawHandshake), + {NextFragments, LaterFragments} = next_fragments(LaterFragments0), + {{Handshake, RawHandshake}, Buffers0#protocol_buffers{dtls_handshake_next_seq = Seq + 1, + dtls_handshake_next_fragments = NextFragments, + dtls_handshake_later_fragments = LaterFragments}} + end; +reassemble(_, #handshake_fragment{message_seq = FragSeq} = Fragment, + #protocol_buffers{dtls_handshake_next_seq = Seq, + dtls_handshake_later_fragments = LaterFragments} = Buffers0) when FragSeq > Seq-> + {more_data, + Buffers0#protocol_buffers{dtls_handshake_later_fragments = [Fragment | LaterFragments]}}; +reassemble(_, _, Buffers) -> + %% Disregard fragments FragSeq < Seq + {more_data, Buffers}. + +reassemble_fragments(Current, Fragments0) -> + [Frag1 | Frags] = lists:keysort(#handshake_fragment.fragment_offset, [Current | Fragments0]), + [Fragment | _] = Fragments = merge_fragment(Frag1, Frags), + case is_complete_handshake(Fragment) of + true -> + {raw, handshake_bin(Fragment)}; + false -> + {more_data, Fragments} + end. -decode_handshake(_Version, ?HELLO_VERIFY_REQUEST, <<?BYTE(Major), ?BYTE(Minor), - ?BYTE(CookieLength), Cookie:CookieLength/binary>>) -> +merge_fragment(Frag0, []) -> + [Frag0]; +merge_fragment(Frag0, [Frag1 | Rest]) -> + case merge_fragments(Frag0, Frag1) of + [_|_] = Frags -> + Frags ++ Rest; + Frag -> + merge_fragment(Frag, Rest) + end. - #hello_verify_request{ - protocol_version = {Major,Minor}, - cookie = Cookie}; -decode_handshake(Version, Tag, Msg) -> - ssl_handshake:decode_handshake(Version, Tag, Msg). +is_complete_handshake(#handshake_fragment{length = Length, fragment_length = Length}) -> + true; +is_complete_handshake(_) -> + false. + +next_fragments(LaterFragments) -> + case lists:keysort(#handshake_fragment.message_seq, LaterFragments) of + [] -> + {[], []}; + [#handshake_fragment{message_seq = Seq} | _] = Fragments -> + split_frags(Fragments, Seq, []) + end. -%% address_to_bin({A,B,C,D}, Port) -> -%% <<0:80,16#ffff:16,A,B,C,D,Port:16>>; -%% address_to_bin({A,B,C,D,E,F,G,H}, Port) -> -%% <<A:16,B:16,C:16,D:16,E:16,F:16,G:16,H:16,Port:16>>. +split_frags([#handshake_fragment{message_seq = Seq} = Frag | Rest], Seq, Acc) -> + split_frags(Rest, Seq, [Frag | Acc]); +split_frags(Frags, _, Acc) -> + {lists:reverse(Acc), Frags}. + + +%% Duplicate +merge_fragments(#handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = PreviousLen, + fragment = PreviousData + } = Previous, + #handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = PreviousLen, + fragment = PreviousData}) -> + Previous; + +%% Lager fragment save new data +merge_fragments(#handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = PreviousLen, + fragment = PreviousData + } = Previous, + #handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = CurrentLen, + fragment = CurrentData}) when CurrentLen > PreviousLen -> + NewLength = CurrentLen - PreviousLen, + <<_:PreviousLen/binary, NewData/binary>> = CurrentData, + Previous#handshake_fragment{ + fragment_length = PreviousLen + NewLength, + fragment = <<PreviousData/binary, NewData/binary>> + }; + +%% Smaller fragment +merge_fragments(#handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = PreviousLen + } = Previous, + #handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = CurrentLen}) when CurrentLen < PreviousLen -> + Previous; +%% Next fragment +merge_fragments(#handshake_fragment{ + fragment_offset = PreviousOffSet, + fragment_length = PreviousLen, + fragment = PreviousData + } = Previous, + #handshake_fragment{ + fragment_offset = CurrentOffSet, + fragment_length = CurrentLen, + fragment = CurrentData}) when PreviousOffSet + PreviousLen == CurrentOffSet-> + Previous#handshake_fragment{ + fragment_length = PreviousLen + CurrentLen, + fragment = <<PreviousData/binary, CurrentData/binary>>}; +%% No merge there is a gap +merge_fragments(Previous, Current) -> + [Previous, Current]. + +handshake_bin(#handshake_fragment{ + type = Type, + length = Len, + message_seq = Seq, + fragment_length = Len, + fragment_offset = 0, + fragment = Fragment}) -> + handshake_bin(Type, Len, Seq, Fragment). + +handshake_bin(Type, Length, Seq, FragmentData) -> + <<?BYTE(Type), ?UINT24(Length), + ?UINT16(Seq), ?UINT24(0), ?UINT24(Length), + FragmentData:Length/binary>>. diff --git a/lib/ssl/src/dtls_handshake.hrl b/lib/ssl/src/dtls_handshake.hrl index 0298fd3105..0a980c5f31 100644 --- a/lib/ssl/src/dtls_handshake.hrl +++ b/lib/ssl/src/dtls_handshake.hrl @@ -46,12 +46,13 @@ cookie }). --record(dtls_hs_state, - {current_read_seq, - starting_read_seq, - highest_record_seq, - fragments, - completed - }). +-record(handshake_fragment, { + type, + length, + message_seq, + fragment_offset, + fragment_length, + fragment + }). -endif. % -ifdef(dtls_handshake). diff --git a/lib/ssl/src/dtls_record.erl b/lib/ssl/src/dtls_record.erl index 8a6e2d315c..2b42ddf9b9 100644 --- a/lib/ssl/src/dtls_record.erl +++ b/lib/ssl/src/dtls_record.erl @@ -36,7 +36,9 @@ -export([decode_cipher_text/2]). %% Encoding --export([encode_plain_text/4, encode_tls_cipher_text/5, encode_change_cipher_spec/2]). +-export([encode_handshake/4, encode_alert_record/3, + encode_change_cipher_spec/3, encode_data/3]). +-export([encode_plain_text/5]). %% Protocol version handling -export([protocol_version/1, lowest_protocol_version/1, lowest_protocol_version/2, @@ -44,9 +46,9 @@ is_higher/2, supported_protocol_versions/0, is_acceptable_version/2]). -%% DTLS Epoch handling --export([init_connection_state_seq/2, current_connection_state_epoch/2, - set_connection_state_by_epoch/3, connection_state_by_epoch/3]). +-export([save_current_connection_state/2, next_epoch/2]). + +-export([init_connection_state_seq/2, current_connection_state_epoch/2]). -export_type([dtls_version/0, dtls_atom_version/0]). @@ -68,16 +70,64 @@ %%-------------------------------------------------------------------- init_connection_states(Role, BeastMitigation) -> ConnectionEnd = ssl_record:record_protocol_role(Role), - Current = initial_connection_state(ConnectionEnd, BeastMitigation), - Pending = ssl_record:empty_connection_state(ConnectionEnd, BeastMitigation), - #{write_msg_seq => 0, - prvious_read => undefined, + Initial = initial_connection_state(ConnectionEnd, BeastMitigation), + Current = Initial#{epoch := 0}, + InitialPending = ssl_record:empty_connection_state(ConnectionEnd, BeastMitigation), + Pending = InitialPending#{epoch => undefined}, + #{saved_read => Current, current_read => Current, pending_read => Pending, - prvious_write => undefined, + saved_write => Current, current_write => Current, pending_write => Pending}. - + +%%-------------------------------------------------------------------- +-spec save_current_connection_state(ssl_record:connection_states(), read | write) -> + ssl_record:connection_states(). +%% +%% Description: Returns the instance of the connection_state map +%% where the current read|write state has been copied to the save state. +%%-------------------------------------------------------------------- +save_current_connection_state(#{current_read := Current} = States, read) -> + States#{saved_read := Current}; + +save_current_connection_state(#{current_write := Current} = States, write) -> + States#{saved_write := Current}. + +next_epoch(#{pending_read := Pending, + current_read := #{epoch := Epoch}} = States, read) -> + States#{pending_read := Pending#{epoch := Epoch + 1}}; + +next_epoch(#{pending_write := Pending, + current_write := #{epoch := Epoch}} = States, write) -> + States#{pending_write := Pending#{epoch := Epoch + 1}}. + +get_connection_state_by_epoch(Epoch, #{current_write := #{epoch := Epoch} = Current}, + write) -> + Current; +get_connection_state_by_epoch(Epoch, #{saved_write := #{epoch := Epoch} = Saved}, + write) -> + Saved; +get_connection_state_by_epoch(Epoch, #{current_read := #{epoch := Epoch} = Current}, + read) -> + Current; +get_connection_state_by_epoch(Epoch, #{saved_read := #{epoch := Epoch} = Saved}, + read) -> + Saved. + +set_connection_state_by_epoch(WriteState, Epoch, #{current_write := #{epoch := Epoch}} = States, + write) -> + States#{current_write := WriteState}; +set_connection_state_by_epoch(WriteState, Epoch, #{saved_write := #{epoch := Epoch}} = States, + write) -> + States#{saved_write := WriteState}; +set_connection_state_by_epoch(ReadState, Epoch, #{current_read := #{epoch := Epoch}} = States, + read) -> + States#{current_read := ReadState}; +set_connection_state_by_epoch(ReadState, Epoch, #{saved_read := #{epoch := Epoch}} = States, + read) -> + States#{saved_read := ReadState}. + %%-------------------------------------------------------------------- -spec get_dtls_records(binary(), binary()) -> {[binary()], binary()} | #alert{}. %% @@ -140,98 +190,57 @@ get_dtls_records_aux(Data, Acc) -> ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE) end. -encode_plain_text(Type, Version, Data, - #{current_write := - #{epoch := Epoch, - sequence_number := Seq, - compression_state := CompS0, - security_parameters := - #security_parameters{ - cipher_type = ?AEAD, - compression_algorithm = CompAlg} - }= WriteState0} = ConnectionStates) -> - {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), - WriteState1 = WriteState0#{compression_state => CompS1}, - AAD = calc_aad(Type, Version, Epoch, Seq), - {CipherFragment, WriteState} = ssl_record:cipher_aead(dtls_v1:corresponding_tls_version(Version), - Comp, WriteState1, AAD), - CipherText = encode_tls_cipher_text(Type, Version, Epoch, Seq, CipherFragment), - {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}}; - -encode_plain_text(Type, Version, Data, - #{current_write := - #{epoch := Epoch, - sequence_number := Seq, - compression_state := CompS0, - security_parameters := - #security_parameters{compression_algorithm = CompAlg} - }= WriteState0} = ConnectionStates) -> - {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), - WriteState1 = WriteState0#{compression_state => CompS1}, - MacHash = calc_mac_hash(WriteState1, Type, Version, Epoch, Seq, Comp), - {CipherFragment, WriteState} = ssl_record:cipher(dtls_v1:corresponding_tls_version(Version), - Comp, WriteState1, MacHash), - CipherText = encode_tls_cipher_text(Type, Version, Epoch, Seq, CipherFragment), - {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}}. +%%-------------------------------------------------------------------- +-spec encode_handshake(iolist(), dtls_version(), integer(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +% +%% Description: Encodes a handshake message to send on the ssl-socket. +%%-------------------------------------------------------------------- +encode_handshake(Frag, Version, Epoch, ConnectionStates) -> + encode_plain_text(?HANDSHAKE, Version, Epoch, Frag, ConnectionStates). -decode_cipher_text(#ssl_tls{type = Type, version = Version, - epoch = Epoch, - sequence_number = Seq, - fragment = CipherFragment} = CipherText, - #{current_read := - #{compression_state := CompressionS0, - security_parameters := - #security_parameters{ - cipher_type = ?AEAD, - compression_algorithm = CompAlg} - } = ReadState0} = ConnnectionStates0) -> - AAD = calc_aad(Type, Version, Epoch, Seq), - case ssl_record:decipher_aead(dtls_v1:corresponding_tls_version(Version), - CipherFragment, ReadState0, AAD) of - {PlainFragment, ReadState1} -> - {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, - PlainFragment, CompressionS0), - ConnnectionStates = ConnnectionStates0#{ - current_read => ReadState1#{ - compression_state => CompressionS1}}, - {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; - #alert{} = Alert -> - Alert - end; -decode_cipher_text(#ssl_tls{type = Type, version = Version, - epoch = Epoch, - sequence_number = Seq, - fragment = CipherFragment} = CipherText, - #{current_read := - #{compression_state := CompressionS0, - security_parameters := - #security_parameters{ - compression_algorithm = CompAlg} - } = ReadState0}= ConnnectionStates0) -> - {PlainFragment, Mac, ReadState1} = ssl_record:decipher(dtls_v1:corresponding_tls_version(Version), - CipherFragment, ReadState0, true), - MacHash = calc_mac_hash(ReadState1, Type, Version, Epoch, Seq, PlainFragment), - case ssl_record:is_correct_mac(Mac, MacHash) of - true -> - {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, - PlainFragment, CompressionS0), - ConnnectionStates = ConnnectionStates0#{ - current_read => ReadState1#{ - compression_state => CompressionS1}}, - {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; - false -> - ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC) - end. +%%-------------------------------------------------------------------- +-spec encode_alert_record(#alert{}, dtls_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +%% +%% Description: Encodes an alert message to send on the ssl-socket. +%%-------------------------------------------------------------------- +encode_alert_record(#alert{level = Level, description = Description}, + Version, ConnectionStates) -> + #{epoch := Epoch} = ssl_record:current_connection_state(ConnectionStates, write), + encode_plain_text(?ALERT, Version, Epoch, <<?BYTE(Level), ?BYTE(Description)>>, + ConnectionStates). %%-------------------------------------------------------------------- --spec encode_change_cipher_spec(dtls_version(), ssl_record:connection_states()) -> +-spec encode_change_cipher_spec(dtls_version(), integer(), ssl_record:connection_states()) -> {iolist(), ssl_record:connection_states()}. %% %% Description: Encodes a change_cipher_spec-message to send on the ssl socket. %%-------------------------------------------------------------------- -encode_change_cipher_spec(Version, ConnectionStates) -> - encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates). +encode_change_cipher_spec(Version, Epoch, ConnectionStates) -> + encode_plain_text(?CHANGE_CIPHER_SPEC, Version, Epoch, ?byte(?CHANGE_CIPHER_SPEC_PROTO), ConnectionStates). + +%%-------------------------------------------------------------------- +-spec encode_data(binary(), dtls_version(), ssl_record:connection_states()) -> + {iolist(),ssl_record:connection_states()}. +%% +%% Description: Encodes data to send on the ssl-socket. +%%-------------------------------------------------------------------- +encode_data(Data, Version, ConnectionStates) -> + #{epoch := Epoch} = ssl_record:current_connection_state(ConnectionStates, write), + encode_plain_text(?APPLICATION_DATA, Version, Epoch, Data, ConnectionStates). + +encode_plain_text(Type, Version, Epoch, Data, ConnectionStates) -> + Write0 = get_connection_state_by_epoch(Epoch, ConnectionStates, write), + {CipherFragment, Write1} = encode_plain_text(Type, Version, Data, Write0), + {CipherText, Write} = encode_dtls_cipher_text(Type, Version, CipherFragment, Write1), + {CipherText, set_connection_state_by_epoch(Write, Epoch, ConnectionStates, write)}. + + +decode_cipher_text(#ssl_tls{epoch = Epoch} = CipherText, ConnnectionStates0) -> + ReadState = get_connection_state_by_epoch(Epoch, ConnnectionStates0, read), + decode_cipher_text(CipherText, ReadState, ConnnectionStates0). %%-------------------------------------------------------------------- -spec protocol_version(dtls_atom_version() | dtls_version()) -> @@ -373,12 +382,11 @@ is_acceptable_version(Version, Versions) -> %% This is only valid for DTLS in the first client_hello %%-------------------------------------------------------------------- init_connection_state_seq({254, _}, - #{current_read := #{epoch := 0} = Read, - current_write := #{epoch := 0} = Write} = CS0) -> - Seq = maps:get(sequence_number, Read), - CS0#{current_write => Write#{sequence_number => Seq}}; -init_connection_state_seq(_, CS) -> - CS. + #{current_read := #{epoch := 0, sequence_number := Seq}, + current_write := #{epoch := 0} = Write} = ConnnectionStates0) -> + ConnnectionStates0#{current_write => Write#{sequence_number => Seq}}; +init_connection_state_seq(_, ConnnectionStates) -> + ConnnectionStates. %%-------------------------------------------------------- -spec current_connection_state_epoch(ssl_record:connection_states(), read | write) -> @@ -387,49 +395,12 @@ init_connection_state_seq(_, CS) -> %% Description: Returns the epoch the connection_state record %% that is currently defined as the current conection state. %%-------------------------------------------------------------------- -current_connection_state_epoch(#{current_read := Current}, +current_connection_state_epoch(#{current_read := #{epoch := Epoch}}, read) -> - maps:get(epoch, Current); -current_connection_state_epoch(#{current_write := Current}, + Epoch; +current_connection_state_epoch(#{current_write := #{epoch := Epoch}}, write) -> - maps:get(epoch, Current). - -%%-------------------------------------------------------------------- - --spec connection_state_by_epoch(ssl_record:connection_states(), integer(), read | write) -> - ssl_record:connection_state(). -%% -%% Description: Returns the instance of the connection_state record -%% that is defined by the Epoch. -%%-------------------------------------------------------------------- -connection_state_by_epoch(#{current_read := #{epoch := Epoch}} = CS, Epoch, read) -> - CS; -connection_state_by_epoch(#{pending_read := #{epoch := Epoch}} = CS, Epoch, read) -> - CS; -connection_state_by_epoch(#{current_write := #{epoch := Epoch}} = CS, Epoch, write) -> - CS; -connection_state_by_epoch(#{pending_write := #{epoch := Epoch}} = CS, Epoch, write) -> - CS. -%%-------------------------------------------------------------------- --spec set_connection_state_by_epoch(ssl_record:connection_states(), - ssl_record:connection_state(), read | write) - -> ssl_record:connection_states(). -%% -%% Description: Returns the instance of the connection_state record -%% that is defined by the Epoch. -%%-------------------------------------------------------------------- -set_connection_state_by_epoch(#{current_read := #{epoch := Epoch}} = ConnectionStates0, - NewCS = #{epoch := Epoch}, read) -> - ConnectionStates0#{current_read => NewCS}; -set_connection_state_by_epoch(#{pending_read := #{epoch := Epoch}} = ConnectionStates0, - NewCS = #{epoch := Epoch}, read) -> - ConnectionStates0#{pending_read => NewCS}; -set_connection_state_by_epoch(#{current_write := #{epoch := Epoch}} = ConnectionStates0, - NewCS = #{epoch := Epoch}, write) -> - ConnectionStates0#{current_write => NewCS}; -set_connection_state_by_epoch(#{pending_write := #{epoch := Epoch}} = ConnectionStates0, -NewCS = #{epoch := Epoch}, write) -> - ConnectionStates0#{pending_write => NewCS}. + Epoch. %%-------------------------------------------------------------------- %%% Internal functions @@ -437,8 +408,8 @@ NewCS = #{epoch := Epoch}, write) -> initial_connection_state(ConnectionEnd, BeastMitigation) -> #{security_parameters => ssl_record:initial_security_params(ConnectionEnd), - epoch => 0, - sequence_number => 1, + epoch => undefined, + sequence_number => 0, beast_mitigation => BeastMitigation, compression_state => undefined, cipher_state => undefined, @@ -458,14 +429,85 @@ highest_list_protocol_version(Ver, []) -> highest_list_protocol_version(Ver1, [Ver2 | Rest]) -> highest_list_protocol_version(highest_protocol_version(Ver1, Ver2), Rest). -encode_tls_cipher_text(Type, {MajVer, MinVer}, Epoch, Seq, Fragment) -> +encode_dtls_cipher_text(Type, {MajVer, MinVer}, Fragment, + #{epoch := Epoch, sequence_number := Seq} = WriteState) -> Length = erlang:iolist_size(Fragment), - [<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Epoch), - ?UINT48(Seq), ?UINT16(Length)>>, Fragment]. + {[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Epoch), + ?UINT48(Seq), ?UINT16(Length)>>, Fragment], + WriteState#{sequence_number => Seq + 1}}. + +encode_plain_text(Type, Version, Data, #{compression_state := CompS0, + epoch := Epoch, + sequence_number := Seq, + security_parameters := + #security_parameters{ + cipher_type = ?AEAD, + compression_algorithm = CompAlg} + } = WriteState0) -> + {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), + WriteState1 = WriteState0#{compression_state => CompS1}, + AAD = calc_aad(Type, Version, Epoch, Seq), + ssl_record:cipher_aead(dtls_v1:corresponding_tls_version(Version), Comp, WriteState1, AAD); +encode_plain_text(Type, Version, Data, #{compression_state := CompS0, + epoch := Epoch, + sequence_number := Seq, + security_parameters := + #security_parameters{compression_algorithm = CompAlg} + }= WriteState0) -> + {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), + WriteState1 = WriteState0#{compression_state => CompS1}, + MacHash = calc_mac_hash(Type, Version, WriteState1, Epoch, Seq, Comp), + ssl_record:cipher(dtls_v1:corresponding_tls_version(Version), Comp, WriteState1, MacHash). + +decode_cipher_text(#ssl_tls{type = Type, version = Version, + epoch = Epoch, + sequence_number = Seq, + fragment = CipherFragment} = CipherText, + #{compression_state := CompressionS0, + security_parameters := + #security_parameters{ + cipher_type = ?AEAD, + compression_algorithm = CompAlg}} = ReadState0, + ConnnectionStates0) -> + AAD = calc_aad(Type, Version, Epoch, Seq), + case ssl_record:decipher_aead(dtls_v1:corresponding_tls_version(Version), + CipherFragment, ReadState0, AAD) of + {PlainFragment, ReadState1} -> + {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, + PlainFragment, CompressionS0), + ReadState = ReadState1#{compression_state => CompressionS1}, + ConnnectionStates = set_connection_state_by_epoch(ReadState, Epoch, ConnnectionStates0, read), + {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; + #alert{} = Alert -> + Alert + end; +decode_cipher_text(#ssl_tls{type = Type, version = Version, + epoch = Epoch, + sequence_number = Seq, + fragment = CipherFragment} = CipherText, + #{compression_state := CompressionS0, + security_parameters := + #security_parameters{ + compression_algorithm = CompAlg}} = ReadState0, + ConnnectionStates0) -> + {PlainFragment, Mac, ReadState1} = ssl_record:decipher(dtls_v1:corresponding_tls_version(Version), + CipherFragment, ReadState0, true), + MacHash = calc_mac_hash(Type, Version, ReadState1, Epoch, Seq, PlainFragment), + case ssl_record:is_correct_mac(Mac, MacHash) of + true -> + {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, + PlainFragment, CompressionS0), + + ReadState = ReadState1#{compression_state => CompressionS1}, + ConnnectionStates = set_connection_state_by_epoch(ReadState, Epoch, ConnnectionStates0, read), + {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; + false -> + ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC) + end. -calc_mac_hash(#{mac_secret := MacSecret, - security_parameters := #security_parameters{mac_algorithm = MacAlg}}, - Type, Version, Epoch, SeqNo, Fragment) -> +calc_mac_hash(Type, Version, #{mac_secret := MacSecret, + security_parameters := #security_parameters{mac_algorithm = MacAlg}}, + Epoch, SeqNo, Fragment) -> Length = erlang:iolist_size(Fragment), NewSeq = (Epoch bsl 48) + SeqNo, mac_hash(Version, MacAlg, MacSecret, NewSeq, Type, diff --git a/lib/ssl/src/dtls_record.hrl b/lib/ssl/src/dtls_record.hrl index b9f84cbe7f..373481c3f8 100644 --- a/lib/ssl/src/dtls_record.hrl +++ b/lib/ssl/src/dtls_record.hrl @@ -34,11 +34,10 @@ -record(ssl_tls, { type, version, - epoch, - sequence_number, - offset, - length, - fragment + %%length, + fragment, + epoch, + sequence_number }). -endif. % -ifdef(dtls_record). diff --git a/lib/ssl/src/dtls_socket.erl b/lib/ssl/src/dtls_socket.erl new file mode 100644 index 0000000000..570b3ae83a --- /dev/null +++ b/lib/ssl/src/dtls_socket.erl @@ -0,0 +1,148 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2016-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(dtls_socket). + +-include("ssl_internal.hrl"). +-include("ssl_api.hrl"). + +-export([send/3, listen/3, accept/3, connect/4, socket/4, setopts/3, getopts/3, getstat/3, + peername/2, sockname/2, port/2, close/2]). +-export([emulated_options/0, internal_inet_values/0, default_inet_values/0, default_cb_info/0]). + +send(Transport, {{IP,Port},Socket}, Data) -> + Transport:send(Socket, IP, Port, Data). + +listen(gen_udp = Transport, Port, #config{transport_info = {Transport, _, _, _}, + ssl = SslOpts, + emulated = EmOpts, + inet_user = Options} = Config) -> + + + case dtls_udp_sup:start_child([Port, emulated_socket_options(EmOpts, #socket_options{}), + Options ++ internal_inet_values(), SslOpts]) of + {ok, Pid} -> + {ok, #sslsocket{pid = {udp, Config#config{udp_handler = {Pid, Port}}}}}; + Err = {error, _} -> + Err + end. + +accept(udp, #config{transport_info = {Transport = gen_udp,_,_,_}, + connection_cb = ConnectionCb, + udp_handler = {Listner, _}}, _Timeout) -> + case dtls_udp_listener:accept(Listner, self()) of + {ok, Pid, Socket} -> + {ok, socket(Pid, Transport, {Listner, Socket}, ConnectionCb)}; + {error, Reason} -> + {error, Reason} + end. + +connect(Address, Port, #config{transport_info = {Transport, _, _, _} = CbInfo, + connection_cb = ConnectionCb, + ssl = SslOpts, + emulated = EmOpts, + inet_ssl = SocketOpts}, Timeout) -> + case Transport:open(0, SocketOpts ++ internal_inet_values()) of + {ok, Socket} -> + ssl_connection:connect(ConnectionCb, Address, Port, {{Address, Port},Socket}, + {SslOpts, + emulated_socket_options(EmOpts, #socket_options{}), undefined}, + self(), CbInfo, Timeout); + {error, _} = Error-> + Error + end. + +close(gen_udp, {_Client, _Socket}) -> + ok. + +socket(Pid, Transport, Socket, ConnectionCb) -> + #sslsocket{pid = Pid, + %% "The name "fd" is keept for backwards compatibility + fd = {Transport, Socket, ConnectionCb}}. + +%% Vad göra med emulerade +setopts(gen_udp, #sslsocket{pid = {Socket, _}}, Options) -> + {SockOpts, _} = tls_socket:split_options(Options), + inet:setopts(Socket, SockOpts); +setopts(_, #sslsocket{pid = {ListenSocket, #config{transport_info = {Transport,_,_,_}}}}, Options) -> + {SockOpts, _} = tls_socket:split_options(Options), + Transport:setopts(ListenSocket, SockOpts); +%%% Following clauses will not be called for emulated options, they are handled in the connection process +setopts(gen_udp, Socket, Options) -> + inet:setopts(Socket, Options); +setopts(Transport, Socket, Options) -> + Transport:setopts(Socket, Options). + +getopts(gen_udp, #sslsocket{pid = {Socket, #config{emulated = EmOpts}}}, Options) -> + {SockOptNames, EmulatedOptNames} = tls_socket:split_options(Options), + EmulatedOpts = get_emulated_opts(EmOpts, EmulatedOptNames), + SocketOpts = tls_socket:get_socket_opts(Socket, SockOptNames, inet), + {ok, EmulatedOpts ++ SocketOpts}; +getopts(Transport, #sslsocket{pid = {ListenSocket, #config{emulated = EmOpts}}}, Options) -> + {SockOptNames, EmulatedOptNames} = tls_socket:split_options(Options), + EmulatedOpts = get_emulated_opts(EmOpts, EmulatedOptNames), + SocketOpts = tls_socket:get_socket_opts(ListenSocket, SockOptNames, Transport), + {ok, EmulatedOpts ++ SocketOpts}; +%%% Following clauses will not be called for emulated options, they are handled in the connection process +getopts(gen_udp, {_,Socket}, Options) -> + inet:getopts(Socket, Options); +getopts(Transport, Socket, Options) -> + Transport:getopts(Socket, Options). +getstat(gen_udp, {_,Socket}, Options) -> + inet:getstat(Socket, Options); +getstat(Transport, Socket, Options) -> + Transport:getstat(Socket, Options). +peername(gen_udp, {_, {Client, _Socket}}) -> + {ok, Client}; +peername(Transport, Socket) -> + Transport:peername(Socket). +sockname(gen_udp, {_,Socket}) -> + inet:sockname(Socket); +sockname(Transport, Socket) -> + Transport:sockname(Socket). + +port(gen_udp, {_,Socket}) -> + inet:port(Socket); +port(Transport, Socket) -> + Transport:port(Socket). + +emulated_options() -> + [mode, active, packet, packet_size]. + +internal_inet_values() -> + [{active, false}, {mode,binary}]. + +default_inet_values() -> + [{active, true}, {mode, list}]. + +default_cb_info() -> + {gen_udp, udp, udp_closed, udp_error}. + +get_emulated_opts(EmOpts, EmOptNames) -> + lists:map(fun(Name) -> {value, Value} = lists:keysearch(Name, 1, EmOpts), + Value end, + EmOptNames). + +emulated_socket_options(InetValues, #socket_options{ + mode = Mode, + active = Active}) -> + #socket_options{ + mode = proplists:get_value(mode, InetValues, Mode), + active = proplists:get_value(active, InetValues, Active) + }. diff --git a/lib/ssl/src/dtls_udp_listener.erl b/lib/ssl/src/dtls_udp_listener.erl new file mode 100644 index 0000000000..b7f115582e --- /dev/null +++ b/lib/ssl/src/dtls_udp_listener.erl @@ -0,0 +1,205 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2016-2016. All Rights Reserved. +%% +%% The contents of this file are subject to the Erlang Public License, +%% Version 1.1, (the "License"); you may not use this file except in +%% compliance with the License. You should have received a copy of the +%% Erlang Public License along with this software. If not, it can be +%% retrieved online at http://www.erlang.org/. +%% +%% Software distributed under the License is distributed on an "AS IS" +%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +%% the License for the specific language governing rights and limitations +%% under the License. +%% +%% %CopyrightEnd% +%% + +%% + +-module(dtls_udp_listener). + +-behaviour(gen_server). + +%% API +-export([start_link/4, active_once/3, accept/2, sockname/1]). + +%% gen_server callbacks +-export([init/1, handle_call/3, handle_cast/2, handle_info/2, + terminate/2, code_change/3]). + +-record(state, + {port, + listner, + dtls_options, + emulated_options, + dtls_msq_queues = kv_new(), + clients = set_new(), + dtls_processes = kv_new(), + accepters = queue:new(), + first + }). + +%%%=================================================================== +%%% API +%%%=================================================================== + +start_link(Port, EmOpts, InetOptions, DTLSOptions) -> + gen_server:start_link(?MODULE, [Port, EmOpts, InetOptions, DTLSOptions], []). + +active_once(UDPConnection, Client, Pid) -> + gen_server:cast(UDPConnection, {active_once, Client, Pid}). + +accept(UDPConnection, Accepter) -> + gen_server:call(UDPConnection, {accept, Accepter}, infinity). + +sockname(UDPConnection) -> + gen_server:call(UDPConnection, sockname, infinity). + +%%%=================================================================== +%%% gen_server callbacks +%%%=================================================================== + +init([Port, EmOpts, InetOptions, DTLSOptions]) -> + try + {ok, Socket} = gen_udp:open(Port, InetOptions), + {ok, #state{port = Port, + first = true, + dtls_options = DTLSOptions, + emulated_options = EmOpts, + listner = Socket}} + catch _:_ -> + {error, closed} + end. + +handle_call({accept, Accepter}, From, #state{first = true, + accepters = Accepters, + listner = Socket} = State0) -> + next_datagram(Socket), + State = State0#state{first = false, + accepters = queue:in({Accepter, From}, Accepters)}, + {noreply, State}; + +handle_call({accept, Accepter}, From, #state{accepters = Accepters} = State0) -> + State = State0#state{accepters = queue:in({Accepter, From}, Accepters)}, + {noreply, State}; +handle_call(sockname, _, #state{listner = Socket} = State) -> + Reply = inet:sockname(Socket), + {reply, Reply, State}. + +handle_cast({active_once, Client, Pid}, State0) -> + State = handle_active_once(Client, Pid, State0), + {noreply, State}. + +handle_info({udp, Socket, IP, InPortNo, _} = Msg, #state{listner = Socket} = State0) -> + State = handle_datagram({IP, InPortNo}, Msg, State0), + next_datagram(Socket), + {noreply, State}; + +handle_info({'DOWN', _, process, Pid, _}, #state{clients = Clients, + dtls_processes = Processes0} = State) -> + Client = kv_get(Pid, Processes0), + Processes = kv_delete(Pid, Processes0), + {noreply, State#state{clients = set_delete(Client, Clients), + dtls_processes = Processes}}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== +handle_datagram(Client, Msg, #state{clients = Clients, + accepters = AcceptorsQueue0} = State) -> + case set_is_member(Client, Clients) of + false -> + case queue:out(AcceptorsQueue0) of + {{value, {UserPid, From}}, AcceptorsQueue} -> + setup_new_connection(UserPid, From, Client, Msg, + State#state{accepters = AcceptorsQueue}); + {empty, _} -> + %% Drop packet client will resend + State + end; + true -> + dispatch(Client, Msg, State) + end. + +dispatch(Client, Msg, #state{dtls_msq_queues = MsgQueues} = State) -> + case kv_lookup(Client, MsgQueues) of + {value, Queue0} -> + case queue:out(Queue0) of + {{value, Pid}, Queue} when is_pid(Pid) -> + Pid ! Msg, + State#state{dtls_msq_queues = + kv_update(Client, Queue, MsgQueues)}; + {{value, _}, Queue} -> + State#state{dtls_msq_queues = + kv_update(Client, queue:in(Msg, Queue), MsgQueues)}; + {empty, Queue} -> + State#state{dtls_msq_queues = + kv_update(Client, queue:in(Msg, Queue), MsgQueues)} + end + end. +next_datagram(Socket) -> + inet:setopts(Socket, [{active, once}]). + +handle_active_once(Client, Pid, #state{dtls_msq_queues = MsgQueues} = State0) -> + Queue0 = kv_get(Client, MsgQueues), + case queue:out(Queue0) of + {{value, Pid}, _} when is_pid(Pid) -> + State0; + {{value, Msg}, Queue} -> + Pid ! Msg, + State0#state{dtls_msq_queues = kv_update(Client, Queue, MsgQueues)}; + {empty, Queue0} -> + State0#state{dtls_msq_queues = kv_update(Client, queue:in(Pid, Queue0), MsgQueues)} + end. + +setup_new_connection(User, From, Client, Msg, #state{dtls_processes = Processes, + clients = Clients, + dtls_msq_queues = MsgQueues, + dtls_options = DTLSOpts, + port = Port, + listner = Socket, + emulated_options = EmOpts} = State) -> + ConnArgs = [server, "localhost", Port, {self(), {Client, Socket}}, + {DTLSOpts, EmOpts, udp_listner}, User, dtls_socket:default_cb_info()], + case dtls_connection_sup:start_child(ConnArgs) of + {ok, Pid} -> + erlang:monitor(process, Pid), + gen_server:reply(From, {ok, Pid, {Client, Socket}}), + Pid ! Msg, + State#state{clients = set_insert(Client, Clients), + dtls_msq_queues = kv_insert(Client, queue:new(), MsgQueues), + dtls_processes = kv_insert(Pid, Client, Processes)}; + {error, Reason} -> + gen_server:reply(From, {error, Reason}), + State + end. +kv_update(Key, Value, Store) -> + gb_trees:update(Key, Value, Store). +kv_lookup(Key, Store) -> + gb_trees:lookup(Key, Store). +kv_insert(Key, Value, Store) -> + gb_trees:insert(Key, Value, Store). +kv_get(Key, Store) -> + gb_trees:get(Key, Store). +kv_delete(Key, Store) -> + gb_trees:delete(Key, Store). +kv_new() -> + gb_trees:empty(). + +set_new() -> + gb_sets:empty(). +set_insert(Item, Set) -> + gb_sets:insert(Item, Set). +set_delete(Item, Set) -> + gb_sets:delete(Item, Set). +set_is_member(Item, Set) -> + gb_sets:is_member(Item, Set). diff --git a/lib/ssl/src/dtls_udp_sup.erl b/lib/ssl/src/dtls_udp_sup.erl new file mode 100644 index 0000000000..197882e92f --- /dev/null +++ b/lib/ssl/src/dtls_udp_sup.erl @@ -0,0 +1,62 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2016-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% +%% + +%% +%%---------------------------------------------------------------------- +%% Purpose: Supervisor for a procsses dispatching upd datagrams to +%% correct DTLS handler +%%---------------------------------------------------------------------- +-module(dtls_udp_sup). + +-behaviour(supervisor). + +%% API +-export([start_link/0]). +-export([start_child/1]). + +%% Supervisor callback +-export([init/1]). + +%%%========================================================================= +%%% API +%%%========================================================================= +start_link() -> + supervisor:start_link({local, ?MODULE}, ?MODULE, []). + +start_child(Args) -> + supervisor:start_child(?MODULE, Args). + +%%%========================================================================= +%%% Supervisor callback +%%%========================================================================= +init(_O) -> + RestartStrategy = simple_one_for_one, + MaxR = 0, + MaxT = 3600, + + Name = undefined, % As simple_one_for_one is used. + StartFunc = {dtls_udp_listener, start_link, []}, + Restart = temporary, % E.g. should not be restarted + Shutdown = 4000, + Modules = [dtls_udp_listener], + Type = worker, + + ChildSpec = {Name, StartFunc, Restart, Shutdown, Type, Modules}, + {ok, {{RestartStrategy, MaxR, MaxT}, [ChildSpec]}}. diff --git a/lib/ssl/src/dtls_v1.erl b/lib/ssl/src/dtls_v1.erl index 8c03bda513..ffd3e4b833 100644 --- a/lib/ssl/src/dtls_v1.erl +++ b/lib/ssl/src/dtls_v1.erl @@ -21,7 +21,7 @@ -include("ssl_cipher.hrl"). --export([suites/1, mac_hash/7, ecc_curves/1, corresponding_tls_version/1]). +-export([suites/1, mac_hash/7, ecc_curves/1, corresponding_tls_version/1, corresponding_dtls_version/1]). -spec suites(Minor:: 253|255) -> [ssl_cipher:cipher_suite()]. @@ -29,7 +29,7 @@ suites(Minor) -> tls_v1:suites(corresponding_minor_tls_version(Minor)). mac_hash(Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) -> - tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, corresponding_tls_version(Version), + tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version, Length, Fragment). ecc_curves({_Major, Minor}) -> @@ -42,3 +42,11 @@ corresponding_minor_tls_version(255) -> 2; corresponding_minor_tls_version(253) -> 3. + +corresponding_dtls_version({3, Minor}) -> + {254, corresponding_minor_dtls_version(Minor)}. + +corresponding_minor_dtls_version(2) -> + 255; +corresponding_minor_dtls_version(3) -> + 253. diff --git a/lib/ssl/src/ssl.app.src b/lib/ssl/src/ssl.app.src index 00b0513891..9c5d795848 100644 --- a/lib/ssl/src/ssl.app.src +++ b/lib/ssl/src/ssl.app.src @@ -6,6 +6,7 @@ tls_connection, tls_handshake, tls_record, + tls_socket, tls_v1, ssl_v3, ssl_v2, @@ -13,7 +14,10 @@ dtls_connection, dtls_handshake, dtls_record, + dtls_socket, dtls_v1, + dtls_udp_listener, + dtls_udp_sup, %% API ssl, %% Main API tls, %% TLS specific @@ -27,7 +31,6 @@ ssl_cipher, ssl_srp_primes, ssl_alert, - ssl_socket, ssl_listen_tracker_sup, %% Erlang Distribution over SSL/TLS inet_tls_dist, diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl index 27b753af2e..c72ee44a95 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]). @@ -101,33 +101,27 @@ connect(Socket, SslOptions0, Timeout) when is_port(Socket), (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) -> {Transport,_,_,_} = proplists:get_value(cb_info, SslOptions0, {gen_tcp, tcp, tcp_closed, tcp_error}), - EmulatedOptions = ssl_socket:emulated_options(), - {ok, SocketValues} = ssl_socket:getopts(Transport, Socket, EmulatedOptions), + EmulatedOptions = tls_socket:emulated_options(), + {ok, SocketValues} = tls_socket:getopts(Transport, Socket, EmulatedOptions), try handle_options(SslOptions0 ++ SocketValues, client) of - {ok, #config{transport_info = CbInfo, ssl = SslOptions, emulated = EmOpts, - connection_cb = ConnectionCb}} -> - - ok = ssl_socket:setopts(Transport, Socket, ssl_socket:internal_inet_values()), - case ssl_socket:peername(Transport, Socket) of - {ok, {Address, Port}} -> - ssl_connection:connect(ConnectionCb, Address, Port, Socket, - {SslOptions, emulated_socket_options(EmOpts, #socket_options{}), undefined}, - self(), CbInfo, Timeout); - {error, Error} -> - {error, Error} - end + {ok, Config} -> + tls_socket:upgrade(Socket, Config, Timeout) catch _:{error, Reason} -> {error, Reason} end; - connect(Host, Port, Options) -> connect(Host, Port, Options, infinity). connect(Host, Port, Options, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) -> - try handle_options(Options, client) of - {ok, Config} -> - do_connect(Host,Port,Config,Timeout) + try + {ok, Config} = handle_options(Options, client), + case Config#config.connection_cb of + tls_connection -> + tls_socket:connect(Host,Port,Config,Timeout); + dtls_connection -> + dtls_socket:connect(Host,Port,Config,Timeout) + end catch throw:Error -> Error @@ -144,17 +138,7 @@ listen(_Port, []) -> listen(Port, Options0) -> try {ok, Config} = handle_options(Options0, server), - ConnectionCb = connection_cb(Options0), - #config{transport_info = {Transport, _, _, _}, inet_user = Options, connection_cb = ConnectionCb, - ssl = SslOpts, emulated = EmOpts} = Config, - case Transport:listen(Port, Options) of - {ok, ListenSocket} -> - ok = ssl_socket:setopts(Transport, ListenSocket, ssl_socket:internal_inet_values()), - {ok, Tracker} = ssl_socket:inherit_tracker(ListenSocket, EmOpts, SslOpts), - {ok, #sslsocket{pid = {ListenSocket, Config#config{emulated = Tracker}}}}; - Err = {error, _} -> - Err - end + do_listen(Port, Config, connection_cb(Options0)) catch Error = {error, _} -> Error @@ -171,27 +155,15 @@ transport_accept(ListenSocket) -> transport_accept(ListenSocket, infinity). transport_accept(#sslsocket{pid = {ListenSocket, - #config{transport_info = {Transport,_,_, _} =CbInfo, - connection_cb = ConnectionCb, - ssl = SslOpts, - emulated = Tracker}}}, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) -> - case Transport:accept(ListenSocket, Timeout) of - {ok, Socket} -> - {ok, EmOpts} = ssl_socket:get_emulated_opts(Tracker), - {ok, Port} = ssl_socket:port(Transport, Socket), - ConnArgs = [server, "localhost", Port, Socket, - {SslOpts, emulated_socket_options(EmOpts, #socket_options{}), Tracker}, self(), CbInfo], - ConnectionSup = connection_sup(ConnectionCb), - case ConnectionSup:start_child(ConnArgs) of - {ok, Pid} -> - ssl_connection:socket_control(ConnectionCb, Socket, Pid, Transport, Tracker); - {error, Reason} -> - {error, Reason} - end; - {error, Reason} -> - {error, Reason} + #config{connection_cb = ConnectionCb} = Config}}, Timeout) + when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) -> + case ConnectionCb of + tls_connection -> + tls_socket:accept(ListenSocket, Config, Timeout); + dtls_connection -> + dtls_socket:accept(ListenSocket, Config, Timeout) end. - + %%-------------------------------------------------------------------- -spec ssl_accept(#sslsocket{}) -> ok | {error, reason()}. -spec ssl_accept(#sslsocket{} | port(), timeout()| [ssl_option() @@ -214,13 +186,14 @@ ssl_accept(ListenSocket, SslOptions) when is_port(ListenSocket) -> ssl_accept(ListenSocket, SslOptions, infinity). ssl_accept(#sslsocket{} = Socket, [], Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)-> - ssl_accept(#sslsocket{} = Socket, Timeout); + ssl_accept(Socket, Timeout); ssl_accept(#sslsocket{fd = {_, _, _, Tracker}} = Socket, SslOpts0, Timeout) when (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity)-> try - {ok, EmOpts, InheritedSslOpts} = ssl_socket:get_all_opts(Tracker), + {ok, EmOpts, InheritedSslOpts} = tls_socket:get_all_opts(Tracker), SslOpts = handle_options(SslOpts0, InheritedSslOpts), - ssl_connection:handshake(Socket, {SslOpts, emulated_socket_options(EmOpts, #socket_options{})}, Timeout) + ssl_connection:handshake(Socket, {SslOpts, + tls_socket:emulated_socket_options(EmOpts, #socket_options{})}, Timeout) catch Error = {error, _Reason} -> Error end; @@ -228,15 +201,16 @@ ssl_accept(Socket, SslOptions, Timeout) when is_port(Socket), (is_integer(Timeout) andalso Timeout >= 0) or (Timeout == infinity) -> {Transport,_,_,_} = proplists:get_value(cb_info, SslOptions, {gen_tcp, tcp, tcp_closed, tcp_error}), - EmulatedOptions = ssl_socket:emulated_options(), - {ok, SocketValues} = ssl_socket:getopts(Transport, Socket, EmulatedOptions), + EmulatedOptions = tls_socket:emulated_options(), + {ok, SocketValues} = tls_socket:getopts(Transport, Socket, EmulatedOptions), ConnetionCb = connection_cb(SslOptions), try handle_options(SslOptions ++ SocketValues, server) of {ok, #config{transport_info = CbInfo, ssl = SslOpts, emulated = EmOpts}} -> - ok = ssl_socket:setopts(Transport, Socket, ssl_socket:internal_inet_values()), - {ok, Port} = ssl_socket:port(Transport, Socket), + ok = tls_socket:setopts(Transport, Socket, tls_socket:internal_inet_values()), + {ok, Port} = tls_socket:port(Transport, Socket), ssl_connection:ssl_accept(ConnetionCb, Port, Socket, - {SslOpts, emulated_socket_options(EmOpts, #socket_options{}), undefined}, + {SslOpts, + tls_socket:emulated_socket_options(EmOpts, #socket_options{}), undefined}, self(), CbInfo, Timeout) catch Error = {error, _Reason} -> Error @@ -275,6 +249,8 @@ close(#sslsocket{pid = {ListenSocket, #config{transport_info={Transport,_, _, _} %%-------------------------------------------------------------------- send(#sslsocket{pid = Pid}, Data) when is_pid(Pid) -> ssl_connection:send(Pid, Data); +send(#sslsocket{pid = {_, #config{transport_info={gen_udp, _, _, _}}}}, _) -> + {error,enotconn}; %% Emulate connection behaviour send(#sslsocket{pid = {ListenSocket, #config{transport_info={Transport, _, _, _}}}}, Data) -> Transport:send(ListenSocket, Data). %% {error,enotconn} @@ -358,9 +334,9 @@ connection_info(#sslsocket{} = SSLSocket) -> %% Description: same as inet:peername/1. %%-------------------------------------------------------------------- peername(#sslsocket{pid = Pid, fd = {Transport, Socket, _, _}}) when is_pid(Pid)-> - ssl_socket:peername(Transport, Socket); + tls_socket:peername(Transport, Socket); peername(#sslsocket{pid = {ListenSocket, #config{transport_info = {Transport,_,_,_}}}}) -> - ssl_socket:peername(Transport, ListenSocket). %% Will return {error, enotconn} + tls_socket:peername(Transport, ListenSocket). %% Will return {error, enotconn} %%-------------------------------------------------------------------- -spec peercert(#sslsocket{}) ->{ok, DerCert::binary()} | {error, reason()}. @@ -420,6 +396,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()}. %% @@ -429,7 +432,7 @@ getopts(#sslsocket{pid = Pid}, OptionTags) when is_pid(Pid), is_list(OptionTags) ssl_connection:get_opts(Pid, OptionTags); getopts(#sslsocket{pid = {_, #config{transport_info = {Transport,_,_,_}}}} = ListenSocket, OptionTags) when is_list(OptionTags) -> - try ssl_socket:getopts(Transport, ListenSocket, OptionTags) of + try tls_socket:getopts(Transport, ListenSocket, OptionTags) of {ok, _} = Result -> Result; {error, InetError} -> @@ -457,7 +460,7 @@ setopts(#sslsocket{pid = Pid}, Options0) when is_pid(Pid), is_list(Options0) -> end; setopts(#sslsocket{pid = {_, #config{transport_info = {Transport,_,_,_}}}} = ListenSocket, Options) when is_list(Options) -> - try ssl_socket:setopts(Transport, ListenSocket, Options) of + try tls_socket:setopts(Transport, ListenSocket, Options) of ok -> ok; {error, InetError} -> @@ -490,10 +493,10 @@ getstat(Socket) -> %% Description: Get one or more statistic options for a socket. %%-------------------------------------------------------------------- getstat(#sslsocket{pid = {Listen, #config{transport_info = {Transport, _, _, _}}}}, Options) when is_port(Listen), is_list(Options) -> - ssl_socket:getstat(Transport, Listen, Options); + tls_socket:getstat(Transport, Listen, Options); getstat(#sslsocket{pid = Pid, fd = {Transport, Socket, _, _}}, Options) when is_pid(Pid), is_list(Options) -> - ssl_socket:getstat(Transport, Socket, Options). + tls_socket:getstat(Transport, Socket, Options). %%--------------------------------------------------------------- -spec shutdown(#sslsocket{}, read | write | read_write) -> ok | {error, reason()}. @@ -512,10 +515,13 @@ shutdown(#sslsocket{pid = Pid}, How) -> %% Description: Same as inet:sockname/1 %%-------------------------------------------------------------------- sockname(#sslsocket{pid = {Listen, #config{transport_info = {Transport, _, _, _}}}}) when is_port(Listen) -> - ssl_socket:sockname(Transport, Listen); - + tls_socket:sockname(Transport, Listen); +sockname(#sslsocket{pid = {udp, #config{udp_handler = {Pid, _}}}}) -> + dtls_udp_listener:sockname(Pid); +sockname(#sslsocket{pid = Pid, fd = {gen_udp= Transport, Socket, _, _}}) when is_pid(Pid) -> + dtls_socket:sockname(Transport, Socket); sockname(#sslsocket{pid = Pid, fd = {Transport, Socket, _, _}}) when is_pid(Pid) -> - ssl_socket:sockname(Transport, Socket). + tls_socket:sockname(Transport, Socket). %%--------------------------------------------------------------- -spec session_info(#sslsocket{}) -> {ok, list()} | {error, reason()}. @@ -625,28 +631,15 @@ available_suites(all) -> Version = tls_record:highest_protocol_version([]), ssl_cipher:filter_suites(ssl_cipher:all_suites(Version)). -do_connect(Address, Port, - #config{transport_info = CbInfo, inet_user = UserOpts, ssl = SslOpts, - emulated = EmOpts, inet_ssl = SocketOpts, connection_cb = ConnetionCb}, - Timeout) -> - {Transport, _, _, _} = CbInfo, - try Transport:connect(Address, Port, SocketOpts, Timeout) of - {ok, Socket} -> - ssl_connection:connect(ConnetionCb, Address, Port, Socket, - {SslOpts, emulated_socket_options(EmOpts, #socket_options{}), undefined}, - self(), CbInfo, Timeout); - {error, Reason} -> - {error, Reason} - catch - exit:{function_clause, _} -> - {error, {options, {cb_info, CbInfo}}}; - exit:badarg -> - {error, {options, {socket_options, UserOpts}}}; - exit:{badarg, _} -> - {error, {options, {socket_options, UserOpts}}} - end. +do_listen(Port, #config{transport_info = {Transport, _, _, _}} = Config, tls_connection) -> + tls_socket:listen(Transport, Port, Config); +do_listen(Port, #config{transport_info = {Transport, _, _, _}} = Config, dtls_connection) -> + dtls_socket:listen(Transport, Port, Config). + %% 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), @@ -703,6 +696,8 @@ handle_options(Opts0, Role) -> [RecordCb:protocol_version(Vsn) || Vsn <- Vsns] end, + Protocol = proplists:get_value(protocol, Opts, tls), + SSLOptions = #ssl_options{ versions = Versions, verify = validate_option(verify, Verify), @@ -725,10 +720,12 @@ 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)), - RecordCb:highest_protocol_version(Versions)), + tls_version(RecordCb:highest_protocol_version(Versions))), %% Server side option reuse_session = handle_option(reuse_session, Opts, ReuseSessionFun), reuse_sessions = handle_option(reuse_sessions, Opts, true), @@ -755,7 +752,10 @@ handle_options(Opts0, Role) -> honor_cipher_order = handle_option(honor_cipher_order, Opts, default_option_role(server, false, Role), server, Role), - protocol = proplists:get_value(protocol, Opts, tls), + honor_ecc_order = handle_option(honor_ecc_order, Opts, + default_option_role(server, false, Role), + server, Role), + protocol = Protocol, padding_check = proplists:get_value(padding_check, Opts, true), beast_mitigation = handle_option(beast_mitigation, Opts, one_n_minus_one), fallback = handle_option(fallback, Opts, @@ -768,7 +768,7 @@ handle_options(Opts0, Role) -> v2_hello_compatible = handle_option(v2_hello_compatible, Opts, false) }, - CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}), + CbInfo = proplists:get_value(cb_info, Opts, default_cb_info(Protocol)), SslOptions = [protocol, versions, verify, verify_fun, partial_chain, fail_if_no_peer_cert, verify_client_once, depth, cert, certfile, key, keyfile, @@ -780,13 +780,13 @@ 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) end, Opts, SslOptions), - {Sock, Emulated} = emulated_options(SockOpts), + {Sock, Emulated} = emulated_options(Protocol, SockOpts), ConnetionCb = connection_cb(Opts), {ok, #config{ssl = SSLOptions, emulated = Emulated, inet_ssl = Sock, @@ -1010,6 +1010,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) -> @@ -1103,8 +1105,13 @@ ca_cert_default(verify_peer, {Fun,_}, _) when is_function(Fun) -> %% some trusted certs. ca_cert_default(verify_peer, undefined, _) -> "". -emulated_options(Opts) -> - emulated_options(Opts, ssl_socket:internal_inet_values(), ssl_socket:default_inet_values()). +emulated_options(Protocol, Opts) -> + case Protocol of + tls -> + emulated_options(Opts, tls_socket:internal_inet_values(), tls_socket:default_inet_values()); + dtls -> + emulated_options(Opts, dtls_socket:internal_inet_values(), dtls_socket:default_inet_values()) + end. emulated_options([{mode, Value} = Opt |Opts], Inet, Emulated) -> validate_inet_option(mode, Value), @@ -1164,6 +1171,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])). @@ -1237,11 +1252,6 @@ record_cb(dtls) -> record_cb(Opts) -> record_cb(proplists:get_value(protocol, Opts, tls)). -connection_sup(tls_connection) -> - tls_connection_sup; -connection_sup(dtls_connection) -> - dtls_connection_sup. - binary_filename(FileName) -> Enc = file:native_name_encoding(), unicode:characters_to_binary(FileName, unicode, Enc). @@ -1260,20 +1270,6 @@ assert_proplist([inet6 | Rest]) -> assert_proplist([Value | _]) -> throw({option_not_a_key_value_tuple, Value}). -emulated_socket_options(InetValues, #socket_options{ - mode = Mode, - header = Header, - active = Active, - packet = Packet, - packet_size = Size}) -> - #socket_options{ - mode = proplists:get_value(mode, InetValues, Mode), - header = proplists:get_value(header, InetValues, Header), - active = proplists:get_value(active, InetValues, Active), - packet = proplists:get_value(packet, InetValues, Packet), - packet_size = proplists:get_value(packet_size, InetValues, Size) - }. - new_ssl_options([], #ssl_options{} = Opts, _) -> Opts; new_ssl_options([{verify_client_once, Value} | Rest], #ssl_options{} = Opts, RecordCB) -> @@ -1334,11 +1330,19 @@ 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 = handle_hashsigns_option(Value, - RecordCB:highest_protocol_version())}, + tls_version(RecordCB:highest_protocol_version()))}, RecordCB); new_ssl_options([{Key, Value} | _Rest], #ssl_options{}, _) -> @@ -1402,3 +1406,8 @@ default_option_role(Role, Value, Role) -> Value; default_option_role(_,_,_) -> undefined. + +default_cb_info(tls) -> + {gen_tcp, tcp, tcp_closed, tcp_error}; +default_cb_info(dtls) -> + {gen_udp, udp, udp_closed, udp_error}. diff --git a/lib/ssl/src/ssl_alert.erl b/lib/ssl/src/ssl_alert.erl index 05dfb4c1b3..7b1603df6e 100644 --- a/lib/ssl/src/ssl_alert.erl +++ b/lib/ssl/src/ssl_alert.erl @@ -32,22 +32,13 @@ -include("ssl_record.hrl"). -include("ssl_internal.hrl"). --export([encode/3, decode/1, alert_txt/1, reason_code/2]). +-export([decode/1, alert_txt/1, reason_code/2]). %%==================================================================== %% Internal application API %%==================================================================== %%-------------------------------------------------------------------- --spec encode(#alert{}, ssl_record:ssl_version(), ssl_record:connection_states()) -> - {iolist(), ssl_record:connection_states()}. -%% -%% Description: Encodes an alert -%%-------------------------------------------------------------------- -encode(#alert{} = Alert, Version, ConnectionStates) -> - ssl_record:encode_alert_record(Alert, Version, ConnectionStates). - -%%-------------------------------------------------------------------- -spec decode(binary()) -> [#alert{}] | #alert{}. %% %% Description: Decode alert(s), will return a singel own alert if peer diff --git a/lib/ssl/src/ssl_cipher.erl b/lib/ssl/src/ssl_cipher.erl index 605bbd859a..32fec03b8e 100644 --- a/lib/ssl/src/ssl_cipher.erl +++ b/lib/ssl/src/ssl_cipher.erl @@ -40,7 +40,7 @@ ec_keyed_suites/0, anonymous_suites/1, psk_suites/1, srp_suites/0, rc4_suites/1, des_suites/1, openssl_suite/1, openssl_suite_name/1, filter/2, filter_suites/1, hash_algorithm/1, sign_algorithm/1, is_acceptable_hash/2, is_fallback/1, - random_bytes/1]). + random_bytes/1, calc_aad/3, calc_mac_hash/4]). -export_type([cipher_suite/0, erl_cipher_suite/0, openssl_cipher_suite/0, @@ -311,7 +311,9 @@ aead_decipher(Type, #cipher_state{key = Key, iv = IV} = CipherState, suites({3, 0}) -> ssl_v3:suites(); suites({3, N}) -> - tls_v1:suites(N). + tls_v1:suites(N); +suites(Version) -> + suites(dtls_v1:corresponding_tls_version(Version)). all_suites(Version) -> suites(Version) @@ -1525,9 +1527,32 @@ is_fallback(CipherSuites)-> random_bytes(N) -> crypto:strong_rand_bytes(N). +calc_aad(Type, {MajVer, MinVer}, + #{sequence_number := SeqNo}) -> + <<SeqNo:64/integer, ?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer)>>. + +calc_mac_hash(Type, Version, + PlainFragment, #{sequence_number := SeqNo, + mac_secret := MacSecret, + security_parameters:= + SecPars}) -> + Length = erlang:iolist_size(PlainFragment), + mac_hash(Version, SecPars#security_parameters.mac_algorithm, + MacSecret, SeqNo, Type, + Length, PlainFragment). + %%-------------------------------------------------------------------- %%% Internal functions %%-------------------------------------------------------------------- +mac_hash({_,_}, ?NULL, _MacSecret, _SeqNo, _Type, + _Length, _Fragment) -> + <<>>; +mac_hash({3, 0}, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) -> + ssl_v3:mac_hash(MacAlg, MacSecret, SeqNo, Type, Length, Fragment); +mac_hash({3, N} = Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) + when N =:= 1; N =:= 2; N =:= 3 -> + tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version, + Length, Fragment). bulk_cipher_algorithm(null) -> ?NULL; diff --git a/lib/ssl/src/ssl_connection.erl b/lib/ssl/src/ssl_connection.erl index 08fca76123..6e7c8c5ddd 100644 --- a/lib/ssl/src/ssl_connection.erl +++ b/lib/ssl/src/ssl_connection.erl @@ -44,7 +44,7 @@ -export([send/2, recv/3, close/2, shutdown/2, new_user/2, get_opts/2, set_opts/2, session_info/1, peer_certificate/1, renegotiation/1, negotiated_protocol/1, prf/5, - connection_information/1 + connection_information/1, handle_common_event/5 ]). %% General gen_statem state functions with extra callback argument @@ -71,7 +71,8 @@ %%==================================================================== %%-------------------------------------------------------------------- -spec connect(tls_connection | dtls_connection, - host(), inet:port_number(), port(), + host(), inet:port_number(), + port() | {tuple(), port()}, %% TLS | DTLS {#ssl_options{}, #socket_options{}, %% Tracker only needed on server side undefined}, @@ -145,14 +146,24 @@ socket_control(Connection, Socket, Pid, Transport) -> -spec socket_control(tls_connection | dtls_connection, port(), pid(), atom(), pid()| undefined) -> {ok, #sslsocket{}} | {error, reason()}. %%-------------------------------------------------------------------- -socket_control(Connection, Socket, Pid, Transport, ListenTracker) -> +socket_control(Connection, Socket, Pid, Transport, udp_listner) -> + %% dtls listner process must have the socket control + {ok, dtls_socket:socket(Pid, Transport, Socket, Connection)}; + +socket_control(tls_connection = Connection, Socket, Pid, Transport, ListenTracker) -> + case Transport:controlling_process(Socket, Pid) of + ok -> + {ok, tls_socket:socket(Pid, Transport, Socket, Connection, ListenTracker)}; + {error, Reason} -> + {error, Reason} + end; +socket_control(dtls_connection = Connection, {_, Socket}, Pid, Transport, ListenTracker) -> case Transport:controlling_process(Socket, Pid) of ok -> - {ok, ssl_socket:socket(Pid, Transport, Socket, Connection, ListenTracker)}; + {ok, tls_socket:socket(Pid, Transport, Socket, Connection, ListenTracker)}; {error, Reason} -> {error, Reason} end. - %%-------------------------------------------------------------------- -spec send(pid(), iodata()) -> ok | {error, reason()}. %% @@ -461,7 +472,7 @@ certify(internal, #certificate{asn1_certificates = []}, #state{role = server, negotiated_version = Version, ssl_options = #ssl_options{verify = verify_peer, fail_if_no_peer_cert = true}} = - State, _Connection) -> + State, _) -> Alert = ?ALERT_REC(?FATAL,?HANDSHAKE_FAILURE), handle_own_alert(Alert, Version, certify, State); @@ -478,7 +489,7 @@ certify(internal, #certificate{}, #state{role = server, negotiated_version = Version, ssl_options = #ssl_options{verify = verify_none}} = - State, _Connection) -> + State, _) -> Alert = ?ALERT_REC(?FATAL,?UNEXPECTED_MESSAGE, unrequested_certificate), handle_own_alert(Alert, Version, certify, State); @@ -788,7 +799,7 @@ connection(Type, Msg, State, Connection) -> downgrade(internal, #alert{description = ?CLOSE_NOTIFY}, #state{transport_cb = Transport, socket = Socket, downgrade = {Pid, From}} = State, _) -> - ssl_socket:setopts(Transport, Socket, [{active, false}, {packet, 0}, {mode, binary}]), + tls_socket:setopts(Transport, Socket, [{active, false}, {packet, 0}, {mode, binary}]), Transport:controlling_process(Socket, Pid), gen_statem:reply(From, {ok, Socket}), {stop, normal, State}; @@ -819,7 +830,7 @@ handle_common_event(internal, {handshake, {Handshake, Raw}}, StateName, %% a client_hello, which needs to be determined by the connection callback. %% In other cases this is a noop State = handle_sni_extension(PossibleSNI, State0), - HsHist = ssl_handshake:update_handshake_history(Hs0, Raw, V2HComp), + HsHist = ssl_handshake:update_handshake_history(Hs0, iolist_to_binary(Raw), V2HComp), {next_state, StateName, State#state{tls_handshake_history = HsHist}, [{next_event, internal, Handshake}]}; handle_common_event(internal, {protocol_record, TLSorDTLSRecord}, StateName, State, Connection) -> @@ -864,13 +875,13 @@ handle_call({shutdown, How0}, From, _, #state{transport_cb = Transport, negotiated_version = Version, connection_states = ConnectionStates, - socket = Socket}, _) -> + socket = Socket}, Connection) -> case How0 of How when How == write; How == both -> Alert = ?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), {BinMsg, _} = - ssl_alert:encode(Alert, Version, ConnectionStates), - Transport:send(Socket, BinMsg); + Connection:encode_alert(Alert, Version, ConnectionStates), + Connection:send(Transport, Socket, BinMsg); _ -> ok end, @@ -1025,8 +1036,8 @@ terminate(Reason, connection, #state{negotiated_version = Version, transport_cb = Transport, socket = Socket } = State) -> handle_trusted_certs_db(State), - {BinAlert, ConnectionStates} = terminate_alert(Reason, Version, ConnectionStates0), - Transport:send(Socket, BinAlert), + {BinAlert, ConnectionStates} = terminate_alert(Reason, Version, ConnectionStates0, Connection), + Connection:send(Transport, Socket, BinAlert), Connection:close(Reason, Socket, Transport, ConnectionStates, Check); terminate(Reason, _StateName, #state{transport_cb = Transport, protocol_cb = Connection, @@ -1079,8 +1090,8 @@ write_application_data(Data0, From, Connection:renegotiate(State#state{renegotiation = {true, internal}}, [{next_event, {call, From}, {application_data, Data0}}]); false -> - {Msgs, ConnectionStates} = ssl_record:encode_data(Data, Version, ConnectionStates0), - Result = Transport:send(Socket, Msgs), + {Msgs, ConnectionStates} = Connection:encode_data(Data, Version, ConnectionStates0), + Result = Connection:send(Transport, Socket, Msgs), ssl_connection:hibernate_after(connection, State#state{connection_states = ConnectionStates}, [{reply, From, Result}]) end. @@ -1172,14 +1183,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 +1761,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{ @@ -1903,7 +1924,7 @@ get_socket_opts(Transport, Socket, [active | Tags], SockOpts, Acc) -> get_socket_opts(Transport, Socket, Tags, SockOpts, [{active, SockOpts#socket_options.active} | Acc]); get_socket_opts(Transport, Socket, [Tag | Tags], SockOpts, Acc) -> - try ssl_socket:getopts(Transport, Socket, [Tag]) of + try tls_socket:getopts(Transport, Socket, [Tag]) of {ok, [Opt]} -> get_socket_opts(Transport, Socket, Tags, SockOpts, [Opt | Acc]); {error, Error} -> @@ -1919,7 +1940,7 @@ set_socket_opts(_,_, [], SockOpts, []) -> {ok, SockOpts}; set_socket_opts(Transport, Socket, [], SockOpts, Other) -> %% Set non emulated options - try ssl_socket:setopts(Transport, Socket, Other) of + try tls_socket:setopts(Transport, Socket, Other) of ok -> {ok, SockOpts}; {error, InetError} -> @@ -1985,17 +2006,17 @@ hibernate_after(connection = StateName, hibernate_after(StateName, State, Actions) -> {next_state, StateName, State, Actions}. -terminate_alert(normal, Version, ConnectionStates) -> - ssl_alert:encode(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), +terminate_alert(normal, Version, ConnectionStates, Connection) -> + Connection:encode_alert(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), Version, ConnectionStates); -terminate_alert({Reason, _}, Version, ConnectionStates) when Reason == close; - Reason == shutdown -> - ssl_alert:encode(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), +terminate_alert({Reason, _}, Version, ConnectionStates, Connection) when Reason == close; + Reason == shutdown -> + Connection:encode_alert(?ALERT_REC(?WARNING, ?CLOSE_NOTIFY), Version, ConnectionStates); -terminate_alert(_, Version, ConnectionStates) -> - {BinAlert, _} = ssl_alert:encode(?ALERT_REC(?FATAL, ?INTERNAL_ERROR), - Version, ConnectionStates), +terminate_alert(_, Version, ConnectionStates, Connection) -> + {BinAlert, _} = Connection:encode_alert(?ALERT_REC(?FATAL, ?INTERNAL_ERROR), + Version, ConnectionStates), BinAlert. handle_trusted_certs_db(#state{ssl_options = @@ -2275,7 +2296,7 @@ format_reply(_, _,#socket_options{active = false, mode = Mode, packet = Packet, {ok, do_format_reply(Mode, Packet, Header, Data)}; format_reply(Transport, Socket, #socket_options{active = _, mode = Mode, packet = Packet, header = Header}, Data, Tracker, Connection) -> - {ssl, ssl_socket:socket(self(), Transport, Socket, Connection, Tracker), + {ssl, tls_socket:socket(self(), Transport, Socket, Connection, Tracker), do_format_reply(Mode, Packet, Header, Data)}. deliver_packet_error(Transport, Socket, SO= #socket_options{active = Active}, Data, Pid, From, Tracker, Connection) -> @@ -2284,7 +2305,7 @@ deliver_packet_error(Transport, Socket, SO= #socket_options{active = Active}, Da format_packet_error(_, _,#socket_options{active = false, mode = Mode}, Data, _, _) -> {error, {invalid_packet, do_format_reply(Mode, raw, 0, Data)}}; format_packet_error(Transport, Socket, #socket_options{active = _, mode = Mode}, Data, Tracker, Connection) -> - {ssl_error, ssl_socket:socket(self(), Transport, Socket, Connection, Tracker), + {ssl_error, tls_socket:socket(self(), Transport, Socket, Connection, Tracker), {invalid_packet, do_format_reply(Mode, raw, 0, Data)}}. do_format_reply(binary, _, N, Data) when N > 0 -> % Header mode @@ -2339,11 +2360,11 @@ alert_user(Transport, Tracker, Socket, Active, Pid, From, Alert, Role, Connectio case ssl_alert:reason_code(Alert, Role) of closed -> send_or_reply(Active, Pid, From, - {ssl_closed, ssl_socket:socket(self(), + {ssl_closed, tls_socket:socket(self(), Transport, Socket, Connection, Tracker)}); ReasonCode -> send_or_reply(Active, Pid, From, - {ssl_error, ssl_socket:socket(self(), + {ssl_error, tls_socket:socket(self(), Transport, Socket, Connection, Tracker), ReasonCode}) end. @@ -2356,12 +2377,13 @@ log_alert(false, _, _) -> handle_own_alert(Alert, Version, StateName, #state{transport_cb = Transport, socket = Socket, + protocol_cb = Connection, connection_states = ConnectionStates, ssl_options = SslOpts} = State) -> try %% Try to tell the other side {BinMsg, _} = - ssl_alert:encode(Alert, Version, ConnectionStates), - Transport:send(Socket, BinMsg) + Connection:encode_alert(Alert, Version, ConnectionStates), + Connection:send(Transport, Socket, BinMsg) catch _:_ -> %% Can crash if we are in a uninitialized state ignore end, diff --git a/lib/ssl/src/ssl_connection.hrl b/lib/ssl/src/ssl_connection.hrl index fca3e11894..2027652a7f 100644 --- a/lib/ssl/src/ssl_connection.hrl +++ b/lib/ssl/src/ssl_connection.hrl @@ -43,7 +43,7 @@ error_tag :: atom(), % ex tcp_error host :: string() | inet:ip_address(), port :: integer(), - socket :: port(), + socket :: port() | tuple(), %% TODO: dtls socket ssl_options :: #ssl_options{}, socket_options :: #socket_options{}, connection_states :: ssl_record:connection_states() | secret_printout(), @@ -81,17 +81,18 @@ allow_renegotiate = true ::boolean(), expecting_next_protocol_negotiation = false ::boolean(), expecting_finished = false ::boolean(), - negotiated_protocol = undefined :: undefined | binary(), + next_protocol = undefined :: undefined | binary(), + negotiated_protocol, tracker :: pid() | 'undefined', %% Tracker process for listen socket sni_hostname = undefined, downgrade, - flight_buffer = [] :: list() %% Buffer of TLS/DTLS records, used during the TLS handshake - %% to when possible pack more than on TLS record into the - %% underlaying packet format. Introduced by DTLS - RFC 4347. - %% The mecahnism is also usefull in TLS although we do not - %% need to worry about packet loss in TLS. + flight_buffer = [] :: list() | map(), %% Buffer of TLS/DTLS records, used during the TLS handshake + %% to when possible pack more than on TLS record into the + %% underlaying packet format. Introduced by DTLS - RFC 4347. + %% The mecahnism is also usefull in TLS although we do not + %% need to worry about packet loss in TLS. In DTLS we need to track DTLS handshake seqnr + flight_state = reliable %% reliable | {retransmit, integer()}| {waiting, ref(), integer()} - last two is used in DTLS over udp. }). - -define(DEFAULT_DIFFIE_HELLMAN_PARAMS, #'DHParameter'{prime = ?DEFAULT_DIFFIE_HELLMAN_PRIME, base = ?DEFAULT_DIFFIE_HELLMAN_GENERATOR}). diff --git a/lib/ssl/src/ssl_dist_sup.erl b/lib/ssl/src/ssl_dist_sup.erl index a6eb1be1f6..d47cd76bf5 100644 --- a/lib/ssl/src/ssl_dist_sup.erl +++ b/lib/ssl/src/ssl_dist_sup.erl @@ -85,10 +85,10 @@ proxy_server_child_spec() -> {Name, StartFunc, Restart, Shutdown, Type, Modules}. listen_options_tracker_child_spec() -> - Name = ssl_socket_dist, + Name = tls_socket_dist, StartFunc = {ssl_listen_tracker_sup, start_link_dist, []}, Restart = permanent, Shutdown = 4000, - Modules = [ssl_socket], + Modules = [tls_socket], Type = supervisor, {Name, StartFunc, Restart, Shutdown, Type, Modules}. 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..cbfcaa46a0 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() }). @@ -154,7 +156,8 @@ -record(config, {ssl, %% SSL parameters inet_user, %% User set inet options - emulated, %% Emulated option list or "inherit_tracker" pid + emulated, %% Emulated option list or "inherit_tracker" pid + udp_handler, inet_ssl, %% inet options for internal ssl socket transport_info, %% Callback info connection_cb diff --git a/lib/ssl/src/ssl_listen_tracker_sup.erl b/lib/ssl/src/ssl_listen_tracker_sup.erl index 7f685a2ead..f7e97bcb76 100644 --- a/lib/ssl/src/ssl_listen_tracker_sup.erl +++ b/lib/ssl/src/ssl_listen_tracker_sup.erl @@ -57,10 +57,10 @@ init(_O) -> MaxT = 3600, Name = undefined, % As simple_one_for_one is used. - StartFunc = {ssl_socket, start_link, []}, + StartFunc = {tls_socket, start_link, []}, Restart = temporary, % E.g. should not be restarted Shutdown = 4000, - Modules = [ssl_socket], + Modules = [tls_socket], Type = worker, ChildSpec = {Name, StartFunc, Restart, Shutdown, Type, Modules}, diff --git a/lib/ssl/src/ssl_record.erl b/lib/ssl/src/ssl_record.erl index 71cd0279f3..b10069c3cb 100644 --- a/lib/ssl/src/ssl_record.erl +++ b/lib/ssl/src/ssl_record.erl @@ -41,10 +41,6 @@ set_server_verify_data/3, empty_connection_state/2, initial_connection_state/2, record_protocol_role/1]). -%% Encoding records --export([encode_handshake/3, encode_alert_record/3, - encode_change_cipher_spec/2, encode_data/3]). - %% Compression -export([compress/3, uncompress/3, compressions/0]). @@ -52,6 +48,9 @@ -export([cipher/4, decipher/4, is_correct_mac/2, cipher_aead/4, decipher_aead/4]). +%% Encoding +-export([encode_plain_text/4]). + -export_type([ssl_version/0, ssl_atom_version/0, connection_states/0, connection_state/0]). -type ssl_version() :: {integer(), integer()}. @@ -272,70 +271,26 @@ set_pending_cipher_state(#{pending_read := Read, pending_read => Read#{cipher_state => ServerState}, pending_write => Write#{cipher_state => ClientState}}. - -%%-------------------------------------------------------------------- --spec encode_handshake(iolist(), ssl_version(), connection_states()) -> - {iolist(), connection_states()}. -%% -%% Description: Encodes a handshake message to send on the ssl-socket. -%%-------------------------------------------------------------------- -encode_handshake(Frag, Version, - #{current_write := - #{beast_mitigation := BeastMitigation, - security_parameters := - #security_parameters{bulk_cipher_algorithm = BCA}}} = - ConnectionStates) - when is_list(Frag) -> - case iolist_size(Frag) of - N when N > ?MAX_PLAIN_TEXT_LENGTH -> - Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation), - encode_iolist(?HANDSHAKE, Data, Version, ConnectionStates); - _ -> - encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates) - end; -%% TODO: this is a workarround for DTLS -%% -%% DTLS need to select the connection write state based on Epoch it wants to -%% send this fragment in. That Epoch does not nessarily has to be the same -%% as the current_write epoch. -%% The right solution might be to pass the WriteState instead of the ConnectionStates, -%% however, this will require substantion API changes. -encode_handshake(Frag, Version, ConnectionStates) -> - encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates). - -%%-------------------------------------------------------------------- --spec encode_alert_record(#alert{}, ssl_version(), connection_states()) -> - {iolist(), connection_states()}. -%% -%% Description: Encodes an alert message to send on the ssl-socket. -%%-------------------------------------------------------------------- -encode_alert_record(#alert{level = Level, description = Description}, - Version, ConnectionStates) -> - encode_plain_text(?ALERT, Version, <<?BYTE(Level), ?BYTE(Description)>>, - ConnectionStates). - -%%-------------------------------------------------------------------- --spec encode_change_cipher_spec(ssl_version(), connection_states()) -> - {iolist(), connection_states()}. -%% -%% Description: Encodes a change_cipher_spec-message to send on the ssl socket. -%%-------------------------------------------------------------------- -encode_change_cipher_spec(Version, ConnectionStates) -> - encode_plain_text(?CHANGE_CIPHER_SPEC, Version, <<1:8>>, ConnectionStates). - -%%-------------------------------------------------------------------- --spec encode_data(binary(), ssl_version(), connection_states()) -> - {iolist(), connection_states()}. -%% -%% Description: Encodes data to send on the ssl-socket. -%%-------------------------------------------------------------------- -encode_data(Frag, Version, - #{current_write := #{beast_mitigation := BeastMitigation, - security_parameters := - #security_parameters{bulk_cipher_algorithm = BCA}}} = - ConnectionStates) -> - Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation), - encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates). +encode_plain_text(Type, Version, Data, #{compression_state := CompS0, + security_parameters := + #security_parameters{ + cipher_type = ?AEAD, + compression_algorithm = CompAlg} + } = WriteState0) -> + {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), + WriteState1 = WriteState0#{compression_state => CompS1}, + AAD = ssl_cipher:calc_aad(Type, Version, WriteState1), + ssl_record:cipher_aead(Version, Comp, WriteState1, AAD); +encode_plain_text(Type, Version, Data, #{compression_state := CompS0, + security_parameters := + #security_parameters{compression_algorithm = CompAlg} + }= WriteState0) -> + {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), + WriteState1 = WriteState0#{compression_state => CompS1}, + MacHash = ssl_cipher:calc_mac_hash(Type, Version, Comp, WriteState1), + ssl_record:cipher(Version, Comp, WriteState1, MacHash); +encode_plain_text(_,_,_,CS) -> + exit({cs, CS}). uncompress(?NULL, Data, CS) -> {Data, CS}. @@ -451,11 +406,6 @@ random() -> Random_28_bytes = ssl_cipher:random_bytes(28), <<?UINT32(Secs_since_1970), Random_28_bytes/binary>>. -%% dtls_next_epoch(#connection_state{epoch = undefined}) -> %% SSL/TLS -%% undefined; -%% dtls_next_epoch(#connection_state{epoch = Epoch}) -> %% DTLS -%% Epoch + 1. - is_correct_mac(Mac, Mac) -> true; is_correct_mac(_M,_H) -> @@ -484,47 +434,3 @@ initial_security_params(ConnectionEnd) -> compression_algorithm = ?NULL}, ssl_cipher:security_parameters(?TLS_NULL_WITH_NULL_NULL, SecParams). - -encode_plain_text(Type, Version, Data, ConnectionStates) -> - RecordCB = protocol_module(Version), - RecordCB:encode_plain_text(Type, Version, Data, ConnectionStates). - -encode_iolist(Type, Data, Version, ConnectionStates0) -> - RecordCB = protocol_module(Version), - {ConnectionStates, EncodedMsg} = - lists:foldl(fun(Text, {CS0, Encoded}) -> - {Enc, CS1} = - RecordCB:encode_plain_text(Type, Version, Text, CS0), - {CS1, [Enc | Encoded]} - end, {ConnectionStates0, []}, Data), - {lists:reverse(EncodedMsg), ConnectionStates}. - -%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are -%% not vulnerable to this attack. -split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA, one_n_minus_one) when - BCA =/= ?RC4 andalso ({3, 1} == Version orelse - {3, 0} == Version) -> - do_split_bin(Rest, ChunkSize, [[FirstByte]]); -%% 0/n splitting countermeasure for clients that are incompatible with 1/n-1 -%% splitting. -split_bin(Bin, ChunkSize, Version, BCA, zero_n) when - BCA =/= ?RC4 andalso ({3, 1} == Version orelse - {3, 0} == Version) -> - do_split_bin(Bin, ChunkSize, [[<<>>]]); -split_bin(Bin, ChunkSize, _, _, _) -> - do_split_bin(Bin, ChunkSize, []). - -do_split_bin(<<>>, _, Acc) -> - lists:reverse(Acc); -do_split_bin(Bin, ChunkSize, Acc) -> - case Bin of - <<Chunk:ChunkSize/binary, Rest/binary>> -> - do_split_bin(Rest, ChunkSize, [Chunk | Acc]); - _ -> - lists:reverse(Acc, [Bin]) - end. - -protocol_module({3, _}) -> - tls_record; -protocol_module({254, _}) -> - dtls_record. diff --git a/lib/ssl/src/ssl_sup.erl b/lib/ssl/src/ssl_sup.erl index ba20f65f44..8245801139 100644 --- a/lib/ssl/src/ssl_sup.erl +++ b/lib/ssl/src/ssl_sup.erl @@ -46,14 +46,17 @@ start_link() -> init([]) -> SessionCertManager = session_and_cert_manager_child_spec(), TLSConnetionManager = tls_connection_manager_child_spec(), - %% Not supported yet - %%DTLSConnetionManager = dtls_connection_manager_child_spec(), - %% Handles emulated options so that they inherited by the accept socket, even when setopts is performed on - %% the listen socket + %% Handles emulated options so that they inherited by the accept + %% socket, even when setopts is performed on the listen socket ListenOptionsTracker = listen_options_tracker_child_spec(), + + DTLSConnetionManager = dtls_connection_manager_child_spec(), + DTLSUdpListeners = dtls_udp_listeners_spec(), + {ok, {{one_for_all, 10, 3600}, [SessionCertManager, TLSConnetionManager, - %%DTLSConnetionManager, - ListenOptionsTracker]}}. + ListenOptionsTracker, + DTLSConnetionManager, DTLSUdpListeners + ]}}. manager_opts() -> @@ -94,24 +97,32 @@ tls_connection_manager_child_spec() -> Type = supervisor, {Name, StartFunc, Restart, Shutdown, Type, Modules}. -%% dtls_connection_manager_child_spec() -> -%% Name = dtls_connection, -%% StartFunc = {dtls_connection_sup, start_link, []}, -%% Restart = permanent, -%% Shutdown = 4000, -%% Modules = [dtls_connection, ssl_connection], -%% Type = supervisor, -%% {Name, StartFunc, Restart, Shutdown, Type, Modules}. +dtls_connection_manager_child_spec() -> + Name = dtls_connection, + StartFunc = {dtls_connection_sup, start_link, []}, + Restart = permanent, + Shutdown = 4000, + Modules = [dtls_connection_sup], + Type = supervisor, + {Name, StartFunc, Restart, Shutdown, Type, Modules}. listen_options_tracker_child_spec() -> - Name = ssl_socket, + Name = tls_socket, StartFunc = {ssl_listen_tracker_sup, start_link, []}, Restart = permanent, Shutdown = 4000, - Modules = [ssl_socket], + Modules = [tls_socket], Type = supervisor, {Name, StartFunc, Restart, Shutdown, Type, Modules}. +dtls_udp_listeners_spec() -> + Name = dtls_udp_listener, + StartFunc = {dtls_udp_sup, start_link, []}, + Restart = permanent, + Shutdown = 4000, + Modules = [], + Type = supervisor, + {Name, StartFunc, Restart, Shutdown, Type, Modules}. session_cb_init_args() -> case application:get_env(ssl, session_cb_init_args) of diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl index 932bb139c1..32991d3079 100644 --- a/lib/ssl/src/tls_connection.erl +++ b/lib/ssl/src/tls_connection.erl @@ -45,6 +45,8 @@ %% Setup -export([start_fsm/8, start_link/7, init/1]). +-export([encode_data/3, encode_alert/3]). + %% State transition handling -export([next_record/1, next_event/3]). @@ -57,7 +59,7 @@ -export([send_alert/2, close/5]). %% Data handling --export([passive_receive/2, next_record_if_active/1, handle_common_event/4]). +-export([passive_receive/2, next_record_if_active/1, handle_common_event/4, send/3]). %% gen_statem state functions -export([init/3, error/3, downgrade/3, %% Initiation and take down states @@ -114,7 +116,7 @@ queue_handshake(Handshake, #state{negotiated_version = Version, send_handshake_flight(#state{socket = Socket, transport_cb = Transport, flight_buffer = Flight} = State0) -> - Transport:send(Socket, Flight), + send(Transport, Socket, Flight), State0#state{flight_buffer = []}. queue_change_cipher(Msg, #state{negotiated_version = Version, @@ -130,8 +132,8 @@ send_alert(Alert, #state{negotiated_version = Version, transport_cb = Transport, connection_states = ConnectionStates0} = State0) -> {BinMsg, ConnectionStates} = - ssl_alert:encode(Alert, Version, ConnectionStates0), - Transport:send(Socket, BinMsg), + encode_alert(Alert, Version, ConnectionStates0), + send(Transport, Socket, BinMsg), State0#state{connection_states = ConnectionStates}. reinit_handshake_data(State) -> @@ -149,6 +151,18 @@ select_sni_extension(#client_hello{extensions = HelloExtensions}) -> select_sni_extension(_) -> undefined. +encode_data(Data, Version, ConnectionStates0)-> + tls_record:encode_data(Data, Version, ConnectionStates0). + +%%-------------------------------------------------------------------- +-spec encode_alert(#alert{}, ssl_record:ssl_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +%% +%% Description: Encodes an alert +%%-------------------------------------------------------------------- +encode_alert(#alert{} = Alert, Version, ConnectionStates) -> + tls_record:encode_alert_record(Alert, Version, ConnectionStates). + %%==================================================================== %% tls_connection_sup API %%==================================================================== @@ -205,7 +219,7 @@ init({call, From}, {start, Timeout}, Handshake0 = ssl_handshake:init_handshake_history(), {BinMsg, ConnectionStates, Handshake} = encode_handshake(Hello, HelloVersion, ConnectionStates0, Handshake0, V2HComp), - Transport:send(Socket, BinMsg), + send(Transport, Socket, BinMsg), State1 = State0#state{connection_states = ConnectionStates, negotiated_version = Version, %% Requested version session = @@ -450,6 +464,9 @@ handle_common_event(internal, #ssl_tls{type = ?ALERT, fragment = EncAlerts}, Sta handle_common_event(internal, #ssl_tls{type = _Unknown}, StateName, State) -> {next_state, StateName, State}. +send(Transport, Socket, Data) -> + tls_socket:send(Transport, Socket, Data). + %%-------------------------------------------------------------------- %% gen_statem callbacks %%-------------------------------------------------------------------- @@ -476,11 +493,11 @@ encode_handshake(Handshake, Version, ConnectionStates0, Hist0, V2HComp) -> Frag = tls_handshake:encode_handshake(Handshake, Version), Hist = ssl_handshake:update_handshake_history(Hist0, Frag, V2HComp), {Encoded, ConnectionStates} = - ssl_record:encode_handshake(Frag, Version, ConnectionStates0), + tls_record:encode_handshake(Frag, Version, ConnectionStates0), {Encoded, ConnectionStates, Hist}. encode_change_cipher(#change_cipher_spec{}, Version, ConnectionStates) -> - ssl_record:encode_change_cipher_spec(Version, ConnectionStates). + tls_record:encode_change_cipher_spec(Version, ConnectionStates). decode_alerts(Bin) -> ssl_alert:decode(Bin). @@ -553,7 +570,7 @@ next_record(#state{protocol_buffers = next_record(#state{protocol_buffers = #protocol_buffers{tls_packets = [], tls_cipher_texts = []}, socket = Socket, transport_cb = Transport} = State) -> - ssl_socket:setopts(Transport, Socket, [{active,once}]), + tls_socket:setopts(Transport, Socket, [{active,once}]), {no_record, State}; next_record(State) -> {no_record, State}. @@ -622,8 +639,8 @@ renegotiate(#state{role = server, Frag = tls_handshake:encode_handshake(HelloRequest, Version), Hs0 = ssl_handshake:init_handshake_history(), {BinMsg, ConnectionStates} = - ssl_record:encode_handshake(Frag, Version, ConnectionStates0), - Transport:send(Socket, BinMsg), + tls_record:encode_handshake(Frag, Version, ConnectionStates0), + send(Transport, Socket, BinMsg), State1 = State0#state{connection_states = ConnectionStates, tls_handshake_history = Hs0}, @@ -642,7 +659,7 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State, _Actions}) -> %% User closes or recursive call! close({close, Timeout}, Socket, Transport = gen_tcp, _,_) -> - ssl_socket:setopts(Transport, Socket, [{active, false}]), + tls_socket:setopts(Transport, Socket, [{active, false}]), Transport:shutdown(Socket, write), _ = Transport:recv(Socket, 0, Timeout), ok; @@ -684,7 +701,7 @@ gen_handshake(GenConnection, StateName, Type, Event, Result catch _:_ -> - ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, + ssl_connection:handle_own_alert(?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE, malformed_handshake_data), Version, StateName, State) end. 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_record.erl b/lib/ssl/src/tls_record.erl index 5331dd1303..aa8a2aa334 100644 --- a/lib/ssl/src/tls_record.erl +++ b/lib/ssl/src/tls_record.erl @@ -34,10 +34,9 @@ %% Handling of incoming data -export([get_tls_records/2, init_connection_states/2]). -%% Decoding --export([decode_cipher_text/3]). - -%% Encoding +%% Encoding TLS records +-export([encode_handshake/3, encode_alert_record/3, + encode_change_cipher_spec/2, encode_data/3]). -export([encode_plain_text/4]). %% Protocol version handling @@ -46,6 +45,9 @@ is_higher/2, supported_protocol_versions/0, is_acceptable_version/1, is_acceptable_version/2]). +%% Decoding +-export([decode_cipher_text/3]). + -export_type([tls_version/0, tls_atom_version/0]). -type tls_version() :: ssl_record:ssl_version(). @@ -85,152 +87,61 @@ get_tls_records(Data, <<>>) -> get_tls_records(Data, Buffer) -> get_tls_records_aux(list_to_binary([Buffer, Data]), []). -get_tls_records_aux(<<?BYTE(?APPLICATION_DATA),?BYTE(MajVer),?BYTE(MinVer), - ?UINT16(Length), Data:Length/binary, Rest/binary>>, - Acc) -> - get_tls_records_aux(Rest, [#ssl_tls{type = ?APPLICATION_DATA, - version = {MajVer, MinVer}, - fragment = Data} | Acc]); -get_tls_records_aux(<<?BYTE(?HANDSHAKE),?BYTE(MajVer),?BYTE(MinVer), - ?UINT16(Length), - Data:Length/binary, Rest/binary>>, Acc) -> - get_tls_records_aux(Rest, [#ssl_tls{type = ?HANDSHAKE, - version = {MajVer, MinVer}, - fragment = Data} | Acc]); -get_tls_records_aux(<<?BYTE(?ALERT),?BYTE(MajVer),?BYTE(MinVer), - ?UINT16(Length), Data:Length/binary, - Rest/binary>>, Acc) -> - get_tls_records_aux(Rest, [#ssl_tls{type = ?ALERT, - version = {MajVer, MinVer}, - fragment = Data} | Acc]); -get_tls_records_aux(<<?BYTE(?CHANGE_CIPHER_SPEC),?BYTE(MajVer),?BYTE(MinVer), - ?UINT16(Length), Data:Length/binary, Rest/binary>>, - Acc) -> - get_tls_records_aux(Rest, [#ssl_tls{type = ?CHANGE_CIPHER_SPEC, - version = {MajVer, MinVer}, - fragment = Data} | Acc]); -%% Matches an ssl v2 client hello message. -%% The server must be able to receive such messages, from clients that -%% are willing to use ssl v3 or higher, but have ssl v2 compatibility. -get_tls_records_aux(<<1:1, Length0:15, Data0:Length0/binary, Rest/binary>>, - Acc) -> - case Data0 of - <<?BYTE(?CLIENT_HELLO), ?BYTE(MajVer), ?BYTE(MinVer), _/binary>> -> - Length = Length0-1, - <<?BYTE(_), Data1:Length/binary>> = Data0, - Data = <<?BYTE(?CLIENT_HELLO), ?UINT24(Length), Data1/binary>>, - get_tls_records_aux(Rest, [#ssl_tls{type = ?HANDSHAKE, - version = {MajVer, MinVer}, - fragment = Data} | Acc]); - _ -> - ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) - - end; - -get_tls_records_aux(<<0:1, _CT:7, ?BYTE(_MajVer), ?BYTE(_MinVer), - ?UINT16(Length), _/binary>>, - _Acc) when Length > ?MAX_CIPHER_TEXT_LENGTH -> - ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW); - -get_tls_records_aux(<<1:1, Length0:15, _/binary>>,_Acc) - when Length0 > ?MAX_CIPHER_TEXT_LENGTH -> - ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW); +%%-------------------------------------------------------------------- +-spec encode_handshake(iolist(), tls_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +% +%% Description: Encodes a handshake message to send on the ssl-socket. +%%-------------------------------------------------------------------- +encode_handshake(Frag, Version, + #{current_write := + #{beast_mitigation := BeastMitigation, + security_parameters := + #security_parameters{bulk_cipher_algorithm = BCA}}} = + ConnectionStates) -> + case iolist_size(Frag) of + N when N > ?MAX_PLAIN_TEXT_LENGTH -> + Data = split_bin(iolist_to_binary(Frag), ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation), + encode_iolist(?HANDSHAKE, Data, Version, ConnectionStates); + _ -> + encode_plain_text(?HANDSHAKE, Version, Frag, ConnectionStates) + end. -get_tls_records_aux(Data, Acc) -> - case size(Data) =< ?MAX_CIPHER_TEXT_LENGTH + ?INITIAL_BYTES of - true -> - {lists:reverse(Acc), Data}; - false -> - ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE) - end. +%%-------------------------------------------------------------------- +-spec encode_alert_record(#alert{}, tls_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +%% +%% Description: Encodes an alert message to send on the ssl-socket. +%%-------------------------------------------------------------------- +encode_alert_record(#alert{level = Level, description = Description}, + Version, ConnectionStates) -> + encode_plain_text(?ALERT, Version, <<?BYTE(Level), ?BYTE(Description)>>, + ConnectionStates). -encode_plain_text(Type, Version, Data, - #{current_write := - #{sequence_number := Seq, - compression_state := CompS0, - security_parameters := - #security_parameters{ - cipher_type = ?AEAD, - compression_algorithm = CompAlg} - }= WriteState0} = ConnectionStates) -> - {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), - WriteState1 = WriteState0#{compression_state => CompS1}, - AAD = calc_aad(Type, Version, WriteState1), - {CipherFragment, WriteState} = ssl_record:cipher_aead(Version, Comp, WriteState1, AAD), - CipherText = encode_tls_cipher_text(Type, Version, CipherFragment), - {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}}; - -encode_plain_text(Type, Version, Data, - #{current_write := - #{sequence_number := Seq, - compression_state := CompS0, - security_parameters := - #security_parameters{compression_algorithm = CompAlg} - }= WriteState0} = ConnectionStates) -> - {Comp, CompS1} = ssl_record:compress(CompAlg, Data, CompS0), - WriteState1 = WriteState0#{compression_state => CompS1}, - MacHash = calc_mac_hash(Type, Version, Comp, WriteState1), - {CipherFragment, WriteState} = ssl_record:cipher(Version, Comp, WriteState1, MacHash), - CipherText = encode_tls_cipher_text(Type, Version, CipherFragment), - {CipherText, ConnectionStates#{current_write => WriteState#{sequence_number => Seq +1}}}; -encode_plain_text(_,_,_, CS) -> - exit({cs, CS}). +%%-------------------------------------------------------------------- +-spec encode_change_cipher_spec(tls_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. +%% +%% Description: Encodes a change_cipher_spec-message to send on the ssl socket. +%%-------------------------------------------------------------------- +encode_change_cipher_spec(Version, ConnectionStates) -> + encode_plain_text(?CHANGE_CIPHER_SPEC, Version, ?byte(?CHANGE_CIPHER_SPEC_PROTO), ConnectionStates). %%-------------------------------------------------------------------- --spec decode_cipher_text(#ssl_tls{}, ssl_record:connection_states(), boolean()) -> - {#ssl_tls{}, ssl_record:connection_states()}| #alert{}. +-spec encode_data(binary(), tls_version(), ssl_record:connection_states()) -> + {iolist(), ssl_record:connection_states()}. %% -%% Description: Decode cipher text +%% Description: Encodes data to send on the ssl-socket. %%-------------------------------------------------------------------- -decode_cipher_text(#ssl_tls{type = Type, version = Version, - fragment = CipherFragment} = CipherText, - #{current_read := - #{compression_state := CompressionS0, - sequence_number := Seq, - security_parameters := - #security_parameters{ - cipher_type = ?AEAD, - compression_algorithm = CompAlg} - } = ReadState0} = ConnnectionStates0, _) -> - AAD = calc_aad(Type, Version, ReadState0), - case ssl_record:decipher_aead(Version, CipherFragment, ReadState0, AAD) of - {PlainFragment, ReadState1} -> - {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, - PlainFragment, CompressionS0), - ConnnectionStates = ConnnectionStates0#{ - current_read => ReadState1#{sequence_number => Seq + 1, - compression_state => CompressionS1}}, - {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; - #alert{} = Alert -> - Alert - end; +encode_data(Frag, Version, + #{current_write := #{beast_mitigation := BeastMitigation, + security_parameters := + #security_parameters{bulk_cipher_algorithm = BCA}}} = + ConnectionStates) -> + Data = split_bin(Frag, ?MAX_PLAIN_TEXT_LENGTH, Version, BCA, BeastMitigation), + encode_iolist(?APPLICATION_DATA, Data, Version, ConnectionStates). + -decode_cipher_text(#ssl_tls{type = Type, version = Version, - fragment = CipherFragment} = CipherText, - #{current_read := - #{compression_state := CompressionS0, - sequence_number := Seq, - security_parameters := - #security_parameters{compression_algorithm = CompAlg} - } = ReadState0} = ConnnectionStates0, PaddingCheck) -> - case ssl_record:decipher(Version, CipherFragment, ReadState0, PaddingCheck) of - {PlainFragment, Mac, ReadState1} -> - MacHash = calc_mac_hash(Type, Version, PlainFragment, ReadState1), - case ssl_record:is_correct_mac(Mac, MacHash) of - true -> - {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, - PlainFragment, CompressionS0), - ConnnectionStates = ConnnectionStates0#{ - current_read => ReadState1#{ - sequence_number => Seq + 1, - compression_state => CompressionS1}}, - {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; - false -> - ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC) - end; - #alert{} = Alert -> - Alert - end. %%-------------------------------------------------------------------- -spec protocol_version(tls_atom_version() | tls_version()) -> tls_version() | tls_atom_version(). @@ -401,6 +312,70 @@ initial_connection_state(ConnectionEnd, BeastMitigation) -> server_verify_data => undefined }. +get_tls_records_aux(<<?BYTE(?APPLICATION_DATA),?BYTE(MajVer),?BYTE(MinVer), + ?UINT16(Length), Data:Length/binary, Rest/binary>>, + Acc) -> + get_tls_records_aux(Rest, [#ssl_tls{type = ?APPLICATION_DATA, + version = {MajVer, MinVer}, + fragment = Data} | Acc]); +get_tls_records_aux(<<?BYTE(?HANDSHAKE),?BYTE(MajVer),?BYTE(MinVer), + ?UINT16(Length), + Data:Length/binary, Rest/binary>>, Acc) -> + get_tls_records_aux(Rest, [#ssl_tls{type = ?HANDSHAKE, + version = {MajVer, MinVer}, + fragment = Data} | Acc]); +get_tls_records_aux(<<?BYTE(?ALERT),?BYTE(MajVer),?BYTE(MinVer), + ?UINT16(Length), Data:Length/binary, + Rest/binary>>, Acc) -> + get_tls_records_aux(Rest, [#ssl_tls{type = ?ALERT, + version = {MajVer, MinVer}, + fragment = Data} | Acc]); +get_tls_records_aux(<<?BYTE(?CHANGE_CIPHER_SPEC),?BYTE(MajVer),?BYTE(MinVer), + ?UINT16(Length), Data:Length/binary, Rest/binary>>, + Acc) -> + get_tls_records_aux(Rest, [#ssl_tls{type = ?CHANGE_CIPHER_SPEC, + version = {MajVer, MinVer}, + fragment = Data} | Acc]); +%% Matches an ssl v2 client hello message. +%% The server must be able to receive such messages, from clients that +%% are willing to use ssl v3 or higher, but have ssl v2 compatibility. +get_tls_records_aux(<<1:1, Length0:15, Data0:Length0/binary, Rest/binary>>, + Acc) -> + case Data0 of + <<?BYTE(?CLIENT_HELLO), ?BYTE(MajVer), ?BYTE(MinVer), _/binary>> -> + Length = Length0-1, + <<?BYTE(_), Data1:Length/binary>> = Data0, + Data = <<?BYTE(?CLIENT_HELLO), ?UINT24(Length), Data1/binary>>, + get_tls_records_aux(Rest, [#ssl_tls{type = ?HANDSHAKE, + version = {MajVer, MinVer}, + fragment = Data} | Acc]); + _ -> + ?ALERT_REC(?FATAL, ?HANDSHAKE_FAILURE) + + end; + +get_tls_records_aux(<<0:1, _CT:7, ?BYTE(_MajVer), ?BYTE(_MinVer), + ?UINT16(Length), _/binary>>, + _Acc) when Length > ?MAX_CIPHER_TEXT_LENGTH -> + ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW); + +get_tls_records_aux(<<1:1, Length0:15, _/binary>>,_Acc) + when Length0 > ?MAX_CIPHER_TEXT_LENGTH -> + ?ALERT_REC(?FATAL, ?RECORD_OVERFLOW); + +get_tls_records_aux(Data, Acc) -> + case size(Data) =< ?MAX_CIPHER_TEXT_LENGTH + ?INITIAL_BYTES of + true -> + {lists:reverse(Acc), Data}; + false -> + ?ALERT_REC(?FATAL, ?UNEXPECTED_MESSAGE) + end. + +encode_plain_text(Type, Version, Data, #{current_write := Write0} = ConnectionStates) -> + {CipherFragment, Write1} = ssl_record:encode_plain_text(Type, Version, Data, Write0), + {CipherText, Write} = encode_tls_cipher_text(Type, Version, CipherFragment, Write1), + {CipherText, ConnectionStates#{current_write => Write}}. + lowest_list_protocol_version(Ver, []) -> Ver; lowest_list_protocol_version(Ver1, [Ver2 | Rest]) -> @@ -411,20 +386,10 @@ highest_list_protocol_version(Ver, []) -> highest_list_protocol_version(Ver1, [Ver2 | Rest]) -> highest_list_protocol_version(highest_protocol_version(Ver1, Ver2), Rest). -encode_tls_cipher_text(Type, {MajVer, MinVer}, Fragment) -> +encode_tls_cipher_text(Type, {MajVer, MinVer}, Fragment, #{sequence_number := Seq} = Write) -> Length = erlang:iolist_size(Fragment), - [<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Length)>>, Fragment]. - - -mac_hash({_,_}, ?NULL, _MacSecret, _SeqNo, _Type, - _Length, _Fragment) -> - <<>>; -mac_hash({3, 0}, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) -> - ssl_v3:mac_hash(MacAlg, MacSecret, SeqNo, Type, Length, Fragment); -mac_hash({3, N} = Version, MacAlg, MacSecret, SeqNo, Type, Length, Fragment) - when N =:= 1; N =:= 2; N =:= 3 -> - tls_v1:mac_hash(MacAlg, MacSecret, SeqNo, Type, Version, - Length, Fragment). + {[<<?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer), ?UINT16(Length)>>, Fragment], + Write#{sequence_number => Seq +1}}. highest_protocol_version() -> highest_protocol_version(supported_protocol_versions()). @@ -432,21 +397,96 @@ highest_protocol_version() -> lowest_protocol_version() -> lowest_protocol_version(supported_protocol_versions()). - sufficient_tlsv1_2_crypto_support() -> CryptoSupport = crypto:supports(), proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)). -calc_mac_hash(Type, Version, - PlainFragment, #{sequence_number := SeqNo, - mac_secret := MacSecret, - security_parameters:= - SecPars}) -> - Length = erlang:iolist_size(PlainFragment), - mac_hash(Version, SecPars#security_parameters.mac_algorithm, - MacSecret, SeqNo, Type, - Length, PlainFragment). - -calc_aad(Type, {MajVer, MinVer}, - #{sequence_number := SeqNo}) -> - <<SeqNo:64/integer, ?BYTE(Type), ?BYTE(MajVer), ?BYTE(MinVer)>>. +encode_iolist(Type, Data, Version, ConnectionStates0) -> + {ConnectionStates, EncodedMsg} = + lists:foldl(fun(Text, {CS0, Encoded}) -> + {Enc, CS1} = + encode_plain_text(Type, Version, Text, CS0), + {CS1, [Enc | Encoded]} + end, {ConnectionStates0, []}, Data), + {lists:reverse(EncodedMsg), ConnectionStates}. + +%% 1/n-1 splitting countermeasure Rizzo/Duong-Beast, RC4 chiphers are +%% not vulnerable to this attack. +split_bin(<<FirstByte:8, Rest/binary>>, ChunkSize, Version, BCA, one_n_minus_one) when + BCA =/= ?RC4 andalso ({3, 1} == Version orelse + {3, 0} == Version) -> + do_split_bin(Rest, ChunkSize, [[FirstByte]]); +%% 0/n splitting countermeasure for clients that are incompatible with 1/n-1 +%% splitting. +split_bin(Bin, ChunkSize, Version, BCA, zero_n) when + BCA =/= ?RC4 andalso ({3, 1} == Version orelse + {3, 0} == Version) -> + do_split_bin(Bin, ChunkSize, [[<<>>]]); +split_bin(Bin, ChunkSize, _, _, _) -> + do_split_bin(Bin, ChunkSize, []). + +do_split_bin(<<>>, _, Acc) -> + lists:reverse(Acc); +do_split_bin(Bin, ChunkSize, Acc) -> + case Bin of + <<Chunk:ChunkSize/binary, Rest/binary>> -> + do_split_bin(Rest, ChunkSize, [Chunk | Acc]); + _ -> + lists:reverse(Acc, [Bin]) + end. + +%%-------------------------------------------------------------------- +-spec decode_cipher_text(#ssl_tls{}, ssl_record:connection_states(), boolean()) -> + {#ssl_tls{}, ssl_record:connection_states()}| #alert{}. +%% +%% Description: Decode cipher text +%%-------------------------------------------------------------------- +decode_cipher_text(#ssl_tls{type = Type, version = Version, + fragment = CipherFragment} = CipherText, + #{current_read := + #{compression_state := CompressionS0, + sequence_number := Seq, + security_parameters := + #security_parameters{ + cipher_type = ?AEAD, + compression_algorithm = CompAlg} + } = ReadState0} = ConnnectionStates0, _) -> + AAD = ssl_cipher:calc_aad(Type, Version, ReadState0), + case ssl_record:decipher_aead(Version, CipherFragment, ReadState0, AAD) of + {PlainFragment, ReadState1} -> + {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, + PlainFragment, CompressionS0), + ConnnectionStates = ConnnectionStates0#{ + current_read => ReadState1#{sequence_number => Seq + 1, + compression_state => CompressionS1}}, + {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; + #alert{} = Alert -> + Alert + end; + +decode_cipher_text(#ssl_tls{type = Type, version = Version, + fragment = CipherFragment} = CipherText, + #{current_read := + #{compression_state := CompressionS0, + sequence_number := Seq, + security_parameters := + #security_parameters{compression_algorithm = CompAlg} + } = ReadState0} = ConnnectionStates0, PaddingCheck) -> + case ssl_record:decipher(Version, CipherFragment, ReadState0, PaddingCheck) of + {PlainFragment, Mac, ReadState1} -> + MacHash = ssl_cipher:calc_mac_hash(Type, Version, PlainFragment, ReadState1), + case ssl_record:is_correct_mac(Mac, MacHash) of + true -> + {Plain, CompressionS1} = ssl_record:uncompress(CompAlg, + PlainFragment, CompressionS0), + ConnnectionStates = ConnnectionStates0#{ + current_read => ReadState1#{ + sequence_number => Seq + 1, + compression_state => CompressionS1}}, + {CipherText#ssl_tls{fragment = Plain}, ConnnectionStates}; + false -> + ?ALERT_REC(?FATAL, ?BAD_RECORD_MAC) + end; + #alert{} = Alert -> + Alert + end. diff --git a/lib/ssl/src/ssl_socket.erl b/lib/ssl/src/tls_socket.erl index b2aea2ba9c..e76d9c100a 100644 --- a/lib/ssl/src/ssl_socket.erl +++ b/lib/ssl/src/tls_socket.erl @@ -17,16 +17,19 @@ %% %% %CopyrightEnd% %% --module(ssl_socket). +-module(tls_socket). -behaviour(gen_server). -include("ssl_internal.hrl"). -include("ssl_api.hrl"). --export([socket/5, setopts/3, getopts/3, getstat/3, peername/2, sockname/2, port/2]). +-export([send/3, listen/3, accept/3, socket/5, connect/4, upgrade/3, + setopts/3, getopts/3, getstat/3, peername/2, sockname/2, port/2]). +-export([split_options/1, get_socket_opts/3]). -export([emulated_options/0, internal_inet_values/0, default_inet_values/0, - init/1, start_link/3, terminate/2, inherit_tracker/3, get_emulated_opts/1, + init/1, start_link/3, terminate/2, inherit_tracker/3, + emulated_socket_options/2, get_emulated_opts/1, set_emulated_opts/2, get_all_opts/1, handle_call/3, handle_cast/2, handle_info/2, code_change/3]). @@ -39,6 +42,76 @@ %%-------------------------------------------------------------------- %%% Internal API %%-------------------------------------------------------------------- +send(Transport, Socket, Data) -> + Transport:send(Socket, Data). + +listen(Transport, Port, #config{transport_info = {Transport, _, _, _}, + inet_user = Options, + ssl = SslOpts, emulated = EmOpts} = Config) -> + case Transport:listen(Port, Options ++ internal_inet_values()) of + {ok, ListenSocket} -> + {ok, Tracker} = inherit_tracker(ListenSocket, EmOpts, SslOpts), + {ok, #sslsocket{pid = {ListenSocket, Config#config{emulated = Tracker}}}}; + Err = {error, _} -> + Err + end. + +accept(ListenSocket, #config{transport_info = {Transport,_,_,_} = CbInfo, + connection_cb = ConnectionCb, + ssl = SslOpts, + emulated = Tracker}, Timeout) -> + case Transport:accept(ListenSocket, Timeout) of + {ok, Socket} -> + {ok, EmOpts} = get_emulated_opts(Tracker), + {ok, Port} = tls_socket:port(Transport, Socket), + ConnArgs = [server, "localhost", Port, Socket, + {SslOpts, emulated_socket_options(EmOpts, #socket_options{}), Tracker}, self(), CbInfo], + case tls_connection_sup:start_child(ConnArgs) of + {ok, Pid} -> + ssl_connection:socket_control(ConnectionCb, Socket, Pid, Transport, Tracker); + {error, Reason} -> + {error, Reason} + end; + {error, Reason} -> + {error, Reason} + end. + +upgrade(Socket, #config{transport_info = {Transport,_,_,_}= CbInfo, + ssl = SslOptions, + emulated = EmOpts, connection_cb = ConnectionCb}, Timeout) -> + ok = setopts(Transport, Socket, tls_socket:internal_inet_values()), + case peername(Transport, Socket) of + {ok, {Address, Port}} -> + ssl_connection:connect(ConnectionCb, Address, Port, Socket, + {SslOptions, + emulated_socket_options(EmOpts, #socket_options{}), undefined}, + self(), CbInfo, Timeout); + {error, Error} -> + {error, Error} + end. + +connect(Address, Port, + #config{transport_info = CbInfo, inet_user = UserOpts, ssl = SslOpts, + emulated = EmOpts, inet_ssl = SocketOpts, connection_cb = ConnetionCb}, + Timeout) -> + {Transport, _, _, _} = CbInfo, + try Transport:connect(Address, Port, SocketOpts, Timeout) of + {ok, Socket} -> + ssl_connection:connect(ConnetionCb, Address, Port, Socket, + {SslOpts, + emulated_socket_options(EmOpts, #socket_options{}), undefined}, + self(), CbInfo, Timeout); + {error, Reason} -> + {error, Reason} + catch + exit:{function_clause, _} -> + {error, {options, {cb_info, CbInfo}}}; + exit:badarg -> + {error, {options, {socket_options, UserOpts}}}; + exit:{badarg, _} -> + {error, {options, {socket_options, UserOpts}}} + end. + socket(Pid, Transport, Socket, ConnectionCb, Tracker) -> #sslsocket{pid = Pid, %% "The name "fd" is keept for backwards compatibility @@ -241,3 +314,17 @@ get_emulated_opts(TrackerPid, EmOptNames) -> lists:map(fun(Name) -> {value, Value} = lists:keysearch(Name, 1, EmOpts), Value end, EmOptNames). + +emulated_socket_options(InetValues, #socket_options{ + mode = Mode, + header = Header, + active = Active, + packet = Packet, + packet_size = Size}) -> + #socket_options{ + mode = proplists:get_value(mode, InetValues, Mode), + header = proplists:get_value(header, InetValues, Header), + active = proplists:get_value(active, InetValues, Active), + packet = proplists:get_value(packet, InetValues, Packet), + packet_size = proplists:get_value(packet_size, InetValues, Size) + }. 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..f779765b18 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,8 +387,35 @@ basic_test(ClientCert, ClientKey, ClientCA, ServerCert, ServerKey, ServerCA, Con check_result(Server, SType, Client, CType), close(Server, Client). -start_client(openssl, Port, PeerCA, OwnCa, Cert, Key, _Config) -> - CA = new_openssl_ca("openssl_client_ca", PeerCA, OwnCa), + +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) -> + PrivDir = proplists:get_value(priv_dir, Config), + CA = new_openssl_ca(filename:join(PrivDir, "openssl_client_ca.pem"), PeerCA, OwnCa), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), Exe = "openssl", Args = ["s_client", "-verify", "2", "-port", integer_to_list(Port), @@ -257,7 +427,8 @@ start_client(openssl, Port, PeerCA, OwnCa, Cert, Key, _Config) -> true = port_command(OpenSslPort, "Hello world"), OpenSslPort; start_client(erlang, Port, PeerCA, OwnCa, Cert, Key, Config) -> - CA = new_ca("erlang_client_ca", PeerCA, OwnCa), + PrivDir = proplists:get_value(priv_dir, Config), + CA = new_ca(filename:join(PrivDir,"erlang_client_ca.pem"), PeerCA, OwnCa), {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config), ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -267,8 +438,36 @@ start_client(erlang, Port, PeerCA, OwnCa, Cert, Key, Config) -> {cacertfile, CA}, {certfile, Cert}, {keyfile, Key}]}]). -start_server(openssl, PeerCA, OwnCa, Cert, Key, _Config) -> - CA = new_openssl_ca("openssl_server_ca", PeerCA, OwnCa), + +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) -> + PrivDir = proplists:get_value(priv_dir, Config), + CA = new_openssl_ca(filename:join(PrivDir,"openssl_server_ca.pem"), PeerCA, OwnCa), Port = ssl_test_lib:inet_port(node()), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), Exe = "openssl", @@ -279,7 +478,8 @@ start_server(openssl, PeerCA, OwnCa, Cert, Key, _Config) -> true = port_command(OpenSslPort, "Hello world"), {OpenSslPort, Port}; start_server(erlang, PeerCA, OwnCa, Cert, Key, Config) -> - CA = new_ca("erlang_server_ca", PeerCA, OwnCa), + PrivDir = proplists:get_value(priv_dir, Config), + CA = new_ca(filename:join(PrivDir,"erlang_server_ca.pem"), PeerCA, OwnCa), {_, ServerNode, _} = ssl_test_lib:run_where(Config), Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, {from, self()}, @@ -290,17 +490,42 @@ 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), + PrivDir = proplists:get_value(priv_dir, Config), + CA = new_ca(filename:join(PrivDir, "erlang_server_ca.pem"), PeerCA, OwnCa), {_, ServerNode, _} = ssl_test_lib:run_where(Config), Server = ssl_test_lib:start_server([{node, ServerNode}, {port, 0}, - {from, self()}, - {mfa, {ssl_test_lib, - send_recv_result_active, - []}}, - {options, - [{verify, verify_peer}, {cacertfile, CA}, - {certfile, Cert}, {key, Key}]}]), + {from, self()}, + {mfa, {ssl_test_lib, + send_recv_result_active, + []}}, + {options, + [{verify, verify_peer}, {cacertfile, CA}, + {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) -> @@ -350,15 +575,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..52c1af5b4c 100644 --- a/lib/ssl/test/ssl_basic_SUITE.erl +++ b/lib/ssl/test/ssl_basic_SUITE.erl @@ -52,7 +52,7 @@ all() -> {group, options}, {group, options_tls}, {group, session}, - %%{group, 'dtlsv1.2'}, + {group, 'dtlsv1.2'}, %%{group, 'dtlsv1'}, {group, 'tlsv1.2'}, {group, 'tlsv1.1'}, @@ -66,6 +66,7 @@ groups() -> {options, [], options_tests()}, {options_tls, [], options_tests_tls()}, %%{'dtlsv1.2', [], all_versions_groups()}, + {'dtlsv1.2', [], [connection_information]}, %%{'dtlsv1', [], all_versions_groups()}, {'tlsv1.2', [], all_versions_groups() ++ tls_versions_groups() ++ [conf_signature_algs, no_common_signature_algs]}, {'tlsv1.1', [], all_versions_groups() ++ tls_versions_groups()}, @@ -150,6 +151,7 @@ api_tests() -> peercert_with_client_cert, sockname, versions, + eccs, controlling_process, getstat, close_with_timeout, @@ -456,6 +458,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 +1515,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 +2194,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 +2335,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 +2353,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 +3664,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 +3675,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 +3686,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 +4440,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 +4731,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/ssl/vsn.mk b/lib/ssl/vsn.mk index 59732c7926..2cdb825d75 100644 --- a/lib/ssl/vsn.mk +++ b/lib/ssl/vsn.mk @@ -1 +1 @@ -SSL_VSN = 8.0.3 +SSL_VSN = 8.1 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/erl_parse.yrl b/lib/stdlib/src/erl_parse.yrl index 85b2816451..4f38256e6b 100644 --- a/lib/stdlib/src/erl_parse.yrl +++ b/lib/stdlib/src/erl_parse.yrl @@ -612,11 +612,11 @@ Erlang code. | af_bin(abstract_expr()) | af_binary_op(abstract_expr()) | af_unary_op(abstract_expr()) - | af_record_access(abstract_expr()) + | af_record_creation(abstract_expr()) | af_record_update(abstract_expr()) | af_record_index() | af_record_field_access(abstract_expr()) - | af_map_access(abstract_expr()) + | af_map_creation(abstract_expr()) | af_map_update(abstract_expr()) | af_catch() | af_local_call() @@ -720,26 +720,25 @@ Erlang code. | af_bin(af_guard_test()) | af_binary_op(af_guard_test()) | af_unary_op(af_guard_test()) - | af_record_access(af_guard_test()) + | af_record_creation(af_guard_test()) | af_record_index() | af_record_field_access(af_guard_test()) - | af_map_access(abstract_expr()) % FIXME - | af_map_update(abstract_expr()) % FIXME + | af_map_creation(abstract_expr()) + | af_map_update(abstract_expr()) | af_guard_call() | af_remote_guard_call(). -type af_record_field_access(T) :: {'record_field', anno(), T, record_name(), af_field_name()}. --type af_map_access(T) :: {'map', anno(), [af_map_field(T)]}. - --type af_map_update(T) :: {'map', anno(), T, [af_map_field(T)]}. +-type af_map_creation(T) :: {'map', anno(), [af_assoc(T)]}. --type af_map_field(T) :: af_map_field_assoc(T) | af_map_field_exact(T). +-type af_map_update(T) :: {'map', anno(), T, [af_assoc(T)]}. --type af_map_field_assoc(T) :: {'map_field_assoc', anno(), T, T}. +-type af_assoc(T) :: {'map_field_assoc', anno(), T, T} + | af_assoc_exact(T). --type af_map_field_exact(T) :: {'map_field_exact', anno(), T, T}. +-type af_assoc_exact(T) :: {'map_field_exact', anno(), T, T}. -type af_guard_call() :: {'call', anno(), function_name(), [af_guard_test()]}. @@ -757,20 +756,20 @@ Erlang code. | af_bin(af_pattern()) | af_binary_op(af_pattern()) | af_unary_op(af_pattern()) - | af_record_access(af_pattern()) + | af_record_creation(af_pattern()) | af_record_index() | af_map_pattern(). -type af_record_index() :: {'record_index', anno(), record_name(), af_field_name()}. --type af_record_access(T) :: +-type af_record_creation(T) :: {'record', anno(), record_name(), [af_record_field(T)]}. -type af_record_field(T) :: {'record_field', anno(), af_field_name(), T}. -type af_map_pattern() :: - {'map', anno(), [af_map_field_exact(abstract_expr)]}. % FIXME? + {'map', anno(), [af_assoc_exact(abstract_expr)]}. -type abstract_type() :: af_annotated_type() | af_atom() @@ -807,9 +806,9 @@ Erlang code. {'type', anno(), 'range', [af_singleton_integer_type()]}. -type af_map_type() :: {'type', anno(), 'map', 'any'} - | {'type', anno(), 'map', [af_map_pair_type()]}. + | {'type', anno(), 'map', [af_assoc_type()]}. --type af_map_pair_type() :: +-type af_assoc_type() :: {'type', anno(), 'map_field_assoc', [abstract_type()]} | {'type', anno(), 'map_field_exact', [abstract_type()]}. 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/stdlib/test/tar_SUITE.erl b/lib/stdlib/test/tar_SUITE.erl index 64dd41e75a..6f3979bb77 100644 --- a/lib/stdlib/test/tar_SUITE.erl +++ b/lib/stdlib/test/tar_SUITE.erl @@ -720,20 +720,25 @@ memory(Config) when is_list(Config) -> %% Test filenames with characters outside the US ASCII range. unicode(Config) when is_list(Config) -> - PrivDir = proplists:get_value(priv_dir, Config), - do_unicode(PrivDir), + run_unicode_node(Config, "+fnu"), case has_transparent_naming() of true -> - Pa = filename:dirname(code:which(?MODULE)), - Node = start_node(unicode, "+fnl -pa "++Pa), - ok = rpc:call(Node, erlang, apply, - [fun() -> do_unicode(PrivDir) end,[]]), - true = test_server:stop_node(Node), - ok; + run_unicode_node(Config, "+fnl"); false -> ok end. +run_unicode_node(Config, Option) -> + PrivDir = proplists:get_value(priv_dir, Config), + Pa = filename:dirname(code:which(?MODULE)), + Args = Option ++ " -pa "++Pa, + io:format("~s\n", [Args]), + Node = start_node(unicode, Args), + ok = rpc:call(Node, erlang, apply, + [fun() -> do_unicode(PrivDir) end,[]]), + true = test_server:stop_node(Node), + ok. + has_transparent_naming() -> case os:type() of {unix,darwin} -> false; @@ -745,10 +750,11 @@ do_unicode(PrivDir) -> ok = file:set_cwd(PrivDir), ok = file:make_dir("unicöde"), - Names = unicode_create_files(), + Names = lists:sort(unicode_create_files()), Tar = "unicöde.tar", ok = erl_tar:create(Tar, ["unicöde"], []), - {ok,Names} = erl_tar:table(Tar, []), + {ok,Names0} = erl_tar:table(Tar, []), + Names = lists:sort(Names0), _ = [ok = file:delete(Name) || Name <- Names], ok = erl_tar:extract(Tar), _ = [{ok,_} = file:read_file(Name) || Name <- Names], diff --git a/lib/syntax_tools/src/epp_dodger.erl b/lib/syntax_tools/src/epp_dodger.erl index 39c522fd11..43e42d8195 100644 --- a/lib/syntax_tools/src/epp_dodger.erl +++ b/lib/syntax_tools/src/epp_dodger.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2001-2006 Richard Carlsson diff --git a/lib/syntax_tools/src/erl_comment_scan.erl b/lib/syntax_tools/src/erl_comment_scan.erl index b5ac564146..8d0e2a10a3 100644 --- a/lib/syntax_tools/src/erl_comment_scan.erl +++ b/lib/syntax_tools/src/erl_comment_scan.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% ===================================================================== diff --git a/lib/syntax_tools/src/erl_prettypr.erl b/lib/syntax_tools/src/erl_prettypr.erl index df0d78031c..6c812aaa6c 100644 --- a/lib/syntax_tools/src/erl_prettypr.erl +++ b/lib/syntax_tools/src/erl_prettypr.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1997-2006 Richard Carlsson diff --git a/lib/syntax_tools/src/erl_recomment.erl b/lib/syntax_tools/src/erl_recomment.erl index 1d23034991..a774b898e8 100644 --- a/lib/syntax_tools/src/erl_recomment.erl +++ b/lib/syntax_tools/src/erl_recomment.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1997-2006 Richard Carlsson diff --git a/lib/syntax_tools/src/erl_syntax.erl b/lib/syntax_tools/src/erl_syntax.erl index ee42e56172..b856a5d1dd 100644 --- a/lib/syntax_tools/src/erl_syntax.erl +++ b/lib/syntax_tools/src/erl_syntax.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1997-2006 Richard Carlsson diff --git a/lib/syntax_tools/src/erl_syntax_lib.erl b/lib/syntax_tools/src/erl_syntax_lib.erl index 5aecf5d774..aae6755639 100644 --- a/lib/syntax_tools/src/erl_syntax_lib.erl +++ b/lib/syntax_tools/src/erl_syntax_lib.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1997-2006 Richard Carlsson diff --git a/lib/syntax_tools/src/erl_tidy.erl b/lib/syntax_tools/src/erl_tidy.erl index 9e273dfb84..2e0ee209f8 100644 --- a/lib/syntax_tools/src/erl_tidy.erl +++ b/lib/syntax_tools/src/erl_tidy.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1999-2014 Richard Carlsson diff --git a/lib/syntax_tools/src/igor.erl b/lib/syntax_tools/src/igor.erl index 943250e5cd..4d18f7abcf 100644 --- a/lib/syntax_tools/src/igor.erl +++ b/lib/syntax_tools/src/igor.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 1998-2014 Richard Carlsson diff --git a/lib/syntax_tools/src/prettypr.erl b/lib/syntax_tools/src/prettypr.erl index 1b5ba6b05a..5156af667b 100644 --- a/lib/syntax_tools/src/prettypr.erl +++ b/lib/syntax_tools/src/prettypr.erl @@ -11,7 +11,7 @@ %% %% You should have received a copy of the GNU Lesser General Public %% License along with this library; if not, write to the Free Software -%% Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +%% Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 %% USA %% %% @copyright 2000-2006 Richard Carlsson 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-edoc.el b/lib/tools/emacs/erlang-edoc.el index 034036ad04..2801aa8ae7 100644 --- a/lib/tools/emacs/erlang-edoc.el +++ b/lib/tools/emacs/erlang-edoc.el @@ -78,7 +78,7 @@ '(("^%+\\s-*\\(@\\w+\\)\\_>" 1 'erlang-edoc-tag prepend) ("^%+\\s-*" ("{\\(@\\w+\\)\\_>" nil nil (1 'erlang-edoc-macro prepend))) ("^%+\\s-*" ("\\(?:@@\\)*\\(@[@{}]\\)" nil nil (1 'escape-glyph prepend))) - ("^%+\\s-*@\\(deprecated\\)\\_>" 1 font-lock-warning-face prepend) + ("^%+\\s-*\\(@deprecated\\)\\_>" 1 font-lock-warning-face prepend) ;; http://www.erlang.org/doc/apps/edoc/chapter.html#Wiki_notation ("^%+\\s-*" ("[^`]`\\([^`]?\\|[^`].*?[^']\\)'" (forward-char -1) nil (1 'erlang-edoc-verbatim prepend))) 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..39c6065ce4 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)))) @@ -479,6 +479,11 @@ To activate the workaround, place the following in your `~/.emacs' file: "*Indentation of Erlang calls/clauses within blocks.") (put 'erlang-indent-level 'safe-local-variable 'integerp) +(defvar erlang-icr-indent nil + "*Indentation of Erlang if/case/receive/ patterns. `nil' means + keeping default behavior. When non-nil, indent to th column of + if/case/receive.") + (defvar erlang-indent-guard 2 "*Indentation of Erlang guards.") (put 'erlang-indent-guard 'safe-local-variable 'integerp) @@ -562,35 +567,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 +614,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 +639,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 +662,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 +685,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 +731,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 +851,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 +1006,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 +1019,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 +1073,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 +1095,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 +1107,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 +1122,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 +1140,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 +1160,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 +1180,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 +1211,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 +1221,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 +1245,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 +1278,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 +1342,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 +1360,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 +1398,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 +1445,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 +1462,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 +1500,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 +1564,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 +1575,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 +1600,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 +1618,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 +1665,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 +1767,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 +1825,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 +1857,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 +1880,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 +1921,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 +1962,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 +1979,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 +1993,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 +2028,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 +2062,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 +2079,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 +2127,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 +2193,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 +2208,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 +2232,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 +2293,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 +2362,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 +2376,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 +2407,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 +2431,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 +2469,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 +2487,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 +2541,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 +2550,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 +2565,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 +2584,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 +2612,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 +2864,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 +2917,160 @@ 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)))))) - ) - ((and (eq (car stack-top) '||) (looking-at "\\(]\\|>>\\)[^_a-zA-Z0-9]")) - (nth 2 (car (cdr stack)))) + (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 (and erlang-icr-indent + (looking-at "\\(if\\|case\\|receive\\)[^_a-zA-Z0-9]")) + (+ (nth 2 stack-top) erlang-icr-indent) + (if (looking-at "\\(case\\|receive\\)[^_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)))) ;; 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 (+ erlang-indent-level (if (not erlang-icr-indent) + erlang-indent-level + erlang-icr-indent))))) + (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 +3080,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 +3113,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 +3166,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 +3192,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 +3227,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 +3284,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 +3307,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 +3335,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 +3377,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 +3397,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 +3412,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 +3478,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 +3503,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 +3531,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 +3562,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 +3583,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 +3618,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 +3636,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 +3671,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 +3685,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 +3695,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 +3733,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 +3758,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 +3799,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 +3811,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 +3883,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 +3932,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 +3946,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 +3975,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 +3988,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 +4003,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 +4055,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 +4074,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 +4100,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 +4130,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 +4178,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 +4196,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 +4214,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 +4223,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 +4235,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 +4261,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 +4290,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 +4315,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 +4368,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 +4397,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 +4414,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 +4437,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 +4469,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 +4484,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 +4496,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 +4517,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 +4605,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 +4643,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 +4667,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 +4711,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 +4726,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 +4739,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 +4775,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 +4824,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 +4859,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 +4871,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 +4987,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 +5229,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 +5260,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 +5278,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 +5352,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 +5380,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 +5421,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 +5453,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 +5462,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 +5485,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 +5507,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 +5523,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 +5546,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 +5564,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 +5595,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 +5620,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 +5632,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 +5767,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 +5797,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 +5849,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 +5898,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 +5917,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 +5932,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 +5950,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 b/lib/wx/api_gen/gl_gen.erl index 54635bdd2e..7e3766a43b 100644 --- a/lib/wx/api_gen/gl_gen.erl +++ b/lib/wx/api_gen/gl_gen.erl @@ -354,6 +354,7 @@ handle_arg_opt({single,Opt},P=#arg{type=T}) -> P#arg{type=T#type{single=Opt}}; handle_arg_opt({base,{Opt, Sz}}, P=#arg{type=T}) -> P#arg{type=T#type{base=Opt, size=Sz}}; handle_arg_opt({base,Opt}, P=#arg{type=T}) -> P#arg{type=T#type{base=Opt}}; handle_arg_opt({c_only,Opt},P) -> P#arg{where=c, alt=Opt}; +handle_arg_opt(list_binary, P) -> P#arg{alt=list_binary}; handle_arg_opt(string, P=#arg{type=T}) -> P#arg{type=T#type{base=string}}; handle_arg_opt({string,Max,Sz}, P=#arg{type=T}) -> P#arg{type=T#type{base=string, size={Max,Sz}}}. @@ -588,7 +589,7 @@ lookup(Name,[_|R],Def) -> lookup(Name,R,Def); lookup(_,[], Def) -> Def. -setup_idx_binary(Name,Ext,_Opts) -> +setup_idx_binary(Name,Ext, Opts) -> FuncName = Name ++ Ext, Func = #func{params=Args} = get(FuncName), Id = next_id(function), @@ -607,8 +608,7 @@ setup_idx_binary(Name,Ext,_Opts) -> ok; (_) -> ok end, Args), - - case setup_idx_binary(Args, []) of + case setup_idx_binary_1(Args, []) of ignore -> put(FuncName, Func#func{id=Id}), Name++Ext; @@ -624,30 +624,41 @@ setup_idx_binary(Name,Ext,_Opts) -> [FuncName,Extra] end. -setup_idx_binary([A=#arg{in=true,type=T=#type{base=idx_binary}}|R], Acc) -> +setup_idx_binary_1([A=#arg{in=true,type=T=#type{base=idx_binary}}|R], Acc) -> A1 = A#arg{type=T#type{base=guard_int,size=4}}, A2 = A#arg{type=T#type{base=binary}}, Head = reverse(Acc), - case setup_idx_binary(R, []) of + case setup_idx_binary_1(R, []) of ignore -> {bin, Head ++ [A1|R], Head ++ [A2|R]}; {bin, R1,R2} -> {bin, Head ++ [A1|R1], Head ++ [A2|R2]} end; -setup_idx_binary([A=#arg{in=true,type=T=#type{single={tuple,matrix}}}|R], Acc) -> +setup_idx_binary_1([A=#arg{in=true,type=T=#type{base=int,size=4},alt=list_binary}|R], Acc) -> + A1 = A#arg{type=T#type{base=guard_int}}, + A2 = A#arg{type=T#type{base=binary}}, + Head = reverse(Acc), + case setup_idx_binary_1(R, []) of + ignore -> + {bin, Head ++ [A1|R], Head ++ [A2|R]}; + {bin, R1,R2} -> + {bin, Head ++ [A1|R1], Head ++ [A2|R2]} + end; + +setup_idx_binary_1([A=#arg{in=true,type=T=#type{single={tuple,matrix}}}|R], Acc) -> A1 = A#arg{type=T#type{single={tuple, matrix12}}}, A2 = A#arg{type=T#type{single={tuple, 16}}}, Head = reverse(Acc), - case setup_idx_binary(R, []) of + case setup_idx_binary_1(R, []) of ignore -> {matrix, Head ++ [A1|R], Head ++ [A2|R]}; {matrix, R1,R2} -> {matrix, Head ++ [A1|R1], Head ++ [A2|R2]} end; -setup_idx_binary([H|R],Acc) -> - setup_idx_binary(R,[H|Acc]); -setup_idx_binary([],_) -> ignore. - +setup_idx_binary_1([H|R],Acc) -> + setup_idx_binary_1(R,[H|Acc]); +setup_idx_binary_1([],_) -> ignore. + is_equal(F1=#func{type=T1,params=A1},F2=#func{type=T2,params=A2}) -> Equal = is_equal_type(T1,T2) andalso is_equal_args(A1,A2), case Equal of diff --git a/lib/wx/api_gen/gl_gen_c.erl b/lib/wx/api_gen/gl_gen_c.erl index c6d4f3a520..53c194a315 100644 --- a/lib/wx/api_gen/gl_gen_c.erl +++ b/lib/wx/api_gen/gl_gen_c.erl @@ -123,20 +123,14 @@ declare_var(A=#arg{name=N,in=false,type=#type{name=T,base=B,single={list,Sz}}}) when is_number(Sz) -> w(" ~s ~s[~p] = {~s};~n", [T,N,Sz,args(fun zero/1,",",lists:duplicate(Sz,B))]), A; -declare_var(A=#arg{name=N,in=false,type=#type{name=T,base=string,size={Max,_}, single=Single}}) -> +declare_var(A=#arg{name=N,in=false,type=#type{name=T,base=string,size={Max,_}}}) -> case is_integer(Max) of - true -> + true -> w(" ~s ~s[~p];~n", [T,N,Max]); false -> - %% w(" ~s ~s[*~s];~n", [T,N,Max]), - w(" ~s *~s;~n", [T,N]), + w(" ~s *~s;~n", [T,N]), w(" ~s = (~s *) driver_alloc(sizeof(~s) * *~s);~n", [N,T,T,Max]), - store_free(N) - %% case Single of - %% {list, _, _} -> - %% w(" ~s *~s_p = ~s;~n", [T,N,N]); - %% _ -> ok - %% end + store_free(N) end, A; declare_var(A=#arg{name=N,in=false,type=#type{base=binary,size={MaxSz, _}}}) -> @@ -163,9 +157,9 @@ declare_var(A=#arg{name=N,in=false, type=#type{name=T,base=B,by_val=false,single=true}}) -> w(" ~s ~s[1] = {~s};~n", [T,N,zero(B)]), A; -declare_var(A=#arg{where=c, type=#type{name=T}, alt={size,Var}}) -> +declare_var(A=#arg{where=c, type=#type{name=T}, alt={size,Var}}) -> w(" ~s ~s_size = bins_sz[~p];~n", [T, Var, get(bin_count)]), - A; + A; declare_var(A=#arg{where=_}) -> A. @@ -194,9 +188,16 @@ decode_arg(P=#arg{where=erl},A) -> {P,A}; decode_arg(P=#arg{where=c},A) -> {P,A}; decode_arg(P=#arg{in=false},A) -> {P,A}; -decode_arg(P=#arg{name=Name,type=#type{name=Type,base=binary}},A0) -> +decode_arg(P=#arg{name=Name,alt=Alt,type=#type{name=Type,base=binary}},A0) -> w(" ~s *~s = (~s *) bins[~p];~n", [Type,Name,Type,next_id(bin_count)]), - {P, A0}; + case Alt of + list_binary -> + A = align(4, A0), + w(" int * ~sLen = (int *) bp; bp += 4; (void) ~sLen;~n", [Name, Name]), + {P, A}; + _ -> + {P, A0} + end; decode_arg(P=#arg{name=Name,type=#type{name=Type,base=memory}},A0) -> w(" ~s *~s = (~s *) bins[~p];~n", [Type,Name,Type,next_id(bin_count)]), {P, A0}; @@ -217,7 +218,7 @@ decode_arg(P=#arg{name=Name,type=#type{size=Sz,single=list,name=Type}},A0) -> A = align(max([Sz,4]),A0), w(" int * ~sLen = (int *) bp; bp += ~p;~n", [Name, max([4,Sz])]), w(" ~s * ~s = (~s *) bp; ", [Type,Name,Type]), - w(" bp += (8-((*~sLen*~p+~p)%8))%8;~n", [Name,Sz,A]), + w(" bp += *~sLen*~p + (8-((*~sLen*~p+~p)%8))%8;~n", [Name,Sz,Name,Sz,A]), {P, 0}; decode_arg(P=#arg{name=Name,type=#type{size=TSz,name=Type,single={tuple,undefined}}},A0) -> A = align(TSz,A0), diff --git a/lib/wx/api_gen/gl_gen_erl.erl b/lib/wx/api_gen/gl_gen_erl.erl index 1be8d775be..3ad14825dd 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", []), @@ -492,6 +496,8 @@ doc_arg_type2(#type{base=string, single=list}) -> "iolist()"; doc_arg_type2(T=#type{single={tuple,Sz}}) -> "{" ++ args(fun doc_arg_type3/1, ",", lists:duplicate(Sz,T)) ++ "}"; +doc_arg_type2(#type{base=guard_int, single=list}) -> + "[integer()]|mem()"; doc_arg_type2(T=#type{single=list}) -> "[" ++ doc_arg_type3(T) ++ "]"; doc_arg_type2(T=#type{single={list, _Max}}) -> @@ -512,7 +518,9 @@ doc_arg_type3(#type{base=binary}) -> "binary()"; doc_arg_type3(#type{base=memory}) -> "mem()". guard_test(As) -> - Str = args(fun(#arg{name=N,type=#type{base=guard_int}}) -> + Str = args(fun(#arg{name=N,type=#type{base=guard_int, single=list}}) -> + " is_list("++erl_arg_name(N)++")"; + (#arg{name=N,type=#type{base=guard_int}}) -> " is_integer("++erl_arg_name(N)++")"; (_) -> skip @@ -522,6 +530,13 @@ guard_test(As) -> Other -> " when " ++ Other end. +pre_marshal([#arg{name=N,in=true, type=#type{base=binary, single=list}=T, alt=list_binary}=A|R]) -> + w(" send_bin(~s),~n", [erl_arg_name(N)]), + w(" ~sLen = byte_size(if is_binary(~s) -> ~s; is_tuple(~s) -> element(2, ~s) end) div 4,~n", + [erl_arg_name(N),erl_arg_name(N), erl_arg_name(N), erl_arg_name(N), erl_arg_name(N)]), + Type = T#type{base=int, by_val=true, single=true, ref=undefined}, + Arg=A#arg{name=N++"Len", where=both, type=Type}, + [Arg|pre_marshal(R)]; pre_marshal([#arg{name=N,in=true,type=#type{base=binary}}|R]) -> w(" send_bin(~s),~n", [erl_arg_name(N)]), pre_marshal(R); @@ -530,8 +545,18 @@ pre_marshal([#arg{name=N,type=#type{base=memory}}|R]) -> pre_marshal(R); pre_marshal([A=#arg{name=N,type=#type{base=string,single=list}}|R]) -> %% With null terminations - w(" ~sTemp = list_to_binary([[Str|[0]] || Str <- ~s ]),~n", + w(" ~sTemp = list_to_binary([[Str|[0]] || Str <- ~s ]),~n", [erl_arg_name(N), erl_arg_name(N)]), + w(" ~sLen = length(~s),~n",[erl_arg_name(N), erl_arg_name(N)]), + [A|pre_marshal(R)]; +pre_marshal([A=#arg{name=N,type=#type{base=string,single=true,ref={pointer,1}}}|R]) -> + w(" ~sLen = length(~s),~n",[erl_arg_name(N), erl_arg_name(N)]), + [A|pre_marshal(R)]; +pre_marshal([A=#arg{name=N,type=#type{single=list}}|R]) -> + w(" ~sLen = length(~s),~n",[erl_arg_name(N), erl_arg_name(N)]), + [A|pre_marshal(R)]; +pre_marshal([A=#arg{name=N,type=#type{single={tuple_list,_}}}|R]) -> + w(" ~sLen = length(~s),~n",[erl_arg_name(N), erl_arg_name(N)]), [A|pre_marshal(R)]; pre_marshal([A|R]) -> [A|pre_marshal(R)]; @@ -583,9 +608,9 @@ marshal_arg(#type{size=BSz,name=Type,single={tuple,matrix12}},Name,A0) -> align(BSz,16,A0,All); marshal_arg(#type{size=Sz,name=Type,base=Base,single=list},Name,A0) - when Base =:= float; Base =:= int -> + when Base =:= float; Base =:= int; Base =:= guard_int -> KeepA = case Sz of 8 -> "0:32,"; _ -> "" end, - Str0 = "(length("++Name++")):?GLuint,"++KeepA++"\n" + Str0 = Name++"Len:?GLuint,"++KeepA++"\n" " (<< <<C:?"++Type++">> || C <- "++Name++">>)/binary", {Str,Align} = align(max([Sz,4]),A0,Str0), align_after(Sz,Align,0,1,Name,Str); @@ -606,7 +631,7 @@ marshal_arg(#type{base=string,single=true,ref={pointer,1}},Name,A0) -> marshal_arg(#type{base=string,single=list,ref={pointer,2}},Name,A0) -> Str0 = - "(length("++Name++")):?GLuint," + Name++"Len:?GLuint," "(size("++Name ++ "Temp)):?GLuint," "(" ++ Name ++ "Temp)/binary", {Str,A} = align(4,A0,Str0), @@ -620,7 +645,7 @@ marshal_arg(#type{size=Sz,name=Type,single={tuple_list,TSz}},Name,A0) -> TBin = args(fun(ElName) -> ElName ++ ":?" ++ Type end, ",", Names), KeepA = case Sz of 8 -> "0:32,"; 4 -> "" end, - Str0 = "(length("++Name++")):?GLuint,"++KeepA++"\n" + Str0 = Name++"Len:?GLuint,"++KeepA++"\n" " (<< <<"++TBin++">> || {"++TTup++"} <- "++Name++">>)/binary", align(Sz,A0,Str0); @@ -656,19 +681,19 @@ align(8,_,7,Str) -> {"0:8," ++Str, 0}. align_after(8,0,_Add,_Multiplier,_Name,Str) -> {Str,0}; align_after(4,0,Add,Mult,Name,Str) -> Extra = extra_align(Add,Mult), - Align = ",0:(((length("++Name++")"++Extra++") rem 2)*32)", + Align = ",0:((("++Name++"Len"++Extra++") rem 2)*32)", {Str ++ Align,0}; align_after(4,4,Add,Mult,Name,Str) -> Extra = extra_align(Add,Mult), - Align = ",0:(((1+length("++Name++")"++Extra++") rem 2)*32)", + Align = ",0:(((1+"++Name++"Len"++Extra++") rem 2)*32)", {Str ++ Align,0}; align_after(2,A,Add,Mult,Name,Str) when (A rem 2) =:= 0 -> Extra = extra_align(A+Add*2,Mult), - Align = ",0:((8-((length("++Name++")*2"++Extra++") rem 8)) rem 8)", + Align = ",0:((8-(("++Name++"Len*2"++Extra++") rem 8)) rem 8)", {Str ++ Align,0}; align_after(1,A,Add,Mult,Name,Str) -> Extra = extra_align(A+Add,Mult), - Align = ",0:((8-((length("++Name++")"++Extra++") rem 8)) rem 8)", + Align = ",0:((8-(("++Name++"Len"++Extra++") rem 8)) rem 8)", {Str ++ Align,0}; align_after(Sz,A,Add,Mult,Name,Str) -> io:format("~p ~p with ~p ~p ~s~n, ~p", [Sz,A,Add,Mult,Name,Str]), diff --git a/lib/wx/api_gen/glapi.conf b/lib/wx/api_gen/glapi.conf index 59fa8f7727..57f30a3f7e 100644 --- a/lib/wx/api_gen/glapi.conf +++ b/lib/wx/api_gen/glapi.conf @@ -181,9 +181,9 @@ {"glLoadTransposeMatrix", {"m", {single,{tuple,matrix}}}}. {"glMultTransposeMatrix", {"m",{single,{tuple,matrix}}}}. -{"glMultiDrawArrays", [{"first", [in,{single,list}]}, - {"count", [in,{single,list}]}, - {"primcount", {c_only, {length,"first"}}}]}. +{"glMultiDrawArrays", [{"first", [in,{single,list}, list_binary]}, + {"count", [in,{single,list}, list_binary]}, + {"primcount", {c_only, {length,"count"}}}]}. {"glGenQueries", {"ids", {single,{list, "n", "n"}}}}. {"glGetQueryiv", {"params", {single, true}}}. 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/wx_gen_cpp.erl b/lib/wx/api_gen/wx_gen_cpp.erl index 0a0b1f9209..d4b6db8153 100644 --- a/lib/wx/api_gen/wx_gen_cpp.erl +++ b/lib/wx/api_gen/wx_gen_cpp.erl @@ -1316,7 +1316,8 @@ encode_events(Evs) -> w(" } else {~n"), w(" send_res = rt.send();~n"), w(" if(cb->skip) event->Skip();~n"), - w(" if(app->recurse_level < 1) {~n"), + #class{id=MouseId} = lists:keyfind("wxMouseEvent", #class.name, Evs), + w(" if(app->recurse_level < 1 && Etype->cID != ~p) {~n", [MouseId]), w(" app->recurse_level++;~n"), w(" app->dispatch_cmds();~n"), w(" app->recurse_level--;~n"), 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/gl_funcs.cpp b/lib/wx/c_src/gen/gl_funcs.cpp index 4dd3ad44ef..bc8d5bbdca 100644 --- a/lib/wx/c_src/gen/gl_funcs.cpp +++ b/lib/wx/c_src/gen/gl_funcs.cpp @@ -815,7 +815,7 @@ case 5107: { // glCallList }; break; case 5108: { // glCallLists int * listsLen = (int *) bp; bp += 4; - GLuint * lists = (GLuint *) bp; bp += (8-((*listsLen*4+4)%8))%8; + GLuint * lists = (GLuint *) bp; bp += *listsLen*4 + (8-((*listsLen*4+4)%8))%8; weglCallLists(*listsLen,GL_UNSIGNED_INT,lists); }; break; case 5109: { // glListBase @@ -1866,7 +1866,7 @@ case 5271: { // glGenTextures }; break; case 5272: { // glDeleteTextures int * texturesLen = (int *) bp; bp += 4; - GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8; + GLuint * textures = (GLuint *) bp; bp += *texturesLen*4 + (8-((*texturesLen*4+4)%8))%8; weglDeleteTextures(*texturesLen,textures); }; break; case 5273: { // glBindTexture @@ -1876,14 +1876,14 @@ case 5273: { // glBindTexture }; break; case 5274: { // glPrioritizeTextures int * texturesLen = (int *) bp; bp += 4; - GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8; + GLuint * textures = (GLuint *) bp; bp += *texturesLen*4 + (8-((*texturesLen*4+4)%8))%8; int * prioritiesLen = (int *) bp; bp += 4; - GLclampf * priorities = (GLclampf *) bp; bp += (8-((*prioritiesLen*4+4)%8))%8; + GLclampf * priorities = (GLclampf *) bp; bp += *prioritiesLen*4 + (8-((*prioritiesLen*4+4)%8))%8; weglPrioritizeTextures(*texturesLen,textures,priorities); }; break; case 5275: { // glAreTexturesResident int * texturesLen = (int *) bp; bp += 4; - GLuint * textures = (GLuint *) bp; bp += (8-((*texturesLen*4+4)%8))%8; + GLuint * textures = (GLuint *) bp; bp += *texturesLen*4 + (8-((*texturesLen*4+4)%8))%8; GLboolean *residences; residences = (GLboolean *) driver_alloc(sizeof(GLboolean) * *texturesLen); GLboolean result = weglAreTexturesResident(*texturesLen,textures,residences); @@ -2921,132 +2921,140 @@ case 5394: { // glBlendFuncSeparate case 5395: { // glMultiDrawArrays GLenum *mode = (GLenum *) bp; bp += 4; int * firstLen = (int *) bp; bp += 4; - GLint * first = (GLint *) bp; bp += (8-((*firstLen*4+0)%8))%8; + GLint * first = (GLint *) bp; bp += *firstLen*4 + (8-((*firstLen*4+0)%8))%8; int * countLen = (int *) bp; bp += 4; - GLsizei * count = (GLsizei *) bp; bp += (8-((*countLen*4+4)%8))%8; - weglMultiDrawArrays(*mode,first,count,*firstLen); + GLsizei * count = (GLsizei *) bp; bp += *countLen*4 + (8-((*countLen*4+4)%8))%8; + weglMultiDrawArrays(*mode,first,count,*countLen); }; break; -case 5396: { // glPointParameterf +case 5396: { // glMultiDrawArrays + GLenum *mode = (GLenum *) bp; bp += 4; + GLint *first = (GLint *) bins[0]; + int * firstLen = (int *) bp; bp += 4; (void) firstLen; + GLsizei *count = (GLsizei *) bins[1]; + int * countLen = (int *) bp; bp += 4; (void) countLen; + weglMultiDrawArrays(*mode,first,count,*countLen); +}; break; +case 5397: { // glPointParameterf GLenum *pname = (GLenum *) bp; bp += 4; GLfloat *param = (GLfloat *) bp; bp += 4; weglPointParameterf(*pname,*param); }; break; -case 5397: { // glPointParameterfv +case 5398: { // glPointParameterfv GLenum *pname = (GLenum *) bp; bp += 4; int *paramsLen = (int *) bp; bp += 4; GLfloat *params = (GLfloat *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4; weglPointParameterfv(*pname,params); }; break; -case 5398: { // glPointParameteri +case 5399: { // glPointParameteri GLenum *pname = (GLenum *) bp; bp += 4; GLint *param = (GLint *) bp; bp += 4; weglPointParameteri(*pname,*param); }; break; -case 5399: { // glPointParameteriv +case 5400: { // glPointParameteriv GLenum *pname = (GLenum *) bp; bp += 4; int *paramsLen = (int *) bp; bp += 4; GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+0)%2*4; weglPointParameteriv(*pname,params); }; break; -case 5400: { // glFogCoordfv +case 5401: { // glFogCoordfv GLfloat *coord = (GLfloat *) bp; bp += 4; weglFogCoordfv(coord); }; break; -case 5401: { // glFogCoorddv +case 5402: { // glFogCoorddv GLdouble *coord = (GLdouble *) bp; bp += 8; weglFogCoorddv(coord); }; break; -case 5402: { // glFogCoordPointer +case 5403: { // glFogCoordPointer GLenum *type = (GLenum *) bp; bp += 4; GLsizei *stride = (GLsizei *) bp; bp += 4; GLvoid *pointer = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglFogCoordPointer(*type,*stride,pointer); }; break; -case 5403: { // glFogCoordPointer +case 5404: { // glFogCoordPointer GLenum *type = (GLenum *) bp; bp += 4; GLsizei *stride = (GLsizei *) bp; bp += 4; GLvoid *pointer = (GLvoid *) bins[0]; weglFogCoordPointer(*type,*stride,pointer); }; break; -case 5404: { // glSecondaryColor3bv +case 5405: { // glSecondaryColor3bv GLbyte *v = (GLbyte *) bp; bp += 1; weglSecondaryColor3bv(v); }; break; -case 5405: { // glSecondaryColor3dv +case 5406: { // glSecondaryColor3dv GLdouble *v = (GLdouble *) bp; bp += 8; weglSecondaryColor3dv(v); }; break; -case 5406: { // glSecondaryColor3fv +case 5407: { // glSecondaryColor3fv GLfloat *v = (GLfloat *) bp; bp += 4; weglSecondaryColor3fv(v); }; break; -case 5407: { // glSecondaryColor3iv +case 5408: { // glSecondaryColor3iv GLint *v = (GLint *) bp; bp += 4; weglSecondaryColor3iv(v); }; break; -case 5408: { // glSecondaryColor3sv +case 5409: { // glSecondaryColor3sv GLshort *v = (GLshort *) bp; bp += 2; weglSecondaryColor3sv(v); }; break; -case 5409: { // glSecondaryColor3ubv +case 5410: { // glSecondaryColor3ubv GLubyte *v = (GLubyte *) bp; bp += 1; weglSecondaryColor3ubv(v); }; break; -case 5410: { // glSecondaryColor3uiv +case 5411: { // glSecondaryColor3uiv GLuint *v = (GLuint *) bp; bp += 4; weglSecondaryColor3uiv(v); }; break; -case 5411: { // glSecondaryColor3usv +case 5412: { // glSecondaryColor3usv GLushort *v = (GLushort *) bp; bp += 2; weglSecondaryColor3usv(v); }; break; -case 5412: { // glSecondaryColorPointer +case 5413: { // glSecondaryColorPointer GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLsizei *stride = (GLsizei *) bp; bp += 4; GLvoid *pointer = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglSecondaryColorPointer(*size,*type,*stride,pointer); }; break; -case 5413: { // glSecondaryColorPointer +case 5414: { // glSecondaryColorPointer GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLsizei *stride = (GLsizei *) bp; bp += 4; GLvoid *pointer = (GLvoid *) bins[0]; weglSecondaryColorPointer(*size,*type,*stride,pointer); }; break; -case 5414: { // glWindowPos2dv +case 5415: { // glWindowPos2dv GLdouble *v = (GLdouble *) bp; bp += 8; weglWindowPos2dv(v); }; break; -case 5415: { // glWindowPos2fv +case 5416: { // glWindowPos2fv GLfloat *v = (GLfloat *) bp; bp += 4; weglWindowPos2fv(v); }; break; -case 5416: { // glWindowPos2iv +case 5417: { // glWindowPos2iv GLint *v = (GLint *) bp; bp += 4; weglWindowPos2iv(v); }; break; -case 5417: { // glWindowPos2sv +case 5418: { // glWindowPos2sv GLshort *v = (GLshort *) bp; bp += 2; weglWindowPos2sv(v); }; break; -case 5418: { // glWindowPos3dv +case 5419: { // glWindowPos3dv GLdouble *v = (GLdouble *) bp; bp += 8; weglWindowPos3dv(v); }; break; -case 5419: { // glWindowPos3fv +case 5420: { // glWindowPos3fv GLfloat *v = (GLfloat *) bp; bp += 4; weglWindowPos3fv(v); }; break; -case 5420: { // glWindowPos3iv +case 5421: { // glWindowPos3iv GLint *v = (GLint *) bp; bp += 4; weglWindowPos3iv(v); }; break; -case 5421: { // glWindowPos3sv +case 5422: { // glWindowPos3sv GLshort *v = (GLshort *) bp; bp += 2; weglWindowPos3sv(v); }; break; -case 5422: { // glGenQueries +case 5423: { // glGenQueries GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *ids; ids = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -3062,12 +3070,12 @@ case 5422: { // glGenQueries driver_free(rt); driver_free(ids); }; break; -case 5423: { // glDeleteQueries +case 5424: { // glDeleteQueries int * idsLen = (int *) bp; bp += 4; - GLuint * ids = (GLuint *) bp; bp += (8-((*idsLen*4+4)%8))%8; + GLuint * ids = (GLuint *) bp; bp += *idsLen*4 + (8-((*idsLen*4+4)%8))%8; weglDeleteQueries(*idsLen,ids); }; break; -case 5424: { // glIsQuery +case 5425: { // glIsQuery GLuint *id = (GLuint *) bp; bp += 4; GLboolean result = weglIsQuery(*id); int AP = 0; ErlDrvTermData rt[6]; @@ -3076,16 +3084,16 @@ case 5424: { // glIsQuery rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5425: { // glBeginQuery +case 5426: { // glBeginQuery GLenum *target = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; weglBeginQuery(*target,*id); }; break; -case 5426: { // glEndQuery +case 5427: { // glEndQuery GLenum *target = (GLenum *) bp; bp += 4; weglEndQuery(*target); }; break; -case 5427: { // glGetQueryiv +case 5428: { // glGetQueryiv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -3096,7 +3104,7 @@ case 5427: { // glGetQueryiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5428: { // glGetQueryObjectiv +case 5429: { // glGetQueryObjectiv GLuint *id = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -3107,7 +3115,7 @@ case 5428: { // glGetQueryObjectiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5429: { // glGetQueryObjectuiv +case 5430: { // glGetQueryObjectuiv GLuint *id = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLuint params[1] = {0}; @@ -3118,17 +3126,17 @@ case 5429: { // glGetQueryObjectuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5430: { // glBindBuffer +case 5431: { // glBindBuffer GLenum *target = (GLenum *) bp; bp += 4; GLuint *buffer = (GLuint *) bp; bp += 4; weglBindBuffer(*target,*buffer); }; break; -case 5431: { // glDeleteBuffers +case 5432: { // glDeleteBuffers int * buffersLen = (int *) bp; bp += 4; - GLuint * buffers = (GLuint *) bp; bp += (8-((*buffersLen*4+4)%8))%8; + GLuint * buffers = (GLuint *) bp; bp += *buffersLen*4 + (8-((*buffersLen*4+4)%8))%8; weglDeleteBuffers(*buffersLen,buffers); }; break; -case 5432: { // glGenBuffers +case 5433: { // glGenBuffers GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *buffers; buffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -3144,7 +3152,7 @@ case 5432: { // glGenBuffers driver_free(rt); driver_free(buffers); }; break; -case 5433: { // glIsBuffer +case 5434: { // glIsBuffer GLuint *buffer = (GLuint *) bp; bp += 4; GLboolean result = weglIsBuffer(*buffer); int AP = 0; ErlDrvTermData rt[6]; @@ -3153,7 +3161,7 @@ case 5433: { // glIsBuffer rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5434: { // glBufferData +case 5435: { // glBufferData GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8; @@ -3161,7 +3169,7 @@ case 5434: { // glBufferData GLenum *usage = (GLenum *) bp; bp += 4; weglBufferData(*target,size,data,*usage); }; break; -case 5435: { // glBufferData +case 5436: { // glBufferData GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8; @@ -3169,7 +3177,7 @@ case 5435: { // glBufferData GLenum *usage = (GLenum *) bp; bp += 4; weglBufferData(*target,size,data,*usage); }; break; -case 5436: { // glBufferSubData +case 5437: { // glBufferSubData GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8; @@ -3177,7 +3185,7 @@ case 5436: { // glBufferSubData GLvoid *data = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglBufferSubData(*target,offset,size,data); }; break; -case 5437: { // glBufferSubData +case 5438: { // glBufferSubData GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8; @@ -3185,7 +3193,7 @@ case 5437: { // glBufferSubData GLvoid *data = (GLvoid *) bins[0]; weglBufferSubData(*target,offset,size,data); }; break; -case 5438: { // glGetBufferSubData +case 5439: { // glGetBufferSubData GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8; @@ -3198,7 +3206,7 @@ case 5438: { // glGetBufferSubData rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5439: { // glGetBufferParameteriv +case 5440: { // glGetBufferParameteriv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -3209,52 +3217,52 @@ case 5439: { // glGetBufferParameteriv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5440: { // glBlendEquationSeparate +case 5441: { // glBlendEquationSeparate GLenum *modeRGB = (GLenum *) bp; bp += 4; GLenum *modeAlpha = (GLenum *) bp; bp += 4; weglBlendEquationSeparate(*modeRGB,*modeAlpha); }; break; -case 5441: { // glDrawBuffers +case 5442: { // glDrawBuffers int * bufsLen = (int *) bp; bp += 4; - GLenum * bufs = (GLenum *) bp; bp += (8-((*bufsLen*4+4)%8))%8; + GLenum * bufs = (GLenum *) bp; bp += *bufsLen*4 + (8-((*bufsLen*4+4)%8))%8; weglDrawBuffers(*bufsLen,bufs); }; break; -case 5442: { // glStencilOpSeparate +case 5443: { // glStencilOpSeparate GLenum *face = (GLenum *) bp; bp += 4; GLenum *sfail = (GLenum *) bp; bp += 4; GLenum *dpfail = (GLenum *) bp; bp += 4; GLenum *dppass = (GLenum *) bp; bp += 4; weglStencilOpSeparate(*face,*sfail,*dpfail,*dppass); }; break; -case 5443: { // glStencilFuncSeparate +case 5444: { // glStencilFuncSeparate GLenum *face = (GLenum *) bp; bp += 4; GLenum *func = (GLenum *) bp; bp += 4; GLint *ref = (GLint *) bp; bp += 4; GLuint *mask = (GLuint *) bp; bp += 4; weglStencilFuncSeparate(*face,*func,*ref,*mask); }; break; -case 5444: { // glStencilMaskSeparate +case 5445: { // glStencilMaskSeparate GLenum *face = (GLenum *) bp; bp += 4; GLuint *mask = (GLuint *) bp; bp += 4; weglStencilMaskSeparate(*face,*mask); }; break; -case 5445: { // glAttachShader +case 5446: { // glAttachShader GLuint *program = (GLuint *) bp; bp += 4; GLuint *shader = (GLuint *) bp; bp += 4; weglAttachShader(*program,*shader); }; break; -case 5446: { // glBindAttribLocation +case 5447: { // glBindAttribLocation GLuint *program = (GLuint *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); weglBindAttribLocation(*program,*index,name); }; break; -case 5447: { // glCompileShader +case 5448: { // glCompileShader GLuint *shader = (GLuint *) bp; bp += 4; weglCompileShader(*shader); }; break; -case 5448: { // glCreateProgram +case 5449: { // glCreateProgram GLuint result = weglCreateProgram(); int AP = 0; ErlDrvTermData rt[6]; rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_egl_result_"); @@ -3262,7 +3270,7 @@ case 5448: { // glCreateProgram rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5449: { // glCreateShader +case 5450: { // glCreateShader GLenum *type = (GLenum *) bp; bp += 4; GLuint result = weglCreateShader(*type); int AP = 0; ErlDrvTermData rt[6]; @@ -3271,28 +3279,28 @@ case 5449: { // glCreateShader rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5450: { // glDeleteProgram +case 5451: { // glDeleteProgram GLuint *program = (GLuint *) bp; bp += 4; weglDeleteProgram(*program); }; break; -case 5451: { // glDeleteShader +case 5452: { // glDeleteShader GLuint *shader = (GLuint *) bp; bp += 4; weglDeleteShader(*shader); }; break; -case 5452: { // glDetachShader +case 5453: { // glDetachShader GLuint *program = (GLuint *) bp; bp += 4; GLuint *shader = (GLuint *) bp; bp += 4; weglDetachShader(*program,*shader); }; break; -case 5453: { // glDisableVertexAttribArray +case 5454: { // glDisableVertexAttribArray GLuint *index = (GLuint *) bp; bp += 4; weglDisableVertexAttribArray(*index); }; break; -case 5454: { // glEnableVertexAttribArray +case 5455: { // glEnableVertexAttribArray GLuint *index = (GLuint *) bp; bp += 4; weglEnableVertexAttribArray(*index); }; break; -case 5455: { // glGetActiveAttrib +case 5456: { // glGetActiveAttrib GLuint *program = (GLuint *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -3312,7 +3320,7 @@ case 5455: { // glGetActiveAttrib driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5456: { // glGetActiveUniform +case 5457: { // glGetActiveUniform GLuint *program = (GLuint *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -3332,7 +3340,7 @@ case 5456: { // glGetActiveUniform driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5457: { // glGetAttachedShaders +case 5458: { // glGetAttachedShaders GLuint *program = (GLuint *) bp; bp += 4; GLsizei *maxCount = (GLsizei *) bp; bp += 4; GLsizei count[1] = {0}; @@ -3350,7 +3358,7 @@ case 5457: { // glGetAttachedShaders driver_free(rt); driver_free(obj); }; break; -case 5458: { // glGetAttribLocation +case 5459: { // glGetAttribLocation GLuint *program = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); @@ -3361,7 +3369,7 @@ case 5458: { // glGetAttribLocation rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5459: { // glGetProgramiv +case 5460: { // glGetProgramiv GLuint *program = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -3372,7 +3380,7 @@ case 5459: { // glGetProgramiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5460: { // glGetProgramInfoLog +case 5461: { // glGetProgramInfoLog GLuint *program = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -3386,7 +3394,7 @@ case 5460: { // glGetProgramInfoLog driver_send_term(port,caller,rt,AP); driver_free(infoLog); }; break; -case 5461: { // glGetShaderiv +case 5462: { // glGetShaderiv GLuint *shader = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -3397,7 +3405,7 @@ case 5461: { // glGetShaderiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5462: { // glGetShaderInfoLog +case 5463: { // glGetShaderInfoLog GLuint *shader = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -3411,7 +3419,7 @@ case 5462: { // glGetShaderInfoLog driver_send_term(port,caller,rt,AP); driver_free(infoLog); }; break; -case 5463: { // glGetShaderSource +case 5464: { // glGetShaderSource GLuint *shader = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -3425,7 +3433,7 @@ case 5463: { // glGetShaderSource driver_send_term(port,caller,rt,AP); driver_free(source); }; break; -case 5464: { // glGetUniformLocation +case 5465: { // glGetUniformLocation GLuint *program = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); @@ -3436,7 +3444,7 @@ case 5464: { // glGetUniformLocation rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5465: { // glGetUniformfv +case 5466: { // glGetUniformfv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLfloat params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; @@ -3465,7 +3473,7 @@ case 5465: { // glGetUniformfv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5466: { // glGetUniformiv +case 5467: { // glGetUniformiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -3493,7 +3501,7 @@ case 5466: { // glGetUniformiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5467: { // glGetVertexAttribdv +case 5468: { // glGetVertexAttribdv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLdouble params[4] = {0.0,0.0,0.0,0.0}; @@ -3509,7 +3517,7 @@ case 5467: { // glGetVertexAttribdv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5468: { // glGetVertexAttribfv +case 5469: { // glGetVertexAttribfv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLfloat params[4] = {0.0,0.0,0.0,0.0}; @@ -3526,7 +3534,7 @@ case 5468: { // glGetVertexAttribfv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5469: { // glGetVertexAttribiv +case 5470: { // glGetVertexAttribiv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[4] = {0,0,0,0}; @@ -3542,7 +3550,7 @@ case 5469: { // glGetVertexAttribiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5470: { // glIsProgram +case 5471: { // glIsProgram GLuint *program = (GLuint *) bp; bp += 4; GLboolean result = weglIsProgram(*program); int AP = 0; ErlDrvTermData rt[6]; @@ -3551,7 +3559,7 @@ case 5470: { // glIsProgram rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5471: { // glIsShader +case 5472: { // glIsShader GLuint *shader = (GLuint *) bp; bp += 4; GLboolean result = weglIsShader(*shader); int AP = 0; ErlDrvTermData rt[6]; @@ -3560,11 +3568,11 @@ case 5471: { // glIsShader rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5472: { // glLinkProgram +case 5473: { // glLinkProgram GLuint *program = (GLuint *) bp; bp += 4; weglLinkProgram(*program); }; break; -case 5473: { // glShaderSource +case 5474: { // glShaderSource GLuint *shader = (GLuint *) bp; bp += 4; int * stringLen = (int *) bp; bp += 4; int * stringTotSize = (int *) bp; bp += 4; @@ -3576,29 +3584,29 @@ case 5473: { // glShaderSource weglShaderSource(*shader,*stringLen,(const GLchar **) string,NULL); driver_free(string); }; break; -case 5474: { // glUseProgram +case 5475: { // glUseProgram GLuint *program = (GLuint *) bp; bp += 4; weglUseProgram(*program); }; break; -case 5475: { // glUniform1f +case 5476: { // glUniform1f GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; weglUniform1f(*location,*v0); }; break; -case 5476: { // glUniform2f +case 5477: { // glUniform2f GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; GLfloat *v1 = (GLfloat *) bp; bp += 4; weglUniform2f(*location,*v0,*v1); }; break; -case 5477: { // glUniform3f +case 5478: { // glUniform3f GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; GLfloat *v1 = (GLfloat *) bp; bp += 4; GLfloat *v2 = (GLfloat *) bp; bp += 4; weglUniform3f(*location,*v0,*v1,*v2); }; break; -case 5478: { // glUniform4f +case 5479: { // glUniform4f GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; GLfloat *v1 = (GLfloat *) bp; bp += 4; @@ -3606,25 +3614,25 @@ case 5478: { // glUniform4f GLfloat *v3 = (GLfloat *) bp; bp += 4; weglUniform4f(*location,*v0,*v1,*v2,*v3); }; break; -case 5479: { // glUniform1i +case 5480: { // glUniform1i GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; weglUniform1i(*location,*v0); }; break; -case 5480: { // glUniform2i +case 5481: { // glUniform2i GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; GLint *v1 = (GLint *) bp; bp += 4; weglUniform2i(*location,*v0,*v1); }; break; -case 5481: { // glUniform3i +case 5482: { // glUniform3i GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; GLint *v1 = (GLint *) bp; bp += 4; GLint *v2 = (GLint *) bp; bp += 4; weglUniform3i(*location,*v0,*v1,*v2); }; break; -case 5482: { // glUniform4i +case 5483: { // glUniform4i GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; GLint *v1 = (GLint *) bp; bp += 4; @@ -3632,55 +3640,55 @@ case 5482: { // glUniform4i GLint *v3 = (GLint *) bp; bp += 4; weglUniform4i(*location,*v0,*v1,*v2,*v3); }; break; -case 5483: { // glUniform1fv +case 5484: { // glUniform1fv GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLfloat * value = (GLfloat *) bp; bp += (8-((*valueLen*4+0)%8))%8; + GLfloat * value = (GLfloat *) bp; bp += *valueLen*4 + (8-((*valueLen*4+0)%8))%8; weglUniform1fv(*location,*valueLen,value); }; break; -case 5484: { // glUniform2fv +case 5485: { // glUniform2fv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*8; weglUniform2fv(*location,*valueLen,value); }; break; -case 5485: { // glUniform3fv +case 5486: { // glUniform3fv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*12; weglUniform3fv(*location,*valueLen,value); }; break; -case 5486: { // glUniform4fv +case 5487: { // glUniform4fv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*16; weglUniform4fv(*location,*valueLen,value); }; break; -case 5487: { // glUniform1iv +case 5488: { // glUniform1iv GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLint * value = (GLint *) bp; bp += (8-((*valueLen*4+0)%8))%8; + GLint * value = (GLint *) bp; bp += *valueLen*4 + (8-((*valueLen*4+0)%8))%8; weglUniform1iv(*location,*valueLen,value); }; break; -case 5488: { // glUniform2iv +case 5489: { // glUniform2iv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*8; weglUniform2iv(*location,*valueLen,value); }; break; -case 5489: { // glUniform3iv +case 5490: { // glUniform3iv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*12; weglUniform3iv(*location,*valueLen,value); }; break; -case 5490: { // glUniform4iv +case 5491: { // glUniform4iv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*16; weglUniform4iv(*location,*valueLen,value); }; break; -case 5491: { // glUniformMatrix2fv +case 5492: { // glUniformMatrix2fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3688,7 +3696,7 @@ case 5491: { // glUniformMatrix2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*16; weglUniformMatrix2fv(*location,*valueLen,*transpose,value); }; break; -case 5492: { // glUniformMatrix3fv +case 5493: { // glUniformMatrix3fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3696,7 +3704,7 @@ case 5492: { // glUniformMatrix3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*36; weglUniformMatrix3fv(*location,*valueLen,*transpose,value); }; break; -case 5493: { // glUniformMatrix4fv +case 5494: { // glUniformMatrix4fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3704,130 +3712,130 @@ case 5493: { // glUniformMatrix4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*64; weglUniformMatrix4fv(*location,*valueLen,*transpose,value); }; break; -case 5494: { // glValidateProgram +case 5495: { // glValidateProgram GLuint *program = (GLuint *) bp; bp += 4; weglValidateProgram(*program); }; break; -case 5495: { // glVertexAttrib1dv +case 5496: { // glVertexAttrib1dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttrib1dv(*index,v); }; break; -case 5496: { // glVertexAttrib1fv +case 5497: { // glVertexAttrib1fv GLuint *index = (GLuint *) bp; bp += 4; GLfloat *v = (GLfloat *) bp; bp += 4; weglVertexAttrib1fv(*index,v); }; break; -case 5497: { // glVertexAttrib1sv +case 5498: { // glVertexAttrib1sv GLuint *index = (GLuint *) bp; bp += 4; GLshort *v = (GLshort *) bp; bp += 2; weglVertexAttrib1sv(*index,v); }; break; -case 5498: { // glVertexAttrib2dv +case 5499: { // glVertexAttrib2dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttrib2dv(*index,v); }; break; -case 5499: { // glVertexAttrib2fv +case 5500: { // glVertexAttrib2fv GLuint *index = (GLuint *) bp; bp += 4; GLfloat *v = (GLfloat *) bp; bp += 4; weglVertexAttrib2fv(*index,v); }; break; -case 5500: { // glVertexAttrib2sv +case 5501: { // glVertexAttrib2sv GLuint *index = (GLuint *) bp; bp += 4; GLshort *v = (GLshort *) bp; bp += 2; weglVertexAttrib2sv(*index,v); }; break; -case 5501: { // glVertexAttrib3dv +case 5502: { // glVertexAttrib3dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttrib3dv(*index,v); }; break; -case 5502: { // glVertexAttrib3fv +case 5503: { // glVertexAttrib3fv GLuint *index = (GLuint *) bp; bp += 4; GLfloat *v = (GLfloat *) bp; bp += 4; weglVertexAttrib3fv(*index,v); }; break; -case 5503: { // glVertexAttrib3sv +case 5504: { // glVertexAttrib3sv GLuint *index = (GLuint *) bp; bp += 4; GLshort *v = (GLshort *) bp; bp += 2; weglVertexAttrib3sv(*index,v); }; break; -case 5504: { // glVertexAttrib4Nbv +case 5505: { // glVertexAttrib4Nbv GLuint *index = (GLuint *) bp; bp += 4; GLbyte * v = (GLbyte *) bp; bp += 4; weglVertexAttrib4Nbv(*index,v); }; break; -case 5505: { // glVertexAttrib4Niv +case 5506: { // glVertexAttrib4Niv GLuint *index = (GLuint *) bp; bp += 4; GLint * v = (GLint *) bp; bp += 16; weglVertexAttrib4Niv(*index,v); }; break; -case 5506: { // glVertexAttrib4Nsv +case 5507: { // glVertexAttrib4Nsv GLuint *index = (GLuint *) bp; bp += 4; GLshort * v = (GLshort *) bp; bp += 8; weglVertexAttrib4Nsv(*index,v); }; break; -case 5507: { // glVertexAttrib4Nubv +case 5508: { // glVertexAttrib4Nubv GLuint *index = (GLuint *) bp; bp += 4; GLubyte * v = (GLubyte *) bp; bp += 4; weglVertexAttrib4Nubv(*index,v); }; break; -case 5508: { // glVertexAttrib4Nuiv +case 5509: { // glVertexAttrib4Nuiv GLuint *index = (GLuint *) bp; bp += 4; GLuint * v = (GLuint *) bp; bp += 16; weglVertexAttrib4Nuiv(*index,v); }; break; -case 5509: { // glVertexAttrib4Nusv +case 5510: { // glVertexAttrib4Nusv GLuint *index = (GLuint *) bp; bp += 4; GLushort * v = (GLushort *) bp; bp += 8; weglVertexAttrib4Nusv(*index,v); }; break; -case 5510: { // glVertexAttrib4bv +case 5511: { // glVertexAttrib4bv GLuint *index = (GLuint *) bp; bp += 4; GLbyte * v = (GLbyte *) bp; bp += 4; weglVertexAttrib4bv(*index,v); }; break; -case 5511: { // glVertexAttrib4dv +case 5512: { // glVertexAttrib4dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble * v = (GLdouble *) bp; bp += 32; weglVertexAttrib4dv(*index,v); }; break; -case 5512: { // glVertexAttrib4fv +case 5513: { // glVertexAttrib4fv GLuint *index = (GLuint *) bp; bp += 4; GLfloat * v = (GLfloat *) bp; bp += 16; weglVertexAttrib4fv(*index,v); }; break; -case 5513: { // glVertexAttrib4iv +case 5514: { // glVertexAttrib4iv GLuint *index = (GLuint *) bp; bp += 4; GLint * v = (GLint *) bp; bp += 16; weglVertexAttrib4iv(*index,v); }; break; -case 5514: { // glVertexAttrib4sv +case 5515: { // glVertexAttrib4sv GLuint *index = (GLuint *) bp; bp += 4; GLshort * v = (GLshort *) bp; bp += 8; weglVertexAttrib4sv(*index,v); }; break; -case 5515: { // glVertexAttrib4ubv +case 5516: { // glVertexAttrib4ubv GLuint *index = (GLuint *) bp; bp += 4; GLubyte * v = (GLubyte *) bp; bp += 4; weglVertexAttrib4ubv(*index,v); }; break; -case 5516: { // glVertexAttrib4uiv +case 5517: { // glVertexAttrib4uiv GLuint *index = (GLuint *) bp; bp += 4; GLuint * v = (GLuint *) bp; bp += 16; weglVertexAttrib4uiv(*index,v); }; break; -case 5517: { // glVertexAttrib4usv +case 5518: { // glVertexAttrib4usv GLuint *index = (GLuint *) bp; bp += 4; GLushort * v = (GLushort *) bp; bp += 8; weglVertexAttrib4usv(*index,v); }; break; -case 5518: { // glVertexAttribPointer +case 5519: { // glVertexAttribPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -3837,7 +3845,7 @@ case 5518: { // glVertexAttribPointer GLvoid *pointer = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglVertexAttribPointer(*index,*size,*type,*normalized,*stride,pointer); }; break; -case 5519: { // glVertexAttribPointer +case 5520: { // glVertexAttribPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -3847,7 +3855,7 @@ case 5519: { // glVertexAttribPointer GLvoid *pointer = (GLvoid *) bins[0]; weglVertexAttribPointer(*index,*size,*type,*normalized,*stride,pointer); }; break; -case 5520: { // glUniformMatrix2x3fv +case 5521: { // glUniformMatrix2x3fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3855,7 +3863,7 @@ case 5520: { // glUniformMatrix2x3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*24; weglUniformMatrix2x3fv(*location,*valueLen,*transpose,value); }; break; -case 5521: { // glUniformMatrix3x2fv +case 5522: { // glUniformMatrix3x2fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3863,7 +3871,7 @@ case 5521: { // glUniformMatrix3x2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*24; weglUniformMatrix3x2fv(*location,*valueLen,*transpose,value); }; break; -case 5522: { // glUniformMatrix2x4fv +case 5523: { // glUniformMatrix2x4fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3871,7 +3879,7 @@ case 5522: { // glUniformMatrix2x4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*32; weglUniformMatrix2x4fv(*location,*valueLen,*transpose,value); }; break; -case 5523: { // glUniformMatrix4x2fv +case 5524: { // glUniformMatrix4x2fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3879,7 +3887,7 @@ case 5523: { // glUniformMatrix4x2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*32; weglUniformMatrix4x2fv(*location,*valueLen,*transpose,value); }; break; -case 5524: { // glUniformMatrix3x4fv +case 5525: { // glUniformMatrix3x4fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3887,7 +3895,7 @@ case 5524: { // glUniformMatrix3x4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*48; weglUniformMatrix3x4fv(*location,*valueLen,*transpose,value); }; break; -case 5525: { // glUniformMatrix4x3fv +case 5526: { // glUniformMatrix4x3fv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -3895,7 +3903,7 @@ case 5525: { // glUniformMatrix4x3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*48; weglUniformMatrix4x3fv(*location,*valueLen,*transpose,value); }; break; -case 5526: { // glColorMaski +case 5527: { // glColorMaski GLuint *index = (GLuint *) bp; bp += 4; GLboolean *r = (GLboolean *) bp; bp += 1; GLboolean *g = (GLboolean *) bp; bp += 1; @@ -3903,7 +3911,7 @@ case 5526: { // glColorMaski GLboolean *a = (GLboolean *) bp; bp += 1; weglColorMaski(*index,*r,*g,*b,*a); }; break; -case 5527: { // glGetBooleani_v +case 5528: { // glGetBooleani_v GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLboolean data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -3931,7 +3939,7 @@ case 5527: { // glGetBooleani_v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5528: { // glGetIntegeri_v +case 5529: { // glGetIntegeri_v GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLint data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -3959,17 +3967,17 @@ case 5528: { // glGetIntegeri_v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5529: { // glEnablei +case 5530: { // glEnablei GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; weglEnablei(*target,*index); }; break; -case 5530: { // glDisablei +case 5531: { // glDisablei GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; weglDisablei(*target,*index); }; break; -case 5531: { // glIsEnabledi +case 5532: { // glIsEnabledi GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLboolean result = weglIsEnabledi(*target,*index); @@ -3979,14 +3987,14 @@ case 5531: { // glIsEnabledi rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5532: { // glBeginTransformFeedback +case 5533: { // glBeginTransformFeedback GLenum *primitiveMode = (GLenum *) bp; bp += 4; weglBeginTransformFeedback(*primitiveMode); }; break; -case 5533: { // glEndTransformFeedback +case 5534: { // glEndTransformFeedback weglEndTransformFeedback(); }; break; -case 5534: { // glBindBufferRange +case 5535: { // glBindBufferRange GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLuint *buffer = (GLuint *) bp; bp += 4; @@ -3995,13 +4003,13 @@ case 5534: { // glBindBufferRange GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8; weglBindBufferRange(*target,*index,*buffer,offset,size); }; break; -case 5535: { // glBindBufferBase +case 5536: { // glBindBufferBase GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLuint *buffer = (GLuint *) bp; bp += 4; weglBindBufferBase(*target,*index,*buffer); }; break; -case 5536: { // glTransformFeedbackVaryings +case 5537: { // glTransformFeedbackVaryings GLuint *program = (GLuint *) bp; bp += 4; int * varyingsLen = (int *) bp; bp += 4; int * varyingsTotSize = (int *) bp; bp += 4; @@ -4014,7 +4022,7 @@ case 5536: { // glTransformFeedbackVaryings weglTransformFeedbackVaryings(*program,*varyingsLen,(const GLchar **) varyings,*bufferMode); driver_free(varyings); }; break; -case 5537: { // glGetTransformFeedbackVarying +case 5538: { // glGetTransformFeedbackVarying GLuint *program = (GLuint *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -4034,20 +4042,20 @@ case 5537: { // glGetTransformFeedbackVarying driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5538: { // glClampColor +case 5539: { // glClampColor GLenum *target = (GLenum *) bp; bp += 4; GLenum *clamp = (GLenum *) bp; bp += 4; weglClampColor(*target,*clamp); }; break; -case 5539: { // glBeginConditionalRender +case 5540: { // glBeginConditionalRender GLuint *id = (GLuint *) bp; bp += 4; GLenum *mode = (GLenum *) bp; bp += 4; weglBeginConditionalRender(*id,*mode); }; break; -case 5540: { // glEndConditionalRender +case 5541: { // glEndConditionalRender weglEndConditionalRender(); }; break; -case 5541: { // glVertexAttribIPointer +case 5542: { // glVertexAttribIPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -4055,7 +4063,7 @@ case 5541: { // glVertexAttribIPointer GLvoid *pointer = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglVertexAttribIPointer(*index,*size,*type,*stride,pointer); }; break; -case 5542: { // glVertexAttribIPointer +case 5543: { // glVertexAttribIPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -4063,7 +4071,7 @@ case 5542: { // glVertexAttribIPointer GLvoid *pointer = (GLvoid *) bins[0]; weglVertexAttribIPointer(*index,*size,*type,*stride,pointer); }; break; -case 5543: { // glGetVertexAttribIiv +case 5544: { // glGetVertexAttribIiv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[4] = {0,0,0,0}; @@ -4079,7 +4087,7 @@ case 5543: { // glGetVertexAttribIiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5544: { // glGetVertexAttribIuiv +case 5545: { // glGetVertexAttribIuiv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLuint params[4] = {0,0,0,0}; @@ -4095,67 +4103,67 @@ case 5544: { // glGetVertexAttribIuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5545: { // glVertexAttribI1iv +case 5546: { // glVertexAttribI1iv GLuint *index = (GLuint *) bp; bp += 4; GLint *v = (GLint *) bp; bp += 4; weglVertexAttribI1iv(*index,v); }; break; -case 5546: { // glVertexAttribI2iv +case 5547: { // glVertexAttribI2iv GLuint *index = (GLuint *) bp; bp += 4; GLint *v = (GLint *) bp; bp += 4; weglVertexAttribI2iv(*index,v); }; break; -case 5547: { // glVertexAttribI3iv +case 5548: { // glVertexAttribI3iv GLuint *index = (GLuint *) bp; bp += 4; GLint *v = (GLint *) bp; bp += 4; weglVertexAttribI3iv(*index,v); }; break; -case 5548: { // glVertexAttribI4iv +case 5549: { // glVertexAttribI4iv GLuint *index = (GLuint *) bp; bp += 4; GLint * v = (GLint *) bp; bp += 16; weglVertexAttribI4iv(*index,v); }; break; -case 5549: { // glVertexAttribI1uiv +case 5550: { // glVertexAttribI1uiv GLuint *index = (GLuint *) bp; bp += 4; GLuint *v = (GLuint *) bp; bp += 4; weglVertexAttribI1uiv(*index,v); }; break; -case 5550: { // glVertexAttribI2uiv +case 5551: { // glVertexAttribI2uiv GLuint *index = (GLuint *) bp; bp += 4; GLuint *v = (GLuint *) bp; bp += 4; weglVertexAttribI2uiv(*index,v); }; break; -case 5551: { // glVertexAttribI3uiv +case 5552: { // glVertexAttribI3uiv GLuint *index = (GLuint *) bp; bp += 4; GLuint *v = (GLuint *) bp; bp += 4; weglVertexAttribI3uiv(*index,v); }; break; -case 5552: { // glVertexAttribI4uiv +case 5553: { // glVertexAttribI4uiv GLuint *index = (GLuint *) bp; bp += 4; GLuint * v = (GLuint *) bp; bp += 16; weglVertexAttribI4uiv(*index,v); }; break; -case 5553: { // glVertexAttribI4bv +case 5554: { // glVertexAttribI4bv GLuint *index = (GLuint *) bp; bp += 4; GLbyte * v = (GLbyte *) bp; bp += 4; weglVertexAttribI4bv(*index,v); }; break; -case 5554: { // glVertexAttribI4sv +case 5555: { // glVertexAttribI4sv GLuint *index = (GLuint *) bp; bp += 4; GLshort * v = (GLshort *) bp; bp += 8; weglVertexAttribI4sv(*index,v); }; break; -case 5555: { // glVertexAttribI4ubv +case 5556: { // glVertexAttribI4ubv GLuint *index = (GLuint *) bp; bp += 4; GLubyte * v = (GLubyte *) bp; bp += 4; weglVertexAttribI4ubv(*index,v); }; break; -case 5556: { // glVertexAttribI4usv +case 5557: { // glVertexAttribI4usv GLuint *index = (GLuint *) bp; bp += 4; GLushort * v = (GLushort *) bp; bp += 8; weglVertexAttribI4usv(*index,v); }; break; -case 5557: { // glGetUniformuiv +case 5558: { // glGetUniformuiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -4183,14 +4191,14 @@ case 5557: { // glGetUniformuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5558: { // glBindFragDataLocation +case 5559: { // glBindFragDataLocation GLuint *program = (GLuint *) bp; bp += 4; GLuint *color = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); weglBindFragDataLocation(*program,*color,name); }; break; -case 5559: { // glGetFragDataLocation +case 5560: { // glGetFragDataLocation GLuint *program = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); @@ -4201,25 +4209,25 @@ case 5559: { // glGetFragDataLocation rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5560: { // glUniform1ui +case 5561: { // glUniform1ui GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; weglUniform1ui(*location,*v0); }; break; -case 5561: { // glUniform2ui +case 5562: { // glUniform2ui GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; GLuint *v1 = (GLuint *) bp; bp += 4; weglUniform2ui(*location,*v0,*v1); }; break; -case 5562: { // glUniform3ui +case 5563: { // glUniform3ui GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; GLuint *v1 = (GLuint *) bp; bp += 4; GLuint *v2 = (GLuint *) bp; bp += 4; weglUniform3ui(*location,*v0,*v1,*v2); }; break; -case 5563: { // glUniform4ui +case 5564: { // glUniform4ui GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; GLuint *v1 = (GLuint *) bp; bp += 4; @@ -4227,45 +4235,45 @@ case 5563: { // glUniform4ui GLuint *v3 = (GLuint *) bp; bp += 4; weglUniform4ui(*location,*v0,*v1,*v2,*v3); }; break; -case 5564: { // glUniform1uiv +case 5565: { // glUniform1uiv GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLuint * value = (GLuint *) bp; bp += (8-((*valueLen*4+0)%8))%8; + GLuint * value = (GLuint *) bp; bp += *valueLen*4 + (8-((*valueLen*4+0)%8))%8; weglUniform1uiv(*location,*valueLen,value); }; break; -case 5565: { // glUniform2uiv +case 5566: { // glUniform2uiv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*8; weglUniform2uiv(*location,*valueLen,value); }; break; -case 5566: { // glUniform3uiv +case 5567: { // glUniform3uiv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*12; weglUniform3uiv(*location,*valueLen,value); }; break; -case 5567: { // glUniform4uiv +case 5568: { // glUniform4uiv GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*16; weglUniform4uiv(*location,*valueLen,value); }; break; -case 5568: { // glTexParameterIiv +case 5569: { // glTexParameterIiv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int *paramsLen = (int *) bp; bp += 4; GLint *params = (GLint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4; weglTexParameterIiv(*target,*pname,params); }; break; -case 5569: { // glTexParameterIuiv +case 5570: { // glTexParameterIuiv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int *paramsLen = (int *) bp; bp += 4; GLuint *params = (GLuint *) bp; bp += *paramsLen*4+((*paramsLen)+1)%2*4; weglTexParameterIuiv(*target,*pname,params); }; break; -case 5570: { // glGetTexParameterIiv +case 5571: { // glGetTexParameterIiv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[4] = {0,0,0,0}; @@ -4281,7 +4289,7 @@ case 5570: { // glGetTexParameterIiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5571: { // glGetTexParameterIuiv +case 5572: { // glGetTexParameterIuiv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLuint params[4] = {0,0,0,0}; @@ -4297,35 +4305,35 @@ case 5571: { // glGetTexParameterIuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5572: { // glClearBufferiv +case 5573: { // glClearBufferiv GLenum *buffer = (GLenum *) bp; bp += 4; GLint *drawbuffer = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint *value = (GLint *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4; weglClearBufferiv(*buffer,*drawbuffer,value); }; break; -case 5573: { // glClearBufferuiv +case 5574: { // glClearBufferuiv GLenum *buffer = (GLenum *) bp; bp += 4; GLint *drawbuffer = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint *value = (GLuint *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4; weglClearBufferuiv(*buffer,*drawbuffer,value); }; break; -case 5574: { // glClearBufferfv +case 5575: { // glClearBufferfv GLenum *buffer = (GLenum *) bp; bp += 4; GLint *drawbuffer = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat *value = (GLfloat *) bp; bp += *valueLen*4+((*valueLen)+1)%2*4; weglClearBufferfv(*buffer,*drawbuffer,value); }; break; -case 5575: { // glClearBufferfi +case 5576: { // glClearBufferfi GLenum *buffer = (GLenum *) bp; bp += 4; GLint *drawbuffer = (GLint *) bp; bp += 4; GLfloat *depth = (GLfloat *) bp; bp += 4; GLint *stencil = (GLint *) bp; bp += 4; weglClearBufferfi(*buffer,*drawbuffer,*depth,*stencil); }; break; -case 5576: { // glGetStringi +case 5577: { // glGetStringi GLenum *name = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; const GLubyte * result = weglGetStringi(*name,*index); @@ -4335,14 +4343,14 @@ case 5576: { // glGetStringi rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5577: { // glDrawArraysInstanced +case 5578: { // glDrawArraysInstanced GLenum *mode = (GLenum *) bp; bp += 4; GLint *first = (GLint *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLsizei *primcount = (GLsizei *) bp; bp += 4; weglDrawArraysInstanced(*mode,*first,*count,*primcount); }; break; -case 5578: { // glDrawElementsInstanced +case 5579: { // glDrawElementsInstanced GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -4350,7 +4358,7 @@ case 5578: { // glDrawElementsInstanced GLsizei *primcount = (GLsizei *) bp; bp += 4; weglDrawElementsInstanced(*mode,*count,*type,indices,*primcount); }; break; -case 5579: { // glDrawElementsInstanced +case 5580: { // glDrawElementsInstanced GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -4358,17 +4366,17 @@ case 5579: { // glDrawElementsInstanced GLsizei *primcount = (GLsizei *) bp; bp += 4; weglDrawElementsInstanced(*mode,*count,*type,indices,*primcount); }; break; -case 5580: { // glTexBuffer +case 5581: { // glTexBuffer GLenum *target = (GLenum *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; GLuint *buffer = (GLuint *) bp; bp += 4; weglTexBuffer(*target,*internalformat,*buffer); }; break; -case 5581: { // glPrimitiveRestartIndex +case 5582: { // glPrimitiveRestartIndex GLuint *index = (GLuint *) bp; bp += 4; weglPrimitiveRestartIndex(*index); }; break; -case 5582: { // glGetInteger64i_v +case 5583: { // glGetInteger64i_v GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLint64 data[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -4396,7 +4404,7 @@ case 5582: { // glGetInteger64i_v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5583: { // glGetBufferParameteri64v +case 5584: { // glGetBufferParameteri64v GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint64 params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -4424,40 +4432,40 @@ case 5583: { // glGetBufferParameteri64v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5584: { // glFramebufferTexture +case 5585: { // glFramebufferTexture GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLuint *texture = (GLuint *) bp; bp += 4; GLint *level = (GLint *) bp; bp += 4; weglFramebufferTexture(*target,*attachment,*texture,*level); }; break; -case 5585: { // glVertexAttribDivisor +case 5586: { // glVertexAttribDivisor GLuint *index = (GLuint *) bp; bp += 4; GLuint *divisor = (GLuint *) bp; bp += 4; weglVertexAttribDivisor(*index,*divisor); }; break; -case 5586: { // glMinSampleShading +case 5587: { // glMinSampleShading GLclampf *value = (GLclampf *) bp; bp += 4; weglMinSampleShading(*value); }; break; -case 5587: { // glBlendEquationi +case 5588: { // glBlendEquationi GLuint *buf = (GLuint *) bp; bp += 4; GLenum *mode = (GLenum *) bp; bp += 4; weglBlendEquationi(*buf,*mode); }; break; -case 5588: { // glBlendEquationSeparatei +case 5589: { // glBlendEquationSeparatei GLuint *buf = (GLuint *) bp; bp += 4; GLenum *modeRGB = (GLenum *) bp; bp += 4; GLenum *modeAlpha = (GLenum *) bp; bp += 4; weglBlendEquationSeparatei(*buf,*modeRGB,*modeAlpha); }; break; -case 5589: { // glBlendFunci +case 5590: { // glBlendFunci GLuint *buf = (GLuint *) bp; bp += 4; GLenum *src = (GLenum *) bp; bp += 4; GLenum *dst = (GLenum *) bp; bp += 4; weglBlendFunci(*buf,*src,*dst); }; break; -case 5590: { // glBlendFuncSeparatei +case 5591: { // glBlendFuncSeparatei GLuint *buf = (GLuint *) bp; bp += 4; GLenum *srcRGB = (GLenum *) bp; bp += 4; GLenum *dstRGB = (GLenum *) bp; bp += 4; @@ -4465,103 +4473,103 @@ case 5590: { // glBlendFuncSeparatei GLenum *dstAlpha = (GLenum *) bp; bp += 4; weglBlendFuncSeparatei(*buf,*srcRGB,*dstRGB,*srcAlpha,*dstAlpha); }; break; -case 5591: { // glLoadTransposeMatrixfARB +case 5592: { // glLoadTransposeMatrixfARB GLfloat * m = (GLfloat *) bp; bp += 64; weglLoadTransposeMatrixfARB(m); }; break; -case 5592: { // glLoadTransposeMatrixdARB +case 5593: { // glLoadTransposeMatrixdARB GLdouble * m = (GLdouble *) bp; bp += 128; weglLoadTransposeMatrixdARB(m); }; break; -case 5593: { // glMultTransposeMatrixfARB +case 5594: { // glMultTransposeMatrixfARB GLfloat * m = (GLfloat *) bp; bp += 64; weglMultTransposeMatrixfARB(m); }; break; -case 5594: { // glMultTransposeMatrixdARB +case 5595: { // glMultTransposeMatrixdARB GLdouble * m = (GLdouble *) bp; bp += 128; weglMultTransposeMatrixdARB(m); }; break; -case 5595: { // glWeightbvARB +case 5596: { // glWeightbvARB int * weightsLen = (int *) bp; bp += 4; - GLbyte * weights = (GLbyte *) bp; bp += (8-((*weightsLen*1+4)%8))%8; + GLbyte * weights = (GLbyte *) bp; bp += *weightsLen*1 + (8-((*weightsLen*1+4)%8))%8; weglWeightbvARB(*weightsLen,weights); }; break; -case 5596: { // glWeightsvARB +case 5597: { // glWeightsvARB int * weightsLen = (int *) bp; bp += 4; - GLshort * weights = (GLshort *) bp; bp += (8-((*weightsLen*2+4)%8))%8; + GLshort * weights = (GLshort *) bp; bp += *weightsLen*2 + (8-((*weightsLen*2+4)%8))%8; weglWeightsvARB(*weightsLen,weights); }; break; -case 5597: { // glWeightivARB +case 5598: { // glWeightivARB int * weightsLen = (int *) bp; bp += 4; - GLint * weights = (GLint *) bp; bp += (8-((*weightsLen*4+4)%8))%8; + GLint * weights = (GLint *) bp; bp += *weightsLen*4 + (8-((*weightsLen*4+4)%8))%8; weglWeightivARB(*weightsLen,weights); }; break; -case 5598: { // glWeightfvARB +case 5599: { // glWeightfvARB int * weightsLen = (int *) bp; bp += 4; - GLfloat * weights = (GLfloat *) bp; bp += (8-((*weightsLen*4+4)%8))%8; + GLfloat * weights = (GLfloat *) bp; bp += *weightsLen*4 + (8-((*weightsLen*4+4)%8))%8; weglWeightfvARB(*weightsLen,weights); }; break; -case 5599: { // glWeightdvARB +case 5600: { // glWeightdvARB int * weightsLen = (int *) bp; bp += 8; - GLdouble * weights = (GLdouble *) bp; bp += (8-((*weightsLen*8+0)%8))%8; + GLdouble * weights = (GLdouble *) bp; bp += *weightsLen*8 + (8-((*weightsLen*8+0)%8))%8; weglWeightdvARB(*weightsLen,weights); }; break; -case 5600: { // glWeightubvARB +case 5601: { // glWeightubvARB int * weightsLen = (int *) bp; bp += 4; - GLubyte * weights = (GLubyte *) bp; bp += (8-((*weightsLen*1+4)%8))%8; + GLubyte * weights = (GLubyte *) bp; bp += *weightsLen*1 + (8-((*weightsLen*1+4)%8))%8; weglWeightubvARB(*weightsLen,weights); }; break; -case 5601: { // glWeightusvARB +case 5602: { // glWeightusvARB int * weightsLen = (int *) bp; bp += 4; - GLushort * weights = (GLushort *) bp; bp += (8-((*weightsLen*2+4)%8))%8; + GLushort * weights = (GLushort *) bp; bp += *weightsLen*2 + (8-((*weightsLen*2+4)%8))%8; weglWeightusvARB(*weightsLen,weights); }; break; -case 5602: { // glWeightuivARB +case 5603: { // glWeightuivARB int * weightsLen = (int *) bp; bp += 4; - GLuint * weights = (GLuint *) bp; bp += (8-((*weightsLen*4+4)%8))%8; + GLuint * weights = (GLuint *) bp; bp += *weightsLen*4 + (8-((*weightsLen*4+4)%8))%8; weglWeightuivARB(*weightsLen,weights); }; break; -case 5603: { // glVertexBlendARB +case 5604: { // glVertexBlendARB GLint *count = (GLint *) bp; bp += 4; weglVertexBlendARB(*count); }; break; -case 5604: { // glCurrentPaletteMatrixARB +case 5605: { // glCurrentPaletteMatrixARB GLint *index = (GLint *) bp; bp += 4; weglCurrentPaletteMatrixARB(*index); }; break; -case 5605: { // glMatrixIndexubvARB +case 5606: { // glMatrixIndexubvARB int * indicesLen = (int *) bp; bp += 4; - GLubyte * indices = (GLubyte *) bp; bp += (8-((*indicesLen*1+4)%8))%8; + GLubyte * indices = (GLubyte *) bp; bp += *indicesLen*1 + (8-((*indicesLen*1+4)%8))%8; weglMatrixIndexubvARB(*indicesLen,indices); }; break; -case 5606: { // glMatrixIndexusvARB +case 5607: { // glMatrixIndexusvARB int * indicesLen = (int *) bp; bp += 4; - GLushort * indices = (GLushort *) bp; bp += (8-((*indicesLen*2+4)%8))%8; + GLushort * indices = (GLushort *) bp; bp += *indicesLen*2 + (8-((*indicesLen*2+4)%8))%8; weglMatrixIndexusvARB(*indicesLen,indices); }; break; -case 5607: { // glMatrixIndexuivARB +case 5608: { // glMatrixIndexuivARB int * indicesLen = (int *) bp; bp += 4; - GLuint * indices = (GLuint *) bp; bp += (8-((*indicesLen*4+4)%8))%8; + GLuint * indices = (GLuint *) bp; bp += *indicesLen*4 + (8-((*indicesLen*4+4)%8))%8; weglMatrixIndexuivARB(*indicesLen,indices); }; break; -case 5608: { // glProgramStringARB +case 5609: { // glProgramStringARB GLenum *target = (GLenum *) bp; bp += 4; GLenum *format = (GLenum *) bp; bp += 4; GLvoid *string = (GLvoid *) bp; int stringLen[1] = {(int)strlen((char *)string)}; bp += stringLen[0]+1+((8-((1+stringLen[0]+0)%8))%8); weglProgramStringARB(*target,*format,*stringLen,string); }; break; -case 5609: { // glBindProgramARB +case 5610: { // glBindProgramARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *program = (GLuint *) bp; bp += 4; weglBindProgramARB(*target,*program); }; break; -case 5610: { // glDeleteProgramsARB +case 5611: { // glDeleteProgramsARB int * programsLen = (int *) bp; bp += 4; - GLuint * programs = (GLuint *) bp; bp += (8-((*programsLen*4+4)%8))%8; + GLuint * programs = (GLuint *) bp; bp += *programsLen*4 + (8-((*programsLen*4+4)%8))%8; weglDeleteProgramsARB(*programsLen,programs); }; break; -case 5611: { // glGenProgramsARB +case 5612: { // glGenProgramsARB GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *programs; programs = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -4577,7 +4585,7 @@ case 5611: { // glGenProgramsARB driver_free(rt); driver_free(programs); }; break; -case 5612: { // glProgramEnvParameter4dARB +case 5613: { // glProgramEnvParameter4dARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; @@ -4586,13 +4594,13 @@ case 5612: { // glProgramEnvParameter4dARB GLdouble *w = (GLdouble *) bp; bp += 8; weglProgramEnvParameter4dARB(*target,*index,*x,*y,*z,*w); }; break; -case 5613: { // glProgramEnvParameter4dvARB +case 5614: { // glProgramEnvParameter4dvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble * params = (GLdouble *) bp; bp += 32; weglProgramEnvParameter4dvARB(*target,*index,params); }; break; -case 5614: { // glProgramEnvParameter4fARB +case 5615: { // glProgramEnvParameter4fARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat *x = (GLfloat *) bp; bp += 4; @@ -4601,13 +4609,13 @@ case 5614: { // glProgramEnvParameter4fARB GLfloat *w = (GLfloat *) bp; bp += 4; weglProgramEnvParameter4fARB(*target,*index,*x,*y,*z,*w); }; break; -case 5615: { // glProgramEnvParameter4fvARB +case 5616: { // glProgramEnvParameter4fvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat * params = (GLfloat *) bp; bp += 16; weglProgramEnvParameter4fvARB(*target,*index,params); }; break; -case 5616: { // glProgramLocalParameter4dARB +case 5617: { // glProgramLocalParameter4dARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; @@ -4616,13 +4624,13 @@ case 5616: { // glProgramLocalParameter4dARB GLdouble *w = (GLdouble *) bp; bp += 8; weglProgramLocalParameter4dARB(*target,*index,*x,*y,*z,*w); }; break; -case 5617: { // glProgramLocalParameter4dvARB +case 5618: { // glProgramLocalParameter4dvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble * params = (GLdouble *) bp; bp += 32; weglProgramLocalParameter4dvARB(*target,*index,params); }; break; -case 5618: { // glProgramLocalParameter4fARB +case 5619: { // glProgramLocalParameter4fARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat *x = (GLfloat *) bp; bp += 4; @@ -4631,13 +4639,13 @@ case 5618: { // glProgramLocalParameter4fARB GLfloat *w = (GLfloat *) bp; bp += 4; weglProgramLocalParameter4fARB(*target,*index,*x,*y,*z,*w); }; break; -case 5619: { // glProgramLocalParameter4fvARB +case 5620: { // glProgramLocalParameter4fvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat * params = (GLfloat *) bp; bp += 16; weglProgramLocalParameter4fvARB(*target,*index,params); }; break; -case 5620: { // glGetProgramEnvParameterdvARB +case 5621: { // glGetProgramEnvParameterdvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble params[4] = {0.0,0.0,0.0,0.0}; @@ -4653,7 +4661,7 @@ case 5620: { // glGetProgramEnvParameterdvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5621: { // glGetProgramEnvParameterfvARB +case 5622: { // glGetProgramEnvParameterfvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat params[4] = {0.0,0.0,0.0,0.0}; @@ -4670,7 +4678,7 @@ case 5621: { // glGetProgramEnvParameterfvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5622: { // glGetProgramLocalParameterdvARB +case 5623: { // glGetProgramLocalParameterdvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble params[4] = {0.0,0.0,0.0,0.0}; @@ -4686,7 +4694,7 @@ case 5622: { // glGetProgramLocalParameterdvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5623: { // glGetProgramLocalParameterfvARB +case 5624: { // glGetProgramLocalParameterfvARB GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat params[4] = {0.0,0.0,0.0,0.0}; @@ -4703,7 +4711,7 @@ case 5623: { // glGetProgramLocalParameterfvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5624: { // glGetProgramStringARB +case 5625: { // glGetProgramStringARB GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLvoid *string = (GLvoid *) bins[0]; @@ -4714,7 +4722,7 @@ case 5624: { // glGetProgramStringARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5625: { // glGetBufferParameterivARB +case 5626: { // glGetBufferParameterivARB GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -4742,11 +4750,11 @@ case 5625: { // glGetBufferParameterivARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5626: { // glDeleteObjectARB +case 5627: { // glDeleteObjectARB GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglDeleteObjectARB(obj); }; break; -case 5627: { // glGetHandleARB +case 5628: { // glGetHandleARB GLenum *pname = (GLenum *) bp; bp += 4; GLhandleARB result = weglGetHandleARB(*pname); int AP = 0; ErlDrvTermData rt[6]; @@ -4755,12 +4763,12 @@ case 5627: { // glGetHandleARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5628: { // glDetachObjectARB +case 5629: { // glDetachObjectARB GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLhandleARB attachedObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglDetachObjectARB(containerObj,attachedObj); }; break; -case 5629: { // glCreateShaderObjectARB +case 5630: { // glCreateShaderObjectARB GLenum *shaderType = (GLenum *) bp; bp += 4; GLhandleARB result = weglCreateShaderObjectARB(*shaderType); int AP = 0; ErlDrvTermData rt[6]; @@ -4769,7 +4777,7 @@ case 5629: { // glCreateShaderObjectARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5630: { // glShaderSourceARB +case 5631: { // glShaderSourceARB GLhandleARB shaderObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; int * stringLen = (int *) bp; bp += 4; int * stringTotSize = (int *) bp; bp += 4; @@ -4781,11 +4789,11 @@ case 5630: { // glShaderSourceARB weglShaderSourceARB(shaderObj,*stringLen,(const GLchar **) string,NULL); driver_free(string); }; break; -case 5631: { // glCompileShaderARB +case 5632: { // glCompileShaderARB GLhandleARB shaderObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglCompileShaderARB(shaderObj); }; break; -case 5632: { // glCreateProgramObjectARB +case 5633: { // glCreateProgramObjectARB GLhandleARB result = weglCreateProgramObjectARB(); int AP = 0; ErlDrvTermData rt[6]; rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_egl_result_"); @@ -4793,24 +4801,24 @@ case 5632: { // glCreateProgramObjectARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5633: { // glAttachObjectARB +case 5634: { // glAttachObjectARB GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglAttachObjectARB(containerObj,obj); }; break; -case 5634: { // glLinkProgramARB +case 5635: { // glLinkProgramARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglLinkProgramARB(programObj); }; break; -case 5635: { // glUseProgramObjectARB +case 5636: { // glUseProgramObjectARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglUseProgramObjectARB(programObj); }; break; -case 5636: { // glValidateProgramARB +case 5637: { // glValidateProgramARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; weglValidateProgramARB(programObj); }; break; -case 5637: { // glGetObjectParameterfvARB +case 5638: { // glGetObjectParameterfvARB GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLenum *pname = (GLenum *) bp; bp += 4; GLfloat params[1] = {0.0}; @@ -4822,7 +4830,7 @@ case 5637: { // glGetObjectParameterfvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5638: { // glGetObjectParameterivARB +case 5639: { // glGetObjectParameterivARB GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -4833,7 +4841,7 @@ case 5638: { // glGetObjectParameterivARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5639: { // glGetInfoLogARB +case 5640: { // glGetInfoLogARB GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLsizei *maxLength = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -4847,7 +4855,7 @@ case 5639: { // glGetInfoLogARB driver_send_term(port,caller,rt,AP); driver_free(infoLog); }; break; -case 5640: { // glGetAttachedObjectsARB +case 5641: { // glGetAttachedObjectsARB GLhandleARB containerObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLsizei *maxCount = (GLsizei *) bp; bp += 4; GLsizei count[1] = {0}; @@ -4865,7 +4873,7 @@ case 5640: { // glGetAttachedObjectsARB driver_free(rt); driver_free(obj); }; break; -case 5641: { // glGetUniformLocationARB +case 5642: { // glGetUniformLocationARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); @@ -4876,7 +4884,7 @@ case 5641: { // glGetUniformLocationARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5642: { // glGetActiveUniformARB +case 5643: { // glGetActiveUniformARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLuint *index = (GLuint *) bp; bp += 4; GLsizei *maxLength = (GLsizei *) bp; bp += 4; @@ -4896,7 +4904,7 @@ case 5642: { // glGetActiveUniformARB driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5643: { // glGetUniformfvARB +case 5644: { // glGetUniformfvARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLint *location = (GLint *) bp; bp += 4; GLfloat params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; @@ -4925,7 +4933,7 @@ case 5643: { // glGetUniformfvARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5644: { // glGetUniformivARB +case 5645: { // glGetUniformivARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLint *location = (GLint *) bp; bp += 4; GLint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -4953,7 +4961,7 @@ case 5644: { // glGetUniformivARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5645: { // glGetShaderSourceARB +case 5646: { // glGetShaderSourceARB GLhandleARB obj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLsizei *maxLength = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -4967,14 +4975,14 @@ case 5645: { // glGetShaderSourceARB driver_send_term(port,caller,rt,AP); driver_free(source); }; break; -case 5646: { // glBindAttribLocationARB +case 5647: { // glBindAttribLocationARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLuint *index = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); weglBindAttribLocationARB(programObj,*index,name); }; break; -case 5647: { // glGetActiveAttribARB +case 5648: { // glGetActiveAttribARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLuint *index = (GLuint *) bp; bp += 4; GLsizei *maxLength = (GLsizei *) bp; bp += 4; @@ -4994,7 +5002,7 @@ case 5647: { // glGetActiveAttribARB driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5648: { // glGetAttribLocationARB +case 5649: { // glGetAttribLocationARB GLhandleARB programObj = (GLhandleARB) * (GLuint64EXT *) bp; bp += 8; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); @@ -5005,7 +5013,7 @@ case 5648: { // glGetAttribLocationARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5649: { // glIsRenderbuffer +case 5650: { // glIsRenderbuffer GLuint *renderbuffer = (GLuint *) bp; bp += 4; GLboolean result = weglIsRenderbuffer(*renderbuffer); int AP = 0; ErlDrvTermData rt[6]; @@ -5014,17 +5022,17 @@ case 5649: { // glIsRenderbuffer rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5650: { // glBindRenderbuffer +case 5651: { // glBindRenderbuffer GLenum *target = (GLenum *) bp; bp += 4; GLuint *renderbuffer = (GLuint *) bp; bp += 4; weglBindRenderbuffer(*target,*renderbuffer); }; break; -case 5651: { // glDeleteRenderbuffers +case 5652: { // glDeleteRenderbuffers int * renderbuffersLen = (int *) bp; bp += 4; - GLuint * renderbuffers = (GLuint *) bp; bp += (8-((*renderbuffersLen*4+4)%8))%8; + GLuint * renderbuffers = (GLuint *) bp; bp += *renderbuffersLen*4 + (8-((*renderbuffersLen*4+4)%8))%8; weglDeleteRenderbuffers(*renderbuffersLen,renderbuffers); }; break; -case 5652: { // glGenRenderbuffers +case 5653: { // glGenRenderbuffers GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *renderbuffers; renderbuffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -5040,14 +5048,14 @@ case 5652: { // glGenRenderbuffers driver_free(rt); driver_free(renderbuffers); }; break; -case 5653: { // glRenderbufferStorage +case 5654: { // glRenderbufferStorage GLenum *target = (GLenum *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; GLsizei *width = (GLsizei *) bp; bp += 4; GLsizei *height = (GLsizei *) bp; bp += 4; weglRenderbufferStorage(*target,*internalformat,*width,*height); }; break; -case 5654: { // glGetRenderbufferParameteriv +case 5655: { // glGetRenderbufferParameteriv GLenum *target = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -5058,7 +5066,7 @@ case 5654: { // glGetRenderbufferParameteriv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5655: { // glIsFramebuffer +case 5656: { // glIsFramebuffer GLuint *framebuffer = (GLuint *) bp; bp += 4; GLboolean result = weglIsFramebuffer(*framebuffer); int AP = 0; ErlDrvTermData rt[6]; @@ -5067,17 +5075,17 @@ case 5655: { // glIsFramebuffer rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5656: { // glBindFramebuffer +case 5657: { // glBindFramebuffer GLenum *target = (GLenum *) bp; bp += 4; GLuint *framebuffer = (GLuint *) bp; bp += 4; weglBindFramebuffer(*target,*framebuffer); }; break; -case 5657: { // glDeleteFramebuffers +case 5658: { // glDeleteFramebuffers int * framebuffersLen = (int *) bp; bp += 4; - GLuint * framebuffers = (GLuint *) bp; bp += (8-((*framebuffersLen*4+4)%8))%8; + GLuint * framebuffers = (GLuint *) bp; bp += *framebuffersLen*4 + (8-((*framebuffersLen*4+4)%8))%8; weglDeleteFramebuffers(*framebuffersLen,framebuffers); }; break; -case 5658: { // glGenFramebuffers +case 5659: { // glGenFramebuffers GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *framebuffers; framebuffers = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -5093,7 +5101,7 @@ case 5658: { // glGenFramebuffers driver_free(rt); driver_free(framebuffers); }; break; -case 5659: { // glCheckFramebufferStatus +case 5660: { // glCheckFramebufferStatus GLenum *target = (GLenum *) bp; bp += 4; GLenum result = weglCheckFramebufferStatus(*target); int AP = 0; ErlDrvTermData rt[6]; @@ -5102,7 +5110,7 @@ case 5659: { // glCheckFramebufferStatus rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5660: { // glFramebufferTexture1D +case 5661: { // glFramebufferTexture1D GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLenum *textarget = (GLenum *) bp; bp += 4; @@ -5110,7 +5118,7 @@ case 5660: { // glFramebufferTexture1D GLint *level = (GLint *) bp; bp += 4; weglFramebufferTexture1D(*target,*attachment,*textarget,*texture,*level); }; break; -case 5661: { // glFramebufferTexture2D +case 5662: { // glFramebufferTexture2D GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLenum *textarget = (GLenum *) bp; bp += 4; @@ -5118,7 +5126,7 @@ case 5661: { // glFramebufferTexture2D GLint *level = (GLint *) bp; bp += 4; weglFramebufferTexture2D(*target,*attachment,*textarget,*texture,*level); }; break; -case 5662: { // glFramebufferTexture3D +case 5663: { // glFramebufferTexture3D GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLenum *textarget = (GLenum *) bp; bp += 4; @@ -5127,14 +5135,14 @@ case 5662: { // glFramebufferTexture3D GLint *zoffset = (GLint *) bp; bp += 4; weglFramebufferTexture3D(*target,*attachment,*textarget,*texture,*level,*zoffset); }; break; -case 5663: { // glFramebufferRenderbuffer +case 5664: { // glFramebufferRenderbuffer GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLenum *renderbuffertarget = (GLenum *) bp; bp += 4; GLuint *renderbuffer = (GLuint *) bp; bp += 4; weglFramebufferRenderbuffer(*target,*attachment,*renderbuffertarget,*renderbuffer); }; break; -case 5664: { // glGetFramebufferAttachmentParameteriv +case 5665: { // glGetFramebufferAttachmentParameteriv GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; @@ -5146,11 +5154,11 @@ case 5664: { // glGetFramebufferAttachmentParameteriv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5665: { // glGenerateMipmap +case 5666: { // glGenerateMipmap GLenum *target = (GLenum *) bp; bp += 4; weglGenerateMipmap(*target); }; break; -case 5666: { // glBlitFramebuffer +case 5667: { // glBlitFramebuffer GLint *srcX0 = (GLint *) bp; bp += 4; GLint *srcY0 = (GLint *) bp; bp += 4; GLint *srcX1 = (GLint *) bp; bp += 4; @@ -5163,7 +5171,7 @@ case 5666: { // glBlitFramebuffer GLenum *filter = (GLenum *) bp; bp += 4; weglBlitFramebuffer(*srcX0,*srcY0,*srcX1,*srcY1,*dstX0,*dstY0,*dstX1,*dstY1,*mask,*filter); }; break; -case 5667: { // glRenderbufferStorageMultisample +case 5668: { // glRenderbufferStorageMultisample GLenum *target = (GLenum *) bp; bp += 4; GLsizei *samples = (GLsizei *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; @@ -5171,7 +5179,7 @@ case 5667: { // glRenderbufferStorageMultisample GLsizei *height = (GLsizei *) bp; bp += 4; weglRenderbufferStorageMultisample(*target,*samples,*internalformat,*width,*height); }; break; -case 5668: { // glFramebufferTextureLayer +case 5669: { // glFramebufferTextureLayer GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLuint *texture = (GLuint *) bp; bp += 4; @@ -5179,7 +5187,7 @@ case 5668: { // glFramebufferTextureLayer GLint *layer = (GLint *) bp; bp += 4; weglFramebufferTextureLayer(*target,*attachment,*texture,*level,*layer); }; break; -case 5669: { // glFramebufferTextureFaceARB +case 5670: { // glFramebufferTextureFaceARB GLenum *target = (GLenum *) bp; bp += 4; GLenum *attachment = (GLenum *) bp; bp += 4; GLuint *texture = (GLuint *) bp; bp += 4; @@ -5187,23 +5195,23 @@ case 5669: { // glFramebufferTextureFaceARB GLenum *face = (GLenum *) bp; bp += 4; weglFramebufferTextureFaceARB(*target,*attachment,*texture,*level,*face); }; break; -case 5670: { // glFlushMappedBufferRange +case 5671: { // glFlushMappedBufferRange GLenum *target = (GLenum *) bp; bp += 4; bp += 4; GLintptr offset = (GLintptr) * (GLuint64EXT *) bp; bp += 8; GLsizeiptr length = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8; weglFlushMappedBufferRange(*target,offset,length); }; break; -case 5671: { // glBindVertexArray +case 5672: { // glBindVertexArray GLuint *array = (GLuint *) bp; bp += 4; weglBindVertexArray(*array); }; break; -case 5672: { // glDeleteVertexArrays +case 5673: { // glDeleteVertexArrays int * arraysLen = (int *) bp; bp += 4; - GLuint * arrays = (GLuint *) bp; bp += (8-((*arraysLen*4+4)%8))%8; + GLuint * arrays = (GLuint *) bp; bp += *arraysLen*4 + (8-((*arraysLen*4+4)%8))%8; weglDeleteVertexArrays(*arraysLen,arrays); }; break; -case 5673: { // glGenVertexArrays +case 5674: { // glGenVertexArrays GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *arrays; arrays = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -5219,7 +5227,7 @@ case 5673: { // glGenVertexArrays driver_free(rt); driver_free(arrays); }; break; -case 5674: { // glIsVertexArray +case 5675: { // glIsVertexArray GLuint *array = (GLuint *) bp; bp += 4; GLboolean result = weglIsVertexArray(*array); int AP = 0; ErlDrvTermData rt[6]; @@ -5228,7 +5236,7 @@ case 5674: { // glIsVertexArray rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5675: { // glGetUniformIndices +case 5676: { // glGetUniformIndices GLuint *program = (GLuint *) bp; bp += 4; int * uniformNamesLen = (int *) bp; bp += 4; int * uniformNamesTotSize = (int *) bp; bp += 4; @@ -5252,10 +5260,10 @@ case 5675: { // glGetUniformIndices driver_free(uniformIndices); driver_free(uniformNames); }; break; -case 5676: { // glGetActiveUniformsiv +case 5677: { // glGetActiveUniformsiv GLuint *program = (GLuint *) bp; bp += 4; int * uniformIndicesLen = (int *) bp; bp += 4; - GLuint * uniformIndices = (GLuint *) bp; bp += (8-((*uniformIndicesLen*4+0)%8))%8; + GLuint * uniformIndices = (GLuint *) bp; bp += *uniformIndicesLen*4 + (8-((*uniformIndicesLen*4+0)%8))%8; GLenum *pname = (GLenum *) bp; bp += 4; GLint *params; params = (GLint *) driver_alloc(sizeof(GLint) * *uniformIndicesLen); @@ -5271,7 +5279,7 @@ case 5676: { // glGetActiveUniformsiv driver_free(rt); driver_free(params); }; break; -case 5677: { // glGetActiveUniformName +case 5678: { // glGetActiveUniformName GLuint *program = (GLuint *) bp; bp += 4; GLuint *uniformIndex = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -5286,7 +5294,7 @@ case 5677: { // glGetActiveUniformName driver_send_term(port,caller,rt,AP); driver_free(uniformName); }; break; -case 5678: { // glGetUniformBlockIndex +case 5679: { // glGetUniformBlockIndex GLuint *program = (GLuint *) bp; bp += 4; GLchar *uniformBlockName = (GLchar *) bp; int uniformBlockNameLen[1] = {(int)strlen((char *)uniformBlockName)}; bp += uniformBlockNameLen[0]+1+((8-((1+uniformBlockNameLen[0]+4)%8))%8); @@ -5297,7 +5305,7 @@ case 5678: { // glGetUniformBlockIndex rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5679: { // glGetActiveUniformBlockiv +case 5680: { // glGetActiveUniformBlockiv GLuint *program = (GLuint *) bp; bp += 4; GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; @@ -5309,7 +5317,7 @@ case 5679: { // glGetActiveUniformBlockiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5680: { // glGetActiveUniformBlockName +case 5681: { // glGetActiveUniformBlockName GLuint *program = (GLuint *) bp; bp += 4; GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -5324,13 +5332,13 @@ case 5680: { // glGetActiveUniformBlockName driver_send_term(port,caller,rt,AP); driver_free(uniformBlockName); }; break; -case 5681: { // glUniformBlockBinding +case 5682: { // glUniformBlockBinding GLuint *program = (GLuint *) bp; bp += 4; GLuint *uniformBlockIndex = (GLuint *) bp; bp += 4; GLuint *uniformBlockBinding = (GLuint *) bp; bp += 4; weglUniformBlockBinding(*program,*uniformBlockIndex,*uniformBlockBinding); }; break; -case 5682: { // glCopyBufferSubData +case 5683: { // glCopyBufferSubData GLenum *readTarget = (GLenum *) bp; bp += 4; GLenum *writeTarget = (GLenum *) bp; bp += 4; GLintptr readOffset = (GLintptr) * (GLuint64EXT *) bp; bp += 8; @@ -5338,7 +5346,7 @@ case 5682: { // glCopyBufferSubData GLsizeiptr size = (GLsizeiptr) * (GLuint64EXT *) bp; bp += 8; weglCopyBufferSubData(*readTarget,*writeTarget,readOffset,writeOffset,size); }; break; -case 5683: { // glDrawElementsBaseVertex +case 5684: { // glDrawElementsBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -5346,7 +5354,7 @@ case 5683: { // glDrawElementsBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawElementsBaseVertex(*mode,*count,*type,indices,*basevertex); }; break; -case 5684: { // glDrawElementsBaseVertex +case 5685: { // glDrawElementsBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -5354,7 +5362,7 @@ case 5684: { // glDrawElementsBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawElementsBaseVertex(*mode,*count,*type,indices,*basevertex); }; break; -case 5685: { // glDrawRangeElementsBaseVertex +case 5686: { // glDrawRangeElementsBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLuint *start = (GLuint *) bp; bp += 4; GLuint *end = (GLuint *) bp; bp += 4; @@ -5364,7 +5372,7 @@ case 5685: { // glDrawRangeElementsBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawRangeElementsBaseVertex(*mode,*start,*end,*count,*type,indices,*basevertex); }; break; -case 5686: { // glDrawRangeElementsBaseVertex +case 5687: { // glDrawRangeElementsBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLuint *start = (GLuint *) bp; bp += 4; GLuint *end = (GLuint *) bp; bp += 4; @@ -5374,7 +5382,7 @@ case 5686: { // glDrawRangeElementsBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawRangeElementsBaseVertex(*mode,*start,*end,*count,*type,indices,*basevertex); }; break; -case 5687: { // glDrawElementsInstancedBaseVertex +case 5688: { // glDrawElementsInstancedBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -5383,7 +5391,7 @@ case 5687: { // glDrawElementsInstancedBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawElementsInstancedBaseVertex(*mode,*count,*type,indices,*primcount,*basevertex); }; break; -case 5688: { // glDrawElementsInstancedBaseVertex +case 5689: { // glDrawElementsInstancedBaseVertex GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -5392,11 +5400,11 @@ case 5688: { // glDrawElementsInstancedBaseVertex GLint *basevertex = (GLint *) bp; bp += 4; weglDrawElementsInstancedBaseVertex(*mode,*count,*type,indices,*primcount,*basevertex); }; break; -case 5689: { // glProvokingVertex +case 5690: { // glProvokingVertex GLenum *mode = (GLenum *) bp; bp += 4; weglProvokingVertex(*mode); }; break; -case 5690: { // glFenceSync +case 5691: { // glFenceSync GLenum *condition = (GLenum *) bp; bp += 4; GLbitfield *flags = (GLbitfield *) bp; bp += 4; GLsync result = weglFenceSync(*condition,*flags); @@ -5406,7 +5414,7 @@ case 5690: { // glFenceSync rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5691: { // glIsSync +case 5692: { // glIsSync GLsync sync = (GLsync) * (GLuint64EXT *) bp; bp += 8; GLboolean result = weglIsSync(sync); int AP = 0; ErlDrvTermData rt[6]; @@ -5415,11 +5423,11 @@ case 5691: { // glIsSync rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5692: { // glDeleteSync +case 5693: { // glDeleteSync GLsync sync = (GLsync) * (GLuint64EXT *) bp; bp += 8; weglDeleteSync(sync); }; break; -case 5693: { // glClientWaitSync +case 5694: { // glClientWaitSync GLsync sync = (GLsync) * (GLuint64EXT *) bp; bp += 8; GLbitfield *flags = (GLbitfield *) bp; bp += 4; bp += 4; @@ -5431,14 +5439,14 @@ case 5693: { // glClientWaitSync rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5694: { // glWaitSync +case 5695: { // glWaitSync GLsync sync = (GLsync) * (GLuint64EXT *) bp; bp += 8; GLbitfield *flags = (GLbitfield *) bp; bp += 4; bp += 4; GLuint64 timeout = (GLuint64) * (GLuint64EXT *) bp; bp += 8; weglWaitSync(sync,*flags,timeout); }; break; -case 5695: { // glGetInteger64v +case 5696: { // glGetInteger64v GLenum *pname = (GLenum *) bp; bp += 4; GLint64 params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; weglGetInteger64v(*pname,params); @@ -5465,7 +5473,7 @@ case 5695: { // glGetInteger64v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5696: { // glGetSynciv +case 5697: { // glGetSynciv GLsync sync = (GLsync) * (GLuint64EXT *) bp; bp += 8; GLenum *pname = (GLenum *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -5484,7 +5492,7 @@ case 5696: { // glGetSynciv driver_free(rt); driver_free(values); }; break; -case 5697: { // glTexImage2DMultisample +case 5698: { // glTexImage2DMultisample GLenum *target = (GLenum *) bp; bp += 4; GLsizei *samples = (GLsizei *) bp; bp += 4; GLint *internalformat = (GLint *) bp; bp += 4; @@ -5493,7 +5501,7 @@ case 5697: { // glTexImage2DMultisample GLboolean *fixedsamplelocations = (GLboolean *) bp; bp += 1; weglTexImage2DMultisample(*target,*samples,*internalformat,*width,*height,*fixedsamplelocations); }; break; -case 5698: { // glTexImage3DMultisample +case 5699: { // glTexImage3DMultisample GLenum *target = (GLenum *) bp; bp += 4; GLsizei *samples = (GLsizei *) bp; bp += 4; GLint *internalformat = (GLint *) bp; bp += 4; @@ -5503,7 +5511,7 @@ case 5698: { // glTexImage3DMultisample GLboolean *fixedsamplelocations = (GLboolean *) bp; bp += 1; weglTexImage3DMultisample(*target,*samples,*internalformat,*width,*height,*depth,*fixedsamplelocations); }; break; -case 5699: { // glGetMultisamplefv +case 5700: { // glGetMultisamplefv GLenum *pname = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat val[2] = {0.0,0.0}; @@ -5518,12 +5526,12 @@ case 5699: { // glGetMultisamplefv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5700: { // glSampleMaski +case 5701: { // glSampleMaski GLuint *index = (GLuint *) bp; bp += 4; GLbitfield *mask = (GLbitfield *) bp; bp += 4; weglSampleMaski(*index,*mask); }; break; -case 5701: { // glNamedStringARB +case 5702: { // glNamedStringARB GLenum *type = (GLenum *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); @@ -5531,12 +5539,12 @@ case 5701: { // glNamedStringARB int stringLen[1] = {(int)strlen((char *)string)}; bp += stringLen[0]+1+((8-((1+stringLen[0]+0)%8))%8); weglNamedStringARB(*type,*nameLen,name,*stringLen,string); }; break; -case 5702: { // glDeleteNamedStringARB +case 5703: { // glDeleteNamedStringARB GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); weglDeleteNamedStringARB(*nameLen,name); }; break; -case 5703: { // glCompileShaderIncludeARB +case 5704: { // glCompileShaderIncludeARB GLuint *shader = (GLuint *) bp; bp += 4; int * pathLen = (int *) bp; bp += 4; int * pathTotSize = (int *) bp; bp += 4; @@ -5548,7 +5556,7 @@ case 5703: { // glCompileShaderIncludeARB weglCompileShaderIncludeARB(*shader,*pathLen,(const GLchar **) path,NULL); driver_free(path); }; break; -case 5704: { // glIsNamedStringARB +case 5705: { // glIsNamedStringARB GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); GLboolean result = weglIsNamedStringARB(*nameLen,name); @@ -5558,7 +5566,7 @@ case 5704: { // glIsNamedStringARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5705: { // glGetNamedStringARB +case 5706: { // glGetNamedStringARB GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); GLsizei *bufSize = (GLsizei *) bp; bp += 4; @@ -5573,7 +5581,7 @@ case 5705: { // glGetNamedStringARB driver_send_term(port,caller,rt,AP); driver_free(string); }; break; -case 5706: { // glGetNamedStringivARB +case 5707: { // glGetNamedStringivARB GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+0)%8))%8); GLenum *pname = (GLenum *) bp; bp += 4; @@ -5585,7 +5593,7 @@ case 5706: { // glGetNamedStringivARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5707: { // glBindFragDataLocationIndexed +case 5708: { // glBindFragDataLocationIndexed GLuint *program = (GLuint *) bp; bp += 4; GLuint *colorNumber = (GLuint *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; @@ -5593,7 +5601,7 @@ case 5707: { // glBindFragDataLocationIndexed int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); weglBindFragDataLocationIndexed(*program,*colorNumber,*index,name); }; break; -case 5708: { // glGetFragDataIndex +case 5709: { // glGetFragDataIndex GLuint *program = (GLuint *) bp; bp += 4; GLchar *name = (GLchar *) bp; int nameLen[1] = {(int)strlen((char *)name)}; bp += nameLen[0]+1+((8-((1+nameLen[0]+4)%8))%8); @@ -5604,7 +5612,7 @@ case 5708: { // glGetFragDataIndex rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5709: { // glGenSamplers +case 5710: { // glGenSamplers GLsizei *count = (GLsizei *) bp; bp += 4; GLuint *samplers; samplers = (GLuint *) driver_alloc(sizeof(GLuint) * *count); @@ -5620,12 +5628,12 @@ case 5709: { // glGenSamplers driver_free(rt); driver_free(samplers); }; break; -case 5710: { // glDeleteSamplers +case 5711: { // glDeleteSamplers int * samplersLen = (int *) bp; bp += 4; - GLuint * samplers = (GLuint *) bp; bp += (8-((*samplersLen*4+4)%8))%8; + GLuint * samplers = (GLuint *) bp; bp += *samplersLen*4 + (8-((*samplersLen*4+4)%8))%8; weglDeleteSamplers(*samplersLen,samplers); }; break; -case 5711: { // glIsSampler +case 5712: { // glIsSampler GLuint *sampler = (GLuint *) bp; bp += 4; GLboolean result = weglIsSampler(*sampler); int AP = 0; ErlDrvTermData rt[6]; @@ -5634,52 +5642,52 @@ case 5711: { // glIsSampler rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5712: { // glBindSampler +case 5713: { // glBindSampler GLuint *unit = (GLuint *) bp; bp += 4; GLuint *sampler = (GLuint *) bp; bp += 4; weglBindSampler(*unit,*sampler); }; break; -case 5713: { // glSamplerParameteri +case 5714: { // glSamplerParameteri GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint *param = (GLint *) bp; bp += 4; weglSamplerParameteri(*sampler,*pname,*param); }; break; -case 5714: { // glSamplerParameteriv +case 5715: { // glSamplerParameteriv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int * paramLen = (int *) bp; bp += 4; - GLint * param = (GLint *) bp; bp += (8-((*paramLen*4+4)%8))%8; + GLint * param = (GLint *) bp; bp += *paramLen*4 + (8-((*paramLen*4+4)%8))%8; weglSamplerParameteriv(*sampler,*pname,param); }; break; -case 5715: { // glSamplerParameterf +case 5716: { // glSamplerParameterf GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLfloat *param = (GLfloat *) bp; bp += 4; weglSamplerParameterf(*sampler,*pname,*param); }; break; -case 5716: { // glSamplerParameterfv +case 5717: { // glSamplerParameterfv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int * paramLen = (int *) bp; bp += 4; - GLfloat * param = (GLfloat *) bp; bp += (8-((*paramLen*4+4)%8))%8; + GLfloat * param = (GLfloat *) bp; bp += *paramLen*4 + (8-((*paramLen*4+4)%8))%8; weglSamplerParameterfv(*sampler,*pname,param); }; break; -case 5717: { // glSamplerParameterIiv +case 5718: { // glSamplerParameterIiv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int * paramLen = (int *) bp; bp += 4; - GLint * param = (GLint *) bp; bp += (8-((*paramLen*4+4)%8))%8; + GLint * param = (GLint *) bp; bp += *paramLen*4 + (8-((*paramLen*4+4)%8))%8; weglSamplerParameterIiv(*sampler,*pname,param); }; break; -case 5718: { // glSamplerParameterIuiv +case 5719: { // glSamplerParameterIuiv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; int * paramLen = (int *) bp; bp += 4; - GLuint * param = (GLuint *) bp; bp += (8-((*paramLen*4+4)%8))%8; + GLuint * param = (GLuint *) bp; bp += *paramLen*4 + (8-((*paramLen*4+4)%8))%8; weglSamplerParameterIuiv(*sampler,*pname,param); }; break; -case 5719: { // glGetSamplerParameteriv +case 5720: { // glGetSamplerParameteriv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[4] = {0,0,0,0}; @@ -5695,7 +5703,7 @@ case 5719: { // glGetSamplerParameteriv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5720: { // glGetSamplerParameterIiv +case 5721: { // glGetSamplerParameterIiv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[4] = {0,0,0,0}; @@ -5711,7 +5719,7 @@ case 5720: { // glGetSamplerParameterIiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5721: { // glGetSamplerParameterfv +case 5722: { // glGetSamplerParameterfv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLfloat params[4] = {0.0,0.0,0.0,0.0}; @@ -5728,7 +5736,7 @@ case 5721: { // glGetSamplerParameterfv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5722: { // glGetSamplerParameterIuiv +case 5723: { // glGetSamplerParameterIuiv GLuint *sampler = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLuint params[4] = {0,0,0,0}; @@ -5744,12 +5752,12 @@ case 5722: { // glGetSamplerParameterIuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5723: { // glQueryCounter +case 5724: { // glQueryCounter GLuint *id = (GLuint *) bp; bp += 4; GLenum *target = (GLenum *) bp; bp += 4; weglQueryCounter(*id,*target); }; break; -case 5724: { // glGetQueryObjecti64v +case 5725: { // glGetQueryObjecti64v GLuint *id = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint64 params[1] = {0}; @@ -5760,7 +5768,7 @@ case 5724: { // glGetQueryObjecti64v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5725: { // glGetQueryObjectui64v +case 5726: { // glGetQueryObjectui64v GLuint *id = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLuint64 params[1] = {0}; @@ -5771,42 +5779,42 @@ case 5725: { // glGetQueryObjectui64v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5726: { // glDrawArraysIndirect +case 5727: { // glDrawArraysIndirect GLenum *mode = (GLenum *) bp; bp += 4; GLvoid *indirect = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglDrawArraysIndirect(*mode,indirect); }; break; -case 5727: { // glDrawArraysIndirect +case 5728: { // glDrawArraysIndirect GLenum *mode = (GLenum *) bp; bp += 4; GLvoid *indirect = (GLvoid *) bins[0]; weglDrawArraysIndirect(*mode,indirect); }; break; -case 5728: { // glDrawElementsIndirect +case 5729: { // glDrawElementsIndirect GLenum *mode = (GLenum *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLvoid *indirect = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglDrawElementsIndirect(*mode,*type,indirect); }; break; -case 5729: { // glDrawElementsIndirect +case 5730: { // glDrawElementsIndirect GLenum *mode = (GLenum *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLvoid *indirect = (GLvoid *) bins[0]; weglDrawElementsIndirect(*mode,*type,indirect); }; break; -case 5730: { // glUniform1d +case 5731: { // glUniform1d GLint *location = (GLint *) bp; bp += 4; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; weglUniform1d(*location,*x); }; break; -case 5731: { // glUniform2d +case 5732: { // glUniform2d GLint *location = (GLint *) bp; bp += 4; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; GLdouble *y = (GLdouble *) bp; bp += 8; weglUniform2d(*location,*x,*y); }; break; -case 5732: { // glUniform3d +case 5733: { // glUniform3d GLint *location = (GLint *) bp; bp += 4; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; @@ -5814,7 +5822,7 @@ case 5732: { // glUniform3d GLdouble *z = (GLdouble *) bp; bp += 8; weglUniform3d(*location,*x,*y,*z); }; break; -case 5733: { // glUniform4d +case 5734: { // glUniform4d GLint *location = (GLint *) bp; bp += 4; bp += 4; GLdouble *x = (GLdouble *) bp; bp += 8; @@ -5823,35 +5831,35 @@ case 5733: { // glUniform4d GLdouble *w = (GLdouble *) bp; bp += 8; weglUniform4d(*location,*x,*y,*z,*w); }; break; -case 5734: { // glUniform1dv +case 5735: { // glUniform1dv GLint *location = (GLint *) bp; bp += 4; bp += 4; int * valueLen = (int *) bp; bp += 8; - GLdouble * value = (GLdouble *) bp; bp += (8-((*valueLen*8+0)%8))%8; + GLdouble * value = (GLdouble *) bp; bp += *valueLen*8 + (8-((*valueLen*8+0)%8))%8; weglUniform1dv(*location,*valueLen,value); }; break; -case 5735: { // glUniform2dv +case 5736: { // glUniform2dv GLint *location = (GLint *) bp; bp += 4; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*16; weglUniform2dv(*location,*valueLen,value); }; break; -case 5736: { // glUniform3dv +case 5737: { // glUniform3dv GLint *location = (GLint *) bp; bp += 4; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*24; weglUniform3dv(*location,*valueLen,value); }; break; -case 5737: { // glUniform4dv +case 5738: { // glUniform4dv GLint *location = (GLint *) bp; bp += 4; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*32; weglUniform4dv(*location,*valueLen,value); }; break; -case 5738: { // glUniformMatrix2dv +case 5739: { // glUniformMatrix2dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5859,7 +5867,7 @@ case 5738: { // glUniformMatrix2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*32; weglUniformMatrix2dv(*location,*valueLen,*transpose,value); }; break; -case 5739: { // glUniformMatrix3dv +case 5740: { // glUniformMatrix3dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5867,7 +5875,7 @@ case 5739: { // glUniformMatrix3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*72; weglUniformMatrix3dv(*location,*valueLen,*transpose,value); }; break; -case 5740: { // glUniformMatrix4dv +case 5741: { // glUniformMatrix4dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5875,7 +5883,7 @@ case 5740: { // glUniformMatrix4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*128; weglUniformMatrix4dv(*location,*valueLen,*transpose,value); }; break; -case 5741: { // glUniformMatrix2x3dv +case 5742: { // glUniformMatrix2x3dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5883,7 +5891,7 @@ case 5741: { // glUniformMatrix2x3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*48; weglUniformMatrix2x3dv(*location,*valueLen,*transpose,value); }; break; -case 5742: { // glUniformMatrix2x4dv +case 5743: { // glUniformMatrix2x4dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5891,7 +5899,7 @@ case 5742: { // glUniformMatrix2x4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*64; weglUniformMatrix2x4dv(*location,*valueLen,*transpose,value); }; break; -case 5743: { // glUniformMatrix3x2dv +case 5744: { // glUniformMatrix3x2dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5899,7 +5907,7 @@ case 5743: { // glUniformMatrix3x2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*48; weglUniformMatrix3x2dv(*location,*valueLen,*transpose,value); }; break; -case 5744: { // glUniformMatrix3x4dv +case 5745: { // glUniformMatrix3x4dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5907,7 +5915,7 @@ case 5744: { // glUniformMatrix3x4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*96; weglUniformMatrix3x4dv(*location,*valueLen,*transpose,value); }; break; -case 5745: { // glUniformMatrix4x2dv +case 5746: { // glUniformMatrix4x2dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5915,7 +5923,7 @@ case 5745: { // glUniformMatrix4x2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*64; weglUniformMatrix4x2dv(*location,*valueLen,*transpose,value); }; break; -case 5746: { // glUniformMatrix4x3dv +case 5747: { // glUniformMatrix4x3dv GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; bp += 3; @@ -5923,7 +5931,7 @@ case 5746: { // glUniformMatrix4x3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*96; weglUniformMatrix4x3dv(*location,*valueLen,*transpose,value); }; break; -case 5747: { // glGetUniformdv +case 5748: { // glGetUniformdv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLdouble params[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; @@ -5951,7 +5959,7 @@ case 5747: { // glGetUniformdv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5748: { // glGetSubroutineUniformLocation +case 5749: { // glGetSubroutineUniformLocation GLuint *program = (GLuint *) bp; bp += 4; GLenum *shadertype = (GLenum *) bp; bp += 4; GLchar *name = (GLchar *) bp; @@ -5963,7 +5971,7 @@ case 5748: { // glGetSubroutineUniformLocation rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5749: { // glGetSubroutineIndex +case 5750: { // glGetSubroutineIndex GLuint *program = (GLuint *) bp; bp += 4; GLenum *shadertype = (GLenum *) bp; bp += 4; GLchar *name = (GLchar *) bp; @@ -5975,7 +5983,7 @@ case 5749: { // glGetSubroutineIndex rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5750: { // glGetActiveSubroutineUniformName +case 5751: { // glGetActiveSubroutineUniformName GLuint *program = (GLuint *) bp; bp += 4; GLenum *shadertype = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; @@ -5991,7 +5999,7 @@ case 5750: { // glGetActiveSubroutineUniformName driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5751: { // glGetActiveSubroutineName +case 5752: { // glGetActiveSubroutineName GLuint *program = (GLuint *) bp; bp += 4; GLenum *shadertype = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; @@ -6007,13 +6015,13 @@ case 5751: { // glGetActiveSubroutineName driver_send_term(port,caller,rt,AP); driver_free(name); }; break; -case 5752: { // glUniformSubroutinesuiv +case 5753: { // glUniformSubroutinesuiv GLenum *shadertype = (GLenum *) bp; bp += 4; int * indicesLen = (int *) bp; bp += 4; - GLuint * indices = (GLuint *) bp; bp += (8-((*indicesLen*4+0)%8))%8; + GLuint * indices = (GLuint *) bp; bp += *indicesLen*4 + (8-((*indicesLen*4+0)%8))%8; weglUniformSubroutinesuiv(*shadertype,*indicesLen,indices); }; break; -case 5753: { // glGetUniformSubroutineuiv +case 5754: { // glGetUniformSubroutineuiv GLenum *shadertype = (GLenum *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint params[16] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; @@ -6041,7 +6049,7 @@ case 5753: { // glGetUniformSubroutineuiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5754: { // glGetProgramStageiv +case 5755: { // glGetProgramStageiv GLuint *program = (GLuint *) bp; bp += 4; GLenum *shadertype = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; @@ -6053,28 +6061,28 @@ case 5754: { // glGetProgramStageiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5755: { // glPatchParameteri +case 5756: { // glPatchParameteri GLenum *pname = (GLenum *) bp; bp += 4; GLint *value = (GLint *) bp; bp += 4; weglPatchParameteri(*pname,*value); }; break; -case 5756: { // glPatchParameterfv +case 5757: { // glPatchParameterfv GLenum *pname = (GLenum *) bp; bp += 4; int * valuesLen = (int *) bp; bp += 4; - GLfloat * values = (GLfloat *) bp; bp += (8-((*valuesLen*4+0)%8))%8; + GLfloat * values = (GLfloat *) bp; bp += *valuesLen*4 + (8-((*valuesLen*4+0)%8))%8; weglPatchParameterfv(*pname,values); }; break; -case 5757: { // glBindTransformFeedback +case 5758: { // glBindTransformFeedback GLenum *target = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; weglBindTransformFeedback(*target,*id); }; break; -case 5758: { // glDeleteTransformFeedbacks +case 5759: { // glDeleteTransformFeedbacks int * idsLen = (int *) bp; bp += 4; - GLuint * ids = (GLuint *) bp; bp += (8-((*idsLen*4+4)%8))%8; + GLuint * ids = (GLuint *) bp; bp += *idsLen*4 + (8-((*idsLen*4+4)%8))%8; weglDeleteTransformFeedbacks(*idsLen,ids); }; break; -case 5759: { // glGenTransformFeedbacks +case 5760: { // glGenTransformFeedbacks GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *ids; ids = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -6090,7 +6098,7 @@ case 5759: { // glGenTransformFeedbacks driver_free(rt); driver_free(ids); }; break; -case 5760: { // glIsTransformFeedback +case 5761: { // glIsTransformFeedback GLuint *id = (GLuint *) bp; bp += 4; GLboolean result = weglIsTransformFeedback(*id); int AP = 0; ErlDrvTermData rt[6]; @@ -6099,35 +6107,35 @@ case 5760: { // glIsTransformFeedback rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5761: { // glPauseTransformFeedback +case 5762: { // glPauseTransformFeedback weglPauseTransformFeedback(); }; break; -case 5762: { // glResumeTransformFeedback +case 5763: { // glResumeTransformFeedback weglResumeTransformFeedback(); }; break; -case 5763: { // glDrawTransformFeedback +case 5764: { // glDrawTransformFeedback GLenum *mode = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; weglDrawTransformFeedback(*mode,*id); }; break; -case 5764: { // glDrawTransformFeedbackStream +case 5765: { // glDrawTransformFeedbackStream GLenum *mode = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; GLuint *stream = (GLuint *) bp; bp += 4; weglDrawTransformFeedbackStream(*mode,*id,*stream); }; break; -case 5765: { // glBeginQueryIndexed +case 5766: { // glBeginQueryIndexed GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; weglBeginQueryIndexed(*target,*index,*id); }; break; -case 5766: { // glEndQueryIndexed +case 5767: { // glEndQueryIndexed GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; weglEndQueryIndexed(*target,*index); }; break; -case 5767: { // glGetQueryIndexediv +case 5768: { // glGetQueryIndexediv GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; @@ -6139,18 +6147,18 @@ case 5767: { // glGetQueryIndexediv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5768: { // glReleaseShaderCompiler +case 5769: { // glReleaseShaderCompiler weglReleaseShaderCompiler(); }; break; -case 5769: { // glShaderBinary +case 5770: { // glShaderBinary int * shadersLen = (int *) bp; bp += 4; - GLuint * shaders = (GLuint *) bp; bp += (8-((*shadersLen*4+4)%8))%8; + GLuint * shaders = (GLuint *) bp; bp += *shadersLen*4 + (8-((*shadersLen*4+4)%8))%8; GLenum *binaryformat = (GLenum *) bp; bp += 4; GLvoid *binary = (GLvoid *) bins[0]; GLsizei binary_size = bins_sz[0]; weglShaderBinary(*shadersLen,shaders,*binaryformat,binary,binary_size); }; break; -case 5770: { // glGetShaderPrecisionFormat +case 5771: { // glGetShaderPrecisionFormat GLenum *shadertype = (GLenum *) bp; bp += 4; GLenum *precisiontype = (GLenum *) bp; bp += 4; GLint range[2] = {0,0}; @@ -6167,16 +6175,16 @@ case 5770: { // glGetShaderPrecisionFormat rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5771: { // glDepthRangef +case 5772: { // glDepthRangef GLclampf *n = (GLclampf *) bp; bp += 4; GLclampf *f = (GLclampf *) bp; bp += 4; weglDepthRangef(*n,*f); }; break; -case 5772: { // glClearDepthf +case 5773: { // glClearDepthf GLclampf *d = (GLclampf *) bp; bp += 4; weglClearDepthf(*d); }; break; -case 5773: { // glGetProgramBinary +case 5774: { // glGetProgramBinary GLuint *program = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -6192,31 +6200,31 @@ case 5773: { // glGetProgramBinary driver_send_term(port,caller,rt,AP); driver_free_binary(binary); }; break; -case 5774: { // glProgramBinary +case 5775: { // glProgramBinary GLuint *program = (GLuint *) bp; bp += 4; GLenum *binaryFormat = (GLenum *) bp; bp += 4; GLvoid *binary = (GLvoid *) bins[0]; GLsizei binary_size = bins_sz[0]; weglProgramBinary(*program,*binaryFormat,binary,binary_size); }; break; -case 5775: { // glProgramParameteri +case 5776: { // glProgramParameteri GLuint *program = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint *value = (GLint *) bp; bp += 4; weglProgramParameteri(*program,*pname,*value); }; break; -case 5776: { // glUseProgramStages +case 5777: { // glUseProgramStages GLuint *pipeline = (GLuint *) bp; bp += 4; GLbitfield *stages = (GLbitfield *) bp; bp += 4; GLuint *program = (GLuint *) bp; bp += 4; weglUseProgramStages(*pipeline,*stages,*program); }; break; -case 5777: { // glActiveShaderProgram +case 5778: { // glActiveShaderProgram GLuint *pipeline = (GLuint *) bp; bp += 4; GLuint *program = (GLuint *) bp; bp += 4; weglActiveShaderProgram(*pipeline,*program); }; break; -case 5778: { // glCreateShaderProgramv +case 5779: { // glCreateShaderProgramv GLenum *type = (GLenum *) bp; bp += 4; int * stringsLen = (int *) bp; bp += 4; int * stringsTotSize = (int *) bp; bp += 4; @@ -6233,16 +6241,16 @@ case 5778: { // glCreateShaderProgramv driver_send_term(port,caller,rt,AP); driver_free(strings); }; break; -case 5779: { // glBindProgramPipeline +case 5780: { // glBindProgramPipeline GLuint *pipeline = (GLuint *) bp; bp += 4; weglBindProgramPipeline(*pipeline); }; break; -case 5780: { // glDeleteProgramPipelines +case 5781: { // glDeleteProgramPipelines int * pipelinesLen = (int *) bp; bp += 4; - GLuint * pipelines = (GLuint *) bp; bp += (8-((*pipelinesLen*4+4)%8))%8; + GLuint * pipelines = (GLuint *) bp; bp += *pipelinesLen*4 + (8-((*pipelinesLen*4+4)%8))%8; weglDeleteProgramPipelines(*pipelinesLen,pipelines); }; break; -case 5781: { // glGenProgramPipelines +case 5782: { // glGenProgramPipelines GLsizei *n = (GLsizei *) bp; bp += 4; GLuint *pipelines; pipelines = (GLuint *) driver_alloc(sizeof(GLuint) * *n); @@ -6258,7 +6266,7 @@ case 5781: { // glGenProgramPipelines driver_free(rt); driver_free(pipelines); }; break; -case 5782: { // glIsProgramPipeline +case 5783: { // glIsProgramPipeline GLuint *pipeline = (GLuint *) bp; bp += 4; GLboolean result = weglIsProgramPipeline(*pipeline); int AP = 0; ErlDrvTermData rt[6]; @@ -6267,7 +6275,7 @@ case 5782: { // glIsProgramPipeline rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5783: { // glGetProgramPipelineiv +case 5784: { // glGetProgramPipelineiv GLuint *pipeline = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLint params[1] = {0}; @@ -6278,115 +6286,115 @@ case 5783: { // glGetProgramPipelineiv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5784: { // glProgramUniform1i +case 5785: { // glProgramUniform1i GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; weglProgramUniform1i(*program,*location,*v0); }; break; -case 5785: { // glProgramUniform1iv +case 5786: { // glProgramUniform1iv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLint * value = (GLint *) bp; bp += (8-((*valueLen*4+4)%8))%8; + GLint * value = (GLint *) bp; bp += *valueLen*4 + (8-((*valueLen*4+4)%8))%8; weglProgramUniform1iv(*program,*location,*valueLen,value); }; break; -case 5786: { // glProgramUniform1f +case 5787: { // glProgramUniform1f GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; weglProgramUniform1f(*program,*location,*v0); }; break; -case 5787: { // glProgramUniform1fv +case 5788: { // glProgramUniform1fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLfloat * value = (GLfloat *) bp; bp += (8-((*valueLen*4+4)%8))%8; + GLfloat * value = (GLfloat *) bp; bp += *valueLen*4 + (8-((*valueLen*4+4)%8))%8; weglProgramUniform1fv(*program,*location,*valueLen,value); }; break; -case 5788: { // glProgramUniform1d +case 5789: { // glProgramUniform1d GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLdouble *v0 = (GLdouble *) bp; bp += 8; weglProgramUniform1d(*program,*location,*v0); }; break; -case 5789: { // glProgramUniform1dv +case 5790: { // glProgramUniform1dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 8; - GLdouble * value = (GLdouble *) bp; bp += (8-((*valueLen*8+0)%8))%8; + GLdouble * value = (GLdouble *) bp; bp += *valueLen*8 + (8-((*valueLen*8+0)%8))%8; weglProgramUniform1dv(*program,*location,*valueLen,value); }; break; -case 5790: { // glProgramUniform1ui +case 5791: { // glProgramUniform1ui GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; weglProgramUniform1ui(*program,*location,*v0); }; break; -case 5791: { // glProgramUniform1uiv +case 5792: { // glProgramUniform1uiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int * valueLen = (int *) bp; bp += 4; - GLuint * value = (GLuint *) bp; bp += (8-((*valueLen*4+4)%8))%8; + GLuint * value = (GLuint *) bp; bp += *valueLen*4 + (8-((*valueLen*4+4)%8))%8; weglProgramUniform1uiv(*program,*location,*valueLen,value); }; break; -case 5792: { // glProgramUniform2i +case 5793: { // glProgramUniform2i GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; GLint *v1 = (GLint *) bp; bp += 4; weglProgramUniform2i(*program,*location,*v0,*v1); }; break; -case 5793: { // glProgramUniform2iv +case 5794: { // glProgramUniform2iv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*8; weglProgramUniform2iv(*program,*location,*valueLen,value); }; break; -case 5794: { // glProgramUniform2f +case 5795: { // glProgramUniform2f GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; GLfloat *v1 = (GLfloat *) bp; bp += 4; weglProgramUniform2f(*program,*location,*v0,*v1); }; break; -case 5795: { // glProgramUniform2fv +case 5796: { // glProgramUniform2fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*8; weglProgramUniform2fv(*program,*location,*valueLen,value); }; break; -case 5796: { // glProgramUniform2d +case 5797: { // glProgramUniform2d GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLdouble *v0 = (GLdouble *) bp; bp += 8; GLdouble *v1 = (GLdouble *) bp; bp += 8; weglProgramUniform2d(*program,*location,*v0,*v1); }; break; -case 5797: { // glProgramUniform2dv +case 5798: { // glProgramUniform2dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*16; weglProgramUniform2dv(*program,*location,*valueLen,value); }; break; -case 5798: { // glProgramUniform2ui +case 5799: { // glProgramUniform2ui GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; GLuint *v1 = (GLuint *) bp; bp += 4; weglProgramUniform2ui(*program,*location,*v0,*v1); }; break; -case 5799: { // glProgramUniform2uiv +case 5800: { // glProgramUniform2uiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*8; weglProgramUniform2uiv(*program,*location,*valueLen,value); }; break; -case 5800: { // glProgramUniform3i +case 5801: { // glProgramUniform3i GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; @@ -6394,14 +6402,14 @@ case 5800: { // glProgramUniform3i GLint *v2 = (GLint *) bp; bp += 4; weglProgramUniform3i(*program,*location,*v0,*v1,*v2); }; break; -case 5801: { // glProgramUniform3iv +case 5802: { // glProgramUniform3iv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*12; weglProgramUniform3iv(*program,*location,*valueLen,value); }; break; -case 5802: { // glProgramUniform3f +case 5803: { // glProgramUniform3f GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; @@ -6409,14 +6417,14 @@ case 5802: { // glProgramUniform3f GLfloat *v2 = (GLfloat *) bp; bp += 4; weglProgramUniform3f(*program,*location,*v0,*v1,*v2); }; break; -case 5803: { // glProgramUniform3fv +case 5804: { // glProgramUniform3fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*12; weglProgramUniform3fv(*program,*location,*valueLen,value); }; break; -case 5804: { // glProgramUniform3d +case 5805: { // glProgramUniform3d GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLdouble *v0 = (GLdouble *) bp; bp += 8; @@ -6424,14 +6432,14 @@ case 5804: { // glProgramUniform3d GLdouble *v2 = (GLdouble *) bp; bp += 8; weglProgramUniform3d(*program,*location,*v0,*v1,*v2); }; break; -case 5805: { // glProgramUniform3dv +case 5806: { // glProgramUniform3dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*24; weglProgramUniform3dv(*program,*location,*valueLen,value); }; break; -case 5806: { // glProgramUniform3ui +case 5807: { // glProgramUniform3ui GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; @@ -6439,14 +6447,14 @@ case 5806: { // glProgramUniform3ui GLuint *v2 = (GLuint *) bp; bp += 4; weglProgramUniform3ui(*program,*location,*v0,*v1,*v2); }; break; -case 5807: { // glProgramUniform3uiv +case 5808: { // glProgramUniform3uiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*12; weglProgramUniform3uiv(*program,*location,*valueLen,value); }; break; -case 5808: { // glProgramUniform4i +case 5809: { // glProgramUniform4i GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLint *v0 = (GLint *) bp; bp += 4; @@ -6455,14 +6463,14 @@ case 5808: { // glProgramUniform4i GLint *v3 = (GLint *) bp; bp += 4; weglProgramUniform4i(*program,*location,*v0,*v1,*v2,*v3); }; break; -case 5809: { // glProgramUniform4iv +case 5810: { // glProgramUniform4iv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLint * value = (GLint *) bp; bp += *valueLen*16; weglProgramUniform4iv(*program,*location,*valueLen,value); }; break; -case 5810: { // glProgramUniform4f +case 5811: { // glProgramUniform4f GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLfloat *v0 = (GLfloat *) bp; bp += 4; @@ -6471,14 +6479,14 @@ case 5810: { // glProgramUniform4f GLfloat *v3 = (GLfloat *) bp; bp += 4; weglProgramUniform4f(*program,*location,*v0,*v1,*v2,*v3); }; break; -case 5811: { // glProgramUniform4fv +case 5812: { // glProgramUniform4fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLfloat * value = (GLfloat *) bp; bp += *valueLen*16; weglProgramUniform4fv(*program,*location,*valueLen,value); }; break; -case 5812: { // glProgramUniform4d +case 5813: { // glProgramUniform4d GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLdouble *v0 = (GLdouble *) bp; bp += 8; @@ -6487,14 +6495,14 @@ case 5812: { // glProgramUniform4d GLdouble *v3 = (GLdouble *) bp; bp += 8; weglProgramUniform4d(*program,*location,*v0,*v1,*v2,*v3); }; break; -case 5813: { // glProgramUniform4dv +case 5814: { // glProgramUniform4dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 8; GLdouble * value = (GLdouble *) bp; bp += *valueLen*32; weglProgramUniform4dv(*program,*location,*valueLen,value); }; break; -case 5814: { // glProgramUniform4ui +case 5815: { // glProgramUniform4ui GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLuint *v0 = (GLuint *) bp; bp += 4; @@ -6503,14 +6511,14 @@ case 5814: { // glProgramUniform4ui GLuint *v3 = (GLuint *) bp; bp += 4; weglProgramUniform4ui(*program,*location,*v0,*v1,*v2,*v3); }; break; -case 5815: { // glProgramUniform4uiv +case 5816: { // glProgramUniform4uiv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; int *valueLen = (int *) bp; bp += 4; GLuint * value = (GLuint *) bp; bp += *valueLen*16; weglProgramUniform4uiv(*program,*location,*valueLen,value); }; break; -case 5816: { // glProgramUniformMatrix2fv +case 5817: { // glProgramUniformMatrix2fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6519,7 +6527,7 @@ case 5816: { // glProgramUniformMatrix2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*16; weglProgramUniformMatrix2fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5817: { // glProgramUniformMatrix3fv +case 5818: { // glProgramUniformMatrix3fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6528,7 +6536,7 @@ case 5817: { // glProgramUniformMatrix3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*36; weglProgramUniformMatrix3fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5818: { // glProgramUniformMatrix4fv +case 5819: { // glProgramUniformMatrix4fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6537,7 +6545,7 @@ case 5818: { // glProgramUniformMatrix4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*64; weglProgramUniformMatrix4fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5819: { // glProgramUniformMatrix2dv +case 5820: { // glProgramUniformMatrix2dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6546,7 +6554,7 @@ case 5819: { // glProgramUniformMatrix2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*32; weglProgramUniformMatrix2dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5820: { // glProgramUniformMatrix3dv +case 5821: { // glProgramUniformMatrix3dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6555,7 +6563,7 @@ case 5820: { // glProgramUniformMatrix3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*72; weglProgramUniformMatrix3dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5821: { // glProgramUniformMatrix4dv +case 5822: { // glProgramUniformMatrix4dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6564,7 +6572,7 @@ case 5821: { // glProgramUniformMatrix4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*128; weglProgramUniformMatrix4dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5822: { // glProgramUniformMatrix2x3fv +case 5823: { // glProgramUniformMatrix2x3fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6573,7 +6581,7 @@ case 5822: { // glProgramUniformMatrix2x3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*24; weglProgramUniformMatrix2x3fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5823: { // glProgramUniformMatrix3x2fv +case 5824: { // glProgramUniformMatrix3x2fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6582,7 +6590,7 @@ case 5823: { // glProgramUniformMatrix3x2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*24; weglProgramUniformMatrix3x2fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5824: { // glProgramUniformMatrix2x4fv +case 5825: { // glProgramUniformMatrix2x4fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6591,7 +6599,7 @@ case 5824: { // glProgramUniformMatrix2x4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*32; weglProgramUniformMatrix2x4fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5825: { // glProgramUniformMatrix4x2fv +case 5826: { // glProgramUniformMatrix4x2fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6600,7 +6608,7 @@ case 5825: { // glProgramUniformMatrix4x2fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*32; weglProgramUniformMatrix4x2fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5826: { // glProgramUniformMatrix3x4fv +case 5827: { // glProgramUniformMatrix3x4fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6609,7 +6617,7 @@ case 5826: { // glProgramUniformMatrix3x4fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*48; weglProgramUniformMatrix3x4fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5827: { // glProgramUniformMatrix4x3fv +case 5828: { // glProgramUniformMatrix4x3fv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6618,7 +6626,7 @@ case 5827: { // glProgramUniformMatrix4x3fv GLfloat * value = (GLfloat *) bp; bp += *valueLen*48; weglProgramUniformMatrix4x3fv(*program,*location,*valueLen,*transpose,value); }; break; -case 5828: { // glProgramUniformMatrix2x3dv +case 5829: { // glProgramUniformMatrix2x3dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6627,7 +6635,7 @@ case 5828: { // glProgramUniformMatrix2x3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*48; weglProgramUniformMatrix2x3dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5829: { // glProgramUniformMatrix3x2dv +case 5830: { // glProgramUniformMatrix3x2dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6636,7 +6644,7 @@ case 5829: { // glProgramUniformMatrix3x2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*48; weglProgramUniformMatrix3x2dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5830: { // glProgramUniformMatrix2x4dv +case 5831: { // glProgramUniformMatrix2x4dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6645,7 +6653,7 @@ case 5830: { // glProgramUniformMatrix2x4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*64; weglProgramUniformMatrix2x4dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5831: { // glProgramUniformMatrix4x2dv +case 5832: { // glProgramUniformMatrix4x2dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6654,7 +6662,7 @@ case 5831: { // glProgramUniformMatrix4x2dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*64; weglProgramUniformMatrix4x2dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5832: { // glProgramUniformMatrix3x4dv +case 5833: { // glProgramUniformMatrix3x4dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6663,7 +6671,7 @@ case 5832: { // glProgramUniformMatrix3x4dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*96; weglProgramUniformMatrix3x4dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5833: { // glProgramUniformMatrix4x3dv +case 5834: { // glProgramUniformMatrix4x3dv GLuint *program = (GLuint *) bp; bp += 4; GLint *location = (GLint *) bp; bp += 4; GLboolean *transpose = (GLboolean *) bp; bp += 1; @@ -6672,11 +6680,11 @@ case 5833: { // glProgramUniformMatrix4x3dv GLdouble * value = (GLdouble *) bp; bp += *valueLen*96; weglProgramUniformMatrix4x3dv(*program,*location,*valueLen,*transpose,value); }; break; -case 5834: { // glValidateProgramPipeline +case 5835: { // glValidateProgramPipeline GLuint *pipeline = (GLuint *) bp; bp += 4; weglValidateProgramPipeline(*pipeline); }; break; -case 5835: { // glGetProgramPipelineInfoLog +case 5836: { // glGetProgramPipelineInfoLog GLuint *pipeline = (GLuint *) bp; bp += 4; GLsizei *bufSize = (GLsizei *) bp; bp += 4; GLsizei length[1] = {0}; @@ -6690,31 +6698,31 @@ case 5835: { // glGetProgramPipelineInfoLog driver_send_term(port,caller,rt,AP); driver_free(infoLog); }; break; -case 5836: { // glVertexAttribL1dv +case 5837: { // glVertexAttribL1dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttribL1dv(*index,v); }; break; -case 5837: { // glVertexAttribL2dv +case 5838: { // glVertexAttribL2dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttribL2dv(*index,v); }; break; -case 5838: { // glVertexAttribL3dv +case 5839: { // glVertexAttribL3dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttribL3dv(*index,v); }; break; -case 5839: { // glVertexAttribL4dv +case 5840: { // glVertexAttribL4dv GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLdouble *v = (GLdouble *) bp; bp += 8; weglVertexAttribL4dv(*index,v); }; break; -case 5840: { // glVertexAttribLPointer +case 5841: { // glVertexAttribLPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6722,7 +6730,7 @@ case 5840: { // glVertexAttribLPointer GLvoid *pointer = (GLvoid *) (ErlDrvSInt) * (int *) bp; bp += 4; weglVertexAttribLPointer(*index,*size,*type,*stride,pointer); }; break; -case 5841: { // glVertexAttribLPointer +case 5842: { // glVertexAttribLPointer GLuint *index = (GLuint *) bp; bp += 4; GLint *size = (GLint *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6730,7 +6738,7 @@ case 5841: { // glVertexAttribLPointer GLvoid *pointer = (GLvoid *) bins[0]; weglVertexAttribLPointer(*index,*size,*type,*stride,pointer); }; break; -case 5842: { // glGetVertexAttribLdv +case 5843: { // glGetVertexAttribLdv GLuint *index = (GLuint *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; GLdouble params[4] = {0.0,0.0,0.0,0.0}; @@ -6746,13 +6754,13 @@ case 5842: { // glGetVertexAttribLdv rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5843: { // glViewportArrayv +case 5844: { // glViewportArrayv GLuint *first = (GLuint *) bp; bp += 4; int *vLen = (int *) bp; bp += 4; GLfloat * v = (GLfloat *) bp; bp += *vLen*16; weglViewportArrayv(*first,*vLen,v); }; break; -case 5844: { // glViewportIndexedf +case 5845: { // glViewportIndexedf GLuint *index = (GLuint *) bp; bp += 4; GLfloat *x = (GLfloat *) bp; bp += 4; GLfloat *y = (GLfloat *) bp; bp += 4; @@ -6760,18 +6768,18 @@ case 5844: { // glViewportIndexedf GLfloat *h = (GLfloat *) bp; bp += 4; weglViewportIndexedf(*index,*x,*y,*w,*h); }; break; -case 5845: { // glViewportIndexedfv +case 5846: { // glViewportIndexedfv GLuint *index = (GLuint *) bp; bp += 4; GLfloat * v = (GLfloat *) bp; bp += 16; weglViewportIndexedfv(*index,v); }; break; -case 5846: { // glScissorArrayv +case 5847: { // glScissorArrayv GLuint *first = (GLuint *) bp; bp += 4; int *vLen = (int *) bp; bp += 4; GLint * v = (GLint *) bp; bp += *vLen*16; weglScissorArrayv(*first,*vLen,v); }; break; -case 5847: { // glScissorIndexed +case 5848: { // glScissorIndexed GLuint *index = (GLuint *) bp; bp += 4; GLint *left = (GLint *) bp; bp += 4; GLint *bottom = (GLint *) bp; bp += 4; @@ -6779,26 +6787,26 @@ case 5847: { // glScissorIndexed GLsizei *height = (GLsizei *) bp; bp += 4; weglScissorIndexed(*index,*left,*bottom,*width,*height); }; break; -case 5848: { // glScissorIndexedv +case 5849: { // glScissorIndexedv GLuint *index = (GLuint *) bp; bp += 4; GLint * v = (GLint *) bp; bp += 16; weglScissorIndexedv(*index,v); }; break; -case 5849: { // glDepthRangeArrayv +case 5850: { // glDepthRangeArrayv GLuint *first = (GLuint *) bp; bp += 4; bp += 4; int *vLen = (int *) bp; bp += 8; GLclampd * v = (GLclampd *) bp; bp += *vLen*16; weglDepthRangeArrayv(*first,*vLen,v); }; break; -case 5850: { // glDepthRangeIndexed +case 5851: { // glDepthRangeIndexed GLuint *index = (GLuint *) bp; bp += 4; bp += 4; GLclampd *n = (GLclampd *) bp; bp += 8; GLclampd *f = (GLclampd *) bp; bp += 8; weglDepthRangeIndexed(*index,*n,*f); }; break; -case 5851: { // glGetFloati_v +case 5852: { // glGetFloati_v GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLfloat data[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; @@ -6827,7 +6835,7 @@ case 5851: { // glGetFloati_v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5852: { // glGetDoublei_v +case 5853: { // glGetDoublei_v GLenum *target = (GLenum *) bp; bp += 4; GLuint *index = (GLuint *) bp; bp += 4; GLdouble data[16] = {0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}; @@ -6855,16 +6863,16 @@ case 5852: { // glGetDoublei_v rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5853: { // glDebugMessageControlARB +case 5854: { // glDebugMessageControlARB GLenum *source = (GLenum *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLenum *severity = (GLenum *) bp; bp += 4; int * idsLen = (int *) bp; bp += 4; - GLuint * ids = (GLuint *) bp; bp += (8-((*idsLen*4+0)%8))%8; + GLuint * ids = (GLuint *) bp; bp += *idsLen*4 + (8-((*idsLen*4+0)%8))%8; GLboolean *enabled = (GLboolean *) bp; bp += 1; weglDebugMessageControlARB(*source,*type,*severity,*idsLen,ids,*enabled); }; break; -case 5854: { // glDebugMessageInsertARB +case 5855: { // glDebugMessageInsertARB GLenum *source = (GLenum *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; @@ -6873,7 +6881,7 @@ case 5854: { // glDebugMessageInsertARB int bufLen[1] = {(int)strlen((char *)buf)}; bp += bufLen[0]+1+((8-((1+bufLen[0]+0)%8))%8); weglDebugMessageInsertARB(*source,*type,*id,*severity,*bufLen,buf); }; break; -case 5855: { // glGetDebugMessageLogARB +case 5856: { // glGetDebugMessageLogARB GLuint *count = (GLuint *) bp; bp += 4; GLsizei *bufsize = (GLsizei *) bp; bp += 4; GLenum *sources; @@ -6920,7 +6928,7 @@ case 5855: { // glGetDebugMessageLogARB driver_free(types); driver_free(sources); }; break; -case 5856: { // glGetGraphicsResetStatusARB +case 5857: { // glGetGraphicsResetStatusARB GLenum result = weglGetGraphicsResetStatusARB(); int AP = 0; ErlDrvTermData rt[6]; rt[AP++]=ERL_DRV_ATOM; rt[AP++]=driver_mk_atom((char *) "_egl_result_"); @@ -6928,7 +6936,7 @@ case 5856: { // glGetGraphicsResetStatusARB rt[AP++] = ERL_DRV_TUPLE; rt[AP++] = 2; driver_send_term(port,caller,rt,AP); }; break; -case 5857: { // glDrawArraysInstancedBaseInstance +case 5858: { // glDrawArraysInstancedBaseInstance GLenum *mode = (GLenum *) bp; bp += 4; GLint *first = (GLint *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; @@ -6936,7 +6944,7 @@ case 5857: { // glDrawArraysInstancedBaseInstance GLuint *baseinstance = (GLuint *) bp; bp += 4; weglDrawArraysInstancedBaseInstance(*mode,*first,*count,*primcount,*baseinstance); }; break; -case 5858: { // glDrawElementsInstancedBaseInstance +case 5859: { // glDrawElementsInstancedBaseInstance GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6945,7 +6953,7 @@ case 5858: { // glDrawElementsInstancedBaseInstance GLuint *baseinstance = (GLuint *) bp; bp += 4; weglDrawElementsInstancedBaseInstance(*mode,*count,*type,indices,*primcount,*baseinstance); }; break; -case 5859: { // glDrawElementsInstancedBaseInstance +case 5860: { // glDrawElementsInstancedBaseInstance GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6954,7 +6962,7 @@ case 5859: { // glDrawElementsInstancedBaseInstance GLuint *baseinstance = (GLuint *) bp; bp += 4; weglDrawElementsInstancedBaseInstance(*mode,*count,*type,indices,*primcount,*baseinstance); }; break; -case 5860: { // glDrawElementsInstancedBaseVertexBaseInstance +case 5861: { // glDrawElementsInstancedBaseVertexBaseInstance GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6964,7 +6972,7 @@ case 5860: { // glDrawElementsInstancedBaseVertexBaseInstance GLuint *baseinstance = (GLuint *) bp; bp += 4; weglDrawElementsInstancedBaseVertexBaseInstance(*mode,*count,*type,indices,*primcount,*basevertex,*baseinstance); }; break; -case 5861: { // glDrawElementsInstancedBaseVertexBaseInstance +case 5862: { // glDrawElementsInstancedBaseVertexBaseInstance GLenum *mode = (GLenum *) bp; bp += 4; GLsizei *count = (GLsizei *) bp; bp += 4; GLenum *type = (GLenum *) bp; bp += 4; @@ -6974,20 +6982,20 @@ case 5861: { // glDrawElementsInstancedBaseVertexBaseInstance GLuint *baseinstance = (GLuint *) bp; bp += 4; weglDrawElementsInstancedBaseVertexBaseInstance(*mode,*count,*type,indices,*primcount,*basevertex,*baseinstance); }; break; -case 5862: { // glDrawTransformFeedbackInstanced +case 5863: { // glDrawTransformFeedbackInstanced GLenum *mode = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; GLsizei *primcount = (GLsizei *) bp; bp += 4; weglDrawTransformFeedbackInstanced(*mode,*id,*primcount); }; break; -case 5863: { // glDrawTransformFeedbackStreamInstanced +case 5864: { // glDrawTransformFeedbackStreamInstanced GLenum *mode = (GLenum *) bp; bp += 4; GLuint *id = (GLuint *) bp; bp += 4; GLuint *stream = (GLuint *) bp; bp += 4; GLsizei *primcount = (GLsizei *) bp; bp += 4; weglDrawTransformFeedbackStreamInstanced(*mode,*id,*stream,*primcount); }; break; -case 5864: { // glGetInternalformativ +case 5865: { // glGetInternalformativ GLenum *target = (GLenum *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; GLenum *pname = (GLenum *) bp; bp += 4; @@ -7006,7 +7014,7 @@ case 5864: { // glGetInternalformativ driver_free(rt); driver_free(params); }; break; -case 5865: { // glBindImageTexture +case 5866: { // glBindImageTexture GLuint *unit = (GLuint *) bp; bp += 4; GLuint *texture = (GLuint *) bp; bp += 4; GLint *level = (GLint *) bp; bp += 4; @@ -7017,18 +7025,18 @@ case 5865: { // glBindImageTexture GLenum *format = (GLenum *) bp; bp += 4; weglBindImageTexture(*unit,*texture,*level,*layered,*layer,*access,*format); }; break; -case 5866: { // glMemoryBarrier +case 5867: { // glMemoryBarrier GLbitfield *barriers = (GLbitfield *) bp; bp += 4; weglMemoryBarrier(*barriers); }; break; -case 5867: { // glTexStorage1D +case 5868: { // glTexStorage1D GLenum *target = (GLenum *) bp; bp += 4; GLsizei *levels = (GLsizei *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; GLsizei *width = (GLsizei *) bp; bp += 4; weglTexStorage1D(*target,*levels,*internalformat,*width); }; break; -case 5868: { // glTexStorage2D +case 5869: { // glTexStorage2D GLenum *target = (GLenum *) bp; bp += 4; GLsizei *levels = (GLsizei *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; @@ -7036,7 +7044,7 @@ case 5868: { // glTexStorage2D GLsizei *height = (GLsizei *) bp; bp += 4; weglTexStorage2D(*target,*levels,*internalformat,*width,*height); }; break; -case 5869: { // glTexStorage3D +case 5870: { // glTexStorage3D GLenum *target = (GLenum *) bp; bp += 4; GLsizei *levels = (GLsizei *) bp; bp += 4; GLenum *internalformat = (GLenum *) bp; bp += 4; @@ -7045,12 +7053,12 @@ case 5869: { // glTexStorage3D GLsizei *depth = (GLsizei *) bp; bp += 4; weglTexStorage3D(*target,*levels,*internalformat,*width,*height,*depth); }; break; -case 5870: { // glDepthBoundsEXT +case 5871: { // glDepthBoundsEXT GLclampd *zmin = (GLclampd *) bp; bp += 8; GLclampd *zmax = (GLclampd *) bp; bp += 8; weglDepthBoundsEXT(*zmin,*zmax); }; break; -case 5871: { // glStencilClearTagEXT +case 5872: { // glStencilClearTagEXT GLsizei *stencilTagBits = (GLsizei *) bp; bp += 4; GLuint *stencilClearTag = (GLuint *) bp; bp += 4; weglStencilClearTagEXT(*stencilTagBits,*stencilClearTag); diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp index b6d3c2db18..01787c8a64 100644 --- a/lib/wx/c_src/gen/wxe_events.cpp +++ b/lib/wx/c_src/gen/wxe_events.cpp @@ -910,7 +910,7 @@ case 238: {// wxDropFilesEvent } else { send_res = rt.send(); if(cb->skip) event->Skip(); - if(app->recurse_level < 1) { + if(app->recurse_level < 1 && Etype->cID != 168) { app->recurse_level++; app->dispatch_cmds(); app->recurse_level--; 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..4a178ea1e4 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) -> @@ -2949,8 +2953,9 @@ callList(List) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCallLists.xml">external</a> documentation. -spec callLists(Lists) -> 'ok' when Lists :: [integer()]. callLists(Lists) -> - cast(5108, <<(length(Lists)):?GLuint, - (<< <<C:?GLuint>> || C <- Lists>>)/binary,0:(((1+length(Lists)) rem 2)*32)>>). + ListsLen = length(Lists), + cast(5108, <<ListsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Lists>>)/binary,0:(((1+ListsLen) rem 2)*32)>>). %% @doc set the display-list base for %% @@ -6945,8 +6950,9 @@ genTextures(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTextures.xml">external</a> documentation. -spec deleteTextures(Textures) -> 'ok' when Textures :: [integer()]. deleteTextures(Textures) -> - cast(5272, <<(length(Textures)):?GLuint, - (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32)>>). + TexturesLen = length(Textures), + cast(5272, <<TexturesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+TexturesLen) rem 2)*32)>>). %% @doc Bind a named texture to a texturing target %% @@ -7026,9 +7032,11 @@ bindTexture(Target,Texture) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrioritizeTextures.xml">external</a> documentation. -spec prioritizeTextures(Textures, Priorities) -> 'ok' when Textures :: [integer()],Priorities :: [clamp()]. prioritizeTextures(Textures,Priorities) -> - cast(5274, <<(length(Textures)):?GLuint, - (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32),(length(Priorities)):?GLuint, - (<< <<C:?GLclampf>> || C <- Priorities>>)/binary,0:(((1+length(Priorities)) rem 2)*32)>>). + TexturesLen = length(Textures), + PrioritiesLen = length(Priorities), + cast(5274, <<TexturesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+TexturesLen) rem 2)*32),PrioritiesLen:?GLuint, + (<< <<C:?GLclampf>> || C <- Priorities>>)/binary,0:(((1+PrioritiesLen) rem 2)*32)>>). %% @doc Determine if textures are loaded in texture memory %% @@ -7052,8 +7060,9 @@ prioritizeTextures(Textures,Priorities) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAreTexturesResident.xml">external</a> documentation. -spec areTexturesResident(Textures) -> {0|1,Residences :: [0|1]} when Textures :: [integer()]. areTexturesResident(Textures) -> - call(5275, <<(length(Textures)):?GLuint, - (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+length(Textures)) rem 2)*32)>>). + TexturesLen = length(Textures), + call(5275, <<TexturesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Textures>>)/binary,0:(((1+TexturesLen) rem 2)*32)>>). %% @doc Determine if a name corresponds to a texture %% @@ -9650,11 +9659,19 @@ blendFuncSeparate(SfactorRGB,DfactorRGB,SfactorAlpha,DfactorAlpha) -> %% %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultiDrawArrays.xml">external</a> documentation. --spec multiDrawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: [integer()],Count :: [integer()]. +-spec multiDrawArrays(Mode, First, Count) -> 'ok' when Mode :: enum(),First :: [integer()]|mem(),Count :: [integer()]|mem(). +multiDrawArrays(Mode,First,Count) when is_list(First), is_list(Count) -> + FirstLen = length(First), + CountLen = length(Count), + cast(5395, <<Mode:?GLenum,FirstLen:?GLuint, + (<< <<C:?GLint>> || C <- First>>)/binary,0:(((FirstLen) rem 2)*32),CountLen:?GLuint, + (<< <<C:?GLsizei>> || C <- Count>>)/binary,0:(((1+CountLen) rem 2)*32)>>); multiDrawArrays(Mode,First,Count) -> - cast(5395, <<Mode:?GLenum,(length(First)):?GLuint, - (<< <<C:?GLint>> || C <- First>>)/binary,0:(((length(First)) rem 2)*32),(length(Count)):?GLuint, - (<< <<C:?GLsizei>> || C <- Count>>)/binary,0:(((1+length(Count)) rem 2)*32)>>). + send_bin(First), + FirstLen = byte_size(if is_binary(First) -> First; is_tuple(First) -> element(2, First) end) div 4, + send_bin(Count), + CountLen = byte_size(if is_binary(Count) -> Count; is_tuple(Count) -> element(2, Count) end) div 4, + cast(5396, <<Mode:?GLenum,FirstLen:?GLint,CountLen:?GLsizei>>). %% @doc Specify point parameters %% @@ -9671,26 +9688,26 @@ multiDrawArrays(Mode,First,Count) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPointParameter.xml">external</a> documentation. -spec pointParameterf(Pname, Param) -> 'ok' when Pname :: enum(),Param :: float(). pointParameterf(Pname,Param) -> - cast(5396, <<Pname:?GLenum,Param:?GLfloat>>). + cast(5397, <<Pname:?GLenum,Param:?GLfloat>>). %% @doc %% See {@link pointParameterf/2} -spec pointParameterfv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple(). pointParameterfv(Pname,Params) -> - cast(5397, <<Pname:?GLenum,(size(Params)):?GLuint, + cast(5398, <<Pname:?GLenum,(size(Params)):?GLuint, (<< <<C:?GLfloat>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>). %% @doc %% See {@link pointParameterf/2} -spec pointParameteri(Pname, Param) -> 'ok' when Pname :: enum(),Param :: integer(). pointParameteri(Pname,Param) -> - cast(5398, <<Pname:?GLenum,Param:?GLint>>). + cast(5399, <<Pname:?GLenum,Param:?GLint>>). %% @doc %% See {@link pointParameterf/2} -spec pointParameteriv(Pname, Params) -> 'ok' when Pname :: enum(),Params :: tuple(). pointParameteriv(Pname,Params) -> - cast(5399, <<Pname:?GLenum,(size(Params)):?GLuint, + cast(5400, <<Pname:?GLenum,(size(Params)):?GLuint, (<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((0+size(Params)) rem 2)*32)>>). %% @doc Set the current fog coordinates @@ -9702,7 +9719,7 @@ pointParameteriv(Pname,Params) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoord.xml">external</a> documentation. -spec fogCoordf(Coord) -> 'ok' when Coord :: float(). fogCoordf(Coord) -> - cast(5400, <<Coord:?GLfloat>>). + cast(5401, <<Coord:?GLfloat>>). %% @equiv fogCoordf(Coord) -spec fogCoordfv(Coord) -> 'ok' when Coord :: {Coord :: float()}. @@ -9712,7 +9729,7 @@ fogCoordfv({Coord}) -> fogCoordf(Coord). %% See {@link fogCoordf/1} -spec fogCoordd(Coord) -> 'ok' when Coord :: float(). fogCoordd(Coord) -> - cast(5401, <<Coord:?GLdouble>>). + cast(5402, <<Coord:?GLdouble>>). %% @equiv fogCoordd(Coord) -spec fogCoorddv(Coord) -> 'ok' when Coord :: {Coord :: float()}. @@ -9743,10 +9760,10 @@ fogCoorddv({Coord}) -> fogCoordd(Coord). %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFogCoordPointer.xml">external</a> documentation. -spec fogCoordPointer(Type, Stride, Pointer) -> 'ok' when Type :: enum(),Stride :: integer(),Pointer :: offset()|mem(). fogCoordPointer(Type,Stride,Pointer) when is_integer(Pointer) -> - cast(5402, <<Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); + cast(5403, <<Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); fogCoordPointer(Type,Stride,Pointer) -> send_bin(Pointer), - cast(5403, <<Type:?GLenum,Stride:?GLsizei>>). + cast(5404, <<Type:?GLenum,Stride:?GLsizei>>). %% @doc Set the current secondary color %% @@ -9780,7 +9797,7 @@ fogCoordPointer(Type,Stride,Pointer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColor.xml">external</a> documentation. -spec secondaryColor3b(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3b(Red,Green,Blue) -> - cast(5404, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>). + cast(5405, <<Red:?GLbyte,Green:?GLbyte,Blue:?GLbyte>>). %% @equiv secondaryColor3b(Red,Green,Blue) -spec secondaryColor3bv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9790,7 +9807,7 @@ secondaryColor3bv({Red,Green,Blue}) -> secondaryColor3b(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3d(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(). secondaryColor3d(Red,Green,Blue) -> - cast(5405, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>). + cast(5406, <<Red:?GLdouble,Green:?GLdouble,Blue:?GLdouble>>). %% @equiv secondaryColor3d(Red,Green,Blue) -spec secondaryColor3dv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}. @@ -9800,7 +9817,7 @@ secondaryColor3dv({Red,Green,Blue}) -> secondaryColor3d(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3f(Red, Green, Blue) -> 'ok' when Red :: float(),Green :: float(),Blue :: float(). secondaryColor3f(Red,Green,Blue) -> - cast(5406, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>). + cast(5407, <<Red:?GLfloat,Green:?GLfloat,Blue:?GLfloat>>). %% @equiv secondaryColor3f(Red,Green,Blue) -spec secondaryColor3fv(V) -> 'ok' when V :: {Red :: float(),Green :: float(),Blue :: float()}. @@ -9810,7 +9827,7 @@ secondaryColor3fv({Red,Green,Blue}) -> secondaryColor3f(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3i(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3i(Red,Green,Blue) -> - cast(5407, <<Red:?GLint,Green:?GLint,Blue:?GLint>>). + cast(5408, <<Red:?GLint,Green:?GLint,Blue:?GLint>>). %% @equiv secondaryColor3i(Red,Green,Blue) -spec secondaryColor3iv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9820,7 +9837,7 @@ secondaryColor3iv({Red,Green,Blue}) -> secondaryColor3i(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3s(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3s(Red,Green,Blue) -> - cast(5408, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>). + cast(5409, <<Red:?GLshort,Green:?GLshort,Blue:?GLshort>>). %% @equiv secondaryColor3s(Red,Green,Blue) -spec secondaryColor3sv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9830,7 +9847,7 @@ secondaryColor3sv({Red,Green,Blue}) -> secondaryColor3s(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3ub(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3ub(Red,Green,Blue) -> - cast(5409, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>). + cast(5410, <<Red:?GLubyte,Green:?GLubyte,Blue:?GLubyte>>). %% @equiv secondaryColor3ub(Red,Green,Blue) -spec secondaryColor3ubv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9840,7 +9857,7 @@ secondaryColor3ubv({Red,Green,Blue}) -> secondaryColor3ub(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3ui(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3ui(Red,Green,Blue) -> - cast(5410, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>). + cast(5411, <<Red:?GLuint,Green:?GLuint,Blue:?GLuint>>). %% @equiv secondaryColor3ui(Red,Green,Blue) -spec secondaryColor3uiv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9850,7 +9867,7 @@ secondaryColor3uiv({Red,Green,Blue}) -> secondaryColor3ui(Red,Green,Blue). %% See {@link secondaryColor3b/3} -spec secondaryColor3us(Red, Green, Blue) -> 'ok' when Red :: integer(),Green :: integer(),Blue :: integer(). secondaryColor3us(Red,Green,Blue) -> - cast(5411, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>). + cast(5412, <<Red:?GLushort,Green:?GLushort,Blue:?GLushort>>). %% @equiv secondaryColor3us(Red,Green,Blue) -spec secondaryColor3usv(V) -> 'ok' when V :: {Red :: integer(),Green :: integer(),Blue :: integer()}. @@ -9883,10 +9900,10 @@ secondaryColor3usv({Red,Green,Blue}) -> secondaryColor3us(Red,Green,Blue). %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSecondaryColorPointer.xml">external</a> documentation. -spec secondaryColorPointer(Size, Type, Stride, Pointer) -> 'ok' when Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem(). secondaryColorPointer(Size,Type,Stride,Pointer) when is_integer(Pointer) -> - cast(5412, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); + cast(5413, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); secondaryColorPointer(Size,Type,Stride,Pointer) -> send_bin(Pointer), - cast(5413, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). + cast(5414, <<Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). %% @doc Specify the raster position in window coordinates for pixel operations %% @@ -9929,7 +9946,7 @@ secondaryColorPointer(Size,Type,Stride,Pointer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWindowPos.xml">external</a> documentation. -spec windowPos2d(X, Y) -> 'ok' when X :: float(),Y :: float(). windowPos2d(X,Y) -> - cast(5414, <<X:?GLdouble,Y:?GLdouble>>). + cast(5415, <<X:?GLdouble,Y:?GLdouble>>). %% @equiv windowPos2d(X,Y) -spec windowPos2dv(V) -> 'ok' when V :: {X :: float(),Y :: float()}. @@ -9939,7 +9956,7 @@ windowPos2dv({X,Y}) -> windowPos2d(X,Y). %% See {@link windowPos2d/2} -spec windowPos2f(X, Y) -> 'ok' when X :: float(),Y :: float(). windowPos2f(X,Y) -> - cast(5415, <<X:?GLfloat,Y:?GLfloat>>). + cast(5416, <<X:?GLfloat,Y:?GLfloat>>). %% @equiv windowPos2f(X,Y) -spec windowPos2fv(V) -> 'ok' when V :: {X :: float(),Y :: float()}. @@ -9949,7 +9966,7 @@ windowPos2fv({X,Y}) -> windowPos2f(X,Y). %% See {@link windowPos2d/2} -spec windowPos2i(X, Y) -> 'ok' when X :: integer(),Y :: integer(). windowPos2i(X,Y) -> - cast(5416, <<X:?GLint,Y:?GLint>>). + cast(5417, <<X:?GLint,Y:?GLint>>). %% @equiv windowPos2i(X,Y) -spec windowPos2iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}. @@ -9959,7 +9976,7 @@ windowPos2iv({X,Y}) -> windowPos2i(X,Y). %% See {@link windowPos2d/2} -spec windowPos2s(X, Y) -> 'ok' when X :: integer(),Y :: integer(). windowPos2s(X,Y) -> - cast(5417, <<X:?GLshort,Y:?GLshort>>). + cast(5418, <<X:?GLshort,Y:?GLshort>>). %% @equiv windowPos2s(X,Y) -spec windowPos2sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer()}. @@ -9969,7 +9986,7 @@ windowPos2sv({X,Y}) -> windowPos2s(X,Y). %% See {@link windowPos2d/2} -spec windowPos3d(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float(). windowPos3d(X,Y,Z) -> - cast(5418, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). + cast(5419, <<X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). %% @equiv windowPos3d(X,Y,Z) -spec windowPos3dv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}. @@ -9979,7 +9996,7 @@ windowPos3dv({X,Y,Z}) -> windowPos3d(X,Y,Z). %% See {@link windowPos2d/2} -spec windowPos3f(X, Y, Z) -> 'ok' when X :: float(),Y :: float(),Z :: float(). windowPos3f(X,Y,Z) -> - cast(5419, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>). + cast(5420, <<X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>). %% @equiv windowPos3f(X,Y,Z) -spec windowPos3fv(V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}. @@ -9989,7 +10006,7 @@ windowPos3fv({X,Y,Z}) -> windowPos3f(X,Y,Z). %% See {@link windowPos2d/2} -spec windowPos3i(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(). windowPos3i(X,Y,Z) -> - cast(5420, <<X:?GLint,Y:?GLint,Z:?GLint>>). + cast(5421, <<X:?GLint,Y:?GLint,Z:?GLint>>). %% @equiv windowPos3i(X,Y,Z) -spec windowPos3iv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}. @@ -9999,7 +10016,7 @@ windowPos3iv({X,Y,Z}) -> windowPos3i(X,Y,Z). %% See {@link windowPos2d/2} -spec windowPos3s(X, Y, Z) -> 'ok' when X :: integer(),Y :: integer(),Z :: integer(). windowPos3s(X,Y,Z) -> - cast(5421, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>). + cast(5422, <<X:?GLshort,Y:?GLshort,Z:?GLshort>>). %% @equiv windowPos3s(X,Y,Z) -spec windowPos3sv(V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}. @@ -10020,7 +10037,7 @@ windowPos3sv({X,Y,Z}) -> windowPos3s(X,Y,Z). %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenQueries.xml">external</a> documentation. -spec genQueries(N) -> [integer()] when N :: integer(). genQueries(N) -> - call(5422, <<N:?GLsizei>>). + call(5423, <<N:?GLsizei>>). %% @doc Delete named query objects %% @@ -10034,8 +10051,9 @@ genQueries(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteQueries.xml">external</a> documentation. -spec deleteQueries(Ids) -> 'ok' when Ids :: [integer()]. deleteQueries(Ids) -> - cast(5423, <<(length(Ids)):?GLuint, - (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>). + IdsLen = length(Ids), + cast(5424, <<IdsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+IdsLen) rem 2)*32)>>). %% @doc Determine if a name corresponds to a query object %% @@ -10049,7 +10067,7 @@ deleteQueries(Ids) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsQuery.xml">external</a> documentation. -spec isQuery(Id) -> 0|1 when Id :: integer(). isQuery(Id) -> - call(5424, <<Id:?GLuint>>). + call(5425, <<Id:?GLuint>>). %% @doc Delimit the boundaries of a query object %% @@ -10116,20 +10134,20 @@ isQuery(Id) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQuery.xml">external</a> documentation. -spec beginQuery(Target, Id) -> 'ok' when Target :: enum(),Id :: integer(). beginQuery(Target,Id) -> - cast(5425, <<Target:?GLenum,Id:?GLuint>>). + cast(5426, <<Target:?GLenum,Id:?GLuint>>). %% @doc %% See {@link beginQuery/2} -spec endQuery(Target) -> 'ok' when Target :: enum(). endQuery(Target) -> - cast(5426, <<Target:?GLenum>>). + cast(5427, <<Target:?GLenum>>). %% @doc glGetQuery %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetQuery.xml">external</a> documentation. -spec getQueryiv(Target, Pname) -> integer() when Target :: enum(),Pname :: enum(). getQueryiv(Target,Pname) -> - call(5427, <<Target:?GLenum,Pname:?GLenum>>). + call(5428, <<Target:?GLenum,Pname:?GLenum>>). %% @doc Return parameters of a query object %% @@ -10149,13 +10167,13 @@ getQueryiv(Target,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetQueryObject.xml">external</a> documentation. -spec getQueryObjectiv(Id, Pname) -> integer() when Id :: integer(),Pname :: enum(). getQueryObjectiv(Id,Pname) -> - call(5428, <<Id:?GLuint,Pname:?GLenum>>). + call(5429, <<Id:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link getQueryObjectiv/2} -spec getQueryObjectuiv(Id, Pname) -> integer() when Id :: integer(),Pname :: enum(). getQueryObjectuiv(Id,Pname) -> - call(5429, <<Id:?GLuint,Pname:?GLenum>>). + call(5430, <<Id:?GLuint,Pname:?GLenum>>). %% @doc Bind a named buffer object %% @@ -10238,7 +10256,7 @@ getQueryObjectuiv(Id,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBuffer.xml">external</a> documentation. -spec bindBuffer(Target, Buffer) -> 'ok' when Target :: enum(),Buffer :: integer(). bindBuffer(Target,Buffer) -> - cast(5430, <<Target:?GLenum,Buffer:?GLuint>>). + cast(5431, <<Target:?GLenum,Buffer:?GLuint>>). %% @doc Delete named buffer objects %% @@ -10253,8 +10271,9 @@ bindBuffer(Target,Buffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteBuffers.xml">external</a> documentation. -spec deleteBuffers(Buffers) -> 'ok' when Buffers :: [integer()]. deleteBuffers(Buffers) -> - cast(5431, <<(length(Buffers)):?GLuint, - (<< <<C:?GLuint>> || C <- Buffers>>)/binary,0:(((1+length(Buffers)) rem 2)*32)>>). + BuffersLen = length(Buffers), + cast(5432, <<BuffersLen:?GLuint, + (<< <<C:?GLuint>> || C <- Buffers>>)/binary,0:(((1+BuffersLen) rem 2)*32)>>). %% @doc Generate buffer object names %% @@ -10272,7 +10291,7 @@ deleteBuffers(Buffers) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenBuffers.xml">external</a> documentation. -spec genBuffers(N) -> [integer()] when N :: integer(). genBuffers(N) -> - call(5432, <<N:?GLsizei>>). + call(5433, <<N:?GLsizei>>). %% @doc Determine if a name corresponds to a buffer object %% @@ -10287,7 +10306,7 @@ genBuffers(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsBuffer.xml">external</a> documentation. -spec isBuffer(Buffer) -> 0|1 when Buffer :: integer(). isBuffer(Buffer) -> - call(5433, <<Buffer:?GLuint>>). + call(5434, <<Buffer:?GLuint>>). %% @doc Creates and initializes a buffer object's data store %% @@ -10325,10 +10344,10 @@ isBuffer(Buffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferData.xml">external</a> documentation. -spec bufferData(Target, Size, Data, Usage) -> 'ok' when Target :: enum(),Size :: integer(),Data :: offset()|mem(),Usage :: enum(). bufferData(Target,Size,Data,Usage) when is_integer(Data) -> - cast(5434, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Data:?GLuint,Usage:?GLenum>>); + cast(5435, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Data:?GLuint,Usage:?GLenum>>); bufferData(Target,Size,Data,Usage) -> send_bin(Data), - cast(5435, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Usage:?GLenum>>). + cast(5436, <<Target:?GLenum,0:32,Size:?GLsizeiptr,Usage:?GLenum>>). %% @doc Updates a subset of a buffer object's data store %% @@ -10341,10 +10360,10 @@ bufferData(Target,Size,Data,Usage) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBufferSubData.xml">external</a> documentation. -spec bufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: offset()|mem(). bufferSubData(Target,Offset,Size,Data) when is_integer(Data) -> - cast(5436, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr,Data:?GLuint>>); + cast(5437, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr,Data:?GLuint>>); bufferSubData(Target,Offset,Size,Data) -> send_bin(Data), - cast(5437, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). + cast(5438, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). %% @doc Returns a subset of a buffer object's data store %% @@ -10358,7 +10377,7 @@ bufferSubData(Target,Offset,Size,Data) -> -spec getBufferSubData(Target, Offset, Size, Data) -> 'ok' when Target :: enum(),Offset :: integer(),Size :: integer(),Data :: mem(). getBufferSubData(Target,Offset,Size,Data) -> send_bin(Data), - call(5438, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). + call(5439, <<Target:?GLenum,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). %% @doc Return parameters of a buffer object %% @@ -10382,7 +10401,7 @@ getBufferSubData(Target,Offset,Size,Data) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetBufferParameteriv.xml">external</a> documentation. -spec getBufferParameteriv(Target, Pname) -> integer() when Target :: enum(),Pname :: enum(). getBufferParameteriv(Target,Pname) -> - call(5439, <<Target:?GLenum,Pname:?GLenum>>). + call(5440, <<Target:?GLenum,Pname:?GLenum>>). %% @doc Set the RGB blend equation and the alpha blend equation separately %% @@ -10424,7 +10443,7 @@ getBufferParameteriv(Target,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendEquationSeparate.xml">external</a> documentation. -spec blendEquationSeparate(ModeRGB, ModeAlpha) -> 'ok' when ModeRGB :: enum(),ModeAlpha :: enum(). blendEquationSeparate(ModeRGB,ModeAlpha) -> - cast(5440, <<ModeRGB:?GLenum,ModeAlpha:?GLenum>>). + cast(5441, <<ModeRGB:?GLenum,ModeAlpha:?GLenum>>). %% @doc Specifies a list of color buffers to be drawn into %% @@ -10464,8 +10483,9 @@ blendEquationSeparate(ModeRGB,ModeAlpha) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffers.xml">external</a> documentation. -spec drawBuffers(Bufs) -> 'ok' when Bufs :: [enum()]. drawBuffers(Bufs) -> - cast(5441, <<(length(Bufs)):?GLuint, - (<< <<C:?GLenum>> || C <- Bufs>>)/binary,0:(((1+length(Bufs)) rem 2)*32)>>). + BufsLen = length(Bufs), + cast(5442, <<BufsLen:?GLuint, + (<< <<C:?GLenum>> || C <- Bufs>>)/binary,0:(((1+BufsLen) rem 2)*32)>>). %% @doc Set front and/or back stencil test actions %% @@ -10526,7 +10546,7 @@ drawBuffers(Bufs) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilOpSeparate.xml">external</a> documentation. -spec stencilOpSeparate(Face, Sfail, Dpfail, Dppass) -> 'ok' when Face :: enum(),Sfail :: enum(),Dpfail :: enum(),Dppass :: enum(). stencilOpSeparate(Face,Sfail,Dpfail,Dppass) -> - cast(5442, <<Face:?GLenum,Sfail:?GLenum,Dpfail:?GLenum,Dppass:?GLenum>>). + cast(5443, <<Face:?GLenum,Sfail:?GLenum,Dpfail:?GLenum,Dppass:?GLenum>>). %% @doc Set front and/or back function and reference value for stencil testing %% @@ -10589,7 +10609,7 @@ stencilOpSeparate(Face,Sfail,Dpfail,Dppass) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilFuncSeparate.xml">external</a> documentation. -spec stencilFuncSeparate(Face, Func, Ref, Mask) -> 'ok' when Face :: enum(),Func :: enum(),Ref :: integer(),Mask :: integer(). stencilFuncSeparate(Face,Func,Ref,Mask) -> - cast(5443, <<Face:?GLenum,Func:?GLenum,Ref:?GLint,Mask:?GLuint>>). + cast(5444, <<Face:?GLenum,Func:?GLenum,Ref:?GLint,Mask:?GLuint>>). %% @doc Control the front and/or back writing of individual bits in the stencil planes %% @@ -10607,7 +10627,7 @@ stencilFuncSeparate(Face,Func,Ref,Mask) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilMaskSeparate.xml">external</a> documentation. -spec stencilMaskSeparate(Face, Mask) -> 'ok' when Face :: enum(),Mask :: integer(). stencilMaskSeparate(Face,Mask) -> - cast(5444, <<Face:?GLenum,Mask:?GLuint>>). + cast(5445, <<Face:?GLenum,Mask:?GLuint>>). %% @doc Attaches a shader object to a program object %% @@ -10631,7 +10651,7 @@ stencilMaskSeparate(Face,Mask) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachShader.xml">external</a> documentation. -spec attachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer(). attachShader(Program,Shader) -> - cast(5445, <<Program:?GLuint,Shader:?GLuint>>). + cast(5446, <<Program:?GLuint,Shader:?GLuint>>). %% @doc Associates a generic vertex attribute index with a named attribute variable %% @@ -10668,7 +10688,8 @@ attachShader(Program,Shader) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml">external</a> documentation. -spec bindAttribLocation(Program, Index, Name) -> 'ok' when Program :: integer(),Index :: integer(),Name :: string(). bindAttribLocation(Program,Index,Name) -> - cast(5446, <<Program:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + cast(5447, <<Program:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc Compiles a shader object %% @@ -10688,7 +10709,7 @@ bindAttribLocation(Program,Index,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShader.xml">external</a> documentation. -spec compileShader(Shader) -> 'ok' when Shader :: integer(). compileShader(Shader) -> - cast(5447, <<Shader:?GLuint>>). + cast(5448, <<Shader:?GLuint>>). %% @doc Creates a program object %% @@ -10711,7 +10732,7 @@ compileShader(Shader) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCreateProgram.xml">external</a> documentation. -spec createProgram() -> integer(). createProgram() -> - call(5448, <<>>). + call(5449, <<>>). %% @doc Creates a shader object %% @@ -10734,7 +10755,7 @@ createProgram() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCreateShader.xml">external</a> documentation. -spec createShader(Type) -> integer() when Type :: enum(). createShader(Type) -> - call(5449, <<Type:?GLenum>>). + call(5450, <<Type:?GLenum>>). %% @doc Deletes a program object %% @@ -10755,7 +10776,7 @@ createShader(Type) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgram.xml">external</a> documentation. -spec deleteProgram(Program) -> 'ok' when Program :: integer(). deleteProgram(Program) -> - cast(5450, <<Program:?GLuint>>). + cast(5451, <<Program:?GLuint>>). %% @doc Deletes a shader object %% @@ -10774,7 +10795,7 @@ deleteProgram(Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteShader.xml">external</a> documentation. -spec deleteShader(Shader) -> 'ok' when Shader :: integer(). deleteShader(Shader) -> - cast(5451, <<Shader:?GLuint>>). + cast(5452, <<Shader:?GLuint>>). %% @doc Detaches a shader object from a program object to which it is attached %% @@ -10789,7 +10810,7 @@ deleteShader(Shader) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachShader.xml">external</a> documentation. -spec detachShader(Program, Shader) -> 'ok' when Program :: integer(),Shader :: integer(). detachShader(Program,Shader) -> - cast(5452, <<Program:?GLuint,Shader:?GLuint>>). + cast(5453, <<Program:?GLuint,Shader:?GLuint>>). %% @doc Enable or disable a generic vertex attribute array %% @@ -10804,13 +10825,13 @@ detachShader(Program,Shader) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnableVertexAttribArray.xml">external</a> documentation. -spec disableVertexAttribArray(Index) -> 'ok' when Index :: integer(). disableVertexAttribArray(Index) -> - cast(5453, <<Index:?GLuint>>). + cast(5454, <<Index:?GLuint>>). %% @doc %% See {@link disableVertexAttribArray/1} -spec enableVertexAttribArray(Index) -> 'ok' when Index :: integer(). enableVertexAttribArray(Index) -> - cast(5454, <<Index:?GLuint>>). + cast(5455, <<Index:?GLuint>>). %% @doc Returns information about an active attribute variable for the specified program object %% @@ -10868,7 +10889,7 @@ enableVertexAttribArray(Index) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveAttrib.xml">external</a> documentation. -spec getActiveAttrib(Program, Index, BufSize) -> {Size :: integer(),Type :: enum(),Name :: string()} when Program :: integer(),Index :: integer(),BufSize :: integer(). getActiveAttrib(Program,Index,BufSize) -> - call(5455, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). + call(5456, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). %% @doc Returns information about an active uniform variable for the specified program object %% @@ -11015,7 +11036,7 @@ getActiveAttrib(Program,Index,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniform.xml">external</a> documentation. -spec getActiveUniform(Program, Index, BufSize) -> {Size :: integer(),Type :: enum(),Name :: string()} when Program :: integer(),Index :: integer(),BufSize :: integer(). getActiveUniform(Program,Index,BufSize) -> - call(5456, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). + call(5457, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). %% @doc Returns the handles of the shader objects attached to a program object %% @@ -11035,7 +11056,7 @@ getActiveUniform(Program,Index,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetAttachedShaders.xml">external</a> documentation. -spec getAttachedShaders(Program, MaxCount) -> [integer()] when Program :: integer(),MaxCount :: integer(). getAttachedShaders(Program,MaxCount) -> - call(5457, <<Program:?GLuint,MaxCount:?GLsizei>>). + call(5458, <<Program:?GLuint,MaxCount:?GLsizei>>). %% @doc Returns the location of an attribute variable %% @@ -11059,7 +11080,8 @@ getAttachedShaders(Program,MaxCount) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetAttribLocation.xml">external</a> documentation. -spec getAttribLocation(Program, Name) -> integer() when Program :: integer(),Name :: string(). getAttribLocation(Program,Name) -> - call(5458, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5459, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc Returns a parameter from a program object %% @@ -11130,7 +11152,7 @@ getAttribLocation(Program,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgram.xml">external</a> documentation. -spec getProgramiv(Program, Pname) -> integer() when Program :: integer(),Pname :: enum(). getProgramiv(Program,Pname) -> - call(5459, <<Program:?GLuint,Pname:?GLenum>>). + call(5460, <<Program:?GLuint,Pname:?GLenum>>). %% @doc Returns the information log for a program object %% @@ -11155,7 +11177,7 @@ getProgramiv(Program,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramInfoLog.xml">external</a> documentation. -spec getProgramInfoLog(Program, BufSize) -> string() when Program :: integer(),BufSize :: integer(). getProgramInfoLog(Program,BufSize) -> - call(5460, <<Program:?GLuint,BufSize:?GLsizei>>). + call(5461, <<Program:?GLuint,BufSize:?GLsizei>>). %% @doc Returns a parameter from a shader object %% @@ -11186,7 +11208,7 @@ getProgramInfoLog(Program,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetShader.xml">external</a> documentation. -spec getShaderiv(Shader, Pname) -> integer() when Shader :: integer(),Pname :: enum(). getShaderiv(Shader,Pname) -> - call(5461, <<Shader:?GLuint,Pname:?GLenum>>). + call(5462, <<Shader:?GLuint,Pname:?GLenum>>). %% @doc Returns the information log for a shader object %% @@ -11209,7 +11231,7 @@ getShaderiv(Shader,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderInfoLog.xml">external</a> documentation. -spec getShaderInfoLog(Shader, BufSize) -> string() when Shader :: integer(),BufSize :: integer(). getShaderInfoLog(Shader,BufSize) -> - call(5462, <<Shader:?GLuint,BufSize:?GLsizei>>). + call(5463, <<Shader:?GLuint,BufSize:?GLsizei>>). %% @doc Returns the source code string from a shader object %% @@ -11229,7 +11251,7 @@ getShaderInfoLog(Shader,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderSource.xml">external</a> documentation. -spec getShaderSource(Shader, BufSize) -> string() when Shader :: integer(),BufSize :: integer(). getShaderSource(Shader,BufSize) -> - call(5463, <<Shader:?GLuint,BufSize:?GLsizei>>). + call(5464, <<Shader:?GLuint,BufSize:?GLsizei>>). %% @doc Returns the location of a uniform variable %% @@ -11262,7 +11284,8 @@ getShaderSource(Shader,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformLocation.xml">external</a> documentation. -spec getUniformLocation(Program, Name) -> integer() when Program :: integer(),Name :: string(). getUniformLocation(Program,Name) -> - call(5464, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5465, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc Returns the value of a uniform variable %% @@ -11288,13 +11311,13 @@ getUniformLocation(Program,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniform.xml">external</a> documentation. -spec getUniformfv(Program, Location) -> matrix() when Program :: integer(),Location :: integer(). getUniformfv(Program,Location) -> - call(5465, <<Program:?GLuint,Location:?GLint>>). + call(5466, <<Program:?GLuint,Location:?GLint>>). %% @doc %% See {@link getUniformfv/2} -spec getUniformiv(Program, Location) -> {integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer()} when Program :: integer(),Location :: integer(). getUniformiv(Program,Location) -> - call(5466, <<Program:?GLuint,Location:?GLint>>). + call(5467, <<Program:?GLuint,Location:?GLint>>). %% @doc Return a generic vertex attribute parameter %% @@ -11361,19 +11384,19 @@ getUniformiv(Program,Location) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttrib.xml">external</a> documentation. -spec getVertexAttribdv(Index, Pname) -> {float(),float(),float(),float()} when Index :: integer(),Pname :: enum(). getVertexAttribdv(Index,Pname) -> - call(5467, <<Index:?GLuint,Pname:?GLenum>>). + call(5468, <<Index:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link getVertexAttribdv/2} -spec getVertexAttribfv(Index, Pname) -> {float(),float(),float(),float()} when Index :: integer(),Pname :: enum(). getVertexAttribfv(Index,Pname) -> - call(5468, <<Index:?GLuint,Pname:?GLenum>>). + call(5469, <<Index:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link getVertexAttribdv/2} -spec getVertexAttribiv(Index, Pname) -> {integer(),integer(),integer(),integer()} when Index :: integer(),Pname :: enum(). getVertexAttribiv(Index,Pname) -> - call(5469, <<Index:?GLuint,Pname:?GLenum>>). + call(5470, <<Index:?GLuint,Pname:?GLenum>>). %% @doc Determines if a name corresponds to a program object %% @@ -11385,7 +11408,7 @@ getVertexAttribiv(Index,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsProgram.xml">external</a> documentation. -spec isProgram(Program) -> 0|1 when Program :: integer(). isProgram(Program) -> - call(5470, <<Program:?GLuint>>). + call(5471, <<Program:?GLuint>>). %% @doc Determines if a name corresponds to a shader object %% @@ -11397,7 +11420,7 @@ isProgram(Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsShader.xml">external</a> documentation. -spec isShader(Shader) -> 0|1 when Shader :: integer(). isShader(Shader) -> - call(5471, <<Shader:?GLuint>>). + call(5472, <<Shader:?GLuint>>). %% @doc Links a program object %% @@ -11517,7 +11540,7 @@ isShader(Shader) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgram.xml">external</a> documentation. -spec linkProgram(Program) -> 'ok' when Program :: integer(). linkProgram(Program) -> - cast(5472, <<Program:?GLuint>>). + cast(5473, <<Program:?GLuint>>). %% @doc Replaces the source code in a shader object %% @@ -11535,8 +11558,9 @@ linkProgram(Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSource.xml">external</a> documentation. -spec shaderSource(Shader, String) -> 'ok' when Shader :: integer(),String :: iolist(). shaderSource(Shader,String) -> - StringTemp = list_to_binary([[Str|[0]] || Str <- String ]), - cast(5473, <<Shader:?GLuint,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+0) rem 8)) rem 8)>>). + StringTemp = list_to_binary([[Str|[0]] || Str <- String ]), + StringLen = length(String), + cast(5474, <<Shader:?GLuint,StringLen:?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+0) rem 8)) rem 8)>>). %% @doc Installs a program object as part of current rendering state %% @@ -11577,7 +11601,7 @@ shaderSource(Shader,String) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgram.xml">external</a> documentation. -spec useProgram(Program) -> 'ok' when Program :: integer(). useProgram(Program) -> - cast(5474, <<Program:?GLuint>>). + cast(5475, <<Program:?GLuint>>). %% @doc Specify the value of a uniform variable for the current program object %% @@ -11645,125 +11669,136 @@ useProgram(Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniform.xml">external</a> documentation. -spec uniform1f(Location, V0) -> 'ok' when Location :: integer(),V0 :: float(). uniform1f(Location,V0) -> - cast(5475, <<Location:?GLint,V0:?GLfloat>>). + cast(5476, <<Location:?GLint,V0:?GLfloat>>). %% @doc %% See {@link uniform1f/2} -spec uniform2f(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(). uniform2f(Location,V0,V1) -> - cast(5476, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat>>). + cast(5477, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat>>). %% @doc %% See {@link uniform1f/2} -spec uniform3f(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(). uniform3f(Location,V0,V1,V2) -> - cast(5477, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>). + cast(5478, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>). %% @doc %% See {@link uniform1f/2} -spec uniform4f(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float(). uniform4f(Location,V0,V1,V2,V3) -> - cast(5478, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>). + cast(5479, <<Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>). %% @doc %% See {@link uniform1f/2} -spec uniform1i(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer(). uniform1i(Location,V0) -> - cast(5479, <<Location:?GLint,V0:?GLint>>). + cast(5480, <<Location:?GLint,V0:?GLint>>). %% @doc %% See {@link uniform1f/2} -spec uniform2i(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(). uniform2i(Location,V0,V1) -> - cast(5480, <<Location:?GLint,V0:?GLint,V1:?GLint>>). + cast(5481, <<Location:?GLint,V0:?GLint,V1:?GLint>>). %% @doc %% See {@link uniform1f/2} -spec uniform3i(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(). uniform3i(Location,V0,V1,V2) -> - cast(5481, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>). + cast(5482, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>). %% @doc %% See {@link uniform1f/2} -spec uniform4i(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer(). uniform4i(Location,V0,V1,V2,V3) -> - cast(5482, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>). + cast(5483, <<Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>). %% @doc %% See {@link uniform1f/2} -spec uniform1fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()]. uniform1fv(Location,Value) -> - cast(5483, <<Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5484, <<Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((ValueLen) rem 2)*32)>>). %% @doc %% See {@link uniform1f/2} -spec uniform2fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}]. uniform2fv(Location,Value) -> - cast(5484, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5485, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform3fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}]. uniform3fv(Location,Value) -> - cast(5485, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5486, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform4fv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}]. uniform4fv(Location,Value) -> - cast(5486, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5487, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform1iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()]. uniform1iv(Location,Value) -> - cast(5487, <<Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5488, <<Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLint>> || C <- Value>>)/binary,0:(((ValueLen) rem 2)*32)>>). %% @doc %% See {@link uniform1f/2} -spec uniform2iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}]. uniform2iv(Location,Value) -> - cast(5488, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5489, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform3iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}]. uniform3iv(Location,Value) -> - cast(5489, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5490, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform4iv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}]. uniform4iv(Location,Value) -> - cast(5490, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5491, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}]. uniformMatrix2fv(Location,Transpose,Value) -> - cast(5491, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5492, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix3fv(Location,Transpose,Value) -> - cast(5492, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5493, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4fv(Location,Transpose,Value) -> - cast(5493, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5494, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>). %% @doc Validates a program object @@ -11791,7 +11826,7 @@ uniformMatrix4fv(Location,Transpose,Value) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgram.xml">external</a> documentation. -spec validateProgram(Program) -> 'ok' when Program :: integer(). validateProgram(Program) -> - cast(5494, <<Program:?GLuint>>). + cast(5495, <<Program:?GLuint>>). %% @doc Specifies the value of a generic vertex attribute %% @@ -11866,7 +11901,7 @@ validateProgram(Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttrib.xml">external</a> documentation. -spec vertexAttrib1d(Index, X) -> 'ok' when Index :: integer(),X :: float(). vertexAttrib1d(Index,X) -> - cast(5495, <<Index:?GLuint,0:32,X:?GLdouble>>). + cast(5496, <<Index:?GLuint,0:32,X:?GLdouble>>). %% @equiv vertexAttrib1d(Index,X) -spec vertexAttrib1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}. @@ -11876,7 +11911,7 @@ vertexAttrib1dv(Index,{X}) -> vertexAttrib1d(Index,X). %% See {@link vertexAttrib1d/2} -spec vertexAttrib1f(Index, X) -> 'ok' when Index :: integer(),X :: float(). vertexAttrib1f(Index,X) -> - cast(5496, <<Index:?GLuint,X:?GLfloat>>). + cast(5497, <<Index:?GLuint,X:?GLfloat>>). %% @equiv vertexAttrib1f(Index,X) -spec vertexAttrib1fv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}. @@ -11886,7 +11921,7 @@ vertexAttrib1fv(Index,{X}) -> vertexAttrib1f(Index,X). %% See {@link vertexAttrib1d/2} -spec vertexAttrib1s(Index, X) -> 'ok' when Index :: integer(),X :: integer(). vertexAttrib1s(Index,X) -> - cast(5497, <<Index:?GLuint,X:?GLshort>>). + cast(5498, <<Index:?GLuint,X:?GLshort>>). %% @equiv vertexAttrib1s(Index,X) -spec vertexAttrib1sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}. @@ -11896,7 +11931,7 @@ vertexAttrib1sv(Index,{X}) -> vertexAttrib1s(Index,X). %% See {@link vertexAttrib1d/2} -spec vertexAttrib2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float(). vertexAttrib2d(Index,X,Y) -> - cast(5498, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>). + cast(5499, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>). %% @equiv vertexAttrib2d(Index,X,Y) -spec vertexAttrib2dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}. @@ -11906,7 +11941,7 @@ vertexAttrib2dv(Index,{X,Y}) -> vertexAttrib2d(Index,X,Y). %% See {@link vertexAttrib1d/2} -spec vertexAttrib2f(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float(). vertexAttrib2f(Index,X,Y) -> - cast(5499, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat>>). + cast(5500, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat>>). %% @equiv vertexAttrib2f(Index,X,Y) -spec vertexAttrib2fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float()}. @@ -11916,7 +11951,7 @@ vertexAttrib2fv(Index,{X,Y}) -> vertexAttrib2f(Index,X,Y). %% See {@link vertexAttrib1d/2} -spec vertexAttrib2s(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(). vertexAttrib2s(Index,X,Y) -> - cast(5500, <<Index:?GLuint,X:?GLshort,Y:?GLshort>>). + cast(5501, <<Index:?GLuint,X:?GLshort,Y:?GLshort>>). %% @equiv vertexAttrib2s(Index,X,Y) -spec vertexAttrib2sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer()}. @@ -11926,7 +11961,7 @@ vertexAttrib2sv(Index,{X,Y}) -> vertexAttrib2s(Index,X,Y). %% See {@link vertexAttrib1d/2} -spec vertexAttrib3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(). vertexAttrib3d(Index,X,Y,Z) -> - cast(5501, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). + cast(5502, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). %% @equiv vertexAttrib3d(Index,X,Y,Z) -spec vertexAttrib3dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}. @@ -11936,7 +11971,7 @@ vertexAttrib3dv(Index,{X,Y,Z}) -> vertexAttrib3d(Index,X,Y,Z). %% See {@link vertexAttrib1d/2} -spec vertexAttrib3f(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(). vertexAttrib3f(Index,X,Y,Z) -> - cast(5502, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>). + cast(5503, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat>>). %% @equiv vertexAttrib3f(Index,X,Y,Z) -spec vertexAttrib3fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float()}. @@ -11946,7 +11981,7 @@ vertexAttrib3fv(Index,{X,Y,Z}) -> vertexAttrib3f(Index,X,Y,Z). %% See {@link vertexAttrib1d/2} -spec vertexAttrib3s(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(). vertexAttrib3s(Index,X,Y,Z) -> - cast(5503, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort>>). + cast(5504, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort>>). %% @equiv vertexAttrib3s(Index,X,Y,Z) -spec vertexAttrib3sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer()}. @@ -11956,25 +11991,25 @@ vertexAttrib3sv(Index,{X,Y,Z}) -> vertexAttrib3s(Index,X,Y,Z). %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Nbv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4Nbv(Index,{V1,V2,V3,V4}) -> - cast(5504, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). + cast(5505, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Niv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4Niv(Index,{V1,V2,V3,V4}) -> - cast(5505, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). + cast(5506, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Nsv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4Nsv(Index,{V1,V2,V3,V4}) -> - cast(5506, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>). + cast(5507, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Nub(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer(). vertexAttrib4Nub(Index,X,Y,Z,W) -> - cast(5507, <<Index:?GLuint,X:?GLubyte,Y:?GLubyte,Z:?GLubyte,W:?GLubyte>>). + cast(5508, <<Index:?GLuint,X:?GLubyte,Y:?GLubyte,Z:?GLubyte,W:?GLubyte>>). %% @equiv vertexAttrib4Nub(Index,X,Y,Z,W) -spec vertexAttrib4Nubv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}. @@ -11984,25 +12019,25 @@ vertexAttrib4Nubv(Index,{X,Y,Z,W}) -> vertexAttrib4Nub(Index,X,Y,Z,W). %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Nuiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4Nuiv(Index,{V1,V2,V3,V4}) -> - cast(5508, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>). + cast(5509, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4Nusv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4Nusv(Index,{V1,V2,V3,V4}) -> - cast(5509, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). + cast(5510, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4bv(Index,{V1,V2,V3,V4}) -> - cast(5510, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). + cast(5511, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). vertexAttrib4d(Index,X,Y,Z,W) -> - cast(5511, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). + cast(5512, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). %% @equiv vertexAttrib4d(Index,X,Y,Z,W) -spec vertexAttrib4dv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}. @@ -12012,7 +12047,7 @@ vertexAttrib4dv(Index,{X,Y,Z,W}) -> vertexAttrib4d(Index,X,Y,Z,W). %% See {@link vertexAttrib1d/2} -spec vertexAttrib4f(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). vertexAttrib4f(Index,X,Y,Z,W) -> - cast(5512, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). + cast(5513, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). %% @equiv vertexAttrib4f(Index,X,Y,Z,W) -spec vertexAttrib4fv(Index :: integer(),V) -> 'ok' when V :: {X :: float(),Y :: float(),Z :: float(),W :: float()}. @@ -12022,13 +12057,13 @@ vertexAttrib4fv(Index,{X,Y,Z,W}) -> vertexAttrib4f(Index,X,Y,Z,W). %% See {@link vertexAttrib1d/2} -spec vertexAttrib4iv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4iv(Index,{V1,V2,V3,V4}) -> - cast(5513, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). + cast(5514, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4s(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer(). vertexAttrib4s(Index,X,Y,Z,W) -> - cast(5514, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>). + cast(5515, <<Index:?GLuint,X:?GLshort,Y:?GLshort,Z:?GLshort,W:?GLshort>>). %% @equiv vertexAttrib4s(Index,X,Y,Z,W) -spec vertexAttrib4sv(Index :: integer(),V) -> 'ok' when V :: {X :: integer(),Y :: integer(),Z :: integer(),W :: integer()}. @@ -12038,19 +12073,19 @@ vertexAttrib4sv(Index,{X,Y,Z,W}) -> vertexAttrib4s(Index,X,Y,Z,W). %% See {@link vertexAttrib1d/2} -spec vertexAttrib4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4ubv(Index,{V1,V2,V3,V4}) -> - cast(5515, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>). + cast(5516, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4uiv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4uiv(Index,{V1,V2,V3,V4}) -> - cast(5516, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>). + cast(5517, <<Index:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttrib4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttrib4usv(Index,{V1,V2,V3,V4}) -> - cast(5517, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). + cast(5518, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). %% @doc Define an array of generic vertex attribute data %% @@ -12094,51 +12129,57 @@ vertexAttrib4usv(Index,{V1,V2,V3,V4}) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribPointer.xml">external</a> documentation. -spec vertexAttribPointer(Index, Size, Type, Normalized, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Normalized :: 0|1,Stride :: integer(),Pointer :: offset()|mem(). vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) when is_integer(Pointer) -> - cast(5518, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei,Pointer:?GLuint>>); + cast(5519, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei,Pointer:?GLuint>>); vertexAttribPointer(Index,Size,Type,Normalized,Stride,Pointer) -> send_bin(Pointer), - cast(5519, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei>>). + cast(5520, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Normalized:?GLboolean,0:24,Stride:?GLsizei>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. uniformMatrix2x3fv(Location,Transpose,Value) -> - cast(5520, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5521, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. uniformMatrix3x2fv(Location,Transpose,Value) -> - cast(5521, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5522, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix2x4fv(Location,Transpose,Value) -> - cast(5522, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5523, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4x2fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4x2fv(Location,Transpose,Value) -> - cast(5523, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5524, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3x4fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix3x4fv(Location,Transpose,Value) -> - cast(5524, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5525, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4x3fv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4x3fv(Location,Transpose,Value) -> - cast(5525, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5526, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc glColorMaski @@ -12146,39 +12187,39 @@ uniformMatrix4x3fv(Location,Transpose,Value) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glColorMaski.xml">external</a> documentation. -spec colorMaski(Index, R, G, B, A) -> 'ok' when Index :: integer(),R :: 0|1,G :: 0|1,B :: 0|1,A :: 0|1. colorMaski(Index,R,G,B,A) -> - cast(5526, <<Index:?GLuint,R:?GLboolean,G:?GLboolean,B:?GLboolean,A:?GLboolean>>). + cast(5527, <<Index:?GLuint,R:?GLboolean,G:?GLboolean,B:?GLboolean,A:?GLboolean>>). %% @doc %% See {@link getBooleanv/1} -spec getBooleani_v(Target, Index) -> [0|1] when Target :: enum(),Index :: integer(). getBooleani_v(Target,Index) -> - call(5527, <<Target:?GLenum,Index:?GLuint>>). + call(5528, <<Target:?GLenum,Index:?GLuint>>). %% @doc %% See {@link getBooleanv/1} -spec getIntegeri_v(Target, Index) -> [integer()] when Target :: enum(),Index :: integer(). getIntegeri_v(Target,Index) -> - call(5528, <<Target:?GLenum,Index:?GLuint>>). + call(5529, <<Target:?GLenum,Index:?GLuint>>). %% @doc %% See {@link enable/1} -spec enablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer(). enablei(Target,Index) -> - cast(5529, <<Target:?GLenum,Index:?GLuint>>). + cast(5530, <<Target:?GLenum,Index:?GLuint>>). %% @doc glEnablei %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glEnablei.xml">external</a> documentation. -spec disablei(Target, Index) -> 'ok' when Target :: enum(),Index :: integer(). disablei(Target,Index) -> - cast(5530, <<Target:?GLenum,Index:?GLuint>>). + cast(5531, <<Target:?GLenum,Index:?GLuint>>). %% @doc glIsEnabledi %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsEnabledi.xml">external</a> documentation. -spec isEnabledi(Target, Index) -> 0|1 when Target :: enum(),Index :: integer(). isEnabledi(Target,Index) -> - call(5531, <<Target:?GLenum,Index:?GLuint>>). + call(5532, <<Target:?GLenum,Index:?GLuint>>). %% @doc Start transform feedback operation %% @@ -12206,13 +12247,13 @@ isEnabledi(Target,Index) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginTransformFeedback.xml">external</a> documentation. -spec beginTransformFeedback(PrimitiveMode) -> 'ok' when PrimitiveMode :: enum(). beginTransformFeedback(PrimitiveMode) -> - cast(5532, <<PrimitiveMode:?GLenum>>). + cast(5533, <<PrimitiveMode:?GLenum>>). %% @doc %% See {@link beginTransformFeedback/1} -spec endTransformFeedback() -> 'ok'. endTransformFeedback() -> - cast(5533, <<>>). + cast(5534, <<>>). %% @doc Bind a range within a buffer object to an indexed buffer target %% @@ -12231,7 +12272,7 @@ endTransformFeedback() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferRange.xml">external</a> documentation. -spec bindBufferRange(Target, Index, Buffer, Offset, Size) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer(),Offset :: integer(),Size :: integer(). bindBufferRange(Target,Index,Buffer,Offset,Size) -> - cast(5534, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). + cast(5535, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint,0:32,Offset:?GLintptr,Size:?GLsizeiptr>>). %% @doc Bind a buffer object to an indexed buffer target %% @@ -12246,7 +12287,7 @@ bindBufferRange(Target,Index,Buffer,Offset,Size) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindBufferBase.xml">external</a> documentation. -spec bindBufferBase(Target, Index, Buffer) -> 'ok' when Target :: enum(),Index :: integer(),Buffer :: integer(). bindBufferBase(Target,Index,Buffer) -> - cast(5535, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint>>). + cast(5536, <<Target:?GLenum,Index:?GLuint,Buffer:?GLuint>>). %% @doc Specify values to record in transform feedback buffers %% @@ -12284,8 +12325,9 @@ bindBufferBase(Target,Index,Buffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTransformFeedbackVaryings.xml">external</a> documentation. -spec transformFeedbackVaryings(Program, Varyings, BufferMode) -> 'ok' when Program :: integer(),Varyings :: iolist(),BufferMode :: enum(). transformFeedbackVaryings(Program,Varyings,BufferMode) -> - VaryingsTemp = list_to_binary([[Str|[0]] || Str <- Varyings ]), - cast(5536, <<Program:?GLuint,(length(Varyings)):?GLuint,(size(VaryingsTemp)):?GLuint,(VaryingsTemp)/binary,0:((8-((size(VaryingsTemp)+0) rem 8)) rem 8),BufferMode:?GLenum>>). + VaryingsTemp = list_to_binary([[Str|[0]] || Str <- Varyings ]), + VaryingsLen = length(Varyings), + cast(5537, <<Program:?GLuint,VaryingsLen:?GLuint,(size(VaryingsTemp)):?GLuint,(VaryingsTemp)/binary,0:((8-((size(VaryingsTemp)+0) rem 8)) rem 8),BufferMode:?GLenum>>). %% @doc Retrieve information about varying variables selected for transform feedback %% @@ -12318,7 +12360,7 @@ transformFeedbackVaryings(Program,Varyings,BufferMode) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetTransformFeedbackVarying.xml">external</a> documentation. -spec getTransformFeedbackVarying(Program, Index, BufSize) -> {Size :: integer(),Type :: enum(),Name :: string()} when Program :: integer(),Index :: integer(),BufSize :: integer(). getTransformFeedbackVarying(Program,Index,BufSize) -> - call(5537, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). + call(5538, <<Program:?GLuint,Index:?GLuint,BufSize:?GLsizei>>). %% @doc specify whether data read via %% @@ -12333,7 +12375,7 @@ getTransformFeedbackVarying(Program,Index,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClampColor.xml">external</a> documentation. -spec clampColor(Target, Clamp) -> 'ok' when Target :: enum(),Clamp :: enum(). clampColor(Target,Clamp) -> - cast(5538, <<Target:?GLenum,Clamp:?GLenum>>). + cast(5539, <<Target:?GLenum,Clamp:?GLenum>>). %% @doc Start conditional rendering %% @@ -12365,84 +12407,84 @@ clampColor(Target,Clamp) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginConditionalRender.xml">external</a> documentation. -spec beginConditionalRender(Id, Mode) -> 'ok' when Id :: integer(),Mode :: enum(). beginConditionalRender(Id,Mode) -> - cast(5539, <<Id:?GLuint,Mode:?GLenum>>). + cast(5540, <<Id:?GLuint,Mode:?GLenum>>). %% @doc %% See {@link beginConditionalRender/2} -spec endConditionalRender() -> 'ok'. endConditionalRender() -> - cast(5540, <<>>). + cast(5541, <<>>). %% @doc glVertexAttribIPointer %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribIPointer.xml">external</a> documentation. -spec vertexAttribIPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem(). vertexAttribIPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) -> - cast(5541, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); + cast(5542, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); vertexAttribIPointer(Index,Size,Type,Stride,Pointer) -> send_bin(Pointer), - cast(5542, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). + cast(5543, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). %% @doc %% See {@link getVertexAttribdv/2} -spec getVertexAttribIiv(Index, Pname) -> {integer(),integer(),integer(),integer()} when Index :: integer(),Pname :: enum(). getVertexAttribIiv(Index,Pname) -> - call(5543, <<Index:?GLuint,Pname:?GLenum>>). + call(5544, <<Index:?GLuint,Pname:?GLenum>>). %% @doc glGetVertexAttribI %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttribI.xml">external</a> documentation. -spec getVertexAttribIuiv(Index, Pname) -> {integer(),integer(),integer(),integer()} when Index :: integer(),Pname :: enum(). getVertexAttribIuiv(Index,Pname) -> - call(5544, <<Index:?GLuint,Pname:?GLenum>>). + call(5545, <<Index:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI1i(Index, X) -> 'ok' when Index :: integer(),X :: integer(). vertexAttribI1i(Index,X) -> - cast(5545, <<Index:?GLuint,X:?GLint>>). + cast(5546, <<Index:?GLuint,X:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI2i(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(). vertexAttribI2i(Index,X,Y) -> - cast(5546, <<Index:?GLuint,X:?GLint,Y:?GLint>>). + cast(5547, <<Index:?GLuint,X:?GLint,Y:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI3i(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(). vertexAttribI3i(Index,X,Y,Z) -> - cast(5547, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint>>). + cast(5548, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI4i(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer(). vertexAttribI4i(Index,X,Y,Z,W) -> - cast(5548, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>). + cast(5549, <<Index:?GLuint,X:?GLint,Y:?GLint,Z:?GLint,W:?GLint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI1ui(Index, X) -> 'ok' when Index :: integer(),X :: integer(). vertexAttribI1ui(Index,X) -> - cast(5549, <<Index:?GLuint,X:?GLuint>>). + cast(5550, <<Index:?GLuint,X:?GLuint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI2ui(Index, X, Y) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(). vertexAttribI2ui(Index,X,Y) -> - cast(5550, <<Index:?GLuint,X:?GLuint,Y:?GLuint>>). + cast(5551, <<Index:?GLuint,X:?GLuint,Y:?GLuint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI3ui(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(). vertexAttribI3ui(Index,X,Y,Z) -> - cast(5551, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint>>). + cast(5552, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI4ui(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: integer(),Y :: integer(),Z :: integer(),W :: integer(). vertexAttribI4ui(Index,X,Y,Z,W) -> - cast(5552, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint,W:?GLuint>>). + cast(5553, <<Index:?GLuint,X:?GLuint,Y:?GLuint,Z:?GLuint,W:?GLuint>>). %% @equiv vertexAttribI1i(Index,X) -spec vertexAttribI1iv(Index :: integer(),V) -> 'ok' when V :: {X :: integer()}. @@ -12480,31 +12522,31 @@ vertexAttribI4uiv(Index,{X,Y,Z,W}) -> vertexAttribI4ui(Index,X,Y,Z,W). %% See {@link vertexAttrib1d/2} -spec vertexAttribI4bv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttribI4bv(Index,{V1,V2,V3,V4}) -> - cast(5553, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). + cast(5554, <<Index:?GLuint,V1:?GLbyte,V2:?GLbyte,V3:?GLbyte,V4:?GLbyte>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI4sv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttribI4sv(Index,{V1,V2,V3,V4}) -> - cast(5554, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>). + cast(5555, <<Index:?GLuint,V1:?GLshort,V2:?GLshort,V3:?GLshort,V4:?GLshort>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI4ubv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttribI4ubv(Index,{V1,V2,V3,V4}) -> - cast(5555, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>). + cast(5556, <<Index:?GLuint,V1:?GLubyte,V2:?GLubyte,V3:?GLubyte,V4:?GLubyte>>). %% @doc %% See {@link vertexAttrib1d/2} -spec vertexAttribI4usv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. vertexAttribI4usv(Index,{V1,V2,V3,V4}) -> - cast(5556, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). + cast(5557, <<Index:?GLuint,V1:?GLushort,V2:?GLushort,V3:?GLushort,V4:?GLushort>>). %% @doc %% See {@link getUniformfv/2} -spec getUniformuiv(Program, Location) -> {integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer()} when Program :: integer(),Location :: integer(). getUniformuiv(Program,Location) -> - call(5557, <<Program:?GLuint,Location:?GLint>>). + call(5558, <<Program:?GLuint,Location:?GLint>>). %% @doc Bind a user-defined varying out variable to a fragment shader color number %% @@ -12531,7 +12573,8 @@ getUniformuiv(Program,Location) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocation.xml">external</a> documentation. -spec bindFragDataLocation(Program, Color, Name) -> 'ok' when Program :: integer(),Color :: integer(),Name :: string(). bindFragDataLocation(Program,Color,Name) -> - cast(5558, <<Program:?GLuint,Color:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + cast(5559, <<Program:?GLuint,Color:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc Query the bindings of color numbers to user-defined varying out variables %% @@ -12544,65 +12587,70 @@ bindFragDataLocation(Program,Color,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetFragDataLocation.xml">external</a> documentation. -spec getFragDataLocation(Program, Name) -> integer() when Program :: integer(),Name :: string(). getFragDataLocation(Program,Name) -> - call(5559, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5560, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc %% See {@link uniform1f/2} -spec uniform1ui(Location, V0) -> 'ok' when Location :: integer(),V0 :: integer(). uniform1ui(Location,V0) -> - cast(5560, <<Location:?GLint,V0:?GLuint>>). + cast(5561, <<Location:?GLint,V0:?GLuint>>). %% @doc %% See {@link uniform1f/2} -spec uniform2ui(Location, V0, V1) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(). uniform2ui(Location,V0,V1) -> - cast(5561, <<Location:?GLint,V0:?GLuint,V1:?GLuint>>). + cast(5562, <<Location:?GLint,V0:?GLuint,V1:?GLuint>>). %% @doc %% See {@link uniform1f/2} -spec uniform3ui(Location, V0, V1, V2) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(). uniform3ui(Location,V0,V1,V2) -> - cast(5562, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>). + cast(5563, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>). %% @doc %% See {@link uniform1f/2} -spec uniform4ui(Location, V0, V1, V2, V3) -> 'ok' when Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer(). uniform4ui(Location,V0,V1,V2,V3) -> - cast(5563, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>). + cast(5564, <<Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>). %% @doc %% See {@link uniform1f/2} -spec uniform1uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [integer()]. uniform1uiv(Location,Value) -> - cast(5564, <<Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5565, <<Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((ValueLen) rem 2)*32)>>). %% @doc %% See {@link uniform1f/2} -spec uniform2uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer()}]. uniform2uiv(Location,Value) -> - cast(5565, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5566, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform3uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer()}]. uniform3uiv(Location,Value) -> - cast(5566, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5567, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform4uiv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}]. uniform4uiv(Location,Value) -> - cast(5567, <<Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5568, <<Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link texParameterf/3} -spec texParameterIiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple(). texParameterIiv(Target,Pname,Params) -> - cast(5568, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint, + cast(5569, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint, (<< <<C:?GLint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>). %% @doc glTexParameterI @@ -12610,21 +12658,21 @@ texParameterIiv(Target,Pname,Params) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexParameterI.xml">external</a> documentation. -spec texParameterIuiv(Target, Pname, Params) -> 'ok' when Target :: enum(),Pname :: enum(),Params :: tuple(). texParameterIuiv(Target,Pname,Params) -> - cast(5569, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint, + cast(5570, <<Target:?GLenum,Pname:?GLenum,(size(Params)):?GLuint, (<< <<C:?GLuint>> ||C <- tuple_to_list(Params)>>)/binary,0:(((1+size(Params)) rem 2)*32)>>). %% @doc %% See {@link getTexParameterfv/2} -spec getTexParameterIiv(Target, Pname) -> {integer(),integer(),integer(),integer()} when Target :: enum(),Pname :: enum(). getTexParameterIiv(Target,Pname) -> - call(5570, <<Target:?GLenum,Pname:?GLenum>>). + call(5571, <<Target:?GLenum,Pname:?GLenum>>). %% @doc glGetTexParameterI %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetTexParameterI.xml">external</a> documentation. -spec getTexParameterIuiv(Target, Pname) -> {integer(),integer(),integer(),integer()} when Target :: enum(),Pname :: enum(). getTexParameterIuiv(Target,Pname) -> - call(5571, <<Target:?GLenum,Pname:?GLenum>>). + call(5572, <<Target:?GLenum,Pname:?GLenum>>). %% @doc Clear individual buffers of the currently bound draw framebuffer %% @@ -12657,21 +12705,21 @@ getTexParameterIuiv(Target,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBuffer.xml">external</a> documentation. -spec clearBufferiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple(). clearBufferiv(Buffer,Drawbuffer,Value) -> - cast(5572, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, + cast(5573, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, (<< <<C:?GLint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>). %% @doc %% See {@link clearBufferiv/3} -spec clearBufferuiv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple(). clearBufferuiv(Buffer,Drawbuffer,Value) -> - cast(5573, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, + cast(5574, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, (<< <<C:?GLuint>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>). %% @doc %% See {@link clearBufferiv/3} -spec clearBufferfv(Buffer, Drawbuffer, Value) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Value :: tuple(). clearBufferfv(Buffer,Drawbuffer,Value) -> - cast(5574, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, + cast(5575, <<Buffer:?GLenum,Drawbuffer:?GLint,(size(Value)):?GLuint, (<< <<C:?GLfloat>> ||C <- tuple_to_list(Value)>>)/binary,0:(((1+size(Value)) rem 2)*32)>>). %% @doc glClearBufferfi @@ -12679,30 +12727,30 @@ clearBufferfv(Buffer,Drawbuffer,Value) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearBufferfi.xml">external</a> documentation. -spec clearBufferfi(Buffer, Drawbuffer, Depth, Stencil) -> 'ok' when Buffer :: enum(),Drawbuffer :: integer(),Depth :: float(),Stencil :: integer(). clearBufferfi(Buffer,Drawbuffer,Depth,Stencil) -> - cast(5575, <<Buffer:?GLenum,Drawbuffer:?GLint,Depth:?GLfloat,Stencil:?GLint>>). + cast(5576, <<Buffer:?GLenum,Drawbuffer:?GLint,Depth:?GLfloat,Stencil:?GLint>>). %% @doc %% See {@link getString/1} -spec getStringi(Name, Index) -> string() when Name :: enum(),Index :: integer(). getStringi(Name,Index) -> - call(5576, <<Name:?GLenum,Index:?GLuint>>). + call(5577, <<Name:?GLenum,Index:?GLuint>>). %% @doc glDrawArraysInstance %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstance.xml">external</a> documentation. -spec drawArraysInstanced(Mode, First, Count, Primcount) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(). drawArraysInstanced(Mode,First,Count,Primcount) -> - cast(5577, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei>>). + cast(5578, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei>>). %% @doc glDrawElementsInstance %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstance.xml">external</a> documentation. -spec drawElementsInstanced(Mode, Count, Type, Indices, Primcount) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(). drawElementsInstanced(Mode,Count,Type,Indices,Primcount) when is_integer(Indices) -> - cast(5578, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei>>); + cast(5579, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei>>); drawElementsInstanced(Mode,Count,Type,Indices,Primcount) -> send_bin(Indices), - cast(5579, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei>>). + cast(5580, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei>>). %% @doc Attach the storage for a buffer object to the active buffer texture %% @@ -12770,7 +12818,7 @@ drawElementsInstanced(Mode,Count,Type,Indices,Primcount) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexBuffer.xml">external</a> documentation. -spec texBuffer(Target, Internalformat, Buffer) -> 'ok' when Target :: enum(),Internalformat :: enum(),Buffer :: integer(). texBuffer(Target,Internalformat,Buffer) -> - cast(5580, <<Target:?GLenum,Internalformat:?GLenum,Buffer:?GLuint>>). + cast(5581, <<Target:?GLenum,Internalformat:?GLenum,Buffer:?GLuint>>). %% @doc Specify the primitive restart index %% @@ -12792,20 +12840,20 @@ texBuffer(Target,Internalformat,Buffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPrimitiveRestartIndex.xml">external</a> documentation. -spec primitiveRestartIndex(Index) -> 'ok' when Index :: integer(). primitiveRestartIndex(Index) -> - cast(5581, <<Index:?GLuint>>). + cast(5582, <<Index:?GLuint>>). %% @doc %% See {@link getBooleanv/1} -spec getInteger64i_v(Target, Index) -> [integer()] when Target :: enum(),Index :: integer(). getInteger64i_v(Target,Index) -> - call(5582, <<Target:?GLenum,Index:?GLuint>>). + call(5583, <<Target:?GLenum,Index:?GLuint>>). %% @doc glGetBufferParameteri64v %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetBufferParameteri64v.xml">external</a> documentation. -spec getBufferParameteri64v(Target, Pname) -> [integer()] when Target :: enum(),Pname :: enum(). getBufferParameteri64v(Target,Pname) -> - call(5583, <<Target:?GLenum,Pname:?GLenum>>). + call(5584, <<Target:?GLenum,Pname:?GLenum>>). %% @doc Attach a level of a texture object as a logical buffer to the currently bound framebuffer object %% @@ -12862,7 +12910,7 @@ getBufferParameteri64v(Target,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferTexture.xml">external</a> documentation. -spec framebufferTexture(Target, Attachment, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(). framebufferTexture(Target,Attachment,Texture,Level) -> - cast(5584, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint>>). + cast(5585, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint>>). %% @doc Modify the rate at which generic vertex attributes advance during instanced rendering %% @@ -12878,7 +12926,7 @@ framebufferTexture(Target,Attachment,Texture,Level) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribDivisor.xml">external</a> documentation. -spec vertexAttribDivisor(Index, Divisor) -> 'ok' when Index :: integer(),Divisor :: integer(). vertexAttribDivisor(Index,Divisor) -> - cast(5585, <<Index:?GLuint,Divisor:?GLuint>>). + cast(5586, <<Index:?GLuint,Divisor:?GLuint>>). %% @doc Specifies minimum rate at which sample shaing takes place %% @@ -12899,107 +12947,112 @@ vertexAttribDivisor(Index,Divisor) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMinSampleShading.xml">external</a> documentation. -spec minSampleShading(Value) -> 'ok' when Value :: clamp(). minSampleShading(Value) -> - cast(5586, <<Value:?GLclampf>>). + cast(5587, <<Value:?GLclampf>>). %% @doc %% See {@link blendEquation/1} -spec blendEquationi(Buf, Mode) -> 'ok' when Buf :: integer(),Mode :: enum(). blendEquationi(Buf,Mode) -> - cast(5587, <<Buf:?GLuint,Mode:?GLenum>>). + cast(5588, <<Buf:?GLuint,Mode:?GLenum>>). %% @doc %% See {@link blendEquationSeparate/2} -spec blendEquationSeparatei(Buf, ModeRGB, ModeAlpha) -> 'ok' when Buf :: integer(),ModeRGB :: enum(),ModeAlpha :: enum(). blendEquationSeparatei(Buf,ModeRGB,ModeAlpha) -> - cast(5588, <<Buf:?GLuint,ModeRGB:?GLenum,ModeAlpha:?GLenum>>). + cast(5589, <<Buf:?GLuint,ModeRGB:?GLenum,ModeAlpha:?GLenum>>). %% @doc glBlendFunci %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunci.xml">external</a> documentation. -spec blendFunci(Buf, Src, Dst) -> 'ok' when Buf :: integer(),Src :: enum(),Dst :: enum(). blendFunci(Buf,Src,Dst) -> - cast(5589, <<Buf:?GLuint,Src:?GLenum,Dst:?GLenum>>). + cast(5590, <<Buf:?GLuint,Src:?GLenum,Dst:?GLenum>>). %% @doc %% See {@link blendFuncSeparate/4} -spec blendFuncSeparatei(Buf, SrcRGB, DstRGB, SrcAlpha, DstAlpha) -> 'ok' when Buf :: integer(),SrcRGB :: enum(),DstRGB :: enum(),SrcAlpha :: enum(),DstAlpha :: enum(). blendFuncSeparatei(Buf,SrcRGB,DstRGB,SrcAlpha,DstAlpha) -> - cast(5590, <<Buf:?GLuint,SrcRGB:?GLenum,DstRGB:?GLenum,SrcAlpha:?GLenum,DstAlpha:?GLenum>>). + cast(5591, <<Buf:?GLuint,SrcRGB:?GLenum,DstRGB:?GLenum,SrcAlpha:?GLenum,DstAlpha:?GLenum>>). %% @doc glLoadTransposeMatrixARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation. -spec loadTransposeMatrixfARB(M) -> 'ok' when M :: matrix(). loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) -> - cast(5591, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>); + cast(5592, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>); loadTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) -> - cast(5591, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,0:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,0:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,0:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,1:?GLfloat>>). + cast(5592, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,0:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,0:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,0:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,1:?GLfloat>>). %% @doc glLoadTransposeMatrixARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLoadTransposeMatrixARB.xml">external</a> documentation. -spec loadTransposeMatrixdARB(M) -> 'ok' when M :: matrix(). loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) -> - cast(5592, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>); + cast(5593, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>); loadTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) -> - cast(5592, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,0:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,0:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,0:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,1:?GLdouble>>). + cast(5593, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,0:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,0:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,0:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,1:?GLdouble>>). %% @doc glMultTransposeMatrixARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation. -spec multTransposeMatrixfARB(M) -> 'ok' when M :: matrix(). multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) -> - cast(5593, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>); + cast(5594, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,M13:?GLfloat,M14:?GLfloat,M15:?GLfloat,M16:?GLfloat>>); multTransposeMatrixfARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) -> - cast(5593, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,0:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,0:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,0:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,1:?GLfloat>>). + cast(5594, <<M1:?GLfloat,M2:?GLfloat,M3:?GLfloat,0:?GLfloat,M4:?GLfloat,M5:?GLfloat,M6:?GLfloat,0:?GLfloat,M7:?GLfloat,M8:?GLfloat,M9:?GLfloat,0:?GLfloat,M10:?GLfloat,M11:?GLfloat,M12:?GLfloat,1:?GLfloat>>). %% @doc glMultTransposeMatrixARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMultTransposeMatrixARB.xml">external</a> documentation. -spec multTransposeMatrixdARB(M) -> 'ok' when M :: matrix(). multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12,M13,M14,M15,M16}) -> - cast(5594, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>); + cast(5595, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,M13:?GLdouble,M14:?GLdouble,M15:?GLdouble,M16:?GLdouble>>); multTransposeMatrixdARB({M1,M2,M3,M4,M5,M6,M7,M8,M9,M10,M11,M12}) -> - cast(5594, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,0:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,0:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,0:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,1:?GLdouble>>). + cast(5595, <<M1:?GLdouble,M2:?GLdouble,M3:?GLdouble,0:?GLdouble,M4:?GLdouble,M5:?GLdouble,M6:?GLdouble,0:?GLdouble,M7:?GLdouble,M8:?GLdouble,M9:?GLdouble,0:?GLdouble,M10:?GLdouble,M11:?GLdouble,M12:?GLdouble,1:?GLdouble>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightbvARB(Weights) -> 'ok' when Weights :: [integer()]. weightbvARB(Weights) -> - cast(5595, <<(length(Weights)):?GLuint, - (<< <<C:?GLbyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>). + WeightsLen = length(Weights), + cast(5596, <<WeightsLen:?GLuint, + (<< <<C:?GLbyte>> || C <- Weights>>)/binary,0:((8-((WeightsLen+ 4) rem 8)) rem 8)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightsvARB(Weights) -> 'ok' when Weights :: [integer()]. weightsvARB(Weights) -> - cast(5596, <<(length(Weights)):?GLuint, - (<< <<C:?GLshort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>). + WeightsLen = length(Weights), + cast(5597, <<WeightsLen:?GLuint, + (<< <<C:?GLshort>> || C <- Weights>>)/binary,0:((8-((WeightsLen*2+ 4) rem 8)) rem 8)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightivARB(Weights) -> 'ok' when Weights :: [integer()]. weightivARB(Weights) -> - cast(5597, <<(length(Weights)):?GLuint, - (<< <<C:?GLint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>). + WeightsLen = length(Weights), + cast(5598, <<WeightsLen:?GLuint, + (<< <<C:?GLint>> || C <- Weights>>)/binary,0:(((1+WeightsLen) rem 2)*32)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightfvARB(Weights) -> 'ok' when Weights :: [float()]. weightfvARB(Weights) -> - cast(5598, <<(length(Weights)):?GLuint, - (<< <<C:?GLfloat>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>). + WeightsLen = length(Weights), + cast(5599, <<WeightsLen:?GLuint, + (<< <<C:?GLfloat>> || C <- Weights>>)/binary,0:(((1+WeightsLen) rem 2)*32)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightdvARB(Weights) -> 'ok' when Weights :: [float()]. weightdvARB(Weights) -> - cast(5599, <<(length(Weights)):?GLuint,0:32, + WeightsLen = length(Weights), + cast(5600, <<WeightsLen:?GLuint,0:32, (<< <<C:?GLdouble>> || C <- Weights>>)/binary>>). %% @doc glWeightARB @@ -13007,175 +13060,183 @@ weightdvARB(Weights) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightubvARB(Weights) -> 'ok' when Weights :: [integer()]. weightubvARB(Weights) -> - cast(5600, <<(length(Weights)):?GLuint, - (<< <<C:?GLubyte>> || C <- Weights>>)/binary,0:((8-((length(Weights)+ 4) rem 8)) rem 8)>>). + WeightsLen = length(Weights), + cast(5601, <<WeightsLen:?GLuint, + (<< <<C:?GLubyte>> || C <- Weights>>)/binary,0:((8-((WeightsLen+ 4) rem 8)) rem 8)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightusvARB(Weights) -> 'ok' when Weights :: [integer()]. weightusvARB(Weights) -> - cast(5601, <<(length(Weights)):?GLuint, - (<< <<C:?GLushort>> || C <- Weights>>)/binary,0:((8-((length(Weights)*2+ 4) rem 8)) rem 8)>>). + WeightsLen = length(Weights), + cast(5602, <<WeightsLen:?GLuint, + (<< <<C:?GLushort>> || C <- Weights>>)/binary,0:((8-((WeightsLen*2+ 4) rem 8)) rem 8)>>). %% @doc glWeightARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWeightARB.xml">external</a> documentation. -spec weightuivARB(Weights) -> 'ok' when Weights :: [integer()]. weightuivARB(Weights) -> - cast(5602, <<(length(Weights)):?GLuint, - (<< <<C:?GLuint>> || C <- Weights>>)/binary,0:(((1+length(Weights)) rem 2)*32)>>). + WeightsLen = length(Weights), + cast(5603, <<WeightsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Weights>>)/binary,0:(((1+WeightsLen) rem 2)*32)>>). %% @doc glVertexBlenARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexBlenARB.xml">external</a> documentation. -spec vertexBlendARB(Count) -> 'ok' when Count :: integer(). vertexBlendARB(Count) -> - cast(5603, <<Count:?GLint>>). + cast(5604, <<Count:?GLint>>). %% @doc glCurrentPaletteMatrixARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCurrentPaletteMatrixARB.xml">external</a> documentation. -spec currentPaletteMatrixARB(Index) -> 'ok' when Index :: integer(). currentPaletteMatrixARB(Index) -> - cast(5604, <<Index:?GLint>>). + cast(5605, <<Index:?GLint>>). %% @doc glMatrixIndexARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation. -spec matrixIndexubvARB(Indices) -> 'ok' when Indices :: [integer()]. matrixIndexubvARB(Indices) -> - cast(5605, <<(length(Indices)):?GLuint, - (<< <<C:?GLubyte>> || C <- Indices>>)/binary,0:((8-((length(Indices)+ 4) rem 8)) rem 8)>>). + IndicesLen = length(Indices), + cast(5606, <<IndicesLen:?GLuint, + (<< <<C:?GLubyte>> || C <- Indices>>)/binary,0:((8-((IndicesLen+ 4) rem 8)) rem 8)>>). %% @doc glMatrixIndexARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation. -spec matrixIndexusvARB(Indices) -> 'ok' when Indices :: [integer()]. matrixIndexusvARB(Indices) -> - cast(5606, <<(length(Indices)):?GLuint, - (<< <<C:?GLushort>> || C <- Indices>>)/binary,0:((8-((length(Indices)*2+ 4) rem 8)) rem 8)>>). + IndicesLen = length(Indices), + cast(5607, <<IndicesLen:?GLuint, + (<< <<C:?GLushort>> || C <- Indices>>)/binary,0:((8-((IndicesLen*2+ 4) rem 8)) rem 8)>>). %% @doc glMatrixIndexARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMatrixIndexARB.xml">external</a> documentation. -spec matrixIndexuivARB(Indices) -> 'ok' when Indices :: [integer()]. matrixIndexuivARB(Indices) -> - cast(5607, <<(length(Indices)):?GLuint, - (<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((1+length(Indices)) rem 2)*32)>>). + IndicesLen = length(Indices), + cast(5608, <<IndicesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((1+IndicesLen) rem 2)*32)>>). %% @doc glProgramStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramStringARB.xml">external</a> documentation. -spec programStringARB(Target, Format, String) -> 'ok' when Target :: enum(),Format :: enum(),String :: string(). programStringARB(Target,Format,String) -> - cast(5608, <<Target:?GLenum,Format:?GLenum,(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>). + StringLen = length(String), + cast(5609, <<Target:?GLenum,Format:?GLenum,(list_to_binary([String|[0]]))/binary,0:((8-((StringLen+ 1) rem 8)) rem 8)>>). %% @doc glBindProgramARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramARB.xml">external</a> documentation. -spec bindProgramARB(Target, Program) -> 'ok' when Target :: enum(),Program :: integer(). bindProgramARB(Target,Program) -> - cast(5609, <<Target:?GLenum,Program:?GLuint>>). + cast(5610, <<Target:?GLenum,Program:?GLuint>>). %% @doc glDeleteProgramsARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramsARB.xml">external</a> documentation. -spec deleteProgramsARB(Programs) -> 'ok' when Programs :: [integer()]. deleteProgramsARB(Programs) -> - cast(5610, <<(length(Programs)):?GLuint, - (<< <<C:?GLuint>> || C <- Programs>>)/binary,0:(((1+length(Programs)) rem 2)*32)>>). + ProgramsLen = length(Programs), + cast(5611, <<ProgramsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Programs>>)/binary,0:(((1+ProgramsLen) rem 2)*32)>>). %% @doc glGenProgramsARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenProgramsARB.xml">external</a> documentation. -spec genProgramsARB(N) -> [integer()] when N :: integer(). genProgramsARB(N) -> - call(5611, <<N:?GLsizei>>). + call(5612, <<N:?GLsizei>>). %% @doc glProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation. -spec programEnvParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). programEnvParameter4dARB(Target,Index,X,Y,Z,W) -> - cast(5612, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). + cast(5613, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). %% @doc glProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation. -spec programEnvParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}. programEnvParameter4dvARB(Target,Index,{P1,P2,P3,P4}) -> - cast(5613, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>). + cast(5614, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>). %% @doc glProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation. -spec programEnvParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). programEnvParameter4fARB(Target,Index,X,Y,Z,W) -> - cast(5614, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). + cast(5615, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). %% @doc glProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramEnvParameterARB.xml">external</a> documentation. -spec programEnvParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}. programEnvParameter4fvARB(Target,Index,{P1,P2,P3,P4}) -> - cast(5615, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>). + cast(5616, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>). %% @doc glProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation. -spec programLocalParameter4dARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). programLocalParameter4dARB(Target,Index,X,Y,Z,W) -> - cast(5616, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). + cast(5617, <<Target:?GLenum,Index:?GLuint,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). %% @doc glProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation. -spec programLocalParameter4dvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}. programLocalParameter4dvARB(Target,Index,{P1,P2,P3,P4}) -> - cast(5617, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>). + cast(5618, <<Target:?GLenum,Index:?GLuint,P1:?GLdouble,P2:?GLdouble,P3:?GLdouble,P4:?GLdouble>>). %% @doc glProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation. -spec programLocalParameter4fARB(Target, Index, X, Y, Z, W) -> 'ok' when Target :: enum(),Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). programLocalParameter4fARB(Target,Index,X,Y,Z,W) -> - cast(5618, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). + cast(5619, <<Target:?GLenum,Index:?GLuint,X:?GLfloat,Y:?GLfloat,Z:?GLfloat,W:?GLfloat>>). %% @doc glProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramLocalParameterARB.xml">external</a> documentation. -spec programLocalParameter4fvARB(Target, Index, Params) -> 'ok' when Target :: enum(),Index :: integer(),Params :: {float(),float(),float(),float()}. programLocalParameter4fvARB(Target,Index,{P1,P2,P3,P4}) -> - cast(5619, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>). + cast(5620, <<Target:?GLenum,Index:?GLuint,P1:?GLfloat,P2:?GLfloat,P3:?GLfloat,P4:?GLfloat>>). %% @doc glGetProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramEnvParameterARB.xml">external</a> documentation. -spec getProgramEnvParameterdvARB(Target, Index) -> {float(),float(),float(),float()} when Target :: enum(),Index :: integer(). getProgramEnvParameterdvARB(Target,Index) -> - call(5620, <<Target:?GLenum,Index:?GLuint>>). + call(5621, <<Target:?GLenum,Index:?GLuint>>). %% @doc glGetProgramEnvParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramEnvParameterARB.xml">external</a> documentation. -spec getProgramEnvParameterfvARB(Target, Index) -> {float(),float(),float(),float()} when Target :: enum(),Index :: integer(). getProgramEnvParameterfvARB(Target,Index) -> - call(5621, <<Target:?GLenum,Index:?GLuint>>). + call(5622, <<Target:?GLenum,Index:?GLuint>>). %% @doc glGetProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramLocalParameterARB.xml">external</a> documentation. -spec getProgramLocalParameterdvARB(Target, Index) -> {float(),float(),float(),float()} when Target :: enum(),Index :: integer(). getProgramLocalParameterdvARB(Target,Index) -> - call(5622, <<Target:?GLenum,Index:?GLuint>>). + call(5623, <<Target:?GLenum,Index:?GLuint>>). %% @doc glGetProgramLocalParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramLocalParameterARB.xml">external</a> documentation. -spec getProgramLocalParameterfvARB(Target, Index) -> {float(),float(),float(),float()} when Target :: enum(),Index :: integer(). getProgramLocalParameterfvARB(Target,Index) -> - call(5623, <<Target:?GLenum,Index:?GLuint>>). + call(5624, <<Target:?GLenum,Index:?GLuint>>). %% @doc glGetProgramStringARB %% @@ -13183,176 +13244,180 @@ getProgramLocalParameterfvARB(Target,Index) -> -spec getProgramStringARB(Target, Pname, String) -> 'ok' when Target :: enum(),Pname :: enum(),String :: mem(). getProgramStringARB(Target,Pname,String) -> send_bin(String), - call(5624, <<Target:?GLenum,Pname:?GLenum>>). + call(5625, <<Target:?GLenum,Pname:?GLenum>>). %% @doc glGetBufferParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetBufferParameterARB.xml">external</a> documentation. -spec getBufferParameterivARB(Target, Pname) -> [integer()] when Target :: enum(),Pname :: enum(). getBufferParameterivARB(Target,Pname) -> - call(5625, <<Target:?GLenum,Pname:?GLenum>>). + call(5626, <<Target:?GLenum,Pname:?GLenum>>). %% @doc glDeleteObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteObjectARB.xml">external</a> documentation. -spec deleteObjectARB(Obj) -> 'ok' when Obj :: integer(). deleteObjectARB(Obj) -> - cast(5626, <<Obj:?GLhandleARB>>). + cast(5627, <<Obj:?GLhandleARB>>). %% @doc glGetHandleARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetHandleARB.xml">external</a> documentation. -spec getHandleARB(Pname) -> integer() when Pname :: enum(). getHandleARB(Pname) -> - call(5627, <<Pname:?GLenum>>). + call(5628, <<Pname:?GLenum>>). %% @doc glDetachObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDetachObjectARB.xml">external</a> documentation. -spec detachObjectARB(ContainerObj, AttachedObj) -> 'ok' when ContainerObj :: integer(),AttachedObj :: integer(). detachObjectARB(ContainerObj,AttachedObj) -> - cast(5628, <<ContainerObj:?GLhandleARB,AttachedObj:?GLhandleARB>>). + cast(5629, <<ContainerObj:?GLhandleARB,AttachedObj:?GLhandleARB>>). %% @doc glCreateShaderObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCreateShaderObjectARB.xml">external</a> documentation. -spec createShaderObjectARB(ShaderType) -> integer() when ShaderType :: enum(). createShaderObjectARB(ShaderType) -> - call(5629, <<ShaderType:?GLenum>>). + call(5630, <<ShaderType:?GLenum>>). %% @doc glShaderSourceARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderSourceARB.xml">external</a> documentation. -spec shaderSourceARB(ShaderObj, String) -> 'ok' when ShaderObj :: integer(),String :: iolist(). shaderSourceARB(ShaderObj,String) -> - StringTemp = list_to_binary([[Str|[0]] || Str <- String ]), - cast(5630, <<ShaderObj:?GLhandleARB,(length(String)):?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+4) rem 8)) rem 8)>>). + StringTemp = list_to_binary([[Str|[0]] || Str <- String ]), + StringLen = length(String), + cast(5631, <<ShaderObj:?GLhandleARB,StringLen:?GLuint,(size(StringTemp)):?GLuint,(StringTemp)/binary,0:((8-((size(StringTemp)+4) rem 8)) rem 8)>>). %% @doc glCompileShaderARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderARB.xml">external</a> documentation. -spec compileShaderARB(ShaderObj) -> 'ok' when ShaderObj :: integer(). compileShaderARB(ShaderObj) -> - cast(5631, <<ShaderObj:?GLhandleARB>>). + cast(5632, <<ShaderObj:?GLhandleARB>>). %% @doc glCreateProgramObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCreateProgramObjectARB.xml">external</a> documentation. -spec createProgramObjectARB() -> integer(). createProgramObjectARB() -> - call(5632, <<>>). + call(5633, <<>>). %% @doc glAttachObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glAttachObjectARB.xml">external</a> documentation. -spec attachObjectARB(ContainerObj, Obj) -> 'ok' when ContainerObj :: integer(),Obj :: integer(). attachObjectARB(ContainerObj,Obj) -> - cast(5633, <<ContainerObj:?GLhandleARB,Obj:?GLhandleARB>>). + cast(5634, <<ContainerObj:?GLhandleARB,Obj:?GLhandleARB>>). %% @doc glLinkProgramARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glLinkProgramARB.xml">external</a> documentation. -spec linkProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer(). linkProgramARB(ProgramObj) -> - cast(5634, <<ProgramObj:?GLhandleARB>>). + cast(5635, <<ProgramObj:?GLhandleARB>>). %% @doc glUseProgramObjectARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramObjectARB.xml">external</a> documentation. -spec useProgramObjectARB(ProgramObj) -> 'ok' when ProgramObj :: integer(). useProgramObjectARB(ProgramObj) -> - cast(5635, <<ProgramObj:?GLhandleARB>>). + cast(5636, <<ProgramObj:?GLhandleARB>>). %% @doc glValidateProgramARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramARB.xml">external</a> documentation. -spec validateProgramARB(ProgramObj) -> 'ok' when ProgramObj :: integer(). validateProgramARB(ProgramObj) -> - cast(5636, <<ProgramObj:?GLhandleARB>>). + cast(5637, <<ProgramObj:?GLhandleARB>>). %% @doc glGetObjectParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetObjectParameterARB.xml">external</a> documentation. -spec getObjectParameterfvARB(Obj, Pname) -> float() when Obj :: integer(),Pname :: enum(). getObjectParameterfvARB(Obj,Pname) -> - call(5637, <<Obj:?GLhandleARB,Pname:?GLenum>>). + call(5638, <<Obj:?GLhandleARB,Pname:?GLenum>>). %% @doc glGetObjectParameterARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetObjectParameterARB.xml">external</a> documentation. -spec getObjectParameterivARB(Obj, Pname) -> integer() when Obj :: integer(),Pname :: enum(). getObjectParameterivARB(Obj,Pname) -> - call(5638, <<Obj:?GLhandleARB,Pname:?GLenum>>). + call(5639, <<Obj:?GLhandleARB,Pname:?GLenum>>). %% @doc glGetInfoLogARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetInfoLogARB.xml">external</a> documentation. -spec getInfoLogARB(Obj, MaxLength) -> string() when Obj :: integer(),MaxLength :: integer(). getInfoLogARB(Obj,MaxLength) -> - call(5639, <<Obj:?GLhandleARB,MaxLength:?GLsizei>>). + call(5640, <<Obj:?GLhandleARB,MaxLength:?GLsizei>>). %% @doc glGetAttachedObjectsARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetAttachedObjectsARB.xml">external</a> documentation. -spec getAttachedObjectsARB(ContainerObj, MaxCount) -> [integer()] when ContainerObj :: integer(),MaxCount :: integer(). getAttachedObjectsARB(ContainerObj,MaxCount) -> - call(5640, <<ContainerObj:?GLhandleARB,MaxCount:?GLsizei>>). + call(5641, <<ContainerObj:?GLhandleARB,MaxCount:?GLsizei>>). %% @doc glGetUniformLocationARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformLocationARB.xml">external</a> documentation. -spec getUniformLocationARB(ProgramObj, Name) -> integer() when ProgramObj :: integer(),Name :: string(). getUniformLocationARB(ProgramObj,Name) -> - call(5641, <<ProgramObj:?GLhandleARB,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5642, <<ProgramObj:?GLhandleARB,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc glGetActiveUniformARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniformARB.xml">external</a> documentation. -spec getActiveUniformARB(ProgramObj, Index, MaxLength) -> {Size :: integer(),Type :: enum(),Name :: string()} when ProgramObj :: integer(),Index :: integer(),MaxLength :: integer(). getActiveUniformARB(ProgramObj,Index,MaxLength) -> - call(5642, <<ProgramObj:?GLhandleARB,Index:?GLuint,MaxLength:?GLsizei>>). + call(5643, <<ProgramObj:?GLhandleARB,Index:?GLuint,MaxLength:?GLsizei>>). %% @doc glGetUniformARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformARB.xml">external</a> documentation. -spec getUniformfvARB(ProgramObj, Location) -> matrix() when ProgramObj :: integer(),Location :: integer(). getUniformfvARB(ProgramObj,Location) -> - call(5643, <<ProgramObj:?GLhandleARB,Location:?GLint>>). + call(5644, <<ProgramObj:?GLhandleARB,Location:?GLint>>). %% @doc glGetUniformARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformARB.xml">external</a> documentation. -spec getUniformivARB(ProgramObj, Location) -> {integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer()} when ProgramObj :: integer(),Location :: integer(). getUniformivARB(ProgramObj,Location) -> - call(5644, <<ProgramObj:?GLhandleARB,Location:?GLint>>). + call(5645, <<ProgramObj:?GLhandleARB,Location:?GLint>>). %% @doc glGetShaderSourceARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderSourceARB.xml">external</a> documentation. -spec getShaderSourceARB(Obj, MaxLength) -> string() when Obj :: integer(),MaxLength :: integer(). getShaderSourceARB(Obj,MaxLength) -> - call(5645, <<Obj:?GLhandleARB,MaxLength:?GLsizei>>). + call(5646, <<Obj:?GLhandleARB,MaxLength:?GLsizei>>). %% @doc glBindAttribLocationARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocationARB.xml">external</a> documentation. -spec bindAttribLocationARB(ProgramObj, Index, Name) -> 'ok' when ProgramObj :: integer(),Index :: integer(),Name :: string(). bindAttribLocationARB(ProgramObj,Index,Name) -> - cast(5646, <<ProgramObj:?GLhandleARB,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + cast(5647, <<ProgramObj:?GLhandleARB,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc glGetActiveAttribARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveAttribARB.xml">external</a> documentation. -spec getActiveAttribARB(ProgramObj, Index, MaxLength) -> {Size :: integer(),Type :: enum(),Name :: string()} when ProgramObj :: integer(),Index :: integer(),MaxLength :: integer(). getActiveAttribARB(ProgramObj,Index,MaxLength) -> - call(5647, <<ProgramObj:?GLhandleARB,Index:?GLuint,MaxLength:?GLsizei>>). + call(5648, <<ProgramObj:?GLhandleARB,Index:?GLuint,MaxLength:?GLsizei>>). %% @doc glGetAttribLocationARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetAttribLocationARB.xml">external</a> documentation. -spec getAttribLocationARB(ProgramObj, Name) -> integer() when ProgramObj :: integer(),Name :: string(). getAttribLocationARB(ProgramObj,Name) -> - call(5648, <<ProgramObj:?GLhandleARB,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5649, <<ProgramObj:?GLhandleARB,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc Determine if a name corresponds to a renderbuffer object %% @@ -13367,7 +13432,7 @@ getAttribLocationARB(ProgramObj,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsRenderbuffer.xml">external</a> documentation. -spec isRenderbuffer(Renderbuffer) -> 0|1 when Renderbuffer :: integer(). isRenderbuffer(Renderbuffer) -> - call(5649, <<Renderbuffer:?GLuint>>). + call(5650, <<Renderbuffer:?GLuint>>). %% @doc Bind a renderbuffer to a renderbuffer target %% @@ -13380,7 +13445,7 @@ isRenderbuffer(Renderbuffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindRenderbuffer.xml">external</a> documentation. -spec bindRenderbuffer(Target, Renderbuffer) -> 'ok' when Target :: enum(),Renderbuffer :: integer(). bindRenderbuffer(Target,Renderbuffer) -> - cast(5650, <<Target:?GLenum,Renderbuffer:?GLuint>>). + cast(5651, <<Target:?GLenum,Renderbuffer:?GLuint>>). %% @doc Delete renderbuffer objects %% @@ -13402,8 +13467,9 @@ bindRenderbuffer(Target,Renderbuffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteRenderbuffers.xml">external</a> documentation. -spec deleteRenderbuffers(Renderbuffers) -> 'ok' when Renderbuffers :: [integer()]. deleteRenderbuffers(Renderbuffers) -> - cast(5651, <<(length(Renderbuffers)):?GLuint, - (<< <<C:?GLuint>> || C <- Renderbuffers>>)/binary,0:(((1+length(Renderbuffers)) rem 2)*32)>>). + RenderbuffersLen = length(Renderbuffers), + cast(5652, <<RenderbuffersLen:?GLuint, + (<< <<C:?GLuint>> || C <- Renderbuffers>>)/binary,0:(((1+RenderbuffersLen) rem 2)*32)>>). %% @doc Generate renderbuffer object names %% @@ -13421,7 +13487,7 @@ deleteRenderbuffers(Renderbuffers) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenRenderbuffers.xml">external</a> documentation. -spec genRenderbuffers(N) -> [integer()] when N :: integer(). genRenderbuffers(N) -> - call(5652, <<N:?GLsizei>>). + call(5653, <<N:?GLsizei>>). %% @doc Establish data storage, format and dimensions of a renderbuffer object's image %% @@ -13442,7 +13508,7 @@ genRenderbuffers(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorage.xml">external</a> documentation. -spec renderbufferStorage(Target, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Internalformat :: enum(),Width :: integer(),Height :: integer(). renderbufferStorage(Target,Internalformat,Width,Height) -> - cast(5653, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). + cast(5654, <<Target:?GLenum,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). %% @doc Retrieve information about a bound renderbuffer object %% @@ -13470,7 +13536,7 @@ renderbufferStorage(Target,Internalformat,Width,Height) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetRenderbufferParameter.xml">external</a> documentation. -spec getRenderbufferParameteriv(Target, Pname) -> integer() when Target :: enum(),Pname :: enum(). getRenderbufferParameteriv(Target,Pname) -> - call(5654, <<Target:?GLenum,Pname:?GLenum>>). + call(5655, <<Target:?GLenum,Pname:?GLenum>>). %% @doc Determine if a name corresponds to a framebuffer object %% @@ -13484,7 +13550,7 @@ getRenderbufferParameteriv(Target,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsFramebuffer.xml">external</a> documentation. -spec isFramebuffer(Framebuffer) -> 0|1 when Framebuffer :: integer(). isFramebuffer(Framebuffer) -> - call(5655, <<Framebuffer:?GLuint>>). + call(5656, <<Framebuffer:?GLuint>>). %% @doc Bind a framebuffer to a framebuffer target %% @@ -13502,7 +13568,7 @@ isFramebuffer(Framebuffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFramebuffer.xml">external</a> documentation. -spec bindFramebuffer(Target, Framebuffer) -> 'ok' when Target :: enum(),Framebuffer :: integer(). bindFramebuffer(Target,Framebuffer) -> - cast(5656, <<Target:?GLenum,Framebuffer:?GLuint>>). + cast(5657, <<Target:?GLenum,Framebuffer:?GLuint>>). %% @doc Delete framebuffer objects %% @@ -13517,8 +13583,9 @@ bindFramebuffer(Target,Framebuffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteFramebuffers.xml">external</a> documentation. -spec deleteFramebuffers(Framebuffers) -> 'ok' when Framebuffers :: [integer()]. deleteFramebuffers(Framebuffers) -> - cast(5657, <<(length(Framebuffers)):?GLuint, - (<< <<C:?GLuint>> || C <- Framebuffers>>)/binary,0:(((1+length(Framebuffers)) rem 2)*32)>>). + FramebuffersLen = length(Framebuffers), + cast(5658, <<FramebuffersLen:?GLuint, + (<< <<C:?GLuint>> || C <- Framebuffers>>)/binary,0:(((1+FramebuffersLen) rem 2)*32)>>). %% @doc Generate framebuffer object names %% @@ -13536,7 +13603,7 @@ deleteFramebuffers(Framebuffers) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenFramebuffers.xml">external</a> documentation. -spec genFramebuffers(N) -> [integer()] when N :: integer(). genFramebuffers(N) -> - call(5658, <<N:?GLsizei>>). + call(5659, <<N:?GLsizei>>). %% @doc Check the completeness status of a framebuffer %% @@ -13587,25 +13654,25 @@ genFramebuffers(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCheckFramebufferStatus.xml">external</a> documentation. -spec checkFramebufferStatus(Target) -> enum() when Target :: enum(). checkFramebufferStatus(Target) -> - call(5659, <<Target:?GLenum>>). + call(5660, <<Target:?GLenum>>). %% @doc %% See {@link framebufferTexture/4} -spec framebufferTexture1D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(). framebufferTexture1D(Target,Attachment,Textarget,Texture,Level) -> - cast(5660, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>). + cast(5661, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>). %% @doc %% See {@link framebufferTexture/4} -spec framebufferTexture2D(Target, Attachment, Textarget, Texture, Level) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(). framebufferTexture2D(Target,Attachment,Textarget,Texture,Level) -> - cast(5661, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>). + cast(5662, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint>>). %% @doc %% See {@link framebufferTexture/4} -spec framebufferTexture3D(Target, Attachment, Textarget, Texture, Level, Zoffset) -> 'ok' when Target :: enum(),Attachment :: enum(),Textarget :: enum(),Texture :: integer(),Level :: integer(),Zoffset :: integer(). framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) -> - cast(5662, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint,Zoffset:?GLint>>). + cast(5663, <<Target:?GLenum,Attachment:?GLenum,Textarget:?GLenum,Texture:?GLuint,Level:?GLint,Zoffset:?GLint>>). %% @doc Attach a renderbuffer as a logical buffer to the currently bound framebuffer object %% @@ -13637,7 +13704,7 @@ framebufferTexture3D(Target,Attachment,Textarget,Texture,Level,Zoffset) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFramebufferRenderbuffer.xml">external</a> documentation. -spec framebufferRenderbuffer(Target, Attachment, Renderbuffertarget, Renderbuffer) -> 'ok' when Target :: enum(),Attachment :: enum(),Renderbuffertarget :: enum(),Renderbuffer :: integer(). framebufferRenderbuffer(Target,Attachment,Renderbuffertarget,Renderbuffer) -> - cast(5663, <<Target:?GLenum,Attachment:?GLenum,Renderbuffertarget:?GLenum,Renderbuffer:?GLuint>>). + cast(5664, <<Target:?GLenum,Attachment:?GLenum,Renderbuffertarget:?GLenum,Renderbuffer:?GLuint>>). %% @doc Retrieve information about attachments of a bound framebuffer object %% @@ -13733,7 +13800,7 @@ framebufferRenderbuffer(Target,Attachment,Renderbuffertarget,Renderbuffer) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetFramebufferAttachmentParameter.xml">external</a> documentation. -spec getFramebufferAttachmentParameteriv(Target, Attachment, Pname) -> integer() when Target :: enum(),Attachment :: enum(),Pname :: enum(). getFramebufferAttachmentParameteriv(Target,Attachment,Pname) -> - call(5664, <<Target:?GLenum,Attachment:?GLenum,Pname:?GLenum>>). + call(5665, <<Target:?GLenum,Attachment:?GLenum,Pname:?GLenum>>). %% @doc Generate mipmaps for a specified texture target %% @@ -13753,7 +13820,7 @@ getFramebufferAttachmentParameteriv(Target,Attachment,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenerateMipmap.xml">external</a> documentation. -spec generateMipmap(Target) -> 'ok' when Target :: enum(). generateMipmap(Target) -> - cast(5665, <<Target:?GLenum>>). + cast(5666, <<Target:?GLenum>>). %% @doc Copy a block of pixels from the read framebuffer to the draw framebuffer %% @@ -13795,7 +13862,7 @@ generateMipmap(Target) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBlitFramebuffer.xml">external</a> documentation. -spec blitFramebuffer(SrcX0, SrcY0, SrcX1, SrcY1, DstX0, DstY0, DstX1, DstY1, Mask, Filter) -> 'ok' when SrcX0 :: integer(),SrcY0 :: integer(),SrcX1 :: integer(),SrcY1 :: integer(),DstX0 :: integer(),DstY0 :: integer(),DstX1 :: integer(),DstY1 :: integer(),Mask :: integer(),Filter :: enum(). blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) -> - cast(5666, <<SrcX0:?GLint,SrcY0:?GLint,SrcX1:?GLint,SrcY1:?GLint,DstX0:?GLint,DstY0:?GLint,DstX1:?GLint,DstY1:?GLint,Mask:?GLbitfield,Filter:?GLenum>>). + cast(5667, <<SrcX0:?GLint,SrcY0:?GLint,SrcX1:?GLint,SrcY1:?GLint,DstX0:?GLint,DstY0:?GLint,DstX1:?GLint,DstY1:?GLint,Mask:?GLbitfield,Filter:?GLenum>>). %% @doc Establish data storage, format, dimensions and sample count of a renderbuffer object's image %% @@ -13819,19 +13886,19 @@ blitFramebuffer(SrcX0,SrcY0,SrcX1,SrcY1,DstX0,DstY0,DstX1,DstY1,Mask,Filter) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glRenderbufferStorageMultisample.xml">external</a> documentation. -spec renderbufferStorageMultisample(Target, Samples, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(). renderbufferStorageMultisample(Target,Samples,Internalformat,Width,Height) -> - cast(5667, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). + cast(5668, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). %% @doc %% See {@link framebufferTexture/4} -spec framebufferTextureLayer(Target, Attachment, Texture, Level, Layer) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Layer :: integer(). framebufferTextureLayer(Target,Attachment,Texture,Level,Layer) -> - cast(5668, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Layer:?GLint>>). + cast(5669, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Layer:?GLint>>). %% @doc %% See {@link framebufferTexture/4} -spec framebufferTextureFaceARB(Target, Attachment, Texture, Level, Face) -> 'ok' when Target :: enum(),Attachment :: enum(),Texture :: integer(),Level :: integer(),Face :: enum(). framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) -> - cast(5669, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Face:?GLenum>>). + cast(5670, <<Target:?GLenum,Attachment:?GLenum,Texture:?GLuint,Level:?GLint,Face:?GLenum>>). %% @doc Indicate modifications to a range of a mapped buffer %% @@ -13845,7 +13912,7 @@ framebufferTextureFaceARB(Target,Attachment,Texture,Level,Face) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFlushMappedBufferRange.xml">external</a> documentation. -spec flushMappedBufferRange(Target, Offset, Length) -> 'ok' when Target :: enum(),Offset :: integer(),Length :: integer(). flushMappedBufferRange(Target,Offset,Length) -> - cast(5670, <<Target:?GLenum,0:32,Offset:?GLintptr,Length:?GLsizeiptr>>). + cast(5671, <<Target:?GLenum,0:32,Offset:?GLintptr,Length:?GLsizeiptr>>). %% @doc Bind a vertex array object %% @@ -13860,7 +13927,7 @@ flushMappedBufferRange(Target,Offset,Length) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindVertexArray.xml">external</a> documentation. -spec bindVertexArray(Array) -> 'ok' when Array :: integer(). bindVertexArray(Array) -> - cast(5671, <<Array:?GLuint>>). + cast(5672, <<Array:?GLuint>>). %% @doc Delete vertex array objects %% @@ -13873,8 +13940,9 @@ bindVertexArray(Array) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteVertexArrays.xml">external</a> documentation. -spec deleteVertexArrays(Arrays) -> 'ok' when Arrays :: [integer()]. deleteVertexArrays(Arrays) -> - cast(5672, <<(length(Arrays)):?GLuint, - (<< <<C:?GLuint>> || C <- Arrays>>)/binary,0:(((1+length(Arrays)) rem 2)*32)>>). + ArraysLen = length(Arrays), + cast(5673, <<ArraysLen:?GLuint, + (<< <<C:?GLuint>> || C <- Arrays>>)/binary,0:(((1+ArraysLen) rem 2)*32)>>). %% @doc Generate vertex array object names %% @@ -13892,7 +13960,7 @@ deleteVertexArrays(Arrays) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenVertexArrays.xml">external</a> documentation. -spec genVertexArrays(N) -> [integer()] when N :: integer(). genVertexArrays(N) -> - call(5673, <<N:?GLsizei>>). + call(5674, <<N:?GLsizei>>). %% @doc Determine if a name corresponds to a vertex array object %% @@ -13906,7 +13974,7 @@ genVertexArrays(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsVertexArray.xml">external</a> documentation. -spec isVertexArray(Array) -> 0|1 when Array :: integer(). isVertexArray(Array) -> - call(5674, <<Array:?GLuint>>). + call(5675, <<Array:?GLuint>>). %% @doc Retrieve the index of a named uniform block %% @@ -13933,16 +14001,18 @@ isVertexArray(Array) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformIndices.xml">external</a> documentation. -spec getUniformIndices(Program, UniformNames) -> [integer()] when Program :: integer(),UniformNames :: iolist(). getUniformIndices(Program,UniformNames) -> - UniformNamesTemp = list_to_binary([[Str|[0]] || Str <- UniformNames ]), - call(5675, <<Program:?GLuint,(length(UniformNames)):?GLuint,(size(UniformNamesTemp)):?GLuint,(UniformNamesTemp)/binary,0:((8-((size(UniformNamesTemp)+0) rem 8)) rem 8)>>). + UniformNamesTemp = list_to_binary([[Str|[0]] || Str <- UniformNames ]), + UniformNamesLen = length(UniformNames), + call(5676, <<Program:?GLuint,UniformNamesLen:?GLuint,(size(UniformNamesTemp)):?GLuint,(UniformNamesTemp)/binary,0:((8-((size(UniformNamesTemp)+0) rem 8)) rem 8)>>). %% @doc glGetActiveUniforms %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniforms.xml">external</a> documentation. -spec getActiveUniformsiv(Program, UniformIndices, Pname) -> [integer()] when Program :: integer(),UniformIndices :: [integer()],Pname :: enum(). getActiveUniformsiv(Program,UniformIndices,Pname) -> - call(5676, <<Program:?GLuint,(length(UniformIndices)):?GLuint, - (<< <<C:?GLuint>> || C <- UniformIndices>>)/binary,0:(((length(UniformIndices)) rem 2)*32),Pname:?GLenum>>). + UniformIndicesLen = length(UniformIndices), + call(5677, <<Program:?GLuint,UniformIndicesLen:?GLuint, + (<< <<C:?GLuint>> || C <- UniformIndices>>)/binary,0:(((UniformIndicesLen) rem 2)*32),Pname:?GLenum>>). %% @doc Query the name of an active uniform %% @@ -13971,7 +14041,7 @@ getActiveUniformsiv(Program,UniformIndices,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniformName.xml">external</a> documentation. -spec getActiveUniformName(Program, UniformIndex, BufSize) -> string() when Program :: integer(),UniformIndex :: integer(),BufSize :: integer(). getActiveUniformName(Program,UniformIndex,BufSize) -> - call(5677, <<Program:?GLuint,UniformIndex:?GLuint,BufSize:?GLsizei>>). + call(5678, <<Program:?GLuint,UniformIndex:?GLuint,BufSize:?GLsizei>>). %% @doc Retrieve the index of a named uniform block %% @@ -13995,7 +14065,8 @@ getActiveUniformName(Program,UniformIndex,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformBlockIndex.xml">external</a> documentation. -spec getUniformBlockIndex(Program, UniformBlockName) -> integer() when Program :: integer(),UniformBlockName :: string(). getUniformBlockIndex(Program,UniformBlockName) -> - call(5678, <<Program:?GLuint,(list_to_binary([UniformBlockName|[0]]))/binary,0:((8-((length(UniformBlockName)+ 5) rem 8)) rem 8)>>). + UniformBlockNameLen = length(UniformBlockName), + call(5679, <<Program:?GLuint,(list_to_binary([UniformBlockName|[0]]))/binary,0:((8-((UniformBlockNameLen+ 5) rem 8)) rem 8)>>). %% @doc Query information about an active uniform block %% @@ -14048,7 +14119,7 @@ getUniformBlockIndex(Program,UniformBlockName) -> -spec getActiveUniformBlockiv(Program, UniformBlockIndex, Pname, Params) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),Pname :: enum(),Params :: mem(). getActiveUniformBlockiv(Program,UniformBlockIndex,Pname,Params) -> send_bin(Params), - call(5679, <<Program:?GLuint,UniformBlockIndex:?GLuint,Pname:?GLenum>>). + call(5680, <<Program:?GLuint,UniformBlockIndex:?GLuint,Pname:?GLenum>>). %% @doc Retrieve the name of an active uniform block %% @@ -14077,7 +14148,7 @@ getActiveUniformBlockiv(Program,UniformBlockIndex,Pname,Params) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveUniformBlockName.xml">external</a> documentation. -spec getActiveUniformBlockName(Program, UniformBlockIndex, BufSize) -> string() when Program :: integer(),UniformBlockIndex :: integer(),BufSize :: integer(). getActiveUniformBlockName(Program,UniformBlockIndex,BufSize) -> - call(5680, <<Program:?GLuint,UniformBlockIndex:?GLuint,BufSize:?GLsizei>>). + call(5681, <<Program:?GLuint,UniformBlockIndex:?GLuint,BufSize:?GLsizei>>). %% @doc Assign a binding point to an active uniform block %% @@ -14097,7 +14168,7 @@ getActiveUniformBlockName(Program,UniformBlockIndex,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformBlockBinding.xml">external</a> documentation. -spec uniformBlockBinding(Program, UniformBlockIndex, UniformBlockBinding) -> 'ok' when Program :: integer(),UniformBlockIndex :: integer(),UniformBlockBinding :: integer(). uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) -> - cast(5681, <<Program:?GLuint,UniformBlockIndex:?GLuint,UniformBlockBinding:?GLuint>>). + cast(5682, <<Program:?GLuint,UniformBlockIndex:?GLuint,UniformBlockBinding:?GLuint>>). %% @doc Copy part of the data store of a buffer object to the data store of another buffer object %% @@ -14123,7 +14194,7 @@ uniformBlockBinding(Program,UniformBlockIndex,UniformBlockBinding) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCopyBufferSubData.xml">external</a> documentation. -spec copyBufferSubData(ReadTarget, WriteTarget, ReadOffset, WriteOffset, Size) -> 'ok' when ReadTarget :: enum(),WriteTarget :: enum(),ReadOffset :: integer(),WriteOffset :: integer(),Size :: integer(). copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) -> - cast(5682, <<ReadTarget:?GLenum,WriteTarget:?GLenum,ReadOffset:?GLintptr,WriteOffset:?GLintptr,Size:?GLsizeiptr>>). + cast(5683, <<ReadTarget:?GLenum,WriteTarget:?GLenum,ReadOffset:?GLintptr,WriteOffset:?GLintptr,Size:?GLsizeiptr>>). %% @doc Render primitives from array data with a per-element offset %% @@ -14137,10 +14208,10 @@ copyBufferSubData(ReadTarget,WriteTarget,ReadOffset,WriteOffset,Size) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsBaseVertex.xml">external</a> documentation. -spec drawElementsBaseVertex(Mode, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer(). drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) when is_integer(Indices) -> - cast(5683, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>); + cast(5684, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>); drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) -> send_bin(Indices), - cast(5684, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Basevertex:?GLint>>). + cast(5685, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Basevertex:?GLint>>). %% @doc Render primitives from array data with a per-element offset %% @@ -14159,10 +14230,10 @@ drawElementsBaseVertex(Mode,Count,Type,Indices,Basevertex) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawRangeElementsBaseVertex.xml">external</a> documentation. -spec drawRangeElementsBaseVertex(Mode, Start, End, Count, Type, Indices, Basevertex) -> 'ok' when Mode :: enum(),Start :: integer(),End :: integer(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Basevertex :: integer(). drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) when is_integer(Indices) -> - cast(5685, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>); + cast(5686, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Basevertex:?GLint>>); drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) -> send_bin(Indices), - cast(5686, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Basevertex:?GLint>>). + cast(5687, <<Mode:?GLenum,Start:?GLuint,End:?GLuint,Count:?GLsizei,Type:?GLenum,Basevertex:?GLint>>). %% @doc Render multiple instances of a set of primitives from array data with a per-element offset %% @@ -14176,10 +14247,10 @@ drawRangeElementsBaseVertex(Mode,Start,End,Count,Type,Indices,Basevertex) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertex.xml">external</a> documentation. -spec drawElementsInstancedBaseVertex(Mode, Count, Type, Indices, Primcount, Basevertex) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(). drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) when is_integer(Indices) -> - cast(5687, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint>>); + cast(5688, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint>>); drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) -> send_bin(Indices), - cast(5688, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Basevertex:?GLint>>). + cast(5689, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Basevertex:?GLint>>). %% @doc Specifiy the vertex to be used as the source of data for flat shaded varyings %% @@ -14213,7 +14284,7 @@ drawElementsInstancedBaseVertex(Mode,Count,Type,Indices,Primcount,Basevertex) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProvokingVertex.xml">external</a> documentation. -spec provokingVertex(Mode) -> 'ok' when Mode :: enum(). provokingVertex(Mode) -> - cast(5689, <<Mode:?GLenum>>). + cast(5690, <<Mode:?GLenum>>). %% @doc Create a new sync object and insert it into the GL command stream %% @@ -14237,7 +14308,7 @@ provokingVertex(Mode) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glFenceSync.xml">external</a> documentation. -spec fenceSync(Condition, Flags) -> integer() when Condition :: enum(),Flags :: integer(). fenceSync(Condition,Flags) -> - call(5690, <<Condition:?GLenum,Flags:?GLbitfield>>). + call(5691, <<Condition:?GLenum,Flags:?GLbitfield>>). %% @doc Determine if a name corresponds to a sync object %% @@ -14248,7 +14319,7 @@ fenceSync(Condition,Flags) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsSync.xml">external</a> documentation. -spec isSync(Sync) -> 0|1 when Sync :: integer(). isSync(Sync) -> - call(5691, <<Sync:?GLsync>>). + call(5692, <<Sync:?GLsync>>). %% @doc Delete a sync object %% @@ -14265,7 +14336,7 @@ isSync(Sync) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSync.xml">external</a> documentation. -spec deleteSync(Sync) -> 'ok' when Sync :: integer(). deleteSync(Sync) -> - cast(5692, <<Sync:?GLsync>>). + cast(5693, <<Sync:?GLsync>>). %% @doc Block and wait for a sync object to become signaled %% @@ -14291,7 +14362,7 @@ deleteSync(Sync) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClientWaitSync.xml">external</a> documentation. -spec clientWaitSync(Sync, Flags, Timeout) -> enum() when Sync :: integer(),Flags :: integer(),Timeout :: integer(). clientWaitSync(Sync,Flags,Timeout) -> - call(5693, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>). + call(5694, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>). %% @doc Instruct the GL server to block until the specified sync object becomes signaled %% @@ -14313,13 +14384,13 @@ clientWaitSync(Sync,Flags,Timeout) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glWaitSync.xml">external</a> documentation. -spec waitSync(Sync, Flags, Timeout) -> 'ok' when Sync :: integer(),Flags :: integer(),Timeout :: integer(). waitSync(Sync,Flags,Timeout) -> - cast(5694, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>). + cast(5695, <<Sync:?GLsync,Flags:?GLbitfield,0:32,Timeout:?GLuint64>>). %% @doc %% See {@link getBooleanv/1} -spec getInteger64v(Pname) -> [integer()] when Pname :: enum(). getInteger64v(Pname) -> - call(5695, <<Pname:?GLenum>>). + call(5696, <<Pname:?GLenum>>). %% @doc Query the properties of a sync object %% @@ -14354,7 +14425,7 @@ getInteger64v(Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetSync.xml">external</a> documentation. -spec getSynciv(Sync, Pname, BufSize) -> [integer()] when Sync :: integer(),Pname :: enum(),BufSize :: integer(). getSynciv(Sync,Pname,BufSize) -> - call(5696, <<Sync:?GLsync,Pname:?GLenum,BufSize:?GLsizei>>). + call(5697, <<Sync:?GLsync,Pname:?GLenum,BufSize:?GLsizei>>). %% @doc Establish the data storage, format, dimensions, and number of samples of a multisample texture's image %% @@ -14382,7 +14453,7 @@ getSynciv(Sync,Pname,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage2DMultisample.xml">external</a> documentation. -spec texImage2DMultisample(Target, Samples, Internalformat, Width, Height, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Fixedsamplelocations :: 0|1. texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsamplelocations) -> - cast(5697, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Fixedsamplelocations:?GLboolean>>). + cast(5698, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Fixedsamplelocations:?GLboolean>>). %% @doc Establish the data storage, format, dimensions, and number of samples of a multisample texture's image %% @@ -14410,7 +14481,7 @@ texImage2DMultisample(Target,Samples,Internalformat,Width,Height,Fixedsampleloca %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexImage3DMultisample.xml">external</a> documentation. -spec texImage3DMultisample(Target, Samples, Internalformat, Width, Height, Depth, Fixedsamplelocations) -> 'ok' when Target :: enum(),Samples :: integer(),Internalformat :: integer(),Width :: integer(),Height :: integer(),Depth :: integer(),Fixedsamplelocations :: 0|1. texImage3DMultisample(Target,Samples,Internalformat,Width,Height,Depth,Fixedsamplelocations) -> - cast(5698, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Fixedsamplelocations:?GLboolean>>). + cast(5699, <<Target:?GLenum,Samples:?GLsizei,Internalformat:?GLint,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei,Fixedsamplelocations:?GLboolean>>). %% @doc Retrieve the location of a sample %% @@ -14428,7 +14499,7 @@ texImage3DMultisample(Target,Samples,Internalformat,Width,Height,Depth,Fixedsamp %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetMultisample.xml">external</a> documentation. -spec getMultisamplefv(Pname, Index) -> {float(),float()} when Pname :: enum(),Index :: integer(). getMultisamplefv(Pname,Index) -> - call(5699, <<Pname:?GLenum,Index:?GLuint>>). + call(5700, <<Pname:?GLenum,Index:?GLuint>>). %% @doc Set the value of a sub-word of the sample mask %% @@ -14443,57 +14514,65 @@ getMultisamplefv(Pname,Index) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSampleMaski.xml">external</a> documentation. -spec sampleMaski(Index, Mask) -> 'ok' when Index :: integer(),Mask :: integer(). sampleMaski(Index,Mask) -> - cast(5700, <<Index:?GLuint,Mask:?GLbitfield>>). + cast(5701, <<Index:?GLuint,Mask:?GLbitfield>>). %% @doc glNamedStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glNamedStringARB.xml">external</a> documentation. -spec namedStringARB(Type, Name, String) -> 'ok' when Type :: enum(),Name :: string(),String :: string(). namedStringARB(Type,Name,String) -> - cast(5701, <<Type:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8),(list_to_binary([String|[0]]))/binary,0:((8-((length(String)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + StringLen = length(String), + cast(5702, <<Type:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8),(list_to_binary([String|[0]]))/binary,0:((8-((StringLen+ 1) rem 8)) rem 8)>>). %% @doc glDeleteNamedStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteNamedStringARB.xml">external</a> documentation. -spec deleteNamedStringARB(Name) -> 'ok' when Name :: string(). deleteNamedStringARB(Name) -> - cast(5702, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + cast(5703, <<(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc glCompileShaderIncludeARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCompileShaderIncludeARB.xml">external</a> documentation. -spec compileShaderIncludeARB(Shader, Path) -> 'ok' when Shader :: integer(),Path :: iolist(). compileShaderIncludeARB(Shader,Path) -> - PathTemp = list_to_binary([[Str|[0]] || Str <- Path ]), - cast(5703, <<Shader:?GLuint,(length(Path)):?GLuint,(size(PathTemp)):?GLuint,(PathTemp)/binary,0:((8-((size(PathTemp)+0) rem 8)) rem 8)>>). + PathTemp = list_to_binary([[Str|[0]] || Str <- Path ]), + PathLen = length(Path), + cast(5704, <<Shader:?GLuint,PathLen:?GLuint,(size(PathTemp)):?GLuint,(PathTemp)/binary,0:((8-((size(PathTemp)+0) rem 8)) rem 8)>>). %% @doc glIsNamedStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsNamedStringARB.xml">external</a> documentation. -spec isNamedStringARB(Name) -> 0|1 when Name :: string(). isNamedStringARB(Name) -> - call(5704, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5705, <<(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc glGetNamedStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetNamedStringARB.xml">external</a> documentation. -spec getNamedStringARB(Name, BufSize) -> string() when Name :: string(),BufSize :: integer(). getNamedStringARB(Name,BufSize) -> - call(5705, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8),BufSize:?GLsizei>>). + NameLen = length(Name), + call(5706, <<(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8),BufSize:?GLsizei>>). %% @doc glGetNamedStringARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetNamedStringARB.xml">external</a> documentation. -spec getNamedStringivARB(Name, Pname) -> integer() when Name :: string(),Pname :: enum(). getNamedStringivARB(Name,Pname) -> - call(5706, <<(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8),Pname:?GLenum>>). + NameLen = length(Name), + call(5707, <<(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8),Pname:?GLenum>>). %% @doc glBindFragDataLocationIndexe %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindFragDataLocationIndexe.xml">external</a> documentation. -spec bindFragDataLocationIndexed(Program, ColorNumber, Index, Name) -> 'ok' when Program :: integer(),ColorNumber :: integer(),Index :: integer(),Name :: string(). bindFragDataLocationIndexed(Program,ColorNumber,Index,Name) -> - cast(5707, <<Program:?GLuint,ColorNumber:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + cast(5708, <<Program:?GLuint,ColorNumber:?GLuint,Index:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc Query the bindings of color indices to user-defined varying out variables %% @@ -14504,7 +14583,8 @@ bindFragDataLocationIndexed(Program,ColorNumber,Index,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetFragDataIndex.xml">external</a> documentation. -spec getFragDataIndex(Program, Name) -> integer() when Program :: integer(),Name :: string(). getFragDataIndex(Program,Name) -> - call(5708, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 5) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5709, <<Program:?GLuint,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 5) rem 8)) rem 8)>>). %% @doc Generate sampler object names %% @@ -14522,7 +14602,7 @@ getFragDataIndex(Program,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenSamplers.xml">external</a> documentation. -spec genSamplers(Count) -> [integer()] when Count :: integer(). genSamplers(Count) -> - call(5709, <<Count:?GLsizei>>). + call(5710, <<Count:?GLsizei>>). %% @doc Delete named sampler objects %% @@ -14535,8 +14615,9 @@ genSamplers(Count) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteSamplers.xml">external</a> documentation. -spec deleteSamplers(Samplers) -> 'ok' when Samplers :: [integer()]. deleteSamplers(Samplers) -> - cast(5710, <<(length(Samplers)):?GLuint, - (<< <<C:?GLuint>> || C <- Samplers>>)/binary,0:(((1+length(Samplers)) rem 2)*32)>>). + SamplersLen = length(Samplers), + cast(5711, <<SamplersLen:?GLuint, + (<< <<C:?GLuint>> || C <- Samplers>>)/binary,0:(((1+SamplersLen) rem 2)*32)>>). %% @doc Determine if a name corresponds to a sampler object %% @@ -14549,7 +14630,7 @@ deleteSamplers(Samplers) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsSampler.xml">external</a> documentation. -spec isSampler(Sampler) -> 0|1 when Sampler :: integer(). isSampler(Sampler) -> - call(5711, <<Sampler:?GLuint>>). + call(5712, <<Sampler:?GLuint>>). %% @doc Bind a named sampler to a texturing target %% @@ -14566,7 +14647,7 @@ isSampler(Sampler) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindSampler.xml">external</a> documentation. -spec bindSampler(Unit, Sampler) -> 'ok' when Unit :: integer(),Sampler :: integer(). bindSampler(Unit,Sampler) -> - cast(5712, <<Unit:?GLuint,Sampler:?GLuint>>). + cast(5713, <<Unit:?GLuint,Sampler:?GLuint>>). %% @doc Set sampler parameters %% @@ -14712,42 +14793,46 @@ bindSampler(Unit,Sampler) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameter.xml">external</a> documentation. -spec samplerParameteri(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: integer(). samplerParameteri(Sampler,Pname,Param) -> - cast(5713, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLint>>). + cast(5714, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLint>>). %% @doc %% See {@link samplerParameteri/3} -spec samplerParameteriv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()]. samplerParameteriv(Sampler,Pname,Param) -> - cast(5714, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint, - (<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>). + ParamLen = length(Param), + cast(5715, <<Sampler:?GLuint,Pname:?GLenum,ParamLen:?GLuint, + (<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+ParamLen) rem 2)*32)>>). %% @doc %% See {@link samplerParameteri/3} -spec samplerParameterf(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: float(). samplerParameterf(Sampler,Pname,Param) -> - cast(5715, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLfloat>>). + cast(5716, <<Sampler:?GLuint,Pname:?GLenum,Param:?GLfloat>>). %% @doc %% See {@link samplerParameteri/3} -spec samplerParameterfv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [float()]. samplerParameterfv(Sampler,Pname,Param) -> - cast(5716, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint, - (<< <<C:?GLfloat>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>). + ParamLen = length(Param), + cast(5717, <<Sampler:?GLuint,Pname:?GLenum,ParamLen:?GLuint, + (<< <<C:?GLfloat>> || C <- Param>>)/binary,0:(((1+ParamLen) rem 2)*32)>>). %% @doc %% See {@link samplerParameteri/3} -spec samplerParameterIiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()]. samplerParameterIiv(Sampler,Pname,Param) -> - cast(5717, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint, - (<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>). + ParamLen = length(Param), + cast(5718, <<Sampler:?GLuint,Pname:?GLenum,ParamLen:?GLuint, + (<< <<C:?GLint>> || C <- Param>>)/binary,0:(((1+ParamLen) rem 2)*32)>>). %% @doc glSamplerParameterI %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glSamplerParameterI.xml">external</a> documentation. -spec samplerParameterIuiv(Sampler, Pname, Param) -> 'ok' when Sampler :: integer(),Pname :: enum(),Param :: [integer()]. samplerParameterIuiv(Sampler,Pname,Param) -> - cast(5718, <<Sampler:?GLuint,Pname:?GLenum,(length(Param)):?GLuint, - (<< <<C:?GLuint>> || C <- Param>>)/binary,0:(((1+length(Param)) rem 2)*32)>>). + ParamLen = length(Param), + cast(5719, <<Sampler:?GLuint,Pname:?GLenum,ParamLen:?GLuint, + (<< <<C:?GLuint>> || C <- Param>>)/binary,0:(((1+ParamLen) rem 2)*32)>>). %% @doc Return sampler parameter values %% @@ -14794,26 +14879,26 @@ samplerParameterIuiv(Sampler,Pname,Param) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetSamplerParameter.xml">external</a> documentation. -spec getSamplerParameteriv(Sampler, Pname) -> [integer()] when Sampler :: integer(),Pname :: enum(). getSamplerParameteriv(Sampler,Pname) -> - call(5719, <<Sampler:?GLuint,Pname:?GLenum>>). + call(5720, <<Sampler:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link getSamplerParameteriv/2} -spec getSamplerParameterIiv(Sampler, Pname) -> [integer()] when Sampler :: integer(),Pname :: enum(). getSamplerParameterIiv(Sampler,Pname) -> - call(5720, <<Sampler:?GLuint,Pname:?GLenum>>). + call(5721, <<Sampler:?GLuint,Pname:?GLenum>>). %% @doc %% See {@link getSamplerParameteriv/2} -spec getSamplerParameterfv(Sampler, Pname) -> [float()] when Sampler :: integer(),Pname :: enum(). getSamplerParameterfv(Sampler,Pname) -> - call(5721, <<Sampler:?GLuint,Pname:?GLenum>>). + call(5722, <<Sampler:?GLuint,Pname:?GLenum>>). %% @doc glGetSamplerParameterI %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetSamplerParameterI.xml">external</a> documentation. -spec getSamplerParameterIuiv(Sampler, Pname) -> [integer()] when Sampler :: integer(),Pname :: enum(). getSamplerParameterIuiv(Sampler,Pname) -> - call(5722, <<Sampler:?GLuint,Pname:?GLenum>>). + call(5723, <<Sampler:?GLuint,Pname:?GLenum>>). %% @doc Record the GL time into a query object after all previous commands have reached the GL server but have not yet necessarily executed. %% @@ -14828,21 +14913,21 @@ getSamplerParameterIuiv(Sampler,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glQueryCounter.xml">external</a> documentation. -spec queryCounter(Id, Target) -> 'ok' when Id :: integer(),Target :: enum(). queryCounter(Id,Target) -> - cast(5723, <<Id:?GLuint,Target:?GLenum>>). + cast(5724, <<Id:?GLuint,Target:?GLenum>>). %% @doc glGetQueryObjecti64v %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetQueryObjecti64v.xml">external</a> documentation. -spec getQueryObjecti64v(Id, Pname) -> integer() when Id :: integer(),Pname :: enum(). getQueryObjecti64v(Id,Pname) -> - call(5724, <<Id:?GLuint,Pname:?GLenum>>). + call(5725, <<Id:?GLuint,Pname:?GLenum>>). %% @doc glGetQueryObjectui64v %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetQueryObjectui64v.xml">external</a> documentation. -spec getQueryObjectui64v(Id, Pname) -> integer() when Id :: integer(),Pname :: enum(). getQueryObjectui64v(Id,Pname) -> - call(5725, <<Id:?GLuint,Pname:?GLenum>>). + call(5726, <<Id:?GLuint,Pname:?GLenum>>). %% @doc Render primitives from array data, taking parameters from memory %% @@ -14872,10 +14957,10 @@ getQueryObjectui64v(Id,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysIndirect.xml">external</a> documentation. -spec drawArraysIndirect(Mode, Indirect) -> 'ok' when Mode :: enum(),Indirect :: offset()|mem(). drawArraysIndirect(Mode,Indirect) when is_integer(Indirect) -> - cast(5726, <<Mode:?GLenum,Indirect:?GLuint>>); + cast(5727, <<Mode:?GLenum,Indirect:?GLuint>>); drawArraysIndirect(Mode,Indirect) -> send_bin(Indirect), - cast(5727, <<Mode:?GLenum>>). + cast(5728, <<Mode:?GLenum>>). %% @doc Render indexed primitives from array data, taking parameters from memory %% @@ -14912,131 +14997,144 @@ drawArraysIndirect(Mode,Indirect) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsIndirect.xml">external</a> documentation. -spec drawElementsIndirect(Mode, Type, Indirect) -> 'ok' when Mode :: enum(),Type :: enum(),Indirect :: offset()|mem(). drawElementsIndirect(Mode,Type,Indirect) when is_integer(Indirect) -> - cast(5728, <<Mode:?GLenum,Type:?GLenum,Indirect:?GLuint>>); + cast(5729, <<Mode:?GLenum,Type:?GLenum,Indirect:?GLuint>>); drawElementsIndirect(Mode,Type,Indirect) -> send_bin(Indirect), - cast(5729, <<Mode:?GLenum,Type:?GLenum>>). + cast(5730, <<Mode:?GLenum,Type:?GLenum>>). %% @doc %% See {@link uniform1f/2} -spec uniform1d(Location, X) -> 'ok' when Location :: integer(),X :: float(). uniform1d(Location,X) -> - cast(5730, <<Location:?GLint,0:32,X:?GLdouble>>). + cast(5731, <<Location:?GLint,0:32,X:?GLdouble>>). %% @doc %% See {@link uniform1f/2} -spec uniform2d(Location, X, Y) -> 'ok' when Location :: integer(),X :: float(),Y :: float(). uniform2d(Location,X,Y) -> - cast(5731, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble>>). + cast(5732, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble>>). %% @doc %% See {@link uniform1f/2} -spec uniform3d(Location, X, Y, Z) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float(). uniform3d(Location,X,Y,Z) -> - cast(5732, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). + cast(5733, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). %% @doc %% See {@link uniform1f/2} -spec uniform4d(Location, X, Y, Z, W) -> 'ok' when Location :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). uniform4d(Location,X,Y,Z,W) -> - cast(5733, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). + cast(5734, <<Location:?GLint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). %% @doc %% See {@link uniform1f/2} -spec uniform1dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [float()]. uniform1dv(Location,Value) -> - cast(5734, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5735, <<Location:?GLint,0:32,ValueLen:?GLuint,0:32, (<< <<C:?GLdouble>> || C <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform2dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float()}]. uniform2dv(Location,Value) -> - cast(5735, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5736, <<Location:?GLint,0:32,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform3dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float()}]. uniform3dv(Location,Value) -> - cast(5736, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5737, <<Location:?GLint,0:32,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniform4dv(Location, Value) -> 'ok' when Location :: integer(),Value :: [{float(),float(),float(),float()}]. uniform4dv(Location,Value) -> - cast(5737, <<Location:?GLint,0:32,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5738, <<Location:?GLint,0:32,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}]. uniformMatrix2dv(Location,Transpose,Value) -> - cast(5738, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5739, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix3dv(Location,Transpose,Value) -> - cast(5739, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5740, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4dv(Location,Transpose,Value) -> - cast(5740, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5741, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. uniformMatrix2x3dv(Location,Transpose,Value) -> - cast(5741, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5742, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix2x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix2x4dv(Location,Transpose,Value) -> - cast(5742, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5743, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. uniformMatrix3x2dv(Location,Transpose,Value) -> - cast(5743, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5744, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix3x4dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix3x4dv(Location,Transpose,Value) -> - cast(5744, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5745, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4x2dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4x2dv(Location,Transpose,Value) -> - cast(5745, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5746, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link uniform1f/2} -spec uniformMatrix4x3dv(Location, Transpose, Value) -> 'ok' when Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. uniformMatrix4x3dv(Location,Transpose,Value) -> - cast(5746, <<Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5747, <<Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link getUniformfv/2} -spec getUniformdv(Program, Location) -> matrix() when Program :: integer(),Location :: integer(). getUniformdv(Program,Location) -> - call(5747, <<Program:?GLuint,Location:?GLint>>). + call(5748, <<Program:?GLuint,Location:?GLint>>). %% @doc Retrieve the location of a subroutine uniform of a given shader stage within a program %% @@ -15055,7 +15153,8 @@ getUniformdv(Program,Location) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetSubroutineUniformLocation.xml">external</a> documentation. -spec getSubroutineUniformLocation(Program, Shadertype, Name) -> integer() when Program :: integer(),Shadertype :: enum(),Name :: string(). getSubroutineUniformLocation(Program,Shadertype,Name) -> - call(5748, <<Program:?GLuint,Shadertype:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5749, <<Program:?GLuint,Shadertype:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc Retrieve the index of a subroutine uniform of a given shader stage within a program %% @@ -15075,7 +15174,8 @@ getSubroutineUniformLocation(Program,Shadertype,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetSubroutineIndex.xml">external</a> documentation. -spec getSubroutineIndex(Program, Shadertype, Name) -> integer() when Program :: integer(),Shadertype :: enum(),Name :: string(). getSubroutineIndex(Program,Shadertype,Name) -> - call(5749, <<Program:?GLuint,Shadertype:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((length(Name)+ 1) rem 8)) rem 8)>>). + NameLen = length(Name), + call(5750, <<Program:?GLuint,Shadertype:?GLenum,(list_to_binary([Name|[0]]))/binary,0:((8-((NameLen+ 1) rem 8)) rem 8)>>). %% @doc Query the name of an active shader subroutine uniform %% @@ -15096,7 +15196,7 @@ getSubroutineIndex(Program,Shadertype,Name) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveSubroutineUniformName.xml">external</a> documentation. -spec getActiveSubroutineUniformName(Program, Shadertype, Index, Bufsize) -> string() when Program :: integer(),Shadertype :: enum(),Index :: integer(),Bufsize :: integer(). getActiveSubroutineUniformName(Program,Shadertype,Index,Bufsize) -> - call(5750, <<Program:?GLuint,Shadertype:?GLenum,Index:?GLuint,Bufsize:?GLsizei>>). + call(5751, <<Program:?GLuint,Shadertype:?GLenum,Index:?GLuint,Bufsize:?GLsizei>>). %% @doc Query the name of an active shader subroutine %% @@ -15114,7 +15214,7 @@ getActiveSubroutineUniformName(Program,Shadertype,Index,Bufsize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetActiveSubroutineName.xml">external</a> documentation. -spec getActiveSubroutineName(Program, Shadertype, Index, Bufsize) -> string() when Program :: integer(),Shadertype :: enum(),Index :: integer(),Bufsize :: integer(). getActiveSubroutineName(Program,Shadertype,Index,Bufsize) -> - call(5751, <<Program:?GLuint,Shadertype:?GLenum,Index:?GLuint,Bufsize:?GLsizei>>). + call(5752, <<Program:?GLuint,Shadertype:?GLenum,Index:?GLuint,Bufsize:?GLsizei>>). %% @doc Load active subroutine uniforms %% @@ -15128,8 +15228,9 @@ getActiveSubroutineName(Program,Shadertype,Index,Bufsize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUniformSubroutines.xml">external</a> documentation. -spec uniformSubroutinesuiv(Shadertype, Indices) -> 'ok' when Shadertype :: enum(),Indices :: [integer()]. uniformSubroutinesuiv(Shadertype,Indices) -> - cast(5752, <<Shadertype:?GLenum,(length(Indices)):?GLuint, - (<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((length(Indices)) rem 2)*32)>>). + IndicesLen = length(Indices), + cast(5753, <<Shadertype:?GLenum,IndicesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Indices>>)/binary,0:(((IndicesLen) rem 2)*32)>>). %% @doc Retrieve the value of a subroutine uniform of a given shader stage of the current program %% @@ -15142,7 +15243,7 @@ uniformSubroutinesuiv(Shadertype,Indices) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetUniformSubroutine.xml">external</a> documentation. -spec getUniformSubroutineuiv(Shadertype, Location) -> {integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer(),integer()} when Shadertype :: enum(),Location :: integer(). getUniformSubroutineuiv(Shadertype,Location) -> - call(5753, <<Shadertype:?GLenum,Location:?GLint>>). + call(5754, <<Shadertype:?GLenum,Location:?GLint>>). %% @doc Retrieve properties of a program object corresponding to a specified shader stage %% @@ -15174,7 +15275,7 @@ getUniformSubroutineuiv(Shadertype,Location) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramStage.xml">external</a> documentation. -spec getProgramStageiv(Program, Shadertype, Pname) -> integer() when Program :: integer(),Shadertype :: enum(),Pname :: enum(). getProgramStageiv(Program,Shadertype,Pname) -> - call(5754, <<Program:?GLuint,Shadertype:?GLenum,Pname:?GLenum>>). + call(5755, <<Program:?GLuint,Shadertype:?GLenum,Pname:?GLenum>>). %% @doc Specifies the parameters for patch primitives %% @@ -15201,14 +15302,15 @@ getProgramStageiv(Program,Shadertype,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPatchParameter.xml">external</a> documentation. -spec patchParameteri(Pname, Value) -> 'ok' when Pname :: enum(),Value :: integer(). patchParameteri(Pname,Value) -> - cast(5755, <<Pname:?GLenum,Value:?GLint>>). + cast(5756, <<Pname:?GLenum,Value:?GLint>>). %% @doc %% See {@link patchParameteri/2} -spec patchParameterfv(Pname, Values) -> 'ok' when Pname :: enum(),Values :: [float()]. patchParameterfv(Pname,Values) -> - cast(5756, <<Pname:?GLenum,(length(Values)):?GLuint, - (<< <<C:?GLfloat>> || C <- Values>>)/binary,0:(((length(Values)) rem 2)*32)>>). + ValuesLen = length(Values), + cast(5757, <<Pname:?GLenum,ValuesLen:?GLuint, + (<< <<C:?GLfloat>> || C <- Values>>)/binary,0:(((ValuesLen) rem 2)*32)>>). %% @doc Bind a transform feedback object %% @@ -15231,7 +15333,7 @@ patchParameterfv(Pname,Values) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindTransformFeedback.xml">external</a> documentation. -spec bindTransformFeedback(Target, Id) -> 'ok' when Target :: enum(),Id :: integer(). bindTransformFeedback(Target,Id) -> - cast(5757, <<Target:?GLenum,Id:?GLuint>>). + cast(5758, <<Target:?GLenum,Id:?GLuint>>). %% @doc Delete transform feedback objects %% @@ -15244,8 +15346,9 @@ bindTransformFeedback(Target,Id) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteTransformFeedbacks.xml">external</a> documentation. -spec deleteTransformFeedbacks(Ids) -> 'ok' when Ids :: [integer()]. deleteTransformFeedbacks(Ids) -> - cast(5758, <<(length(Ids)):?GLuint, - (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+length(Ids)) rem 2)*32)>>). + IdsLen = length(Ids), + cast(5759, <<IdsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((1+IdsLen) rem 2)*32)>>). %% @doc Reserve transform feedback object names %% @@ -15256,7 +15359,7 @@ deleteTransformFeedbacks(Ids) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenTransformFeedbacks.xml">external</a> documentation. -spec genTransformFeedbacks(N) -> [integer()] when N :: integer(). genTransformFeedbacks(N) -> - call(5759, <<N:?GLsizei>>). + call(5760, <<N:?GLsizei>>). %% @doc Determine if a name corresponds to a transform feedback object %% @@ -15271,7 +15374,7 @@ genTransformFeedbacks(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsTransformFeedback.xml">external</a> documentation. -spec isTransformFeedback(Id) -> 0|1 when Id :: integer(). isTransformFeedback(Id) -> - call(5760, <<Id:?GLuint>>). + call(5761, <<Id:?GLuint>>). %% @doc Pause transform feedback operations %% @@ -15284,7 +15387,7 @@ isTransformFeedback(Id) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glPauseTransformFeedback.xml">external</a> documentation. -spec pauseTransformFeedback() -> 'ok'. pauseTransformFeedback() -> - cast(5761, <<>>). + cast(5762, <<>>). %% @doc Resume transform feedback operations %% @@ -15297,7 +15400,7 @@ pauseTransformFeedback() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glResumeTransformFeedback.xml">external</a> documentation. -spec resumeTransformFeedback() -> 'ok'. resumeTransformFeedback() -> - cast(5762, <<>>). + cast(5763, <<>>). %% @doc Render primitives using a count derived from a transform feedback object %% @@ -15311,7 +15414,7 @@ resumeTransformFeedback() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedback.xml">external</a> documentation. -spec drawTransformFeedback(Mode, Id) -> 'ok' when Mode :: enum(),Id :: integer(). drawTransformFeedback(Mode,Id) -> - cast(5763, <<Mode:?GLenum,Id:?GLuint>>). + cast(5764, <<Mode:?GLenum,Id:?GLuint>>). %% @doc Render primitives using a count derived from a specifed stream of a transform feedback object %% @@ -15329,14 +15432,14 @@ drawTransformFeedback(Mode,Id) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStream.xml">external</a> documentation. -spec drawTransformFeedbackStream(Mode, Id, Stream) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer(). drawTransformFeedbackStream(Mode,Id,Stream) -> - cast(5764, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint>>). + cast(5765, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint>>). %% @doc glBeginQueryIndexe %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexe.xml">external</a> documentation. -spec beginQueryIndexed(Target, Index, Id) -> 'ok' when Target :: enum(),Index :: integer(),Id :: integer(). beginQueryIndexed(Target,Index,Id) -> - cast(5765, <<Target:?GLenum,Index:?GLuint,Id:?GLuint>>). + cast(5766, <<Target:?GLenum,Index:?GLuint,Id:?GLuint>>). %% @doc Delimit the boundaries of a query object on an indexed target %% @@ -15413,7 +15516,7 @@ beginQueryIndexed(Target,Index,Id) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBeginQueryIndexed.xml">external</a> documentation. -spec endQueryIndexed(Target, Index) -> 'ok' when Target :: enum(),Index :: integer(). endQueryIndexed(Target,Index) -> - cast(5766, <<Target:?GLenum,Index:?GLuint>>). + cast(5767, <<Target:?GLenum,Index:?GLuint>>). %% @doc Return parameters of an indexed query object target %% @@ -15431,7 +15534,7 @@ endQueryIndexed(Target,Index) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetQueryIndexed.xml">external</a> documentation. -spec getQueryIndexediv(Target, Index, Pname) -> integer() when Target :: enum(),Index :: integer(),Pname :: enum(). getQueryIndexediv(Target,Index,Pname) -> - call(5767, <<Target:?GLenum,Index:?GLuint,Pname:?GLenum>>). + call(5768, <<Target:?GLenum,Index:?GLuint,Pname:?GLenum>>). %% @doc Release resources consumed by the implementation's shader compiler %% @@ -15443,7 +15546,7 @@ getQueryIndexediv(Target,Index,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glReleaseShaderCompiler.xml">external</a> documentation. -spec releaseShaderCompiler() -> 'ok'. releaseShaderCompiler() -> - cast(5768, <<>>). + cast(5769, <<>>). %% @doc Load pre-compiled shader binaries %% @@ -15465,9 +15568,10 @@ releaseShaderCompiler() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glShaderBinary.xml">external</a> documentation. -spec shaderBinary(Shaders, Binaryformat, Binary) -> 'ok' when Shaders :: [integer()],Binaryformat :: enum(),Binary :: binary(). shaderBinary(Shaders,Binaryformat,Binary) -> + ShadersLen = length(Shaders), send_bin(Binary), - cast(5769, <<(length(Shaders)):?GLuint, - (<< <<C:?GLuint>> || C <- Shaders>>)/binary,0:(((1+length(Shaders)) rem 2)*32),Binaryformat:?GLenum>>). + cast(5770, <<ShadersLen:?GLuint, + (<< <<C:?GLuint>> || C <- Shaders>>)/binary,0:(((1+ShadersLen) rem 2)*32),Binaryformat:?GLenum>>). %% @doc Retrieve the range and precision for numeric formats supported by the shader compiler %% @@ -15492,20 +15596,20 @@ shaderBinary(Shaders,Binaryformat,Binary) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetShaderPrecisionFormat.xml">external</a> documentation. -spec getShaderPrecisionFormat(Shadertype, Precisiontype) -> {Range :: {integer(),integer()},Precision :: integer()} when Shadertype :: enum(),Precisiontype :: enum(). getShaderPrecisionFormat(Shadertype,Precisiontype) -> - call(5770, <<Shadertype:?GLenum,Precisiontype:?GLenum>>). + call(5771, <<Shadertype:?GLenum,Precisiontype:?GLenum>>). %% @doc %% See {@link depthRange/2} -spec depthRangef(N, F) -> 'ok' when N :: clamp(),F :: clamp(). depthRangef(N,F) -> - cast(5771, <<N:?GLclampf,F:?GLclampf>>). + cast(5772, <<N:?GLclampf,F:?GLclampf>>). %% @doc glClearDepthf %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glClearDepthf.xml">external</a> documentation. -spec clearDepthf(D) -> 'ok' when D :: clamp(). clearDepthf(D) -> - cast(5772, <<D:?GLclampf>>). + cast(5773, <<D:?GLclampf>>). %% @doc Return a binary representation of a program object's compiled and linked executable source %% @@ -15526,7 +15630,7 @@ clearDepthf(D) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramBinary.xml">external</a> documentation. -spec getProgramBinary(Program, BufSize) -> {BinaryFormat :: enum(),Binary :: binary()} when Program :: integer(),BufSize :: integer(). getProgramBinary(Program,BufSize) -> - call(5773, <<Program:?GLuint,BufSize:?GLsizei>>). + call(5774, <<Program:?GLuint,BufSize:?GLsizei>>). %% @doc Load a program object with a program binary %% @@ -15554,7 +15658,7 @@ getProgramBinary(Program,BufSize) -> -spec programBinary(Program, BinaryFormat, Binary) -> 'ok' when Program :: integer(),BinaryFormat :: enum(),Binary :: binary(). programBinary(Program,BinaryFormat,Binary) -> send_bin(Binary), - cast(5774, <<Program:?GLuint,BinaryFormat:?GLenum>>). + cast(5775, <<Program:?GLuint,BinaryFormat:?GLenum>>). %% @doc Specify a parameter for a program object %% @@ -15579,7 +15683,7 @@ programBinary(Program,BinaryFormat,Binary) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramParameter.xml">external</a> documentation. -spec programParameteri(Program, Pname, Value) -> 'ok' when Program :: integer(),Pname :: enum(),Value :: integer(). programParameteri(Program,Pname,Value) -> - cast(5775, <<Program:?GLuint,Pname:?GLenum,Value:?GLint>>). + cast(5776, <<Program:?GLuint,Pname:?GLenum,Value:?GLint>>). %% @doc Bind stages of a program object to a program pipeline %% @@ -15604,7 +15708,7 @@ programParameteri(Program,Pname,Value) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glUseProgramStages.xml">external</a> documentation. -spec useProgramStages(Pipeline, Stages, Program) -> 'ok' when Pipeline :: integer(),Stages :: integer(),Program :: integer(). useProgramStages(Pipeline,Stages,Program) -> - cast(5776, <<Pipeline:?GLuint,Stages:?GLbitfield,Program:?GLuint>>). + cast(5777, <<Pipeline:?GLuint,Stages:?GLbitfield,Program:?GLuint>>). %% @doc Set the active program object for a program pipeline object %% @@ -15616,15 +15720,16 @@ useProgramStages(Pipeline,Stages,Program) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glActiveShaderProgram.xml">external</a> documentation. -spec activeShaderProgram(Pipeline, Program) -> 'ok' when Pipeline :: integer(),Program :: integer(). activeShaderProgram(Pipeline,Program) -> - cast(5777, <<Pipeline:?GLuint,Program:?GLuint>>). + cast(5778, <<Pipeline:?GLuint,Program:?GLuint>>). %% @doc glCreateShaderProgramv %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glCreateShaderProgramv.xml">external</a> documentation. -spec createShaderProgramv(Type, Strings) -> integer() when Type :: enum(),Strings :: iolist(). createShaderProgramv(Type,Strings) -> - StringsTemp = list_to_binary([[Str|[0]] || Str <- Strings ]), - call(5778, <<Type:?GLenum,(length(Strings)):?GLuint,(size(StringsTemp)):?GLuint,(StringsTemp)/binary,0:((8-((size(StringsTemp)+0) rem 8)) rem 8)>>). + StringsTemp = list_to_binary([[Str|[0]] || Str <- Strings ]), + StringsLen = length(Strings), + call(5779, <<Type:?GLenum,StringsLen:?GLuint,(size(StringsTemp)):?GLuint,(StringsTemp)/binary,0:((8-((size(StringsTemp)+0) rem 8)) rem 8)>>). %% @doc Bind a program pipeline to the current context %% @@ -15646,7 +15751,7 @@ createShaderProgramv(Type,Strings) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindProgramPipeline.xml">external</a> documentation. -spec bindProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer(). bindProgramPipeline(Pipeline) -> - cast(5779, <<Pipeline:?GLuint>>). + cast(5780, <<Pipeline:?GLuint>>). %% @doc Delete program pipeline objects %% @@ -15660,8 +15765,9 @@ bindProgramPipeline(Pipeline) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDeleteProgramPipelines.xml">external</a> documentation. -spec deleteProgramPipelines(Pipelines) -> 'ok' when Pipelines :: [integer()]. deleteProgramPipelines(Pipelines) -> - cast(5780, <<(length(Pipelines)):?GLuint, - (<< <<C:?GLuint>> || C <- Pipelines>>)/binary,0:(((1+length(Pipelines)) rem 2)*32)>>). + PipelinesLen = length(Pipelines), + cast(5781, <<PipelinesLen:?GLuint, + (<< <<C:?GLuint>> || C <- Pipelines>>)/binary,0:(((1+PipelinesLen) rem 2)*32)>>). %% @doc Reserve program pipeline object names %% @@ -15672,7 +15778,7 @@ deleteProgramPipelines(Pipelines) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGenProgramPipelines.xml">external</a> documentation. -spec genProgramPipelines(N) -> [integer()] when N :: integer(). genProgramPipelines(N) -> - call(5781, <<N:?GLsizei>>). + call(5782, <<N:?GLsizei>>). %% @doc Determine if a name corresponds to a program pipeline object %% @@ -15687,7 +15793,7 @@ genProgramPipelines(N) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glIsProgramPipeline.xml">external</a> documentation. -spec isProgramPipeline(Pipeline) -> 0|1 when Pipeline :: integer(). isProgramPipeline(Pipeline) -> - call(5782, <<Pipeline:?GLuint>>). + call(5783, <<Pipeline:?GLuint>>). %% @doc Retrieve properties of a program pipeline object %% @@ -15725,7 +15831,7 @@ isProgramPipeline(Pipeline) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramPipeline.xml">external</a> documentation. -spec getProgramPipelineiv(Pipeline, Pname) -> integer() when Pipeline :: integer(),Pname :: enum(). getProgramPipelineiv(Pipeline,Pname) -> - call(5783, <<Pipeline:?GLuint,Pname:?GLenum>>). + call(5784, <<Pipeline:?GLuint,Pname:?GLenum>>). %% @doc Specify the value of a uniform variable for a specified program object %% @@ -15792,334 +15898,368 @@ getProgramPipelineiv(Pipeline,Pname) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glProgramUniform.xml">external</a> documentation. -spec programUniform1i(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(). programUniform1i(Program,Location,V0) -> - cast(5784, <<Program:?GLuint,Location:?GLint,V0:?GLint>>). + cast(5785, <<Program:?GLuint,Location:?GLint,V0:?GLint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()]. programUniform1iv(Program,Location,Value) -> - cast(5785, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5786, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLint>> || C <- Value>>)/binary,0:(((1+ValueLen) rem 2)*32)>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1f(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(). programUniform1f(Program,Location,V0) -> - cast(5786, <<Program:?GLuint,Location:?GLint,V0:?GLfloat>>). + cast(5787, <<Program:?GLuint,Location:?GLint,V0:?GLfloat>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()]. programUniform1fv(Program,Location,Value) -> - cast(5787, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5788, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLfloat>> || C <- Value>>)/binary,0:(((1+ValueLen) rem 2)*32)>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1d(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(). programUniform1d(Program,Location,V0) -> - cast(5788, <<Program:?GLuint,Location:?GLint,V0:?GLdouble>>). + cast(5789, <<Program:?GLuint,Location:?GLint,V0:?GLdouble>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [float()]. programUniform1dv(Program,Location,Value) -> - cast(5789, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5790, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint,0:32, (<< <<C:?GLdouble>> || C <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1ui(Program, Location, V0) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(). programUniform1ui(Program,Location,V0) -> - cast(5790, <<Program:?GLuint,Location:?GLint,V0:?GLuint>>). + cast(5791, <<Program:?GLuint,Location:?GLint,V0:?GLuint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform1uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [integer()]. programUniform1uiv(Program,Location,Value) -> - cast(5791, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, - (<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((1+length(Value)) rem 2)*32)>>). + ValueLen = length(Value), + cast(5792, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, + (<< <<C:?GLuint>> || C <- Value>>)/binary,0:(((1+ValueLen) rem 2)*32)>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2i(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(). programUniform2i(Program,Location,V0,V1) -> - cast(5792, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint>>). + cast(5793, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}]. programUniform2iv(Program,Location,Value) -> - cast(5793, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5794, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2f(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(). programUniform2f(Program,Location,V0,V1) -> - cast(5794, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat>>). + cast(5795, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}]. programUniform2fv(Program,Location,Value) -> - cast(5795, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5796, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2d(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(). programUniform2d(Program,Location,V0,V1) -> - cast(5796, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble>>). + cast(5797, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float()}]. programUniform2dv(Program,Location,Value) -> - cast(5797, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5798, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2ui(Program, Location, V0, V1) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(). programUniform2ui(Program,Location,V0,V1) -> - cast(5798, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint>>). + cast(5799, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform2uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer()}]. programUniform2uiv(Program,Location,Value) -> - cast(5799, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5800, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint>> || {V1,V2} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3i(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(). programUniform3i(Program,Location,V0,V1,V2) -> - cast(5800, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>). + cast(5801, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}]. programUniform3iv(Program,Location,Value) -> - cast(5801, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5802, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint,V3:?GLint>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3f(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(). programUniform3f(Program,Location,V0,V1,V2) -> - cast(5802, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>). + cast(5803, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}]. programUniform3fv(Program,Location,Value) -> - cast(5803, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5804, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3d(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(). programUniform3d(Program,Location,V0,V1,V2) -> - cast(5804, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble>>). + cast(5805, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float()}]. programUniform3dv(Program,Location,Value) -> - cast(5805, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5806, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3ui(Program, Location, V0, V1, V2) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(). programUniform3ui(Program,Location,V0,V1,V2) -> - cast(5806, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>). + cast(5807, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform3uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer()}]. programUniform3uiv(Program,Location,Value) -> - cast(5807, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5808, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint>> || {V1,V2,V3} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4i(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer(). programUniform4i(Program,Location,V0,V1,V2,V3) -> - cast(5808, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>). + cast(5809, <<Program:?GLuint,Location:?GLint,V0:?GLint,V1:?GLint,V2:?GLint,V3:?GLint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4iv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}]. programUniform4iv(Program,Location,Value) -> - cast(5809, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5810, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4f(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float(). programUniform4f(Program,Location,V0,V1,V2,V3) -> - cast(5810, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>). + cast(5811, <<Program:?GLuint,Location:?GLint,V0:?GLfloat,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4fv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}]. programUniform4fv(Program,Location,Value) -> - cast(5811, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5812, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4d(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: float(),V1 :: float(),V2 :: float(),V3 :: float(). programUniform4d(Program,Location,V0,V1,V2,V3) -> - cast(5812, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>>). + cast(5813, <<Program:?GLuint,Location:?GLint,V0:?GLdouble,V1:?GLdouble,V2:?GLdouble,V3:?GLdouble>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4dv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{float(),float(),float(),float()}]. programUniform4dv(Program,Location,Value) -> - cast(5813, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5814, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4ui(Program, Location, V0, V1, V2, V3) -> 'ok' when Program :: integer(),Location :: integer(),V0 :: integer(),V1 :: integer(),V2 :: integer(),V3 :: integer(). programUniform4ui(Program,Location,V0,V1,V2,V3) -> - cast(5814, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>). + cast(5815, <<Program:?GLuint,Location:?GLint,V0:?GLuint,V1:?GLuint,V2:?GLuint,V3:?GLuint>>). %% @doc %% See {@link programUniform1i/3} -spec programUniform4uiv(Program, Location, Value) -> 'ok' when Program :: integer(),Location :: integer(),Value :: [{integer(),integer(),integer(),integer()}]. programUniform4uiv(Program,Location,Value) -> - cast(5815, <<Program:?GLuint,Location:?GLint,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5816, <<Program:?GLuint,Location:?GLint,ValueLen:?GLuint, (<< <<V1:?GLuint,V2:?GLuint,V3:?GLuint,V4:?GLuint>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}]. programUniformMatrix2fv(Program,Location,Transpose,Value) -> - cast(5816, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5817, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix3fv(Program,Location,Transpose,Value) -> - cast(5817, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5818, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4fv(Program,Location,Transpose,Value) -> - cast(5818, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5819, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat,V13:?GLfloat,V14:?GLfloat,V15:?GLfloat,V16:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float()}]. programUniformMatrix2dv(Program,Location,Transpose,Value) -> - cast(5819, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5820, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble>> || {V1,V2,V3,V4} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix3dv(Program,Location,Transpose,Value) -> - cast(5820, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5821, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4dv(Program,Location,Transpose,Value) -> - cast(5821, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5822, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble,V13:?GLdouble,V14:?GLdouble,V15:?GLdouble,V16:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12,V13,V14,V15,V16} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. programUniformMatrix2x3fv(Program,Location,Transpose,Value) -> - cast(5822, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5823, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. programUniformMatrix3x2fv(Program,Location,Transpose,Value) -> - cast(5823, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5824, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix2x4fv(Program,Location,Transpose,Value) -> - cast(5824, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5825, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4x2fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4x2fv(Program,Location,Transpose,Value) -> - cast(5825, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5826, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3x4fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix3x4fv(Program,Location,Transpose,Value) -> - cast(5826, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5827, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4x3fv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4x3fv(Program,Location,Transpose,Value) -> - cast(5827, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,(length(Value)):?GLuint, + ValueLen = length(Value), + cast(5828, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:24,ValueLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat,V5:?GLfloat,V6:?GLfloat,V7:?GLfloat,V8:?GLfloat,V9:?GLfloat,V10:?GLfloat,V11:?GLfloat,V12:?GLfloat>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. programUniformMatrix2x3dv(Program,Location,Transpose,Value) -> - cast(5828, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5829, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float()}]. programUniformMatrix3x2dv(Program,Location,Transpose,Value) -> - cast(5829, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5830, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble>> || {V1,V2,V3,V4,V5,V6} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix2x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix2x4dv(Program,Location,Transpose,Value) -> - cast(5830, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5831, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4x2dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4x2dv(Program,Location,Transpose,Value) -> - cast(5831, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5832, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix3x4dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix3x4dv(Program,Location,Transpose,Value) -> - cast(5832, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5833, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc %% See {@link programUniform1i/3} -spec programUniformMatrix4x3dv(Program, Location, Transpose, Value) -> 'ok' when Program :: integer(),Location :: integer(),Transpose :: 0|1,Value :: [{float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float(),float()}]. programUniformMatrix4x3dv(Program,Location,Transpose,Value) -> - cast(5833, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,(length(Value)):?GLuint,0:32, + ValueLen = length(Value), + cast(5834, <<Program:?GLuint,Location:?GLint,Transpose:?GLboolean,0:56,ValueLen:?GLuint,0:32, (<< <<V1:?GLdouble,V2:?GLdouble,V3:?GLdouble,V4:?GLdouble,V5:?GLdouble,V6:?GLdouble,V7:?GLdouble,V8:?GLdouble,V9:?GLdouble,V10:?GLdouble,V11:?GLdouble,V12:?GLdouble>> || {V1,V2,V3,V4,V5,V6,V7,V8,V9,V10,V11,V12} <- Value>>)/binary>>). %% @doc Validate a program pipeline object against current GL state @@ -16140,7 +16280,7 @@ programUniformMatrix4x3dv(Program,Location,Transpose,Value) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glValidateProgramPipeline.xml">external</a> documentation. -spec validateProgramPipeline(Pipeline) -> 'ok' when Pipeline :: integer(). validateProgramPipeline(Pipeline) -> - cast(5834, <<Pipeline:?GLuint>>). + cast(5835, <<Pipeline:?GLuint>>). %% @doc Retrieve the info log string from a program pipeline object %% @@ -16157,35 +16297,35 @@ validateProgramPipeline(Pipeline) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetProgramPipelineInfoLog.xml">external</a> documentation. -spec getProgramPipelineInfoLog(Pipeline, BufSize) -> string() when Pipeline :: integer(),BufSize :: integer(). getProgramPipelineInfoLog(Pipeline,BufSize) -> - call(5835, <<Pipeline:?GLuint,BufSize:?GLsizei>>). + call(5836, <<Pipeline:?GLuint,BufSize:?GLsizei>>). %% @doc glVertexAttribL %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation. -spec vertexAttribL1d(Index, X) -> 'ok' when Index :: integer(),X :: float(). vertexAttribL1d(Index,X) -> - cast(5836, <<Index:?GLuint,0:32,X:?GLdouble>>). + cast(5837, <<Index:?GLuint,0:32,X:?GLdouble>>). %% @doc glVertexAttribL %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation. -spec vertexAttribL2d(Index, X, Y) -> 'ok' when Index :: integer(),X :: float(),Y :: float(). vertexAttribL2d(Index,X,Y) -> - cast(5837, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>). + cast(5838, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble>>). %% @doc glVertexAttribL %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation. -spec vertexAttribL3d(Index, X, Y, Z) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(). vertexAttribL3d(Index,X,Y,Z) -> - cast(5838, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). + cast(5839, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble>>). %% @doc glVertexAttribL %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribL.xml">external</a> documentation. -spec vertexAttribL4d(Index, X, Y, Z, W) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),Z :: float(),W :: float(). vertexAttribL4d(Index,X,Y,Z,W) -> - cast(5839, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). + cast(5840, <<Index:?GLuint,0:32,X:?GLdouble,Y:?GLdouble,Z:?GLdouble,W:?GLdouble>>). %% @equiv vertexAttribL1d(Index,X) -spec vertexAttribL1dv(Index :: integer(),V) -> 'ok' when V :: {X :: float()}. @@ -16208,24 +16348,25 @@ vertexAttribL4dv(Index,{X,Y,Z,W}) -> vertexAttribL4d(Index,X,Y,Z,W). %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glVertexAttribLPointer.xml">external</a> documentation. -spec vertexAttribLPointer(Index, Size, Type, Stride, Pointer) -> 'ok' when Index :: integer(),Size :: integer(),Type :: enum(),Stride :: integer(),Pointer :: offset()|mem(). vertexAttribLPointer(Index,Size,Type,Stride,Pointer) when is_integer(Pointer) -> - cast(5840, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); + cast(5841, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei,Pointer:?GLuint>>); vertexAttribLPointer(Index,Size,Type,Stride,Pointer) -> send_bin(Pointer), - cast(5841, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). + cast(5842, <<Index:?GLuint,Size:?GLint,Type:?GLenum,Stride:?GLsizei>>). %% @doc glGetVertexAttribL %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetVertexAttribL.xml">external</a> documentation. -spec getVertexAttribLdv(Index, Pname) -> {float(),float(),float(),float()} when Index :: integer(),Pname :: enum(). getVertexAttribLdv(Index,Pname) -> - call(5842, <<Index:?GLuint,Pname:?GLenum>>). + call(5843, <<Index:?GLuint,Pname:?GLenum>>). %% @doc glViewportArrayv %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportArrayv.xml">external</a> documentation. -spec viewportArrayv(First, V) -> 'ok' when First :: integer(),V :: [{float(),float(),float(),float()}]. viewportArrayv(First,V) -> - cast(5843, <<First:?GLuint,(length(V)):?GLuint, + VLen = length(V), + cast(5844, <<First:?GLuint,VLen:?GLuint, (<< <<V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>> || {V1,V2,V3,V4} <- V>>)/binary>>). %% @doc Set a specified viewport @@ -16265,20 +16406,21 @@ viewportArrayv(First,V) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glViewportIndexed.xml">external</a> documentation. -spec viewportIndexedf(Index, X, Y, W, H) -> 'ok' when Index :: integer(),X :: float(),Y :: float(),W :: float(),H :: float(). viewportIndexedf(Index,X,Y,W,H) -> - cast(5844, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,W:?GLfloat,H:?GLfloat>>). + cast(5845, <<Index:?GLuint,X:?GLfloat,Y:?GLfloat,W:?GLfloat,H:?GLfloat>>). %% @doc %% See {@link viewportIndexedf/5} -spec viewportIndexedfv(Index, V) -> 'ok' when Index :: integer(),V :: {float(),float(),float(),float()}. viewportIndexedfv(Index,{V1,V2,V3,V4}) -> - cast(5845, <<Index:?GLuint,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>>). + cast(5846, <<Index:?GLuint,V1:?GLfloat,V2:?GLfloat,V3:?GLfloat,V4:?GLfloat>>). %% @doc glScissorArrayv %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorArrayv.xml">external</a> documentation. -spec scissorArrayv(First, V) -> 'ok' when First :: integer(),V :: [{integer(),integer(),integer(),integer()}]. scissorArrayv(First,V) -> - cast(5846, <<First:?GLuint,(length(V)):?GLuint, + VLen = length(V), + cast(5847, <<First:?GLuint,VLen:?GLuint, (<< <<V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>> || {V1,V2,V3,V4} <- V>>)/binary>>). %% @doc glScissorIndexe @@ -16286,21 +16428,22 @@ scissorArrayv(First,V) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation. -spec scissorIndexed(Index, Left, Bottom, Width, Height) -> 'ok' when Index :: integer(),Left :: integer(),Bottom :: integer(),Width :: integer(),Height :: integer(). scissorIndexed(Index,Left,Bottom,Width,Height) -> - cast(5847, <<Index:?GLuint,Left:?GLint,Bottom:?GLint,Width:?GLsizei,Height:?GLsizei>>). + cast(5848, <<Index:?GLuint,Left:?GLint,Bottom:?GLint,Width:?GLsizei,Height:?GLsizei>>). %% @doc glScissorIndexe %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glScissorIndexe.xml">external</a> documentation. -spec scissorIndexedv(Index, V) -> 'ok' when Index :: integer(),V :: {integer(),integer(),integer(),integer()}. scissorIndexedv(Index,{V1,V2,V3,V4}) -> - cast(5848, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). + cast(5849, <<Index:?GLuint,V1:?GLint,V2:?GLint,V3:?GLint,V4:?GLint>>). %% @doc glDepthRangeArrayv %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeArrayv.xml">external</a> documentation. -spec depthRangeArrayv(First, V) -> 'ok' when First :: integer(),V :: [{clamp(),clamp()}]. depthRangeArrayv(First,V) -> - cast(5849, <<First:?GLuint,0:32,(length(V)):?GLuint,0:32, + VLen = length(V), + cast(5850, <<First:?GLuint,0:32,VLen:?GLuint,0:32, (<< <<V1:?GLclampd,V2:?GLclampd>> || {V1,V2} <- V>>)/binary>>). %% @doc glDepthRangeIndexe @@ -16308,48 +16451,50 @@ depthRangeArrayv(First,V) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthRangeIndexe.xml">external</a> documentation. -spec depthRangeIndexed(Index, N, F) -> 'ok' when Index :: integer(),N :: clamp(),F :: clamp(). depthRangeIndexed(Index,N,F) -> - cast(5850, <<Index:?GLuint,0:32,N:?GLclampd,F:?GLclampd>>). + cast(5851, <<Index:?GLuint,0:32,N:?GLclampd,F:?GLclampd>>). %% @doc %% See {@link getBooleanv/1} -spec getFloati_v(Target, Index) -> [float()] when Target :: enum(),Index :: integer(). getFloati_v(Target,Index) -> - call(5851, <<Target:?GLenum,Index:?GLuint>>). + call(5852, <<Target:?GLenum,Index:?GLuint>>). %% @doc %% See {@link getBooleanv/1} -spec getDoublei_v(Target, Index) -> [float()] when Target :: enum(),Index :: integer(). getDoublei_v(Target,Index) -> - call(5852, <<Target:?GLenum,Index:?GLuint>>). + call(5853, <<Target:?GLenum,Index:?GLuint>>). %% @doc glDebugMessageControlARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageControlARB.xml">external</a> documentation. -spec debugMessageControlARB(Source, Type, Severity, Ids, Enabled) -> 'ok' when Source :: enum(),Type :: enum(),Severity :: enum(),Ids :: [integer()],Enabled :: 0|1. debugMessageControlARB(Source,Type,Severity,Ids,Enabled) -> - cast(5853, <<Source:?GLenum,Type:?GLenum,Severity:?GLenum,(length(Ids)):?GLuint, - (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((length(Ids)) rem 2)*32),Enabled:?GLboolean>>). + IdsLen = length(Ids), + cast(5854, <<Source:?GLenum,Type:?GLenum,Severity:?GLenum,IdsLen:?GLuint, + (<< <<C:?GLuint>> || C <- Ids>>)/binary,0:(((IdsLen) rem 2)*32),Enabled:?GLboolean>>). %% @doc glDebugMessageInsertARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDebugMessageInsertARB.xml">external</a> documentation. -spec debugMessageInsertARB(Source, Type, Id, Severity, Buf) -> 'ok' when Source :: enum(),Type :: enum(),Id :: integer(),Severity :: enum(),Buf :: string(). debugMessageInsertARB(Source,Type,Id,Severity,Buf) -> - cast(5854, <<Source:?GLenum,Type:?GLenum,Id:?GLuint,Severity:?GLenum,(list_to_binary([Buf|[0]]))/binary,0:((8-((length(Buf)+ 1) rem 8)) rem 8)>>). + BufLen = length(Buf), + cast(5855, <<Source:?GLenum,Type:?GLenum,Id:?GLuint,Severity:?GLenum,(list_to_binary([Buf|[0]]))/binary,0:((8-((BufLen+ 1) rem 8)) rem 8)>>). %% @doc glGetDebugMessageLogARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetDebugMessageLogARB.xml">external</a> documentation. -spec getDebugMessageLogARB(Count, Bufsize) -> {integer(),Sources :: [enum()],Types :: [enum()],Ids :: [integer()],Severities :: [enum()],MessageLog :: [string()]} when Count :: integer(),Bufsize :: integer(). getDebugMessageLogARB(Count,Bufsize) -> - call(5855, <<Count:?GLuint,Bufsize:?GLsizei>>). + call(5856, <<Count:?GLuint,Bufsize:?GLsizei>>). %% @doc glGetGraphicsResetStatusARB %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetGraphicsResetStatusARB.xml">external</a> documentation. -spec getGraphicsResetStatusARB() -> enum(). getGraphicsResetStatusARB() -> - call(5856, <<>>). + call(5857, <<>>). %% @doc Draw multiple instances of a range of elements with offset applied to instanced attributes %% @@ -16372,7 +16517,7 @@ getGraphicsResetStatusARB() -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawArraysInstancedBaseInstance.xml">external</a> documentation. -spec drawArraysInstancedBaseInstance(Mode, First, Count, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),First :: integer(),Count :: integer(),Primcount :: integer(),Baseinstance :: integer(). drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) -> - cast(5857, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei,Baseinstance:?GLuint>>). + cast(5858, <<Mode:?GLenum,First:?GLint,Count:?GLsizei,Primcount:?GLsizei,Baseinstance:?GLuint>>). %% @doc Draw multiple instances of a set of elements with offset applied to instanced attributes %% @@ -16395,10 +16540,10 @@ drawArraysInstancedBaseInstance(Mode,First,Count,Primcount,Baseinstance) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseInstance.xml">external</a> documentation. -spec drawElementsInstancedBaseInstance(Mode, Count, Type, Indices, Primcount, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Baseinstance :: integer(). drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) when is_integer(Indices) -> - cast(5858, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Baseinstance:?GLuint>>); + cast(5859, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Baseinstance:?GLuint>>); drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance) -> send_bin(Indices), - cast(5859, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Baseinstance:?GLuint>>). + cast(5860, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Baseinstance:?GLuint>>). %% @doc Render multiple instances of a set of primitives from array data with a per-element offset %% @@ -16419,31 +16564,31 @@ drawElementsInstancedBaseInstance(Mode,Count,Type,Indices,Primcount,Baseinstance %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawElementsInstancedBaseVertexBaseInstance.xml">external</a> documentation. -spec drawElementsInstancedBaseVertexBaseInstance(Mode, Count, Type, Indices, Primcount, Basevertex, Baseinstance) -> 'ok' when Mode :: enum(),Count :: integer(),Type :: enum(),Indices :: offset()|mem(),Primcount :: integer(),Basevertex :: integer(),Baseinstance :: integer(). drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) when is_integer(Indices) -> - cast(5860, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>); + cast(5861, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Indices:?GLuint,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>); drawElementsInstancedBaseVertexBaseInstance(Mode,Count,Type,Indices,Primcount,Basevertex,Baseinstance) -> send_bin(Indices), - cast(5861, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>). + cast(5862, <<Mode:?GLenum,Count:?GLsizei,Type:?GLenum,Primcount:?GLsizei,Basevertex:?GLint,Baseinstance:?GLuint>>). %% @doc glDrawTransformFeedbackInstance %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackInstance.xml">external</a> documentation. -spec drawTransformFeedbackInstanced(Mode, Id, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Primcount :: integer(). drawTransformFeedbackInstanced(Mode,Id,Primcount) -> - cast(5862, <<Mode:?GLenum,Id:?GLuint,Primcount:?GLsizei>>). + cast(5863, <<Mode:?GLenum,Id:?GLuint,Primcount:?GLsizei>>). %% @doc glDrawTransformFeedbackStreamInstance %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDrawTransformFeedbackStreamInstance.xml">external</a> documentation. -spec drawTransformFeedbackStreamInstanced(Mode, Id, Stream, Primcount) -> 'ok' when Mode :: enum(),Id :: integer(),Stream :: integer(),Primcount :: integer(). drawTransformFeedbackStreamInstanced(Mode,Id,Stream,Primcount) -> - cast(5863, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint,Primcount:?GLsizei>>). + cast(5864, <<Mode:?GLenum,Id:?GLuint,Stream:?GLuint,Primcount:?GLsizei>>). %% @doc glGetInternalformat %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glGetInternalformat.xml">external</a> documentation. -spec getInternalformativ(Target, Internalformat, Pname, BufSize) -> [integer()] when Target :: enum(),Internalformat :: enum(),Pname :: enum(),BufSize :: integer(). getInternalformativ(Target,Internalformat,Pname,BufSize) -> - call(5864, <<Target:?GLenum,Internalformat:?GLenum,Pname:?GLenum,BufSize:?GLsizei>>). + call(5865, <<Target:?GLenum,Internalformat:?GLenum,Pname:?GLenum,BufSize:?GLsizei>>). %% @doc Bind a level of a texture to an image unit %% @@ -16505,7 +16650,7 @@ getInternalformativ(Target,Internalformat,Pname,BufSize) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glBindImageTexture.xml">external</a> documentation. -spec bindImageTexture(Unit, Texture, Level, Layered, Layer, Access, Format) -> 'ok' when Unit :: integer(),Texture :: integer(),Level :: integer(),Layered :: 0|1,Layer :: integer(),Access :: enum(),Format :: enum(). bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) -> - cast(5865, <<Unit:?GLuint,Texture:?GLuint,Level:?GLint,Layered:?GLboolean,0:24,Layer:?GLint,Access:?GLenum,Format:?GLenum>>). + cast(5866, <<Unit:?GLuint,Texture:?GLuint,Level:?GLint,Layered:?GLboolean,0:24,Layer:?GLint,Access:?GLenum,Format:?GLenum>>). %% @doc Defines a barrier ordering memory transactions %% @@ -16632,7 +16777,7 @@ bindImageTexture(Unit,Texture,Level,Layered,Layer,Access,Format) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glMemoryBarrier.xml">external</a> documentation. -spec memoryBarrier(Barriers) -> 'ok' when Barriers :: integer(). memoryBarrier(Barriers) -> - cast(5866, <<Barriers:?GLbitfield>>). + cast(5867, <<Barriers:?GLbitfield>>). %% @doc Simultaneously specify storage for all levels of a one-dimensional texture %% @@ -16665,7 +16810,7 @@ memoryBarrier(Barriers) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage1D.xml">external</a> documentation. -spec texStorage1D(Target, Levels, Internalformat, Width) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(). texStorage1D(Target,Levels,Internalformat,Width) -> - cast(5867, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei>>). + cast(5868, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei>>). %% @doc Simultaneously specify storage for all levels of a two-dimensional or one-dimensional array texture %% @@ -16710,7 +16855,7 @@ texStorage1D(Target,Levels,Internalformat,Width) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage2D.xml">external</a> documentation. -spec texStorage2D(Target, Levels, Internalformat, Width, Height) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(). texStorage2D(Target,Levels,Internalformat,Width,Height) -> - cast(5868, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). + cast(5869, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei>>). %% @doc Simultaneously specify storage for all levels of a three-dimensional, two-dimensional array or cube-map array texture %% @@ -16753,19 +16898,19 @@ texStorage2D(Target,Levels,Internalformat,Width,Height) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glTexStorage3D.xml">external</a> documentation. -spec texStorage3D(Target, Levels, Internalformat, Width, Height, Depth) -> 'ok' when Target :: enum(),Levels :: integer(),Internalformat :: enum(),Width :: integer(),Height :: integer(),Depth :: integer(). texStorage3D(Target,Levels,Internalformat,Width,Height,Depth) -> - cast(5869, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei>>). + cast(5870, <<Target:?GLenum,Levels:?GLsizei,Internalformat:?GLenum,Width:?GLsizei,Height:?GLsizei,Depth:?GLsizei>>). %% @doc glDepthBoundsEXT %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glDepthBoundsEXT.xml">external</a> documentation. -spec depthBoundsEXT(Zmin, Zmax) -> 'ok' when Zmin :: clamp(),Zmax :: clamp(). depthBoundsEXT(Zmin,Zmax) -> - cast(5870, <<Zmin:?GLclampd,Zmax:?GLclampd>>). + cast(5871, <<Zmin:?GLclampd,Zmax:?GLclampd>>). %% @doc glStencilClearTagEXT %% %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/glStencilClearTagEXT.xml">external</a> documentation. -spec stencilClearTagEXT(StencilTagBits, StencilClearTag) -> 'ok' when StencilTagBits :: integer(),StencilClearTag :: integer(). stencilClearTagEXT(StencilTagBits,StencilClearTag) -> - cast(5871, <<StencilTagBits:?GLsizei,StencilClearTag:?GLuint>>). + cast(5872, <<StencilTagBits:?GLsizei,StencilClearTag:?GLuint>>). diff --git a/lib/wx/src/gen/glu.erl b/lib/wx/src/gen/glu.erl index 47d9a83999..f641f41262 100644 --- a/lib/wx/src/gen/glu.erl +++ b/lib/wx/src/gen/glu.erl @@ -334,7 +334,9 @@ build3DMipmaps(Target,InternalFormat,Width,Height,Depth,Format,Type,Data) -> %% See <a href="http://www.opengl.org/sdk/docs/man/xhtml/gluCheckExtension.xml">external</a> documentation. -spec checkExtension(ExtName, ExtString) -> 0|1 when ExtName :: string(),ExtString :: string(). checkExtension(ExtName,ExtString) -> - call(5016, <<(list_to_binary([ExtName|[0]]))/binary,0:((8-((length(ExtName)+ 1) rem 8)) rem 8),(list_to_binary([ExtString|[0]]))/binary,0:((8-((length(ExtString)+ 1) rem 8)) rem 8)>>). + ExtNameLen = length(ExtName), + ExtStringLen = length(ExtString), + call(5016, <<(list_to_binary([ExtName|[0]]))/binary,0:((8-((ExtNameLen+ 1) rem 8)) rem 8),(list_to_binary([ExtString|[0]]))/binary,0:((8-((ExtStringLen+ 1) rem 8)) rem 8)>>). %% @doc Draw a cylinder %% 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)]), |