diff options
Diffstat (limited to 'lib')
264 files changed, 29898 insertions, 15975 deletions
diff --git a/lib/Makefile b/lib/Makefile index 9ddf3a0544..47a6d5f9aa 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -19,20 +19,32 @@ include $(ERL_TOP)/make/target.mk include $(ERL_TOP)/make/$(TARGET)/otp.mk -ERTS_SUB_DIRECTORIES = stdlib sasl kernel compiler -OTHER_SUB_DIRECTORIES = tools test_server common_test runtime_tools \ + +# These have to be built first +ERTS_APPLICATIONS = stdlib sasl kernel compiler + +# Then these have to be build +ERLANG_APPLICATIONS = tools test_server common_test runtime_tools \ inets xmerl edoc erl_docgen + +# These are only build if -a is given to otp_build or make is used directly +ALL_ERLANG_APPLICATIONS = snmp otp_mibs appmon erl_interface asn1 jinterface \ + wx debugger reltool gs \ + ic mnesia crypto orber os_mon parsetools syntax_tools \ + pman public_key ssl toolbar tv observer odbc diameter \ + cosTransactions cosEvent cosTime cosNotification \ + cosProperty cosFileTransfer cosEventDomain et megaco webtool \ + eunit ssh typer percept eldap dialyzer hipe + ifdef BUILD_ALL - OTHER_SUB_DIRECTORIES += \ - snmp otp_mibs appmon erl_interface asn1 jinterface \ - wx debugger reltool gs \ - ic mnesia crypto orber os_mon parsetools syntax_tools \ - pman public_key ssl toolbar tv observer odbc diameter \ - cosTransactions cosEvent cosTime cosNotification \ - cosProperty cosFileTransfer cosEventDomain et megaco webtool \ - eunit ssh typer percept eldap dialyzer hipe - EXTRA_FILE := $(wildcard EXTRA-APPLICATIONS) - EXTRA_APPLICATIONS := $(if $(EXTRA_FILE),$(shell cat $(EXTRA_FILE))) + ERLANG_APPLICATIONS += $(ALL_ERLANG_APPLICATIONS) + +# We use whildcard */ to figure out if there are any other applications +# in here. + EXPECTED_APPLICATIONS := $(ERTS_APPLICATIONS) $(ERLANG_APPLICATIONS) \ + autom4te.cache + EXTRA_APPLICATIONS += $(filter-out $(EXPECTED_APPLICATIONS),\ + $(subst /,,$(wildcard */))) endif ifdef BOOTSTRAP @@ -45,13 +57,17 @@ else ifdef TERTIARY_BOOTSTRAP SUB_DIRECTORIES = snmp sasl jinterface ic syntax_tools wx else # Not bootstrap build - SUB_DIRECTORIES = $(ERTS_SUB_DIRECTORIES) \ - $(OTHER_SUB_DIRECTORIES) \ + SUB_DIRECTORIES = $(ERTS_APPLICATIONS) \ + $(ERLANG_APPLICATIONS) \ $(EXTRA_APPLICATIONS) endif endif endif +# Any applications listed in SKIP-APPLICATIONS should be skipped +SKIP_FILE := $(wildcard SKIP-APPLICATIONS) +SKIP_APPLICATIONS := $(if $(SKIP_FILE),$(shell cat $(SKIP_FILE))) +SUB_DIRECTORIES := $(filter-out $(SKIP_APPLICATIONS),$(SUB_DIRECTORIES)) # ---------------------------------------------------------------------- include $(ERL_TOP)/make/otp_subdir.mk diff --git a/lib/asn1/src/Makefile b/lib/asn1/src/Makefile index 33cd3cc4c3..3f24e15c04 100644 --- a/lib/asn1/src/Makefile +++ b/lib/asn1/src/Makefile @@ -43,9 +43,7 @@ RELSYSDIR = $(RELEASE_PATH)/lib/asn1-$(VSN) EBIN = ../ebin -EVAL_CT_MODULES = asn1ct_eval_ext \ - asn1ct_eval_per \ - asn1ct_eval_uper +EVAL_CT_MODULES = asn1ct_eval_ext CT_MODULES= \ asn1ct \ @@ -55,7 +53,6 @@ CT_MODULES= \ asn1ct_func \ asn1ct_gen \ asn1ct_gen_per \ - asn1ct_gen_per_rt2ct \ asn1ct_name \ asn1ct_constructed_per \ asn1ct_constructed_ber_bin_v2 \ diff --git a/lib/asn1/src/asn1_db.erl b/lib/asn1/src/asn1_db.erl index 869b36ddbd..48d9dd16d7 100644 --- a/lib/asn1/src/asn1_db.erl +++ b/lib/asn1/src/asn1_db.erl @@ -19,25 +19,37 @@ %% -module(asn1_db). --export([dbstart/1,dbnew/1,dbsave/2,dbput/3,dbget/2]). +-export([dbstart/1,dbnew/2,dbload/1,dbload/3,dbsave/2,dbput/3,dbget/2]). -export([dbstop/0]). -record(state, {parent, monitor, includes, table}). %% Interface -dbstart(Includes) -> +dbstart(Includes0) -> + Includes = case Includes0 of + [] -> ["."]; + [_|_] -> Includes0 + end, Parent = self(), undefined = get(?MODULE), %Assertion. put(?MODULE, spawn_link(fun() -> init(Parent, Includes) end)), ok. -dbnew(Module) -> req({new, Module}). +dbload(Module, Erule, Mtime) -> + req({load, Module, Erule, Mtime}). + +dbload(Module) -> + req({load, Module, any, {{0,0,0},{0,0,0}}}). + +dbnew(Module, Erule) -> req({new, Module, Erule}). dbsave(OutFile, Module) -> cast({save, OutFile, Module}). dbput(Module, K, V) -> cast({set, Module, K, V}). dbget(Module, K) -> req({get, Module, K}). dbstop() -> Resp = req(stop), erase(?MODULE), Resp. %% Internal functions +-define(MAGIC_KEY, '__version_and_erule__'). + req(Request) -> DbPid = get(?MODULE), Ref = erlang:monitor(process,DbPid), @@ -71,47 +83,57 @@ loop(#state{parent = Parent, monitor = MRef, table = Table, ets:insert(Modtab, {K2, V}), loop(State); {From, {get, Mod, K2}} -> - Result = case ets:lookup(Table, Mod) of - [] -> opentab(Table, Mod, Includes); - [{_, Modtab}] -> {ok, Modtab} - end, - case Result of - {ok, Newtab} -> reply(From, lookup(Newtab, K2)); - _Error -> reply(From, undefined) + %% XXX If there is no information for Mod, get_table/3 + %% will attempt to load information from an .asn1db + %% file, without comparing its timestamp against the + %% source file. This is known to happen when check_* + %% functions for DER are generated, but it could possibly + %% happen in other circumstances. Ideally, this issue should + %% be rectified in some way, perhaps by ensuring that + %% the module has been loaded (using dbload/4) prior + %% to calling dbget/2. + case get_table(Table, Mod, Includes) of + {ok,Tab} -> reply(From, lookup(Tab, K2)); + error -> reply(From, undefined) end, loop(State); {save, OutFile, Mod} -> [{_,Mtab}] = ets:lookup(Table, Mod), ok = ets:tab2file(Mtab, OutFile), loop(State); - {From, {new, Mod}} -> + {From, {new, Mod, Erule}} -> [] = ets:lookup(Table, Mod), %Assertion. ModTableId = ets:new(list_to_atom(lists:concat(["asn1_",Mod])), []), ets:insert(Table, {Mod, ModTableId}), + ets:insert(ModTableId, {?MAGIC_KEY, info(Erule)}), reply(From, ok), loop(State); + {From, {load, Mod, Erule, Mtime}} -> + case ets:member(Table, Mod) of + true -> + reply(From, ok); + false -> + case load_table(Mod, Erule, Mtime, Includes) of + {ok, ModTableId} -> + ets:insert(Table, {Mod, ModTableId}), + reply(From, ok); + error -> + reply(From, error) + end + end, + loop(State); {From, stop} -> reply(From, stopped); %% Nothing to store {'DOWN', MRef, process, Parent, Reason} -> exit(Reason) end. -opentab(Tab, Mod, []) -> - opentab(Tab, Mod, ["."]); -opentab(Tab, Mod, Includes) -> - Base = lists:concat([Mod, ".asn1db"]), - opentab2(Tab, Base, Mod, Includes, ok). - -opentab2(_Tab, _Base, _Mod, [], Error) -> - Error; -opentab2(Tab, Base, Mod, [Ih|It], _Error) -> - File = filename:join(Ih, Base), - case ets:file2tab(File) of - {ok, Modtab} -> - ets:insert(Tab, {Mod, Modtab}), - {ok, Modtab}; - NewErr -> - opentab2(Tab, Base, Mod, It, NewErr) +get_table(Table, Mod, Includes) -> + case ets:lookup(Table, Mod) of + [{Mod,Tab}] -> + {ok,Tab}; + [] -> + load_table(Mod, any, {{0,0,0},{0,0,0}}, Includes) end. lookup(Tab, K) -> @@ -119,3 +141,43 @@ lookup(Tab, K) -> [] -> undefined; [{K,V}] -> V end. + +info(Erule) -> + {asn1ct:vsn(),Erule}. + +load_table(Mod, Erule, Mtime, Includes) -> + Base = lists:concat([Mod, ".asn1db"]), + case path_find(Includes, Mtime, Base) of + error -> + error; + {ok,ModTab} when Erule =:= any -> + {ok,ModTab}; + {ok,ModTab} -> + Vsn = asn1ct:vsn(), + case ets:lookup(ModTab, ?MAGIC_KEY) of + [{_,{Vsn,Erule}}] -> + %% Correct version and encoding rule. + {ok,ModTab}; + _ -> + %% Missing key or wrong version/encoding rule. + ets:delete(ModTab), + error + end + end. + +path_find([H|T], Mtime, Base) -> + File = filename:join(H, Base), + case filelib:last_modified(File) of + 0 -> + path_find(T, Mtime, Base); + DbMtime when DbMtime >= Mtime -> + case ets:file2tab(File) of + {ok,_}=Ret -> + Ret; + _ -> + path_find(T, Mtime, Base) + end; + _ -> + path_find(T, Mtime, Base) + end; +path_find([], _, _) -> error. diff --git a/lib/asn1/src/asn1ct.erl b/lib/asn1/src/asn1ct.erl index 8e71a5697c..f2ccf5f212 100644 --- a/lib/asn1/src/asn1ct.erl +++ b/lib/asn1/src/asn1ct.erl @@ -893,17 +893,23 @@ parse_and_save(Module,S) -> Options = S#state.options, SourceDir = S#state.sourcedir, Includes = [I || {i,I} <- Options], + Erule = S#state.erule, case get_input_file(Module, [SourceDir|Includes]) of %% search for asn1 source {file,SuffixedASN1source} -> - case dbfile_uptodate(SuffixedASN1source,Options) of - false -> - parse_and_save1(S, SuffixedASN1source, Options); - _ -> ok + Mtime = filelib:last_modified(SuffixedASN1source), + case asn1_db:dbload(Module, Erule, Mtime) of + ok -> ok; + error -> parse_and_save1(S, SuffixedASN1source, Options) end; Err -> - warning("could not do a consistency check of the ~p file: no asn1 source file was found.~n", - [lists:concat([Module,".asn1db"])],Options), + case asn1_db:dbload(Module) of + ok -> + warning("could not do a consistency check of the ~p file: no asn1 source file was found.~n", + [lists:concat([Module,".asn1db"])],Options); + error -> + ok + end, {error,{asn1,input_file_error,Err}} end. @@ -929,48 +935,6 @@ get_input_file(Module,[I|Includes]) -> get_input_file(Module,Includes) end. -dbfile_uptodate(File,Options) -> - EncodingRule = get_rule(Options), - Ext = filename:extension(File), - Base = filename:basename(File,Ext), - DbFile = outfile(Base,"asn1db",Options), - case file:read_file_info(DbFile) of - {error,enoent} -> - false; - {ok,FileInfoDb} -> - %% file exists, check date and finally encodingrule - {ok,FileInfoAsn} = file:read_file_info(File), - case FileInfoDb#file_info.mtime < FileInfoAsn#file_info.mtime of - true -> - %% date of asn1 spec newer than db file - false; - _ -> - %% date ok,check that same erule was used - Obase = case lists:keysearch(outdir, 1, Options) of - {value, {outdir, Odir}} -> - Odir; - _NotFound -> "" - end, - BeamFileName = outfile(Base,"beam",Options), - case file:read_file_info(BeamFileName) of - {ok,_} -> - code:add_path(Obase), - BeamFile = list_to_atom(Base), - BeamInfo = (catch BeamFile:info()), - case catch lists:keysearch(options,1,BeamInfo) of - {value,{options,OldOptions}} -> - case get_rule(OldOptions) of - EncodingRule -> true; - _ -> false - end; - _ -> false - end; - _ -> false - end - end - end. - - input_file_type(Name,I) -> case input_file_type(Name) of {error,_} -> input_file_type2(filename:basename(Name),I); @@ -1374,10 +1338,11 @@ get_value(Module, Type) -> end. check(Module, Includes) -> - case asn1_db:dbget(Module,'MODULE') of - undefined -> - {error, {file_not_found, lists:concat([Module, ".asn1db"])}}; - M -> + case asn1_db:dbload(Module) of + error -> + {error,asn1db_missing_or_out_of_date}; + ok -> + M = asn1_db:dbget(Module, 'MODULE'), TypeOrVal = M#module.typeorval, State = #state{mname = M#module.name, module = M#module{typeorval=[]}, diff --git a/lib/asn1/src/asn1ct_check.erl b/lib/asn1/src/asn1ct_check.erl index f94550b0a4..eddcda0018 100644 --- a/lib/asn1/src/asn1ct_check.erl +++ b/lib/asn1/src/asn1ct_check.erl @@ -1557,21 +1557,32 @@ check_objectdefn(S,Def,CDef) when is_record(CDef,classdef) -> exit({error,{objectdefn,Other}}) end. -check_defaultfields(S,Fields,ClassFields) -> - check_defaultfields(S,Fields,ClassFields,[]). +check_defaultfields(S, Fields, ClassFields) -> + Present = ordsets:from_list([F || {F,_} <- Fields]), + Mandatory0 = get_mandatory_class_fields(ClassFields), + Mandatory = ordsets:from_list(Mandatory0), + All = ordsets:from_list([element(2, F) || F <- ClassFields]), + #state{type=T,tname=Obj} = S, + case ordsets:subtract(Present, All) of + [] -> + ok; + [_|_]=Invalid -> + throw(asn1_error(S, T, {invalid_fields,Invalid,Obj})) + end, + case ordsets:subtract(Mandatory, Present) of + [] -> + check_defaultfields_1(S, Fields, ClassFields, []); + [_|_]=Missing -> + throw(asn1_error(S, T, {missing_mandatory_fields,Missing,Obj})) + end. -check_defaultfields(_S,[],_ClassFields,Acc) -> +check_defaultfields_1(_S, [], _ClassFields, Acc) -> {object,defaultsyntax,lists:reverse(Acc)}; -check_defaultfields(S,[{FName,Spec}|Fields],ClassFields,Acc) -> - case lists:keysearch(FName,2,ClassFields) of - {value,CField} -> - {NewField,RestFields} = - convert_to_defaultfield(S,FName,[Spec|Fields],CField), - check_defaultfields(S,RestFields,ClassFields,[NewField|Acc]); - _ -> - throw({error,{asn1,{'unvalid field in object',FName}}}) - end. -%% {object,defaultsyntax,Fields}. +check_defaultfields_1(S, [{FName,Spec}|Fields], ClassFields, Acc) -> + CField = lists:keyfind(FName, 2, ClassFields), + {NewField,RestFields} = + convert_to_defaultfield(S, FName, [Spec|Fields], CField), + check_defaultfields_1(S, RestFields, ClassFields, [NewField|Acc]). convert_definedsyntax(_S,[],[],_ClassFields,Acc) -> lists:reverse(Acc); @@ -1587,6 +1598,23 @@ convert_definedsyntax(S,Fields,WithSyntax,ClassFields,Acc) -> [MatchedField|Acc]) end. +get_mandatory_class_fields([{fixedtypevaluefield,Name,_,_,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([{objectfield,Name,_,_,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([{objectsetfield,Name,_,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([{typefield,Name,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([{variabletypevaluefield,Name,_,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([{variabletypevaluesetfield, + Name,_,'MANDATORY'}|T]) -> + [Name|get_mandatory_class_fields(T)]; +get_mandatory_class_fields([_|T]) -> + get_mandatory_class_fields(T); +get_mandatory_class_fields([]) -> []. + match_field(S,Fields,WithSyntax,ClassFields) -> match_field(S,Fields,WithSyntax,ClassFields,[]). @@ -6798,7 +6826,7 @@ merge_tags2([], Acc) -> storeindb(S,M) when is_record(M,module) -> TVlist = M#module.typeorval, NewM = M#module{typeorval=findtypes_and_values(TVlist)}, - asn1_db:dbnew(NewM#module.name), + asn1_db:dbnew(NewM#module.name, S#state.erule), asn1_db:dbput(NewM#module.name,'MODULE', NewM), Res = storeindb(#state{mname=NewM#module.name}, TVlist, []), include_default_class(S,NewM#module.name), @@ -6867,11 +6895,22 @@ asn1_error(#state{mname=Where}, Item, Error) -> format_error({already_defined,Name,PrevLine}) -> io_lib:format("the name ~p has already been defined at line ~p", [Name,PrevLine]); +format_error({invalid_fields,Fields,Obj}) -> + io_lib:format("invalid ~s in ~p", [format_fields(Fields),Obj]); +format_error({missing_mandatory_fields,Fields,Obj}) -> + io_lib:format("missing mandatory ~s in ~p", + [format_fields(Fields),Obj]); format_error({undefined,Name}) -> io_lib:format("'~s' is referenced, but is not defined", [Name]); format_error(Other) -> io_lib:format("~p", [Other]). +format_fields([F]) -> + io_lib:format("field &~s", [F]); +format_fields([H|T]) -> + [io_lib:format("fields &~s", [H])| + [io_lib:format(", &~s", [F]) || F <- T]]. + error({_,{structured_error,_,_,_}=SE,_}) -> SE; error({export,Msg,#state{mname=Mname,type=Ref,tname=Typename}}) -> diff --git a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl index 761faa53c5..8359b81b33 100644 --- a/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl +++ b/lib/asn1/src/asn1ct_constructed_ber_bin_v2.erl @@ -122,8 +122,8 @@ gen_encode_sequence(Erules,Typename,D) when is_record(D,type) -> asn1ct_gen:un_hyphen_var(lists:concat(['Obj', AttrN])), emit([ObjectEncode," = ",nl, - " ",{asis,ObjSetMod},":'getenc_",ObjSetName, - "'(",{asis,UniqueFieldName},", ",nl]), + " ",{asis,ObjSetMod},":'getenc_",ObjSetName, + "'("]), ValueMatch = value_match(ValueIndex, lists:concat(["Cindex",N])), emit([indent(35),ValueMatch,"),",nl]), @@ -198,7 +198,7 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) -> asn1ct_name:new(tlv), asn1ct_name:new(v), - {DecObjInf,UniqueFName,ValueIndex} = + {DecObjInf,ValueIndex} = case TableConsInfo of #simpletableattributes{objectsetname=ObjectSetRef, c_name=AttrN, @@ -217,12 +217,12 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) -> %% relation from a component to another components %% subtype component {{AttrN,{deep,ObjectSetRef,UniqueFieldName,ValIndex}}, - UniqueFieldName,ValIndex}; + ValIndex}; false -> - {{AttrN,ObjectSetRef},UniqueFieldName,ValIndex} + {{AttrN,ObjectSetRef},ValIndex} end; _ -> - {false,false,false} + {false,false} end, RecordName = lists:concat([get_record_name_prefix(), asn1ct_gen:list2rname(Typename)]), @@ -246,7 +246,7 @@ gen_decode_sequence(Erules,Typename,D) when is_record(D,type) -> {ObjSetMod,ObjSetName} = ObjSetRef, emit([DecObj," =",nl, " ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(", - {asis,UniqueFName},", ",ValueMatch,"),",nl]), + ValueMatch,"),",nl]), gen_dec_postponed_decs(DecObj,PostponedDecArgs) end, demit(["Result = "]), %dbg @@ -357,7 +357,7 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) -> asn1ct_name:new(v), - {DecObjInf,UniqueFName,ValueIndex} = + {DecObjInf,ValueIndex} = case TableConsInfo of %% {ObjectSetRef,AttrN,_N,UniqueFieldName} ->%% N is index of attribute that determines constraint #simpletableattributes{objectsetname=ObjectSetRef, @@ -378,12 +378,12 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) -> %% relation from a component to another components %% subtype component {{AttrN,{deep,ObjectSetRef,UniqueFieldName,ValIndex}}, - UniqueFieldName,ValIndex}; + ValIndex}; false -> - {{AttrN,ObjectSetRef},UniqueFieldName,ValIndex} + {{AttrN,ObjectSetRef},ValIndex} end; _ -> - {false,false,false} + {false,false} end, case CompList of @@ -425,7 +425,7 @@ gen_decode_set(Erules,Typename,D) when is_record(D,type) -> {ObjSetMod,ObjSetName} = ObjSetRef, emit([DecObj," =",nl, " ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(", - {asis,UniqueFName},", ",ValueMatch,"),",nl]), + ValueMatch,"),",nl]), gen_dec_postponed_decs(DecObj,PostponedDecArgs) end, demit(["Result = "]), %dbg @@ -577,6 +577,8 @@ gen_decode_choice(Erules,Typename,D) when is_record(D,type) -> gen_enc_sequence_call(Erules,TopType,[#'ComponentType'{name=Cname,typespec=Type,prop=Prop,textual_order=Order}|Rest],Pos,Ext,EncObj) -> asn1ct_name:new(encBytes), asn1ct_name:new(encLen), + asn1ct_name:new(tmpBytes), + asn1ct_name:new(tmpLen), CindexPos = case Order of undefined -> @@ -706,8 +708,6 @@ emit_term_tlv('OPTIONAL',InnerType,DecObjInf) -> emit_term_tlv(opt_or_def,InnerType,DecObjInf); emit_term_tlv(Prop,{typefield,_},DecObjInf) -> emit_term_tlv(Prop,type_or_object_field,DecObjInf); -emit_term_tlv(Prop,{objectfield,_,_},DecObjInf) -> - emit_term_tlv(Prop,type_or_object_field,DecObjInf); emit_term_tlv(opt_or_def,type_or_object_field,NotFalse) when NotFalse /= false -> asn1ct_name:new(tmpterm), @@ -789,6 +789,7 @@ gen_enc_choice2(Erules,TopType,[H1|T]) when is_record(H1,'ComponentType') -> componentrelation)} of {#'ObjectClassFieldType'{},{componentrelation,_,_}} -> asn1ct_name:new(tmpBytes), + asn1ct_name:new(tmpLen), asn1ct_name:new(encBytes), asn1ct_name:new(encLen), Emit = ["{",{curr,tmpBytes},", _} = "], @@ -929,7 +930,6 @@ gen_enc_line(Erules,TopType,Cname, when is_list(Element) -> case asn1ct_gen:get_constraint(C,componentrelation) of {componentrelation,_,_} -> - asn1ct_name:new(tmpBytes), gen_enc_line(Erules,TopType,Cname,Type,Element,Indent,OptOrMand, ["{",{curr,tmpBytes},",_} = "],EncObj); _ -> @@ -991,12 +991,8 @@ gen_enc_line(Erules,TopType,Cname,Type,Element,Indent,OptOrMand,Assign,EncObj) {call,ber,encode_open_type, [{curr,tmpBytes},{asis,Tag}]},nl]); _ -> - emit(["{",{next,tmpBytes},",",{curr,tmpLen}, - "} = ", - {call,ber,encode_open_type, - [{curr,tmpBytes},{asis,Tag}]},com,nl]), - emit(IndDeep), - emit(["{",{next,tmpBytes},", ",{curr,tmpLen},"}"]) + emit([{call,ber,encode_open_type, + [{curr,tmpBytes},{asis,Tag}]}]) end; Err -> throw({asn1,{'internal error',Err}}) @@ -1213,22 +1209,18 @@ gen_dec_call({typefield,_},_,_,Cname,Type,BytesVar,Tag,_,_,_DecObjInf,OptOrMandC (Type#type.def)#'ObjectClassFieldType'.fieldname, [{Cname,RefedFieldName,asn1ct_gen:mk_var(asn1ct_name:curr(term)), asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),Tag,OptOrMandComp}]; -gen_dec_call({objectfield,PrimFieldName,PFNList},_,_,Cname,_,BytesVar,Tag,_,_,_,OptOrMandComp) -> - call(decode_open_type, [BytesVar,{asis,Tag}]), - [{Cname,{PrimFieldName,PFNList},asn1ct_gen:mk_var(asn1ct_name:curr(term)), - asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)),Tag,OptOrMandComp}]; gen_dec_call(InnerType,Erules,TopType,Cname,Type,BytesVar,Tag,PrimOptOrMand, OptOrMand,DecObjInf,_) -> WhatKind = asn1ct_gen:type(InnerType), gen_dec_call1(WhatKind,InnerType,Erules,TopType,Cname,Type,BytesVar,Tag, PrimOptOrMand,OptOrMand), case DecObjInf of - {Cname,{_,OSet,UniqueFName,ValIndex}} -> + {Cname,{_,OSet,_UniqueFName,ValIndex}} -> Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)), ValueMatch = value_match(ValIndex,Term), {ObjSetMod,ObjSetName} = OSet, emit([",",nl,"ObjFun = ",{asis,ObjSetMod},":'getdec_",ObjSetName, - "'(",{asis,UniqueFName},", ",ValueMatch,")"]); + "'(",ValueMatch,")"]); _ -> ok end, diff --git a/lib/asn1/src/asn1ct_constructed_per.erl b/lib/asn1/src/asn1ct_constructed_per.erl index d279e9697f..8d4afc0a0b 100644 --- a/lib/asn1/src/asn1ct_constructed_per.erl +++ b/lib/asn1/src/asn1ct_constructed_per.erl @@ -43,10 +43,13 @@ gen_encode_set(Erules,TypeName,D) -> gen_encode_sequence(Erules,TypeName,D) -> gen_encode_constructed(Erules,TypeName,D). -gen_encode_constructed(Erule,Typename,D) when is_record(D,type) -> +gen_encode_constructed(Erule, Typename, #type{}=D) -> asn1ct_name:start(), - asn1ct_name:new(term), - asn1ct_name:new(bytes), + Imm = gen_encode_constructed_imm(Erule, Typename, D), + asn1ct_imm:enc_cg(Imm, is_aligned(Erule)), + emit([".",nl]). + +gen_encode_constructed_imm(Erule, Typename, #type{}=D) -> {ExtAddGroup,TmpCompList,TableConsInfo} = case D#type.def of #'SEQUENCE'{tablecinf=TCI,components=CL,extaddgroup=ExtAddGroup0} -> @@ -65,74 +68,36 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) -> [Comp#'ComponentType'{textual_order=undefined}|| Comp<-TmpCompList] end, - case Typename of - ['EXTERNAL'] -> - emit([{next,val}," = ", - {call,ext,transform_to_EXTERNAL1990, - [{curr,val}]},com,nl]), - asn1ct_name:new(val); - _ -> - ok - end, - case {Optionals = optionals(to_textual_order(CompList)),CompList, - is_optimized(Erule)} of - {[],EmptyCL,_} when EmptyCL == {[],[],[]};EmptyCL == {[],[]};EmptyCL == [] -> - ok; - {[],_,_} -> - emit([{next,val}," = ",{curr,val},",",nl]); - {_,_,true} -> - gen_fixoptionals(Optionals), - FixOpts = param_map(fun(Var) -> - {var,Var} - end,asn1ct_name:all(fixopt)), - emit({"{",{next,val},",Opt} = {",{curr,val},",[",FixOpts,"]},",nl}); - {_,_,false} -> - asn1ct_func:need({Erule,fixoptionals,3}), - Fixoptcall = ",Opt} = fixoptionals(", - emit({"{",{next,val},Fixoptcall, - {asis,Optionals},",",length(Optionals), - ",",{curr,val},"),",nl}) - end, - asn1ct_name:new(val), + ExternalImm = + case Typename of + ['EXTERNAL'] -> + Next = asn1ct_gen:mk_var(asn1ct_name:next(val)), + Curr = asn1ct_gen:mk_var(asn1ct_name:curr(val)), + asn1ct_name:new(val), + [{call,ext,transform_to_EXTERNAL1990,[{var,Curr}],{var,Next}}]; + _ -> + [] + end, + Aligned = is_aligned(Erule), + Value0 = asn1ct_gen:mk_var(asn1ct_name:curr(val)), + Optionals = optionals(to_textual_order(CompList)), + ImmOptionals = [asn1ct_imm:per_enc_optional(Value0, Opt, Aligned) || + Opt <- Optionals], Ext = extensible_enc(CompList), - case Ext of - {ext,_,NumExt} when NumExt > 0 -> - case extgroup_pos_and_length(CompList) of - {extgrouppos,[]} -> % no extenstionAdditionGroup - ok; - {extgrouppos,ExtGroupPosLenList} -> - ExtGroupFun = - fun({ExtActualGroupPos,ExtGroupVirtualPos,ExtGroupLen}) -> - Elements = - make_elements(ExtGroupVirtualPos+1, - "Val1", - lists:seq(1,ExtGroupLen)), - emit([ - {next,val}," = case [X || X <- [",Elements, - "],X =/= asn1_NOVALUE] of",nl, - "[] -> setelement(", - {asis,ExtActualGroupPos+1},",", - {curr,val},",", - "asn1_NOVALUE);",nl, - "_ -> setelement(",{asis,ExtActualGroupPos+1},",", - {curr,val},",", - "{extaddgroup,", Elements,"})",nl, - "end,",nl]), - asn1ct_name:new(val) - end, - lists:foreach(ExtGroupFun,ExtGroupPosLenList) - end, - asn1ct_name:new(tmpval), - emit(["Extensions = ", - {call,Erule,fixextensions,[{asis,Ext},{curr,val}]}, - com,nl]); - _ -> true - end, - EncObj = + ExtImm = case Ext of + {ext,ExtPos,NumExt} when NumExt > 0 -> + gen_encode_extaddgroup(CompList), + Value = asn1ct_gen:mk_var(asn1ct_name:curr(val)), + asn1ct_imm:per_enc_extensions(Value, ExtPos, + NumExt, Aligned); + _ -> + [] + end, + {EncObj,ObjSetImm} = case TableConsInfo of #simpletableattributes{usedclassfield=Used, uniqueclassfield=Unique} when Used /= Unique -> - false; + {false,[]}; %% ObjectSet, name of the object set in constraints %% %%{ObjectSet,AttrN,N,UniqueFieldName} -> %% N is index of attribute that determines constraint @@ -152,13 +117,10 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) -> asn1ct_gen:un_hyphen_var(lists:concat(['Obj',AttrN])), El = make_element(N+1, asn1ct_gen:mk_var(asn1ct_name:curr(val))), ValueMatch = value_match(ValueIndex, El), - emit([ObjectEncode," =",nl, - " ",{asis,Module},":'getenc_",ObjSetName,"'(", - {asis,UniqueFieldName},", ",nl, - " ",ValueMatch,"),",nl]), - {AttrN,ObjectEncode}; + ObjSetImm0 = [{assign,{var,ObjectEncode},ValueMatch}], + {{AttrN,ObjectEncode},ObjSetImm0}; false -> - false + {false,[]} end; _ -> case D#type.tablecinf of @@ -166,34 +128,52 @@ gen_encode_constructed(Erule,Typename,D) when is_record(D,type) -> %% when the simpletableattributes was at an outer %% level and the objfun has been passed through the %% function call - {"got objfun through args","ObjFun"}; + {{"got objfun through args","ObjFun"},[]}; _ -> - false + {false,[]} end end, - emit({"[",nl}), - MaybeComma1 = + ImmSetExt = case Ext of - {ext,_Pos,NumExt2} when NumExt2 > 0 -> - call(Erule, setext, ["Extensions =/= []"]), - ", "; - {ext,_Pos,_} -> - call(Erule, setext, ["false"]), - ", "; - _ -> - "" - end, - MaybeComma2 = - case optionals(CompList) of - [] -> MaybeComma1; - _ -> - emit(MaybeComma1), - emit("Opt"), - {",",nl} + {ext,_Pos,NumExt2} when NumExt2 > 0 -> + asn1ct_imm:per_enc_extension_bit('Extensions', Aligned); + {ext,_Pos,_} -> + asn1ct_imm:per_enc_extension_bit([], Aligned); + _ -> + [] end, - gen_enc_components_call(Erule,Typename,CompList,MaybeComma2,EncObj,Ext), - emit({"].",nl}). + ImmBody = gen_enc_components_call(Erule, Typename, CompList, EncObj, Ext), + ExternalImm ++ ExtImm ++ ObjSetImm ++ + asn1ct_imm:enc_append([ImmSetExt] ++ ImmOptionals ++ ImmBody). + +gen_encode_extaddgroup(CompList) -> + case extgroup_pos_and_length(CompList) of + {extgrouppos,[]} -> + ok; + {extgrouppos,ExtGroupPosLenList} -> + _ = [do_gen_encode_extaddgroup(G) || G <- ExtGroupPosLenList], + ok + end. +do_gen_encode_extaddgroup({ActualGroupPos,GroupVirtualPos,GroupLen}) -> + Val = asn1ct_gen:mk_var(asn1ct_name:curr(val)), + Elements = make_elements(GroupVirtualPos+1, + Val, + lists:seq(1, GroupLen)), + Expr = any_non_value(GroupVirtualPos+1, Val, GroupLen, ""), + emit([{next,val}," = case ",Expr," of",nl, + "false -> setelement(",{asis,ActualGroupPos+1},", ", + {curr,val},", asn1_NOVALUE);",nl, + "true -> setelement(",{asis,ActualGroupPos+1},", ", + {curr,val},", {extaddgroup,", Elements,"})",nl, + "end,",nl]), + asn1ct_name:new(val). + +any_non_value(_, _, 0, _) -> + []; +any_non_value(Pos, Val, N, Sep) -> + Sep ++ [make_element(Pos, Val)," =/= asn1_NOVALUE"] ++ + any_non_value(Pos+1, Val, N-1, [" orelse",nl]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% generate decode function for SEQUENCE and SET @@ -328,28 +308,29 @@ gen_dec_constructed_imm(Erule, Typename, #type{}=D) -> EmitComp = gen_dec_components_call(Erule, Typename, CompList, DecObjInf, Ext, length(Optionals)), EmitRest = fun({AccTerm,AccBytes}) -> - gen_dec_constructed_imm_2(Typename, CompList, + gen_dec_constructed_imm_2(Erule, Typename, + CompList, ObjSetInfo, AccTerm, AccBytes) end, [EmitExt,EmitOpt|EmitComp++[{safe,EmitRest}]]. -gen_dec_constructed_imm_2(Typename, CompList, +gen_dec_constructed_imm_2(Erule, Typename, CompList, ObjSetInfo, AccTerm, AccBytes) -> - {_,UniqueFName,ValueIndex} = ObjSetInfo, + {_,_UniqueFName,ValueIndex} = ObjSetInfo, case {AccTerm,AccBytes} of {[],[]} -> ok; {_,[]} -> ok; {[{ObjSet,LeadingAttr,Term}],ListOfOpenTypes} -> - DecObj = asn1ct_gen:un_hyphen_var(lists:concat(['DecObj',LeadingAttr,Term])), - ValueMatch = value_match(ValueIndex,Term), - {ObjSetMod,ObjSetName} = ObjSet, - emit([DecObj," =",nl, - " ",{asis,ObjSetMod},":'getdec_",ObjSetName,"'(", - {asis,UniqueFName},", ",ValueMatch,"),",nl]), - gen_dec_listofopentypes(DecObj,ListOfOpenTypes,false) + ValueMatch = value_match(ValueIndex, Term), + _ = [begin + gen_dec_open_type(Erule, ValueMatch, ObjSet, + LeadingAttr, T), + emit([com,nl]) + end || T <- ListOfOpenTypes], + ok end, %% we don't return named lists any more Cnames = mkcnamelist(CompList), demit({"Result = "}), %dbg @@ -423,67 +404,143 @@ to_textual_order(Cs) when is_list(Cs) -> to_textual_order(Cs) -> Cs. -gen_dec_listofopentypes(_,[],_) -> - emit(nl); -gen_dec_listofopentypes(DecObj,[{_Cname,{FirstPFN,PFNList},Term,TmpTerm,Prop}|Rest],_Update) -> - - asn1ct_name:new(tmpterm), - asn1ct_name:new(reason), - - emit([Term," = ",nl]), +gen_dec_open_type(Erule, Val, {Xmod,Xtype}, LeadingAttr, + {_,{Name,RestFieldNames},Term,TmpTerm,Prop}) -> + #typedef{typespec=ObjSet0} = asn1_db:dbget(Xmod, Xtype), + #'ObjectSet'{class=Class,set=ObjSet1} = ObjSet0, + #'Externaltypereference'{module=ClMod,type=ClType} = Class, + #classdef{typespec=ClassDef} = asn1_db:dbget(ClMod, ClType), + #objectclass{fields=ClassFields} = ClassDef, + Extensible = lists:member('EXTENSIONMARK', ObjSet1), + ObjSet2 = [{Key,fix_object_code(Name, Code, ClassFields)} || + {_,Key,Code} <- ObjSet1], + ObjSet = lists:sort([P || {_,B}=P <- ObjSet2, B =/= none]), + Key = erlang:md5(term_to_binary({decode,ObjSet,RestFieldNames, + Prop,Extensible})), + Typename = [Name,ClType], + Gen = fun(_Fd, N) -> + dec_objset_optional(N, Prop), + dec_objset(Erule, N, ObjSet, RestFieldNames, Typename), + dec_objset_default(N, Name, LeadingAttr, Extensible) + end, + Prefix = lists:concat(["dec_os_",Name]), + F = asn1ct_func:call_gen(Prefix, Key, Gen), + emit([Term," = ",{asis,F},"(",TmpTerm,", ",Val,")"]). + +dec_objset_optional(N, {'DEFAULT',Val}) -> + dec_objset_optional_1(N, Val), + dec_objset_optional_1(N, asn1_DEFAULT); +dec_objset_optional(N, 'OPTIONAL') -> + dec_objset_optional_1(N, asn1_NOVALUE); +dec_objset_optional(_N, mandatory) -> ok. + +dec_objset_optional_1(N, Val) -> + emit([{asis,N},"(",{asis,Val},", _Id) ->",nl, + {asis,Val},";",nl]). + +dec_objset(_Erule, _N, [], _, _) -> + ok; +dec_objset(Erule, N, [Obj|Objs], RestFields, Cl) -> + dec_objset_1(Erule, N, Obj, RestFields, Cl), + emit([";",nl]), + dec_objset(Erule, N, Objs, RestFields, Cl). + +dec_objset_default(N, C, LeadingAttr, false) -> + emit([{asis,N},"(Bytes, Id) ->",nl, + "exit({'Type not compatible with table constraint'," + "{{component,",{asis,C},"}," + "{value,Bytes}," + "{unique_name_and_value,",{asis,LeadingAttr},",Id}}}).",nl,nl]); +dec_objset_default(N, _, _, true) -> + emit([{asis,N},"(Bytes, Id) ->",nl, + "Bytes.",nl,nl]). + +dec_objset_1(Erule, N, {Id,Obj}, RestFields, Typename) -> + emit([{asis,N},"(Bytes, ",{asis,Id},") ->",nl]), + dec_objset_2(Erule, Obj, RestFields, Typename). + +dec_objset_2(Erule, Obj, RestFields0, Typename) -> + case Obj of + #typedef{name={primitive,bif},typespec=Type} -> + Imm = asn1ct_gen_per:gen_dec_imm(Erule, Type), + {Term,_} = asn1ct_imm:dec_slim_cg(Imm, 'Bytes'), + emit([com,nl,Term]); + #typedef{name={constructed,bif},typespec=Def} -> + InnerType = asn1ct_gen:get_inner(Def#type.def), + case InnerType of + 'CHOICE' -> + asn1ct_name:start(), + asn1ct_name:new(bytes), + {'CHOICE',CompList} = Def#type.def, + Ext = extensible_enc(CompList), + emit(["{Result,_} = begin",nl]), + gen_dec_choice(Erule, Typename, CompList, Ext), + emit([nl, + "end",com,nl, + "Result"]); + 'SET' -> + Imm0 = gen_dec_constructed_imm(Erule, Typename, Def), + Imm = opt_imm(Imm0), + asn1ct_name:start(), + emit(["{Result,_} = begin",nl]), + emit_gen_dec_imm(Imm), + emit([nl, + "end",com,nl, + "Result"]); + 'SET OF' -> + asn1ct_name:start(), + do_gen_decode_sof(Erule, Typename, 'SET OF', + Def, false); + 'SEQUENCE' -> + Imm0 = gen_dec_constructed_imm(Erule, Typename, Def), + Imm = opt_imm(Imm0), + asn1ct_name:start(), + emit(["{Result,_} = begin",nl]), + emit_gen_dec_imm(Imm), + emit([nl, + "end",com,nl, + "Result"]); + 'SEQUENCE OF' -> + asn1ct_name:start(), + do_gen_decode_sof(Erule, Typename, 'SEQUENCE OF', + Def, false) + end; + #typedef{name=Type} -> + emit(["{Result,_} = ",{asis,enc_func("dec_", Type)},"(Bytes),",nl, + "Result"]); + #'Externaltypereference'{module=Mod,type=Type} -> + emit("{Term,_} = "), + Func = enc_func("dec_", Type), + case get(currmod) of + Mod -> + emit([{asis,Func},"(Bytes)"]); + _ -> + emit([{asis,Mod},":",{asis,Func},"(Bytes)"]) + end, + emit([com,nl, + "Term"]); + #'Externalvaluereference'{module=Mod,value=Value} -> + case asn1_db:dbget(Mod, Value) of + #typedef{typespec=#'Object'{def=Def}} -> + {object,_,Fields} = Def, + [NextField|RestFields] = RestFields0, + {NextField,Typedef} = lists:keyfind(NextField, 1, Fields), + dec_objset_2(Erule, Typedef, RestFields, Typename) + end + end. - N = case Prop of - mandatory -> 0; - 'OPTIONAL' -> - emit_opt_or_mand_check(asn1_NOVALUE,TmpTerm), - 6; - {'DEFAULT',Val} -> - emit_opt_or_mand_check(Val,TmpTerm), - 6 - end, +gen_encode_choice(Erule, TopType, D) -> + asn1ct_name:start(), + Imm = gen_encode_choice_imm(Erule, TopType, D), + asn1ct_imm:enc_cg(Imm, is_aligned(Erule)), + emit([".",nl]). - emit([indent(N+3),"case (catch ",DecObj,"(", - {asis,FirstPFN},", ",TmpTerm,", telltype,",{asis,PFNList},")) of",nl]), - emit([indent(N+6),"{'EXIT', ",{curr,reason},"} ->",nl]), - emit([indent(N+9),"exit({'Type not compatible with table constraint',", - {curr,reason},"});",nl]), - emit([indent(N+6),"{",{curr,tmpterm},",_} ->",nl]), - emit([indent(N+9),{curr,tmpterm},nl]), - - case Prop of - mandatory -> - emit([indent(N+3),"end,",nl]); - _ -> - emit([indent(N+3),"end",nl, - indent(3),"end,",nl]) - end, - gen_dec_listofopentypes(DecObj,Rest,true). - - -emit_opt_or_mand_check(Val,Term) -> - emit([indent(3),"case ",Term," of",nl, - indent(6),{asis,Val}," ->",{asis,Val},";",nl, - indent(6),"_ ->",nl]). - -%% ENCODE GENERATOR FOR THE CHOICE TYPE ******* -%% assume Val = {Alternative,AltType} -%% generate -%%[ -%% ?RT_PER:set_choice(element(1,Val),Altnum,Altlist,ext), -%%case element(1,Val) of -%% alt1 -> -%% encode_alt1(element(2,Val)); -%% alt2 -> -%% encode_alt2(element(2,Val)) -%%end -%%]. - -gen_encode_choice(Erule,Typename,D) when is_record(D,type) -> - {'CHOICE',CompList} = D#type.def, - emit({"[",nl}), +gen_encode_choice_imm(Erule, TopType, #type{def={'CHOICE',CompList}}) -> Ext = extensible_enc(CompList), - gen_enc_choice(Erule,Typename,CompList,Ext), - emit({nl,"].",nl}). + Aligned = is_aligned(Erule), + Cs = gen_enc_choice(Erule, TopType, CompList, Ext), + [{assign,{expr,"{ChoiceTag,ChoiceVal}"},"Val"}| + asn1ct_imm:per_enc_choice('ChoiceTag', Cs, Aligned)]. gen_decode_choice(Erules,Typename,D) when is_record(D,type) -> asn1ct_name:start(), @@ -496,72 +553,48 @@ gen_decode_choice(Erules,Typename,D) when is_record(D,type) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Encode generator for SEQUENCE OF type - -gen_encode_sof(Erule,Typename,SeqOrSetOf,D) when is_record(D,type) -> +gen_encode_sof(Erule, Typename, SeqOrSetOf, D) -> asn1ct_name:start(), - {_SeqOrSetOf,ComponentType} = D#type.def, - emit({"[",nl}), - SizeConstraint = asn1ct_imm:effective_constraint(bitstring, - D#type.constraint), - ObjFun = - case D#type.tablecinf of - [{objfun,_}|_R] -> - ", ObjFun"; - _-> - "" - end, - gen_encode_length(Erule, SizeConstraint), - emit({indent(3),"'enc_",asn1ct_gen:list2name(Typename), - "_components'(Val",ObjFun,", [])"}), - emit({nl,"].",nl}), - gen_encode_sof_components(Erule, Typename, SeqOrSetOf, ComponentType). - - -%% Logic copied from asn1_per_bin_rt2ct:encode_constrained_number -gen_encode_length(per, {Lb,Ub}) when Ub =< 65535, Lb >= 0 -> - Range = Ub - Lb + 1, - V2 = ["(length(Val) - ",Lb,")"], - Encode = if - Range == 1 -> - "[]"; - Range == 2 -> - {"[",V2,"]"}; - Range =< 4 -> - {"[10,2,",V2,"]"}; - Range =< 8 -> - {"[10,3,",V2,"]"}; - Range =< 16 -> - {"[10,4,",V2,"]"}; - Range =< 32 -> - {"[10,5,",V2,"]"}; - Range =< 64 -> - {"[10,6,",V2,"]"}; - Range =< 128 -> - {"[10,7,",V2,"]"}; - Range =< 255 -> - {"[10,8,",V2,"]"}; - Range =< 256 -> - {"[20,1,",V2,"]"}; - Range =< 65536 -> - {"[20,2,<<",V2,":16>>]"}; - true -> - {call,per,encode_length, - [{asis,{Lb,Ub}},"length(Val)"]} - end, - emit({nl,Encode,",",nl}); -gen_encode_length(Erules, SizeConstraint) -> - emit([nl,indent(3), - case SizeConstraint of - no -> - {call,Erules,encode_length,["length(Val)"]}; - _ -> - {call,Erules,encode_length, - [{asis,SizeConstraint},"length(Val)"]} - end, - com,nl]). + Imm = gen_encode_sof_imm(Erule, Typename, SeqOrSetOf, D), + asn1ct_imm:enc_cg(Imm, is_aligned(Erule)), + emit([".",nl,nl]). -gen_decode_sof(Erules,Typename,SeqOrSetOf,D) when is_record(D,type) -> +gen_encode_sof_imm(Erule, Typename, SeqOrSetOf, #type{}=D) -> + {_SeqOrSetOf,ComponentType} = D#type.def, + Aligned = is_aligned(Erule), + Constructed_Suffix = + asn1ct_gen:constructed_suffix(SeqOrSetOf, + ComponentType#type.def), + Conttype = asn1ct_gen:get_inner(ComponentType#type.def), + Currmod = get(currmod), + Imm0 = case asn1ct_gen:type(Conttype) of + {primitive,bif} -> + asn1ct_gen_per:gen_encode_prim_imm('Comp', ComponentType, Aligned); + {constructed,bif} -> + TypeName = [Constructed_Suffix|Typename], + Enc = enc_func(asn1ct_gen:list2name(TypeName)), + ObjArg = case D#type.tablecinf of + [{objfun,_}|_] -> [{var,"ObjFun"}]; + _ -> [] + end, + [{apply,Enc,[{var,"Comp"}|ObjArg]}]; + #'Externaltypereference'{module=Currmod,type=Ename} -> + [{apply,enc_func(Ename),[{var,"Comp"}]}]; + #'Externaltypereference'{module=EMod,type=Ename} -> + [{apply,{EMod,enc_func(Ename)},[{var,"Comp"}]}]; + 'ASN1_OPEN_TYPE' -> + asn1ct_gen_per:gen_encode_prim_imm('Comp', + #type{def='ASN1_OPEN_TYPE'}, + Aligned) + end, + asn1ct_imm:per_enc_sof('Val', D#type.constraint, 'Comp', Imm0, Aligned). + +gen_decode_sof(Erules, Typename, SeqOrSetOf, #type{}=D) -> asn1ct_name:start(), + do_gen_decode_sof(Erules, Typename, SeqOrSetOf, D, true), + emit([".",nl,nl]). + +do_gen_decode_sof(Erules, Typename, SeqOrSetOf, D, NeedRest) -> {_SeqOrSetOf,ComponentType} = D#type.def, SizeConstraint = asn1ct_imm:effective_constraint(bitstring, D#type.constraint), @@ -573,10 +606,16 @@ gen_decode_sof(Erules,Typename,SeqOrSetOf,D) when is_record(D,type) -> "" end, {Num,Buf} = gen_decode_length(SizeConstraint, Erules), + Key = erlang:md5(term_to_binary({Typename,SeqOrSetOf, + ComponentType,NeedRest})), + Gen = fun(_Fd, Name) -> + gen_decode_sof_components(Erules, Name, + Typename, SeqOrSetOf, + ComponentType, NeedRest) + end, + F = asn1ct_func:call_gen("dec_components", Key, Gen), emit([",",nl, - "'dec_",asn1ct_gen:list2name(Typename), - "_components'(",Num,", ",Buf,ObjFun,", []).",nl,nl]), - gen_decode_sof_components(Erules, Typename, SeqOrSetOf, ComponentType). + {asis,F},"(",Num,", ",Buf,ObjFun,", [])"]). is_aligned(per) -> true; is_aligned(uper) -> false. @@ -586,7 +625,7 @@ gen_decode_length(Constraint, Erule) -> Imm = asn1ct_imm:per_dec_length(Constraint, true, is_aligned(Erule)), asn1ct_imm:dec_slim_cg(Imm, "Bytes"). -gen_encode_sof_components(Erule,Typename,SeqOrSetOf,Cont) -> +gen_decode_sof_components(Erule, Name, Typename, SeqOrSetOf, Cont, NeedRest) -> {ObjFun,ObjFun_Var} = case Cont#type.tablecinf of [{objfun,_}|_R] -> @@ -594,76 +633,38 @@ gen_encode_sof_components(Erule,Typename,SeqOrSetOf,Cont) -> _ -> {"",""} end, - emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'([]", - ObjFun_Var,", Acc) -> lists:reverse(Acc);",nl,nl}), - emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'([H|T]", - ObjFun,", Acc) ->",nl}), - emit({"'enc_",asn1ct_gen:list2name(Typename),"_components'(T"}), - emit({ObjFun,", ["}), - %% the component encoder - Constructed_Suffix = asn1ct_gen:constructed_suffix(SeqOrSetOf, - Cont#type.def), - - Conttype = asn1ct_gen:get_inner(Cont#type.def), - Currmod = get(currmod), - case asn1ct_gen:type(Conttype) of - {primitive,bif} -> - asn1ct_gen_per:gen_encode_prim(Erule, Cont, "H"); - {constructed,bif} -> - NewTypename = [Constructed_Suffix|Typename], - emit({"'enc_",asn1ct_gen:list2name(NewTypename),"'(H", - ObjFun,")",nl,nl}); - #'Externaltypereference'{module=Currmod,type=Ename} -> - emit({"'enc_",Ename,"'(H)",nl,nl}); - #'Externaltypereference'{module=EMod,type=EType} -> - emit({"'",EMod,"':'enc_",EType,"'(H)",nl,nl}); - 'ASN1_OPEN_TYPE' -> - asn1ct_gen_per:gen_encode_prim(Erule, - #type{def='ASN1_OPEN_TYPE'}, - "H"); - _ -> - emit({"'enc_",Conttype,"'(H)",nl,nl}) + case NeedRest of + false -> + emit([{asis,Name},"(0, _Bytes",ObjFun_Var,", Acc) ->",nl, + "lists:reverse(Acc);",nl]); + true -> + emit([{asis,Name},"(0, Bytes",ObjFun_Var,", Acc) ->",nl, + "{lists:reverse(Acc),Bytes};",nl]) end, - emit({" | Acc]).",nl}). - -gen_decode_sof_components(Erule,Typename,SeqOrSetOf,Cont) -> - {ObjFun,ObjFun_Var} = - case Cont#type.tablecinf of - [{objfun,_}|_R] -> - {", ObjFun",", _"}; - _ -> - {"",""} - end, - emit({"'dec_",asn1ct_gen:list2name(Typename), - "_components'(0, Bytes",ObjFun_Var,", Acc) ->",nl, - indent(3),"{lists:reverse(Acc), Bytes};",nl}), - emit({"'dec_",asn1ct_gen:list2name(Typename), - "_components'(Num, Bytes",ObjFun,", Acc) ->",nl}), - emit({indent(3),"{Term,Remain} = "}), + emit([{asis,Name},"(Num, Bytes",ObjFun,", Acc) ->",nl, + "{Term,Remain} = "]), Constructed_Suffix = asn1ct_gen:constructed_suffix(SeqOrSetOf, Cont#type.def), Conttype = asn1ct_gen:get_inner(Cont#type.def), - Ctgenmod = asn1ct_gen:ct_gen_module(Erule), case asn1ct_gen:type(Conttype) of {primitive,bif} -> - Ctgenmod:gen_dec_prim(Erule,Cont,"Bytes"), + asn1ct_gen_per:gen_dec_prim(Erule, Cont, "Bytes"), emit({com,nl}); {constructed,bif} -> NewTypename = [Constructed_Suffix|Typename], emit({"'dec_",asn1ct_gen:list2name(NewTypename), - "'(Bytes, telltype",ObjFun,"),",nl}); + "'(Bytes",ObjFun,"),",nl}); #'Externaltypereference'{}=Etype -> asn1ct_gen_per:gen_dec_external(Etype, "Bytes"), emit([com,nl]); 'ASN1_OPEN_TYPE' -> - Ctgenmod:gen_dec_prim(Erule,#type{def='ASN1_OPEN_TYPE'}, - "Bytes"), + asn1ct_gen_per:gen_dec_prim(Erule, #type{def='ASN1_OPEN_TYPE'}, + "Bytes"), emit({com,nl}); _ -> - emit({"'dec_",Conttype,"'(Bytes,telltype),",nl}) + emit({"'dec_",Conttype,"'(Bytes),",nl}) end, - emit({indent(3),"'dec_",asn1ct_gen:list2name(Typename), - "_components'(Num-1, Remain",ObjFun,", [Term|Acc]).",nl}). + emit([{asis,Name},"(Num-1, Remain",ObjFun,", [Term|Acc]).",nl]). %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -754,27 +755,6 @@ gen_dec_optionals(Optionals) -> end, {imm,Imm0,E}. -gen_fixoptionals([{Pos,Def}|R]) -> - asn1ct_name:new(fixopt), - emit({{curr,fixopt}," = case element(",{asis,Pos},",",{curr,val},") of",nl, - "asn1_DEFAULT -> 0;",nl, - {asis,Def}," -> 0;",nl, - "_ -> 1",nl, - "end,",nl}), - gen_fixoptionals(R); -gen_fixoptionals([Pos|R]) -> - gen_fixoptionals([{Pos,asn1_NOVALUE}|R]); -gen_fixoptionals([]) -> - ok. - - -param_map(Fun, [H]) -> - [Fun(H)]; -param_map(Fun, [H|T]) -> - [Fun(H),","|param_map(Fun,T)]. - - - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Produce a list with positions (in the Value record) where %% there are optional components, start with 2 because first element @@ -788,15 +768,13 @@ optionals({L1,Ext,L2}) -> optionals({L,_Ext}) -> optionals(L,[],2); optionals(L) -> optionals(L,[],2). -optionals([{'EXTENSIONMARK',_,_}|Rest],Acc,Pos) -> - optionals(Rest,Acc,Pos); % optionals in extension are currently not handled -optionals([#'ComponentType'{prop='OPTIONAL'}|Rest],Acc,Pos) -> - optionals(Rest,[Pos|Acc],Pos+1); -optionals([#'ComponentType'{prop={'DEFAULT',Val}}|Rest],Acc,Pos) -> - optionals(Rest,[{Pos,Val}|Acc],Pos+1); -optionals([#'ComponentType'{}|Rest],Acc,Pos) -> - optionals(Rest,Acc,Pos+1); -optionals([],Acc,_) -> +optionals([#'ComponentType'{prop='OPTIONAL'}|Rest], Acc, Pos) -> + optionals(Rest, [Pos|Acc], Pos+1); +optionals([#'ComponentType'{prop={'DEFAULT',Val}}|Rest], Acc, Pos) -> + optionals(Rest, [{Pos,Val}|Acc], Pos+1); +optionals([#'ComponentType'{}|Rest], Acc, Pos) -> + optionals(Rest, Acc, Pos+1); +optionals([], Acc, _) -> lists:reverse(Acc). %%%%%%%%%%%%%%%%%%%%%% @@ -858,33 +836,32 @@ add_textual_order1(Cs,NumIn) -> end, NumIn,Cs). -gen_enc_components_call(Erule,TopType,{Root,ExtList},MaybeComma,DynamicEnc,Ext) -> - gen_enc_components_call(Erule,TopType,{Root,ExtList,[]},MaybeComma,DynamicEnc,Ext); -gen_enc_components_call(Erule,TopType,CL={Root,ExtList,Root2},MaybeComma,DynamicEnc,Ext) -> +gen_enc_components_call(Erule,TopType,{Root,ExtList}, DynamicEnc,Ext) -> + gen_enc_components_call(Erule,TopType,{Root,ExtList,[]}, DynamicEnc,Ext); +gen_enc_components_call(Erule,TopType,CL={Root,ExtList,Root2}, DynamicEnc,Ext) -> %% The type has extensionmarker - Rpos = gen_enc_components_call1(Erule,TopType,Root++Root2,1,MaybeComma,DynamicEnc,noext), - case Ext of - {ext,_,ExtNum} when ExtNum > 0 -> - emit([nl, - ",Extensions",nl]); - - _ -> true - end, + {Imm0,Rpos} = gen_enc_components_call1(Erule,TopType,Root++Root2,1, DynamicEnc,noext,[]), + ExtImm = case Ext of + {ext,_,ExtNum} when ExtNum > 0 -> + [{var,"Extensions"}]; + _ -> + [] + end, %handle extensions {extgrouppos,ExtGroupPosLen} = extgroup_pos_and_length(CL), NewExtList = wrap_extensionAdditionGroups(ExtList,ExtGroupPosLen), - gen_enc_components_call1(Erule,TopType,NewExtList,Rpos,MaybeComma,DynamicEnc,Ext); -gen_enc_components_call(Erule,TopType, CompList, MaybeComma, DynamicEnc, Ext) -> + {Imm1,_} = gen_enc_components_call1(Erule,TopType,NewExtList,Rpos,DynamicEnc,Ext,[]), + Imm0 ++ [ExtImm|Imm1]; +gen_enc_components_call(Erule,TopType, CompList, DynamicEnc, Ext) -> %% The type has no extensionmarker - gen_enc_components_call1(Erule,TopType,CompList,1,MaybeComma,DynamicEnc,Ext). + {Imm,_} = gen_enc_components_call1(Erule,TopType,CompList,1,DynamicEnc,Ext,[]), + Imm. gen_enc_components_call1(Erule,TopType, [C=#'ComponentType'{name=Cname,typespec=Type,prop=Prop}|Rest], Tpos, - MaybeComma, DynamicEnc, Ext) -> + DynamicEnc, Ext, Acc) -> - put(component_type,{true,C}), - %% information necessary in asn1ct_gen_per_rt2ct:gen_encode_prim TermNo = case C#'ComponentType'.textual_order of undefined -> @@ -892,90 +869,48 @@ gen_enc_components_call1(Erule,TopType, CanonicalNum -> CanonicalNum end, - emit(MaybeComma), - case Prop of - 'OPTIONAL' -> - gen_enc_component_optional(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext); - {'DEFAULT',DefVal} -> - gen_enc_component_default(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext,DefVal); + Element0 = make_element(TermNo+1, asn1ct_gen:mk_var(asn1ct_name:curr(val))), + {Imm0,Element} = asn1ct_imm:enc_bind_var(Element0), + Imm1 = gen_enc_line_imm(Erule, TopType, Cname, Type, Element, DynamicEnc, Ext), + Category = case {Prop,Ext} of + {'OPTIONAL',_} -> + optional; + {{'DEFAULT',DefVal},_} -> + {default,DefVal}; + {_,{ext,ExtPos,_}} when Tpos >= ExtPos -> + optional; + {_,_} -> + mandatory + end, + Imm2 = case Category of + mandatory -> + Imm1; + optional -> + asn1ct_imm:enc_absent(Element, [asn1_NOVALUE], Imm1); + {default,Def} -> + asn1ct_imm:enc_absent(Element, [asn1_DEFAULT,Def], Imm1) + end, + Imm = case Imm2 of + [] -> []; + _ -> Imm0 ++ Imm2 + end, + gen_enc_components_call1(Erule, TopType, Rest, Tpos+1, DynamicEnc, Ext, [Imm|Acc]); +gen_enc_components_call1(_Erule,_TopType,[],Pos,_,_, Acc) -> + ImmList = lists:reverse(Acc), + {ImmList,Pos}. + +gen_enc_line_imm(Erule, TopType, Cname, Type, Element, DynamicEnc, Ext) -> + Imm0 = gen_enc_line_imm_1(Erule, TopType, Cname, Type, + Element, DynamicEnc), + Aligned = is_aligned(Erule), + case Ext of + {ext,_Ep2,_} -> + asn1ct_imm:per_enc_open_type(Imm0, Aligned); _ -> - case Ext of - {ext,ExtPos,_} when Tpos >= ExtPos -> - gen_enc_component_optional(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext); - _ -> - gen_enc_component_mandatory(Erule,TopType,Cname,Type,TermNo,DynamicEnc,Ext) - end - end, - - erase(component_type), + Imm0 + end. - case Rest of - [] -> - Tpos+1; - _ -> - emit({com,nl}), - gen_enc_components_call1(Erule,TopType,Rest,Tpos+1,"",DynamicEnc,Ext) - end; -gen_enc_components_call1(_Erule,_TopType,[],Pos,_,_,_) -> - Pos. - -gen_enc_component_default(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext,DefaultVal) -> - Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))), - emit({"case ",Element," of",nl}), -% emit({"asn1_DEFAULT -> [];",nl}), - emit({"DFLT when DFLT == asn1_DEFAULT; DFLT == ",{asis,DefaultVal}," -> [];",nl}), - - asn1ct_name:new(tmpval), - emit({{curr,tmpval}," ->",nl}), - InnerType = asn1ct_gen:get_inner(Type#type.def), - emit({nl,"%% attribute number ",Pos," with type ", - InnerType,nl}), - NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)), - gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext), - emit({nl,"end"}). - -gen_enc_component_optional(Erule,TopType,Cname, - Type=#type{def=#'SEQUENCE'{ - extaddgroup=Number, - components=_ExtGroupCompList}}, - Pos,DynamicEnc,Ext) when is_integer(Number) -> - - Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))), - emit({"case ",Element," of",nl}), - - emit({"asn1_NOVALUE -> [];",nl}), - asn1ct_name:new(tmpval), - emit({{curr,tmpval}," ->",nl}), - InnerType = asn1ct_gen:get_inner(Type#type.def), - emit({nl,"%% attribute number ",Pos," with type ", - InnerType,nl}), - NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)), - gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext), - emit({nl,"end"}); -gen_enc_component_optional(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext) -> - Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))), - emit({"case ",Element," of",nl}), - - emit({"asn1_NOVALUE -> [];",nl}), - asn1ct_name:new(tmpval), - emit({{curr,tmpval}," ->",nl}), - InnerType = asn1ct_gen:get_inner(Type#type.def), - emit({nl,"%% attribute number ",Pos," with type ", - InnerType,nl}), - NextElement = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)), - gen_enc_line(Erule,TopType,Cname,Type,NextElement, Pos,DynamicEnc,Ext), - emit({nl,"end"}). - -gen_enc_component_mandatory(Erule,TopType,Cname,Type,Pos,DynamicEnc,Ext) -> - InnerType = asn1ct_gen:get_inner(Type#type.def), - emit({nl,"%% attribute number ",Pos," with type ", - InnerType,nl}), - gen_enc_line(Erule,TopType,Cname,Type,[],Pos,DynamicEnc,Ext). - -gen_enc_line(Erule,TopType, Cname, Type, [], Pos,DynamicEnc,Ext) -> - Element = make_element(Pos+1,asn1ct_gen:mk_var(asn1ct_name:curr(val))), - gen_enc_line(Erule,TopType,Cname,Type,Element, Pos,DynamicEnc,Ext); -gen_enc_line(Erule,TopType,Cname,Type,Element, _Pos,DynamicEnc,Ext) -> +gen_enc_line_imm_1(Erule, TopType, Cname, Type, Element, DynamicEnc) -> Atype = case Type of #type{def=#'ObjectClassFieldType'{type=InnerType}} -> @@ -983,81 +918,157 @@ gen_enc_line(Erule,TopType,Cname,Type,Element, _Pos,DynamicEnc,Ext) -> _ -> asn1ct_gen:get_inner(Type#type.def) end, - - case Ext of - {ext,_Ep1,_} -> - asn1ct_func:need({Erule,encode_open_type,1}), - asn1ct_func:need({Erule,complete,1}), - emit(["encode_open_type(complete("]); - _ -> true - end, - + Aligned = is_aligned(Erule), case Atype of {typefield,_} -> - case DynamicEnc of - {_LeadingAttrName,Fun} -> - case (Type#type.def)#'ObjectClassFieldType'.fieldname of - {Name,RestFieldNames} when is_atom(Name) -> - asn1ct_func:need({Erule,complete,1}), - asn1ct_func:need({Erule,encode_open_type,1}), - emit({"encode_open_type(complete(",nl}), - emit({" ",Fun,"(",{asis,Name},", ", - Element,", ",{asis,RestFieldNames},")))"}); - Other -> - throw({asn1,{'internal error',Other}}) - end - end; - {objectfield,PrimFieldName1,PFNList} -> - case DynamicEnc of - {_LeadingAttrName,Fun} -> - asn1ct_func:need({Erule,complete,1}), - asn1ct_func:need({Erule,encode_open_type,1}), - emit({"encode_open_type(" - "complete(",nl}), - emit({" ",Fun,"(",{asis,PrimFieldName1}, - ", ",Element,", ",{asis,PFNList},")))"}) + {_LeadingAttrName,Fun} = DynamicEnc, + case (Type#type.def)#'ObjectClassFieldType'.fieldname of + {Name,RestFieldNames} when is_atom(Name) -> + Imm = enc_var_type_call(Erule, Name, RestFieldNames, + Type, Fun, Element), + asn1ct_imm:per_enc_open_type(Imm, Aligned) end; _ -> CurrMod = get(currmod), case asn1ct_gen:type(Atype) of - #'Externaltypereference'{module=Mod,type=EType} when - (CurrMod==Mod) -> - emit({"'enc_",EType,"'(",Element,")"}); + #'Externaltypereference'{module=CurrMod,type=EType} -> + [{apply,enc_func(EType),[{expr,Element}]}]; #'Externaltypereference'{module=Mod,type=EType} -> - emit({"'",Mod,"':'enc_", - EType,"'(",Element,")"}); + [{apply,{Mod,enc_func(EType)},[{expr,Element}]}]; {primitive,bif} -> - asn1ct_gen_per:gen_encode_prim(Erule, Type, Element); + asn1ct_gen_per:gen_encode_prim_imm(Element, Type, Aligned); 'ASN1_OPEN_TYPE' -> case Type#type.def of #'ObjectClassFieldType'{type=OpenType} -> - asn1ct_gen_per:gen_encode_prim(Erule, - #type{def=OpenType}, - Element); + asn1ct_gen_per:gen_encode_prim_imm(Element, + #type{def=OpenType}, + Aligned); _ -> - asn1ct_gen_per:gen_encode_prim(Erule, Type, - Element) + asn1ct_gen_per:gen_encode_prim_imm(Element, + Type, + Aligned) end; {constructed,bif} -> NewTypename = [Cname|TopType], + Enc = enc_func(asn1ct_gen:list2name(NewTypename)), case {Type#type.tablecinf,DynamicEnc} of {[{objfun,_}|_R],{_,EncFun}} -> - emit({"'enc_", - asn1ct_gen:list2name(NewTypename), - "'(",Element,", ",EncFun,")"}); + [{apply,Enc,[{expr,Element},{var,EncFun}]}]; _ -> - emit({"'enc_", - asn1ct_gen:list2name(NewTypename), - "'(",Element,")"}) + [{apply,Enc,[{expr,Element}]}] end end - end, - case Ext of - {ext,_Ep2,_} -> - emit("))"); - _ -> true end. +enc_func(Type) -> + enc_func("enc_", Type). + +enc_func(Prefix, Name) -> + list_to_atom(lists:concat([Prefix,Name])). + +enc_var_type_call(Erule, Name, RestFieldNames, + #type{tablecinf=TCI}, Fun, Val) -> + [{objfun,#'Externaltypereference'{module=Xmod,type=Xtype}}] = TCI, + #typedef{typespec=ObjSet0} = asn1_db:dbget(Xmod, Xtype), + #'ObjectSet'{class=Class,set=ObjSet1} = ObjSet0, + #'Externaltypereference'{module=ClMod,type=ClType} = Class, + #classdef{typespec=ClassDef} = asn1_db:dbget(ClMod, ClType), + #objectclass{fields=ClassFields} = ClassDef, + Extensible = lists:member('EXTENSIONMARK', ObjSet1), + ObjSet2 = [{Key,fix_object_code(Name, Code, ClassFields)} || + {_,Key,Code} <- ObjSet1], + ObjSet = lists:sort([P || {_,B}=P <- ObjSet2, B =/= none]), + Key = erlang:md5(term_to_binary({encode,ObjSet,RestFieldNames,Extensible})), + Gen = fun(_Fd, N) -> + enc_objset(Erule, Name, N, ObjSet, + RestFieldNames, Extensible) + end, + Prefix = lists:concat(["enc_os_",Name]), + F = asn1ct_func:call_gen(Prefix, Key, Gen), + [{apply,F,[{var,atom_to_list(Val)},{var,Fun}]}]. + +fix_object_code(Name, [{Name,B}|_], _ClassFields) -> + B; +fix_object_code(Name, [_|T], ClassFields) -> + fix_object_code(Name, T, ClassFields); +fix_object_code(Name, [], ClassFields) -> + case lists:keyfind(Name, 2, ClassFields) of + {typefield,Name,'OPTIONAL'} -> + none; + {objectfield,Name,_,_,'OPTIONAL'} -> + none; + {typefield,Name,{'DEFAULT',#type{}=Type}} -> + InnerType = asn1ct_gen:get_inner(Type#type.def), + case asn1ct_gen:type(InnerType) of + {primitive,bif} -> + #typedef{name={primitive,bif},typespec=Type}; + {constructed,bif} -> + #typedef{name={constructed,bif},typespec=Type} + end + end. + + +enc_objset(Erule, Component, Name, ObjSet, RestFieldNames, Extensible) -> + asn1ct_name:start(), + Aligned = is_aligned(Erule), + E = {error, + fun() -> + emit(["exit({'Type not compatible with table constraint'," + "{component,",{asis,Component},"}," + "{value,Val}," + "{unique_name_and_value,'_'}})",nl]) + end}, + Imm = [{'cond', + [[{eq,{var,"Id"},Key}| + enc_obj(Erule, Obj, RestFieldNames, Aligned)] || + {Key,Obj} <- ObjSet] ++ + [['_',case Extensible of + false -> E; + true -> {put_bits,{var,"Val"},binary,[1]} + end]]}], + emit([{asis,Name},"(Val, Id) ->",nl]), + asn1ct_imm:enc_cg(Imm, Aligned), + emit([".",nl]). + +enc_obj(Erule, Obj, RestFieldNames0, Aligned) -> + case Obj of + #typedef{name={primitive,bif},typespec=Def} -> + asn1ct_gen_per:gen_encode_prim_imm('Val', Def, Aligned); + #typedef{name={constructed,bif},typespec=Def} -> + InnerType = asn1ct_gen:get_inner(Def#type.def), + case InnerType of + 'CHOICE' -> + gen_encode_choice_imm(Erule, name, Def); + 'SET' -> + gen_encode_constructed_imm(Erule, name, Def); + 'SET OF' -> + gen_encode_sof_imm(Erule, name, InnerType, Def); + 'SEQUENCE' -> + gen_encode_constructed_imm(Erule, name, Def); + 'SEQUENCE OF' -> + gen_encode_sof_imm(Erule, name, InnerType, Def) + end; + #typedef{name=Type} -> + [{apply,enc_func(Type),[{var,"Val"}]}]; + #'Externalvaluereference'{module=Mod,value=Value} -> + case asn1_db:dbget(Mod, Value) of + #typedef{typespec=#'Object'{def=Def}} -> + {object,_,Fields} = Def, + [NextField|RestFieldNames] = RestFieldNames0, + {NextField,Typedef} = lists:keyfind(NextField, 1, Fields), + enc_obj(Erule, Typedef, RestFieldNames, Aligned) + end; + #'Externaltypereference'{module=Mod,type=Type} -> + Func = enc_func(Type), + case get(currmod) of + Mod -> + [{apply,Func,[{var,"Val"}]}]; + _ -> + [{apply,{Mod,Func},[{var,"Val"}]}] + end + end. + + gen_dec_components_call(Erule, TopType, {Root,ExtList}, DecInfObj, Ext, NumberOfOptionals) -> gen_dec_components_call(Erule,TopType,{Root,ExtList,[]}, @@ -1163,14 +1174,6 @@ gen_dec_comp_call(Comp, Erule, TopType, Tpos, OptTable, DecInfObj, emit(["{",{curr,tmpterm},", ",{next,bytes},"} = "]), St end; - %%{objectfield,_,_} when Ext == noext, Prop == mandatory -> - {{objectfield,_,_},true} -> - fun(St) -> - asn1ct_name:new(term), - asn1ct_name:new(tmpterm), - emit(["{",{curr,tmpterm},", ",{next,bytes},"} = "]), - St - end; _ -> case Type of #type{def=#'SEQUENCE'{ @@ -1350,25 +1353,19 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp, false -> % This is in a choice with typefield components {Name,RestFieldNames} = (Type#type.def)#'ObjectClassFieldType'.fieldname, - - asn1ct_name:new(reason), Imm = asn1ct_imm:per_dec_open_type(is_aligned(Erule)), BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)), {TmpTerm,TempBuf} = asn1ct_imm:dec_slim_cg(Imm, BytesVar), + emit([com,nl]), + #type{tablecinf=[{objfun, + #'Externaltypereference'{module=Xmod, + type=Xtype}}]} = + Type, + gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype}, + '_', {'_',{Name,RestFieldNames}, + 'Result',TmpTerm,mandatory}), emit([com,nl, - {next,bytes}," = ",TempBuf,com,nl, - indent(2),"case (catch ObjFun(", - {asis,Name},",",TmpTerm,",telltype,", - {asis,RestFieldNames},")) of", nl]), - emit([indent(4),"{'EXIT',",{curr,reason},"} ->",nl]), - emit([indent(6),"exit({'Type not ", - "compatible with table constraint', ", - {curr,reason},"});",nl]), - asn1ct_name:new(tmpterm), - emit([indent(4),"{",{curr,tmpterm},", _} ->",nl]), - emit([indent(6),"{",{asis,Cname},", {",{curr,tmpterm},", ", - {next,bytes},"}}",nl]), - emit([indent(2),"end"]), + "{",{asis,Cname},",{Result,",TempBuf,"}}"]), {[],PrevSt}; {"got objfun through args","ObjFun"} -> %% this is when the generated code gots the @@ -1388,27 +1385,22 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp, BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)), asn1ct_imm:dec_code_gen(Imm, BytesVar), emit([com,nl]), + #type{tablecinf=[{objfun, + #'Externaltypereference'{module=Xmod, + type=Xtype}}]} = + Type, + Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)), + TmpTerm = asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)), if Prop =:= mandatory -> - emit([{curr,term}," =",nl," "]); - true -> - emit([" {"]) - end, - emit(["case (catch ObjFun(",{asis,Name},",", - {curr,tmpterm},",telltype,", - {asis,RestFieldNames},")) of", nl]), - emit([" {'EXIT',",{curr,reason},"} ->",nl]), - emit([indent(6),"exit({'Type not ", - "compatible with table constraint', ", - {curr,reason},"});",nl]), - asn1ct_name:new(tmpterm), - emit([indent(4),"{",{curr,tmpterm},", _} ->",nl]), - emit([indent(6),{curr,tmpterm},nl]), - emit([indent(2),"end"]), - if - Prop =:= mandatory -> - ok; + gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype}, + '_', {'_',{Name,RestFieldNames}, + Term,TmpTerm,Prop}); true -> + emit([" {"]), + gen_dec_open_type(Erule, "ObjFun", {Xmod,Xtype}, + '_', {'_',{Name,RestFieldNames}, + '_',TmpTerm,Prop}), emit([",",nl,{curr,tmpbytes},"}"]) end, {[],PrevSt}; @@ -1425,19 +1417,6 @@ gen_dec_line_special(Erule, {typefield,_}, _TopType, Comp, Prop}],PrevSt} end end; -gen_dec_line_special(Erule, {objectfield,PrimFieldName1,PFNList}, _TopType, - Comp, _DecInfObj) -> - fun({_BytesVar,PrevSt}) -> - Imm = asn1ct_imm:per_dec_open_type(is_aligned(Erule)), - BytesVar = asn1ct_gen:mk_var(asn1ct_name:curr(bytes)), - asn1ct_imm:dec_code_gen(Imm, BytesVar), - #'ComponentType'{name=Cname,prop=Prop} = Comp, - SaveBytes = [{Cname,{PrimFieldName1,PFNList}, - asn1ct_gen:mk_var(asn1ct_name:curr(term)), - asn1ct_gen:mk_var(asn1ct_name:curr(tmpterm)), - Prop}], - {SaveBytes,PrevSt} - end; gen_dec_line_special(Erule, Atype, TopType, Comp, DecInfObj) -> case gen_dec_line_other(Erule, Atype, TopType, Comp) of Fun when is_function(Fun, 1) -> @@ -1458,14 +1437,11 @@ gen_dec_line_special(Erule, Atype, TopType, Comp, DecInfObj) -> gen_dec_line_dec_inf(Comp, DecInfObj) -> #'ComponentType'{name=Cname} = Comp, case DecInfObj of - {Cname,{_,OSet,UniqueFName,ValIndex}} -> + {Cname,{_,_OSet,_UniqueFName,ValIndex}} -> Term = asn1ct_gen:mk_var(asn1ct_name:curr(term)), ValueMatch = value_match(ValIndex,Term), - {ObjSetMod,ObjSetName} = OSet, emit([",",nl, - "ObjFun = ",{asis,ObjSetMod}, - ":'getdec_",ObjSetName,"'(", - {asis,UniqueFName},", ",ValueMatch,")"]); + "ObjFun = ",ValueMatch]); _ -> ok end. @@ -1492,63 +1468,35 @@ gen_dec_line_other(Erule, Atype, TopType, Comp) -> [{objfun,_}|_R] -> fun(BytesVar) -> emit({"'dec_",asn1ct_gen:list2name(NewTypename), - "'(",BytesVar,", telltype, ObjFun)"}) + "'(",BytesVar,", ObjFun)"}) end; _ -> fun(BytesVar) -> emit({"'dec_",asn1ct_gen:list2name(NewTypename), - "'(",BytesVar,", telltype)"}) + "'(",BytesVar,")"}) end end end. -gen_enc_choice(Erule,TopType,CompList,Ext) -> - gen_enc_choice_tag(Erule, CompList, [], Ext), - emit({com,nl}), - emit({"case element(1,Val) of",nl}), - gen_enc_choice2(Erule,TopType, CompList, Ext), - emit({nl,"end"}). - -gen_enc_choice_tag(Erule, {C1,C2}, _, _) -> - N1 = get_name_list(C1), - N2 = get_name_list(C2), - call(Erule,set_choice, - ["element(1, Val)", - {asis,{N1,N2}}, - {asis,{length(N1),length(N2)}}]); -gen_enc_choice_tag(Erule, {C1,C2,C3}, _, _) -> - N1 = get_name_list(C1), - N2 = get_name_list(C2), - N3 = get_name_list(C3), - Root = N1 ++ N3, - call(Erule,set_choice, - ["element(1, Val)", - {asis,{Root,N2}}, - {asis,{length(Root),length(N2)}}]); -gen_enc_choice_tag(Erule, C, _, _) -> - N = get_name_list(C), - call(Erule,set_choice, - ["element(1, Val)", - {asis,N},{asis,length(N)}]). - -get_name_list(L) -> - get_name_list(L,[]). - -get_name_list([#'ComponentType'{name=Name}|T], Acc) -> - get_name_list(T,[Name|Acc]); -get_name_list([], Acc) -> - lists:reverse(Acc). - - -gen_enc_choice2(Erule,TopType, {L1,L2}, Ext) -> - gen_enc_choice2(Erule, TopType, L1 ++ L2, 0, [], Ext); -gen_enc_choice2(Erule, TopType, {L1,L2,L3}, Ext) -> - gen_enc_choice2(Erule, TopType, L1 ++ L3 ++ L2, 0, [], Ext); -gen_enc_choice2(Erule,TopType, L, Ext) -> - gen_enc_choice2(Erule,TopType, L, 0, [], Ext). +gen_enc_choice(Erule, TopType, {Root,Exts}, Ext) -> + Constr = choice_constraint(Root), + gen_enc_choices(Root, Erule, TopType, 0, Constr, Ext) ++ + gen_enc_choices(Exts, Erule, TopType, 0, ext, Ext); +gen_enc_choice(Erule, TopType, {Root,Exts,[]}, Ext) -> + gen_enc_choice(Erule, TopType, {Root,Exts}, Ext); +gen_enc_choice(Erule, TopType, Root, Ext) when is_list(Root) -> + Constr = choice_constraint(Root), + gen_enc_choices(Root, Erule, TopType, 0, Constr, Ext). + +choice_constraint(L) -> + case length(L) of + 0 -> [{'SingleValue',0}]; + Len -> [{'ValueRange',{0,Len-1}}] + end. -gen_enc_choice2(Erule, TopType, [H|T], Pos, Sep0, Ext) -> +gen_enc_choices([H|T], Erule, TopType, Pos, Constr, Ext) -> #'ComponentType'{name=Cname,typespec=Type} = H, + Aligned = is_aligned(Erule), EncObj = case asn1ct_gen:get_constraint(Type#type.constraint, componentrelation) of @@ -1562,16 +1510,25 @@ gen_enc_choice2(Erule, TopType, [H|T], Pos, Sep0, Ext) -> _ -> {no_attr,"ObjFun"} end, - emit([Sep0,{asis,Cname}," ->",nl]), - DoExt = case Ext of - {ext,ExtPos,_} when Pos + 1 < ExtPos -> noext; - _ -> Ext + DoExt = case Constr of + ext -> Ext; + _ -> noext end, - gen_enc_line(Erule, TopType, Cname, Type, "element(2, Val)", - Pos+1, EncObj, DoExt), - Sep = [";",nl], - gen_enc_choice2(Erule, TopType, T, Pos+1, Sep, Ext); -gen_enc_choice2(_, _, [], _, _, _) -> ok. + Tag = case {Ext,Constr} of + {noext,_} -> + asn1ct_imm:per_enc_integer(Pos, Constr, Aligned); + {{ext,_,_},ext} -> + [{put_bits,1,1,[1]}| + asn1ct_imm:per_enc_small_number(Pos, Aligned)]; + {{ext,_,_},_} -> + [{put_bits,0,1,[1]}| + asn1ct_imm:per_enc_integer(Pos, Constr, Aligned)] + end, + Body = gen_enc_line_imm(Erule, TopType, Cname, Type, 'ChoiceVal', + EncObj, DoExt), + Imm = Tag ++ Body, + [{Cname,Imm}|gen_enc_choices(T, Erule, TopType, Pos+1, Constr, Ext)]; +gen_enc_choices([], _, _, _, _, _) -> []. %% Generate the code for CHOICE. If the CHOICE is extensible, %% the structure of the generated code is as follows: @@ -1704,9 +1661,6 @@ gen_dec_choice2(Erule, TopType, [H0|T], Pos, Sep0, Pre) -> gen_dec_choice2(Erule, TopType, T, Pos+1, Sep, Pre); gen_dec_choice2(_, _, [], _, _, _) -> ok. -indent(N) -> - lists:duplicate(N,32). % 32 = space - make_elements(I,Val,ExtCnames) -> make_elements(I,Val,ExtCnames,[]). @@ -1720,7 +1674,7 @@ make_elements(_I,_,[],Acc) -> lists:reverse(Acc). make_element(I, Val) -> - io_lib:format("element(~w,~s)", [I,Val]). + lists:flatten(io_lib:format("element(~w, ~s)", [I,Val])). emit_extaddgroupTerms(VarSeries,[_]) -> asn1ct_name:new(VarSeries), @@ -1787,6 +1741,3 @@ value_match1(Value,[],Acc,Depth) -> Acc ++ Value ++ lists:concat(lists:duplicate(Depth,")")); value_match1(Value,[{VI,_}|VIs],Acc,Depth) -> value_match1(Value,VIs,Acc++lists:concat(["element(",VI,","]),Depth+1). - -is_optimized(per) -> true; -is_optimized(uper) -> false. diff --git a/lib/asn1/src/asn1ct_eval_per.funcs b/lib/asn1/src/asn1ct_eval_per.funcs deleted file mode 100644 index a1ea5cd043..0000000000 --- a/lib/asn1/src/asn1ct_eval_per.funcs +++ /dev/null @@ -1,2 +0,0 @@ -{per,encode_constrained_number,2}. -{per,encode_small_number,1}. diff --git a/lib/asn1/src/asn1ct_eval_uper.funcs b/lib/asn1/src/asn1ct_eval_uper.funcs deleted file mode 100644 index 884a486f40..0000000000 --- a/lib/asn1/src/asn1ct_eval_uper.funcs +++ /dev/null @@ -1,2 +0,0 @@ -{uper,encode_constrained_number,2}. -{uper,encode_small_number,1}. diff --git a/lib/asn1/src/asn1ct_func.erl b/lib/asn1/src/asn1ct_func.erl index ab0dbcce8f..dbadedb683 100644 --- a/lib/asn1/src/asn1ct_func.erl +++ b/lib/asn1/src/asn1ct_func.erl @@ -19,7 +19,7 @@ %% -module(asn1ct_func). --export([start_link/0,need/1,call/3,generate/1]). +-export([start_link/0,need/1,call/3,call_gen/3,call_gen/4,generate/1]). -export([init/1,handle_call/3,handle_cast/2,terminate/2]). start_link() -> @@ -28,15 +28,33 @@ start_link() -> ok. call(M, F, Args) -> - MFA = {M,F,length(Args)}, + A = length(Args), + MFA = {M,F,A}, need(MFA), - asn1ct_gen:emit([F,"(",call_args(Args, ""),")"]). + case M of + binary -> + asn1ct_gen:emit(["binary:",F,"(",call_args(Args, ""),")"]); + _ -> + asn1ct_gen:emit([F,"(",call_args(Args, ""),")"]) + end. +need({binary,_,_}) -> + ok; +need({erlang,_,_}) -> + ok; need(MFA) -> asn1ct_rtt:assert_defined(MFA), cast({need,MFA}). +call_gen(Prefix, Key, Gen, Args) when is_function(Gen, 2) -> + F = req({gen_func,Prefix,Key,Gen}), + asn1ct_gen:emit([F,"(",call_args(Args, ""),")"]). + +call_gen(Prefix, Key, Gen) when is_function(Gen, 2) -> + req({gen_func,Prefix,Key,Gen}). + generate(Fd) -> + do_generate(Fd), Used0 = req(get_used), erase(?MODULE), Used = sofs:set(Used0, [mfa]), @@ -53,10 +71,13 @@ cast(Req) -> %%% Internal functions. --record(st, {used}). +-record(st, {used, %Used functions + gen, %Dynamically generated functions + gc=1 %Counter for generated functions + }). init([]) -> - St = #st{used=gb_sets:empty()}, + St = #st{used=gb_sets:empty(),gen=gb_trees:empty()}, {ok,St}. handle_cast({need,MFA}, #st{used=Used0}=St) -> @@ -69,7 +90,20 @@ handle_cast({need,MFA}, #st{used=Used0}=St) -> end. handle_call(get_used, _From, #st{used=Used}=St) -> - {stop,normal,gb_sets:to_list(Used),St}. + {stop,normal,gb_sets:to_list(Used),St}; +handle_call(get_gen, _From, #st{gen=G0}=St) -> + {L,G} = do_get_gen(gb_trees:to_list(G0), [], []), + {reply,L,St#st{gen=gb_trees:from_orddict(G)}}; +handle_call({gen_func,Prefix,Key,GenFun}, _From, #st{gen=G0,gc=Gc0}=St) -> + case gb_trees:lookup(Key, G0) of + none -> + Name = list_to_atom(Prefix ++ integer_to_list(Gc0)), + Gc = Gc0 + 1, + G = gb_trees:insert(Key, {Name,GenFun}, G0), + {reply,Name,St#st{gen=G,gc=Gc}}; + {value,{Name,_}} -> + {reply,Name,St} + end. terminate(_, _) -> ok. @@ -98,3 +132,22 @@ update_worklist([H|T], Used, Ws) -> update_worklist(T, Used, Ws) end; update_worklist([], _, Ws) -> Ws. + +do_get_gen([{_,{_,done}}=Keep|T], Gacc, Kacc) -> + do_get_gen(T, Gacc, [Keep|Kacc]); +do_get_gen([{K,{Name,_}=V}|T], Gacc, Kacc) -> + do_get_gen(T, [V|Gacc], [{K,{Name,done}}|Kacc]); +do_get_gen([], Gacc, Kacc) -> + {lists:sort(Gacc),lists:reverse(Kacc)}. + +do_generate(Fd) -> + case req(get_gen) of + [] -> + ok; + [_|_]=Gen -> + _ = [begin + ok = file:write(Fd, "\n"), + GenFun(Fd, Name) + end || {Name,GenFun} <- Gen], + do_generate(Fd) + end. diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl index 9095e145a3..e6ec0cb12b 100644 --- a/lib/asn1/src/asn1ct_gen.erl +++ b/lib/asn1/src/asn1ct_gen.erl @@ -798,7 +798,12 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) -> gen_exports1(Types,"enc_",1) end, emit({"-export([",nl}), - gen_exports1(Types,"dec_",2) + case Erules of + ber -> + gen_exports1(Types, "dec_", 2); + _ -> + gen_exports1(Types, "dec_", 1) + end end, case [X || {n2n,X} <- get(encoding_options)] of [] -> ok; @@ -819,10 +824,7 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) -> _ -> case erule(Erules) of per -> - emit({"-export([",nl}), - gen_exports1(Objects,"enc_",3), - emit({"-export([",nl}), - gen_exports1(Objects,"dec_",4); + ok; ber -> emit({"-export([",nl}), gen_exports1(Objects,"enc_",3), @@ -833,10 +835,15 @@ pgen_exports(Erules,_Module,{Types,Values,_,_,Objects,ObjectSets}) -> case ObjectSets of [] -> ok; _ -> - emit({"-export([",nl}), - gen_exports1(ObjectSets,"getenc_",2), - emit({"-export([",nl}), - gen_exports1(ObjectSets,"getdec_",2) + case erule(Erules) of + per -> + ok; + ber -> + emit({"-export([",nl}), + gen_exports1(ObjectSets, "getenc_",1), + emit({"-export([",nl}), + gen_exports1(ObjectSets, "getdec_",1) + end end, emit({"-export([info/0]).",nl}), gen_partial_inc_decode_exports(), @@ -916,15 +923,23 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) -> {["complete(encode_disp(Type, Data))"],"Bytes"} end, emit(["encode(Type,Data) ->",nl, - "case catch ",Call," of",nl, - " {'EXIT',{error,Reason}} ->",nl, - " {error,Reason};",nl, - " {'EXIT',Reason} ->",nl, - " {error,{asn1,Reason}};",nl, - " {Bytes,_Len} ->",nl, - " {ok,",BytesAsBinary,"};",nl, - " Bytes ->",nl, - " {ok,",BytesAsBinary,"}",nl, + "try ",Call," of",nl, + case erule(Erules) of + ber -> + [" {Bytes,_Len} ->",nl, + " {ok,",BytesAsBinary,"}",nl]; + per -> + [" Bytes ->",nl, + " {ok,",BytesAsBinary,"}",nl] + end, + " catch",nl, + " Class:Exception when Class =:= error; Class =:= exit ->",nl, + " case Exception of",nl, + " {error,Reason}=Error ->",nl, + " Error;",nl, + " Reason ->",nl, + " {error,{asn1,Reason}}",nl, + " end",nl, "end.",nl,nl]), Return_rest = lists:member(undec_rest,get(encoding_options)), @@ -999,7 +1014,7 @@ pgen_dispatcher(Erules,_Module,{Types,_Values,_,_,_Objects,_ObjectSets}) -> gen_partial_inc_dispatcher(); _PerOrPer_bin -> gen_dispatcher(Types,"encode_disp","enc_",""), - gen_dispatcher(Types,"decode_disp","dec_",",mandatory") + gen_dispatcher(Types,"decode_disp","dec_","") end, emit([nl]), emit({nl,nl}). diff --git a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl index 8ab49aec2c..de81259fcb 100644 --- a/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl +++ b/lib/asn1/src/asn1ct_gen_ber_bin_v2.erl @@ -196,8 +196,16 @@ gen_encode_prim(_Erules, #type{}=D, DoTag, Value) -> emit(["case ",Value," of",nl]), emit_enc_enumerated_cases(NamedNumberList,DoTag); 'REAL' -> - emit([{call,ber,encode_tags, - [DoTag,{call,real_common,ber_encode_real,[Value]}]}]); + asn1ct_name:new(realval), + asn1ct_name:new(realsize), + emit(["begin",nl, + {curr,realval}," = ", + {call,real_common,ber_encode_real,[Value]},com,nl, + {curr,realsize}," = ", + {call,erlang,byte_size,[{curr,realval}]},com,nl, + {call,ber,encode_tags, + [DoTag,{curr,realval},{curr,realsize}]},nl, + "end"]); {'BIT STRING',NamedNumberList} -> call(encode_bit_string, [{asis,BitStringConstraint},Value, @@ -637,9 +645,6 @@ gen_encode_objectfields(ClassName,[{typefield,Name,OptOrMand}|Rest], % ", Val, RestPrimFieldName) ->",nl]), MaybeConstr= case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> %% this case is illegal - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); {false,'OPTIONAL'} -> EmitFuncClause("Val"), emit([" {Val,0}"]), @@ -672,9 +677,6 @@ gen_encode_objectfields(ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest], % emit(["'enc_",ObjName,"'(",{asis,Name}, % ", Val,[H|T]) ->",nl]), case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); {false,'OPTIONAL'} -> EmitFuncClause("_,_"), emit([" exit({error,{'use of missing field in object', ",{asis,Name}, @@ -807,9 +809,6 @@ gen_decode_objectfields(ClassName,[{typefield,Name,OptOrMand}|Rest], % ", Bytes, RestPrimFieldName) ->",nl]), MaybeConstr= case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> %% this case is illegal - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); {false,'OPTIONAL'} -> EmitFuncClause(" Bytes"), emit([" Bytes"]), @@ -844,9 +843,6 @@ gen_decode_objectfields(ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest], % ", Bytes,[H|T]) ->",nl]), % emit_tlv_format("Bytes"), case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); {false,'OPTIONAL'} -> EmitFuncClause("_,_"), emit([" exit({error,{'illegal use of missing field in object', ",{asis,Name}, @@ -1072,8 +1068,7 @@ gen_objset_enc(_,_,{unique,undefined},_,_,_,_,_) -> gen_objset_enc(Erules, ObjSetName, UniqueName, [{ObjName,Val,Fields}|T], ClName, ClFields, NthObj,Acc)-> - emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},",",{asis,Val}, - ") ->",nl]), + emit(["'getenc_",ObjSetName,"'(",{asis,Val},") ->",nl]), CurrMod = get(currmod), {InternalFunc,NewNthObj}= case ObjName of @@ -1095,7 +1090,7 @@ gen_objset_enc(Erules, ObjSetName, UniqueName, %% See X.681 Annex E for the following case gen_objset_enc(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName, _ClFields,_NthObj,Acc) -> - emit({"'getenc_",ObjSetName,"'(_, _) ->",nl}), + emit(["'getenc_",ObjSetName,"'(_) ->",nl]), emit({indent(3),"fun(_, Val, _RestPrimFieldName) ->",nl}), emit({indent(6),"Len = case Val of",nl,indent(9), "Bin when is_binary(Bin) -> byte_size(Bin);",nl,indent(9), @@ -1113,7 +1108,7 @@ emit_ext_fun(EncDec,ModuleName,Name) -> Name,"'(T,V,O) end"]). emit_default_getenc(ObjSetName,UniqueName) -> - emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]), + emit(["'getenc_",ObjSetName,"'(ErrV) ->",nl]), emit([indent(3),"fun(C,V,_) -> exit({'Type not compatible with table constraint',{component,C},{value,V}, {unique_name_and_value,",{asis,UniqueName},", ErrV}}) end"]). %% gen_inlined_enc_funs for each object iterates over all fields of a @@ -1240,8 +1235,7 @@ gen_objset_dec(_,_,{unique,undefined},_,_,_,_) -> ok; gen_objset_dec(Erules, ObjSName, UniqueName, [{ObjName,Val,Fields}|T], ClName, ClFields, NthObj)-> - emit(["'getdec_",ObjSName,"'(",{asis,UniqueName},",", - {asis,Val},") ->",nl]), + emit(["'getdec_",ObjSName,"'(",{asis,Val},") ->",nl]), CurrMod = get(currmod), NewNthObj= case ObjName of @@ -1262,7 +1256,7 @@ gen_objset_dec(Erules, ObjSName, UniqueName, [{ObjName,Val,Fields}|T], ClFields, NewNthObj); gen_objset_dec(_,ObjSetName,_UniqueName,['EXTENSIONMARK'],_ClName, _ClFields,_NthObj) -> - emit(["'getdec_",ObjSetName,"'(_, _) ->",nl]), + emit(["'getdec_",ObjSetName,"'(_) ->",nl]), emit([indent(2),"fun(_,Bytes, _RestPrimFieldName) ->",nl]), emit([indent(4),"case Bytes of",nl, @@ -1279,7 +1273,7 @@ gen_objset_dec(_, ObjSetName, UniqueName, [], _, _, _) -> ok. emit_default_getdec(ObjSetName,UniqueName) -> - emit(["'getdec_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]), + emit(["'getdec_",ObjSetName,"'(ErrV) ->",nl]), emit([indent(2), "fun(C,V,_) -> exit({{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},", ErrV}}) end"]). gen_inlined_dec_funs(Fields, ClFields, ObjSetName, NthObj) -> diff --git a/lib/asn1/src/asn1ct_gen_per.erl b/lib/asn1/src/asn1ct_gen_per.erl index 69d9d51bf1..8b999ddbf0 100644 --- a/lib/asn1/src/asn1ct_gen_per.erl +++ b/lib/asn1/src/asn1ct_gen_per.erl @@ -26,7 +26,7 @@ %-compile(export_all). -export([gen_dec_imm/2]). --export([gen_dec_prim/3,gen_encode_prim/3]). +-export([gen_dec_prim/3,gen_encode_prim_imm/3]). -export([gen_obj_code/3,gen_objectset_code/2]). -export([gen_decode/2, gen_decode/3]). -export([gen_encode/2, gen_encode/3]). @@ -102,832 +102,106 @@ gen_encode_prim(Erules, D) -> Value = asn1ct_gen:mk_var(asn1ct_name:curr(val)), gen_encode_prim(Erules, D, Value). -gen_encode_prim(Erules, #type{def={'ENUMERATED',{N1,N2}}}, Value) -> - NewList = [{0,X} || {X,_} <- N1] ++ ['EXT_MARK'] ++ - [{1,X} || {X,_} <- N2], - NewC = {0,length(N1)-1}, - emit(["case ",Value," of",nl]), - emit_enc_enumerated_cases(Erules, NewC, NewList, 0); -gen_encode_prim(Erules, #type{def={'ENUMERATED',NNL}}, Value) -> - NewList = [X || {X,_} <- NNL], - NewC = {0,length(NewList)-1}, - emit(["case ",Value," of",nl]), - emit_enc_enumerated_cases(Erules, NewC, NewList, 0); -gen_encode_prim(per=Erules, D, Value) -> - asn1ct_gen_per_rt2ct:gen_encode_prim(Erules, D, Value); gen_encode_prim(Erules, #type{}=D, Value) -> - Constraint = D#type.constraint, - SizeConstr = asn1ct_imm:effective_constraint(bitstring, Constraint), - Pa = case lists:keyfind('PermittedAlphabet', 1, Constraint) of - false -> no; - {_,Pa0} -> Pa0 - end, - case D#type.def of + Aligned = case Erules of + uper -> false; + per -> true + end, + Imm = gen_encode_prim_imm(Value, D, Aligned), + asn1ct_imm:enc_cg(Imm, Aligned). + +gen_encode_prim_imm(Val, #type{def=Type0,constraint=Constraint}, Aligned) -> + case simplify_type(Type0) of + k_m_string -> + Type = case Type0 of + 'GeneralizedTime' -> 'VisibleString'; + 'UTCTime' -> 'VisibleString'; + _ -> Type0 + end, + asn1ct_imm:per_enc_k_m_string(Val, Type, Constraint, Aligned); + restricted_string -> + ToBinary = {erlang,iolist_to_binary}, + asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned); + {'ENUMERATED',NNL} -> + asn1ct_imm:per_enc_enumerated(Val, NNL, Aligned); 'INTEGER' -> - Args = [{asis,asn1ct_imm:effective_constraint(integer,Constraint)}, - Value], - call(Erules, encode_integer, Args); - {'INTEGER',NamedNumberList} -> - Args = [{asis,asn1ct_imm:effective_constraint(integer,Constraint)}, - Value,{asis,NamedNumberList}], - call(Erules, encode_integer, Args); + asn1ct_imm:per_enc_integer(Val, Constraint, Aligned); + {'INTEGER',NNL} -> + asn1ct_imm:per_enc_integer(Val, NNL, Constraint, Aligned); 'REAL' -> - emit_enc_real(Erules, Value); - - {'BIT STRING',NamedNumberList} -> - call(Erules, encode_bit_string, - [{asis,SizeConstr},Value, - {asis,NamedNumberList}]); + ToBinary = {real_common,encode_real}, + asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned); + {'BIT STRING',NNL} -> + asn1ct_imm:per_enc_bit_string(Val, NNL, Constraint, Aligned); 'NULL' -> - emit("[]"); + asn1ct_imm:per_enc_null(Val, Aligned); 'OBJECT IDENTIFIER' -> - call(Erules, encode_object_identifier, [Value]); + ToBinary = {per_common,encode_oid}, + asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned); 'RELATIVE-OID' -> - call(Erules, encode_relative_oid, [Value]); - 'ObjectDescriptor' -> - call(Erules, encode_ObjectDescriptor, - [{asis,Constraint},Value]); + ToBinary = {per_common,encode_relative_oid}, + asn1ct_imm:per_enc_restricted_string(Val, ToBinary, Aligned); 'BOOLEAN' -> - call(Erules, encode_boolean, [Value]); + asn1ct_imm:per_enc_boolean(Val, Aligned); 'OCTET STRING' -> - case SizeConstr of - 0 -> - emit("[]"); - no -> - call(Erules, encode_octet_string, [Value]); - C -> - call(Erules, encode_octet_string, [{asis,C},Value]) - end; - 'NumericString' -> - call(Erules, encode_NumericString, [{asis,SizeConstr}, - {asis,Pa},Value]); - TString when TString == 'TeletexString'; - TString == 'T61String' -> - call(Erules, encode_TeletexString, [{asis,Constraint},Value]); - 'VideotexString' -> - call(Erules, encode_VideotexString, [{asis,Constraint},Value]); - 'UTCTime' -> - call(Erules, encode_VisibleString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'GeneralizedTime' -> - call(Erules, encode_VisibleString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'GraphicString' -> - call(Erules, encode_GraphicString, [{asis,Constraint},Value]); - 'VisibleString' -> - call(Erules, encode_VisibleString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'GeneralString' -> - call(Erules, encode_GeneralString, [{asis,Constraint},Value]); - 'PrintableString' -> - call(Erules, encode_PrintableString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'IA5String' -> - call(Erules, encode_IA5String, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'BMPString' -> - call(Erules, encode_BMPString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'UniversalString' -> - call(Erules, encode_UniversalString, [{asis,SizeConstr}, - {asis,Pa},Value]); - 'UTF8String' -> - call(Erules, encode_UTF8String, [Value]); + asn1ct_imm:per_enc_octet_string(Val, Constraint, Aligned); 'ASN1_OPEN_TYPE' -> - NewValue = case Constraint of - [#'Externaltypereference'{type=Tname}] -> - asn1ct_func:need({Erules,complete,1}), - io_lib:format( - "complete(enc_~s(~s))",[Tname,Value]); - [#type{def=#'Externaltypereference'{type=Tname}}] -> - asn1ct_func:need({Erules,complete,1}), - io_lib:format( - "complete(enc_~s(~s))", - [Tname,Value]); - _ -> - io_lib:format("iolist_to_binary(~s)", - [Value]) - end, - call(Erules, encode_open_type, [NewValue]) - end. - -emit_enc_real(Erules, Real) -> - asn1ct_name:new(tmpval), - asn1ct_name:new(tmplen), - emit(["begin",nl, - "{",{curr,tmpval},com,{curr,tmplen},"} = ", - {call,real_common,encode_real,[Real]},com,nl, - "[",{call,Erules,encode_length,[{curr,tmplen}]},",", - {curr,tmpval},"]",nl, - "end"]). - -emit_enc_enumerated_cases(Erules, C, ['EXT_MARK'|T], _Count) -> - %% Reset enumeration counter. - emit_enc_enumerated_cases(Erules, C, T, 0); -emit_enc_enumerated_cases(Erules, C, [H|T], Count) -> - emit_enc_enumerated_case(Erules, C, H, Count), - emit([";",nl]), - emit_enc_enumerated_cases(Erules, C, T, Count+1); -emit_enc_enumerated_cases(_Erules, _, [], _Count) -> - emit(["EnumVal -> " - "exit({error,{asn1,{enumerated_not_in_range, EnumVal}}})",nl, - "end"]). - -emit_enc_enumerated_case(Erules, C, {0,EnumName}, Count) -> - %% ENUMERATED with extensionmark; the value lies within then extension root - Enc = enc_ext_and_val(Erules, 0, encode_constrained_number, [C,Count]), - emit(["'",EnumName,"' -> ",{asis,Enc}]); -emit_enc_enumerated_case(Erules, _C, {1,EnumName}, Count) -> - %% ENUMERATED with extensionmark; the value is higher than extension root - Enc = enc_ext_and_val(Erules, 1, encode_small_number, [Count]), - emit(["'",EnumName,"' -> ",{asis,Enc}]); -emit_enc_enumerated_case(Erules, C, EnumName, Count) -> - %% ENUMERATED without extension - EvalMod = eval_module(Erules), - emit(["'",EnumName,"' -> ", - {asis,EvalMod:encode_constrained_number(C, Count)}]). - -enc_ext_and_val(per, E, F, Args) -> - [E|apply(asn1ct_eval_per, F, Args)]; -enc_ext_and_val(uper, E, F, Args) -> - Bs = list_to_bitstring([apply(asn1ct_eval_uper, F, Args)]), - <<E:1,Bs/bitstring>>. - - -%% Object code generating for encoding and decoding -%% ------------------------------------------------ - -gen_obj_code(Erules,_Module,Obj) when is_record(Obj,typedef) -> - ObjName = Obj#typedef.name, - Def = Obj#typedef.typespec, - #'Externaltypereference'{module=Mod,type=ClassName} = - Def#'Object'.classname, - Class = asn1_db:dbget(Mod,ClassName), - {object,_,Fields} = Def#'Object'.def, - emit({nl,nl,nl,"%%================================"}), - emit({nl,"%% ",ObjName}), - emit({nl,"%%================================",nl}), - EncConstructed = - gen_encode_objectfields(Erules, ClassName,get_class_fields(Class), - ObjName,Fields,[]), - emit(nl), - gen_encode_constr_type(Erules,EncConstructed), - emit(nl), - DecConstructed = - gen_decode_objectfields(Erules, ClassName, get_class_fields(Class), - ObjName, Fields, []), - emit(nl), - gen_decode_constr_type(Erules,DecConstructed), - emit(nl). - - -gen_encode_objectfields(Erule, ClassName, - [{typefield,Name,OptOrMand}|Rest], - ObjName, ObjectFields, ConstrAcc) -> - EmitFuncClause = - fun(V) -> - emit(["'enc_",ObjName,"'(",{asis,Name}, - ",",V,",_RestPrimFieldName) ->",nl]) - end, -% emit(["'enc_",ObjName,"'(",{asis,Name}, -% ", Val, _RestPrimFieldName) ->",nl]), - MaybeConstr = - case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> %% this case is illegal - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); - {false,'OPTIONAL'} -> - EmitFuncClause("Val"), - case Erule of - uper -> - emit(" Val"); - per -> - emit([" if",nl, - " is_list(Val) ->",nl, - " NewVal = list_to_binary(Val),",nl, - " [20,byte_size(NewVal),NewVal];",nl, - " is_binary(Val) ->",nl, - " [20,byte_size(Val),Val]",nl, - " end"]) - end, - []; - {false,{'DEFAULT',DefaultType}} -> - EmitFuncClause("Val"), - gen_encode_default_call(Erule, ClassName, Name, DefaultType); - {{Name,TypeSpec},_} -> - %% A specified field owerwrites any 'DEFAULT' or - %% 'OPTIONAL' field in the class - EmitFuncClause("Val"), - gen_encode_field_call(Erule, ObjName, Name, TypeSpec) - end, - case more_genfields(Rest) of - true -> - emit([";",nl]); - false -> - emit([".",nl]) - end, - gen_encode_objectfields(Erule,ClassName,Rest,ObjName,ObjectFields, - MaybeConstr++ConstrAcc); -gen_encode_objectfields(Erule,ClassName,[{objectfield,Name,_,_,OptOrMand}|Rest], - ObjName,ObjectFields,ConstrAcc) -> - CurrentMod = get(currmod), - EmitFuncClause = - fun(Attrs) -> - emit(["'enc_",ObjName,"'(",{asis,Name}, - ",",Attrs,") ->",nl]) - end, -% emit(["'enc_",ObjName,"'(",{asis,Name}, -% ", Val,[H|T]) ->",nl]), - case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); - {false,'OPTIONAL'} -> - EmitFuncClause("_,_"), - emit([" exit({error,{'use of missing field in object', ",{asis,Name}, - "}})"]); - {false,{'DEFAULT',_DefaultObject}} -> - exit({error,{asn1,{"not implemented yet",Name}}}); - {{Name,#'Externalvaluereference'{module=CurrentMod, - value=TypeName}},_} -> - EmitFuncClause(" Val, [H|T]"), - emit({indent(3),"'enc_",TypeName,"'(H, Val, T)"}); - {{Name,#'Externalvaluereference'{module=M,value=TypeName}},_} -> - EmitFuncClause(" Val, [H|T]"), - emit({indent(3),"'",M,"':'enc_",TypeName,"'(H, Val, T)"}); - {{Name,TypeSpec},_} -> - EmitFuncClause("Val,[H|T]"), - case TypeSpec#typedef.name of - {ExtMod,TypeName} -> - emit({indent(3),"'",ExtMod,"':'enc_",TypeName, - "'(H, Val, T)"}); - TypeName -> - emit({indent(3),"'enc_",TypeName,"'(H, Val, T)"}) + case Constraint of + [#'Externaltypereference'{type=Tname}] -> + EncFunc = enc_func(Tname), + Imm = [{apply,EncFunc,[{expr,Val}]}], + asn1ct_imm:per_enc_open_type(Imm, Aligned); + [] -> + Imm = [{call,erlang,iolist_to_binary,[{expr,Val}]}], + asn1ct_imm:per_enc_open_type(Imm, Aligned) end - end, - case more_genfields(Rest) of - true -> - emit([";",nl]); - false -> - emit([".",nl]) - end, - gen_encode_objectfields(Erule,ClassName,Rest,ObjName,ObjectFields,ConstrAcc); -gen_encode_objectfields(Erule,ClassName,[_C|Cs],O,OF,Acc) -> - gen_encode_objectfields(Erule,ClassName,Cs,O,OF,Acc); -gen_encode_objectfields(_, _,[],_,_,Acc) -> - Acc. - - -gen_encode_constr_type(Erules,[TypeDef|Rest]) when is_record(TypeDef,typedef) -> - case is_already_generated(enc,TypeDef#typedef.name) of - true -> ok; - _ -> -%% FuncName = list_to_atom(lists:concat(["enc_",TypeDef#typedef.name])), - FuncName = asn1ct_gen:list2rname(TypeDef#typedef.name ++ [enc]), - emit(["'",FuncName,"'(Val) ->",nl]), - Def = TypeDef#typedef.typespec, - InnerType = asn1ct_gen:get_inner(Def#type.def), - asn1ct_gen:gen_encode_constructed(Erules,TypeDef#typedef.name, - InnerType,Def), - gen_encode_constr_type(Erules,Rest) - end; -gen_encode_constr_type(_,[]) -> - ok. - -gen_encode_field_call(_Erules, _ObjName, _FieldName, - #'Externaltypereference'{module=M,type=T}) -> - CurrentMod = get(currmod), - if - M == CurrentMod -> - emit({" 'enc_",T,"'(Val)"}), - []; - true -> - emit({" '",M,"':'enc_",T,"'(Val)"}), - [] - end; -gen_encode_field_call(Erules, ObjName, FieldName, Type) -> - Def = Type#typedef.typespec, - case Type#typedef.name of - {primitive,bif} -> - gen_encode_prim(Erules, Def, "Val"), - []; - {constructed,bif} -> - emit({" 'enc_",ObjName,'_',FieldName, - "'(Val)"}), -%% [Type#typedef{name=list_to_atom(lists:concat([ObjName,'_',FieldName]))}]; - [Type#typedef{name=[FieldName,ObjName]}]; - {ExtMod,TypeName} -> - emit({" '",ExtMod,"':'enc_",TypeName, - "'(Val)"}), - []; - TypeName -> - emit({" 'enc_",TypeName,"'(Val)"}), - [] end. -gen_encode_default_call(Erules, ClassName, FieldName, Type) -> - CurrentMod = get(currmod), - InnerType = asn1ct_gen:get_inner(Type#type.def), - case asn1ct_gen:type(InnerType) of - {constructed,bif} -> -%% asn1ct_gen:gen_encode_constructed(Erules,Typename,InnerType,Type); - emit([" 'enc_",ClassName,'_',FieldName,"'(Val)"]), -%% [#typedef{name=list_to_atom(lists:concat([ClassName,'_',FieldName])), - [#typedef{name=[FieldName,ClassName], - typespec=Type}]; - {primitive,bif} -> - gen_encode_prim(Erules, Type, "Val"), - []; - #'Externaltypereference'{module=CurrentMod,type=Etype} -> - emit([" 'enc_",Etype,"'(Val)",nl]), - []; - #'Externaltypereference'{module=Emod,type=Etype} -> - emit([" '",Emod,"':'enc_",Etype,"'(Val)",nl]), - [] - end. - - -gen_decode_objectfields(Erules, ClassName, - [{typefield,Name,OptOrMand}|Rest], - ObjName, ObjectFields, ConstrAcc) -> - EmitFuncClause = - fun(Bytes) -> - emit(["'dec_",ObjName,"'(",{asis,Name},",",Bytes, - ",_,_RestPrimFieldName) ->",nl]) - end, - MaybeConstr= - case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> %% this case is illegal - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); - {false,'OPTIONAL'} -> - EmitFuncClause("Bytes"), - emit([" {Bytes,[]}"]), - []; - {false,{'DEFAULT',DefaultType}} -> - EmitFuncClause("Bytes"), - gen_decode_default_call(Erules, ClassName, Name, "Bytes", - DefaultType); - {{Name,TypeSpec},_} -> - %% A specified field owerwrites any 'DEFAULT' or - %% 'OPTIONAL' field in the class - EmitFuncClause("Bytes"), - gen_decode_field_call(Erules, ObjName, Name, "Bytes", TypeSpec) - end, - case more_genfields(Rest) of - true -> - emit([";",nl]); - false -> - emit([".",nl]) - end, - gen_decode_objectfields(Erules, ClassName, Rest, ObjName, - ObjectFields, MaybeConstr++ConstrAcc); -gen_decode_objectfields(Erules, ClassName, - [{objectfield,Name,_,_,OptOrMand}|Rest], - ObjName, ObjectFields, ConstrAcc) -> - CurrentMod = get(currmod), - EmitFuncClause = - fun(Attrs) -> - emit(["'dec_",ObjName,"'(",{asis,Name}, - ",",Attrs,") ->",nl]) - end, -% emit(["'dec_",ObjName,"'(",{asis,Name}, -% ", Bytes,_,[H|T]) ->",nl]), - case {get_object_field(Name,ObjectFields),OptOrMand} of - {false,'MANDATORY'} -> - exit({error,{asn1,{"missing mandatory field in object", - ObjName}}}); - {false,'OPTIONAL'} -> - EmitFuncClause("_,_,_"), - emit([" exit({error,{'illegal use of missing field in object', ",{asis,Name}, - "}})"]); - {false,{'DEFAULT',_DefaultObject}} -> - exit({error,{asn1,{"not implemented yet",Name}}}); - {{Name,#'Externalvaluereference'{module=CurrentMod, - value=TypeName}},_} -> - EmitFuncClause("Bytes,_,[H|T]"), - emit({indent(3),"'dec_",TypeName,"'(H, Bytes, telltype, T)"}); - {{Name,#'Externalvaluereference'{module=M,value=TypeName}},_} -> - EmitFuncClause("Bytes,_,[H|T]"), - emit({indent(3),"'",M,"':'dec_",TypeName, - "'(H, Bytes, telltype, T)"}); - {{Name,TypeSpec},_} -> - EmitFuncClause("Bytes,_,[H|T]"), - case TypeSpec#typedef.name of - {ExtMod,TypeName} -> - emit({indent(3),"'",ExtMod,"':'dec_",TypeName, - "'(H, Bytes, telltype, T)"}); - TypeName -> - emit({indent(3),"'dec_",TypeName,"'(H, Bytes, telltype, T)"}) - end - end, - case more_genfields(Rest) of - true -> - emit([";",nl]); - false -> - emit([".",nl]) - end, - gen_decode_objectfields(Erules, ClassName, Rest, ObjName, - ObjectFields, ConstrAcc); -gen_decode_objectfields(Erules, CN, [_C|Cs], O, OF, CAcc) -> - gen_decode_objectfields(Erules, CN, Cs, O, OF, CAcc); -gen_decode_objectfields(_, _, [], _, _, CAcc) -> - CAcc. - - - -gen_decode_field_call(_Erules, _ObjName, _FieldName, Bytes, - #'Externaltypereference'{}=Etype) -> - emit(" "), - gen_dec_external(Etype, Bytes), - []; -gen_decode_field_call(Erules, ObjName, FieldName, Bytes, Type) -> - Def = Type#typedef.typespec, - case Type#typedef.name of - {primitive,bif} -> - gen_dec_prim(Erules, Def, Bytes), - []; - {constructed,bif} -> - emit({" 'dec_",ObjName,'_',FieldName, - "'(",Bytes,",telltype)"}), -%% [Type#typedef{name=list_to_atom(lists:concat([ObjName,'_',FieldName]))}]; - [Type#typedef{name=[FieldName,ObjName]}]; - {ExtMod,TypeName} -> - emit({" '",ExtMod,"':'dec_",TypeName, - "'(",Bytes,", telltype)"}), - []; - TypeName -> - emit({" 'dec_",TypeName,"'(",Bytes,", telltype)"}), - [] - end. - -gen_decode_default_call(Erules, ClassName, FieldName, Bytes, Type) -> - InnerType = asn1ct_gen:get_inner(Type#type.def), - case asn1ct_gen:type(InnerType) of - {constructed,bif} -> - emit([" 'dec_",ClassName,'_',FieldName,"'(",Bytes,", telltype)"]), -%% [#typedef{name=list_to_atom(lists:concat([ClassName,'_',FieldName])), - [#typedef{name=[FieldName,ClassName], - typespec=Type}]; - {primitive,bif} -> - gen_dec_prim(Erules, Type, Bytes), - []; - #'Externaltypereference'{}=Etype -> - asn1ct_gen_per:gen_dec_external(Etype, Bytes), - [] +dec_func(Tname) -> + list_to_atom(lists:concat(["dec_",Tname])). + +enc_func(Tname) -> + list_to_atom(lists:concat(["enc_",Tname])). + +simplify_type(Type) -> + case Type of + 'BMPString' -> k_m_string; + 'IA5String' -> k_m_string; + 'NumericString' -> k_m_string; + 'PrintableString' -> k_m_string; + 'VisibleString' -> k_m_string; + 'UniversalString' -> k_m_string; + 'GeneralizedTime' -> k_m_string; + 'UTCTime' -> k_m_string; + 'TeletexString' -> restricted_string; + 'T61String' -> restricted_string; + 'VideotexString' -> restricted_string; + 'GraphicString' -> restricted_string; + 'GeneralString' -> restricted_string; + 'UTF8String' -> restricted_string; + 'ObjectDescriptor' -> restricted_string; + Other -> Other end. +%% Object code generating for encoding and decoding +%% ------------------------------------------------ -gen_decode_constr_type(Erules,[TypeDef|Rest]) when is_record(TypeDef,typedef) -> - case is_already_generated(dec,TypeDef#typedef.name) of - true -> ok; - _ -> - gen_decode(Erules,TypeDef#typedef{name=asn1ct_gen:list2rname(TypeDef#typedef.name)}) - end, - gen_decode_constr_type(Erules,Rest); -gen_decode_constr_type(_,[]) -> +gen_obj_code(_Erules, _Module, #typedef{}) -> ok. - -more_genfields([]) -> - false; -more_genfields([Field|Fields]) -> - case element(1,Field) of - typefield -> - true; - objectfield -> - true; - _ -> - more_genfields(Fields) - end. - %% Object Set code generating for encoding and decoding %% ---------------------------------------------------- -gen_objectset_code(Erules,ObjSet) -> - ObjSetName = ObjSet#typedef.name, - Def = ObjSet#typedef.typespec, -%% {ClassName,ClassDef} = Def#'ObjectSet'.class, - #'Externaltypereference'{module=ClassModule, - type=ClassName} = Def#'ObjectSet'.class, - ClassDef = asn1_db:dbget(ClassModule,ClassName), - UniqueFName = Def#'ObjectSet'.uniquefname, - Set = Def#'ObjectSet'.set, - emit({nl,nl,nl,"%%================================"}), - emit({nl,"%% ",ObjSetName}), - emit({nl,"%%================================",nl}), - case ClassName of - {_Module,ExtClassName} -> - gen_objset_code(Erules,ObjSetName,UniqueFName,Set, - ExtClassName,ClassDef); - _ -> - gen_objset_code(Erules,ObjSetName,UniqueFName,Set, - ClassName,ClassDef) - end, - emit(nl). - -gen_objset_code(Erules,ObjSetName,UniqueFName,Set,ClassName,ClassDef)-> - ClassFields = (ClassDef#classdef.typespec)#objectclass.fields, - InternalFuncs= - gen_objset_enc(Erules,ObjSetName,UniqueFName,Set,ClassName,ClassFields,1,[]), - gen_objset_dec(Erules, ObjSetName,UniqueFName,Set,ClassName,ClassFields,1), - gen_internal_funcs(Erules,InternalFuncs). - -%% gen_objset_enc iterates over the objects of the object set -gen_objset_enc(_,_,{unique,undefined},_,_,_,_,_) -> - %% There is no unique field in the class of this object set - %% don't bother about the constraint - []; -gen_objset_enc(Erule, ObjSetName, UniqueName, [{ObjName,Val,Fields}|T], - ClName, ClFields, NthObj, Acc)-> - emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},",",{asis,Val}, - ") ->",nl]), - CurrMod = get(currmod), - {InternalFunc,NewNthObj}= - case ObjName of - {no_mod,no_name} -> - gen_inlined_enc_funs(Erule, Fields, ClFields, - ObjSetName, NthObj); - {CurrMod,Name} -> - emit({" fun 'enc_",Name,"'/3"}), - {[],0}; - {ModName,Name} -> - emit_ext_encfun(ModName,Name), - {[],0}; - _Other -> - emit({" fun 'enc_",ObjName,"'/3"}), - {[],0} - end, - emit({";",nl}), - gen_objset_enc(Erule, ObjSetName, UniqueName, T, ClName, ClFields, - NewNthObj, InternalFunc ++ Acc); -gen_objset_enc(uper, ObjSetName, _UniqueName, ['EXTENSIONMARK'], - _ClName, _ClFields, _NthObj, Acc) -> - emit({"'getenc_",ObjSetName,"'(_, _) ->",nl}), - emit({indent(3),"fun(_, Val, _) ->",nl}), - emit([indent(6),"Val",nl, - indent(3),"end.",nl,nl]), - Acc; -gen_objset_enc(per, ObjSetName, _UniqueName, ['EXTENSIONMARK'], - _ClName, _ClFields, _NthObj, Acc) -> - emit(["'getenc_",ObjSetName,"'(_, _) ->",nl, - indent(3),"fun(_, Val, _) ->",nl, - indent(6),"BinVal = if",nl, - indent(9),"is_list(Val) -> list_to_binary(Val);",nl, - indent(9),"true -> Val",nl, - indent(6),"end,",nl, - indent(6),"Size = byte_size(BinVal),",nl, - indent(6),"if",nl, - indent(9),"Size < 256 ->",nl, - indent(12),"[20,Size,BinVal];",nl, - indent(9),"true ->",nl, - indent(12),"[21,<<Size:16>>,Val]",nl, - indent(6),"end",nl, - indent(3),"end.",nl,nl]), - Acc; -gen_objset_enc(_, ObjSetName, UniqueName, [], _, _, _, Acc) -> - emit_default_getenc(ObjSetName, UniqueName), - emit([".",nl,nl]), - Acc. - -emit_ext_encfun(ModuleName,Name) -> - emit([indent(4),"fun(T,V,O) -> '",ModuleName,"':'enc_", - Name,"'(T,V,O) end"]). - -emit_default_getenc(ObjSetName,UniqueName) -> - emit(["'getenc_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]), - emit([indent(4),"fun(C,V,_) -> exit({'Type not compatible with table constraint',{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},",ErrV}}) end"]). - - -%% gen_inlined_enc_funs for each object iterates over all fields of a -%% class, and for each typefield it checks if the object has that -%% field and emits the proper code. -gen_inlined_enc_funs(Erule, Fields, [{typefield,_,_}|_]=T, - ObjSetName, NthObj) -> - emit([indent(3),"fun(Type, Val, _) ->",nl, - indent(6),"case Type of",nl]), - gen_inlined_enc_funs1(Erule, Fields, T, ObjSetName, [], NthObj, []); -gen_inlined_enc_funs(Erule,Fields,[_H|Rest],ObjSetName,NthObj) -> - gen_inlined_enc_funs(Erule,Fields,Rest,ObjSetName,NthObj); -gen_inlined_enc_funs(_,_,[],_,NthObj) -> - {[],NthObj}. - -gen_inlined_enc_funs1(Erule, Fields, [{typefield,Name,_}|Rest], ObjSetName, - Sep0, NthObj, Acc0) -> - emit(Sep0), - Sep = [";",nl], - CurrentMod = get(currmod), - InternalDefFunName = asn1ct_gen:list2name([NthObj,Name,ObjSetName]), - {Acc,NAdd} = - case lists:keyfind(Name, 1, Fields) of - {_,#type{}=Type} -> - {Ret,N} = emit_inner_of_fun(Erule, Type, InternalDefFunName), - {Ret++Acc0,N}; - {_,#typedef{}=Type} -> - emit([indent(9),{asis,Name}," ->",nl]), - {Ret,N} = emit_inner_of_fun(Erule, Type, InternalDefFunName), - {Ret++Acc0,N}; - {_,#'Externaltypereference'{module=CurrentMod,type=T}} -> - emit([indent(9),{asis,Name}," ->",nl, - indent(12),"'enc_",T,"'(Val)"]), - {Acc0,0}; - {_,#'Externaltypereference'{module=M,type=T}} -> - emit([indent(9),{asis,Name}," ->",nl, - indent(12),"'",M,"'",":'enc_",T,"'(Val)"]), - {Acc0,0}; - false when Erule =:= uper -> - emit([indent(9),{asis,Name}," ->",nl, - indent(12),"Val",nl]), - {Acc0,0}; - false when Erule =:= per -> - emit([indent(9),{asis,Name}," ->",nl, - indent(12),"Size = case Val of",nl, - indent(15),"B when is_binary(B) -> size(B);",nl, - indent(15),"_ -> length(Val)",nl, - indent(12),"end,",nl, - indent(12),"if",nl, - indent(15),"Size < 256 -> [20,Size,Val];",nl, - indent(15),"true -> [21,<<Size:16>>,Val]",nl, - indent(12),"end"]), - {Acc0,0} - end, - gen_inlined_enc_funs1(Erule, Fields, Rest, ObjSetName, Sep, - NthObj+NAdd, Acc); -gen_inlined_enc_funs1(Erule, Fields, [_|T], ObjSetName, Sep, NthObj, Acc)-> - gen_inlined_enc_funs1(Erule, Fields, T, ObjSetName, Sep, NthObj, Acc); -gen_inlined_enc_funs1(_, _, [], _, _, NthObj, Acc) -> - emit([nl,indent(6),"end",nl, - indent(3),"end"]), - {Acc,NthObj}. - -emit_inner_of_fun(Erule, #typedef{name={ExtMod,Name},typespec=Type}=TDef, - InternalDefFunName) -> - case {ExtMod,Name} of - {primitive,bif} -> - emit(indent(12)), - gen_encode_prim(Erule, Type, "Val"), - {[],0}; - {constructed,bif} -> - emit([indent(12),"'enc_", - InternalDefFunName,"'(Val)"]), - {[TDef#typedef{name=InternalDefFunName}],1}; - _ -> - emit({indent(12),"'",ExtMod,"':'enc_",Name,"'(Val)"}), - {[],0} - end; -emit_inner_of_fun(_Erule, #typedef{name=Name}, _) -> - emit({indent(12),"'enc_",Name,"'(Val)"}), - {[],0}; -emit_inner_of_fun(Erule, #type{}=Type, _) -> - CurrMod = get(currmod), - case Type#type.def of - Def when is_atom(Def) -> - emit({indent(9),Def," ->",nl,indent(12)}), - gen_encode_prim(Erule, Type, "Val"); - #'Externaltypereference'{module=CurrMod,type=T} -> - emit({indent(9),T," ->",nl,indent(12),"'enc_",T,"'(Val)"}); - #'Externaltypereference'{module=ExtMod,type=T} -> - emit({indent(9),T," ->",nl,indent(12),ExtMod,":'enc_", - T,"'(Val)"}) - end, - {[],0}. - -indent(N) -> - lists:duplicate(N,32). % 32 = space - - -gen_objset_dec(_, _, {unique,undefined}, _, _, _, _) -> - %% There is no unique field in the class of this object set - %% don't bother about the constraint - ok; -gen_objset_dec(Erule, ObjSName, UniqueName, [{ObjName,Val,Fields}|T], ClName, - ClFields, NthObj)-> - emit({"'getdec_",ObjSName,"'(",{asis,UniqueName},",",{asis,Val}, - ") ->",nl}), - CurrMod = get(currmod), - NewNthObj= - case ObjName of - {no_mod,no_name} -> - gen_inlined_dec_funs(Erule, Fields, ClFields, - ObjSName, NthObj); - {CurrMod,Name} -> - emit([" fun 'dec_",Name,"'/4"]), - NthObj; - {ModName,Name} -> - emit_ext_decfun(ModName,Name), - NthObj; - _Other -> - emit({" fun 'dec_",ObjName,"'/4"}), - NthObj - end, - emit({";",nl}), - gen_objset_dec(Erule, ObjSName, UniqueName, T, ClName, ClFields, NewNthObj); -gen_objset_dec(_Erule, ObjSetName, _UniqueName, ['EXTENSIONMARK'], - _ClName, _ClFields, _NthObj) -> - emit({"'getdec_",ObjSetName,"'(_, _) ->",nl}), - emit({indent(3),"fun(Attr1, Bytes, _,_) ->",nl}), - emit({indent(6),"{Bytes,Attr1}",nl}), - emit({indent(3),"end.",nl,nl}), - ok; -gen_objset_dec(_Erule, ObjSetName, UniqueName, [], _, _, _) -> - emit_default_getdec(ObjSetName, UniqueName), - emit([".",nl,nl]), +gen_objectset_code(_Erules, _ObjSet) -> ok. -emit_ext_decfun(ModuleName,Name) -> - emit([indent(3),"fun(T,V,O1,O2) -> '",ModuleName,"':'dec_", - Name,"'(T,V,O1,O2) end"]). - -emit_default_getdec(ObjSetName,UniqueName) -> - emit(["'getdec_",ObjSetName,"'(",{asis,UniqueName},", ErrV) ->",nl]), - emit([indent(2), "fun(C,V,_,_) -> exit({{component,C},{value,V},{unique_name_and_value,",{asis,UniqueName},",ErrV}}) end"]). - - -gen_inlined_dec_funs(Erule, Fields, List, ObjSetName, NthObj0) -> - emit([indent(3),"fun(Type, Val, _, _) ->",nl, - indent(6),"case Type of",nl]), - NthObj = gen_inlined_dec_funs1(Erule, Fields, List, - ObjSetName, "", NthObj0), - emit([nl,indent(6),"end",nl, - indent(3),"end"]), - NthObj. - -gen_inlined_dec_funs1(Erule, Fields, [{typefield,Name,_}|Rest], - ObjSetName, Sep0, NthObj) -> - InternalDefFunName = [NthObj,Name,ObjSetName], - emit(Sep0), - Sep = [";",nl], - N = case lists:keyfind(Name, 1, Fields) of - {_,#type{}=Type} -> - emit_inner_of_decfun(Erule, Type, InternalDefFunName); - {_,#typedef{}=Type} -> - emit([indent(9),{asis,Name}," ->",nl]), - emit_inner_of_decfun(Erule, Type, InternalDefFunName); - {_,#'Externaltypereference'{}=Etype} -> - emit([indent(9),{asis,Name}," ->",nl, - indent(12)]), - gen_dec_external(Etype, "Val"), - 0; - false -> - emit([indent(9),{asis,Name}," -> {Val,Type}"]), - 0 - end, - gen_inlined_dec_funs1(Erule, Fields, Rest, ObjSetName, Sep, NthObj+N); -gen_inlined_dec_funs1(Erule, Fields, [_|Rest], ObjSetName, Sep, NthObj) -> - gen_inlined_dec_funs1(Erule, Fields, Rest, ObjSetName, Sep, NthObj); -gen_inlined_dec_funs1(_, _, [], _, _, NthObj) -> NthObj. - -emit_inner_of_decfun(Erule, #typedef{name={ExtName,Name},typespec=Type}, - InternalDefFunName) -> - case {ExtName,Name} of - {primitive,bif} -> - emit(indent(12)), - gen_dec_prim(Erule, Type, "Val"), - 0; - {constructed,bif} -> - emit({indent(12),"'dec_", - asn1ct_gen:list2name(InternalDefFunName),"'(Val)"}), - 1; - _ -> - emit({indent(12),"'",ExtName,"':'dec_",Name,"'(Val, telltype)"}), - 0 - end; -emit_inner_of_decfun(_Erule, #typedef{name=Name}, _) -> - emit({indent(12),"'dec_",Name,"'(Val, telltype)"}), - 0; -emit_inner_of_decfun(Erule, #type{}=Type, _) -> - CurrMod = get(currmod), - case Type#type.def of - Def when is_atom(Def) -> - emit({indent(9),Def," ->",nl,indent(12)}), - gen_dec_prim(Erule, Type, "Val"); - #'Externaltypereference'{module=CurrMod,type=T} -> - emit({indent(9),T," ->",nl,indent(12),"'dec_",T,"'(Val)"}); - #'Externaltypereference'{module=ExtMod,type=T} -> - emit({indent(9),T," ->",nl,indent(12),ExtMod,":'dec_", - T,"'(Val)"}) - end, - 0. - - -gen_internal_funcs(_,[]) -> - ok; -gen_internal_funcs(Erules,[TypeDef|Rest]) -> - gen_encode_user(Erules,TypeDef), - emit([nl,nl,"'dec_",TypeDef#typedef.name,"'(Bytes) ->",nl]), - gen_decode_user(Erules,TypeDef), - gen_internal_funcs(Erules,Rest). - - - %% DECODING ***************************** %%*************************************** -gen_decode(Erules,Type) when is_record(Type,typedef) -> - D = Type, - emit({nl,nl}), - emit({"'dec_",Type#typedef.name,"'(Bytes,_) ->",nl}), +gen_decode(Erules, #typedef{}=Type) -> + DecFunc = dec_func(Type#typedef.name), + emit([nl,nl,{asis,DecFunc},"(Bytes) ->",nl]), dbdec(Type#typedef.name), - gen_decode_user(Erules,D). + gen_decode_user(Erules, Type). gen_decode(Erules,Tname,#'ComponentType'{name=Cname,typespec=Type}) -> NewTname = [Cname|Tname], @@ -944,8 +218,9 @@ gen_decode(Erules,Typename,Type) when is_record(Type,type) -> _ -> "" end, - emit({nl,"'dec_",asn1ct_gen:list2name(Typename), - "'(Bytes,_",ObjFun,") ->",nl}), + emit([nl, + {asis,dec_func(asn1ct_gen:list2name(Typename))}, + "(Bytes",ObjFun,") ->",nl]), dbdec(Typename), asn1ct_gen:gen_decode_constructed(Erules,Typename,InnerType,Type); _ -> @@ -982,8 +257,8 @@ gen_dec_external(Ext, BytesVar) -> #'Externaltypereference'{module=Mod,type=Type} = Ext, emit([case CurrMod of Mod -> []; - _ -> ["'",Mod,"':"] - end,"'dec_",Type,"'(",BytesVar,",telltype)"]). + _ -> [{asis,Mod},":"] + end,{asis,dec_func(Type)},"(",BytesVar,")"]). gen_dec_imm(Erule, #type{def=Name,constraint=C}) -> Aligned = case Erule of @@ -1103,35 +378,6 @@ gen_dec_prim(Erule, Type, BytesVar) -> Imm = gen_dec_imm(Erule, Type), asn1ct_imm:dec_code_gen(Imm, BytesVar). -is_already_generated(Operation,Name) -> - case get(class_default_type) of - undefined -> - put(class_default_type,[{Operation,Name}]), - false; - GeneratedList -> - case lists:member({Operation,Name},GeneratedList) of - true -> - true; - false -> - put(class_default_type,[{Operation,Name}|GeneratedList]), - false - end - end. - -get_class_fields(#classdef{typespec=ObjClass}) -> - ObjClass#objectclass.fields; -get_class_fields(#objectclass{fields=Fields}) -> - Fields; -get_class_fields(_) -> - []. - - -get_object_field(Name,ObjectFields) -> - case lists:keysearch(Name,1,ObjectFields) of - {value,Field} -> Field; - false -> false - end. - %% For PER the ExtensionAdditionGroup notation has significance for the encoding and decoding %% the components within the ExtensionAdditionGroup is treated in a similar way as if they @@ -1170,11 +416,8 @@ imm_dec_open_type_1(Type, Aligned) -> asn1ct_name:new(tmpval), emit(["begin",nl, "{",{curr,tmpval},",_} = ", - "dec_",Type,"(",OpenType,", mandatory),",nl, + {asis,dec_func(Type)},"(",OpenType,"),",nl, "{",{curr,tmpval},com,Buf,"}",nl, "end"]) end, {call,D,asn1ct_imm:per_dec_open_type(Aligned)}. - -eval_module(per) -> asn1ct_eval_per; -eval_module(uper) -> asn1ct_eval_uper. diff --git a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl b/lib/asn1/src/asn1ct_gen_per_rt2ct.erl deleted file mode 100644 index 012d54e7a1..0000000000 --- a/lib/asn1/src/asn1ct_gen_per_rt2ct.erl +++ /dev/null @@ -1,461 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2002-2013. 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(asn1ct_gen_per_rt2ct). - -%% Handle encoding of primitives for aligned PER. - --include("asn1_records.hrl"). - --export([gen_encode_prim/3]). - --import(asn1ct_gen, [emit/1,demit/1]). --import(asn1ct_func, [call/3]). - -gen_encode_prim(Erules, #type{}=D, Value) -> - Constraint = D#type.constraint, - case D#type.def of - 'INTEGER' -> - EffectiveConstr = effective_constraint(integer,Constraint), - emit([" %%INTEGER with effective constraint: ", - {asis,EffectiveConstr},nl]), - emit_enc_integer(Erules,EffectiveConstr,Value); - {'INTEGER',NamedNumberList} -> - EffectiveConstr = effective_constraint(integer,Constraint), - %% maybe an emit_enc_NNL_integer - emit([" %%INTEGER with effective constraint: ", - {asis,EffectiveConstr},nl]), - emit_enc_integer_NNL(Erules,EffectiveConstr,Value,NamedNumberList); - 'REAL' -> - emit_enc_real(Erules, Value); - - {'BIT STRING',NamedNumberList} -> - EffectiveC = effective_constraint(bitstring,Constraint), - case EffectiveC of - 0 -> - emit({"[]"}); - _ -> - call(Erules, encode_bit_string, - [{asis,EffectiveC},Value, - {asis,NamedNumberList}]) - end; - 'NULL' -> - emit("[]"); - 'OBJECT IDENTIFIER' -> - call(Erules, encode_object_identifier, [Value]); - 'RELATIVE-OID' -> - call(Erules, encode_relative_oid, [Value]); - 'ObjectDescriptor' -> - call(Erules, encode_ObjectDescriptor, - [{asis,Constraint},Value]); - 'BOOLEAN' -> - emit({"case ",Value," of",nl, - " true -> [1];",nl, - " false -> [0];",nl, - " _ -> exit({error,{asn1,{encode_boolean,",Value,"}}})",nl, - "end"}); - 'OCTET STRING' -> - emit_enc_octet_string(Erules,Constraint,Value); - - 'NumericString' -> - emit_enc_known_multiplier_string('NumericString',Constraint,Value); - TString when TString == 'TeletexString'; - TString == 'T61String' -> - call(Erules, encode_TeletexString, [{asis,Constraint},Value]); - 'VideotexString' -> - call(Erules, encode_VideotexString, [{asis,Constraint},Value]); - 'UTCTime' -> - emit_enc_known_multiplier_string('VisibleString',Constraint,Value); - 'GeneralizedTime' -> - emit_enc_known_multiplier_string('VisibleString',Constraint,Value); - 'GraphicString' -> - call(Erules, encode_GraphicString, [{asis,Constraint},Value]); - 'VisibleString' -> - emit_enc_known_multiplier_string('VisibleString',Constraint,Value); - 'GeneralString' -> - call(Erules, encode_GeneralString, [{asis,Constraint},Value]); - 'PrintableString' -> - emit_enc_known_multiplier_string('PrintableString',Constraint,Value); - 'IA5String' -> - emit_enc_known_multiplier_string('IA5String',Constraint,Value); - 'BMPString' -> - emit_enc_known_multiplier_string('BMPString',Constraint,Value); - 'UniversalString' -> - emit_enc_known_multiplier_string('UniversalString',Constraint,Value); - 'UTF8String' -> - call(Erules, encode_UTF8String, [Value]); - 'ASN1_OPEN_TYPE' -> - NewValue = case Constraint of - [#'Externaltypereference'{type=Tname}] -> - asn1ct_func:need({Erules,complete,1}), - io_lib:format( - "complete(enc_~s(~s))",[Tname,Value]); - [#type{def=#'Externaltypereference'{type=Tname}}] -> - asn1ct_func:need({Erules,complete,1}), - io_lib:format( - "complete(enc_~s(~s))", - [Tname,Value]); - _ -> - io_lib:format("iolist_to_binary(~s)", - [Value]) - end, - call(Erules, encode_open_type, [NewValue]) - end. - -emit_enc_real(Erules, Real) -> - asn1ct_name:new(tmpval), - asn1ct_name:new(tmplen), - emit(["begin",nl, - "{",{curr,tmpval},com,{curr,tmplen},"} = ", - {call,real_common,encode_real,[Real]},com,nl, - "[",{call,Erules,encode_length,[{curr,tmplen}]},",",nl, - {call,Erules,octets_to_complete, - [{curr,tmplen},{curr,tmpval}]},"]",nl, - "end"]). - -emit_enc_known_multiplier_string(StringType,C,Value) -> - SizeC = effective_constraint(bitstring, C), - PAlphabC = get_constraint(C,'PermittedAlphabet'), - case {StringType,PAlphabC} of - {'UniversalString',{_,_}} -> - exit({error,{asn1,{'not implemented',"UniversalString with " - "PermittedAlphabet constraint"}}}); - {'BMPString',{_,_}} -> - exit({error,{asn1,{'not implemented',"BMPString with " - "PermittedAlphabet constraint"}}}); - _ -> ok - end, - NumBits = get_NumBits(C,StringType), - CharOutTab = get_CharOutTab(C,StringType), - %% NunBits and CharOutTab for chars_encode - emit_enc_k_m_string(SizeC, NumBits, CharOutTab, Value). - -emit_enc_k_m_string(0, _NumBits, _CharOutTab, _Value) -> - emit({"[]"}); -emit_enc_k_m_string(SizeC, NumBits, CharOutTab, Value) -> - call(per, encode_known_multiplier_string, - [{asis,SizeC},NumBits,{asis,CharOutTab},Value]). - - -%% copied from run time module - -get_CharOutTab(C, StringType) -> - case get_constraint(C,'PermittedAlphabet') of - {'SingleValue',Sv} -> - get_CharTab2(C, StringType, hd(Sv), lists:max(Sv), Sv); - no -> - case StringType of - 'IA5String' -> - {0,16#7F,notab}; - 'VisibleString' -> - get_CharTab2(C, StringType, 16#20, 16#7F, notab); - 'PrintableString' -> - Chars = lists:sort( - " '()+,-./0123456789:=?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), - get_CharTab2(C, StringType, hd(Chars), - lists:max(Chars), Chars); - 'NumericString' -> - get_CharTab2(C, StringType, 16#20, $9, " 0123456789"); - 'UniversalString' -> - {0,16#FFFFFFFF,notab}; - 'BMPString' -> - {0,16#FFFF,notab} - end - end. - -get_CharTab2(C, StringType, Min, Max, Chars) -> - BitValMax = (1 bsl get_NumBits(C,StringType))-1, - if - Max =< BitValMax -> - {0,Max,notab}; - true -> - {Min,Max,create_char_tab(Min,Chars)} - end. - -create_char_tab(Min,L) -> - list_to_tuple(create_char_tab(Min,L,0)). -create_char_tab(Min,[Min|T],V) -> - [V|create_char_tab(Min+1,T,V+1)]; -create_char_tab(_Min,[],_V) -> - []; -create_char_tab(Min,L,V) -> - [false|create_char_tab(Min+1,L,V)]. - -get_NumBits(C,StringType) -> - case get_constraint(C,'PermittedAlphabet') of - {'SingleValue',Sv} -> - charbits(length(Sv),aligned); - no -> - case StringType of - 'IA5String' -> - charbits(128,aligned); % 16#00..16#7F - 'VisibleString' -> - charbits(95,aligned); % 16#20..16#7E - 'PrintableString' -> - charbits(74,aligned); % [$\s,$',$(,$),$+,$,,$-,$.,$/,"0123456789",$:,$=,$?,$A..$Z,$a..$z - 'NumericString' -> - charbits(11,aligned); % $ ,"0123456789" - 'UniversalString' -> - 32; - 'BMPString' -> - 16 - end - end. - -charbits(NumOfChars,aligned) -> - case charbits(NumOfChars) of - 1 -> 1; - 2 -> 2; - B when B =< 4 -> 4; - B when B =< 8 -> 8; - B when B =< 16 -> 16; - B when B =< 32 -> 32 - end. - -charbits(NumOfChars) when NumOfChars =< 2 -> 1; -charbits(NumOfChars) when NumOfChars =< 4 -> 2; -charbits(NumOfChars) when NumOfChars =< 8 -> 3; -charbits(NumOfChars) when NumOfChars =< 16 -> 4; -charbits(NumOfChars) when NumOfChars =< 32 -> 5; -charbits(NumOfChars) when NumOfChars =< 64 -> 6; -charbits(NumOfChars) when NumOfChars =< 128 -> 7; -charbits(NumOfChars) when NumOfChars =< 256 -> 8; -charbits(NumOfChars) when NumOfChars =< 512 -> 9; -charbits(NumOfChars) when NumOfChars =< 1024 -> 10; -charbits(NumOfChars) when NumOfChars =< 2048 -> 11; -charbits(NumOfChars) when NumOfChars =< 4096 -> 12; -charbits(NumOfChars) when NumOfChars =< 8192 -> 13; -charbits(NumOfChars) when NumOfChars =< 16384 -> 14; -charbits(NumOfChars) when NumOfChars =< 32768 -> 15; -charbits(NumOfChars) when NumOfChars =< 65536 -> 16; -charbits(NumOfChars) when is_integer(NumOfChars) -> - 16 + charbits1(NumOfChars bsr 16). - -charbits1(0) -> - 0; -charbits1(NumOfChars) -> - 1 + charbits1(NumOfChars bsr 1). - -%% copied from run time module - -emit_enc_octet_string(Erules, Constraint, Value) -> - case effective_constraint(bitstring, Constraint) of - 0 -> - emit({" []"}); - 1 -> - asn1ct_name:new(tmpval), - emit({" begin",nl}), - emit({" [",{curr,tmpval},"] = ",Value,",",nl}), - emit([" [[10,8],",{curr,tmpval},"]",nl]), - emit(" end"); - 2 -> - asn1ct_name:new(tmpval), - emit([" begin",nl, - " ",{curr,tmpval}," = ",Value,",",nl, - " case length(",{curr,tmpval},") of",nl, - " 2 ->",nl, - " [[45,16,2]|",{curr,tmpval},"];",nl, - " _ ->",nl, - " exit({error,{value_out_of_bounds,", - {curr,tmpval},"}})",nl, - " end",nl, - " end"]); - Sv when is_integer(Sv), Sv < 256 -> - asn1ct_name:new(tmpval), - asn1ct_name:new(tmplen), - emit([" begin",nl, - " ",{curr,tmpval}," = ",Value,",",nl, - " case length(",{curr,tmpval},") of",nl, - " ",Sv,"=",{curr,tmplen}," ->",nl, - " [20,",{curr,tmplen},"|",{curr,tmpval},"];",nl, - " _ ->",nl, - " exit({error,{value_out_of_bounds,", - {curr,tmpval},"}})",nl, - " end",nl, - " end"]); - Sv when is_integer(Sv),Sv =< 65535 -> - asn1ct_name:new(tmpval), - asn1ct_name:new(tmplen), - emit([" begin",nl, - " ",{curr,tmpval}," = ",Value,",",nl, - " case length(",{curr,tmpval},") of",nl, - " ",Sv,"=",{curr,tmplen}," ->",nl, - " [<<21,",{curr,tmplen},":16>>|",Value,"];",nl, - " _ ->",nl, - " exit({error,{value_out_of_bounds,", - {curr,tmpval},"}})",nl, - " end",nl, - " end"]); - C -> - call(Erules, encode_octet_string, - [{asis,C},Value]) - end. - -emit_enc_integer_case(Value) -> - case get(component_type) of - {true,#'ComponentType'{prop=Prop}} -> - emit({" begin",nl}), - case Prop of - Opt when Opt=='OPTIONAL'; - is_tuple(Opt),element(1,Opt)=='DEFAULT' -> - emit({" case ",Value," of",nl}), - ok; - _ -> - emit({" ",{curr,tmpval},"=",Value,",",nl}), - emit({" case ",{curr,tmpval}," of",nl}), - asn1ct_name:new(tmpval) - end; -% asn1ct_name:new(tmpval); - _ -> - emit({" case ",Value," of ",nl}) - end. -emit_enc_integer_end_case() -> - case get(component_type) of - {true,_} -> - emit({nl," end"}); % end of begin ... end - _ -> ok - end. - - -emit_enc_integer_NNL(Erules,C,Value,NNL) -> - EncVal = enc_integer_NNL_cases(Value,NNL), - emit_enc_integer(Erules,C,EncVal). - -enc_integer_NNL_cases(Value,NNL) -> - asn1ct_name:new(tmpval), - TmpVal = asn1ct_gen:mk_var(asn1ct_name:curr(tmpval)), - Cases=enc_integer_NNL_cases1(NNL), - lists:flatten(io_lib:format("(case ~s of "++Cases++ - "~s when is_atom(~s)->exit({error,{asn1,{namednumber,~s}}});_->~s end)",[Value,TmpVal,TmpVal,TmpVal,Value])). - -enc_integer_NNL_cases1([{NNo,No}|Rest]) -> - io_lib:format("~w->~w;",[NNo,No])++enc_integer_NNL_cases1(Rest); -enc_integer_NNL_cases1([]) -> - "". - -emit_enc_integer(_Erule,[{'SingleValue',Int}],Value) -> - asn1ct_name:new(tmpval), - emit_enc_integer_case(Value),% emit([" case ",Value," of",nl]), - emit([" ",Int," -> [];",nl]), - emit([" ",{curr,tmpval}," ->",nl]), - emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})", - nl," end",nl]), - emit_enc_integer_end_case(); - -emit_enc_integer(_Erule,[{_,{Lb,Ub},_Range,{bits,NoBs}}],Value) -> % Range =< 255 - asn1ct_name:new(tmpval), - emit_enc_integer_case(Value), - emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",", - {curr,tmpval},">=",Lb," ->",nl]), - emit([" [10,",NoBs,",",{curr,tmpval},"- ",Lb,"];",nl]), - emit([" ",{curr,tmpval}," ->",nl]), - emit([" exit({error,{value_out_of_bounds,", - {curr,tmpval},"}})",nl," end",nl]), - emit_enc_integer_end_case(); - -emit_enc_integer(_Erule,[{_,{Lb,Ub},Range,_}],Value) when Range =< 256 -> - asn1ct_name:new(tmpval), - emit_enc_integer_case(Value), - emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",", - {curr,tmpval},">=",Lb," ->",nl]), - emit([" [20,1,",{curr,tmpval},"- ",Lb,"];",nl]), - emit([" ",{curr,tmpval}," ->",nl]), - emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})", - nl," end",nl]), - emit_enc_integer_end_case(); - -emit_enc_integer(_Erule,[{_,{Lb,Ub},Range,_}],Value) when Range =< 65536 -> - asn1ct_name:new(tmpval), - emit_enc_integer_case(Value), - emit([" ",{curr,tmpval}," when ",{curr,tmpval},"=<",Ub,",", - {curr,tmpval},">=",Lb," ->",nl]), - emit([" [20,2,<<(",{curr,tmpval},"- ",Lb,"):16>>];",nl]), - emit([" ",{curr,tmpval}," ->",nl]), - emit([" exit({error,{value_out_of_bounds,",{curr,tmpval},"}})", - nl," end",nl]), - emit_enc_integer_end_case(); - -emit_enc_integer(Erule, [{'ValueRange',{Lb,Ub}=VR}], Value) - when is_integer(Lb), is_integer(Ub) -> - call(Erule, encode_constrained_number, [{asis,VR},Value]); - -emit_enc_integer(Erule, C, Value) -> - call(Erule, encode_integer, [{asis,C},Value]). - - -get_constraint([{Key,V}],Key) -> - V; -get_constraint([],_) -> - no; -get_constraint(C,Key) -> - case lists:keysearch(Key,1,C) of - false -> - no; - {value,{_,V}} -> - V - end. - -%% effective_constraint(Type,C) -%% Type = atom() -%% C = [C1,...] -%% C1 = {'SingleValue',SV} | {'ValueRange',VR} | {atom(),term()} -%% SV = integer() | [integer(),...] -%% VR = {Lb,Ub} -%% Lb = 'MIN' | integer() -%% Ub = 'MAX' | integer() -%% Returns a single value if C only has a single value constraint, and no -%% value range constraints, that constrains to a single value, otherwise -%% returns a value range that has the lower bound set to the lowest value -%% of all single values and lower bound values in C and the upper bound to -%% the greatest value. -effective_constraint(integer,[C={{_,_},_}|_Rest]) -> % extension - [C]; %% [C|effective_constraint(integer,Rest)]; XXX what is possible ??? -effective_constraint(integer,C) -> - pre_encode(integer, asn1ct_imm:effective_constraint(integer, C)); -effective_constraint(bitstring,C) -> - asn1ct_imm:effective_constraint(bitstring, C). - -pre_encode(integer,[]) -> - []; -pre_encode(integer,C=[{'SingleValue',_}]) -> - C; -pre_encode(integer,C=[{'ValueRange',VR={Lb,Ub}}]) when is_integer(Lb),is_integer(Ub)-> - Range = Ub-Lb+1, - if - Range =< 255 -> - NoBits = no_bits(Range), - [{'ValueRange',VR,Range,{bits,NoBits}}]; - Range =< 256 -> - [{'ValueRange',VR,Range,{octets,1}}]; - Range =< 65536 -> - [{'ValueRange',VR,Range,{octets,2}}]; - true -> - C - end; -pre_encode(integer,C) -> - C. - -no_bits(2) -> 1; -no_bits(N) when N=<4 -> 2; -no_bits(N) when N=<8 -> 3; -no_bits(N) when N=<16 -> 4; -no_bits(N) when N=<32 -> 5; -no_bits(N) when N=<64 -> 6; -no_bits(N) when N=<128 -> 7; -no_bits(N) when N=<255 -> 8. diff --git a/lib/asn1/src/asn1ct_imm.erl b/lib/asn1/src/asn1ct_imm.erl index bf362db843..892178f61b 100644 --- a/lib/asn1/src/asn1ct_imm.erl +++ b/lib/asn1/src/asn1ct_imm.erl @@ -26,6 +26,18 @@ per_dec_octet_string/2,per_dec_open_type/1,per_dec_real/1, per_dec_restricted_string/1]). -export([per_dec_constrained/3,per_dec_normally_small_number/1]). +-export([per_enc_bit_string/4,per_enc_boolean/2, + per_enc_choice/3,per_enc_enumerated/3, + per_enc_integer/3,per_enc_integer/4, + per_enc_null/2, + per_enc_k_m_string/4,per_enc_octet_string/3, + per_enc_open_type/2, + per_enc_restricted_string/3, + per_enc_small_number/2]). +-export([per_enc_extension_bit/2,per_enc_extensions/4,per_enc_optional/3]). +-export([per_enc_sof/5]). +-export([enc_absent/3,enc_append/1,enc_bind_var/1]). +-export([enc_cg/2]). -export([optimize_alignment/1,optimize_alignment/2, dec_slim_cg/2,dec_code_gen/2]). -export([effective_constraint/2]). @@ -115,29 +127,18 @@ per_dec_named_integer(Constraint, NamedList0, Aligned) -> per_dec_k_m_string(StringType, Constraint, Aligned) -> SzConstr = effective_constraint(bitstring, Constraint), N = string_num_bits(StringType, Constraint, Aligned), - %% X.691 (07/2002) 27.5.7 says if the upper bound times the number - %% of bits is greater than or equal to 16, then the bit field should - %% be aligned. - Imm = dec_string(SzConstr, N, Aligned, fun(_, Ub) -> Ub >= 16 end), + Imm = dec_string(SzConstr, N, Aligned, k_m_string), Chars = char_tab(Constraint, StringType, N), convert_string(N, Chars, Imm). per_dec_octet_string(Constraint, Aligned) -> - dec_string(Constraint, 8, Aligned, - %% Aligned unless the size is fixed and =< 16. - fun(Sv, Sv) -> Sv > 16; - (_, _) -> true - end). + dec_string(Constraint, 8, Aligned, 'OCTET STRING'). per_dec_raw_bitstring(Constraint, Aligned) -> - dec_string(Constraint, 1, Aligned, - fun(Sv, Sv) -> Sv > 16; - (_, _) -> true - end). + dec_string(Constraint, 1, Aligned, 'BIT STRING'). per_dec_open_type(Aligned) -> - {get_bits,decode_unconstrained_length(true, Aligned), - [8,binary,{align,Aligned}]}. + dec_string(no, 8, Aligned, open_type). per_dec_real(Aligned) -> Dec = fun(V, Buf) -> @@ -152,26 +153,285 @@ per_dec_restricted_string(Aligned) -> DecLen = decode_unconstrained_length(true, Aligned), {get_bits,DecLen,[8,binary]}. +%%% +%%% Encoding. +%%% + +per_enc_bit_string(Val0, [], Constraint0, Aligned) -> + {B,[Val,Bs,Bits]} = mk_vars(Val0, [bs,bits]), + Constraint = effective_constraint(bitstring, Constraint0), + ExtraArgs = case constr_min_size(Constraint) of + no -> []; + Lb -> [Lb] + end, + B ++ [{call,per_common,to_bitstring,[Val|ExtraArgs],Bs}, + {call,erlang,bit_size,[Bs],Bits}| + per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')]; +per_enc_bit_string(Val0, NNL0, Constraint0, Aligned) -> + {B,[Val,Bs,Bits,Positions]} = mk_vars(Val0, [bs,bits,positions]), + NNL = lists:keysort(2, NNL0), + Constraint = effective_constraint(bitstring, Constraint0), + ExtraArgs = case constr_min_size(Constraint) of + no -> []; + Lb -> [Lb] + end, + B ++ [{'try', + [bit_string_name2pos_fun(NNL, Val)], + {Positions, + [{call,per_common,bitstring_from_positions, + [Positions|ExtraArgs]}]}, + [{call,per_common,to_named_bitstring,[Val|ExtraArgs]}],Bs}, + {call,erlang,bit_size,[Bs],Bits}| + per_enc_length(Bs, 1, Bits, Constraint, Aligned, 'BIT STRING')]. + +per_enc_boolean(Val0, _Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + B++build_cond([[{eq,Val,false},{put_bits,0,1,[1]}], + [{eq,Val,true},{put_bits,1,1,[1]}]]). + +per_enc_choice(Val0, Cs0, _Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + Cs = [[{eq,Val,Tag}|opt_choice(Imm)] || {Tag,Imm} <- Cs0], + B++build_cond(Cs). + +per_enc_enumerated(Val0, {Root,Ext}, Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + Constr = enumerated_constraint(Root), + RootCs = per_enc_enumerated_root(Root, [{put_bits,0,1,[1]}], + Val, Constr, Aligned), + ExtCs = per_enc_enumerated_ext(Ext, Val, Aligned), + B++[{'cond',RootCs++ExtCs++enumerated_error(Val)}]; +per_enc_enumerated(Val0, Root, Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + Constr = enumerated_constraint(Root), + Cs = per_enc_enumerated_root(Root, [], Val, Constr, Aligned), + B++[{'cond',Cs++enumerated_error(Val)}]. + +enumerated_error(Val) -> + [['_',{error,Val}]]. + +per_enc_integer(Val0, Constraint0, Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + Constraint = effective_constraint(integer, Constraint0), + B ++ per_enc_integer_1(Val, Constraint, Aligned). + +per_enc_integer(Val0, NNL, Constraint0, Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + Constraint = effective_constraint(integer, Constraint0), + Cs = [[{eq,Val,N}|per_enc_integer_1(V, Constraint, Aligned)] || + {N,V} <- NNL], + case per_enc_integer_1(Val, Constraint, Aligned) of + [{'cond',IntCs}] -> + B ++ [{'cond',Cs++IntCs}]; + Other -> + B ++ [{'cond',Cs++[['_'|Other]]}] + end. + +per_enc_null(_Val, _Aligned) -> + []. + +per_enc_k_m_string(Val0, StringType, Constraint, Aligned) -> + {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]), + SzConstraint = effective_constraint(bitstring, Constraint), + Unit = string_num_bits(StringType, Constraint, Aligned), + Chars0 = char_tab(Constraint, StringType, Unit), + Args = case enc_char_tab(Chars0) of + notab -> [Val,Unit]; + Chars -> [Val,Unit,Chars] + end, + Enc = case Unit of + 16 -> + {call,per_common,encode_chars_16bit,[Val],Bin}; + 32 -> + {call,per_common,encode_big_chars,[Val],Bin}; + 8 -> + {call,erlang,list_to_binary,[Val],Bin}; + _ -> + {call,per_common,encode_chars,Args,Bin} + end, + case Unit of + 8 -> + B ++ [Enc,{call,erlang,byte_size,[Bin],Len}]; + _ -> + B ++ [{call,erlang,length,[Val],Len},Enc] + end ++ per_enc_length(Bin, Unit, Len, SzConstraint, Aligned, k_m_string). + +per_enc_open_type([], Aligned) -> + [{put_bits,1,8,unit(1, Aligned)},{put_bits,0,8,[1]}]; +per_enc_open_type([{'cond', + [['_', + {put_bits,0,0,_}, + {call,per_common,encode_unconstrained_number,_}=Call]]}], + Aligned) -> + %% We KNOW that encode_unconstrained_number/1 will return an IO list; + %% therefore the call to complete/1 can be replaced with a cheaper + %% call to iolist_to_binary/1. + {Dst,Imm} = per_enc_open_type_output([Call], []), + ToBin = {erlang,iolist_to_binary}, + Imm ++ per_enc_open_type(Dst, ToBin, Aligned); +per_enc_open_type([{call,erlang,iolist_to_binary,Args}], Aligned) -> + {_,[_,Bin,Len]} = mk_vars('dummy', [bin,len]), + [{call,erlang,iolist_to_binary,Args,Bin}, + {call,erlang,byte_size,[Bin],Len}|per_enc_length(Bin, 8, Len, Aligned)]; +per_enc_open_type(Imm0, Aligned) -> + try + {Prefix,Imm1} = split_off_nonbuilding(Imm0), + Prefix ++ enc_open_type(Imm1, Aligned) + catch + throw:impossible -> + {Dst,Imm} = per_enc_open_type_output(Imm0, []), + ToBin = {enc_mod(Aligned),complete}, + Imm ++ per_enc_open_type(Dst, ToBin, Aligned) + end. + +per_enc_octet_string(Val0, Constraint0, Aligned) -> + {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]), + Constraint = effective_constraint(bitstring, Constraint0), + B ++ [{call,erlang,iolist_to_binary,[Val],Bin}, + {call,erlang,byte_size,[Bin],Len}| + per_enc_length(Bin, 8, Len, Constraint, Aligned, 'OCTET STRING')]. + +per_enc_restricted_string(Val0, {M,F}, Aligned) -> + {B,[Val,Bin,Len]} = mk_vars(Val0, [bin,len]), + B ++ [{call,M,F,[Val],Bin}, + {call,erlang,byte_size,[Bin],Len}| + per_enc_length(Bin, 8, Len, Aligned)]. + +per_enc_small_number(Val, Aligned) -> + build_cond([[{lt,Val,64},{put_bits,Val,7,[1]}], + ['_',{put_bits,1,1,[1]}| + per_enc_unsigned(Val, Aligned)]]). + +per_enc_extension_bit(Val0, _Aligned) -> + {B,[Val]} = mk_vars(Val0, []), + B++build_cond([[{eq,Val,[]},{put_bits,0,1,[1]}], + ['_',{put_bits,1,1,[1]}]]). + +per_enc_extensions(Val0, Pos0, NumBits, Aligned) when NumBits > 0 -> + Pos = Pos0 + 1, + {B,[Val,Bitmap]} = mk_vars(Val0, [bitmap]), + Length = per_enc_small_length(NumBits, Aligned), + PutBits = case NumBits of + 1 -> [{put_bits,1,1,[1]}]; + _ -> [{put_bits,Bitmap,NumBits,[1]}] + end, + B++[{call,per_common,extension_bitmap,[Val,Pos,Pos+NumBits],Bitmap}, + {'cond',[[{eq,Bitmap,0}], + ['_'|Length ++ PutBits]],{var,"Extensions"}}]. + +per_enc_optional(Val0, {Pos,Def}, _Aligned) when is_integer(Pos) -> + Val1 = lists:concat(["element(",Pos,", ",Val0,")"]), + {B,[Val]} = mk_vars(Val1, []), + Zero = {put_bits,0,1,[1]}, + One = {put_bits,1,1,[1]}, + B++[{'cond',[[{eq,Val,asn1_DEFAULT},Zero], + [{eq,Val,Def},Zero], + ['_',One]]}]; +per_enc_optional(Val0, Pos, _Aligned) when is_integer(Pos) -> + Val1 = lists:concat(["element(",Pos,", ",Val0,")"]), + {B,[Val]} = mk_vars(Val1, []), + Zero = {put_bits,0,1,[1]}, + One = {put_bits,1,1,[1]}, + B++[{'cond',[[{eq,Val,asn1_NOVALUE},Zero], + ['_',One]]}]. + +per_enc_sof(Val0, Constraint, ElementVar, ElementImm, Aligned) -> + {B,[Val,Len]} = mk_vars(Val0, [len]), + SzConstraint = effective_constraint(bitstring, Constraint), + LenImm = enc_length(Len, SzConstraint, Aligned), + Lc0 = [{lc,ElementImm,{var,atom_to_list(ElementVar)},Val}], + Lc = opt_lc(Lc0, LenImm), + PreBlock = B ++ [{call,erlang,length,[Val],Len}], + case LenImm of + [{'cond',[[C|Action]]}] -> + PreBlock ++ [{'cond',[[C|Action++Lc]]}]; + [{sub,_,_,_}=Sub,{'cond',[[C|Action]]}] -> + PreBlock ++ + [Sub,{'cond',[[C|Action++Lc]]}]; + EncLen -> + PreBlock ++ EncLen ++ Lc + end. + +enc_absent(Val0, AbsVals, Body) -> + {B,[Var]} = mk_vars(Val0, []), + Cs = [[{eq,Var,Aval}] || Aval <- AbsVals] ++ [['_'|Body]], + B++build_cond(Cs). + +enc_append([[]|T]) -> + enc_append(T); +enc_append([[{put_bits,_,_,_}|_]=Pb|[Imm|T]=T0]) -> + case opt_choice(Pb++Imm) of + [{put_bits,_,_,_}|_] -> + [{block,Pb}|enc_append(T0)]; + Opt -> + enc_append([Opt|T]) + end; +enc_append([Imm0|[Imm1|T]=T0]) -> + try combine_imms(Imm0, Imm1) of + Imm -> + enc_append([Imm|T]) + catch + throw:impossible -> + [{block,Imm0}|enc_append(T0)] + end; +enc_append([H|T]) -> + [{block,H}|enc_append(T)]; +enc_append([]) -> []. + +enc_bind_var(Val) -> + {B,[{var,Var}]} = mk_vars(Val, []), + {B,list_to_atom(Var)}. + +enc_cg(Imm0, false) -> + Imm1 = enc_cse(Imm0), + Imm = enc_pre_cg(Imm1), + enc_cg(Imm); +enc_cg(Imm0, true) -> + Imm1 = enc_cse(Imm0), + Imm2 = enc_hoist_align(Imm1), + Imm3 = enc_opt_al(Imm2), + Imm4 = per_fixup(Imm3), + Imm = enc_pre_cg(Imm4), + enc_cg(Imm). %%% %%% Local functions. %%% -dec_string(Sv, U, Aligned0, AF) when is_integer(Sv) -> +%% is_aligned(StringType, LowerBound, UpperBound) -> boolean() +%% StringType = 'OCTET STRING' | 'BIT STRING' | k_m_string +%% LowerBound = UpperBound = number of bits +%% Determine whether a string should be aligned in PER. + +is_aligned(T, Lb, Ub) when T =:= 'OCTET STRING'; T =:= 'BIT STRING' -> + %% OCTET STRINGs and BIT STRINGs are aligned to a byte boundary + %% unless the size is fixed and less than or equal to 16 bits. + Lb =/= Ub orelse Lb > 16; +is_aligned(k_m_string, _Lb, Ub) -> + %% X.691 (07/2002) 27.5.7 says if the upper bound times the number + %% of bits is greater than or equal to 16, then the bit field should + %% be aligned. + Ub >= 16. + +%%% +%%% Generating the intermediate format format for decoding. +%%% + +dec_string(Sv, U, Aligned0, T) when is_integer(Sv) -> Bits = U*Sv, - Aligned = Aligned0 andalso AF(Bits, Bits), + Aligned = Aligned0 andalso is_aligned(T, Bits, Bits), {get_bits,Sv,[U,binary,{align,Aligned}]}; -dec_string({{Sv,Sv},[]}, U, Aligned, AF) -> - bit_case(dec_string(Sv, U, Aligned, AF), - dec_string(no, U, Aligned, AF)); -dec_string({{_,_}=C,[]}, U, Aligned, AF) -> - bit_case(dec_string(C, U, Aligned, AF), - dec_string(no, U, Aligned, AF)); -dec_string({Lb,Ub}, U, Aligned0, AF) -> +dec_string({{Sv,Sv},[]}, U, Aligned, T) -> + bit_case(dec_string(Sv, U, Aligned, T), + dec_string(no, U, Aligned, T)); +dec_string({{_,_}=C,[]}, U, Aligned, T) -> + bit_case(dec_string(C, U, Aligned, T), + dec_string(no, U, Aligned, T)); +dec_string({Lb,Ub}, U, Aligned0, T) -> Len = per_dec_constrained(Lb, Ub, Aligned0), - Aligned = Aligned0 andalso AF(Lb*U, Ub*U), + Aligned = Aligned0 andalso is_aligned(T, Lb*U, Ub*U), {get_bits,Len,[U,binary,{align,Aligned}]}; -dec_string(_, U, Aligned, _AF) -> +dec_string(_, U, Aligned, _T) -> Al = [{align,Aligned}], DecRest = fun(V, Buf) -> asn1ct_func:call(per_common, @@ -692,6 +952,1164 @@ mk_dest(I) when is_integer(I) -> integer_to_list(I); mk_dest(S) -> S. +%%% +%%% Constructing the intermediate format for encoding. +%%% + +split_off_nonbuilding(Imm) -> + lists:splitwith(fun is_nonbuilding/1, Imm). + +is_nonbuilding({apply,_,_,_}) -> true; +is_nonbuilding({assign,_,_}) -> true; +is_nonbuilding({call,_,_,_,_}) -> true; +is_nonbuilding({'cond',_,_}) -> true; +is_nonbuilding({lc,_,_,_,_}) -> true; +is_nonbuilding({sub,_,_,_}) -> true; +is_nonbuilding({'try',_,_,_,_}) -> true; +is_nonbuilding(_) -> false. + +mk_vars(Input0, Temps) -> + asn1ct_name:new(enc), + Curr = asn1ct_name:curr(enc), + [H|T] = atom_to_list(Curr), + Base = [H - ($a - $A)|T ++ "@"], + if + is_atom(Input0) -> + Input = {var,atom_to_list(Input0)}, + {[],[Input|mk_vars_1(Base, Temps)]}; + is_integer(Input0) -> + {[],[Input0|mk_vars_1(Base, Temps)]}; + Input0 =:= [] -> + {[],[Input0|mk_vars_1(Base, Temps)]}; + true -> + Input = mk_var(Base, input), + {[{assign,Input,Input0}],[Input|mk_vars_1(Base, Temps)]} + end. + +mk_vars_1(Base, Vars) -> + [mk_var(Base, V) || V <- Vars]. + +mk_var(Base, V) -> + {var,Base ++ atom_to_list(V)}. + +per_enc_integer_1(Val, [], Aligned) -> + [{'cond',[['_'|per_enc_unconstrained(Val, Aligned)]]}]; +per_enc_integer_1(Val0, [{{_,_}=Constr,[]}], Aligned) -> + {Prefix,Check,Action} = per_enc_integer_2(Val0, Constr, Aligned), + Prefix++build_cond([[Check,{put_bits,0,1,[1]}|Action], + ['_',{put_bits,1,1,[1]}| + per_enc_unconstrained(Val0, Aligned)]]); +per_enc_integer_1(Val0, [Constr], Aligned) -> + {Prefix,Check,Action} = per_enc_integer_2(Val0, Constr, Aligned), + Prefix++build_cond([[Check|Action], + ['_',{error,Val0}]]). + +per_enc_integer_2(Val, {'SingleValue',Sv}, Aligned) -> + per_enc_constrained(Val, Sv, Sv, Aligned); +per_enc_integer_2(Val0, {'ValueRange',{Lb,'MAX'}}, Aligned) + when is_integer(Lb) -> + {Prefix,Val} = sub_lb(Val0, Lb), + {Prefix,{ge,Val,0},per_enc_unsigned(Val, Aligned)}; +per_enc_integer_2(Val, {'ValueRange',{Lb,Ub}}, Aligned) + when is_integer(Lb), is_integer(Ub) -> + per_enc_constrained(Val, Lb, Ub, Aligned). + +per_enc_constrained(Val, Sv, Sv, _Aligned) -> + {[],{eq,Val,Sv},[]}; +per_enc_constrained(Val0, Lb, Ub, false) -> + {Prefix,Val} = sub_lb(Val0, Lb), + Range = Ub - Lb + 1, + NumBits = uper_num_bits(Range), + Check = {ult,Val,Range}, + Put = [{put_bits,Val,NumBits,[1]}], + {Prefix,Check,Put}; +per_enc_constrained(Val0, Lb, Ub, true) -> + {Prefix,Val} = sub_lb(Val0, Lb), + Range = Ub - Lb + 1, + if + Range < 256 -> + NumBits = per_num_bits(Range), + Check = {ult,Val,Range}, + Put = [{put_bits,Val,NumBits,[1]}], + {Prefix,Check,Put}; + Range =:= 256 -> + NumBits = 8, + Check = {ult,Val,Range}, + Put = [{put_bits,Val,NumBits,[1,align]}], + {Prefix,Check,Put}; + Range =< 65536 -> + Check = {ult,Val,Range}, + Put = [{put_bits,Val,16,[1,align]}], + {Prefix,Check,Put}; + true -> + {var,VarBase} = Val, + Bin = {var,VarBase++"@bin"}, + BinSize0 = {var,VarBase++"@bin_size0"}, + BinSize = {var,VarBase++"@bin_size"}, + Check = {ult,Val,Range}, + RangeOctsLen = byte_size(binary:encode_unsigned(Range - 1)), + BitsNeeded = per_num_bits(RangeOctsLen), + Enc = [{call,binary,encode_unsigned,[Val],Bin}, + {call,erlang,byte_size,[Bin],BinSize0}, + {sub,BinSize0,1,BinSize}, + {'cond',[['_', + {put_bits,BinSize,BitsNeeded,[1]}, + {put_bits,Bin,binary,[8,align]}]]}], + {Prefix,Check,Enc} + end. + +per_enc_unconstrained(Val, Aligned) -> + case Aligned of + false -> []; + true -> [{put_bits,0,0,[1,align]}] + end ++ [{call,per_common,encode_unconstrained_number,[Val]}]. + +per_enc_unsigned(Val, Aligned) -> + case is_integer(Val) of + false -> + {var,VarBase} = Val, + Bin = {var,VarBase++"@bin"}, + BinSize = {var,VarBase++"@bin_size"}, + [{call,binary,encode_unsigned,[Val],Bin}, + {call,erlang,byte_size,[Bin],BinSize}| + per_enc_length(Bin, 8, BinSize, Aligned)]; + true -> + Bin = binary:encode_unsigned(Val), + Len = byte_size(Bin), + per_enc_length(Bin, 8, Len, Aligned) + end. + +%% Encode a length field without any constraint. +per_enc_length(Bin, Unit, Len, Aligned) -> + U = unit(1, Aligned), + PutBits = put_bits_binary(Bin, Unit, Aligned), + EncFragmented = {call,per_common,encode_fragmented,[Bin,Unit]}, + Al = case Aligned of + false -> []; + true -> [{put_bits,0,0,[1,align]}] + end, + build_cond([[{lt,Len,128}, + {put_bits,Len,8,U},PutBits], + [{lt,Len,16384}, + {put_bits,2,2,U},{put_bits,Len,14,[1]},PutBits], + ['_'|Al++[EncFragmented]]]). + +per_enc_length(Bin, Unit, Len, no, Aligned, _Type) -> + per_enc_length(Bin, Unit, Len, Aligned); +per_enc_length(Bin, Unit, Len, {{Lb,Ub},[]}, Aligned, Type) -> + {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned), + NoExt = {put_bits,0,1,[1]}, + U = unit(Unit, Aligned, Type, Lb*Unit, Ub*Unit), + PutBits = [{put_bits,Bin,binary,U}], + [{'cond',ExtConds0}] = per_enc_length(Bin, Unit, Len, Aligned), + Ext = {put_bits,1,1,[1]}, + ExtConds = prepend_to_cond(ExtConds0, Ext), + build_length_cond(Prefix, [[Check,NoExt|PutLen++PutBits]|ExtConds]); +per_enc_length(Bin, Unit, Len, {Lb,Ub}, Aligned, Type) + when is_integer(Lb) -> + {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned), + U = unit(Unit, Aligned, Type, Lb*Unit, Ub*Unit), + PutBits = [{put_bits,Bin,binary,U}], + build_length_cond(Prefix, [[Check|PutLen++PutBits]]); +per_enc_length(Bin, Unit, Len, Sv, Aligned, Type) when is_integer(Sv) -> + NumBits = Sv*Unit, + U = unit(Unit, Aligned, Type, NumBits, NumBits), + Pb = {put_bits,Bin,binary,U}, + [{'cond',[[{eq,Len,Sv},Pb]]}]. + +enc_length(Len, no, Aligned) -> + U = unit(1, Aligned), + build_cond([[{lt,Len,128}, + {put_bits,Len,8,U}], + [{lt,Len,16384}, + {put_bits,2,2,U},{put_bits,Len,14,[1]}]]); +enc_length(Len, {{Lb,Ub},[]}, Aligned) -> + {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned), + NoExt = {put_bits,0,1,[1]}, + [{'cond',ExtConds0}] = enc_length(Len, no, Aligned), + Ext = {put_bits,1,1,[1]}, + ExtConds = prepend_to_cond(ExtConds0, Ext), + build_length_cond(Prefix, [[Check,NoExt|PutLen]|ExtConds]); +enc_length(Len, {Lb,Ub}, Aligned) when is_integer(Lb) -> + {Prefix,Check,PutLen} = per_enc_constrained(Len, Lb, Ub, Aligned), + build_length_cond(Prefix, [[Check|PutLen]]); +enc_length(Len, Sv, _Aligned) when is_integer(Sv) -> + [{'cond',[[{eq,Len,Sv}]]}]. + +put_bits_binary(Bin, _Unit, Aligned) when is_binary(Bin) -> + Sz = byte_size(Bin), + <<Int:Sz/unit:8>> = Bin, + {put_bits,Int,8*Sz,unit(1, Aligned)}; +put_bits_binary(Bin, Unit, Aligned) -> + {put_bits,Bin,binary,unit(Unit, Aligned)}. + +sub_lb(Val, 0) -> + {[],Val}; +sub_lb({var,Var}=Val0, Lb) -> + Val = {var,Var++"@sub"}, + {[{sub,Val0,Lb,Val}],Val}; +sub_lb(Val, Lb) when is_integer(Val) -> + {[],Val-Lb}. + +build_length_cond([{sub,Var0,Base,Var}]=Prefix, Cs) -> + %% Non-zero lower bound, such as: SIZE (50..200, ...) + Prefix++[{'cond',opt_length_nzlb(Cs, {Var0,Var,Base}, 0)}]; +build_length_cond([], Cs) -> + %% Zero lower bound, such as: SIZE (0..200, ...) + [{'cond',opt_length_zlb(Cs, 0)}]. + +opt_length_zlb([[{ult,Var,Val}|Actions]|T], Ub) -> + %% Since the SIZE constraint is zero-based, Var + %% must be greater than zero, and we can use + %% the slightly cheaper signed less than operator. + opt_length_zlb([[{lt,Var,Val}|Actions]|T], Ub); +opt_length_zlb([[{lt,_,Val}|_]=H|T], Ub) -> + if + Val =< Ub -> + %% A previous test has already matched. + opt_length_zlb(T, Ub); + true -> + [H|opt_length_zlb(T, max(Ub, Val))] + end; +opt_length_zlb([H|T], Ub) -> + [H|opt_length_zlb(T, Ub)]; +opt_length_zlb([], _) -> []. + +opt_length_nzlb([[{ult,Var,Val}|_]=H|T], {_,Var,Base}=St, _Ub) -> + [H|opt_length_nzlb(T, St, Base+Val)]; +opt_length_nzlb([[{lt,Var0,Val}|_]=H|T], {Var0,_,_}=St, Ub) -> + if + Val =< Ub -> + %% A previous test has already matched. + opt_length_nzlb(T, St, Ub); + true -> + [H|opt_length_nzlb(T, St, Val)] + end; +opt_length_nzlb([H|T], St, Ub) -> + [H|opt_length_nzlb(T, St, Ub)]; +opt_length_nzlb([], _, _) -> []. + +build_cond(Conds0) -> + case eval_cond(Conds0, gb_sets:empty()) of + [['_'|Actions]] -> + Actions; + Conds -> + [{'cond',Conds}] + end. + +eval_cond([['_',{'cond',Cs}]], Seen) -> + eval_cond(Cs, Seen); +eval_cond([[Cond|Actions]=H|T], Seen0) -> + case gb_sets:is_element(Cond, Seen0) of + false -> + Seen = gb_sets:insert(Cond, Seen0), + case eval_cond_1(Cond) of + false -> + eval_cond(T, Seen); + true -> + [['_'|Actions]]; + maybe -> + [H|eval_cond(T, Seen)] + end; + true -> + eval_cond(T, Seen0) + end; +eval_cond([], _) -> []. + +eval_cond_1({ult,I,N}) when is_integer(I), is_integer(N) -> + 0 =< I andalso I < N; +eval_cond_1({eq,[],[]}) -> + true; +eval_cond_1({eq,I,N}) when is_integer(I), is_integer(N) -> + I =:= N; +eval_cond_1({lt,I,N}) when is_integer(I), is_integer(N) -> + I < N; +eval_cond_1(_) -> maybe. + +prepend_to_cond([H|T], Code) -> + [prepend_to_cond_1(H, Code)|prepend_to_cond(T, Code)]; +prepend_to_cond([], _) -> []. + +prepend_to_cond_1([Check|T], Code) -> + [Check,Code|T]. + +enc_char_tab(notab) -> + notab; +enc_char_tab(Tab0) -> + Tab = tuple_to_list(Tab0), + First = hd(Tab), + {First-1,list_to_tuple(enc_char_tab_1(Tab, First, 0))}. + +enc_char_tab_1([H|T], H, I) -> + [I|enc_char_tab_1(T, H+1, I+1)]; +enc_char_tab_1([_|_]=T, H, I) -> + [ill|enc_char_tab_1(T, H+1, I)]; +enc_char_tab_1([], _, _) -> []. + +enumerated_constraint([_]) -> + [{'SingleValue',0}]; +enumerated_constraint(Root) -> + [{'ValueRange',{0,length(Root)-1}}]. + +per_enc_enumerated_root(NNL, Prefix, Val, Constr, Aligned) -> + per_enc_enumerated_root_1(NNL, Prefix, Val, Constr, Aligned, 0). + +per_enc_enumerated_root_1([{H,_}|T], Prefix, Val, Constr, Aligned, N) -> + [[{eq,Val,H}|Prefix++per_enc_integer_1(N, Constr, Aligned)]| + per_enc_enumerated_root_1(T, Prefix, Val, Constr, Aligned, N+1)]; +per_enc_enumerated_root_1([], _, _, _, _, _) -> []. + +per_enc_enumerated_ext(NNL, Val, Aligned) -> + per_enc_enumerated_ext_1(NNL, Val, Aligned, 0). + +per_enc_enumerated_ext_1([{H,_}|T], Val, Aligned, N) -> + [[{eq,Val,H},{put_bits,1,1,[1]}|per_enc_small_number(N, Aligned)]| + per_enc_enumerated_ext_1(T, Val, Aligned, N+1)]; +per_enc_enumerated_ext_1([], _, _, _) -> []. + +per_enc_small_length(Val0, Aligned) -> + {Sub,Val} = sub_lb(Val0, 1), + U = unit(1, Aligned), + Sub ++ build_cond([[{lt,Val,64},{put_bits,Val,7,[1]}], + [{lt,Val0,128},{put_bits,1,1,[1]}, + {put_bits,Val0,8,U}], + ['_',{put_bits,1,1,[1]}, + {put_bits,2,2,U},{put_bits,Val0,14,[1]}]]). + +constr_min_size(no) -> no; +constr_min_size({{Lb,_},[]}) when is_integer(Lb) -> Lb; +constr_min_size({Lb,_}) when is_integer(Lb) -> Lb; +constr_min_size(Sv) when is_integer(Sv) -> Sv. + +enc_mod(false) -> uper; +enc_mod(true) -> per. + +unit(U, false) -> [U]; +unit(U, true) -> [U,align]. + +unit(U, Aligned, Type, Lb, Ub) -> + case Aligned andalso is_aligned(Type, Lb, Ub) of + true -> [U,align]; + false -> [U] + end. + +opt_choice(Imm) -> + {Pb,T0} = lists:splitwith(fun({put_bits,V,_,_}) when is_integer(V) -> + true; + (_) -> + false + end, Imm), + try + {Prefix,T} = split_off_nonbuilding(T0), + Prefix ++ opt_choice_1(T, Pb) + catch + throw:impossible -> + Imm + end. + +opt_choice_1([{'cond',Cs0}], Pb) -> + case Cs0 of + [[C|Act]] -> + [{'cond',[[C|Pb++Act]]}]; + [[C|Act],['_',{error,_}]=Error] -> + [{'cond',[[C|Pb++Act],Error]}]; + _ -> + [{'cond',opt_choice_2(Cs0, Pb)}] + end; +opt_choice_1(_, _) -> throw(impossible). + +opt_choice_2([[C|[{put_bits,_,_,_}|_]=Act]|T], Pb) -> + [[C|Pb++Act]|opt_choice_2(T, Pb)]; +opt_choice_2([[_,{error,_}]=H|T], Pb) -> + [H|opt_choice_2(T, Pb)]; +opt_choice_2([_|_], _) -> + throw(impossible); +opt_choice_2([], _) -> []. + + +%%% +%%% Helper functions for code generation of open types. +%%% + +per_enc_open_type(Val0, {ToBinMod,ToBinFunc}, Aligned) -> + {B,[Val,Len,Bin]} = mk_vars(Val0, [len,bin]), + B ++ [{call,ToBinMod,ToBinFunc,[Val],Bin}, + {call,erlang,byte_size,[Bin],Len}| + per_enc_length(Bin, 8, Len, Aligned)]. + +enc_open_type([{'cond',Cs}], Aligned) -> + [{'cond',[[C|enc_open_type_1(Act, Aligned)] || [C|Act] <- Cs]}]; +enc_open_type(_, _) -> + throw(impossible). + +enc_open_type_1([{error,_}]=Imm, _) -> + Imm; +enc_open_type_1(Imm, Aligned) -> + NumBits = num_bits(Imm, 0), + Pad = case 8 - (NumBits rem 8) of + 8 -> []; + Pad0 -> [{put_bits,0,Pad0,[1]}] + end, + NumBytes = (NumBits+7) div 8, + enc_length(NumBytes, no, Aligned) ++ Imm ++ Pad. + +num_bits([{put_bits,_,N,[U|_]}|T], Sum) when is_integer(N) -> + num_bits(T, Sum+N*U); +num_bits([_|_], _) -> + throw(impossible); +num_bits([], Sum) -> Sum. + +per_enc_open_type_output([{apply,F,A}], Acc) -> + Dst = output_var(), + {Dst,lists:reverse(Acc, [{apply,F,A,{var,atom_to_list(Dst)}}])}; +per_enc_open_type_output([{call,M,F,A}], Acc) -> + Dst = output_var(), + {Dst,lists:reverse(Acc, [{call,M,F,A,{var,atom_to_list(Dst)}}])}; +per_enc_open_type_output([{'cond',Cs}], Acc) -> + Dst = output_var(), + {Dst,lists:reverse(Acc, [{'cond',Cs,{var,atom_to_list(Dst)}}])}; +per_enc_open_type_output([H|T], Acc) -> + per_enc_open_type_output(T, [H|Acc]). + +output_var() -> + asn1ct_name:new(enc), + Curr = asn1ct_name:curr(enc), + [H|T] = atom_to_list(Curr), + list_to_atom([H - ($a - $A)|T ++ "@output"]). + + +%%% +%%% Optimize list comprehensions (SEQUENCE OF/SET OF). +%%% + +opt_lc([{lc,[{call,erlang,iolist_to_binary,[Var],Bin}, + {call,erlang,byte_size,[Bin],LenVar}, + {'cond',[[{eq,LenVar,Len},{put_bits,Bin,_,[_|Align]}]]}], + Var,Val}]=Lc, LenImm) -> + %% Given a sequence of a fixed length string, such as + %% SEQUENCE OF OCTET STRING (SIZE (4)), attempt to rewrite to + %% a list comprehension that just checks the size, followed by + %% a conversion to binary: + %% + %% _ = [if length(Comp) =:= 4; byte_size(Comp) =:= 4 -> [] end || + %% Comp <- Sof], + %% [align|iolist_to_binary(Sof)] + + CheckImm = [{'cond',[[{eq,{expr,"length("++mk_val(Var)++")"},Len}], + [{eq,{expr,"byte_size("++mk_val(Var)++")"},Len}]]}], + Al = case Align of + [] -> + []; + [align] -> + [{put_bits,0,0,[1|Align]}] + end, + case Al =:= [] orelse + is_end_aligned(LenImm) orelse + lb_is_nonzero(LenImm) of + false -> + %% Not possible because an empty SEQUENCE OF would be + %% improperly aligned. Example: + %% + %% SEQUENCE (SIZE (0..3)) OF ... + + Lc; + true -> + %% Examples: + %% + %% SEQUENCE (SIZE (1..4)) OF ... + %% (OK because there must be at least one element) + %% + %% SEQUENCE OF ... + %% (OK because the length field will force alignment) + %% + Al ++ [{lc,CheckImm,Var,Val,{var,"_"}}, + {call,erlang,iolist_to_binary,[Val]}] + end; +opt_lc([{lc,ElementImm0,V,L}]=Lc, LenImm) -> + %% Attempt to hoist the alignment, putting after the length + %% and before the list comprehension: + %% + %% [Length, + %% align, + %% [Encode(Comp) || Comp <- Sof]] + %% + + case enc_opt_al_1(ElementImm0, 0) of + {ElementImm,0} -> + case is_end_aligned(LenImm) orelse + (is_beginning_aligned(ElementImm0) andalso + lb_is_nonzero(LenImm)) of + false -> + %% Examples: + %% + %% SEQUENCE (SIZE (0..3)) OF OCTET STRING + %% (An empty SEQUENCE OF would be improperly aligned) + %% + %% SEQUENCE (SIZE (1..3)) OF OCTET STRING (SIZE (0..4)) + %% (There would be an improper alignment before the + %% first element) + + Lc; + true -> + %% Examples: + %% + %% SEQUENCE OF INTEGER + %% SEQUENCE (SIZE (1..4)) OF INTEGER + %% SEQUENCE (SIZE (1..4)) OF INTEGER (0..256) + + [{put_bits,0,0,[1,align]},{lc,ElementImm,V,L}] + end; + _ -> + %% Unknown alignment, no alignment, or not aligned at the end. + %% Examples: + %% + %% SEQUENCE OF SomeConstructedType + %% SEQUENCE OF INTEGER (0..15) + + Lc + end. + +is_beginning_aligned([{'cond',Cs}]) -> + lists:all(fun([_|Act]) -> is_beginning_aligned(Act) end, Cs); +is_beginning_aligned([{error,_}|_]) -> true; +is_beginning_aligned([{put_bits,_,_,U}|_]) -> + case U of + [_,align] -> true; + [_] -> false + end; +is_beginning_aligned(Imm0) -> + case split_off_nonbuilding(Imm0) of + {[],_} -> false; + {[_|_],Imm} -> is_beginning_aligned(Imm) + end. + +is_end_aligned(Imm) -> + case enc_opt_al_1(Imm, unknown) of + {_,0} -> true; + {_,_} -> false + end. + +lb_is_nonzero([{sub,_,_,_}|_]) -> true; +lb_is_nonzero(_) -> false. + +%%% +%%% Attempt to combine two chunks of intermediate code. +%%% + +combine_imms(ImmA0, ImmB0) -> + {Prefix0,ImmA} = split_off_nonbuilding(ImmA0), + {Prefix1,ImmB} = split_off_nonbuilding(ImmB0), + Prefix = Prefix0 ++ Prefix1, + Combined = do_combine(ImmA ++ ImmB, 3.0), + Prefix ++ Combined. + +do_combine([{error,_}=Imm|_], _Budget) -> + [Imm]; +do_combine([{'cond',Cs0}|T], Budget0) -> + Budget = debit(Budget0, num_clauses(Cs0, 0)), + Cs = [[C|do_combine(Act++T, Budget)] || [C|Act] <- Cs0], + [{'cond',Cs}]; +do_combine([{put_bits,V,_,_}|_]=L, Budget) when is_integer(V) -> + {Pb,T} = collect_put_bits(L), + do_combine_put_bits(Pb, T,Budget); +do_combine(_, _) -> + throw(impossible). + +do_combine_put_bits(Pb, [], _Budget) -> + Pb; +do_combine_put_bits(Pb, [{'cond',Cs0}|T], Budget) -> + Cs = [case Act of + [{error,_}] -> + [C|Act]; + _ -> + [C|do_combine(Pb++Act, Budget)] + end || [C|Act] <- Cs0], + do_combine([{'cond',Cs}|T], Budget); +do_combine_put_bits(_, _, _) -> + throw(impossible). + +debit(Budget0, Alternatives) -> + case Budget0 - log2(Alternatives) of + Budget when Budget > 0.0 -> + Budget; + _ -> + throw(impossible) + end. + +num_clauses([[_,{error,_}]|T], N) -> + num_clauses(T, N); +num_clauses([_|T], N) -> + num_clauses(T, N+1); +num_clauses([], N) -> N. + +log2(N) -> + math:log(N) / math:log(2.0). + +collect_put_bits(Imm) -> + lists:splitwith(fun({put_bits,V,_,_}) when is_integer(V) -> true; + (_) -> false + end, Imm). + +%%% +%%% Simple common subexpression elimination to avoid fetching +%%% the same element twice. +%%% + +enc_cse([{assign,{var,V},E}=H|T]) -> + [H|enc_cse_1(T, E, V)]; +enc_cse(Imm) -> Imm. + +enc_cse_1([{assign,Dst,E}|T], E, V) -> + [{assign,Dst,V}|enc_cse_1(T, E, V)]; +enc_cse_1([{block,Bl}|T], E, V) -> + [{block,enc_cse_1(Bl, E, V)}|enc_cse_1(T, E, V)]; +enc_cse_1([H|T], E, V) -> + [H|enc_cse_1(T, E, V)]; +enc_cse_1([], _, _) -> []. + + +%%% +%%% Pre-process the intermediate code to simplify code generation. +%%% + +enc_pre_cg(Imm) -> + enc_pre_cg_1(Imm, outside_list, in_seq). + +enc_pre_cg_1([], _StL, _StB) -> + nil; +enc_pre_cg_1([H], StL, StB) -> + enc_pre_cg_2(H, StL, StB); +enc_pre_cg_1([H0|T0], StL, StB) -> + case is_nonbuilding(H0) of + true -> + H = enc_pre_cg_nonbuilding(H0, StL), + Seq = {seq,H,enc_pre_cg_1(T0, StL, in_seq)}, + case StB of + outside_seq -> {block,Seq}; + in_seq -> Seq + end; + false -> + H = enc_pre_cg_2(H0, in_head, outside_seq), + T = enc_pre_cg_1(T0, in_tail, outside_seq), + enc_make_cons(H, T) + end. + +enc_pre_cg_2(align, StL, _StB) -> + case StL of + in_head -> align; + in_tail -> {cons,align,nil} + end; +enc_pre_cg_2({apply,_,_}=Imm, _, _) -> + Imm; +enc_pre_cg_2({block,Bl0}, StL, StB) -> + enc_pre_cg_1(Bl0, StL, StB); +enc_pre_cg_2({call,_,_,_}=Imm, _, _) -> + Imm; +enc_pre_cg_2({call_gen,_,_,_,_}=Imm, _, _) -> + Imm; +enc_pre_cg_2({'cond',Cs0}, StL, _StB) -> + Cs = [{C,enc_pre_cg_1(Act, StL, outside_seq)} || [C|Act] <- Cs0], + {'cond',Cs}; +enc_pre_cg_2({error,_}=E, _, _) -> + E; +enc_pre_cg_2({lc,B0,V,L}, StL, _StB) -> + B = enc_pre_cg_1(B0, StL, outside_seq), + {lc,B,V,L}; +enc_pre_cg_2({put_bits,V,8,[1]}, StL, _StB) -> + case StL of + in_head -> {integer,V}; + in_tail -> {cons,{integer,V},nil}; + outside_list -> {cons,{integer,V},nil} + end; +enc_pre_cg_2({put_bits,V,binary,_}, _StL, _StB) -> + V; +enc_pre_cg_2({put_bits,_,_,[_]}=PutBits, _StL, _StB) -> + {binary,[PutBits]}; +enc_pre_cg_2({var,_}=Imm, _, _) -> Imm. + +enc_make_cons({binary,H}, {binary,T}) -> + {binary,H++T}; +enc_make_cons({binary,H0}, {cons,{binary,H1},T}) -> + {cons,{binary,H0++H1},T}; +enc_make_cons({integer,Int}, {binary,T}) -> + {binary,[{put_bits,Int,8,[1]}|T]}; +enc_make_cons(H, T) -> + {cons,H,T}. + +enc_pre_cg_nonbuilding({'cond',Cs0,Dst}, StL) -> + Cs = [{C,enc_pre_cg_1(Act, StL, outside_seq)} || [C|Act] <- Cs0], + {'cond',Cs,Dst}; +enc_pre_cg_nonbuilding({lc,B0,Var,List,Dst}, StL) -> + B = enc_pre_cg_1(B0, StL, outside_seq), + {lc,B,Var,List,Dst}; +enc_pre_cg_nonbuilding({'try',Try0,{P,Succ0},Else0,Dst}, StL) -> + Try = enc_pre_cg_1(Try0, StL, outside_seq), + Succ = enc_pre_cg_1(Succ0, StL, outside_seq), + Else = enc_pre_cg_1(Else0, StL, outside_seq), + {'try',Try,{P,Succ},Else,Dst}; +enc_pre_cg_nonbuilding(Imm, _) -> Imm. + + +%%% +%%% Code generation for encoding. +%%% + +enc_cg({cons,_,_}=Cons) -> + enc_cg_cons(Cons); +enc_cg({block,Imm}) -> + emit(["begin",nl]), + enc_cg(Imm), + emit([nl, + "end"]); +enc_cg({seq,First,Then}) -> + enc_cg(First), + emit([com,nl]), + enc_cg(Then); +enc_cg(align) -> + emit(align); +enc_cg({apply,F0,As0}) -> + As = enc_call_args(As0, ""), + case F0 of + {M,F} -> + emit([{asis,M},":",{asis,F},"(",As,")"]); + F when is_atom(F) -> + emit([{asis,F},"(",As,")"]) + end; +enc_cg({apply,F0,As0,Dst}) -> + As = enc_call_args(As0, ""), + emit([mk_val(Dst)," = "]), + case F0 of + {M,F} -> + emit([{asis,M},":",{asis,F},"(",As,")"]); + F when is_atom(F) -> + emit([{asis,F},"(",As,")"]) + end; +enc_cg({assign,Dst0,Expr}) -> + Dst = mk_val(Dst0), + emit([Dst," = ",Expr]); +enc_cg({binary,PutBits}) -> + emit(["<<",enc_cg_put_bits(PutBits, ""),">>"]); +enc_cg({call,M,F,As0}) -> + As = [mk_val(A) || A <- As0], + asn1ct_func:call(M, F, As); +enc_cg({call,M,F,As0,Dst}) -> + As = [mk_val(A) || A <- As0], + emit([mk_val(Dst)," = "]), + asn1ct_func:call(M, F, As); +enc_cg({call_gen,Prefix,Key,Gen,As0}) -> + As = [mk_val(A) || A <- As0], + asn1ct_func:call_gen(Prefix, Key, Gen, As); +enc_cg({'cond',Cs}) -> + enc_cg_cond(Cs); +enc_cg({'cond',Cs,Dst0}) -> + Dst = mk_val(Dst0), + emit([Dst," = "]), + enc_cg_cond(Cs); +enc_cg({error,Error}) when is_function(Error, 0) -> + Error(); +enc_cg({error,Var0}) -> + Var = mk_val(Var0), + emit(["exit({error,{asn1,{illegal_value,",Var,"}}})"]); +enc_cg({integer,Int}) -> + emit(mk_val(Int)); +enc_cg({lc,Body,Var,List}) -> + emit("["), + enc_cg(Body), + emit([" || ",mk_val(Var)," <- ",mk_val(List),"]"]); +enc_cg({lc,Body,Var,List,Dst}) -> + emit([mk_val(Dst)," = ["]), + enc_cg(Body), + emit([" || ",mk_val(Var)," <- ",mk_val(List),"]"]); +enc_cg(nil) -> + emit("[]"); +enc_cg({sub,Src0,Int,Dst0}) -> + Src = mk_val(Src0), + Dst = mk_val(Dst0), + emit([Dst," = ",Src," - ",Int]); +enc_cg({'try',Try,{P,Succ},Else,Dst}) -> + emit([mk_val(Dst)," = try "]), + enc_cg(Try), + emit([" of",nl, + mk_val(P)," ->",nl]), + enc_cg(Succ), + emit([nl, + "catch throw:invalid ->",nl]), + enc_cg(Else), + emit([nl, + "end"]); +enc_cg({var,V}) -> + emit(V). + +enc_cg_cons(Cons) -> + emit("["), + enc_cg_cons_1(Cons), + emit("]"). + +enc_cg_cons_1({cons,H,{cons,_,_}=T}) -> + enc_cg(H), + emit([com,nl]), + enc_cg_cons_1(T); +enc_cg_cons_1({cons,H,nil}) -> + enc_cg(H); +enc_cg_cons_1({cons,H,T}) -> + enc_cg(H), + emit("|"), + enc_cg(T). + +enc_call_args([A|As], Sep) -> + [Sep,mk_val(A)|enc_call_args(As, ", ")]; +enc_call_args([], _) -> []. + +enc_cg_cond([{'_',Action}]) -> + enc_cg(Action); +enc_cg_cond(Cs) -> + emit("if "), + enc_cg_cond(Cs, ""), + emit([nl, + "end"]). + +enc_cg_cond([C|Cs], Sep) -> + emit(Sep), + enc_cg_cond_1(C), + enc_cg_cond(Cs, [";",nl]); +enc_cg_cond([], _) -> ok. + +enc_cg_cond_1({Cond,Action}) -> + enc_cond_term(Cond), + emit([" ->",nl]), + enc_cg(Action). + +enc_cond_term('_') -> + emit("true"); +enc_cond_term({ult,Var0,Int}) -> + Var = mk_val(Var0), + N = uper_num_bits(Int), + case 1 bsl N of + Int -> + emit([Var," bsr ",N," =:= 0"]); + _ -> + emit(["0 =< ",Var,", ",Var," < ",Int]) + end; +enc_cond_term({eq,Var0,Term}) -> + Var = mk_val(Var0), + emit([Var," =:= ",{asis,Term}]); +enc_cond_term({ge,Var0,Int}) -> + Var = mk_val(Var0), + emit([Var," >= ",Int]); +enc_cond_term({lt,Var0,Int}) -> + Var = mk_val(Var0), + emit([Var," < ",Int]). + +enc_cg_put_bits([{put_bits,Val0,N,[1]}|T], Sep) -> + Val = mk_val(Val0), + [[Sep,Val,":",integer_to_list(N)]|enc_cg_put_bits(T, ",")]; +enc_cg_put_bits([], _) -> []. + +mk_val({var,Str}) -> Str; +mk_val({expr,Str}) -> Str; +mk_val(Int) when is_integer(Int) -> integer_to_list(Int); +mk_val(Other) -> {asis,Other}. + +%%% +%%% Generate a function that maps a name of a bit position +%%% to the bit position. +%%% + +bit_string_name2pos_fun(NNL, Src) -> + {call_gen,"bit_string_name2pos_",NNL, + fun(Fd, Name) -> gen_name2pos(Fd, Name, NNL) end,[Src]}. + +gen_name2pos(Fd, Name, Names) -> + Cs0 = gen_name2pos_cs(Names, Name), + Cs = Cs0 ++ [bit_clause(Name),nil_clause(),invalid_clause()], + F = {function,1,Name,1,Cs}, + file:write(Fd, [erl_pp:function(F)]). + +gen_name2pos_cs([{K,V}|T], Name) -> + P = [{cons,0,{atom,0,K},{var,0,'T'}}], + B = [{cons,0,{integer,0,V},{call,0,{atom,0,Name},[{var,0,'T'}]}}], + [{clause,0,P,[],B}|gen_name2pos_cs(T, Name)]; +gen_name2pos_cs([], _) -> []. + +bit_clause(Name) -> + VarT = {var,0,'T'}, + VarPos = {var,0,'Pos'}, + P = [{cons,0,{tuple,0,[{atom,0,bit},VarPos]},VarT}], + G = [[{call,0,{atom,0,is_integer},[VarPos]}]], + B = [{cons,0,VarPos,{call,0,{atom,0,Name},[VarT]}}], + {clause,0,P,G,B}. + +nil_clause() -> + P = B = [{nil,0}], + {clause,0,P,[],B}. + +invalid_clause() -> + P = [{var,0,'_'}], + B = [{call,0,{atom,0,throw},[{atom,0,invalid}]}], + {clause,0,P,[],B}. + +%%% +%%% Hoist alignment to reduce the number of list elements in +%%% encode. Fewer lists elements means faster traversal in +%%% complete/{2,3}. +%%% +%%% For example, the following data sequence: +%%% +%%% [align,<<1:1,0:1>>,[align,<<Len:16>>|Data]] +%%% +%%% can be rewritten to: +%%% +%%% [align,<<1:1,0:1,0:6>>,[<<Len:16>>|Data]] +%%% +%%% The change from the literal <<1:1,0:1>> to <<1:1,0:1,0:6>> +%%% comes for free, and we have eliminated one element of the +%%% sub list. +%%% +%%% We must be careful not to rewrite: +%%% +%%% [<<1:1,0:1>>,[align,<<Len:16>>|Data]] +%%% +%%% to: +%%% +%%% [[<<1:1,0:1>>,align],[<<Len:16>>|Data]] +%%% +%%% because even though [<<1:0,0:1>>,align] is a literal and does +%%% not add any additional construction cost, there is one more +%%% sub list that needs to be traversed. +%%% + +enc_hoist_align(Imm0) -> + Imm = enc_hoist_align_reverse(Imm0, []), + enc_hoist_align(Imm, false, []). + +enc_hoist_align_reverse([H|T], Acc) -> + case enc_opt_al_1([H], 0) of + {[H],_} -> + enc_hoist_align_reverse(T, [H|Acc]); + {_,_} -> + lists:reverse(T, [H,stop|Acc]) + end; +enc_hoist_align_reverse([], Acc) -> Acc. + +enc_hoist_align([stop|T], _Aligned, Acc) -> + lists:reverse(T, Acc); +enc_hoist_align([{block,Bl0}|T], Aligned, Acc) -> + Bl = case Aligned of + false -> Bl0; + true -> enc_hoist_block(Bl0) + end, + case is_beginning_aligned(Bl) of + false -> + enc_hoist_align(T, false, [{block,Bl}|Acc]); + true -> + enc_hoist_align(T, true, [{put_bits,0,0,[1,align]}, + {block,Bl}|Acc]) + end; +enc_hoist_align([H|T], _, Acc) -> + enc_hoist_align(T, false, [H|Acc]); +enc_hoist_align([], _, Acc) -> Acc. + +enc_hoist_block(Bl) -> + try + enc_hoist_block_1(lists:reverse(Bl)) + catch + throw:impossible -> + Bl + end. + +enc_hoist_block_1([{'cond',Cs0}|T]) -> + Cs = [[C|enc_hoist_block_2(Act)] || [C|Act] <- Cs0], + H = {'cond',Cs}, + lists:reverse(T, [H]); +enc_hoist_block_1(_) -> + throw(impossible). + +enc_hoist_block_2([{'cond',_}|_]=L) -> + enc_hoist_block(L); +enc_hoist_block_2([{error,_}]=L) -> + L; +enc_hoist_block_2([]) -> + [{put_bits,0,0,[1,align]}]; +enc_hoist_block_2(L) -> + case lists:last(L) of + {put_bits,_,_,_} -> + L ++ [{put_bits,0,0,[1,align]}]; + _ -> + throw(impossible) + end. + +%%% +%%% Optimize alignment for encoding. +%%% + +enc_opt_al(Imm0) -> + {Imm,_} = enc_opt_al_1(Imm0, unknown), + Imm. + +enc_opt_al_1([{'cond',Cs0,Dst},{call,per,complete,[Dst],Bin}|T0], Al0) -> + {Cs1,{M,F}} = enc_opt_al_prepare_cond(Cs0), + {Cs,_} = enc_opt_al_cond(Cs1, 0), + {T,Al} = enc_opt_al_1([{call,M,F,[Dst],Bin}|T0], Al0), + {[{'cond',Cs,Dst}|T],Al}; +enc_opt_al_1([H0|T0], Al0) -> + {H,Al1} = enc_opt_al(H0, Al0), + {T,Al} = enc_opt_al_1(T0, Al1), + {H++T,Al}; +enc_opt_al_1([], Al) -> {[],Al}. + +enc_opt_al({apply,_,_,_}=Imm, Al) -> + {[Imm],Al}; +enc_opt_al({assign,_,_}=Imm, Al) -> + {[Imm],Al}; +enc_opt_al({block,Bl0}, Al0) -> + {Bl,Al} = enc_opt_al_1(Bl0, Al0), + {[{block,Bl}],Al}; +enc_opt_al({call,erlang,iolist_to_binary,[_]}=Imm, Al) -> + {[Imm],Al}; +enc_opt_al({call,per_common,encode_fragmented,[_,U]}=Call, Al) -> + case U rem 8 of + 0 -> {[Call],Al}; + _ -> {[Call],unknown} + end; +enc_opt_al({call,per_common,encode_unconstrained_number,[_]}=Call, _) -> + {[Call],0}; +enc_opt_al({call,_,_,_,_}=Call, Al) -> + {[Call],Al}; +enc_opt_al({'cond',Cs0}, Al0) -> + {Cs,Al} = enc_opt_al_cond(Cs0, Al0), + {[{'cond',Cs}],Al}; +enc_opt_al({error,_}=Imm, Al) -> + {[Imm],Al}; +enc_opt_al({put_bits,V,N,[U,align]}, Al0) when Al0 rem 8 =:= 0 -> + Al = if + is_integer(N) -> N*U; + N =:= binary, U rem 8 =:= 0 -> 0; + true -> unknown + end, + {[{put_bits,V,N,[U]}],Al}; +enc_opt_al({put_bits,V,binary,[U,align]}, Al0) when is_integer(Al0) -> + N = 8 - (Al0 rem 8), + Al = case U rem 8 of + 0 -> 0; + _ -> unknown + end, + {[{put_bits,0,N,[1]},{put_bits,V,binary,[U]}],Al}; +enc_opt_al({put_bits,V,N0,[U,align]}, Al0) when is_integer(N0), is_integer(Al0) -> + N = N0 + (8 - Al0 rem 8), + Al = N0*U, + {[{put_bits,V,N,[1]}],Al}; +enc_opt_al({put_bits,_,N,[U,align]}=PutBits, _) when is_integer(N) -> + {[PutBits],N*U}; +enc_opt_al({put_bits,_,binary,[U,align]}=PutBits, _) when U rem 8 =:= 0 -> + {[PutBits],0}; +enc_opt_al({put_bits,_,N,[U]}=PutBits, Al) when is_integer(N), is_integer(Al) -> + {[PutBits],Al+N*U}; +enc_opt_al({put_bits,_,binary,[U]}=PutBits, Al) when U rem 8 =:= 0 -> + {[PutBits],Al}; +enc_opt_al({sub,_,_,_}=Imm, Al) -> + {[Imm],Al}; +enc_opt_al(Imm, _) -> + {[Imm],unknown}. + +enc_opt_al_cond(Cs0, Al0) -> + enc_opt_al_cond_1(Cs0, Al0, [], []). + +enc_opt_al_cond_1([['_',{error,_}]=C|Cs], Al, CAcc, AAcc) -> + enc_opt_al_cond_1(Cs, Al, [C|CAcc], AAcc); +enc_opt_al_cond_1([[C|Act0]|Cs0], Al0, CAcc, AAcc) -> + {Act,Al1} = enc_opt_al_1(Act0, Al0), + Al = if + Al1 =:= unknown -> Al1; + true -> Al1 rem 8 + end, + enc_opt_al_cond_1(Cs0, Al0, [[C|Act]|CAcc], [Al|AAcc]); +enc_opt_al_cond_1([], _, CAcc, AAcc) -> + Al = case lists:usort(AAcc) of + [] -> unknown; + [Al0] -> Al0; + [_|_] -> unknown + end, + {lists:reverse(CAcc),Al}. + +enc_opt_al_prepare_cond(Cs0) -> + try enc_opt_al_prepare_cond_1(Cs0) of + Cs -> + {Cs,{erlang,iolist_to_binary}} + catch + throw:impossible -> + {Cs0,{per,complete}} + end. + +enc_opt_al_prepare_cond_1(Cs) -> + [[C|enc_opt_al_prepare_cond_2(Act)] || [C|Act] <- Cs]. + +enc_opt_al_prepare_cond_2([{put_bits,_,binary,[U|_]}|_]) when U rem 8 =/= 0 -> + throw(impossible); +enc_opt_al_prepare_cond_2([{put_bits,_,_,_}=H|T]) -> + [H|enc_opt_al_prepare_cond_2(T)]; +enc_opt_al_prepare_cond_2([{call,per_common,encode_fragmented,_}=H|T]) -> + [H|enc_opt_al_prepare_cond_2(T)]; +enc_opt_al_prepare_cond_2([_|_]) -> + throw(impossible); +enc_opt_al_prepare_cond_2([]) -> + [{put_bits,0,0,[1,align]}]. + + +%%% +%%% For the aligned PER format, fix up the intermediate format +%%% before code generation. Code generation will be somewhat +%%% easier if 'align' appear as a separate instruction. +%%% + +per_fixup([{apply,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{apply,_,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{block,Block}|T]) -> + [{block,per_fixup(Block)}|per_fixup(T)]; +per_fixup([{'assign',_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{'cond',Cs0}|T]) -> + Cs = [[C|per_fixup(Act)] || [C|Act] <- Cs0], + [{'cond',Cs}|per_fixup(T)]; +per_fixup([{'cond',Cs0,Dst}|T]) -> + Cs = [[C|per_fixup(Act)] || [C|Act] <- Cs0], + [{'cond',Cs,Dst}|per_fixup(T)]; +per_fixup([{call,_,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{call,_,_,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{call_gen,_,_,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{error,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{lc,B,V,L}|T]) -> + [{lc,per_fixup(B),V,L}|per_fixup(T)]; +per_fixup([{lc,B,V,L,Dst}|T]) -> + [{lc,per_fixup(B),V,L,Dst}|per_fixup(T)]; +per_fixup([{sub,_,_,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([{'try',Try0,{P,Succ0},Else0,Dst}|T]) -> + Try = per_fixup(Try0), + Succ = per_fixup(Succ0), + Else = per_fixup(Else0), + [{'try',Try,{P,Succ},Else,Dst}|per_fixup(T)]; +per_fixup([{put_bits,_,_,_}|_]=L) -> + fixup_put_bits(L); +per_fixup([{var,_}=H|T]) -> + [H|per_fixup(T)]; +per_fixup([]) -> []. + +fixup_put_bits([{put_bits,0,0,[_,align]}|T]) -> + [align|fixup_put_bits(T)]; +fixup_put_bits([{put_bits,0,0,_}|T]) -> + fixup_put_bits(T); +fixup_put_bits([{put_bits,V,N,[U,align]}|T]) -> + [align,{put_bits,V,N,[U]}|fixup_put_bits(T)]; +fixup_put_bits([{put_bits,_,_,_}=H|T]) -> + [H|fixup_put_bits(T)]; +fixup_put_bits(Other) -> per_fixup(Other). + %% effective_constraint(Type,C) %% Type = atom() %% C = [C1,...] diff --git a/lib/asn1/src/asn1ct_value.erl b/lib/asn1/src/asn1ct_value.erl index ecdfa3f645..992210232f 100644 --- a/lib/asn1/src/asn1ct_value.erl +++ b/lib/asn1/src/asn1ct_value.erl @@ -32,11 +32,11 @@ from_type(M,Typename) -> - case asn1_db:dbget(M,Typename) of - undefined -> + case asn1_db:dbload(M) of + error -> {error,{not_found,{M,Typename}}}; - Tdef when is_record(Tdef,typedef) -> - Type = Tdef#typedef.typespec, + ok -> + #typedef{typespec=Type} = asn1_db:dbget(M, Typename), from_type(M,[Typename],Type); Vdef when is_record(Vdef,valuedef) -> from_value(Vdef); diff --git a/lib/asn1/src/asn1rtt_ber.erl b/lib/asn1/src/asn1rtt_ber.erl index b5429fe324..583ff790b7 100644 --- a/lib/asn1/src/asn1rtt_ber.erl +++ b/lib/asn1/src/asn1rtt_ber.erl @@ -22,8 +22,7 @@ %% encoding / decoding of BER -export([ber_decode_nif/1,ber_decode_erlang/1,match_tags/2,ber_encode/1]). --export([encode_tags/2, - encode_tags/3, +-export([encode_tags/3, skip_ExtensionAdditions/2]). -export([encode_boolean/2,decode_boolean/2, encode_integer/2,encode_integer/3, diff --git a/lib/asn1/src/asn1rtt_per.erl b/lib/asn1/src/asn1rtt_per.erl index 9f4b7500d8..672c84593c 100644 --- a/lib/asn1/src/asn1rtt_per.erl +++ b/lib/asn1/src/asn1rtt_per.erl @@ -18,62 +18,7 @@ %% -module(asn1rtt_per). --export([setext/1, fixextensions/2, - skipextensions/3, - set_choice/3,encode_integer/2, - encode_small_number/1, - encode_constrained_number/2, - encode_length/1, - encode_length/2, - encode_bit_string/3, - encode_object_identifier/1, - encode_relative_oid/1, - complete/1, - encode_open_type/1, - encode_GeneralString/2, - encode_GraphicString/2, - encode_TeletexString/2, - encode_VideotexString/2, - encode_ObjectDescriptor/2, - encode_UTF8String/1, - encode_octet_string/2, - encode_known_multiplier_string/4, - octets_to_complete/2]). - --define('16K',16384). --define('32K',32768). --define('64K',65536). - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% setext(true|false) -> CompleteList -%% - -setext(false) -> - [0]; -setext(true) -> - [1]. - -fixextensions({ext,ExtPos,ExtNum},Val) -> - case fixextensions(ExtPos,ExtNum+ExtPos,Val,0) of - 0 -> []; - ExtBits -> - [encode_small_length(ExtNum)|pre_complete_bits(ExtNum,ExtBits)] - end. - -fixextensions(Pos,MaxPos,_,Acc) when Pos >= MaxPos -> - Acc; -fixextensions(Pos,ExtPos,Val,Acc) -> - Bit = case catch(element(Pos+1,Val)) of - asn1_NOVALUE -> - 0; - asn1_NOEXTVALUE -> - 0; - {'EXIT',_} -> - 0; - _ -> - 1 - end, - fixextensions(Pos+1,ExtPos,Val,(Acc bsl 1)+Bit). +-export([skipextensions/3,complete/1]). skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) -> Prev = Nr - 1, @@ -95,270 +40,6 @@ align(BitStr) when is_bitstring(BitStr) -> <<_:AlignBits,Rest/binary>> = BitStr, Rest. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% set_choice(Alt,Choices,Altnum) -> ListofBitSettings -%% Alt = atom() -%% Altnum = integer() | {integer(),integer()}% number of alternatives -%% Choices = [atom()] | {[atom()],[atom()]} -%% When Choices is a tuple the first list is the Rootset and the -%% second is the Extensions and then Altnum must also be a tuple with the -%% lengths of the 2 lists -%% -set_choice(Alt,{L1,L2},{Len1,_Len2}) -> - case set_choice_tag(Alt,L1) of - N when is_integer(N), Len1 > 1 -> - [0, % the value is in the root set - encode_constrained_number({0,Len1-1},N)]; - N when is_integer(N) -> - [0]; % no encoding if only 0 or 1 alternative - false -> - [1, % extension value - case set_choice_tag(Alt, L2) of - N2 when is_integer(N2) -> - encode_small_number(N2); - false -> - unknown_choice_alt - end] - end; -set_choice(Alt, L, Len) -> - case set_choice_tag(Alt, L) of - N when is_integer(N), Len > 1 -> - encode_constrained_number({0,Len-1},N); - N when is_integer(N) -> - []; % no encoding if only 0 or 1 alternative - false -> - [unknown_choice_alt] - end. - -set_choice_tag(Alt,Choices) -> - set_choice_tag(Alt,Choices,0). - -set_choice_tag(Alt,[Alt|_Rest],Tag) -> - Tag; -set_choice_tag(Alt,[_H|Rest],Tag) -> - set_choice_tag(Alt,Rest,Tag+1); -set_choice_tag(_Alt,[],_Tag) -> - false. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_open_type(Constraint, Value) -> CompleteList -%% Value = list of bytes of an already encoded value (the list must be flat) -%% | binary -%% Contraint = not used in this version -%% -encode_open_type(Val) -> - case byte_size(Val) of - Size when Size > 255 -> - [encode_length(Size),21,<<Size:16>>,Val]; % octets implies align - Size -> - [encode_length(Size),20,Size,Val] - end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_integer(Constraint, Value) -> CompleteList -%% -encode_integer([{Rc,_Ec}],Val) when is_tuple(Rc) -> - try - [0|encode_integer([Rc], Val)] - catch - _:{error,{asn1,_}} -> - [1|encode_unconstrained_number(Val)] - end; -encode_integer([], Val) -> - encode_unconstrained_number(Val); -%% The constraint is the effective constraint, and in this case is a number -encode_integer([{'SingleValue',V}], V) -> - []; -encode_integer([{'ValueRange',{Lb,Ub}=VR,Range,PreEnc}],Val) - when Val >= Lb, Ub >= Val -> - %% this case when NamedNumberList - encode_constrained_number(VR, Range, PreEnc, Val); -encode_integer([{'ValueRange',{Lb,'MAX'}}], Val) when Lb =< Val -> - encode_semi_constrained_number(Lb, Val); -encode_integer([{'ValueRange',{'MIN',_}}], Val) -> - encode_unconstrained_number(Val); -encode_integer([{'ValueRange',VR={_Lb,_Ub}}], Val) -> - encode_constrained_number(VR, Val); -encode_integer(_,Val) -> - exit({error,{asn1,{illegal_value,Val}}}). - - -%% X.691:10.6 Encoding of a normally small non-negative whole number -%% Use this for encoding of CHOICE index if there is an extension marker in -%% the CHOICE -encode_small_number(Val) when Val < 64 -> - [10,7,Val]; -encode_small_number(Val) -> - [1|encode_semi_constrained_number(0, Val)]. - -%% X.691:10.7 Encoding of a semi-constrained whole number -encode_semi_constrained_number(Lb, Val) -> - Val2 = Val - Lb, - Oct = eint_positive(Val2), - Len = length(Oct), - if - Len < 128 -> - [20,Len+1,Len|Oct]; - Len < 256 -> - [encode_length(Len),20,Len|Oct]; - true -> - [encode_length(Len),21,<<Len:16>>|Oct] - end. - -encode_constrained_number({Lb,_Ub},_Range,{bits,N},Val) -> - Val2 = Val-Lb, - [10,N,Val2]; -encode_constrained_number({Lb,_Ub},_Range,{octets,N},Val) when N < 256-> - %% N is 8 or 16 (1 or 2 octets) - Val2 = Val-Lb, - [20,N,Val2]; -encode_constrained_number({Lb,_Ub},_Range,{octets,N},Val) -> % N>255 - %% N is 8 or 16 (1 or 2 octets) - Val2 = Val-Lb, - [21,<<N:16>>,Val2]; -encode_constrained_number({Lb,_Ub},Range,_,Val) -> - Val2 = Val-Lb, - if - Range =< 16#1000000 -> % max 3 octets - Octs = eint_positive(Val2), - L = length(Octs), - [encode_length({1,3},L),[20,L,Octs]]; - Range =< 16#100000000 -> % max 4 octets - Octs = eint_positive(Val2), - L = length(Octs), - [encode_length({1,4},L),[20,L,Octs]]; - Range =< 16#10000000000 -> % max 5 octets - Octs = eint_positive(Val2), - L = length(Octs), - [encode_length({1,5},L),[20,L,Octs]]; - true -> - exit({not_supported,{integer_range,Range}}) - end. - -encode_constrained_number({Lb,Ub}, Val) when Val >= Lb, Ub >= Val -> - Range = Ub - Lb + 1, - Val2 = Val - Lb, - if - Range == 1 -> []; - Range == 2 -> - [Val2]; - Range =< 4 -> - [10,2,Val2]; - Range =< 8 -> - [10,3,Val2]; - Range =< 16 -> - [10,4,Val2]; - Range =< 32 -> - [10,5,Val2]; - Range =< 64 -> - [10,6,Val2]; - Range =< 128 -> - [10,7,Val2]; - Range =< 255 -> - [10,8,Val2]; - Range =< 256 -> - [20,1,Val2]; - Range =< 65536 -> - [20,2,<<Val2:16>>]; - Range =< (1 bsl (255*8)) -> - Octs = binary:encode_unsigned(Val2), - RangeOcts = binary:encode_unsigned(Range - 1), - OctsLen = byte_size(Octs), - RangeOctsLen = byte_size(RangeOcts), - LengthBitsNeeded = minimum_bits(RangeOctsLen - 1), - [10,LengthBitsNeeded,OctsLen-1,20,OctsLen,Octs]; - true -> - exit({not_supported,{integer_range,Range}}) - end; -encode_constrained_number({_,_},Val) -> - exit({error,{asn1,{illegal_value,Val}}}). - -%% For some reason the minimum bits needed in the length field in -%% the encoding of constrained whole numbers must always be at least 2? -minimum_bits(N) when N < 4 -> 2; -minimum_bits(N) when N < 8 -> 3; -minimum_bits(N) when N < 16 -> 4; -minimum_bits(N) when N < 32 -> 5; -minimum_bits(N) when N < 64 -> 6; -minimum_bits(N) when N < 128 -> 7; -minimum_bits(_N) -> 8. - -%% X.691:10.8 Encoding of an unconstrained whole number - -encode_unconstrained_number(Val) -> - Oct = if - Val >= 0 -> - eint(Val, []); - true -> - enint(Val, []) - end, - Len = length(Oct), - if - Len < 128 -> - [20,Len + 1,Len|Oct]; - Len < 256 -> - [20,Len + 2,<<2:2,Len:14>>|Oct]; - true -> - [encode_length(Len),21,<<Len:16>>|Oct] - end. - -%% used for positive Values which don't need a sign bit -%% returns a list -eint_positive(Val) -> - case eint(Val,[]) of - [0,B1|T] -> - [B1|T]; - T -> - T - end. - - -eint(0, [B|Acc]) when B < 128 -> - [B|Acc]; -eint(N, Acc) -> - eint(N bsr 8, [N band 16#ff| Acc]). - -enint(-1, [B1|T]) when B1 > 127 -> - [B1|T]; -enint(N, Acc) -> - enint(N bsr 8, [N band 16#ff|Acc]). - -%% X.691:10.9 Encoding of a length determinant -%%encode_small_length(undefined,Len) -> % null means no UpperBound -%% encode_small_number(Len). - -%% X.691:10.9.3.5 -%% X.691:10.9.3.7 -encode_length(Len) -> % unconstrained - if - Len < 128 -> - [20,1,Len]; - Len < 16384 -> - <<20,2,2:2,Len:14>>; - true -> % should be able to endode length >= 16384 i.e. fragmented length - exit({error,{asn1,{encode_length,{nyi,above_16k}}}}) - end. - -encode_length({C,[]}, Len) -> - case C of - {Lb,Ub}=Vr when Lb =< Len, Len =< Ub -> - [0|encode_constrained_number(Vr, Len)]; - _ -> - [1|encode_length(Len)] - end; -encode_length(Len, Len) -> - []; -encode_length(Vr, Len) -> - encode_constrained_number(Vr, Len). - -%% X.691 10.9.3.4 (only used for length of bitmap that prefixes extension -%% additions in a sequence or set -encode_small_length(Len) when Len =< 64 -> - [10,7,Len-1]; -encode_small_length(Len) -> - [1,encode_length(Len)]. - - decode_length(Buffer) -> % un-constrained case align(Buffer) of <<0:1,Oct:7,Rest/binary>> -> @@ -370,511 +51,70 @@ decode_length(Buffer) -> % un-constrained exit({error,{asn1,{decode_length,{nyi,above_16k}}}}) end. -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% bitstring NamedBitList -%% Val can be of: -%% - [identifiers] where only named identifers are set to one, -%% the Constraint must then have some information of the -%% bitlength. -%% - [list of ones and zeroes] all bits -%% - integer value representing the bitlist -%% C is constraint Len, only valid when identifiers - - -%% when the value is a list of {Unused,BinBits}, where -%% Unused = integer(), -%% BinBits = binary(). - -encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) -> - PadLen = (8 - (bit_size(Bits) band 7)) band 7, - Compact = {PadLen,<<Bits/bitstring,0:PadLen>>}, - encode_bin_bit_string(C, Compact, NamedBitList); -encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList) - when is_integer(Unused), is_binary(BinBits) -> - encode_bin_bit_string(C,Bin,NamedBitList); - -%% when the value is a list of named bits - -encode_bit_string(C, LoNB=[FirstVal | _RestVal], NamedBitList) when is_atom(FirstVal) -> - ToSetPos = get_all_bitposes(LoNB, NamedBitList, []), - BitList = make_and_set_list(ToSetPos,0), - encode_bit_string(C,BitList,NamedBitList);% consider the constraint - -encode_bit_string(C, BL=[{bit,_} | _RestVal], NamedBitList) -> - ToSetPos = get_all_bitposes(BL, NamedBitList, []), - BitList = make_and_set_list(ToSetPos,0), - encode_bit_string(C,BitList,NamedBitList); - -%% when the value is a list of ones and zeroes -encode_bit_string(Int, BitListValue, _) - when is_list(BitListValue),is_integer(Int),Int =< 16 -> - %% The type is constrained by a single value size constraint - %% range_check(Int,length(BitListValue)), - [40,Int,length(BitListValue),BitListValue]; -encode_bit_string(Int, BitListValue, _) - when is_list(BitListValue),is_integer(Int), Int =< 255 -> - %% The type is constrained by a single value size constraint - %% range_check(Int,length(BitListValue)), - [2,40,Int,length(BitListValue),BitListValue]; -encode_bit_string(Int, BitListValue, _) - when is_list(BitListValue),is_integer(Int), Int < ?'64K' -> - {Code,DesiredLength,Length} = - case length(BitListValue) of - B1 when B1 > Int -> - exit({error,{'BIT_STRING_length_greater_than_SIZE', - Int,BitListValue}}); - B1 when B1 =< 255,Int =< 255 -> - {40,Int,B1}; - B1 when B1 =< 255 -> - {42,<<Int:16>>,B1}; - B1 -> - {43,<<Int:16>>,<<B1:16>>} - end, - %% The type is constrained by a single value size constraint - [2,Code,DesiredLength,Length,BitListValue]; -encode_bit_string(no, BitListValue,[]) - when is_list(BitListValue) -> - [encode_length(length(BitListValue)), - 2|BitListValue]; -encode_bit_string({{Fix,Fix},Ext}, BitListValue,[]) - when is_integer(Fix), is_list(Ext) -> - case length(BitListValue) of - Len when Len =< Fix -> - [0|encode_bit_string(Fix, BitListValue, [])]; - _ -> - [1|encode_bit_string(no, BitListValue, [])] - end; -encode_bit_string(C, BitListValue,[]) - when is_list(BitListValue) -> - [encode_length(C, length(BitListValue)), - 2|BitListValue]; -encode_bit_string(no, BitListValue,_NamedBitList) - when is_list(BitListValue) -> - %% this case with an unconstrained BIT STRING can be made more efficient - %% if the complete driver can take a special code so the length field - %% is encoded there. - NewBitLVal = lists:reverse(lists:dropwhile(fun(0)->true;(1)->false end, - lists:reverse(BitListValue))), - [encode_length(length(NewBitLVal)),2|NewBitLVal]; -encode_bit_string({{Fix,Fix},Ext}, BitListValue, NamedBitList) - when is_integer(Fix), is_list(Ext) -> - case length(BitListValue) of - Len when Len =< Fix -> - [0|encode_bit_string(Fix, BitListValue, NamedBitList)]; - _ -> - [1|encode_bit_string(no, BitListValue, NamedBitList)] - end; -encode_bit_string(C, BitListValue, _NamedBitList) - when is_list(BitListValue) -> % C = {_,'MAX'} - NewBitLVal = bit_string_trailing_zeros(BitListValue, C), - [encode_length(C, length(NewBitLVal)),2|NewBitLVal]; - - -%% when the value is an integer -encode_bit_string(C, IntegerVal, NamedBitList) when is_integer(IntegerVal)-> - BitList = int_to_bitlist(IntegerVal), - encode_bit_string(C,BitList,NamedBitList). - -bit_string_trailing_zeros(BitList,C) when is_integer(C) -> - bit_string_trailing_zeros1(BitList,C,C); -bit_string_trailing_zeros(BitList,{Lb,Ub}) when is_integer(Lb) -> - bit_string_trailing_zeros1(BitList,Lb,Ub); -bit_string_trailing_zeros(BitList,{{Lb,Ub},_}) when is_integer(Lb) -> - bit_string_trailing_zeros1(BitList,Lb,Ub); -bit_string_trailing_zeros(BitList,_) -> - BitList. - -bit_string_trailing_zeros1(BitList,Lb,Ub) -> - case length(BitList) of - Lb -> BitList; - B when B < Lb -> BitList++lists:duplicate(Lb-B, 0); - D -> F = fun(L,LB,LB,_,_)->lists:reverse(L); - ([0|R],L1,LB,UB,Fun)->Fun(R,L1-1,LB,UB,Fun); - (L,L1,_,UB,_)when L1 =< UB -> lists:reverse(L); - (_,_L1,_,_,_) ->exit({error,{list_length_BIT_STRING, - BitList}}) end, - F(lists:reverse(BitList),D,Lb,Ub,F) - end. - -%% encode_bin_bit_string/3, when value is a tuple of Unused and BinBits. -%% Unused = integer(),i.e. number unused bits in least sign. byte of -%% BinBits = binary(). -encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList) - when is_integer(C),C=<16 -> - range_check(C, bit_size(BinBits) - Unused), - [45,C,byte_size(BinBits),BinBits]; -encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList) - when is_integer(C), C =< 255 -> - range_check(C, bit_size(BinBits) - Unused), - [2,45,C,byte_size(BinBits),BinBits]; -encode_bin_bit_string(C, {Unused,BinBits}, _NamedBitList) - when is_integer(C), C =< 65535 -> - range_check(C, bit_size(BinBits) - Unused), - case byte_size(BinBits) of - Size when Size =< 255 -> - [2,46,<<C:16>>,Size,BinBits]; - Size -> - [2,47,<<C:16>>,<<Size:16>>,BinBits] - end; -encode_bin_bit_string(C,UnusedAndBin={_,_},NamedBitList) -> - {Unused1,Bin1} = - %% removes all trailing bits if NamedBitList is not empty - remove_trailing_bin(NamedBitList,UnusedAndBin), - case C of - {Lb,Ub} when is_integer(Lb),is_integer(Ub) -> - Size = byte_size(Bin1), - [encode_length({Lb,Ub}, Size*8 - Unused1), - 2,octets_unused_to_complete(Unused1,Size,Bin1)]; - no -> - Size = byte_size(Bin1), - [encode_length(Size*8 - Unused1), - 2|octets_unused_to_complete(Unused1, Size, Bin1)]; - {{Fix,Fix},Ext} when is_integer(Fix),is_list(Ext) -> - case byte_size(Bin1)*8 - Unused1 of - Size when Size =< Fix -> - [0|encode_bin_bit_string(Fix,UnusedAndBin,NamedBitList)]; - _Size -> - [1|encode_bin_bit_string(no,UnusedAndBin,NamedBitList)] - end; - Sc -> - Size = byte_size(Bin1), - [encode_length(Sc, Size*8 - Unused1), - 2|octets_unused_to_complete(Unused1,Size,Bin1)] - end. - -range_check(C,C) when is_integer(C) -> - ok; -range_check(C1,C2) when is_integer(C1) -> - exit({error,{asn1,{bit_string_out_of_range,{C1,C2}}}}). - -remove_trailing_bin([], {Unused,Bin}) -> - {Unused,Bin}; -remove_trailing_bin(_NamedNumberList,{_Unused,<<>>}) -> - {0,<<>>}; -remove_trailing_bin(NamedNumberList, {_Unused,Bin}) -> - Size = byte_size(Bin)-1, - <<Bfront:Size/binary, LastByte:8>> = Bin, - %% clear the Unused bits to be sure - Unused1 = trailingZeroesInNibble(LastByte band 15), - Unused2 = - case Unused1 of - 4 -> - 4 + trailingZeroesInNibble(LastByte bsr 4); - _ -> Unused1 - end, - case Unused2 of - 8 -> - remove_trailing_bin(NamedNumberList,{0,Bfront}); - _ -> - {Unused2,Bin} - end. - - -trailingZeroesInNibble(0) -> - 4; -trailingZeroesInNibble(1) -> - 0; -trailingZeroesInNibble(2) -> - 1; -trailingZeroesInNibble(3) -> - 0; -trailingZeroesInNibble(4) -> - 2; -trailingZeroesInNibble(5) -> - 0; -trailingZeroesInNibble(6) -> - 1; -trailingZeroesInNibble(7) -> - 0; -trailingZeroesInNibble(8) -> - 3; -trailingZeroesInNibble(9) -> - 0; -trailingZeroesInNibble(10) -> - 1; -trailingZeroesInNibble(11) -> - 0; -trailingZeroesInNibble(12) -> %#1100 - 2; -trailingZeroesInNibble(13) -> - 0; -trailingZeroesInNibble(14) -> - 1; -trailingZeroesInNibble(15) -> - 0. - - -%%%%%%%%%%%%%%% -%% - -int_to_bitlist(Int) when is_integer(Int), Int > 0 -> - [Int band 1 | int_to_bitlist(Int bsr 1)]; -int_to_bitlist(0) -> - []. - - -%%%%%%%%%%%%%%%%%% -%% get_all_bitposes([list of named bits to set], named_bit_db, []) -> -%% [sorted_list_of_bitpositions_to_set] - -get_all_bitposes([{bit,ValPos}|Rest], NamedBitList, Ack) -> - get_all_bitposes(Rest, NamedBitList, [ValPos | Ack ]); - -get_all_bitposes([Val | Rest], NamedBitList, Ack) -> - case lists:keyfind(Val, 1, NamedBitList) of - {_ValName, ValPos} -> - get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); - false -> - exit({error,{asn1, {bitstring_namedbit, Val}}}) - end; -get_all_bitposes([], _NamedBitList, Ack) -> - lists:sort(Ack). - -%%%%%%%%%%%%%%%%%% -%% make_and_set_list([list of positions to set to 1])-> -%% returns list with all in SetPos set. -%% in positioning in list the first element is 0, the second 1 etc.., but -%% - -make_and_set_list([XPos|SetPos], XPos) -> - [1 | make_and_set_list(SetPos, XPos + 1)]; -make_and_set_list([Pos|SetPos], XPos) -> - [0 | make_and_set_list([Pos | SetPos], XPos + 1)]; -make_and_set_list([], _) -> - []. - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% X.691:16 -%% encode_octet_string(Constraint, Val) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -encode_octet_string({{Sv,Sv},Ext}=SZ, Val) when is_list(Ext), Sv =< 2 -> - Len = length(Val), - try - case encode_length(SZ, Len) of - [0|_]=EncLen -> - [EncLen,45,Sv*8,Sv,Val]; - [_|_]=EncLen -> - [EncLen|octets_to_complete(Len, Val)] - end - catch - exit:{error,{asn1,{encode_length,_}}} -> - encode_fragmented_octet_string(Val) - end; -encode_octet_string({_,_}=SZ, Val) -> - Len = length(Val), - try - [encode_length(SZ, Len),2|octets_to_complete(Len, Val)] - catch - exit:{error,{asn1,{encode_length,_}}} -> - encode_fragmented_octet_string(Val) - end; -encode_octet_string(Sv, Val) when is_integer(Sv) -> - encode_fragmented_octet_string(Val); -encode_octet_string(no, Val) -> - Len = length(Val), - try - [encode_length(Len),2|octets_to_complete(Len, Val)] - catch - exit:{error,{asn1,{encode_length,_}}} -> - encode_fragmented_octet_string(Val) - end. - -encode_fragmented_octet_string(Val) -> - Bin = iolist_to_binary(Val), - efos_1(Bin). - -efos_1(<<B1:16#C000/binary,B2:16#4000/binary,T/binary>>) -> - [20,1,<<3:2,4:6>>, - octets_to_complete(16#C000, B1), - octets_to_complete(16#4000, B2)|efos_1(T)]; -efos_1(<<B:16#C000/binary,T/binary>>) -> - [20,1,<<3:2,3:6>>,octets_to_complete(16#C000, B)|efos_1(T)]; -efos_1(<<B:16#8000/binary,T/binary>>) -> - [20,1,<<3:2,2:6>>,octets_to_complete(16#8000, B)|efos_1(T)]; -efos_1(<<B:16#4000/binary,T/binary>>) -> - [20,1,<<3:2,1:6>>,octets_to_complete(16#4000, B)|efos_1(T)]; -efos_1(<<>>) -> - [20,1,0]; -efos_1(<<B/bitstring>>) -> - Len = byte_size(B), - [encode_length(Len)|octets_to_complete(Len, B)]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Restricted char string types -%% (NumericString, PrintableString,VisibleString,IA5String,BMPString,UniversalString) -%% X.691:26 and X.680:34-36 - -encode_restricted_string(Val) when is_list(Val)-> - Len = length(Val), - [encode_length(Len)|octets_to_complete(Len, Val)]. - -encode_known_multiplier_string(SizeC, NumBits, CharOutTab, Val) -> - Result = chars_encode2(Val, NumBits, CharOutTab), - case SizeC of - Ub when is_integer(Ub), Ub*NumBits < 16 -> - Result; - Ub when is_integer(Ub) -> - [2,Result]; - {{_,Ub},Ext}=SZ when is_list(Ext) -> - Len = length(Val), - case encode_length(SZ, Len) of - [0|_]=EncLen when Ub*NumBits < 16 -> - [EncLen,45,Len*NumBits,Len,Val]; - [_|_]=EncLen -> - [EncLen,2|Result] - end; - {_,Ub}=Range -> - [encode_length(Range, length(Val))| - if - Ub*NumBits < 16 -> Result; - true -> [2|Result] - end]; - no -> - [encode_length(length(Val)),2,Result] - end. - -encode_GeneralString(_C,Val) -> - encode_restricted_string(Val). - -encode_GraphicString(_C,Val) -> - encode_restricted_string(Val). - -encode_ObjectDescriptor(_C,Val) -> - encode_restricted_string(Val). - -encode_TeletexString(_C,Val) -> % equivalent with T61String - encode_restricted_string(Val). - -encode_VideotexString(_C,Val) -> - encode_restricted_string(Val). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% chars_encode(C,StringType,Value) -> ValueList -%% -%% encodes chars according to the per rules taking the constraint -%% PermittedAlphabet into account. -%% -%% This function only encodes the value part and NOT the length. - -chars_encode2([H|T],NumBits,T1={Min,Max,notab}) when H =< Max, H >= Min -> - [pre_complete_bits(NumBits,H-Min)|chars_encode2(T,NumBits,T1)]; -chars_encode2([H|T],NumBits,T1={Min,Max,Tab}) when H =< Max, H >= Min -> - [pre_complete_bits(NumBits,exit_if_false(H,element(H-Min+1,Tab)))| - chars_encode2(T,NumBits,T1)]; -chars_encode2([{A,B,C,D}|T],NumBits,T1={Min,_Max,notab}) -> - %% no value range check here (ought to be, but very expensive) - [pre_complete_bits(NumBits, - ((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min)| - chars_encode2(T,NumBits,T1)]; -chars_encode2([H={A,B,C,D}|T],NumBits,{Min,Max,Tab}) -> - %% no value range check here (ought to be, but very expensive) - [pre_complete_bits(NumBits,exit_if_false(H,element(((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min,Tab)))|chars_encode2(T,NumBits,{Min,Max,notab})]; -chars_encode2([H|_T],_NumBits,{_Min,_Max,_Tab}) -> - exit({error,{asn1,{illegal_char_value,H}}}); -chars_encode2([],_,_) -> - []. - -exit_if_false(V,false)-> - exit({error,{asn1,{"illegal value according to Permitted alphabet constraint",V}}}); -exit_if_false(_,V) ->V. - -pre_complete_bits(NumBits,Val) when NumBits =< 8 -> - [10,NumBits,Val]; -pre_complete_bits(NumBits,Val) when NumBits =< 16 -> - [10,NumBits-8,Val bsr 8,10,8,(Val band 255)]; -pre_complete_bits(NumBits,Val) when NumBits =< 2040 -> % 255 * 8 - Unused = (8 - (NumBits rem 8)) rem 8, - Len = NumBits + Unused, - [30,Unused,Len div 8,<<(Val bsl Unused):Len>>]. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_UTF8String(Val) -> CompleteList -%% Val -> <<utf8encoded binary>> -%% CompleteList -> [apropriate codes and values for driver complete] -%% -encode_UTF8String(Val) when is_binary(Val) -> - Sz = byte_size(Val), - [encode_length(Sz),octets_to_complete(Sz, Val)]; -encode_UTF8String(Val) -> - encode_UTF8String(list_to_binary(Val)). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_object_identifier(Val) -> CompleteList -%% encode_object_identifier({Name,Val}) -> CompleteList -%% Val -> {Int1,Int2,...,IntN} % N >= 2 -%% Name -> atom() -%% Int1 -> integer(0..2) -%% Int2 -> integer(0..39) when Int1 (0..1) else integer() -%% Int3-N -> integer() -%% CompleteList -> [{bits,8,Val}|{octets,Ol}|align|...] -%% -encode_object_identifier(Val) -> - OctetList = e_object_identifier(Val), - Octets = list_to_binary(OctetList), - Sz = byte_size(Octets), - [encode_length(Sz), - octets_to_complete(Sz, Octets)]. - -e_object_identifier({'OBJECT IDENTIFIER',V}) -> - e_object_identifier(V); -e_object_identifier(V) when is_tuple(V) -> - e_object_identifier(tuple_to_list(V)); - -%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1) -e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40 ; E1==2 -> - Head = 40*E1 + E2, % weird - e_object_elements([Head|Tail],[]); -e_object_identifier(Oid=[_,_|_Tail]) -> - exit({error,{asn1,{'illegal_value',Oid}}}). - -e_object_elements([],Acc) -> - lists:reverse(Acc); -e_object_elements([H|T],Acc) -> - e_object_elements(T,[e_object_element(H)|Acc]). - -e_object_element(Num) when Num < 128 -> - [Num]; -e_object_element(Num) -> - [e_o_e(Num bsr 7)|[Num band 2#1111111]]. -e_o_e(Num) when Num < 128 -> - Num bor 2#10000000; -e_o_e(Num) -> - [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_relative_oid(Val) -> CompleteList -%% encode_relative_oid({Name,Val}) -> CompleteList -encode_relative_oid(Val) when is_tuple(Val) -> - encode_relative_oid(tuple_to_list(Val)); -encode_relative_oid(Val) when is_list(Val) -> - Octets = list_to_binary([e_object_element(X)||X <- Val]), - Sz = byte_size(Octets), - [encode_length(Sz)|octets_to_complete(Sz, Octets)]. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% complete(InList) -> ByteList %% Takes a coded list with bits and bytes and converts it to a list of bytes %% Should be applied as the last step at encode of a complete ASN.1 type %% -complete(L) -> - case asn1rt_nif:encode_per_complete(L) of +complete(L0) -> + L = complete(L0, []), + case list_to_bitstring(L) of <<>> -> <<0>>; Bin -> Bin end. -octets_to_complete(Len,Val) when Len < 256 -> - [20,Len,Val]; -octets_to_complete(Len,Val) -> - [21,<<Len:16>>,Val]. - -octets_unused_to_complete(Unused,Len,Val) when Len < 256 -> - [30,Unused,Len,Val]; -octets_unused_to_complete(Unused,Len,Val) -> - [31,Unused,<<Len:16>>,Val]. +complete([], []) -> + []; +complete([], [H|More]) -> + complete(H, More); +complete([align|T], More) -> + complete(T, More); +complete([[]|T], More) -> + complete(T, More); +complete([[_|_]=H], More) -> + complete(H, More); +complete([[_|_]=H|T], More) -> + complete(H, [T|More]); +complete([H|T], More) when is_integer(H); is_binary(H) -> + [H|complete(T, More)]; +complete([H|T], More) -> + [H|complete(T, bit_size(H), More)]; +complete(Bin, More) when is_binary(Bin) -> + [Bin|complete([], More)]; +complete(Bin, More) -> + [Bin|complete([], bit_size(Bin), More)]. + +complete([], Bits, []) -> + case Bits band 7 of + 0 -> []; + N -> [<<0:(8-N)>>] + end; +complete([], Bits, [H|More]) -> + complete(H, Bits, More); +complete([align|T], Bits, More) -> + case Bits band 7 of + 0 -> complete(T, More); + 1 -> [<<0:7>>|complete(T, More)]; + 2 -> [<<0:6>>|complete(T, More)]; + 3 -> [<<0:5>>|complete(T, More)]; + 4 -> [<<0:4>>|complete(T, More)]; + 5 -> [<<0:3>>|complete(T, More)]; + 6 -> [<<0:2>>|complete(T, More)]; + 7 -> [<<0:1>>|complete(T, More)] + end; +complete([[]|T], Bits, More) -> + complete(T, Bits, More); +complete([[_|_]=H], Bits, More) -> + complete(H, Bits, More); +complete([[_|_]=H|T], Bits, More) -> + complete(H, Bits, [T|More]); +complete([H|T], Bits, More) when is_integer(H); + is_binary(H) -> + [H|complete(T, Bits, More)]; +complete([H|T], Bits, More) -> + [H|complete(T, Bits+bit_size(H), More)]; +complete(Bin, Bits, More) when is_binary(Bin) -> + [Bin|complete([], Bits, More)]; +complete(Bin, Bits, More) -> + [Bin|complete([], Bits+bit_size(Bin), More)]. diff --git a/lib/asn1/src/asn1rtt_per_common.erl b/lib/asn1/src/asn1rtt_per_common.erl index e7edc2b65f..9e9fd87ec3 100644 --- a/lib/asn1/src/asn1rtt_per_common.erl +++ b/lib/asn1/src/asn1rtt_per_common.erl @@ -28,7 +28,16 @@ decode_chars/2,decode_chars/3, decode_chars_16bit/1, decode_big_chars/2, - decode_oid/1,decode_relative_oid/1]). + decode_oid/1,decode_relative_oid/1, + encode_chars/2,encode_chars/3, + encode_chars_16bit/1,encode_big_chars/1, + encode_fragmented/2, + encode_oid/1,encode_relative_oid/1, + encode_unconstrained_number/1, + bitstring_from_positions/1,bitstring_from_positions/2, + to_bitstring/1,to_bitstring/2, + to_named_bitstring/1,to_named_bitstring/2, + extension_bitmap/3]). -define('16K',16384). @@ -90,6 +99,182 @@ decode_oid(Octets) -> decode_relative_oid(Octets) -> list_to_tuple(dec_subidentifiers(Octets, 0, [])). +encode_chars(Val, NumBits) -> + << <<C:NumBits>> || C <- Val >>. + +encode_chars(Val, NumBits, {Lb,Tab}) -> + << <<(enc_char(C, Lb, Tab)):NumBits>> || C <- Val >>. + +encode_chars_16bit(Val) -> + L = [case C of + {0,0,A,B} -> [A,B]; + C when is_integer(C) -> [0,C] + end || C <- Val], + iolist_to_binary(L). + +encode_big_chars(Val) -> + L = [case C of + {_,_,_,_} -> tuple_to_list(C); + C when is_integer(C) -> [<<0,0,0>>,C] + end || C <- Val], + iolist_to_binary(L). + +encode_fragmented(Bin, Unit) -> + encode_fragmented_1(Bin, Unit, 4). + +encode_oid(Val) when is_tuple(Val) -> + encode_oid(tuple_to_list(Val)); +encode_oid(Val) -> + iolist_to_binary(e_object_identifier(Val)). + +encode_relative_oid(Val) when is_tuple(Val) -> + encode_relative_oid(tuple_to_list(Val)); +encode_relative_oid(Val) when is_list(Val) -> + list_to_binary([e_object_element(X)||X <- Val]). + +encode_unconstrained_number(Val) when Val >= 0 -> + if + Val < 16#80 -> + [1,Val]; + Val < 16#100 -> + [<<2,0>>,Val]; + true -> + case binary:encode_unsigned(Val) of + <<0:1,_/bitstring>>=Bin -> + case byte_size(Bin) of + Sz when Sz < 128 -> + [Sz,Bin]; + Sz when Sz < 16384 -> + [<<2:2,Sz:14>>,Bin] + end; + <<1:1,_/bitstring>>=Bin -> + case byte_size(Bin)+1 of + Sz when Sz < 128 -> + [Sz,0,Bin]; + Sz when Sz < 16384 -> + [<<2:2,Sz:14,0:8>>,Bin] + end + end + end; +encode_unconstrained_number(Val) -> + Oct = enint(Val, []), + Len = length(Oct), + if + Len < 128 -> + [Len|Oct]; + Len < 16384 -> + [<<2:2,Len:14>>|Oct] + end. + +%% bitstring_from_positions([Position]) -> BitString +%% Given an unsorted list of bit positions (0..MAX), construct +%% a BIT STRING. The rightmost bit will always be a one. + +bitstring_from_positions([]) -> <<>>; +bitstring_from_positions([_|_]=L0) -> + L1 = lists:sort(L0), + L = diff(L1, -1), + << <<1:(N+0)>> || N <- L >>. + +%% bitstring_from_positions([Position], Lb) -> BitString +%% Given an unsorted list of bit positions (0..MAX) and a lower bound +%% for the number of bits, construct BIT STRING (zero-padded on the +%% right side if needed). + +bitstring_from_positions(L0, Lb) -> + L1 = lists:sort(L0), + L = diff(L1, -1, Lb-1), + << <<B:(N+0)>> || {B,N} <- L >>. + +%% to_bitstring(Val) -> BitString +%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer +%% Given one of the possible representations for a BIT STRING, +%% return a bitstring (without adding or removing any zero bits +%% at the right end). + +to_bitstring({0,Bs}) when is_binary(Bs) -> + Bs; +to_bitstring({Unused,Bs0}) when is_binary(Bs0) -> + Sz = bit_size(Bs0) - Unused, + <<Bs:Sz/bits,_/bits>> = Bs0, + Bs; +to_bitstring(Bs) when is_bitstring(Bs) -> + Bs; +to_bitstring(Int) when is_integer(Int), Int >= 0 -> + L = int_to_bitlist(Int), + << <<B:1>> || B <- L >>; +to_bitstring(L) when is_list(L) -> + << <<B:1>> || B <- L >>. + +%% to_bitstring(Val, Lb) -> BitString +%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer +%% Lb = Integer +%% Given one of the possible representations for a BIT STRING +%% and the lower bound for the number of bits, +%% return a bitstring at least Lb bits long (padded with zeroes +%% if needed). + +to_bitstring({0,Bs}, Lb) when is_binary(Bs) -> + case bit_size(Bs) of + Sz when Sz < Lb -> + <<Bs/bits,0:(Lb-Sz)>>; + _ -> + Bs + end; +to_bitstring({Unused,Bs0}, Lb) when is_binary(Bs0) -> + Sz = bit_size(Bs0) - Unused, + if + Sz < Lb -> + <<Bs0:Sz/bits,0:(Lb-Sz)>>; + true -> + <<Bs:Sz/bits,_/bits>> = Bs0, + Bs + end; +to_bitstring(Bs, Lb) when is_bitstring(Bs) -> + adjust_size(Bs, Lb); +to_bitstring(Int, Lb) when is_integer(Int), Int >= 0 -> + L = int_to_bitlist(Int), + Bs = << <<B:1>> || B <- L >>, + adjust_size(Bs, Lb); +to_bitstring(L, Lb) when is_list(L) -> + Bs = << <<B:1>> || B <- L >>, + adjust_size(Bs, Lb). + +%% to_named_bitstring(Val) -> BitString +%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer +%% Given one of the possible representations for a BIT STRING, +%% return a bitstring where any trailing zeroes have been stripped. + +to_named_bitstring(Val) -> + Bs = to_bitstring(Val), + bs_drop_trailing_zeroes(Bs). + +%% to_named_bitstring(Val, Lb) -> BitString +%% Val = BitString | {Unused,Binary} | [OneOrZero] | Integer +%% Lb = Integer +%% Given one of the possible representations for a BIT STRING +%% and the lower bound for the number of bits, +%% return a bitstring that is at least Lb bits long. There will +%% be zeroes at the right only if needed to reach the lower bound +%% for the number of bits. + +to_named_bitstring({0,Bs}, Lb) when is_binary(Bs) -> + adjust_trailing_zeroes(Bs, Lb); +to_named_bitstring({Unused,Bs0}, Lb) when is_binary(Bs0) -> + Sz = bit_size(Bs0) - Unused, + <<Bs:Sz/bits,_/bits>> = Bs0, + adjust_trailing_zeroes(Bs, Lb); +to_named_bitstring(Bs, Lb) when is_bitstring(Bs) -> + adjust_trailing_zeroes(Bs, Lb); +to_named_bitstring(Val, Lb) -> + %% Obsolete representations: list or integer. Optimize + %% for correctness, not speed. + adjust_trailing_zeroes(to_bitstring(Val), Lb). + + +extension_bitmap(Val, Pos, Limit) -> + extension_bitmap(Val, Pos, Limit, 0). + %%% %%% Internal functions. %%% @@ -124,3 +309,149 @@ dec_subidentifiers([H|T], Av, Al) -> dec_subidentifiers(T, 0, [(Av bsl 7) bor H|Al]); dec_subidentifiers([], _Av, Al) -> lists:reverse(Al). + +enc_char(C0, Lb, Tab) -> + try element(C0-Lb, Tab) of + ill -> + illegal_char_error(); + C -> + C + catch + error:badarg -> + illegal_char_error() + end. + +illegal_char_error() -> + error({error,{asn1,"value forbidden by FROM constraint"}}). + +encode_fragmented_1(Bin, Unit, N) -> + SegSz = Unit * N * ?'16K', + case Bin of + <<B:SegSz/bitstring,T/bitstring>> -> + [<<3:2,N:6>>,B|encode_fragmented_1(T, Unit, N)]; + _ when N > 1 -> + encode_fragmented_1(Bin, Unit, N-1); + _ -> + case bit_size(Bin) div Unit of + Len when Len < 128 -> + [Len,Bin]; + Len when Len < 16384 -> + [<<2:2,Len:14>>,Bin] + end + end. + +%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1) +e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40; E1 =:= 2 -> + Head = 40*E1 + E2, + e_object_elements([Head|Tail], []); +e_object_identifier([_,_|_Tail]=Oid) -> + exit({error,{asn1,{'illegal_value',Oid}}}). + +e_object_elements([], Acc) -> + lists:reverse(Acc); +e_object_elements([H|T], Acc) -> + e_object_elements(T, [e_object_element(H)|Acc]). + +e_object_element(Num) when Num < 128 -> + [Num]; +e_object_element(Num) -> + [e_o_e(Num bsr 7)|[Num band 2#1111111]]. + +e_o_e(Num) when Num < 128 -> + Num bor 2#10000000; +e_o_e(Num) -> + [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]]. + +enint(-1, [B1|T]) when B1 > 127 -> + [B1|T]; +enint(N, Acc) -> + enint(N bsr 8, [N band 16#ff|Acc]). + +diff([H|T], Prev) -> + [H-Prev|diff(T, H)]; +diff([], _) -> []. + +diff([H|T], Prev, Last) -> + [{1,H-Prev}|diff(T, H, Last)]; +diff([], Prev, Last) when Last >= Prev -> + [{0,Last-Prev}]; +diff([], _, _) -> []. + +int_to_bitlist(0) -> []; +int_to_bitlist(Int) -> [Int band 1|int_to_bitlist(Int bsr 1)]. + +adjust_size(Bs, Lb) -> + case bit_size(Bs) of + Sz when Sz < Lb -> + <<Bs:Sz/bits,0:(Lb-Sz)>>; + _ -> + Bs + end. + +adjust_trailing_zeroes(Bs0, Lb) -> + case bit_size(Bs0) of + Sz when Sz < Lb -> + %% Too short - pad with zeroes. + <<Bs0:Sz/bits,0:(Lb-Sz)>>; + Lb -> + %% Exactly the right size - nothing to do. + Bs0; + _ -> + %% Longer than the lower bound - drop trailing zeroes. + <<_:Lb/bits,Tail/bits>> = Bs0, + Sz = Lb + bit_size(bs_drop_trailing_zeroes(Tail)), + <<Bs:Sz/bits,_/bits>> = Bs0, + Bs + end. + +bs_drop_trailing_zeroes(Bs) -> + bs_drop_trailing_zeroes(Bs, bit_size(Bs)). + +bs_drop_trailing_zeroes(Bs0, Sz0) when Sz0 < 8 -> + <<Byte:Sz0>> = Bs0, + Sz = Sz0 - ntz(Byte), + <<Bs:Sz/bits,_/bits>> = Bs0, + Bs; +bs_drop_trailing_zeroes(Bs0, Sz0) -> + Sz1 = Sz0 - 8, + <<Bs1:Sz1/bits,Byte:8>> = Bs0, + case ntz(Byte) of + 8 -> + bs_drop_trailing_zeroes(Bs1, Sz1); + Ntz -> + Sz = Sz0 - Ntz, + <<Bs:Sz/bits,_:Ntz/bits>> = Bs0, + Bs + end. + +%% ntz(Byte) -> Number of trailing zeroes. +ntz(Byte) -> + %% The table was calculated like this: + %% NTZ = fun (B, N, NTZ) when B band 1 =:= 0 -> NTZ(B bsr 1, N+1, NTZ); (_, N, _) -> N end. + %% io:format("~w\n", [list_to_tuple([NTZ(B+256, 0, NTZ) || B <- lists:seq(0, 255)])]). + T = {8,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0, + 4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}, + element(Byte+1, T). + +extension_bitmap(_Val, Pos, Limit, Acc) when Pos >= Limit -> + Acc; +extension_bitmap(Val, Pos, Limit, Acc) -> + Bit = case element(Pos, Val) of + asn1_NOVALUE -> 0; + _ -> 1 + end, + extension_bitmap(Val, Pos+1, Limit, (Acc bsl 1) bor Bit). diff --git a/lib/asn1/src/asn1rtt_real_common.erl b/lib/asn1/src/asn1rtt_real_common.erl index 22a1f4c4dd..12ca165ecd 100644 --- a/lib/asn1/src/asn1rtt_real_common.erl +++ b/lib/asn1/src/asn1rtt_real_common.erl @@ -105,8 +105,7 @@ encode_real(_C, {Mantissa, Base, Exponent}) when Base =:= 2 -> true -> list_to_binary(real_mininum_octets(-(Man))) % signbit keeps track of sign end, %% ok = io:format("LenMask: ~w EOctets: ~w~nFirstOctet: ~w OctMantissa: ~w OctExpLen: ~w~n", [LenMask, EOctets, FirstOctet, OctMantissa, OctExpLen]), - Bin = <<FirstOctet/binary, EOctets/binary, OctMantissa/binary>>, - {Bin, size(Bin)}; + <<FirstOctet/binary, EOctets/binary, OctMantissa/binary>>; encode_real(C, {Mantissa,Base,Exponent}) when Base =:= 10, is_integer(Mantissa), is_integer(Exponent) -> %% always encode as NR3 due to DER on the format @@ -176,8 +175,7 @@ encode_real_as_string(_C, Mantissa, Exponent) end, ManBin = list_to_binary(TruncMant), NR3 = 3, - {<<NR3,ManBin/binary,$.,ExpBin/binary>>, - 2 + byte_size(ManBin) + byte_size(ExpBin)}. + <<NR3,ManBin/binary,$.,ExpBin/binary>>. remove_trailing_zeros(IntStr) -> case lists:dropwhile(fun($0)-> true; diff --git a/lib/asn1/src/asn1rtt_uper.erl b/lib/asn1/src/asn1rtt_uper.erl index a5035c6660..68a89c70e1 100644 --- a/lib/asn1/src/asn1rtt_uper.erl +++ b/lib/asn1/src/asn1rtt_uper.erl @@ -19,95 +19,8 @@ %% -module(asn1rtt_uper). --export([setext/1, fixoptionals/3, - fixextensions/2, - skipextensions/3]). --export([set_choice/3, encode_integer/2, encode_integer/3]). --export([encode_small_number/1, encode_constrained_number/2, - encode_boolean/1, - encode_length/1, encode_length/2, - encode_bit_string/3]). --export([encode_octet_string/1,encode_octet_string/2, - encode_relative_oid/1, - encode_object_identifier/1, - complete/1, complete_NFP/1]). - - -export([encode_open_type/1]). - - -export([encode_UniversalString/3, - encode_PrintableString/3, - encode_GeneralString/2, - encode_GraphicString/2, - encode_TeletexString/2, - encode_VideotexString/2, - encode_VisibleString/3, - encode_UTF8String/1, - encode_BMPString/3, - encode_IA5String/3, - encode_NumericString/3, - encode_ObjectDescriptor/2 - ]). - --define('16K',16384). --define('32K',32768). --define('64K',65536). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% setext(true|false) -> CompleteList -%% - -setext(false) -> - <<0:1>>; -setext(true) -> - <<1:1>>. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% This is the new fixoptionals/3 which is used by the new generates -%% -fixoptionals(OptList,OptLength,Val) when is_tuple(Val) -> - Bits = fixoptionals(OptList,Val,0), - {Val,<<Bits:OptLength>>}; - -fixoptionals([],_Val,Acc) -> - %% Optbits - Acc; -fixoptionals([{Pos,DefVal}|Ot],Val,Acc) -> - case element(Pos,Val) of - asn1_DEFAULT -> fixoptionals(Ot,Val,Acc bsl 1); - DefVal -> fixoptionals(Ot,Val,Acc bsl 1); - _ -> fixoptionals(Ot,Val,(Acc bsl 1) + 1) - end; -fixoptionals([Pos|Ot],Val,Acc) -> - case element(Pos,Val) of - asn1_NOVALUE -> fixoptionals(Ot,Val,Acc bsl 1); - asn1_DEFAULT -> fixoptionals(Ot,Val,Acc bsl 1); - _ -> fixoptionals(Ot,Val,(Acc bsl 1) + 1) - end. - - -fixextensions({ext,ExtPos,ExtNum},Val) -> - case fixextensions(ExtPos,ExtNum+ExtPos,Val,0) of - 0 -> []; - ExtBits -> - [encode_small_length(ExtNum),<<ExtBits:ExtNum>>] - end. - -fixextensions(Pos,MaxPos,_,Acc) when Pos >= MaxPos -> - Acc; -fixextensions(Pos,ExtPos,Val,Acc) -> - Bit = case catch(element(Pos+1,Val)) of - asn1_NOVALUE -> - 0; - asn1_NOEXTVALUE -> - 0; - {'EXIT',_} -> - 0; - _ -> - 1 - end, - fixextensions(Pos+1,ExtPos,Val,(Acc bsl 1)+Bit). +-export([skipextensions/3]). +-export([complete/1, complete_NFP/1]). skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) -> Prev = Nr - 1, @@ -122,249 +35,6 @@ skipextensions(Bytes0, Nr, ExtensionBitstr) when is_bitstring(ExtensionBitstr) - Bytes0 end. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% set_choice(Alt,Choices,Altnum) -> ListofBitSettings -%% Alt = atom() -%% Altnum = integer() | {integer(),integer()}% number of alternatives -%% Choices = [atom()] | {[atom()],[atom()]} -%% When Choices is a tuple the first list is the Rootset and the -%% second is the Extensions and then Altnum must also be a tuple with the -%% lengths of the 2 lists -%% -set_choice(Alt, {L1,L2}, {Len1,_Len2}) -> - case set_choice_tag(Alt, L1) of - N when is_integer(N), Len1 > 1 -> - [<<0:1>>, % the value is in the root set - encode_integer([{'ValueRange',{0,Len1-1}}],N)]; - N when is_integer(N) -> - <<0:1>>; % no encoding if only 0 or 1 alternative - false -> - [<<1:1>>, % extension value - case set_choice_tag(Alt,L2) of - N2 when is_integer(N2) -> - encode_small_number(N2); - false -> - unknown_choice_alt - end] - end; -set_choice(Alt,L,Len) -> - case set_choice_tag(Alt,L) of - N when is_integer(N), Len > 1 -> - encode_integer([{'ValueRange',{0,Len-1}}],N); - N when is_integer(N) -> - []; % no encoding if only 0 or 1 alternative - false -> - [unknown_choice_alt] - end. - -set_choice_tag(Alt,Choices) -> - set_choice_tag(Alt,Choices,0). - -set_choice_tag(Alt,[Alt|_Rest],Tag) -> - Tag; -set_choice_tag(Alt,[_H|Rest],Tag) -> - set_choice_tag(Alt,Rest,Tag+1); -set_choice_tag(_Alt,[],_Tag) -> - false. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_open_type(Constraint, Value) -> CompleteList -%% Value = list of bytes of an already encoded value (the list must be flat) -%% | binary -%% Contraint = not used in this version -%% -encode_open_type(Val) -> - [encode_length(byte_size(Val)),Val]. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_integer(Constraint,Value,NamedNumberList) -> CompleteList -%% encode_integer(Constraint,Value) -> CompleteList -%% encode_integer(Constraint,{Name,Value}) -> CompleteList -%% -%% -encode_integer(C, V, NamedNumberList) when is_atom(V) -> - case lists:keyfind(V, 1, NamedNumberList) of - {_,NewV} -> - encode_integer(C, NewV); - false -> - exit({error,{asn1,{namednumber,V}}}) - end; -encode_integer(C, V, _NamedNumberList) when is_integer(V) -> - encode_integer(C, V). - -encode_integer([{Rc,_Ec}],Val) when is_tuple(Rc) -> - try - [<<0:1>>,encode_integer([Rc], Val)] - catch - _:{error,{asn1,_}} -> - [<<1:1>>,encode_unconstrained_number(Val)] - end; -encode_integer(C, Val) when is_list(C) -> - case get_constraint(C, 'SingleValue') of - no -> - encode_integer1(C,Val); - V when is_integer(V), V =:= Val -> - []; % a type restricted to a single value encodes to nothing - V when is_list(V) -> - case lists:member(Val,V) of - true -> - encode_integer1(C,Val); - _ -> - exit({error,{asn1,{illegal_value,Val}}}) - end; - _ -> - exit({error,{asn1,{illegal_value,Val}}}) - end. - -encode_integer1(C, Val) -> - case VR = get_constraint(C, 'ValueRange') of - no -> - encode_unconstrained_number(Val); - {Lb,'MAX'} when Lb =< Val -> - encode_semi_constrained_number(Lb, Val); - %% positive with range - {Lb,Ub} when Val >= Lb, Ub >= Val -> - encode_constrained_number(VR,Val); - _ -> - exit({error,{asn1,{illegal_value,VR,Val}}}) - end. - -%% X.691:10.6 Encoding of a normally small non-negative whole number -%% Use this for encoding of CHOICE index if there is an extension marker in -%% the CHOICE -encode_small_number(Val) when Val < 64 -> - <<Val:7>>; -encode_small_number(Val) -> - [<<1:1>>|encode_semi_constrained_number(0, Val)]. - -%% X.691:10.7 Encoding of a semi-constrained whole number -encode_semi_constrained_number(Lb, Val) -> - %% encoding in minimum number of octets preceeded by a length - Val2 = Val - Lb, - Bin = eint_bin_positive(Val2), - Size = byte_size(Bin), - if - Size < 128 -> - [<<Size>>,Bin]; - Size < 16384 -> - [<<2:2,Size:14>>,Bin]; - true -> - [encode_length(Size),Bin] - end. - -encode_constrained_number({Lb,Ub}, Val) when Val >= Lb, Ub >= Val -> - Range = Ub - Lb + 1, - Val2 = Val - Lb, - NumBits = num_bits(Range), - <<Val2:NumBits>>; -encode_constrained_number(Range,Val) -> - exit({error,{asn1,{integer_range,Range,value,Val}}}). - -%% X.691:10.8 Encoding of an unconstrained whole number - -encode_unconstrained_number(Val) when Val >= 0 -> - Oct = eint_bin_2Cs(Val), - Len = byte_size(Oct), - if - Len < 128 -> - [<<Len>>,Oct]; % equiv with encode_length(undefined,Len) but faster - Len < 16384 -> - [<<2:2,Len:14>>,Oct]; - true -> - [encode_length(Len),<<Len:16>>,Oct] - end; -encode_unconstrained_number(Val) -> % negative - Oct = enint(Val,[]), - Len = byte_size(Oct), - if - Len < 128 -> - [<<Len>>,Oct]; % equiv with encode_length(undefined,Len) but faster - Len < 16384 -> - [<<2:2,Len:14>>,Oct]; - true -> - [encode_length(Len),Oct] - end. - - -eint_bin_2Cs(Int) -> - case eint_bin_positive(Int) of - <<B,_/binary>> = Bin when B > 16#7f -> - <<0,Bin/binary>>; - Bin -> Bin - end. - -%% returns the integer as a binary -eint_bin_positive(Val) when Val < 16#100 -> - <<Val>>; -eint_bin_positive(Val) when Val < 16#10000 -> - <<Val:16>>; -eint_bin_positive(Val) when Val < 16#1000000 -> - <<Val:24>>; -eint_bin_positive(Val) when Val < 16#100000000 -> - <<Val:32>>; -eint_bin_positive(Val) -> - list_to_binary([eint_bin_positive2(Val bsr 32),<<Val:32>>]). - -eint_bin_positive2(Val) when Val < 16#100 -> - <<Val>>; -eint_bin_positive2(Val) when Val < 16#10000 -> - <<Val:16>>; -eint_bin_positive2(Val) when Val < 16#1000000 -> - <<Val:24>>; -eint_bin_positive2(Val) when Val < 16#100000000 -> - <<Val:32>>; -eint_bin_positive2(Val) -> - [eint_bin_positive2(Val bsr 32),<<Val:32>>]. - - - - -enint(-1, [B1|T]) when B1 > 127 -> - list_to_binary([B1|T]); -enint(N, Acc) -> - enint(N bsr 8, [N band 16#ff|Acc]). - - -%% X.691:10.9 Encoding of a length determinant -%%encode_small_length(undefined,Len) -> % null means no UpperBound -%% encode_small_number(Len). - -%% X.691:10.9.3.5 -%% X.691:10.9.3.7 -encode_length(Len) -> % un-constrained - if - Len < 128 -> - <<Len>>; - Len < 16384 -> - <<2:2,Len:14>>; - true -> % should be able to endode length >= 16384 - error({error,{asn1,{encode_length,{nyi,above_16k}}}}) - end. - -encode_length({C,[]}, Len) -> - case C of - {Lb,Ub}=Vr when Lb =< Len, Len =< Ub -> - [<<0:1>>|encode_constrained_number(Vr, Len)]; - _ -> - [<<1:1>>|encode_length(Len)] - end; -encode_length(Len, Len) -> - []; -encode_length(Vr, Len) -> - encode_constrained_number(Vr, Len). - - -%% X.691 10.9.3.4 (only used for length of bitmap that prefixes extension -%% additions in a sequence or set -encode_small_length(Len) when Len =< 64 -> - <<(Len-1):7>>; -encode_small_length(Len) -> - [<<1:1>>,encode_length(Len)]. - - %% un-constrained decode_length(<<0:1,Oct:7,Rest/bitstring>>) -> {Oct,Rest}; @@ -373,575 +43,20 @@ decode_length(<<2:2,Val:14,Rest/bitstring>>) -> decode_length(<<3:2,_:14,_Rest/bitstring>>) -> exit({error,{asn1,{decode_length,{nyi,above_16k}}}}). - % X.691:11 -encode_boolean(true) -> - <<1:1>>; -encode_boolean(false) -> - <<0:1>>; -encode_boolean(Val) -> - exit({error,{asn1,{encode_boolean,Val}}}). - - -%%============================================================================ -%%============================================================================ -%% Bitstring value, ITU_T X.690 Chapter 8.5 -%%============================================================================ -%%============================================================================ - -%%============================================================================ -%% encode bitstring value -%%============================================================================ - - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% bitstring NamedBitList -%% Val can be of: -%% - [identifiers] where only named identifers are set to one, -%% the Constraint must then have some information of the -%% bitlength. -%% - [list of ones and zeroes] all bits -%% - integer value representing the bitlist -%% C is constraint Len, only valid when identifiers are present - - -%% when the value is a list of {Unused,BinBits}, where -%% Unused = integer(), -%% BinBits = binary(). - -encode_bit_string(C, Bits, NamedBitList) when is_bitstring(Bits) -> - PadLen = (8 - (bit_size(Bits) band 7)) band 7, - Compact = {PadLen,<<Bits/bitstring,0:PadLen>>}, - encode_bit_string(C, Compact, NamedBitList); -encode_bit_string(C, {Unused,BinBits}=Bin, NamedBitList) - when is_integer(Unused), is_binary(BinBits) -> - encode_bin_bit_string(C, Bin, NamedBitList); - -encode_bit_string(C, BitListVal, NamedBitList) -> - encode_bit_string1(C, BitListVal, NamedBitList). - -%% when the value is a list of named bits -encode_bit_string1(C, [FirstVal|_RestVal]=LoNB, NamedBitList) - when is_atom(FirstVal) -> - ToSetPos = get_all_bitposes(LoNB, NamedBitList, []), - BitList = make_and_set_list(ToSetPos, 0), - encode_bit_string1(C, BitList, NamedBitList); -encode_bit_string1(C, [{bit,_No}|_RestVal]=BL, NamedBitList) -> - ToSetPos = get_all_bitposes(BL, NamedBitList, []), - BitList = make_and_set_list(ToSetPos, 0), - encode_bit_string1(C, BitList, NamedBitList); -%% when the value is a list of ones and zeroes -encode_bit_string1(Int, BitListValue, _) - when is_list(BitListValue), is_integer(Int) -> - %% The type is constrained by a single value size constraint - bit_list2bitstr(Int, BitListValue); -encode_bit_string1(no, BitListValue, []) - when is_list(BitListValue) -> - Len = length(BitListValue), - [encode_length(Len),bit_list2bitstr(Len,BitListValue)]; -encode_bit_string1(C, BitListValue,[]) - when is_list(BitListValue) -> - Len = length(BitListValue), - [encode_length(C, Len),bit_list2bitstr(Len,BitListValue)]; -encode_bit_string1(no, BitListValue,_NamedBitList) - when is_list(BitListValue) -> - NewBitLVal = lists:reverse(lists:dropwhile(fun(0)->true;(1)->false end, - lists:reverse(BitListValue))), - Len = length(NewBitLVal), - [encode_length(Len),bit_list2bitstr(Len,NewBitLVal)]; -encode_bit_string1(C, BitListValue, _NamedBitList) - when is_list(BitListValue) ->% C = {_,'MAX'} - NewBitStr = bitstr_trailing_zeros(BitListValue, C), - [encode_length(C, bit_size(NewBitStr)),NewBitStr]; - - -%% when the value is an integer -encode_bit_string1(C, IntegerVal, NamedBitList) when is_integer(IntegerVal)-> - BitList = int_to_bitlist(IntegerVal), - encode_bit_string1(C, BitList, NamedBitList). - -bit_list2bitstr(Len,BitListValue) -> - case length(BitListValue) of - Len -> - << <<B:1>> || B <- BitListValue>>; - L when L > Len -> % truncate - <<(<< <<B:1>> || B <- BitListValue>>):Len/bitstring>>; - L -> % Len > L -> pad - <<(<< <<B:1>> || B <- BitListValue>>)/bitstring,0:(Len-L)>> - end. - -adjust_trailing_zeros(Len, Bin) when Len =:= bit_size(Bin) -> - Bin; -adjust_trailing_zeros(Len, Bin) when Len > bit_size(Bin) -> - <<Bin/bitstring,0:(Len-bit_size(Bin))>>; -adjust_trailing_zeros(Len,Bin) -> - <<Bin:Len/bitstring>>. - -bitstr_trailing_zeros(BitList, C) when is_integer(C) -> - bitstr_trailing_zeros1(BitList, C, C); -bitstr_trailing_zeros(BitList, {Lb,Ub}) when is_integer(Lb) -> - bitstr_trailing_zeros1(BitList,Lb,Ub); -bitstr_trailing_zeros(BitList, {{Lb,Ub},_}) when is_integer(Lb) -> - bitstr_trailing_zeros1(BitList, Lb, Ub); -bitstr_trailing_zeros(BitList, _) -> - bit_list2bitstr(length(BitList), BitList). - -bitstr_trailing_zeros1(BitList, Lb, Ub) -> - case length(BitList) of - Lb -> bit_list2bitstr(Lb, BitList); - B when B < Lb -> bit_list2bitstr(Lb, BitList); - D -> F = fun(L,LB,LB,_,_)->bit_list2bitstr(LB,lists:reverse(L)); - ([0|R],L1,LB,UB,Fun)->Fun(R,L1-1,LB,UB,Fun); - (L,L1,_,UB,_)when L1 =< UB -> - bit_list2bitstr(L1,lists:reverse(L)); - (_,_L1,_,_,_) ->exit({error,{list_length_BIT_STRING, - BitList}}) end, - F(lists:reverse(BitList),D,Lb,Ub,F) - end. - -%% encode_bin_bit_string/3, when value is a tuple of Unused and BinBits. -%% Unused = integer(),i.e. number unused bits in least sign. byte of -%% BinBits = binary(). -encode_bin_bit_string(C, {_,BinBits}, _NamedBitList) - when is_integer(C), C =< 16 -> - adjust_trailing_zeros(C, BinBits); -encode_bin_bit_string(C, {_Unused,BinBits}, _NamedBitList) - when is_integer(C) -> - adjust_trailing_zeros(C, BinBits); -encode_bin_bit_string(C, {_,_}=UnusedAndBin, NamedBitList) -> - %% removes all trailing bits if NamedBitList is not empty - BitStr = remove_trailing_bin(NamedBitList, UnusedAndBin), - case C of - {Lb,Ub} when is_integer(Lb),is_integer(Ub) -> - [encode_length({Lb,Ub},bit_size(BitStr)),BitStr]; - no -> - [encode_length(bit_size(BitStr)),BitStr]; - Sc -> - [encode_length(Sc,bit_size(BitStr)),BitStr] - end. - - -remove_trailing_bin([], {Unused,Bin}) -> - BS = bit_size(Bin)-Unused, - <<BitStr:BS/bitstring,_:Unused>> = Bin, - BitStr; -remove_trailing_bin(_NamedNumberList, {_Unused,<<>>}) -> - <<>>; -remove_trailing_bin(NamedNumberList, {_Unused,Bin}) -> - Size = byte_size(Bin)-1, - <<Bfront:Size/binary, LastByte:8>> = Bin, - - %% clear the Unused bits to be sure - Unused1 = trailingZeroesInNibble(LastByte band 15), - Unused2 = - case Unused1 of - 4 -> - 4 + trailingZeroesInNibble(LastByte bsr 4); - _ -> Unused1 - end, - case Unused2 of - 8 -> - remove_trailing_bin(NamedNumberList,{0,Bfront}); - _ -> - BS = bit_size(Bin) - Unused2, - <<BitStr:BS/bitstring,_:Unused2>> = Bin, - BitStr - end. - -trailingZeroesInNibble(0) -> - 4; -trailingZeroesInNibble(1) -> - 0; -trailingZeroesInNibble(2) -> - 1; -trailingZeroesInNibble(3) -> - 0; -trailingZeroesInNibble(4) -> - 2; -trailingZeroesInNibble(5) -> - 0; -trailingZeroesInNibble(6) -> - 1; -trailingZeroesInNibble(7) -> - 0; -trailingZeroesInNibble(8) -> - 3; -trailingZeroesInNibble(9) -> - 0; -trailingZeroesInNibble(10) -> - 1; -trailingZeroesInNibble(11) -> - 0; -trailingZeroesInNibble(12) -> %#1100 - 2; -trailingZeroesInNibble(13) -> - 0; -trailingZeroesInNibble(14) -> - 1; -trailingZeroesInNibble(15) -> - 0. - - -%%%%%%%%%%%%%%% -%% - -int_to_bitlist(Int) when is_integer(Int), Int > 0 -> - [Int band 1 | int_to_bitlist(Int bsr 1)]; -int_to_bitlist(0) -> - []. - - -%%%%%%%%%%%%%%%%%% -%% get_all_bitposes([list of named bits to set], named_bit_db, []) -> -%% [sorted_list_of_bitpositions_to_set] - -get_all_bitposes([{bit,ValPos}|Rest], NamedBitList, Ack) -> - get_all_bitposes(Rest, NamedBitList, [ValPos | Ack ]); - -get_all_bitposes([Val | Rest], NamedBitList, Ack) -> - case lists:keyfind(Val, 1, NamedBitList) of - {_ValName, ValPos} -> - get_all_bitposes(Rest, NamedBitList, [ValPos | Ack]); - false -> - exit({error,{asn1, {bitstring_namedbit, Val}}}) - end; -get_all_bitposes([], _NamedBitList, Ack) -> - lists:sort(Ack). - -%%%%%%%%%%%%%%%%%% -%% make_and_set_list([list of positions to set to 1])-> -%% returns list with all in SetPos set. -%% in positioning in list the first element is 0, the second 1 etc.., but -%% - -make_and_set_list([XPos|SetPos], XPos) -> - [1 | make_and_set_list(SetPos, XPos + 1)]; -make_and_set_list([Pos|SetPos], XPos) -> - [0 | make_and_set_list([Pos | SetPos], XPos + 1)]; -make_and_set_list([], _) -> - []. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% X.691:16 -%% encode_octet_string(Val) -%% encode_octet_string(Constraint, Val) -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -encode_octet_string(Val) -> - try - [encode_length(length(Val)),list_to_binary(Val)] - catch - error:{error,{asn1,{encode_length,_}}} -> - encode_fragmented_octet_string(Val) - end. - -encode_octet_string(C, Val) -> - case C of - {_,_}=VR -> - try - [encode_length(VR, length(Val)),list_to_binary(Val)] - catch - error:{error,{asn1,{encode_length,_}}} -> - encode_fragmented_octet_string(Val) - end; - Sv when is_integer(Sv), Sv =:= length(Val) -> % fixed length - list_to_binary(Val) - end. - - -encode_fragmented_octet_string(Val) -> - Bin = list_to_binary(Val), - efos_1(Bin). - -efos_1(<<B:16#10000/binary,T/binary>>) -> - [<<3:2,4:6>>,B|efos_1(T)]; -efos_1(<<B:16#C000/binary,T/binary>>) -> - [<<3:2,3:6>>,B|efos_1(T)]; -efos_1(<<B:16#8000/binary,T/binary>>) -> - [<<3:2,2:6>>,B|efos_1(T)]; -efos_1(<<B:16#4000/binary,T/binary>>) -> - [<<3:2,1:6>>,B|efos_1(T)]; -efos_1(<<B/bitstring>>) -> - Len = byte_size(B), - [encode_length(Len),B]. - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% Restricted char string types -%% (NumericString, PrintableString,VisibleString,IA5String,BMPString,UniversalString) -%% X.691:26 and X.680:34-36 -%%encode_restricted_string('BMPString',Constraints,Extension,Val) - - -encode_restricted_string(Val) when is_list(Val)-> - [encode_length(length(Val)),list_to_binary(Val)]. - -encode_known_multiplier_string(StringType, C, Pa, Val) -> - Result = chars_encode(Pa, StringType, Val), - case C of - Ub when is_integer(Ub) -> - Result; - {_,_}=Range -> - [encode_length(Range, length(Val)),Result]; - no -> - [encode_length(length(Val)),Result] - end. - -encode_NumericString(C, Pa, Val) -> - encode_known_multiplier_string('NumericString', C, Pa, Val). - -encode_PrintableString(C, Pa, Val) -> - encode_known_multiplier_string('PrintableString', C, Pa, Val). - -encode_VisibleString(C, Pa, Val) -> % equivalent with ISO646String - encode_known_multiplier_string('VisibleString', C, Pa, Val). - -encode_IA5String(C, Pa, Val) -> - encode_known_multiplier_string('IA5String', C, Pa, Val). - -encode_BMPString(C, Pa, Val) -> - encode_known_multiplier_string('BMPString', C, Pa, Val). - -encode_UniversalString(C, Pa, Val) -> - encode_known_multiplier_string('UniversalString', C, Pa, Val). - - -%% end of known-multiplier strings for which PER visible constraints are -%% applied - -encode_GeneralString(_C,Val) -> - encode_restricted_string(Val). - -encode_GraphicString(_C,Val) -> - encode_restricted_string(Val). - -encode_ObjectDescriptor(_C,Val) -> - encode_restricted_string(Val). - -encode_TeletexString(_C,Val) -> % equivalent with T61String - encode_restricted_string(Val). - -encode_VideotexString(_C,Val) -> - encode_restricted_string(Val). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% chars_encode(C,StringType,Value) -> ValueList -%% -%% encodes chars according to the per rules taking the constraint PermittedAlphabet -%% into account. -%% This function does only encode the value part and NOT the length - -chars_encode(Pa, StringType, Value) -> - case {StringType,Pa} of - {'UniversalString',{_,_Sv}} -> - exit({error,{asn1,{'not implemented',"UniversalString with PermittedAlphabet constraint"}}}); - {'BMPString',{_,_Sv}} -> - exit({error,{asn1,{'not implemented',"BMPString with PermittedAlphabet constraint"}}}); - _ -> - {NumBits,CharOutTab} = {get_NumBits(Pa, StringType), - get_CharOutTab(Pa, StringType)}, - chars_encode2(Value,NumBits,CharOutTab) - end. - -chars_encode2([H|T],NumBits,{Min,Max,notab}) when H =< Max, H >= Min -> - [<<(H-Min):NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})]; -chars_encode2([H|T],NumBits,{Min,Max,Tab}) when H =< Max, H >= Min -> - Ch = exit_if_false(H,element(H-Min+1,Tab)), - [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,Tab})]; -chars_encode2([{A,B,C,D}|T],NumBits,{Min,Max,notab}) -> - %% no value range check here (ought to be, but very expensive) - Ch = ((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min, - [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})]; -chars_encode2([{A,B,C,D}|T],NumBits,{Min,Max,Tab}) -> - %% no value range check here (ought to be, but very expensive) - Ch = exit_if_false({A,B,C,D},element(((((((A bsl 8)+B) bsl 8)+C) bsl 8)+D)-Min,Tab)), - [<<Ch:NumBits>>|chars_encode2(T,NumBits,{Min,Max,notab})]; -chars_encode2([H|_T],_,{_,_,_}) -> - exit({error,{asn1,{illegal_char_value,H}}}); -chars_encode2([],_,_) -> - []. - -exit_if_false(V,false)-> - exit({error,{asn1,{"illegal value according to Permitted alphabet constraint",V}}}); -exit_if_false(_,V) ->V. - - -get_NumBits(Pa, StringType) -> - case Pa of - {'SingleValue',Sv} -> - charbits(length(Sv)); - no -> - case StringType of - 'IA5String' -> - charbits(128); % 16#00..16#7F - 'VisibleString' -> - charbits(95); % 16#20..16#7E - 'PrintableString' -> - charbits(74); % [$\s,$',$(,$),$+,$,,$-,$.,$/,"0123456789",$:,$=,$?,$A..$Z,$a..$z - 'NumericString' -> - charbits(11); % $ ,"0123456789" - 'UniversalString' -> - 32; - 'BMPString' -> - 16 - end - end. - -get_CharOutTab(Pa, StringType) -> - case Pa of - {'SingleValue',Sv} -> - get_CharTab2(Pa, StringType, hd(Sv), lists:max(Sv), Sv); - no -> - case StringType of - 'IA5String' -> - {0,16#7F,notab}; - 'VisibleString' -> - get_CharTab2(Pa, StringType, 16#20, 16#7F, notab); - 'PrintableString' -> - Chars = lists:sort( - " '()+,-./0123456789:=?ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"), - get_CharTab2(Pa, StringType, hd(Chars), - lists:max(Chars), Chars); - 'NumericString' -> - get_CharTab2(Pa, StringType, 16#20, $9, " 0123456789"); - 'UniversalString' -> - {0,16#FFFFFFFF,notab}; - 'BMPString' -> - {0,16#FFFF,notab} - end - end. - -get_CharTab2(C,StringType,Min,Max,Chars) -> - BitValMax = (1 bsl get_NumBits(C,StringType))-1, - if - Max =< BitValMax -> - {0,Max,notab}; - true -> - {Min,Max,create_char_tab(Min,Chars)} - end. - -create_char_tab(Min,L) -> - list_to_tuple(create_char_tab(Min,L,0)). -create_char_tab(Min,[Min|T],V) -> - [V|create_char_tab(Min+1,T,V+1)]; -create_char_tab(_Min,[],_V) -> - []; -create_char_tab(Min,L,V) -> - [false|create_char_tab(Min+1,L,V)]. - -%% See Table 20.3 in Dubuisson -charbits(NumOfChars) when NumOfChars =< 2 -> 1; -charbits(NumOfChars) when NumOfChars =< 4 -> 2; -charbits(NumOfChars) when NumOfChars =< 8 -> 3; -charbits(NumOfChars) when NumOfChars =< 16 -> 4; -charbits(NumOfChars) when NumOfChars =< 32 -> 5; -charbits(NumOfChars) when NumOfChars =< 64 -> 6; -charbits(NumOfChars) when NumOfChars =< 128 -> 7; -charbits(NumOfChars) when NumOfChars =< 256 -> 8; -charbits(NumOfChars) when NumOfChars =< 512 -> 9; -charbits(NumOfChars) when NumOfChars =< 1024 -> 10; -charbits(NumOfChars) when NumOfChars =< 2048 -> 11; -charbits(NumOfChars) when NumOfChars =< 4096 -> 12; -charbits(NumOfChars) when NumOfChars =< 8192 -> 13; -charbits(NumOfChars) when NumOfChars =< 16384 -> 14; -charbits(NumOfChars) when NumOfChars =< 32768 -> 15; -charbits(NumOfChars) when NumOfChars =< 65536 -> 16; -charbits(NumOfChars) when is_integer(NumOfChars) -> - 16 + charbits1(NumOfChars bsr 16). - -charbits1(0) -> - 0; -charbits1(NumOfChars) -> - 1 + charbits1(NumOfChars bsr 1). - - -%% UTF8String -encode_UTF8String(Val) when is_binary(Val) -> - [encode_length(byte_size(Val)),Val]; -encode_UTF8String(Val) -> - Bin = list_to_binary(Val), - encode_UTF8String(Bin). - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_object_identifier(Val) -> CompleteList -%% encode_object_identifier({Name,Val}) -> CompleteList -%% Val -> {Int1,Int2,...,IntN} % N >= 2 -%% Name -> atom() -%% Int1 -> integer(0..2) -%% Int2 -> integer(0..39) when Int1 (0..1) else integer() -%% Int3-N -> integer() -%% CompleteList -> [binary()|bitstring()|list()] -%% -encode_object_identifier(Val) -> - OctetList = e_object_identifier(Val), - Octets = list_to_binary(OctetList), % performs a flatten at the same time - [encode_length(byte_size(Octets)),Octets]. - -%% This code is copied from asn1_encode.erl (BER) and corrected and modified - -e_object_identifier({'OBJECT IDENTIFIER',V}) -> - e_object_identifier(V); -e_object_identifier(V) when is_tuple(V) -> - e_object_identifier(tuple_to_list(V)); - -%% E1 = 0|1|2 and (E2 < 40 when E1 = 0|1) -e_object_identifier([E1,E2|Tail]) when E1 >= 0, E1 < 2, E2 < 40 ; E1==2 -> - Head = 40*E1 + E2, % weird - e_object_elements([Head|Tail],[]); -e_object_identifier(Oid=[_,_|_Tail]) -> - exit({error,{asn1,{'illegal_value',Oid}}}). - -e_object_elements([],Acc) -> - lists:reverse(Acc); -e_object_elements([H|T],Acc) -> - e_object_elements(T,[e_object_element(H)|Acc]). - -e_object_element(Num) when Num < 128 -> - [Num]; -e_object_element(Num) -> - [e_o_e(Num bsr 7)|[Num band 2#1111111]]. -e_o_e(Num) when Num < 128 -> - Num bor 2#10000000; -e_o_e(Num) -> - [e_o_e(Num bsr 7)|[(Num band 2#1111111) bor 2#10000000]]. - - -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -%% encode_relative_oid(Val) -> CompleteList -%% encode_relative_oid({Name,Val}) -> CompleteList -encode_relative_oid(Val) when is_tuple(Val) -> - encode_relative_oid(tuple_to_list(Val)); -encode_relative_oid(Val) when is_list(Val) -> - Octets = list_to_binary([e_object_element(X)||X <- Val]), - [encode_length(byte_size(Octets)),Octets]. - - -get_constraint([{Key,V}],Key) -> - V; -get_constraint([],_Key) -> - no; -get_constraint(C,Key) -> - case lists:keyfind(Key, 1, C) of - false -> - no; - {_,V} -> - V - end. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% complete(InList) -> ByteList %% Takes a coded list with bits and bytes and converts it to a list of bytes %% Should be applied as the last step at encode of a complete ASN.1 type %% complete(InList) when is_list(InList) -> - case complete1(InList) of + case list_to_bitstring(InList) of <<>> -> <<0>>; Res -> - case bit_size(Res) band 7 of + Sz = bit_size(Res), + case Sz band 7 of 0 -> Res; - Bits -> <<Res/bitstring,0:(8-Bits)>> + Bits -> <<Res:Sz/bitstring,0:(8-Bits)>> end end; complete(Bin) when is_binary(Bin) -> @@ -950,24 +65,12 @@ complete(Bin) when is_binary(Bin) -> _ -> Bin end; complete(InList) when is_bitstring(InList) -> - PadLen = 8 - (bit_size(InList) band 7), - <<InList/bitstring,0:PadLen>>. - -complete1(L) when is_list(L) -> - list_to_bitstring(L). + Sz = bit_size(InList), + PadLen = 8 - (Sz band 7), + <<InList:Sz/bitstring,0:PadLen>>. %% Special version of complete that does not align the completed message. complete_NFP(InList) when is_list(InList) -> list_to_bitstring(InList); complete_NFP(InList) when is_bitstring(InList) -> InList. - -%% unaligned helpers - -%% 10.5.6 NOTE: If "range" satisfies the inequality 2^m < "range" =< -%% 2^(m+1) then the number of bits = m + 1 - -num_bits(N) -> num_bits(N, 1, 0). - -num_bits(N,T,B) when N =< T -> B; -num_bits(N,T,B) -> num_bits(N, T bsl 1, B+1). diff --git a/lib/asn1/test/Makefile b/lib/asn1/test/Makefile index 15b97df972..a3fa4f2968 100644 --- a/lib/asn1/test/Makefile +++ b/lib/asn1/test/Makefile @@ -82,6 +82,7 @@ MODULES= \ testInfObjectClass \ testInfObj \ testParameterizedInfObj \ + testFragmented \ testMergeCompile \ testMultipleLevels \ testDeepTConstr \ diff --git a/lib/asn1/test/asn1_SUITE.erl b/lib/asn1/test/asn1_SUITE.erl index f00b23a8b2..9a149a495a 100644 --- a/lib/asn1/test/asn1_SUITE.erl +++ b/lib/asn1/test/asn1_SUITE.erl @@ -150,6 +150,7 @@ groups() -> per_open_type, testInfObjectClass, testParameterizedInfObj, + testFragmented, testMergeCompile, testobj, testDeepTConstr, @@ -186,8 +187,7 @@ groups() -> {performance, [], [testTimer_ber, testTimer_per, - testTimer_uper, - smp]}]. + testTimer_uper]}]. parallel(Options) -> case erlang:system_info(smp_support) andalso @@ -360,7 +360,8 @@ testPrimStrings_cases(Rule) -> testPrimStrings:universal_string(Rule), testPrimStrings:bmp_string(Rule), testPrimStrings:times(Rule), - testPrimStrings:utf8_string(Rule). + testPrimStrings:utf8_string(Rule), + testPrimStrings:fragmented(Rule). testPrimExternal(Config) -> test(Config, fun testPrimExternal/3). testPrimExternal(Config, Rule, Opts) -> @@ -452,7 +453,7 @@ testSeqDefault(Config, Rule, Opts) -> asn1_test_lib:compile("SeqDefault", Config, [Rule|Opts]), testSeqDefault:main(Rule). -testSeqExtension(Config) -> test(Config, fun testSeqExtension/3). +testSeqExtension(Config) -> test(Config, fun testSeqExtension/3, [ber,uper]). testSeqExtension(Config, Rule, Opts) -> asn1_test_lib:compile_all(["External", "SeqExtension", @@ -830,6 +831,12 @@ testParameterizedInfObj(Config, Rule, Opts) -> asn1_test_lib:compile_all(Files, Config, [Rule|Opts]), testParameterizedInfObj:main(Config, Rule). +testFragmented(Config) -> + test(Config, fun testFragmented/3). +testFragmented(Config, Rule, Opts) -> + asn1_test_lib:compile("Fragmented", Config, [Rule|Opts]), + testFragmented:main(Rule). + testMergeCompile(Config) -> test(Config, fun testMergeCompile/3). testMergeCompile(Config, Rule, Opts) -> Files = ["MS.set.asn", "RANAPSET.set.asn1", "Mvrasn4.set.asn", @@ -1230,70 +1237,6 @@ ticket_7407(Config) -> [uper, no_final_padding]), asn1_test_lib:ticket_7407_code(false). -smp(suite) -> []; -smp(Config) -> - case erlang:system_info(smp_support) of - true -> - NumOfProcs = erlang:system_info(schedulers), - io:format("smp starting ~p workers\n",[NumOfProcs]), - - Msg = {initiatingMessage, testNBAPsystem:cell_setup_req_msg()}, - ok = testNBAPsystem:compile(Config, [per]), - - enc_dec(NumOfProcs,Msg,2), - - N = 10000, - - {Time1,ok} = timer:tc(?MODULE,enc_dec,[NumOfProcs,Msg, N]), - {Time1S,ok} = timer:tc(?MODULE,enc_dec,[1, Msg, NumOfProcs * N]), - - ok = testNBAPsystem:compile(Config, [ber]), - {Time3,ok} = timer:tc(?MODULE,enc_dec,[NumOfProcs,Msg, N]), - - {Time3S,ok} = timer:tc(?MODULE,enc_dec,[1, Msg, NumOfProcs * N]), - - {comment,lists:flatten( - io_lib:format( - "Encode/decode time parallell with ~p cores: ~p [microsecs]~n" - "Encode/decode time sequential: ~p [microsecs]", - [NumOfProcs,Time1+Time3,Time1S+Time3S]))}; - false -> - {skipped,"No smp support"} - end. - -enc_dec(1, Msg, N) -> - worker_loop(N, Msg); -enc_dec(NumOfProcs,Msg, N) -> - pforeach(fun(_) -> - worker_loop(N, Msg) - end, [I || I <- lists:seq(1,NumOfProcs)]). - -worker_loop(0, _Msg) -> - ok; -worker_loop(N, Msg) -> - {ok,B}=asn1_wrapper:encode('NBAP-PDU-Discriptions', - 'NBAP-PDU', - Msg), - {ok,_Msg}=asn1_wrapper:decode('NBAP-PDU-Discriptions', - 'NBAP-PDU', - B), - worker_loop(N - 1, Msg). - - -pforeach(Fun, List) -> - pforeach(Fun, List, []). -pforeach(Fun, [], [{Pid,Ref}|Pids]) -> - receive - {'DOWN', Ref, process, Pid, normal} -> - pforeach(Fun, [], Pids) - end; -pforeach(Fun, [H|T], Pids) -> - Pid = spawn(fun() -> Fun(H) end), - Ref = erlang:monitor(process, Pid), - pforeach(Fun, T, [{Pid, Ref}|Pids]); -pforeach(_Fun,[],[]) -> - ok. - -record('InitiatingMessage',{procedureCode,criticality,value}). -record('Iu-ReleaseCommand',{first,second}). diff --git a/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1 b/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1 new file mode 100644 index 0000000000..bfc939737f --- /dev/null +++ b/lib/asn1/test/asn1_SUITE_data/Fragmented.asn1 @@ -0,0 +1,24 @@ +Fragmented DEFINITIONS AUTOMATIC TAGS ::= +BEGIN + +FUNCTION ::= CLASS { + &code INTEGER UNIQUE, + &b BOOLEAN, + &ArgumentType +} + +SS ::= SEQUENCE OF OCTET STRING + +val1 FUNCTION ::= { + &code 1, &b FALSE, &ArgumentType SS +} + +ObjSet FUNCTION ::= { val1 } + +PDU ::= SEQUENCE { + code FUNCTION.&code ({ObjSet}), + b FUNCTION.&b ({ObjSet}{@code}), + arg FUNCTION.&ArgumentType ({ObjSet}{@code}) +} + +END diff --git a/lib/asn1/test/asn1_SUITE_data/InfObj.asn b/lib/asn1/test/asn1_SUITE_data/InfObj.asn index 53e5043cb7..880e81c3b1 100644 --- a/lib/asn1/test/asn1_SUITE_data/InfObj.asn +++ b/lib/asn1/test/asn1_SUITE_data/InfObj.asn @@ -202,7 +202,11 @@ constructed2 CONSTRUCTED-DEFAULT ::= { &id 2, &ok false } ConstructedDefaultSet CONSTRUCTED-DEFAULT ::= { constructed1 | constructed2 | - { &id 3, &Type BOOLEAN } + { &id 3, &Type BOOLEAN } | + { &id 4, &Type SET { a INTEGER, b BIT STRING } } | + { &id 5, &Type CHOICE { i INTEGER, b BIT STRING } } | + { &id 6, &Type SEQUENCE OF INTEGER (1..16) } | + { &id 7, &Type SET OF INTEGER (1..64) } } ConstructedPdu ::= SEQUENCE { @@ -210,6 +214,47 @@ ConstructedPdu ::= SEQUENCE { content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id}) } +ConstructedSet ::= SET { + id [0] CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}), + content [1] CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id}) +} + +-- Test OPTIONAL and DEFAULT + +OptionalInSeq ::= SEQUENCE { + id CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}), + content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id}) OPTIONAL +} + +DefaultInSeq ::= SEQUENCE { + id CONSTRUCTED-DEFAULT.&id ({ConstructedDefaultSet}), + content CONSTRUCTED-DEFAULT.&Type ({ConstructedDefaultSet}{@id}) + DEFAULT BOOLEAN:TRUE +} + +-- Test more than one optional typefield table constraint in a SEQUENCE. + +MULTIPLE-OPTIONALS ::= CLASS { + &id INTEGER UNIQUE, + &T1, + &T2, + &T3 +} + +multiple-optionals-1 MULTIPLE-OPTIONALS ::= + {&id 1, &T1 INTEGER, &T2 BOOLEAN, &T3 OCTET STRING} + +Multiple-Optionals-Set MULTIPLE-OPTIONALS ::= { + multiple-optionals-1 +} + +Multiple-Optionals ::= SEQUENCE { + id MULTIPLE-OPTIONALS.&id ({Multiple-Optionals-Set}), + t1 [0] MULTIPLE-OPTIONALS.&T1 ({Multiple-Optionals-Set}{@id}) OPTIONAL, + t2 [1] MULTIPLE-OPTIONALS.&T2 ({Multiple-Optionals-Set}{@id}) OPTIONAL, + t3 [2] MULTIPLE-OPTIONALS.&T3 ({Multiple-Optionals-Set}{@id}) OPTIONAL +} + END diff --git a/lib/asn1/test/asn1_SUITE_data/Param.asn1 b/lib/asn1/test/asn1_SUITE_data/Param.asn1 index b2987a7885..4eff0da781 100644 --- a/lib/asn1/test/asn1_SUITE_data/Param.asn1 +++ b/lib/asn1/test/asn1_SUITE_data/Param.asn1 @@ -88,6 +88,28 @@ POS2 {CONFIG-DATA:obj} ::= OCTET STRING (SIZE(obj.&minLevel .. obj.&maxLevel)) OS2 ::= POS2 {config-data} +-- +-- Test a CLASS without the user-friendly syntax. +-- + +CL ::= CLASS { + &code INTEGER UNIQUE, + &Data +} + +P{T} ::= CHOICE { a INTEGER, b T } + +o1 CL ::= { + &code 42, + &Data P{BOOLEAN} +} + +SetCL CL ::= { o1 } + +Scl ::= SEQUENCE { + code CL.&code ({SetCL}), + data CL.&Data ({SetCL}{@code}) +} END diff --git a/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1 b/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1 index 888dbe5dd7..670f827f5e 100644 --- a/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1 +++ b/lib/asn1/test/asn1_SUITE_data/SeqOf.asn1 @@ -31,7 +31,43 @@ Seq4 ::= SEQUENCE seq43 [43] SEQUENCE OF SeqIn DEFAULT {} } +Seq5 ::= SEQUENCE { + b BOOLEAN, + s SEQUENCE SIZE (0..3) OF OCTET STRING (SIZE (0..3)), + -- If 's' is empty, 'magic' should not be aligned. + magic INTEGER (0..127) +} + +Seq6 ::= SEQUENCE { + a SEQUENCE OF INTEGER (0..7), + b SEQUENCE (SIZE (0..7)) OF INTEGER (0..7), + -- 'magic' should never be aligned. + magic INTEGER (0..127) +} +Seq7 ::= SEQUENCE { + a SEQUENCE OF INTEGER (1..512), + b SEQUENCE (SIZE (0..255)) OF INTEGER (1..512), + i INTEGER +} + +Seq8 ::= SEQUENCE { + sof SEQUENCE (SIZE (0..3)) OF OCTET STRING (SIZE (3)), + -- Not aligned here if the size of 'sof' is zero. + i INTEGER (0..127) +} + +Seq9 ::= SEQUENCE { + b BOOLEAN, + s SEQUENCE SIZE (0..3) OF OCTET STRING (SIZE (0..3)), + magic INTEGER (0..127) +} + +Seq10 ::= SEQUENCE { + b BOOLEAN, + s SEQUENCE SIZE (1..3) OF OCTET STRING (SIZE (0..3)), + magic INTEGER (0..127) +} SeqIn ::= SEQUENCE { @@ -50,9 +86,6 @@ SeqCho ::= SEQUENCE OF CHOICE {bool BOOLEAN, SeqOfInt ::= SEQUENCE OF INTEGER - - - SeqEmp ::= SEQUENCE { seq1 SEQUENCE OF Empty DEFAULT {} diff --git a/lib/asn1/test/asn1_SUITE_data/TConstr.asn1 b/lib/asn1/test/asn1_SUITE_data/TConstr.asn1 index e2e0a11dc4..b2b2de2f56 100644 --- a/lib/asn1/test/asn1_SUITE_data/TConstr.asn1 +++ b/lib/asn1/test/asn1_SUITE_data/TConstr.asn1 @@ -58,6 +58,40 @@ Deeper ::= SEQUENCE { b SEQUENCE {ba INTEGER, bb MYCLASS.&Type ({ObjectSet}{@a.s.ab})} } +Seq3 ::= SEQUENCE { + a SEQUENCE { + aa INTEGER, + ab MYCLASS.&id ({ObjectSet}) + }, + -- Multiple references from the same SEQUENCE... + b SEQUENCE { + ba MYCLASS.&Type ({ObjectSet}{@a.ab}), + bb MYCLASS.&Result ({ObjectSet}{@a.ab}), + -- ... and references from multiple SEQUENCEs... + bc SEQUENCE { + bca MYCLASS.&Result ({ObjectSet}{@a.ab}), + bcb MYCLASS.&Type ({ObjectSet}{@a.ab}) + } + } +} + +Seq3-Opt ::= SEQUENCE { + a SEQUENCE { + aa INTEGER, + ab MYCLASS.&id ({ObjectSet}) + }, + -- Multiple references from the same SEQUENCE... + b SEQUENCE { + ba MYCLASS.&Type ({ObjectSet}{@a.ab}) OPTIONAL, + bb MYCLASS.&Result ({ObjectSet}{@a.ab}) OPTIONAL, + -- ... and references from multiple SEQUENCEs... + bc SEQUENCE { + bca MYCLASS.&Result ({ObjectSet}{@a.ab}), + bcb MYCLASS.&Type ({ObjectSet}{@a.ab}) + } OPTIONAL + } +} + -- following from Peter's definitions diff --git a/lib/asn1/test/error_SUITE.erl b/lib/asn1/test/error_SUITE.erl index a94a6d95a0..6451f81c01 100644 --- a/lib/asn1/test/error_SUITE.erl +++ b/lib/asn1/test/error_SUITE.erl @@ -19,7 +19,7 @@ -module(error_SUITE). -export([suite/0,all/0,groups/0, - already_defined/1,enumerated/1]). + already_defined/1,enumerated/1,objects/1]). -include_lib("test_server/include/test_server.hrl"). @@ -30,7 +30,8 @@ all() -> groups() -> [{p,parallel(),[already_defined, - enumerated]}]. + enumerated, + objects]}]. parallel() -> case erlang:system_info(schedulers) > 1 of @@ -95,6 +96,48 @@ enumerated(Config) -> } = run(P, Config), ok. +objects(Config) -> + M = 'Objects', + P = {M, + <<"Objects DEFINITIONS AUTOMATIC TAGS ::= BEGIN\n" + " obj1 CL ::= { &wrong 42 }\n" + " obj2 CL ::= { &wrong 1, &Wrong INTEGER }\n" + " obj3 CL ::= { &Data OCTET STRING }\n" + " obj4 SMALL ::= { &code 42 }\n" + " InvalidSet CL ::= { obj1 }\n" + + " CL ::= CLASS {\n" + " &code INTEGER UNIQUE,\n" + " &enum ENUMERATED { a, b, c},\n" + " &Data,\n" + " &object CL,\n" + " &Set CL,\n" + " &vartypevalue &Data,\n" + " &VarTypeValue &Data\n" + " }\n" + + " SMALL ::= CLASS {\n" + " &code INTEGER UNIQUE,\n" + " &i INTEGER\n" + " }\n" + "END\n">>}, + {error, + [ + {structured_error,{M,2},asn1ct_check, + {invalid_fields,[wrong],obj1}}, + {structured_error,{M,3},asn1ct_check, + {invalid_fields,['Wrong',wrong],obj2}}, + {structured_error,{M,4},asn1ct_check, + {missing_mandatory_fields,['Set','VarTypeValue',code, + enum,object,vartypevalue],obj3}}, + {structured_error,{M,5},asn1ct_check, + {missing_mandatory_fields,[i],obj4}}, + {structured_error,{M,6},asn1ct_check, + {invalid_fields,[wrong],'InvalidSet'}} + ] + } = run(P, Config), + ok. + run({Mod,Spec}, Config) -> diff --git a/lib/asn1/test/testDeepTConstr.erl b/lib/asn1/test/testDeepTConstr.erl index f17dedc043..620b5f3356 100644 --- a/lib/asn1/test/testDeepTConstr.erl +++ b/lib/asn1/test/testDeepTConstr.erl @@ -40,8 +40,7 @@ main(_Erule) -> {any,"DK"}, {final,"NO"}]}}, - {ok,Bytes1} = 'TConstrChoice':encode('FilterItem', Val1), - {error,Reason} = asn1_wrapper:decode('TConstrChoice','FilterItem',Bytes1), + Reason = must_fail('TConstrChoice', 'FilterItem', Val1), io:format("Reason: ~p~n~n",[Reason]), {ok,Bytes2} = 'TConstrChoice':encode('FilterItem', Val2), {ok,Res} = 'TConstrChoice':decode('FilterItem', Bytes2), @@ -70,6 +69,21 @@ main(_Erule) -> {'Deeper_a',12, {'Deeper_a_s',{2,4},42}}, {'Deeper_b',13,{'Type-object1',14,true}}}), + + roundtrip('TConstr', 'Seq3', + {'Seq3', + {'Seq3_a',42,'TConstr':'id-object1'()}, + {'Seq3_b', + {'Type-object1',-777,true}, + 12345, + {'Seq3_b_bc',12345789,{'Type-object1',-999,true}}}}), + roundtrip('TConstr', 'Seq3-Opt', + {'Seq3-Opt', + {'Seq3-Opt_a',42,'TConstr':'id-object1'()}, + {'Seq3-Opt_b', + {'Type-object1',-777,true}, + 12345, + {'Seq3-Opt_b_bc',12345789,{'Type-object1',-999,true}}}}), ok. @@ -77,3 +91,13 @@ roundtrip(M, T, V) -> {ok,E} = M:encode(T, V), {ok,V} = M:decode(T, E), ok. + +%% Either encoding or decoding must fail. +must_fail(M, T, V) -> + case M:encode(T, V) of + {ok,E} -> + {error,Reason} = M:decode(T, E), + Reason; + {error,Reason} -> + Reason + end. diff --git a/lib/asn1/test/testFragmented.erl b/lib/asn1/test/testFragmented.erl new file mode 100644 index 0000000000..c391ba8305 --- /dev/null +++ b/lib/asn1/test/testFragmented.erl @@ -0,0 +1,42 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. 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(testFragmented). + +-export([main/1]). + +main(_Erule) -> + roundtrip('PDU', {'PDU',1,false,["abc","def"]}), + B256 = lists:seq(0, 255), + K1 = lists:duplicate(4, B256), + K8 = binary_to_list(iolist_to_binary(lists:duplicate(8, K1))), + roundtrip('PDU', {'PDU',1,false,[K8,K8]}), + roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8]}), + roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8]}), + roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8]}), + roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8, + K8,K8,K8,K8,K8,K8]}), + roundtrip('PDU', {'PDU',1,false,[K8,K8,K8,K8,K8,K8,K8,K8, + K8,K8,K8,K8,K8,K8,K8,K8]}), + ok. + +roundtrip(T, V) -> + {ok,E} = 'Fragmented':encode(T, V), + {ok,V} = 'Fragmented':decode(T, E), + ok. diff --git a/lib/asn1/test/testInfObj.erl b/lib/asn1/test/testInfObj.erl index c7b19a0cbb..76f216fdad 100644 --- a/lib/asn1/test/testInfObj.erl +++ b/lib/asn1/test/testInfObj.erl @@ -59,13 +59,73 @@ main(_Erule) -> {'ConstructedPdu',2,{'CONSTRUCTED-DEFAULT_Type',999,false}}), roundtrip('InfObj', 'ConstructedPdu', {'ConstructedPdu',3,true}), + {'ConstructedPdu',4,{_,42,<<13:7>>}} = + enc_dec('InfObj', 'ConstructedPdu', + {'ConstructedPdu',4,{'',42,<<13:7>>}}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',5,{i,-250138}}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',5,{b,<<13456:15>>}}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',6,[]}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',6,[10,7,16,1,5,13,12]}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',7,[]}), + roundtrip('InfObj', 'ConstructedPdu', + {'ConstructedPdu',7,[64,1,19,17,35]}), + + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',1,{'CONSTRUCTED-DEFAULT_Type',-2001,true}}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',2,{'CONSTRUCTED-DEFAULT_Type',999,false}}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',3,true}), + {'ConstructedSet',4,{_,42,<<13:7>>}} = + enc_dec('InfObj', 'ConstructedSet', + {'ConstructedSet',4,{'',42,<<13:7>>}}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',5,{i,-250138}}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',5,{b,<<13456:15>>}}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',6,[]}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',6,[10,7,16,1,5,13,12]}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',7,[]}), + roundtrip('InfObj', 'ConstructedSet', + {'ConstructedSet',7,[64,1,19,17,35]}), roundtrip('InfObj', 'Seq2', {'Seq2',42,[true,false,false,true], - [false,true,false]}). + [false,true,false]}), + + roundtrip('InfObj', 'OptionalInSeq', {'OptionalInSeq',3,true}), + roundtrip('InfObj', 'OptionalInSeq', {'OptionalInSeq',3,asn1_NOVALUE}), + + roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,false}), + roundtrip('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,true}), + {'DefaultInSeq',3,true} = + enc_dec('InfObj', 'DefaultInSeq', {'DefaultInSeq',3,asn1_DEFAULT}), + roundtrip('InfObj', 'Multiple-Optionals', + {'Multiple-Optionals',1,42,true,"abc"}), + roundtrip('InfObj', 'Multiple-Optionals', + {'Multiple-Optionals',1,asn1_NOVALUE,true,"abc"}), + roundtrip('InfObj', 'Multiple-Optionals', + {'Multiple-Optionals',1,42,asn1_NOVALUE,"abc"}), + roundtrip('InfObj', 'Multiple-Optionals', + {'Multiple-Optionals',1,42,true,asn1_NOVALUE}), + roundtrip('InfObj', 'Multiple-Optionals', + {'Multiple-Optionals',1,asn1_NOVALUE,asn1_NOVALUE,asn1_NOVALUE}). roundtrip(M, T, V) -> {ok,Enc} = M:encode(T, V), {ok,V} = M:decode(T, Enc), ok. + +enc_dec(M, T, V0) -> + {ok,Enc} = M:encode(T, V0), + {ok,V} = M:decode(T, Enc), + V. diff --git a/lib/asn1/test/testParameterizedInfObj.erl b/lib/asn1/test/testParameterizedInfObj.erl index 1dfa52f401..02847e502b 100644 --- a/lib/asn1/test/testParameterizedInfObj.erl +++ b/lib/asn1/test/testParameterizedInfObj.erl @@ -86,8 +86,18 @@ param(Erule) -> asn1_wrapper:encode('Param','OS1',[1,2,3,4]) end, + roundtrip('Scl', {'Scl',42,{a,9738654}}), + roundtrip('Scl', {'Scl',42,{b,false}}), + roundtrip('Scl', {'Scl',42,{b,true}}), + + ok. + +roundtrip(T, V) -> + {ok,Enc} = 'Param':encode(T, V), + {ok,V} = 'Param':decode(T, Enc), ok. + ranap(_Erule) -> PIEVal2 = [{'ProtocolIE-Field',4,ignore,{radioNetwork,'rab-pre-empted'}}], ?line Val2 = diff --git a/lib/asn1/test/testPrimStrings.erl b/lib/asn1/test/testPrimStrings.erl index e2322c92a9..1762e34599 100644 --- a/lib/asn1/test/testPrimStrings.erl +++ b/lib/asn1/test/testPrimStrings.erl @@ -28,9 +28,46 @@ -export([bmp_string/1]). -export([times/1]). -export([utf8_string/1]). +-export([fragmented/1]). -include_lib("test_server/include/test_server.hrl"). +fragmented(Rules) -> + Lens = fragmented_lengths(), + fragmented_octet_string(Rules, Lens), + case Rules of + per -> + %% NYI. + ok; + _ -> + fragmented_strings(Lens) + end. + +fragmented_strings(Lens) -> + Types = ['Ns','Ps','Ps11','Vis','IA5'], + [fragmented_strings(Len, Types) || Len <- Lens], + ok. + +fragmented_strings(Len, Types) -> + Str = make_ns_value(Len), + [roundtrip(Type, Str) || Type <- Types], + ok. + +make_ns_value(0) -> []; +make_ns_value(N) -> [($0 - 1) + random:uniform(10)|make_ns_value(N-1)]. + +fragmented_lengths() -> + K16 = 1 bsl 14, + K32 = K16 + K16, + K48 = K32 + K16, + K64 = K48 + K16, + [0,1,14,15,16,17,127,128, + K16-1,K16,K16+1,K16+(1 bsl 7)-1,K16+(1 bsl 7),K16+(1 bsl 7)+1, + K32-1,K32,K32+1,K32+(1 bsl 7)-1,K32+(1 bsl 7),K32+(1 bsl 7)+1, + K48-1,K48,K48+1,K48+(1 bsl 7)-1,K48+(1 bsl 7),K48+(1 bsl 7)+1, + K64-1,K64,K64+1,K64+(1 bsl 7)-1,K64+(1 bsl 7),K64+(1 bsl 7)+1, + K64+K16-1,K64+K16,K64+K16+1]. + bit_string(Rules) -> %%========================================================== @@ -311,8 +348,6 @@ octet_string(Rules) -> ok end, - fragmented_octet_string(Rules), - S255 = lists:seq(1, 255), Strings = {type,true,"","1","12","345",true, S255,[$a|S255],[$a,$b|S255],397}, @@ -324,17 +359,7 @@ octet_string(Rules) -> p_roundtrip('OsVarStringsExt', ShortenedStrings), ok. -fragmented_octet_string(Erules) -> - K16 = 1 bsl 14, - K32 = K16 + K16, - K48 = K32 + K16, - K64 = K48 + K16, - Lens = [0,1,14,15,16,17,127,128, - K16-1,K16,K16+1,K16+(1 bsl 7)-1,K16+(1 bsl 7),K16+(1 bsl 7)+1, - K32-1,K32,K32+1,K32+(1 bsl 7)-1,K32+(1 bsl 7),K32+(1 bsl 7)+1, - K48-1,K48,K48+1,K48+(1 bsl 7)-1,K48+(1 bsl 7),K48+(1 bsl 7)+1, - K64-1,K64,K64+1,K64+(1 bsl 7)-1,K64+(1 bsl 7),K64+(1 bsl 7)+1, - K64+K16-1,K64+K16,K64+K16+1], +fragmented_octet_string(Erules, Lens) -> Types = ['Os','OsFrag','OsFragExt'], [fragmented_octet_string(Erules, Types, L) || L <- Lens], fragmented_octet_string(Erules, ['FixedOs65536'], 65536), diff --git a/lib/asn1/test/testSeqOf.erl b/lib/asn1/test/testSeqOf.erl index db537b1478..c50cc27f6f 100644 --- a/lib/asn1/test/testSeqOf.erl +++ b/lib/asn1/test/testSeqOf.erl @@ -83,6 +83,32 @@ main(_Rules) -> roundtrip('Seq4', #'Seq4'{seq43=SeqIn3}, #'Seq4'{seq41=[],seq42=[], seq43=SeqIn3}), + + roundtrip('Seq5', {'Seq5',true,[],77}), + roundtrip('Seq5', {'Seq5',true,[""],77}), + roundtrip('Seq5', {'Seq5',true,["a"],77}), + roundtrip('Seq5', {'Seq5',true,["ab"],77}), + roundtrip('Seq5', {'Seq5',true,["abc"],77}), + + roundtrip('Seq6', {'Seq6',[],[],101}), + roundtrip('Seq6', {'Seq6',[],[7],101}), + roundtrip('Seq6', {'Seq6',[],[1,7],101}), + roundtrip('Seq6', {'Seq6',[1],[],101}), + roundtrip('Seq6', {'Seq6',[2],[7],101}), + roundtrip('Seq6', {'Seq6',[3],[1,7],101}), + + roundtrip('Seq8', {'Seq8',[],37}), + + roundtrip('Seq9', {'Seq9',true,[],97}), + roundtrip('Seq9', {'Seq9',true,[""],97}), + roundtrip('Seq9', {'Seq9',true,["x"],97}), + roundtrip('Seq9', {'Seq9',true,["xy"],97}), + roundtrip('Seq9', {'Seq9',true,["xyz"],97}), + + roundtrip('Seq10', {'Seq10',true,[""],97}), + roundtrip('Seq10', {'Seq10',true,["a"],97}), + roundtrip('Seq10', {'Seq10',true,["a","b"],97}), + roundtrip('Seq10', {'Seq10',true,["a","b","c"],97}), roundtrip('SeqEmp', #'SeqEmp'{seq1=[#'Empty'{}]}), diff --git a/lib/common_test/src/ct_hooks.erl b/lib/common_test/src/ct_hooks.erl index 3d87a82e24..e845e9e908 100644 --- a/lib/common_test/src/ct_hooks.erl +++ b/lib/common_test/src/ct_hooks.erl @@ -50,9 +50,8 @@ -spec init(State :: term()) -> ok | {fail, Reason :: term()}. init(Opts) -> - call(get_new_hooks(Opts, undefined) ++ get_builtin_hooks(Opts), + call(get_builtin_hooks(Opts) ++ get_new_hooks(Opts, undefined), ok, init, []). - %% @doc Called after all suites are done. -spec terminate(Hooks :: term()) -> @@ -276,8 +275,10 @@ get_new_hooks(Config, Fun) -> end, get_new_hooks(Config)). get_new_hooks(Config) when is_list(Config) -> - lists:flatmap(fun({?config_name, HookConfigs}) -> + lists:flatmap(fun({?config_name, HookConfigs}) when is_list(HookConfigs) -> HookConfigs; + ({?config_name, HookConfig}) when is_atom(HookConfig) -> + [HookConfig]; (_) -> [] end, Config); diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl index f5355bfefe..1a6e4d31a8 100644 --- a/lib/common_test/src/ct_logs.erl +++ b/lib/common_test/src/ct_logs.erl @@ -61,6 +61,7 @@ -define(index_name, "index.html"). -define(totals_name, "totals.info"). -define(log_cache_name, "ct_log_cache"). +-define(misc_io_log, "misc_io.log.html"). -define(table_color1,"#ADD8E6"). -define(table_color2,"#E4F0FE"). @@ -446,6 +447,8 @@ tc_print(Category,Importance,Format,Args) -> ct_util:get_verbosity('$unspecified'); {error,bad_invocation} -> ?MAX_VERBOSITY; + {error,_Failure} -> + ?MAX_VERBOSITY; Val -> Val end, @@ -521,7 +524,7 @@ int_footer() -> div_header(Class) -> div_header(Class,"User"). div_header(Class,Printer) -> - "<div class=\"" ++ atom_to_list(Class) ++ "\"><b>*** " ++ Printer ++ + "\n<div class=\"" ++ atom_to_list(Class) ++ "\"><b>*** " ++ Printer ++ " " ++ log_timestamp(now()) ++ " ***</b>". div_footer() -> "</div>". @@ -615,6 +618,34 @@ logger(Parent, Mode, Verbosity) -> end end end, + + test_server_io:start_link(), + MiscIoName = filename:join(Dir, ?misc_io_log), + {ok,MiscIoFd} = file:open(MiscIoName, + [write,{encoding,utf8}]), + test_server_io:set_fd(unexpected_io, MiscIoFd), + + {MiscIoHeader,MiscIoFooter} = + case get_ts_html_wrapper("Pre/post-test I/O log", Dir, false, + Dir, undefined, utf8) of + {basic_html,UH,UF} -> + {UH,UF}; + {xhtml,UH,UF} -> + {UH,UF} + end, + io:put_chars(MiscIoFd, + [MiscIoHeader, + "<a name=\"pretest\"></a>\n", + xhtml("<br>\n<h2>Pre-test Log</h2>", + "<br />\n<h3>PRE-TEST LOG</h3>"), + "\n<pre>\n"]), + MiscIoDivider = + "\n<a name=\"posttest\"></a>\n"++ + xhtml("</pre>\n<br><h2>Post-test Log</h2>\n<pre>\n", + "</pre>\n<br />\n<h3>POST-TEST LOG</h3>\n<pre>\n"), + ct_util:set_testdata_async({misc_io_log,{filename:absname(MiscIoName), + MiscIoDivider,MiscIoFooter}}), + ct_event:notify(#event{name=start_logging,node=node(), data=AbsDir}), make_all_runs_index(start), @@ -625,7 +656,7 @@ logger(Parent, Mode, Verbosity) -> end, file:set_cwd(Dir), make_last_run_index(Time), - CtLogFd = open_ctlog(), + CtLogFd = open_ctlog(?misc_io_log), io:format(CtLogFd,int_header()++int_footer(), [log_timestamp(now()),"Common Test Logger started"]), Parent ! {started,self(),{Time,filename:absname("")}}, @@ -690,14 +721,15 @@ logger_loop(State) -> false -> %% Group leader is dead, so write to the %% CtLog or unexpected_io log instead - unexpected_io(Pid,Category,List,State), + unexpected_io(Pid,Category,Importance, + List,State), logger_loop(State) end; {ct_log,_Fd,TCGLs} -> %% If category is ct_internal then write %% to ct_log, else write to unexpected_io %% log - unexpected_io(Pid,Category,List,State), + unexpected_io(Pid,Category,Importance,List,State), logger_loop(State#logger_state{ tc_groupleaders = TCGLs}) end; @@ -798,7 +830,7 @@ print_to_log(sync, FromPid, Category, TCGL, List, State) -> IoFun = create_io_fun(FromPid, State), io:format(TCGL,"~ts", [lists:foldl(IoFun, [], List)]); true -> - unexpected_io(FromPid,Category,List,State) + unexpected_io(FromPid,Category,?MAX_IMPORTANCE,List,State) end, State; @@ -814,7 +846,8 @@ print_to_log(async, FromPid, Category, TCGL, List, State) -> end; true -> fun() -> - unexpected_io(FromPid,Category,List,State) + unexpected_io(FromPid,Category,?MAX_IMPORTANCE, + List,State) end end, case State#logger_state.async_print_jobs of @@ -918,7 +951,7 @@ set_evmgr_gl(GL) -> EvMgrPid -> group_leader(GL,EvMgrPid) end. -open_ctlog() -> +open_ctlog(MiscIoName) -> {ok,Fd} = file:open(?ct_log_name,[write,{encoding,utf8}]), io:format(Fd, header("Common Test Framework Log", {[],[1,2],[]}), []), case file:consult(ct_run:variables_file_name("../")) of @@ -933,10 +966,21 @@ open_ctlog() -> "No configuration found for test!!\n", [Variables,Reason]) end, + io:format(Fd, + xhtml("<br><br><h2>Pre/post-test I/O Log</h2>\n", + "<br /><br />\n<h4>PRE/POST TEST I/O LOG</h4>\n"), []), + io:format(Fd, + "\n<ul>\n" + "<li><a href=\"~ts#pretest\">" + "View I/O logged before the test run</a></li>\n" + "<li><a href=\"~ts#posttest\">" + "View I/O logged after the test run</a></li>\n</ul>\n", + [MiscIoName,MiscIoName]), + print_style(Fd,undefined), io:format(Fd, - xhtml("<br><br><h2>Progress Log</h2>\n<pre>\n", - "<br /><br /><h4>PROGRESS LOG</h4>\n<pre>\n"), []), + xhtml("<br><h2>Progress Log</h2>\n<pre>\n", + "<br />\n<h4>PROGRESS LOG</h4>\n<pre>\n"), []), Fd. print_style(Fd,undefined) -> @@ -2852,6 +2896,9 @@ make_relative1(DirTs, CwdTs) -> %%% @doc %%% get_ts_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding) -> + get_ts_html_wrapper(TestName, undefined, PrintLabel, Cwd, TableCols, Encoding). + +get_ts_html_wrapper(TestName, Logdir, PrintLabel, Cwd, TableCols, Encoding) -> TestName1 = if is_list(TestName) -> lists:flatten(TestName); true -> @@ -2872,7 +2919,12 @@ get_ts_html_wrapper(TestName, PrintLabel, Cwd, TableCols, Encoding) -> end end, CTPath = code:lib_dir(common_test), - {ok,CtLogdir} = get_log_dir(true), + + {ok,CtLogdir} = + if Logdir == undefined -> get_log_dir(true); + true -> {ok,Logdir} + end, + AllRuns = make_relative(filename:join(filename:dirname(CtLogdir), ?all_runs_name), Cwd), TestIndex = make_relative(filename:join(filename:dirname(CtLogdir), @@ -3066,10 +3118,12 @@ html_encoding(latin1) -> html_encoding(utf8) -> "utf-8". -unexpected_io(Pid,ct_internal,List,#logger_state{ct_log_fd=Fd}=State) -> +unexpected_io(Pid,ct_internal,_Importance,List,State) -> IoFun = create_io_fun(Pid,State), - io:format(Fd, "~ts", [lists:foldl(IoFun, [], List)]); -unexpected_io(Pid,_Category,List,State) -> + io:format(State#logger_state.ct_log_fd, "~ts", + [lists:foldl(IoFun, [], List)]); +unexpected_io(Pid,_Category,_Importance,List,State) -> IoFun = create_io_fun(Pid,State), Data = io_lib:format("~ts", [lists:foldl(IoFun, [], List)]), - test_server_io:print_unexpected(Data). + test_server_io:print_unexpected(Data), + ok. diff --git a/lib/common_test/src/ct_netconfc.erl b/lib/common_test/src/ct_netconfc.erl index e094ee877a..7f10e1db09 100644 --- a/lib/common_test/src/ct_netconfc.erl +++ b/lib/common_test/src/ct_netconfc.erl @@ -247,7 +247,11 @@ -define(is_timeout(T), (is_integer(T) orelse T==infinity)). -define(is_filter(F), - (is_atom(F) orelse (is_tuple(F) andalso is_atom(element(1,F))))). + (?is_simple_xml(F) + orelse (F==[]) + orelse (is_list(F) andalso ?is_simple_xml(hd(F))))). +-define(is_simple_xml(Xml), + (is_atom(Xml) orelse (is_tuple(Xml) andalso is_atom(element(1,Xml))))). -define(is_string(S), (is_list(S) andalso is_integer(hd(S)))). %%---------------------------------------------------------------------- @@ -540,22 +544,51 @@ get_capabilities(Client) -> get_capabilities(Client, Timeout) -> call(Client, get_capabilities, Timeout). -%% @private +%%---------------------------------------------------------------------- +%% @spec send(Client, SimpleXml) -> Result +%% @equiv send(Client, SimpleXml, infinity) send(Client, SimpleXml) -> send(Client, SimpleXml, ?DEFAULT_TIMEOUT). -%% @private + +%%---------------------------------------------------------------------- +-spec send(Client, SimpleXml, Timeout) -> Result when + Client :: client(), + SimpleXml :: simple_xml(), + Timeout :: timeout(), + Result :: ok | {error,error_reason()}. +%% @doc Send an XML document to the server. +%% +%% The given XML document is sent as is to the server. This function +%% can be used for sending XML documents that can not be expressed by +%% other interface functions in this module. send(Client, SimpleXml, Timeout) -> call(Client,{send, Timeout, SimpleXml}). -%% @private +%%---------------------------------------------------------------------- +%% @spec send_rpc(Client, SimpleXml) -> Result +%% @equiv send_rpc(Client, SimpleXml, infinity) send_rpc(Client, SimpleXml) -> send_rpc(Client, SimpleXml, ?DEFAULT_TIMEOUT). -%% @private + +%%---------------------------------------------------------------------- +-spec send_rpc(Client, SimpleXml, Timeout) -> Result when + Client :: client(), + SimpleXml :: simple_xml(), + Timeout :: timeout(), + Result :: ok | {error,error_reason()}. +%% @doc Send a Netconf <code>rpc</code> request to the server. +%% +%% The given XML document is wrapped in a valid Netconf +%% <code>rpc</code> request and sent to the server. The +%% <code>message-id</code> and namespace attributes are added to the +%% <code>rpc</code> element. +%% +%% This function can be used for sending <code>rpc</code> requests +%% that can not be expressed by other interface functions in this +%% module. send_rpc(Client, SimpleXml, Timeout) -> call(Client,{send_rpc, SimpleXml, Timeout}). - - %%---------------------------------------------------------------------- %% @spec lock(Client, Target) -> Result %% @equiv lock(Client, Target, infinity) @@ -761,7 +794,7 @@ create_subscription(Client,Timeout) when ?is_timeout(Timeout) -> create_subscription(Client,?DEFAULT_STREAM,Timeout); create_subscription(Client,Stream) - when is_list(Stream) -> + when ?is_string(Stream) -> create_subscription(Client,Stream,?DEFAULT_TIMEOUT); create_subscription(Client,Filter) when ?is_filter(Filter) -> @@ -769,14 +802,14 @@ create_subscription(Client,Filter) ?DEFAULT_TIMEOUT). create_subscription(Client,Stream,Timeout) - when is_list(Stream) andalso + when ?is_string(Stream) andalso ?is_timeout(Timeout) -> call(Client,{send_rpc_op,{create_subscription,self()}, [Stream,undefined,undefined,undefined], Timeout}); create_subscription(Client,StartTime,StopTime) - when is_list(StartTime) andalso - is_list(StopTime) -> + when ?is_string(StartTime) andalso + ?is_string(StopTime) -> create_subscription(Client,?DEFAULT_STREAM,StartTime,StopTime, ?DEFAULT_TIMEOUT); create_subscription(Client,Filter,Timeout) @@ -784,28 +817,28 @@ create_subscription(Client,Filter,Timeout) ?is_timeout(Timeout) -> create_subscription(Client,?DEFAULT_STREAM,Filter,Timeout); create_subscription(Client,Stream,Filter) - when is_list(Stream) andalso + when ?is_string(Stream) andalso ?is_filter(Filter) -> create_subscription(Client,Stream,Filter,?DEFAULT_TIMEOUT). create_subscription(Client,StartTime,StopTime,Timeout) - when is_list(StartTime) andalso - is_list(StopTime) andalso + when ?is_string(StartTime) andalso + ?is_string(StopTime) andalso ?is_timeout(Timeout) -> create_subscription(Client,?DEFAULT_STREAM,StartTime,StopTime,Timeout); create_subscription(Client,Stream,StartTime,StopTime) - when is_list(Stream) andalso - is_list(StartTime) andalso - is_list(StopTime) -> + when ?is_string(Stream) andalso + ?is_string(StartTime) andalso + ?is_string(StopTime) -> create_subscription(Client,Stream,StartTime,StopTime,?DEFAULT_TIMEOUT); create_subscription(Client,Filter,StartTime,StopTime) when ?is_filter(Filter) andalso - is_list(StartTime) andalso - is_list(StopTime) -> + ?is_string(StartTime) andalso + ?is_string(StopTime) -> create_subscription(Client,?DEFAULT_STREAM,Filter, StartTime,StopTime,?DEFAULT_TIMEOUT); create_subscription(Client,Stream,Filter,Timeout) - when is_list(Stream) andalso + when ?is_string(Stream) andalso ?is_filter(Filter) andalso ?is_timeout(Timeout) -> call(Client,{send_rpc_op,{create_subscription,self()}, @@ -813,18 +846,18 @@ create_subscription(Client,Stream,Filter,Timeout) Timeout}). create_subscription(Client,Stream,StartTime,StopTime,Timeout) - when is_list(Stream) andalso - is_list(StartTime) andalso - is_list(StopTime) andalso + when ?is_string(Stream) andalso + ?is_string(StartTime) andalso + ?is_string(StopTime) andalso ?is_timeout(Timeout) -> call(Client,{send_rpc_op,{create_subscription,self()}, [Stream,undefined,StartTime,StopTime], Timeout}); create_subscription(Client,Stream,Filter,StartTime,StopTime) - when is_list(Stream) andalso + when ?is_string(Stream) andalso ?is_filter(Filter) andalso - is_list(StartTime) andalso - is_list(StopTime) -> + ?is_string(StartTime) andalso + ?is_string(StopTime) -> create_subscription(Client,Stream,Filter,StartTime,StopTime,?DEFAULT_TIMEOUT). %%---------------------------------------------------------------------- @@ -832,7 +865,7 @@ create_subscription(Client,Stream,Filter,StartTime,StopTime) Result when Client :: client(), Stream :: stream_name(), - Filter :: simple_xml(), + Filter :: simple_xml() | [simple_xml()], StartTime :: xs_datetime(), StopTime :: xs_datetime(), Timeout :: timeout(), @@ -855,8 +888,7 @@ create_subscription(Client,Stream,Filter,StartTime,StopTime) %% possible events is of interest. The format of this parameter is %% the same as that of the filter parameter in the NETCONF protocol %% operations. If not present, all events not precluded by other -%% parameters will be sent. See section 3.6 for more information on -%% filters.</dd> +%% parameters will be sent.</dd> %% %% <dt>StartTime:</dt> %% <dd>An optional parameter used to trigger the replay feature and @@ -1241,8 +1273,10 @@ filter(undefined) -> []; filter({xpath,Filter}) when ?is_string(Filter) -> [{filter,[{type,"xpath"},{select, Filter}],[]}]; +filter(Filter) when is_list(Filter) -> + [{filter,[{type,"subtree"}],Filter}]; filter(Filter) -> - [{filter,[{type,"subtree"}],[Filter]}]. + filter([Filter]). maybe_element(_,undefined) -> []; diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl index 266ca73417..7c797be03e 100644 --- a/lib/common_test/src/ct_run.erl +++ b/lib/common_test/src/ct_run.erl @@ -1883,7 +1883,7 @@ verify_suites(TestSuites) -> atom_to_list( Suite)), io:format(user, - "Suite ~w not found" + "Suite ~w not found " "in directory ~ts~n", [Suite,TestDir]), {Found,[{DS,[Name]}|NotFound]} diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl index 68e76c2396..bcc4caa62e 100644 --- a/lib/common_test/src/ct_util.erl +++ b/lib/common_test/src/ct_util.erl @@ -187,6 +187,7 @@ do_start(Parent, Mode, LogDir, Verbosity) -> false -> ok end, + {StartTime,TestLogDir} = ct_logs:init(Mode, Verbosity), ct_event:notify(#event{name=test_start, @@ -198,12 +199,26 @@ do_start(Parent, Mode, LogDir, Verbosity) -> ok -> Parent ! {self(),started}; {fail,CTHReason} -> - ct_logs:tc_print('Suite Callback',CTHReason,[]), + ErrorInfo = if is_atom(CTHReason) -> + io_lib:format("{~p,~p}", + [CTHReason, + erlang:get_stacktrace()]); + true -> + CTHReason + end, + ct_logs:tc_print('Suite Callback',ErrorInfo,[]), self() ! {{stop,{self(),{user_error,CTHReason}}}, {Parent,make_ref()}} catch _:CTHReason -> - ct_logs:tc_print('Suite Callback',CTHReason,[]), + ErrorInfo = if is_atom(CTHReason) -> + io_lib:format("{~p,~p}", + [CTHReason, + erlang:get_stacktrace()]); + true -> + CTHReason + end, + ct_logs:tc_print('Suite Callback',ErrorInfo,[]), self() ! {{stop,{self(),{user_error,CTHReason}}}, {Parent,make_ref()}} end, @@ -286,14 +301,23 @@ get_start_dir() -> %% handle verbosity outside ct_util_server (let the client read %% the verbosity table) to avoid possible deadlock situations set_verbosity(Elem = {_Category,_Level}) -> - ets:insert(?verbosity_table, Elem), - ok. + try ets:insert(?verbosity_table, Elem) of + _ -> + ok + catch + _:Reason -> + {error,Reason} + end. + get_verbosity(Category) -> - case ets:lookup(?verbosity_table, Category) of + try ets:lookup(?verbosity_table, Category) of [{Category,Level}] -> Level; _ -> undefined + catch + _:Reason -> + {error,Reason} end. loop(Mode,TestData,StartDir) -> @@ -383,19 +407,38 @@ loop(Mode,TestData,StartDir) -> return(From,StartDir), loop(From,TestData,StartDir); {{stop,Info},From} -> + test_server_io:reset_state(), + {MiscIoName,MiscIoDivider,MiscIoFooter} = + proplists:get_value(misc_io_log,TestData), + {ok,MiscIoFd} = file:open(MiscIoName, + [append,{encoding,utf8}]), + io:put_chars(MiscIoFd, MiscIoDivider), + test_server_io:set_fd(unexpected_io, MiscIoFd), + Time = calendar:local_time(), ct_event:sync_notify(#event{name=test_done, node=node(), data=Time}), - Callbacks = ets:lookup_element(?suite_table, - ct_hooks, - #suite_data.value), + Callbacks = + try ets:lookup_element(?suite_table, + ct_hooks, + #suite_data.value) of + CTHMods -> CTHMods + catch + %% this is because ct_util failed in init + error:badarg -> [] + end, ct_hooks:terminate(Callbacks), close_connections(ets:tab2list(?conn_table)), ets:delete(?conn_table), ets:delete(?board_table), ets:delete(?suite_table), ets:delete(?verbosity_table), + + io:put_chars(MiscIoFd, "\n</pre>\n"++MiscIoFooter), + test_server_io:stop([unexpected_io]), + test_server_io:finish(), + ct_logs:close(Info, StartDir), ct_event:stop(), ct_config:stop(), @@ -670,8 +713,14 @@ reset_silent_connections() -> %%% @see ct stop(Info) -> case whereis(ct_util_server) of - undefined -> ok; - _ -> call({stop,Info}) + undefined -> + ok; + CtUtilPid -> + Ref = monitor(process, CtUtilPid), + call({stop,Info}), + receive + {'DOWN',Ref,_,_,_} -> ok + end end. %%%----------------------------------------------------------------- diff --git a/lib/common_test/src/cth_log_redirect.erl b/lib/common_test/src/cth_log_redirect.erl index 958b7a94c7..11af1aa346 100644 --- a/lib/common_test/src/cth_log_redirect.erl +++ b/lib/common_test/src/cth_log_redirect.erl @@ -25,16 +25,29 @@ %% CTH Callbacks --export([id/1, init/2, post_init_per_group/4, pre_end_per_group/3, - post_end_per_testcase/4]). +-export([id/1, init/2, + pre_init_per_suite/3, pre_end_per_suite/3, post_end_per_suite/4, + pre_init_per_group/3, post_init_per_group/4, + pre_end_per_group/3, post_end_per_group/4, + pre_init_per_testcase/3, post_end_per_testcase/4]). %% Event handler Callbacks -export([init/1, handle_event/2, handle_call/2, handle_info/2, terminate/1]). +%% Other +-export([handle_remote_events/1]). + -include("ct.hrl"). +-record(eh_state, {log_func, + curr_suite, + curr_group, + curr_func, + parallel_tcs = false, + handle_remote_events = false}). + id(_Opts) -> ?MODULE. @@ -42,36 +55,62 @@ init(?MODULE, _Opts) -> error_logger:add_report_handler(?MODULE), tc_log_async. +pre_init_per_suite(Suite, Config, State) -> + set_curr_func({Suite,init_per_suite}, Config), + {Config, State}. + +pre_end_per_suite(Suite, Config, State) -> + set_curr_func({Suite,end_per_suite}, Config), + {Config, State}. + +post_end_per_suite(_Suite, Config, Return, State) -> + set_curr_func(undefined, Config), + {Return, State}. + +pre_init_per_group(Group, Config, State) -> + set_curr_func({group,Group,init_per_group}, Config), + {Config, State}. + post_init_per_group(Group, Config, Result, tc_log_async) -> case lists:member(parallel,proplists:get_value( tc_group_properties,Config,[])) of true -> - {Result, {set_log_func(ct_log),Group}}; + {Result, {set_log_func(tc_log),Group}}; false -> {Result, tc_log_async} end; post_init_per_group(_Group, _Config, Result, State) -> {Result, State}. +pre_init_per_testcase(TC, Config, State) -> + set_curr_func(TC, Config), + {Config, State}. + post_end_per_testcase(_TC, _Config, Result, State) -> %% Make sure that the event queue is flushed %% before ending this test case. gen_event:call(error_logger, ?MODULE, flush, 300000), {Result, State}. -pre_end_per_group(Group, Config, {ct_log, Group}) -> +pre_end_per_group(Group, Config, {tc_log, Group}) -> + set_curr_func({group,Group,end_per_group}, Config), {Config, set_log_func(tc_log_async)}; -pre_end_per_group(_Group, Config, State) -> +pre_end_per_group(Group, Config, State) -> + set_curr_func({group,Group,end_per_group}, Config), {Config, State}. +post_end_per_group(_Group, Config, Return, State) -> + set_curr_func({group,undefined}, Config), + {Return, State}. %% Copied and modified from sasl_report_tty_h.erl init(_Type) -> - {ok, tc_log_async}. + {ok, #eh_state{log_func = tc_log_async}}. -handle_event({_Type, GL, _Msg}, State) when node(GL) /= node() -> +handle_event({_Type,GL,_Msg}, #eh_state{handle_remote_events = false} = State) + when node(GL) /= node() -> {ok, State}; -handle_event(Event, LogFunc) -> +handle_event(Event, #eh_state{log_func = LogFunc} = State) -> case lists:keyfind(sasl, 1, application:which_applications()) of false -> sasl_not_started; @@ -80,7 +119,8 @@ handle_event(Event, LogFunc) -> SReport = sasl_report:format_report(group_leader(), ErrLogType, tag_event(Event)), if is_list(SReport) -> - ct_logs:LogFunc(sasl, ?STD_IMPORTANCE, "System", SReport, []); + SaslHeader = format_header(State), + ct_logs:LogFunc(sasl, ?STD_IMPORTANCE, SaslHeader, SReport, []); true -> %% Report is an atom if no logging is to be done ignore end @@ -88,20 +128,50 @@ handle_event(Event, LogFunc) -> EReport = error_logger_tty_h:write_event( tag_event(Event),io_lib), if is_list(EReport) -> - ct_logs:LogFunc(error_logger, ?STD_IMPORTANCE, "System", EReport, []); + ErrHeader = format_header(State), + ct_logs:LogFunc(error_logger, ?STD_IMPORTANCE, ErrHeader, EReport, []); true -> %% Report is an atom if no logging is to be done ignore end, - {ok, LogFunc}. + {ok, State}. handle_info(_,State) -> {ok, State}. handle_call(flush,State) -> {ok, ok, State}; -handle_call({set_logfunc,NewLogFunc},_) -> - {ok, NewLogFunc, NewLogFunc}; -handle_call(_Query, _State) -> {error, bad_query}. + +handle_call({set_curr_func,{group,Group,Conf},Config}, State) -> + Parallel = case proplists:get_value(tc_group_properties, Config) of + undefined -> false; + Props -> lists:member(parallel, Props) + end, + {ok, ok, State#eh_state{curr_group = Group, + curr_func = Conf, + parallel_tcs = Parallel}}; +handle_call({set_curr_func,{group,undefined},_Config}, State) -> + {ok, ok, State#eh_state{curr_group = undefined, + curr_func = undefined, + parallel_tcs = false}}; +handle_call({set_curr_func,{Suite,Conf},_Config}, State) -> + {ok, ok, State#eh_state{curr_suite = Suite, + curr_func = Conf, + parallel_tcs = false}}; +handle_call({set_curr_func,undefined,_Config}, State) -> + {ok, ok, State#eh_state{curr_suite = undefined, + curr_func = undefined, + parallel_tcs = false}}; +handle_call({set_curr_func,TC,_Config}, State) -> + {ok, ok, State#eh_state{curr_func = TC}}; + +handle_call({set_logfunc,NewLogFunc}, State) -> + {ok, NewLogFunc, State#eh_state{log_func = NewLogFunc}}; + +handle_call({handle_remote_events,Bool}, State) -> + {ok, ok, State#eh_state{handle_remote_events = Bool}}; + +handle_call(_Query, _State) -> + {error, bad_query}. terminate(_State) -> error_logger:delete_report_handler(?MODULE), @@ -110,5 +180,48 @@ terminate(_State) -> tag_event(Event) -> {calendar:local_time(), Event}. +set_curr_func(CurrFunc, Config) -> + gen_event:call(error_logger, ?MODULE, {set_curr_func, CurrFunc, Config}). + set_log_func(Func) -> gen_event:call(error_logger, ?MODULE, {set_logfunc, Func}). + +handle_remote_events(Bool) -> + gen_event:call(error_logger, ?MODULE, {handle_remote_events, Bool}). + +%%%----------------------------------------------------------------- + +format_header(#eh_state{curr_suite = undefined, + curr_group = undefined, + curr_func = undefined}) -> + io_lib:format("System report", []); + +format_header(#eh_state{curr_suite = Suite, + curr_group = undefined, + curr_func = undefined}) -> + io_lib:format("System report during ~w", [Suite]); + +format_header(#eh_state{curr_suite = Suite, + curr_group = undefined, + curr_func = TcOrConf}) -> + io_lib:format("System report during ~w:~w/1", + [Suite,TcOrConf]); + +format_header(#eh_state{curr_suite = Suite, + curr_group = Group, + curr_func = Conf}) when Conf == init_per_group; + Conf == end_per_group -> + io_lib:format("System report during ~w:~w/2 for ~w", + [Suite,Conf,Group]); + +format_header(#eh_state{curr_suite = Suite, + curr_group = Group, + parallel_tcs = true}) -> + io_lib:format("System report during ~w in ~w", + [Group,Suite]); + +format_header(#eh_state{curr_suite = Suite, + curr_group = Group, + curr_func = TC}) -> + io_lib:format("System report during ~w:~w/1 in ~w", + [Suite,TC,Group]). diff --git a/lib/common_test/test/Makefile b/lib/common_test/test/Makefile index 9d2edcd653..085f19d023 100644 --- a/lib/common_test/test/Makefile +++ b/lib/common_test/test/Makefile @@ -51,6 +51,7 @@ MODULES= \ ct_master_SUITE \ ct_misc_1_SUITE \ ct_hooks_SUITE \ + ct_pre_post_test_io_SUITE \ ct_netconfc_SUITE \ ct_basic_html_SUITE \ ct_auto_compile_SUITE \ diff --git a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl index 8fcd35e0a4..1d08ce167b 100644 --- a/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl +++ b/lib/common_test/test/ct_gen_conn_SUITE_data/proto.erl @@ -1,10 +1,21 @@ -%%% @author Peter Andersson <[email protected]> -%%% @copyright (C) 2013, Peter Andersson -%%% @doc -%%% -%%% @end -%%% Created : 24 May 2013 by Peter Andersson <[email protected]> - +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012. 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(proto). -compile(export_all). diff --git a/lib/common_test/test/ct_hooks_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE.erl index 796a0832d7..596bfe3ff0 100644 --- a/lib/common_test/test/ct_hooks_SUITE.erl +++ b/lib/common_test/test/ct_hooks_SUITE.erl @@ -84,7 +84,7 @@ all(suite) -> skip_post_suite_cth, recover_post_suite_cth, update_config_cth, state_update_cth, options_cth, same_id_cth, fail_n_skip_with_minimal_cth, prio_cth, no_config, - data_dir + data_dir, cth_log ] ). @@ -222,7 +222,32 @@ data_dir(Config) when is_list(Config) -> do_test(data_dir, "ct_data_dir_SUITE.erl", [verify_data_dir_cth],Config). - +cth_log(Config) when is_list(Config) -> + %% test that cth_log_redirect writes properly to + %% unexpected I/O log + StartOpts = do_test(cth_log, "cth_log_SUITE.erl", [], Config), + Logdir = proplists:get_value(logdir, StartOpts), + UnexpIoLogs = + filelib:wildcard( + filename:join(Logdir, + "ct_run*/cth.tests*/run*/unexpected_io.log.html")), + lists:foreach( + fun(UnexpIoLog) -> + {ok,Bin} = file:read_file(UnexpIoLog), + Ts = string:tokens(binary_to_list(Bin),[$\n]), + Matches = lists:foldl(fun([$=,$E,$R,$R,$O,$R|_], N) -> + N+1; + ([$L,$o,$g,$g,$e,$r|_], N) -> + N+1; + (_, N) -> N + end, 0, Ts), + ct:pal("~p matches in ~tp", [Matches,UnexpIoLog]), + if Matches > 10 -> ok; + true -> exit({no_unexpected_io_found,UnexpIoLog}) + end + end, UnexpIoLogs), + ok. + %%%----------------------------------------------------------------- %%% HELP FUNCTIONS @@ -251,7 +276,8 @@ do_test(Tag, SuiteWildCard, CTHs, Config, Res, EC) -> Opts), TestEvents = events_to_check(Tag, EC), - ok = ct_test_support:verify_events(TestEvents, Events, Config). + ok = ct_test_support:verify_events(TestEvents, Events, Config), + Opts. setup(Test, Config) -> Opts0 = ct_test_support:get_opts(Config), @@ -1187,6 +1213,23 @@ test_events(data_dir) -> {?eh,stop_logging,[]} ]; +test_events(cth_log) -> + [{?eh,start_logging,{'DEF','RUNDIR'}}, + {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}}, + {?eh,tc_start,{cth_log_SUITE,init_per_suite}}, + + {parallel, + [{?eh,tc_start,{ct_framework,{init_per_group,g1,[parallel]}}}, + {?eh,tc_done,{ct_framework,{init_per_group,g1,[parallel]},ok}}, + {?eh,test_stats,{30,0,{0,0}}}, + {?eh,tc_start,{ct_framework,{end_per_group,g1,[parallel]}}}, + {?eh,tc_done,{ct_framework,{end_per_group,g1,[parallel]},ok}}]}, + + {?eh,tc_done,{cth_log_SUITE,end_per_suite,ok}}, + {?eh,test_done,{'DEF','STOP_TIME'}}, + {?eh,stop_logging,[]} + ]; + test_events(ok) -> ok. diff --git a/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl new file mode 100644 index 0000000000..18dd07e87e --- /dev/null +++ b/lib/common_test/test/ct_hooks_SUITE_data/cth/tests/cth_log_SUITE.erl @@ -0,0 +1,124 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2010-2011. 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(cth_log_SUITE). + +-compile(export_all). + +-include_lib("common_test/include/ct.hrl"). + +%%-------------------------------------------------------------------- +%% @spec suite() -> Info +%% Info = [tuple()] +%% @end +%%-------------------------------------------------------------------- +suite() -> + [{timetrap,{seconds,30}}]. + +%%-------------------------------------------------------------------- +%% @spec init_per_suite(Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + Gen = spawn(fun() -> gen() end), + [{gen,Gen}|Config]. + +%%-------------------------------------------------------------------- +%% @spec end_per_suite(Config0) -> void() | {save_config,Config1} +%% Config0 = Config1 = [tuple()] +%% @end +%%-------------------------------------------------------------------- +end_per_suite(Config) -> + Gen = proplists:get_value(gen, Config), + exit(Gen, kill), + timer:sleep(100), + ok. + +%%-------------------------------------------------------------------- +%% @spec init_per_testcase(TestCase, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% TestCase = atom() +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +init_per_testcase(_TestCase, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% @spec end_per_testcase(TestCase, Config0) -> +%% void() | {save_config,Config1} | {fail,Reason} +%% TestCase = atom() +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +end_per_testcase(_TestCase, _Config) -> + ok. + +%%-------------------------------------------------------------------- +%% @spec groups() -> [Group] +%% Group = {GroupName,Properties,GroupsAndTestCases} +%% GroupName = atom() +%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}] +%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase] +%% TestCase = atom() +%% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}} +%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | +%% repeat_until_any_ok | repeat_until_any_fail +%% N = integer() | forever +%% @end +%%-------------------------------------------------------------------- +groups() -> + [{g1,[parallel,{repeat,10}],[tc1,tc2,tc3]}]. + +%%-------------------------------------------------------------------- +%% @spec all() -> GroupsAndTestCases | {skip,Reason} +%% GroupsAndTestCases = [{group,GroupName} | TestCase] +%% GroupName = atom() +%% TestCase = atom() +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +all() -> + [{group,g1}]. + +tc1(_) -> + ct:sleep(100), + ok. +tc2(_) -> + ct:sleep(100), + ok. +tc3(_) -> + ct:sleep(100), + ok. + +%%%----------------------------------------------------------------- + +gen() -> + gen_loop(1). + +gen_loop(N) -> + ct:log("Logger iteration: ~p", [N]), + error_logger:error_report(N), + ct:sleep(200), + gen_loop(N+1). diff --git a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl index 0535eb924b..6ee7fdd6f6 100644 --- a/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl +++ b/lib/common_test/test/ct_netconfc_SUITE_data/netconfc1_SUITE.erl @@ -886,6 +886,19 @@ create_subscription(Config) -> ?NS:expect_do_reply('close-session',close,ok), ?ok = ct_netconfc:close_session(Client8), + %% Multiple filters + {ok,Client9} = open_success(DataDir), + ?NS:expect_reply({'create-subscription',[stream,filter]},ok), + MultiFilters = [{event,[{xmlns,"http://my.namespaces.com/event"}], + [{eventClass,["fault"]}, + {severity,["critical"]}]}, + {event,[{xmlns,"http://my.namespaces.com/event"}], + [{eventClass,["fault"]}, + {severity,["major"]}]}], + ?ok = ct_netconfc:create_subscription(Client9,MultiFilters), + ?NS:expect_do_reply('close-session',close,ok), + ?ok = ct_netconfc:close_session(Client9), + ok. receive_event(Config) -> diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl new file mode 100644 index 0000000000..84341a0b99 --- /dev/null +++ b/lib/common_test/test/ct_pre_post_test_io_SUITE.erl @@ -0,0 +1,252 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012. 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% +%% + +%%%------------------------------------------------------------------- +%%% File: ct_pre_post_test_io_SUITE +%%% +%%% Description: +%%% +%%% Test that ct:log/2 printouts and error/progress reports that happen +%%% before or after the test run are saved in the pre/post test IO log. +%%%------------------------------------------------------------------- +-module(ct_pre_post_test_io_SUITE). + +-compile(export_all). + +-include_lib("common_test/include/ct.hrl"). +-include_lib("common_test/include/ct_event.hrl"). + +-define(eh, ct_test_support_eh). + +%%-------------------------------------------------------------------- +%% TEST SERVER CALLBACK FUNCTIONS +%%-------------------------------------------------------------------- + +%%-------------------------------------------------------------------- +%% Description: Since Common Test starts another Test Server +%% instance, the tests need to be performed on a separate node (or +%% there will be clashes with logging processes etc). +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + DataDir = ?config(data_dir, Config), + CTH = filename:join(DataDir, "cth_ctrl.erl"), + ct:pal("Compiling ~p: ~p", + [CTH,compile:file(CTH,[{outdir,DataDir},debug_info])]), + ct_test_support:init_per_suite([{path_dirs,[DataDir]}, + {start_sasl,true} | Config]). + +end_per_suite(Config) -> + ct_test_support:end_per_suite(Config). + +init_per_testcase(TestCase, Config) -> + ct_test_support:init_per_testcase(TestCase, Config). + +end_per_testcase(TestCase, Config) -> + ct_test_support:end_per_testcase(TestCase, Config). + +suite() -> [{ct_hooks,[ts_install_cth]}]. + +all() -> + [ + pre_post_io + ]. + +%%-------------------------------------------------------------------- +%% TEST CASES +%%-------------------------------------------------------------------- + +%%%----------------------------------------------------------------- +%%% +pre_post_io(Config) -> + TC = pre_post_io, + DataDir = ?config(data_dir, Config), + Suite = filename:join(DataDir, "dummy_SUITE"), + {Opts,ERPid} = setup([{suite,Suite},{label,TC},{ct_hooks,[cth_ctrl]}], + Config), + + %%!-------------------------------------------------------------------- + %%! Note that error reports will not start showing up in the pre-test + %%! io log until handle_remote_events has been set to true (see below). + %%! The reason is that the error logger has its group leader on the + %%! test_server node (not the ct node) and cth_log_redirect ignores + %%! events with remote destination until told otherwise. + %%!-------------------------------------------------------------------- + + spawn(fun() -> + %% --- test run 1 --- + ct:sleep(3000), + ct_test_support:ct_rpc({cth_log_redirect, + handle_remote_events, + [true]}, Config), + ct:sleep(2000), + io:format(user, "Starting test run!~n", []), + ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config), + ct:sleep(6000), + io:format(user, "Finishing off!~n", []), + ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config), + %% --- test run 2 --- + ct:sleep(3000), + ct_test_support:ct_rpc({cth_log_redirect, + handle_remote_events, + [true]}, Config), + ct:sleep(2000), + io:format(user, "Starting test run!~n", []), + ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config), + ct:sleep(6000), + io:format(user, "Finishing off!~n", []), + ct_test_support:ct_rpc({cth_ctrl,proceed,[]}, Config) + end), + ct_test_support:run(Opts, Config), + Events = ct_test_support:get_events(ERPid, Config), + ct_test_support:log_events(TC, + reformat(Events, ?eh), + ?config(priv_dir, Config), + Opts), + TestEvents = events_to_check(TC), + ok = ct_test_support:verify_events(TestEvents, Events, Config), + + LogDirs = lists:flatmap(fun({_EH,#event{name=start_logging,data=Dir}}) -> + [Dir]; + (_) -> + [] + end, Events), + PrePostIoFiles = + [filename:join(LogDir, "misc_io.log.html") || LogDir <- LogDirs], + lists:foreach( + fun(PrePostIoFile) -> + ct:log("Reading Pre/Post Test IO Log file: ~ts", [PrePostIoFile]), + {ok,Bin} = file:read_file(PrePostIoFile), + Ts = string:tokens(binary_to_list(Bin),[$\n]), + PrePostIOEntries = + lists:foldl(fun([$L,$o,$g,$g,$e,$r|_], + {pre,PreLogN,PreErrN,0,0}) -> + {pre,PreLogN+1,PreErrN,0,0}; + ([$=,$E,$R,$R,$O,$R|_], + {pre,PreLogN,PreErrN,0,0}) -> + {pre,PreLogN,PreErrN+1,0,0}; + ([_,_,_,_,$P,$O,$S,$T,$-,$T,$E,$S,$T|_], + {pre,PreLogN,PreErrN,0,0}) -> + {post,PreLogN,PreErrN,0,0}; + ([$L,$o,$g,$g,$e,$r|_], + {post,PreLogN,PreErrN,PostLogN,PostErrN}) -> + {post,PreLogN,PreErrN,PostLogN+1,PostErrN}; + ([$=,$E,$R,$R,$O,$R|_], + {post,PreLogN,PreErrN,PostLogN,PostErrN}) -> + {post,PreLogN,PreErrN,PostLogN,PostErrN+1}; + (_, Counters) -> + Counters + end, {pre,0,0,0,0}, Ts), + [_|Counters] = tuple_to_list(PrePostIOEntries), + ct:log("Entries in the Pre/Post Test IO Log: ~p", [Counters]), + case [C || C <- Counters, C < 2] of + [] -> + ok; + _ -> + exit("Not enough entries in the Pre/Post Test IO Log!") + end + end, PrePostIoFiles), + + UnexpIoFiles = + [filelib:wildcard( + filename:join(LogDir, + "*dummy_SUITE.logs/run.*/" + "unexpected_io.log.html")) || LogDir <- LogDirs], + lists:foreach( + fun(UnexpIoFile) -> + ct:log("Reading Unexpected IO Log file: ~ts", [UnexpIoFile]), + {ok,Bin} = file:read_file(UnexpIoFile), + Ts = string:tokens(binary_to_list(Bin),[$\n]), + UnexpIOEntries = + lists:foldl(fun([$L,$o,$g,$g,$e,$r|_], [LogN,ErrN]) -> + [LogN+1,ErrN]; + ([$=,$E,$R,$R,$O,$R|_], [LogN,ErrN]) -> + [LogN,ErrN+1]; + (_, Counters) -> Counters + end, [0,0], Ts), + ct:log("Entries in the Unexpected IO Log: ~p", [UnexpIOEntries]), + case [N || N <- UnexpIOEntries, N < 2] of + [] -> + ok; + _ -> + exit("Not enough entries in the Unexpected IO Log!") + end + end, UnexpIoFiles), + ok. + +%%%----------------------------------------------------------------- +%%% HELP FUNCTIONS +%%%----------------------------------------------------------------- + +setup(Test, Config) -> + Opts0 = ct_test_support:get_opts(Config), + Level = ?config(trace_level, Config), + EvHArgs = [{cbm,ct_test_support},{trace_level,Level}], + Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}}|Test], + ERPid = ct_test_support:start_event_receiver(Config), + {Opts,ERPid}. + +reformat(Events, EH) -> + ct_test_support:reformat(Events, EH). + +%%%----------------------------------------------------------------- +%%% TEST EVENTS +%%%----------------------------------------------------------------- + +events_to_check(pre_post_io) -> + [ + {?eh,start_logging,{'DEF','RUNDIR'}}, + {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}}, + {?eh,start_info,{1,1,7}}, + {?eh,tc_start,{dummy_SUITE,init_per_suite}}, + {?eh,tc_done,{dummy_SUITE,init_per_suite,ok}}, + {parallel, + [{?eh,tc_start,{dummy_SUITE,{init_per_group,g1,[parallel]}}}, + {?eh,tc_done, + {dummy_SUITE,{init_per_group,g1,[parallel]},ok}}, + {?eh,tc_start,{dummy_SUITE,tc1}}, + {?eh,tc_start,{dummy_SUITE,tc2}}, + {?eh,tc_start,{dummy_SUITE,tc3}}, + {?eh,tc_done,{dummy_SUITE,tc2,ok}}, + {?eh,tc_done,{dummy_SUITE,tc1,ok}}, + {?eh,tc_done,{dummy_SUITE,tc3,ok}}, + {?eh,test_stats,{1,0,{0,0}}}, + {?eh,test_stats,{2,0,{0,0}}}, + {?eh,test_stats,{3,0,{0,0}}}, + {?eh,tc_start,{dummy_SUITE,{end_per_group,g1,[parallel]}}}, + {?eh,tc_done,{dummy_SUITE,{end_per_group,g1,[parallel]},ok}}]}, + {?eh,tc_start,{dummy_SUITE,tc1}}, + {?eh,tc_done,{dummy_SUITE,tc1,ok}}, + {?eh,test_stats,{4,0,{0,0}}}, + {?eh,tc_start,{dummy_SUITE,tc2}}, + {?eh,tc_done,{dummy_SUITE,tc2,ok}}, + {?eh,test_stats,{5,0,{0,0}}}, + [{?eh,tc_start,{dummy_SUITE,{init_per_group,g2,[]}}}, + {?eh,tc_done,{dummy_SUITE,{init_per_group,g2,[]},ok}}, + {?eh,tc_start,{dummy_SUITE,tc4}}, + {?eh,tc_done,{dummy_SUITE,tc4,ok}}, + {?eh,test_stats,{6,0,{0,0}}}, + {?eh,tc_start,{dummy_SUITE,tc5}}, + {?eh,tc_done,{dummy_SUITE,tc5,ok}}, + {?eh,test_stats,{7,0,{0,0}}}, + {?eh,tc_start,{dummy_SUITE,{end_per_group,g2,[]}}}, + {?eh,tc_done,{dummy_SUITE,{end_per_group,g2,[]},ok}}], + {?eh,tc_start,{dummy_SUITE,end_per_suite}}, + {?eh,tc_done,{dummy_SUITE,end_per_suite,ok}}, + {?eh,test_done,{'DEF','STOP_TIME'}}, + {?eh,stop_logging,[]}]. diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl new file mode 100644 index 0000000000..a9ea7b14dd --- /dev/null +++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/cth_ctrl.erl @@ -0,0 +1,104 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012. 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(cth_ctrl). + +-export([proceed/0, + init/2, terminate/1]). + +%%%=================================================================== +%%% API +%%%=================================================================== + +proceed() -> + ?MODULE ! proceed. + +%%-------------------------------------------------------------------- +%% Hook functions +%%-------------------------------------------------------------------- +init(_Id, _Opts) -> + case lists:keyfind(sasl, 1, application:which_applications()) of + false -> + exit(sasl_not_started); + _Else -> + ok + end, + WhoAmI = self(), + DispPid = spawn_link(fun() -> dispatcher(WhoAmI) end), + register(?MODULE, DispPid), + io:format(user, + "~n~n+++ Startup of ~w on ~p finished, " + "call ~w:proceed() to run tests...~n", + [?MODULE,node(),?MODULE]), + start_external_logger(cth_logger), + receive + {?MODULE,proceed} -> ok + after + 10000 -> + ok + end, + {ok,[],ct_last}. + +terminate(_State) -> + io:format(user, + "~n~n+++ Tests finished, call ~w:proceed() to shut down...~n", + [?MODULE]), + receive + {?MODULE,proceed} -> ok + after + 10000 -> + ok + end, + stop_external_logger(cth_logger), + stop_dispatcher(), + ok. + +%%%=================================================================== +%%% Internal functions +%%%=================================================================== + +start_external_logger(Name) -> + case whereis(Name) of + undefined -> ok; + Pid -> exit(Pid, kill) + end, + spawn(fun() -> init_logger(Name) end). + +stop_external_logger(Name) -> + catch exit(whereis(Name), kill). + +init_logger(Name) -> + register(Name, self()), + logger_loop(1). + +logger_loop(N) -> + ct:log("Logger iteration: ~p", [N]), + error_logger:error_report(N), + timer:sleep(250), + logger_loop(N+1). + +%%%----------------------------------------------------------------- + +dispatcher(SendTo) -> + receive Msg -> SendTo ! {?MODULE,Msg} end, + dispatcher(SendTo). + +stop_dispatcher() -> + catch exit(whereis(?MODULE), kill). + + diff --git a/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl new file mode 100644 index 0000000000..ac9c4efd31 --- /dev/null +++ b/lib/common_test/test/ct_pre_post_test_io_SUITE_data/dummy_SUITE.erl @@ -0,0 +1,132 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2012. 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(dummy_SUITE). + +-compile(export_all). + +-include_lib("common_test/include/ct.hrl"). + +%%-------------------------------------------------------------------- +%% @spec suite() -> Info +%% Info = [tuple()] +%% @end +%%-------------------------------------------------------------------- +suite() -> + [{timetrap,{seconds,30}}]. + +%%-------------------------------------------------------------------- +%% @spec init_per_suite(Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + Config. + +%%-------------------------------------------------------------------- +%% @spec end_per_suite(Config0) -> void() | {save_config,Config1} +%% Config0 = Config1 = [tuple()] +%% @end +%%-------------------------------------------------------------------- +end_per_suite(_Config) -> + ok. + +%%-------------------------------------------------------------------- +%% @spec init_per_group(GroupName, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% GroupName = atom() +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +init_per_group(_GroupName, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% @spec end_per_group(GroupName, Config0) -> +%% void() | {save_config,Config1} +%% GroupName = atom() +%% Config0 = Config1 = [tuple()] +%% @end +%%-------------------------------------------------------------------- +end_per_group(_GroupName, _Config) -> + ok. + +%%-------------------------------------------------------------------- +%% @spec init_per_testcase(TestCase, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% TestCase = atom() +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +init_per_testcase(_TestCase, Config) -> + ct:sleep(500), + Config. + +%%-------------------------------------------------------------------- +%% @spec end_per_testcase(TestCase, Config0) -> +%% void() | {save_config,Config1} | {fail,Reason} +%% TestCase = atom() +%% Config0 = Config1 = [tuple()] +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +end_per_testcase(_TestCase, _Config) -> + ok. + +%%-------------------------------------------------------------------- +%% @spec groups() -> [Group] +%% Group = {GroupName,Properties,GroupsAndTestCases} +%% GroupName = atom() +%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}] +%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase] +%% TestCase = atom() +%% Shuffle = shuffle | {shuffle,{integer(),integer(),integer()}} +%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | +%% repeat_until_any_ok | repeat_until_any_fail +%% N = integer() | forever +%% @end +%%-------------------------------------------------------------------- +groups() -> + [{g1,[parallel],[tc1,tc2,tc3]}, + {g2,[],[tc4,tc5]}]. + +%%-------------------------------------------------------------------- +%% @spec all() -> GroupsAndTestCases | {skip,Reason} +%% GroupsAndTestCases = [{group,GroupName} | TestCase] +%% GroupName = atom() +%% TestCase = atom() +%% Reason = term() +%% @end +%%-------------------------------------------------------------------- +all() -> + [{group,g1},tc1,tc2,{group,g2}]. + +tc1(_C) -> + ok. +tc2(_C) -> + ok. +tc3(_C) -> + ok. +tc4(_C) -> + ok. +tc5(_C) -> + ok. diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl index 6bcac12326..67e430f821 100644 --- a/lib/common_test/test/ct_test_support.erl +++ b/lib/common_test/test/ct_test_support.erl @@ -36,7 +36,9 @@ verify_events/3, verify_events/4, reformat/2, log_events/4, join_abs_dirs/2]). --export([ct_test_halt/1]). +-export([start_slave/3, slave_stop/1]). + +-export([ct_test_halt/1, ct_rpc/2]). -include_lib("kernel/include/file.hrl"). @@ -63,13 +65,16 @@ init_per_suite(Config, Level) -> _ -> ok end, - start_slave(Config, Level). -start_slave(Config,Level) -> +start_slave(Config, Level) -> + start_slave(ct, Config, Level). + +start_slave(NodeName, Config, Level) -> [_,Host] = string:tokens(atom_to_list(node()), "@"), - test_server:format(0, "Trying to start ~s~n", ["ct@"++Host]), - case slave:start(Host, ct, []) of + test_server:format(0, "Trying to start ~s~n", + [atom_to_list(NodeName)++"@"++Host]), + case slave:start(Host, NodeName, []) of {error,Reason} -> test_server:fail(Reason); {ok,CTNode} -> @@ -77,7 +82,7 @@ start_slave(Config,Level) -> IsCover = test_server:is_cover(), if IsCover -> cover:start(CTNode); - true-> + true -> ok end, @@ -97,6 +102,14 @@ start_slave(Config,Level) -> test_server:format(Level, "Dirs added to code path (on ~w):~n", [CTNode]), [io:format("~s~n", [D]) || D <- PathDirs], + + case proplists:get_value(start_sasl, Config) of + true -> + rpc:call(CTNode, application, start, [sasl]), + test_server:format(Level, "SASL started on ~w~n", [CTNode]); + _ -> + ok + end, TraceFile = filename:join(DataDir, "ct.trace"), case file:read_file_info(TraceFile) of @@ -372,6 +385,16 @@ wait_for_ct_stop(Retries, CTNode) -> end. %%%----------------------------------------------------------------- +%%% ct_rpc/1 +ct_rpc({M,F,A}, Config) -> + CTNode = proplists:get_value(ct_node, Config), + Level = proplists:get_value(trace_level, Config), + test_server:format(Level, "~nCalling ~w:~w(~p) on ~p...", + [M,F,A, CTNode]), + rpc:call(CTNode, M, F, A). + + +%%%----------------------------------------------------------------- %%% EVENT HANDLING handle_event(EH, Event) -> diff --git a/lib/common_test/test/ct_verbosity_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE.erl index 32488b1db9..1aa71953ec 100644 --- a/lib/common_test/test/ct_verbosity_SUITE.erl +++ b/lib/common_test/test/ct_verbosity_SUITE.erl @@ -53,9 +53,19 @@ init_per_suite(Config) -> end_per_suite(Config) -> ct_test_support:end_per_suite(Config). +init_per_testcase(no_crashing, Config) -> + Opts = ct_test_support:start_slave(ctX, Config, 50), + XNode = proplists:get_value(ct_node, Opts), + ct:pal("Node ~p started!", [XNode]), + [{xnode,XNode} | Config]; init_per_testcase(TestCase, Config) -> ct_test_support:init_per_testcase(TestCase, Config). +end_per_testcase(no_crashing, Config) -> + XNode = proplists:get_value(xnode, Config), + ct_test_support:slave_stop(XNode), + ct:pal("Node ~p stopped!", [XNode]), + ok; end_per_testcase(TestCase, Config) -> ct_test_support:end_per_testcase(TestCase, Config). @@ -72,7 +82,8 @@ all() -> combine_categories, testspec_only, merge_with_testspec, - possible_deadlock + possible_deadlock, + no_crashing ]. %%-------------------------------------------------------------------- @@ -189,6 +200,19 @@ possible_deadlock(Config) -> %%%----------------------------------------------------------------- +%%% +no_crashing(Config) -> + XNode = proplists:get_value(xnode, Config), + ok = rpc:call(XNode, ct, print, ["hello",[]]), + ok = rpc:call(XNode, ct, pal, ["hello",[]]), + ok = rpc:call(XNode, ct, log, ["hello",[]]), + Data = io_lib:format("hello", []), + {badrpc,{'EXIT',{noproc,_}}} = + (catch rpc:call(XNode, test_server_io, print_unexpected, [Data])), + ok. + + +%%%----------------------------------------------------------------- %%% HELP FUNCTIONS %%%----------------------------------------------------------------- diff --git a/lib/compiler/doc/src/compile.xml b/lib/compiler/doc/src/compile.xml index ddaae2655d..f1238f27a6 100644 --- a/lib/compiler/doc/src/compile.xml +++ b/lib/compiler/doc/src/compile.xml @@ -859,6 +859,10 @@ pi() -> 3.1416. {ErrorLine, Module, ErrorDescriptor} </code> + <p><c>ErrorLine</c> will be the atom <c>none</c> if the error does + not correspond to a specific line (e.g. if the source file does + not exist).</p> + <p>A string describing the error is obtained with the following call:</p> <code> diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl index cf5455dfde..124abd13c1 100644 --- a/lib/compiler/src/beam_bool.erl +++ b/lib/compiler/src/beam_bool.erl @@ -425,6 +425,9 @@ bopt_tree([], Forest, Pre) -> safe_bool_op(N, Ar) -> erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar). +bopt_bool_args([V0,V0], Forest0) -> + {V,Forest} = bopt_bool_arg(V0, Forest0), + {[V,V],Forest}; bopt_bool_args(As, Forest) -> mapfoldl(fun bopt_bool_arg/2, Forest, As). diff --git a/lib/compiler/src/beam_validator.erl b/lib/compiler/src/beam_validator.erl index eb72290306..70279ab658 100644 --- a/lib/compiler/src/beam_validator.erl +++ b/lib/compiler/src/beam_validator.erl @@ -628,6 +628,7 @@ valfun_4({gc_bif,Op,{f,Fail},Live,Src,Dst}, #vst{current=St0}=Vst0) -> Type = bif_type(Op, Src, Vst), set_type_reg(Type, Dst, Vst); valfun_4(return, #vst{current=#st{numy=none}}=Vst) -> + assert_term({x,0}, Vst), kill_state(Vst); valfun_4(return, #vst{current=#st{numy=NumY}}) -> error({stack_frame,NumY}); diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl index 2e7554c1ff..c6de63c69f 100644 --- a/lib/compiler/src/cerl_inline.erl +++ b/lib/compiler/src/cerl_inline.erl @@ -52,7 +52,7 @@ clause_pats/1, clause_vars/1, concrete/1, cons_hd/1, cons_tl/1, data_arity/1, data_es/1, data_type/1, fun_body/1, fun_vars/1, get_ann/1, int_val/1, - is_c_atom/1, is_c_cons/1, is_c_fun/1, is_c_int/1, + is_c_atom/1, is_c_cons/1, is_c_fname/1, is_c_int/1, is_c_list/1, is_c_seq/1, is_c_tuple/1, is_c_var/1, is_data/1, is_literal/1, is_literal_term/1, let_arg/1, let_body/1, let_vars/1, letrec_body/1, letrec_defs/1, @@ -1578,7 +1578,7 @@ make_let_binding_1(R, E, S) -> %% completely. copy(R, Opnd, E, Ctxt, Env, S) -> - case is_c_var(E) of + case is_c_var(E) andalso not is_c_fname(E) of true -> %% The operand reduces to another variable - get its %% ref-structure and attempt to propagate further. @@ -1628,12 +1628,12 @@ copy_var(R, Ctxt, Env, S) -> end. copy_1(R, Opnd, E, Ctxt, Env, S) -> - %% Fun-expression (lambdas) are a bit special; they are copyable, - %% but should preferably not be duplicated, so they should not be - %% copy propagated except into application contexts, where they can - %% be inlined. - case is_c_fun(E) of - true -> + case type(E) of + 'fun' -> + %% Fun-expression (lambdas) are a bit special; they are copyable, + %% but should preferably not be duplicated, so they should not be + %% copy propagated except into application contexts, where they can + %% be inlined. case Ctxt of #app{} -> %% First test if the operand is "outer-pending"; if @@ -1649,7 +1649,28 @@ copy_1(R, Opnd, E, Ctxt, Env, S) -> _ -> residualize_var(R, S) end; - false -> + var -> + %% Variables at this point only refer to local functions; they are + %% copyable but can't appear in guards, so they should not be + %% copy propagated except into application contexts, where they can + %% be inlined. + case Ctxt of + #app{} -> + %% First test if the operand is "outer-pending"; if + %% so, don't inline. + case st__test_outer_pending(Opnd#opnd.loc, S) of + false -> + R1 = env__get(var_name(E), Opnd#opnd.env), + copy_var(R1, Ctxt, Env, S); + true -> + %% Cyclic reference forced inlining to stop + %% (avoiding infinite unfolding). + residualize_var(R, S) + end; + _ -> + residualize_var(R, S) + end; + _ -> %% We have no other cases to handle here residualize_var(R, S) end. diff --git a/lib/compiler/src/compile.erl b/lib/compiler/src/compile.erl index 2ca403de54..802e3dfa2f 100644 --- a/lib/compiler/src/compile.erl +++ b/lib/compiler/src/compile.erl @@ -41,7 +41,8 @@ -type option() :: atom() | {atom(), term()} | {'d', atom(), term()}. --type err_info() :: {erl_scan:line(), module(), term()}. %% ErrorDescriptor +-type err_info() :: {erl_scan:line() | 'none', + module(), term()}. %% ErrorDescriptor -type errors() :: [{file:filename(), [err_info()]}]. -type warnings() :: [{file:filename(), [err_info()]}]. -type mod_ret() :: {'ok', module()} @@ -1290,10 +1291,10 @@ native_compile_1(St) -> {error,R} -> case IgnoreErrors of true -> - Ws = [{St#compile.ifile,[{?MODULE,{native,R}}]}], + Ws = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}], {ok,St#compile{warnings=St#compile.warnings ++ Ws}}; false -> - Es = [{St#compile.ifile,[{?MODULE,{native,R}}]}], + Es = [{St#compile.ifile,[{none,?MODULE,{native,R}}]}], {error,St#compile{errors=St#compile.errors ++ Es}} end catch @@ -1302,7 +1303,7 @@ native_compile_1(St) -> case IgnoreErrors of true -> Ws = [{St#compile.ifile, - [{?MODULE,{native_crash,R,Stk}}]}], + [{none,?MODULE,{native_crash,R,Stk}}]}], {ok,St#compile{warnings=St#compile.warnings ++ Ws}}; false -> erlang:raise(Class, R, Stk) @@ -1349,7 +1350,7 @@ save_binary(#compile{module=Mod,ofile=Outfile, save_binary_1(St); _ -> Es = [{St#compile.ofile, - [{?MODULE,{module_name,Mod,Base}}]}], + [{none,?MODULE,{module_name,Mod,Base}}]}], {error,St#compile{errors=St#compile.errors ++ Es}} end end. @@ -1363,20 +1364,20 @@ save_binary_1(St) -> ok -> {ok,St}; {error,RenameError} -> - Es0 = [{Ofile,[{?MODULE,{rename,Tfile,Ofile, - RenameError}}]}], + Es0 = [{Ofile,[{none,?MODULE,{rename,Tfile,Ofile, + RenameError}}]}], Es = case file:delete(Tfile) of ok -> Es0; {error,DeleteError} -> Es0 ++ [{Ofile, - [{?MODULE,{delete_temp,Tfile, - DeleteError}}]}] + [{none,?MODULE,{delete_temp,Tfile, + DeleteError}}]}] end, {error,St#compile{errors=St#compile.errors ++ Es}} end; {error,_Error} -> - Es = [{Tfile,[{compile,write_error}]}], + Es = [{Tfile,[{none,compile,write_error}]}], {error,St#compile{errors=St#compile.errors ++ Es}} end. @@ -1419,6 +1420,9 @@ report_warnings(#compile{options=Opts,warnings=Ws0}) -> false -> ok end. +format_message(F, P, [{none,Mod,E}|Es]) -> + M = {none,io_lib:format("~ts: ~s~ts\n", [F,P,Mod:format_error(E)])}, + [M|format_message(F, P, Es)]; format_message(F, P, [{{Line,Column}=Loc,Mod,E}|Es]) -> M = {{F,Loc},io_lib:format("~ts:~w:~w ~s~ts\n", [F,Line,Column,P,Mod:format_error(E)])}, @@ -1428,12 +1432,17 @@ format_message(F, P, [{Line,Mod,E}|Es]) -> [F,Line,P,Mod:format_error(E)])}, [M|format_message(F, P, Es)]; format_message(F, P, [{Mod,E}|Es]) -> + %% Not documented and not expected to be used any more, but + %% keep a while just in case. M = {none,io_lib:format("~ts: ~s~ts\n", [F,P,Mod:format_error(E)])}, [M|format_message(F, P, Es)]; format_message(_, _, []) -> []. %% list_errors(File, ErrorDescriptors) -> ok +list_errors(F, [{none,Mod,E}|Es]) -> + io:fwrite("~ts: ~ts\n", [F,Mod:format_error(E)]), + list_errors(F, Es); list_errors(F, [{{Line,Column},Mod,E}|Es]) -> io:fwrite("~ts:~w:~w: ~ts\n", [F,Line,Column,Mod:format_error(E)]), list_errors(F, Es); @@ -1441,6 +1450,8 @@ list_errors(F, [{Line,Mod,E}|Es]) -> io:fwrite("~ts:~w: ~ts\n", [F,Line,Mod:format_error(E)]), list_errors(F, Es); list_errors(F, [{Mod,E}|Es]) -> + %% Not documented and not expected to be used any more, but + %% keep a while just in case. io:fwrite("~ts: ~ts\n", [F,Mod:format_error(E)]), list_errors(F, Es); list_errors(_F, []) -> ok. diff --git a/lib/compiler/src/core_lint.erl b/lib/compiler/src/core_lint.erl index 1e8983f594..e5d5fa2bcd 100644 --- a/lib/compiler/src/core_lint.erl +++ b/lib/compiler/src/core_lint.erl @@ -162,7 +162,7 @@ return_status(St) -> %% add_warning(ErrorDescriptor, State) -> State' %% Note that we don't use line numbers here. -add_error(E, St) -> St#lint{errors=[{?MODULE,E}|St#lint.errors]}. +add_error(E, St) -> St#lint{errors=[{none,?MODULE,E}|St#lint.errors]}. %%add_warning(W, St) -> St#lint{warnings=[{none,core_lint,W}|St#lint.warnings]}. diff --git a/lib/compiler/src/genop.tab b/lib/compiler/src/genop.tab index 75ac91907a..ebc9b1c85b 100644..100755 --- a/lib/compiler/src/genop.tab +++ b/lib/compiler/src/genop.tab @@ -23,45 +23,148 @@ BEAM_FORMAT_NUMBER=0 # arity or semantics, the format number above must be bumped. # +## @spec label Lbl +## @doc Specify a module local label. +## Label gives this code address a name (Lbl) and marks the start of +## a basic block. 1: label/1 + +## @spec func_info M F A +## @doc Define a function M:F/A 2: func_info/3 + 3: int_code_end/0 # # Function and BIF calls. # + +## @spec call Arity Label +## @doc Call the function at Label. +## Save the next instruction as the return address in the CP register. 4: call/2 + +## @spec call_last Arity Label Dellocate +## @doc Deallocate and do a tail recursive call to the function at Label. +## Do not update the CP register. +## Before the call deallocate Deallocate words of stack. 5: call_last/3 + +## @spec call_only Arity Label +## @doc Do a tail recursive call to the function at Label. +## Do not update the CP register. 6: call_only/2 +## @spec call_ext Arity Destination +## @doc Call the function of arity Arity pointed to by Destination. +## Save the next instruction as the return address in the CP register. 7: call_ext/2 + +## @spec call_ext_last Arity Destination Deallocate +## @doc Deallocate and do a tail call to function of arity Arity +## pointed to by Destination. +## Do not update the CP register. +## Deallocate Deallocate words from the stack before the call. 8: call_ext_last/3 +## @spec bif0 Bif Reg +## @doc Call the bif Bif and store the result in Reg. 9: bif0/2 + +## @spec bif1 Lbl Bif Arg Reg +## @doc Call the bif Bif with the argument Arg, and store the result in Reg. +## On failure jump to Lbl. 10: bif1/4 + +## @spec bif2 Lbl Bif Arg1 Arg2 Reg +## @doc Call the bif Bif with the arguments Arg1 and Arg2, +## and store the result in Reg. +## On failure jump to Lbl. 11: bif2/5 # # Allocating, deallocating and returning. # + +## @spec allocate StackNeed Live +## @doc Allocate space for StackNeed words on the stack. If a GC is needed +## during allocation there are Live number of live X registers. +## Also save the continuation pointer (CP) on the stack. 12: allocate/2 + +## @spec allocate_heap StackNeed HeapNeed Live +## @doc Allocate space for StackNeed words on the stack and ensure there is +## space for HeapNeed words on the heap. If a GC is needed +## save Live number of X registers. +## Also save the continuation pointer (CP) on the stack. 13: allocate_heap/3 + +## @spec allocate_zero StackNeed Live +## @doc Allocate space for StackNeed words on the stack. If a GC is needed +## during allocation there are Live number of live X registers. +## Clear the new stack words. (By writing NIL.) +## Also save the continuation pointer (CP) on the stack. 14: allocate_zero/2 + +## @spec allocate_heap_zero StackNeed HeapNeed Live +## @doc Allocate space for StackNeed words on the stack and HeapNeed words +## on the heap. If a GC is needed +## during allocation there are Live number of live X registers. +## Clear the new stack words. (By writing NIL.) +## Also save the continuation pointer (CP) on the stack. 15: allocate_heap_zero/3 + +## @spec test_heap HeapNeed Live +## @doc Ensure there is space for HeapNeed words on the heap. If a GC is needed +## save Live number of X registers. 16: test_heap/2 + +## @spec init N +## @doc Clear the Nth stack word. (By writing NIL.) 17: init/1 + +## @spec deallocate N +## @doc Restore the continuation pointer (CP) from the stack and deallocate +## N+1 words from the stack (the + 1 is for the CP). 18: deallocate/1 + +## @spec return +## @doc Return to the address in the continuation pointer (CP). 19: return/0 # # Sending & receiving. # +## @spec send +## @doc Send argument in x(0) as a message to the destination process in x(0). +## The message in x(1) ends up as the result of the send in x(0). 20: send/0 + +## @spec remove_message +## @doc Unlink the current message from the message queue and store a +## pointer to the message in x(0). Remove any timeout. 21: remove_message/0 + +## @spec timeout +## @doc Reset the save point of the mailbox and clear the timeout flag. 22: timeout/0 + +## @spec loop_rec Label Source +## @doc Loop over the message queue, if it is empty jump to Label. 23: loop_rec/2 + +## @spec loop_rec_end Label +## @doc Advance the save pointer to the next message and jump back to Label. 24: loop_rec_end/1 + +## @spec wait Label +## @doc Suspend the processes and set the entry point to the beginning of the +## receive loop at Label. 25: wait/1 + +## @spec wait_timeout Lable Time +## @doc Sets up a timeout of Time milllisecons and saves the address of the +## following instruction as the entry point if the timeout triggers. 26: wait_timeout/2 # @@ -83,36 +186,106 @@ BEAM_FORMAT_NUMBER=0 # # Comparision operators. # + +## @spec is_lt Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is not less than Arg2. 39: is_lt/3 + +## @spec is_ge Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is less than Arg2. 40: is_ge/3 + +## @spec is_eq Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is not (numerically) equal to Arg2. 41: is_eq/3 + +## @spec is_ne Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is (numerically) equal to Arg2. 42: is_ne/3 + +## @spec is_eq_exact Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is not exactly equal to Arg2. 43: is_eq_exact/3 + +## @spec is_ne_exact Lbl Arg1 Arg2 +## @doc Compare two terms and jump to Lbl if Arg1 is exactly equal to Arg2. 44: is_ne_exact/3 # # Type tests. # + +## @spec is_integer Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not an integer. 45: is_integer/2 + +## @spec is_float Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a float. 46: is_float/2 + +## @spec is_number Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a number. 47: is_number/2 + +## @spec is_atom Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not an atom. 48: is_atom/2 + +## @spec is_pid Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a pid. 49: is_pid/2 + +## @spec is_reference Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a reference. 50: is_reference/2 + +## @spec is_port Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a port. 51: is_port/2 + +## @spec is_nil Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not nil. 52: is_nil/2 + +## @spec is_binary Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a binary. 53: is_binary/2 + 54: -is_constant/2 + +## @spec is_list Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a cons or nil. 55: is_list/2 + +## @spec is_nonempty_list Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a cons. 56: is_nonempty_list/2 + +## @spec is_tuple Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a tuple. 57: is_tuple/2 + +## @spec test_arity Lbl Arg1 Arity +## @doc Test the arity of (the tuple in) Arg1 and jump +## to Lbl if it is not equal to Arity. 58: test_arity/3 # # Indexing & jumping. # + +## @spec select_val Arg FailLabel Destinations +## @doc Jump to the destination label corresponding to Arg +## in the Destinations list, if no arity matches, jump to FailLabel. 59: select_val/3 + +## @spec select_tuple_arity Tuple FailLabel Destinations +## @doc Check the arity of the tuple Tuple and jump to the corresponding +## destination label, if no arity matches, jump to FailLabel. 60: select_tuple_arity/3 + +## @spec jump Label +## @doc Jump to Label. 61: jump/1 # @@ -124,9 +297,26 @@ BEAM_FORMAT_NUMBER=0 # # Moving, extracting, modifying. # + +## @spec move Source Destination +## @doc Move the source Source (a literal or a register) to +## the destination register Destination. 64: move/2 + +## @spec get_list Source Head Tail +## @doc Get the head and tail (or car and cdr) parts of a list +## (a cons cell) from Source and put them into the registers +## Head and Tail. 65: get_list/3 + +## @spec get_tuple_element Source Element Destination +## @doc Get element number Element from the tuple in Source and put +## it in the destination register Destination. 66: get_tuple_element/3 + +## @spec set_tuple_element NewElement Tuple Position +## @doc Update the element at postition Position of the tuple Tuple +## with the new element NewElement. 67: set_tuple_element/3 # @@ -147,13 +337,26 @@ BEAM_FORMAT_NUMBER=0 # # 'fun' support. # +## @spec call_fun Arity +## @doc Call a fun of arity Arity. Assume arguments in +## registers x(0) to x(Arity-1) and that the fun is in x(Arity). +## Save the next instruction as the return address in the CP register. 75: call_fun/1 + 76: -make_fun/3 + +## @spec is_function Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a +## function (i.e. fun or closure). 77: is_function/2 # # Late additions to R5. # + +## @spec call_ext_only Arity Label +## Do a tail recursive call to the function at Label. +## Do not update the CP register. 78: call_ext_only/2 # @@ -212,9 +415,14 @@ BEAM_FORMAT_NUMBER=0 111: bs_add/5 112: apply/1 113: apply_last/2 +## @spec is_boolean Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a Boolean. 114: is_boolean/2 # New instructions in R10B-6. +## @spec is_function2 Lbl Arg1 Arity +## @doc Test the type of Arg1 and jump to Lbl if it is not a +## function of arity Arity. 115: is_function2/3 # New bit syntax matching in R11B. @@ -229,7 +437,20 @@ BEAM_FORMAT_NUMBER=0 123: bs_restore2/2 # New GC bifs introduced in R11B. + +## @spec gc_bif1 Lbl Live Bif Arg Reg +## @doc Call the bif Bif with the argument Arg, and store the result in Reg. +## On failure jump to Lbl. +## Do a garbage collection if necessary to allocate space on the heap +## for the result (saving Live number of X registers). 124: gc_bif1/5 + +## @spec gc_bif2 Lbl Live Bif Arg1 Arg2 Reg +## @doc Call the bif Bif with the arguments Arg1 and Arg2, +## and store the result in Reg. +## On failure jump to Lbl. +## Do a garbage collection if necessary to allocate space on the heap +## for the result (saving Live number of X registers). 125: gc_bif2/6 # Experimental new bit_level bifs introduced in R11B. @@ -241,6 +462,8 @@ BEAM_FORMAT_NUMBER=0 128: -put_literal/2 # R11B-5 +## @spec is_bitstr Lbl Arg1 +## @doc Test the type of Arg1 and jump to Lbl if it is not a bit string. 129: is_bitstr/2 # R12B @@ -250,7 +473,12 @@ BEAM_FORMAT_NUMBER=0 133: bs_init_writable/0 134: bs_append/8 135: bs_private_append/6 + +## @spec trim N Remaining +## @doc Reduce the stack usage by N words, +## keeping the CP on the top of the stack. 136: trim/2 + 137: bs_init_bits/6 # R12B-5 @@ -277,8 +505,24 @@ BEAM_FORMAT_NUMBER=0 # R14A +## @spec recv_mark Label +## @doc Save the end of the message queue and the address of +## the label Label so that a recv_set instruction can start +## scanning the inbox from this position. 150: recv_mark/1 + +## @spec recv_set Label +## @doc Check that the saved mark points to Label and set the +## save pointer in the message queue to the last position +## of the message queue saved by the recv_mark instruction. 151: recv_set/1 + +## @spec gc_bif3 Lbl Live Bif Arg1 Arg2 Arg3 Reg +## @doc Call the bif Bif with the arguments Arg1, Arg2 and Arg3, +## and store the result in Reg. +## On failure jump to Lbl. +## Do a garbage collection if necessary to allocate space on the heap +## for the result (saving Live number of X registers). 152: gc_bif3/7 # R15A diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl index d6fdcb2b21..1195937d91 100644 --- a/lib/compiler/src/v3_core.erl +++ b/lib/compiler/src/v3_core.erl @@ -956,7 +956,8 @@ lc_tq(Line, E, [Fil0|Qs0], Mc, St0) -> args=[], clauses=[#iclause{anno=LAnno,pats=[], guard=Gs,body=Lps ++ [Lc]}], - fc=#iclause{anno=LAnno,pats=[],guard=[],body=[Mc]}}, + fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]}, + pats=[],guard=[],body=[Mc]}}, [],St2}; false -> {Lc,Lps,St1} = lc_tq(Line, E, Qs0, Mc, St0), @@ -1101,7 +1102,8 @@ bc_tq1(Line, E, [Fil0|Qs0], AccVar, St0) -> clauses=[#iclause{anno=LAnno, pats=[], guard=Gs,body=Bps ++ [Bc]}], - fc=#iclause{anno=LAnno,pats=[],guard=[],body=[AccVar]}}, + fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]}, + pats=[],guard=[],body=[AccVar]}}, [],St}; false -> {Bc,Bps,St1} = bc_tq1(Line, E, Qs0, AccVar, St0), diff --git a/lib/compiler/src/v3_kernel.erl b/lib/compiler/src/v3_kernel.erl index 5f1c108f7c..2b2b8bf550 100644 --- a/lib/compiler/src/v3_kernel.erl +++ b/lib/compiler/src/v3_kernel.erl @@ -1875,7 +1875,7 @@ format_error(bad_segment_size) -> add_warning(none, Term, Anno, #kern{ws=Ws}=St) -> File = get_file(Anno), - St#kern{ws=[{File,[{?MODULE,Term}]}|Ws]}; + St#kern{ws=[{File,[{none,?MODULE,Term}]}|Ws]}; add_warning(Line, Term, Anno, #kern{ws=Ws}=St) -> File = get_file(Anno), St#kern{ws=[{File,[{Line,?MODULE,Term}]}|Ws]}. diff --git a/lib/compiler/test/beam_validator_SUITE.erl b/lib/compiler/test/beam_validator_SUITE.erl index bc1a9e2b3b..626f89ba7a 100644 --- a/lib/compiler/test/beam_validator_SUITE.erl +++ b/lib/compiler/test/beam_validator_SUITE.erl @@ -28,7 +28,7 @@ overwrite_catchtag/1,overwrite_trytag/1,accessing_tags/1,bad_catch_try/1, cons_guard/1, freg_range/1,freg_uninit/1,freg_state/1, - bin_match/1,bin_aligned/1,bad_dsetel/1, + bin_match/1,bad_bin_match/1,bin_aligned/1,bad_dsetel/1, state_after_fault_in_catch/1,no_exception_in_catch/1, undef_label/1,illegal_instruction/1,failing_gc_guard_bif/1]). @@ -56,7 +56,7 @@ groups() -> unsafe_catch,dead_code,mult_labels, overwrite_catchtag,overwrite_trytag,accessing_tags, bad_catch_try,cons_guard,freg_range,freg_uninit, - freg_state,bin_match,bin_aligned,bad_dsetel, + freg_state,bin_match,bad_bin_match,bin_aligned,bad_dsetel, state_after_fault_in_catch,no_exception_in_catch, undef_label,illegal_instruction,failing_gc_guard_bif]}]. @@ -317,6 +317,11 @@ bin_match(Config) when is_list(Config) -> {{t,x,1},{{bs_restore,1},16,{no_save_point,1}}}] = Errors, ok. +bad_bin_match(Config) when is_list(Config) -> + [{{t,t,1},{return,5,{match_context,{x,0}}}}] = + do_val(bad_bin_match, Config), + ok. + bin_aligned(Config) when is_list(Config) -> Errors = do_val(bin_aligned, Config), ?line diff --git a/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S b/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S new file mode 100644 index 0000000000..a60ca1e89a --- /dev/null +++ b/lib/compiler/test/beam_validator_SUITE_data/bad_bin_match.S @@ -0,0 +1,15 @@ +{module, bad_bin_match}. %% version = 0 + +{exports, [{t,1}]}. + +{attributes, []}. + +{labels, 3}. + + +{function, t, 1, 2}. + {label,1}. + {func_info,{atom,t},{atom,t},1}. + {label,2}. + {test,bs_start_match2,{f,1},1,[{x,0},0],{x,0}}. + return. diff --git a/lib/compiler/test/bs_construct_SUITE.erl b/lib/compiler/test/bs_construct_SUITE.erl index 4ea5235bb6..ce39de2a82 100644 --- a/lib/compiler/test/bs_construct_SUITE.erl +++ b/lib/compiler/test/bs_construct_SUITE.erl @@ -319,6 +319,8 @@ in_guard(Config) when is_list(Config) -> ?line 1 = in_guard_1(<<16#74ad:16>>, 16#e95, 5), ?line 2 = in_guard_1(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>), ?line 3 = in_guard_1(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415), + ?line 3 = in_guard_1(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3), + ?line 3 = in_guard_1(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226), ?line nope = in_guard_1(<<1>>, 42, b), ?line nope = in_guard_1(<<1>>, a, b), ?line nope = in_guard_1(<<1,2>>, 1, 1), diff --git a/lib/compiler/test/compile_SUITE.erl b/lib/compiler/test/compile_SUITE.erl index 97777568b6..be01ea713d 100644 --- a/lib/compiler/test/compile_SUITE.erl +++ b/lib/compiler/test/compile_SUITE.erl @@ -139,8 +139,8 @@ forms_2(Config) when is_list(Config) -> module_mismatch(Config) when is_list(Config) -> ?line DataDir = ?config(data_dir, Config), ?line File = filename:join(DataDir, "wrong_module_name.erl"), - ?line {error,[{"wrong_module_name.beam", - [{compile,{module_name,arne,"wrong_module_name"}}]}], + {error,[{"wrong_module_name.beam", + [{none,compile,{module_name,arne,"wrong_module_name"}}]}], []} = compile:file(File, [return]), ?line error = compile:file(File, [report]), diff --git a/lib/compiler/test/core_fold_SUITE.erl b/lib/compiler/test/core_fold_SUITE.erl index abc9ab6a72..a5a4e62a42 100644 --- a/lib/compiler/test/core_fold_SUITE.erl +++ b/lib/compiler/test/core_fold_SUITE.erl @@ -299,7 +299,7 @@ unused_multiple_values_error(Config) when is_list(Config) -> Opts = [no_copt,clint,return,from_core,{outdir,PrivDir} |test_lib:opt_opts(?MODULE)], {error,[{unused_multiple_values_error, - [{core_lint,{return_mismatch,{hello,1}}}]}], + [{none,core_lint,{return_mismatch,{hello,1}}}]}], []} = c:c(Core, Opts), ok. diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl index 5656d23090..a0a9bb7ddd 100644 --- a/lib/compiler/test/guard_SUITE.erl +++ b/lib/compiler/test/guard_SUITE.erl @@ -813,8 +813,16 @@ and_guard(Config) when is_list(Config) -> ?line ok = relprod({'Set',a,b}, {'Set',a,b}), + ok = and_same_var(42), + {'EXIT',{if_clause,_}} = (catch and_same_var(x)), ok. +and_same_var(V) -> + B = is_integer(V), + if + B or B -> ok + end. + relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'), (erlang:size(R2) =:= 3) and (erlang:element(1,R2) =:= 'Set') -> ok. diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl index d9b92766e4..e5c2d4f73a 100644 --- a/lib/compiler/test/inline_SUITE.erl +++ b/lib/compiler/test/inline_SUITE.erl @@ -36,7 +36,7 @@ all() -> groups() -> [{p,test_lib:parallel(), - [attribute,bsdecode,bsdes,barnes2,decode1,smith, + [attribute,bsdecode,bsdes,barnes2,decode1,smith,fname, itracer,pseudoknot,comma_splitter,lists,really_inlined,otp_7223, coverage]}]. @@ -84,6 +84,7 @@ attribute(Config) when is_list(Config) -> ?comp(itracer). ?comp(pseudoknot). ?comp(comma_splitter). +?comp(fname). try_inline(Mod, Config) -> Node = ?config(testing_node, Config), diff --git a/lib/compiler/test/inline_SUITE_data/fname.erl b/lib/compiler/test/inline_SUITE_data/fname.erl new file mode 100644 index 0000000000..7ad4446bf3 --- /dev/null +++ b/lib/compiler/test/inline_SUITE_data/fname.erl @@ -0,0 +1,29 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. 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(fname). +-export([?MODULE/0]). + +?MODULE() -> + F = fun bar/1, + G = lists:last([(fun (X) when F =:= X -> X end)]), + F = G(F), + ok. + +bar(X) -> + X. diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl index f00bfe663b..810b2b48c9 100644 --- a/lib/compiler/test/warnings_SUITE.erl +++ b/lib/compiler/test/warnings_SUITE.erl @@ -37,7 +37,7 @@ -export([pattern/1,pattern2/1,pattern3/1,pattern4/1, guard/1,bad_arith/1,bool_cases/1,bad_apply/1, - files/1,effect/1,bin_opt_info/1,bin_construction/1]). + files/1,effect/1,bin_opt_info/1,bin_construction/1, comprehensions/1]). % Default timetrap timeout (set in init_per_testcase). -define(default_timeout, ?t:minutes(2)). @@ -61,7 +61,7 @@ groups() -> [{p,test_lib:parallel(), [pattern,pattern2,pattern3,pattern4,guard, bad_arith,bool_cases,bad_apply,files,effect, - bin_opt_info,bin_construction]}]. + bin_opt_info,bin_construction,comprehensions]}]. init_per_suite(Config) -> Config. @@ -536,6 +536,16 @@ bin_construction(Config) when is_list(Config) -> ok. +comprehensions(Config) when is_list(Config) -> + Ts = [{tautologic_guards, + <<" + f() -> [ true || true ]. + g() -> << <<1>> || true >>. + ">>, + [], []}], + run(Config, Ts), + ok. + %%% %%% End of test cases. %%% diff --git a/lib/debugger/test/bs_construct_SUITE.erl b/lib/debugger/test/bs_construct_SUITE.erl index e0bda7eac8..4870c87d74 100644 --- a/lib/debugger/test/bs_construct_SUITE.erl +++ b/lib/debugger/test/bs_construct_SUITE.erl @@ -454,6 +454,8 @@ in_guard(Config) when is_list(Config) -> ?line 1 = in_guard(<<16#74ad:16>>, 16#e95, 5), ?line 2 = in_guard(<<16#3A,16#F7,"hello">>, 16#3AF7, <<"hello">>), ?line 3 = in_guard(<<16#FBCD:14,3.1415/float,3:2>>, 16#FBCD, 3.1415), + ?line 3 = in_guard(<<16#FBCD:14,3/float,3:2>>, 16#FBCD, 3), + ?line 3 = in_guard(<<16#FBCD:14,(2 bsl 226)/float,3:2>>, 16#FBCD, 2 bsl 226), nope = in_guard(<<1>>, 42, b), nope = in_guard(<<1>>, a, b), nope = in_guard(<<1,2>>, 1, 1), diff --git a/lib/debugger/test/bs_match_misc_SUITE.erl b/lib/debugger/test/bs_match_misc_SUITE.erl index 6b66c45448..54fa9a59df 100644 --- a/lib/debugger/test/bs_match_misc_SUITE.erl +++ b/lib/debugger/test/bs_match_misc_SUITE.erl @@ -26,7 +26,7 @@ kenneth/1,encode_binary/1,native/1,happi/1, size_var/1,wiger/1,x0_context/1,huge_float_field/1, writable_binary_matched/1,otp_7198/1, - unordered_bindings/1]). + unordered_bindings/1,float_middle_endian/1]). -include_lib("test_server/include/test_server.hrl"). @@ -36,7 +36,7 @@ all() -> [bound_var, bound_tail, t_float, little_float, sean, kenneth, encode_binary, native, happi, size_var, wiger, x0_context, huge_float_field, writable_binary_matched, - otp_7198, unordered_bindings]. + otp_7198, unordered_bindings, float_middle_endian]. groups() -> []. @@ -106,6 +106,13 @@ t_float(Config) when is_list(Config) -> ok. +float_middle_endian(Config) when is_list(Config) -> + F = 9007199254740990.0, % turns to -NaN when word-swapped + ?line fcmp(F, match_float(<<F:64/float>>, 64, 0)), + ?line fcmp(F, match_float(<<1:1,F:64/float,127:7>>, 64, 1)), + ?line fcmp(F, match_float(<<1:13,F:64/float,127:3>>, 64, 13)), + ok. + fcmp(F1, F2) when (F1 - F2) / F2 < 0.0000001 -> ok. diff --git a/lib/diameter/doc/src/diameter_dict.xml b/lib/diameter/doc/src/diameter_dict.xml index 4fcde495b3..8bf4a14240 100644 --- a/lib/diameter/doc/src/diameter_dict.xml +++ b/lib/diameter/doc/src/diameter_dict.xml @@ -609,7 +609,9 @@ UTF8String() = [integer()] <p> List elements are the UTF-8 encodings of the individual characters in the string. -Invalid codepoints will result in encode/decode failure.</p> +Invalid codepoints will result in encode/decode failure. +On encode, a UTF8String() can be specified as a binary, or as a nested +list of binaries and codepoints.</p> <marker id="DiameterIdentity"/> <pre> diff --git a/lib/diameter/src/base/diameter_config.erl b/lib/diameter/src/base/diameter_config.erl index fc5c284bf2..34b40c3a29 100644 --- a/lib/diameter/src/base/diameter_config.erl +++ b/lib/diameter/src/base/diameter_config.erl @@ -651,8 +651,9 @@ make_opts(Opts, Defs) -> [{K, opt(K,V)} || {K,V} <- Known]. -opt(spawn_opt, L) -> - is_list(L); +opt(spawn_opt, L) + when is_list(L) -> + L; opt(K, false = B) when K /= sequence -> diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl index 4e55864168..282276827f 100644 --- a/lib/diameter/src/base/diameter_peer_fsm.erl +++ b/lib/diameter/src/base/diameter_peer_fsm.erl @@ -28,7 +28,8 @@ -behaviour(gen_server). %% Interface towards diameter_watchdog. --export([start/3]). +-export([start/3, + result_code/2]). %% gen_server callbacks -export([init/1, @@ -62,7 +63,6 @@ %% Keys in process dictionary. -define(CB_KEY, cb). %% capabilities callback -define(DPR_KEY, dpr). %% disconnect callback --define(DWA_KEY, dwa). %% outgoing DWA -define(REF_KEY, ref). %% transport_ref() -define(Q_KEY, q). %% transport start queue -define(START_KEY, start). %% start of connected transport @@ -177,14 +177,9 @@ init(T) -> proc_lib:init_ack({ok, self()}), gen_server:enter_loop(?MODULE, [], i(T)). -i({Ack, WPid, {M, Ref} = T, Opts, {Mask, - Nodes, - Dict0, - #diameter_service{capabilities = LCaps} - = Svc}}) -> +i({Ack, WPid, {M, Ref} = T, Opts, {Mask, Nodes, Dict0, Svc}}) -> erlang:monitor(process, WPid), wait(Ack, WPid), - putr(?DWA_KEY, dwa(LCaps)), diameter_stats:reg(Ref), {[Cs,Ds], Rest} = proplists:split(Opts, [capabilities_cb, disconnect_cb]), putr(?CB_KEY, {Ref, [F || {_,F} <- Cs]}), @@ -612,9 +607,7 @@ rcv(Name, _, #state{state = PS}) Name == 'CEA' -> {stop, {Name, PS}}; -rcv(N, Pkt, S) - when N == 'DWR'; - N == 'DPR' -> +rcv('DPR' = N, Pkt, S) -> handle_request(N, Pkt, S); %% DPA in response to DPR and with the expected identifiers. @@ -717,8 +710,8 @@ build_answer(Type, errors = Es} = Pkt, S) -> - RC = rc(H, Es), - {answer(Type, RC, Es, S), post(Type, RC, Pkt, S)}. + {RC, FailedAVP} = result_code(H, Es), + {answer(Type, RC, FailedAVP, S), post(Type, RC, Pkt, S)}. inband_security([]) -> ?NO_INBAND_SECURITY; @@ -734,7 +727,7 @@ cea(CEA, RC, Dict0) -> post('CER' = T, RC, Pkt, S) -> {T, caps(S), {RC, Pkt}}; -post(_, _, _, _) -> +post('DPR', _, _, _) -> ok. rejected({capabilities_cb, _F, Reason}, T, S) -> @@ -743,20 +736,20 @@ rejected({capabilities_cb, _F, Reason}, T, S) -> rejected(discard, T, _) -> close(T); rejected({N, Es}, T, S) -> - {answer('CER', N, Es, S), T}; + {answer('CER', N, failed_avp(N, Es), S), T}; rejected(N, T, S) -> rejected({N, []}, T, S). -answer(Type, RC, Es, S) -> - set(answer(Type, RC, S), failed_avp(RC, Es)). - failed_avp(RC, [{RC, Avp} | _]) -> - [{'Failed-AVP', [{'AVP', [Avp]}]}]; + [{'Failed-AVP', [[{'AVP', [Avp]}]]}]; failed_avp(RC, [_ | Es]) -> failed_avp(RC, Es); failed_avp(_, [] = No) -> No. +answer(Type, RC, FailedAVP, S) -> + set(answer(Type, RC, S), FailedAVP). + answer(Type, RC, S) -> answer_message(answer(Type, S), RC). @@ -784,29 +777,29 @@ set(['answer-message' | _] = Ans, FailedAvp) -> set([_|_] = Ans, FailedAvp) -> Ans ++ FailedAvp. -%% rc/2 +%% result_code/2 -rc(#diameter_header{is_error = true}, _) -> - 3008; %% DIAMETER_INVALID_HDR_BITS +result_code(#diameter_header{is_error = true}, _) -> + {3008, []}; %% DIAMETER_INVALID_HDR_BITS -rc(_, [Bs|_]) +result_code(_, [Bs|_]) when is_bitstring(Bs) -> %% from old code - 3009; %% DIAMETER_INVALID_HDR_BITS + {3009, []}; %% DIAMETER_INVALID_HDR_BITS -rc(#diameter_header{version = ?DIAMETER_VERSION}, Es) -> +result_code(#diameter_header{version = ?DIAMETER_VERSION}, Es) -> rc(Es); -rc(_, _) -> - 5011. %% DIAMETER_UNSUPPORTED_VERSION +result_code(_, _) -> + {5011, []}. %% DIAMETER_UNSUPPORTED_VERSION %% rc/1 rc([]) -> - 2001; %% DIAMETER_SUCCESS -rc([{RC,_}|_]) -> - RC; + {2001, []}; %% DIAMETER_SUCCESS +rc([{RC, _} | _] = Es) -> + {RC, failed_avp(RC, Es)}; rc([RC|_]) -> - RC. + {RC, []}. %% DIAMETER_INVALID_HDR_BITS 3008 %% A request was received whose bits in the Diameter header were @@ -832,9 +825,6 @@ rc([RC|_]) -> %% answer/2 -answer('DWR', _) -> - getr(?DWA_KEY); - answer(Name, #state{service = #diameter_service{capabilities = Caps}}) -> a(Name, Caps). @@ -1019,15 +1009,6 @@ report({M, _, _, _, _} = T) report(_) -> ok. -%% dwa/1 - -dwa(#diameter_caps{origin_host = OH, - origin_realm = OR, - origin_state_id = OSI}) -> - ['DWA', {'Origin-Host', OH}, - {'Origin-Realm', OR}, - {'Origin-State-Id', OSI}]. - %% dpr/2 %% %% The RFC isn't clear on whether DPR should be send in a non-Open diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl index 9dd8aafc61..47e03cd0a0 100644 --- a/lib/diameter/src/base/diameter_service.erl +++ b/lib/diameter/src/base/diameter_service.erl @@ -673,7 +673,8 @@ service_options(Opts) -> {use_shared_peers, get_value(use_shared_peers, Opts)}, {restrict_connections, proplists:get_value(restrict_connections, Opts, - ?RESTRICT)}]. + ?RESTRICT)}, + {spawn_opt, proplists:get_value(spawn_opt, Opts, [])}]. %% The order of options is significant since we match against the list. mref(false = No) -> diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl index 9ae289034c..8c07e84777 100644 --- a/lib/diameter/src/base/diameter_types.erl +++ b/lib/diameter/src/base/diameter_types.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2010-2011. All Rights Reserved. +%% Copyright Ericsson AB 2010-2013. 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 @@ -250,13 +250,10 @@ 'Address'(encode, zero) -> <<0:48>>; -'Address'(decode, <<1:16, B/binary>>) - when size(B) == 4 -> - list_to_tuple(binary_to_list(B)); - -'Address'(decode, <<2:16, B/binary>>) - when size(B) == 16 -> - list_to_tuple(v6dec(B, [])); +'Address'(decode, <<A:16, B/binary>>) + when 1 == A, 4 == size(B); + 2 == A, 16 == size(B) -> + list_to_tuple([N || <<N:A/unit:8>> <= B]); 'Address'(decode, <<A:16, _/binary>> = B) when 1 == A; @@ -264,30 +261,10 @@ ?INVALID_LENGTH(B); 'Address'(encode, T) -> - ipenc(diameter_lib:ipaddr(T)). - -ipenc(T) - when is_tuple(T), size(T) == 4 -> - B = list_to_binary(tuple_to_list(T)), - <<1:16, B/binary>>; - -ipenc(T) - when is_tuple(T), size(T) == 8 -> - B = v6enc(lists:reverse(tuple_to_list(T)), <<>>), - <<2:16, B/binary>>. - -v6dec(<<N:16, B/binary>>, Acc) -> - v6dec(B, [N | Acc]); - -v6dec(<<>>, Acc) -> - lists:reverse(Acc). - -v6enc([N | Rest], B) - when ?UINT(16,N) -> - v6enc(Rest, <<N:16, B/binary>>); - -v6enc([], B) -> - B. + Ns = tuple_to_list(diameter_lib:ipaddr(T)), %% length 4 or 8 + A = length(Ns) div 4, %% 1 or 2 + B = << <<N:A/unit:8>> || N <- Ns >>, + <<A:16, B/binary>>. %% -------------------- @@ -354,36 +331,13 @@ v6enc([], B) -> %% -------------------- 'UTF8String'(decode, Bin) -> - udec(Bin, []); + tl([0|_] = unicode:characters_to_list([0, Bin])); %% assert list return 'UTF8String'(encode = M, zero) -> 'UTF8String'(M, []); 'UTF8String'(encode, S) -> - uenc(S, []). - -udec(<<>>, Acc) -> - lists:reverse(Acc); - -udec(<<C/utf8, Rest/binary>>, Acc) -> - udec(Rest, [C | Acc]). - -uenc(E, Acc) - when E == []; - E == <<>> -> - list_to_binary(lists:reverse(Acc)); - -uenc(<<C/utf8, Rest/binary>>, Acc) -> - uenc(Rest, [<<C/utf8>> | Acc]); - -uenc([[] | Rest], Acc) -> - uenc(Rest, Acc); - -uenc([[H|T] | Rest], Acc) -> - uenc([H, T | Rest], Acc); - -uenc([C | Rest], Acc) -> - uenc(Rest, [<<C/utf8>> | Acc]). + <<_/binary>> = unicode:characters_to_binary(S). %% assert binary return %% -------------------- diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl index 88ccf630e2..7e75801718 100644 --- a/lib/diameter/src/base/diameter_watchdog.erl +++ b/lib/diameter/src/base/diameter_watchdog.erl @@ -201,7 +201,7 @@ common_dictionary(Apps) -> %% means a user won't be able either send of receive %% messages in the common dictionary: incoming request %% will be answered with 3007 and outgoing requests cannot - %% be sent. The dictionary returned here is oly used for + %% be sent. The dictionary returned here is only used for %% messages diameter sends and receives: CER/CEA, DPR/DPA %% and DWR/DWA. ?BASE @@ -545,10 +545,15 @@ recv(Name, Pkt, S) -> %% rcv/3 +rcv('DWR', Pkt, #watchdog{transport = TPid, + dictionary = Dict0, + sequence = Mask}) -> + send(TPid, {send, encode(dwa(Pkt), Mask, Dict0)}), + ?LOG(send, 'DWA'); + rcv(N, _, _) when N == 'CER'; N == 'CEA'; - N == 'DWR'; N == 'DWA'; N == 'DPR'; N == 'DPA' -> @@ -642,6 +647,9 @@ rcv('DWA', #watchdog{status = reopen, %% REOPEN Receive non-DWA Throwaway() REOPEN +rcv('DWR', #watchdog{status = reopen} = S) -> + S; %% ensure DWA: the RFC isn't explicit about answering + rcv(_, #watchdog{status = reopen} = S) -> throwaway(S). @@ -782,6 +790,13 @@ dwr(#diameter_caps{origin_host = OH, {'Origin-Realm', OR}, {'Origin-State-Id', OSI}]. +%% dwa/1 + +dwa(#diameter_packet{header = H, errors = Es}) -> + {RC, FailedAVP} = diameter_peer_fsm:result_code(H, Es), + ['DWA', {'Result-Code', RC} + | tl(getr(dwr)) ++ FailedAVP]. + %% restrict_nodes/1 restrict_nodes(false) -> diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl index 24d4c7665e..295d23912b 100644 --- a/lib/diameter/test/diameter_codec_test.erl +++ b/lib/diameter/test/diameter_codec_test.erl @@ -1,3 +1,4 @@ +%% coding: utf-8 %% %% %CopyrightBegin% %% @@ -19,7 +20,9 @@ -module(diameter_codec_test). --compile(export_all). +-export([base/0, + gen/1, + lib/0]). %% %% Test encode/decode of dictionary-related modules. @@ -38,37 +41,34 @@ %% Interface. base() -> - [] = run([{?MODULE, [base, T]} || T <- [zero, decode]]). + [] = run([[fun base/1, T] || T <- [zero, decode]]). gen(Mod) -> Fs = [{Mod, F, []} || F <- [name, id, vendor_id, vendor_name]], - [] = run(Fs ++ [{?MODULE, [gen, Mod, T]} || T <- [messages, - command_codes, - avp_types, - grouped, - enum, - import_avps, - import_groups, - import_enums]]). + [] = run(Fs ++ [[fun gen/2, Mod, T] || T <- [messages, + command_codes, + avp_types, + grouped, + enum, + import_avps, + import_groups, + import_enums]]). lib() -> - Vs = {_,_} = values('Address'), - [] = run([[fun lib/2, N, Vs] || N <- [1,2]]). + Vs = {_,_,_} = values('Address'), + [] = run([[fun lib/2, N, Vs] || N <- [{1, true}, {3, false}]]). %% =========================================================================== %% Internal functions. -lib(N, {_,_} = T) -> - B = 1 == N rem 2, - [] = run([[fun lib/2, A, B] || A <- element(N,T)]); +lib({N,B}, {_,_,_} = T) -> + [] = run([[fun lib/2, A, B] || A <- element(N,T), is_tuple(A)]); lib(IP, B) -> - LA = tuple_to_list(IP), - {SA,Fun} = ip(LA), - [] = run([[fun lib/4, IP, B, Fun, A] || A <- [IP, SA]]). + [] = run([[fun lib/3, IP, B, A] || A <- [IP, ntoa(tuple_to_list(IP))]]). -lib(IP, B, Fun, A) -> - try Fun(A) of +lib(IP, B, A) -> + try diameter_lib:ipaddr(A) of IP when B -> ok catch @@ -76,12 +76,12 @@ lib(IP, B, Fun, A) -> ok end. -ip([_,_,_,_] = A) -> +ntoa([_,_,_,_] = A) -> [$.|S] = lists:append(["." ++ integer_to_list(N) || N <- A]), - {S, fun diameter_lib:ipaddr/1}; -ip([_,_,_,_,_,_,_,_] = A) -> + S; +ntoa([_,_,_,_,_,_,_,_] = A) -> [$:|S] = lists:flatten([":" ++ io_lib:format("~.16B", [N]) || N <- A]), - {S, fun diameter_lib:ipaddr/1}. + S. %% ------------------------------------------------------------------------ %% base/1 @@ -90,7 +90,7 @@ ip([_,_,_,_,_,_,_,_] = A) -> %% ------------------------------------------------------------------------ base(T) -> - [] = run([{?MODULE, [base, T, F]} || F <- types()]). + [] = run([[fun base/2, T, F] || F <- types()]). %% Ensure that 'zero' values encode only zeros. base(zero = T, F) -> @@ -100,32 +100,23 @@ base(zero = T, F) -> %% Ensure that we can decode what we encode and vice-versa, and that %% we can't decode invalid values. base(decode, F) -> - {Eq, Vs, Ns} = b(values(F)), - [] = run([{?MODULE, [base_decode, F, Eq, V]} || V <- Vs]), - [] = run([{?MODULE, [base_invalid, F, Eq, V]} || V <- Ns]). + {Ts, Fs, Is} = values(F), + [] = run([[fun base_decode/3, F, true, V] || V <- Ts]), + [] = run([[fun base_decode/3, F, false, V] || V <- Fs]), + [] = run([[fun base_invalid/2, F, V] || V <- Is]). base_decode(F, Eq, Value) -> d(fun(X,V) -> diameter_types:F(X,V) end, Eq, Value). -base_invalid(F, Eq, Value) -> +base_invalid(F, Value) -> try - base_decode(F, Eq, Value), + base_decode(F, false, Value), exit(nok) catch error: _ -> ok end. -b({_,_,_} = T) -> - T; -b({B,Vs}) - when is_atom(B) -> - {B,Vs,[]}; -b({Vs,Ns}) -> - {true, Vs, Ns}; -b(Vs) -> - {true, Vs, []}. - types() -> [F || {F,2} <- diameter_types:module_info(exports)]. @@ -136,7 +127,7 @@ types() -> %% ------------------------------------------------------------------------ gen(M, T) -> - [] = run(lists:map(fun(X) -> {?MODULE, [gen, M, T, X]} end, + [] = run(lists:map(fun(X) -> [fun gen/3, M, T, X] end, fetch(T, dict(M)))). fetch(T, Spec) -> @@ -197,18 +188,20 @@ gen(M, enum = T, {Name, ED}) gen(M, T, {?A(Name), lists:map(fun({E,D}) -> {?A(E), D} end, ED)}); gen(M, enum, {Name, ED}) -> - [] = run([{?MODULE, [enum, M, Name, T]} || T <- ED]); + [] = run([[fun enum/3, M, Name, T] || T <- ED]); gen(M, Tag, {_Mod, L}) -> T = retag(Tag), - [] = run([{?MODULE, [gen, M, T, I]} || I <- L]). + [] = run([[fun gen/3, M, T, I] || I <- L]). %% avp_decode/3 avp_decode(Mod, Type, Name) -> - {Eq, Vs, _} = b(values(Type, Name, Mod)), - [] = run([{?MODULE, [avp_decode, Mod, Name, Type, Eq, V]} - || V <- v(Vs)]). + {Ts, Fs, _} = values(Type, Name, Mod), + [] = run([[fun avp_decode/5, Mod, Name, Type, true, V] + || V <- v(Ts)]), + [] = run([[fun avp_decode/5, Mod, Name, Type, false, V] + || V <- v(Fs)]). avp_decode(Mod, Name, Type, Eq, Value) -> d(fun(X,V) -> avp(Mod, X, V, Name, Type) end, Eq, Value). @@ -250,7 +243,7 @@ v(N, Ord, E, Acc) -> arity(M, Name, Rname) -> Rec = M:'#new-'(Rname), - [] = run([{?MODULE, [arity, M, Name, F, Rec]} + [] = run([[fun arity/4, M, Name, F, Rec] || F <- M:'#info-'(Rname, fields)]). arity(M, Name, AvpName, Rec) -> @@ -299,68 +292,93 @@ z(B) -> %% tested.) values('OctetString' = T) -> - {["", atom_to_list(T)], [-1, 256]}; + {["", atom_to_list(T)], + [], + [-1, 256]}; values('Integer32') -> Mx = (1 bsl 31) - 1, Mn = -1*Mx, - {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]}; + {[Mn, 0, random(Mn,Mx), Mx], + [], + [Mn - 1, Mx + 1]}; values('Integer64') -> Mx = (1 bsl 63) - 1, Mn = -1*Mx, - {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]}; + {[Mn, 0, random(Mn,Mx), Mx], + [], + [Mn - 1, Mx + 1]}; values('Unsigned32') -> M = (1 bsl 32) - 1, - {[0, random(M), M], [-1, M + 1]}; + {[0, random(M), M], + [], + [-1, M + 1]}; values('Unsigned64') -> M = (1 bsl 64) - 1, - {[0, random(M), M], [-1, M + 1]}; + {[0, random(M), M], + [], + [-1, M + 1]}; values('Float32') -> E = (1 bsl 8) - 2, F = (1 bsl 23) - 1, <<Mx:32/float>> = <<0:1, E:8, F:23>>, <<Mn:32/float>> = <<1:1, E:8, F:23>>, - {[0.0, infinity, '-infinity', Mx, Mn], [0]}; + {[0.0, infinity, '-infinity', Mx, Mn], + [], + [0]}; values('Float64') -> E = (1 bsl 11) - 2, F = (1 bsl 52) - 1, <<Mx:64/float>> = <<0:1, E:11, F:52>>, <<Mn:64/float>> = <<1:1, E:11, F:52>>, - {[0.0, infinity, '-infinity', Mx, Mn], [0]}; + {[0.0, infinity, '-infinity', Mx, Mn], + [], + [0]}; values('Address') -> {[{255,0,random(16#FF),1}, {65535,0,0,random(16#FFFF),0,0,0,1}], - [{256,0,0,1}, {65536,0,0,0,0,0,0,1}]}; + ["127.0.0.1", "FFFF:FF::1.2.3.4"], + [{256,0,0,1}, {65536,0,0,0,0,0,0,1}, "256.0.0.1", "10000::1"]}; values('DiameterIdentity') -> - {["x", "diameter.com"], [""]}; + {["x", "diameter.com"], + [], + [""]}; values('DiameterURI') -> - {false, ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr - || S <- ["", "s"], - P <- ["", ":1234"], - Tr <- ["" | [";transport=" ++ X - || X <- ["tcp", "sctp", "udp"]]], - Pr <- ["" | [";protocol=" ++ X - || X <- ["diameter","radius","tacacs+"]]]]}; + {[], + ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr + || S <- ["", "s"], + P <- ["", ":1234"], + Tr <- ["" | [";transport=" ++ X + || X <- ["tcp", "sctp", "udp"]]], + Pr <- ["" | [";protocol=" ++ X + || X <- ["diameter","radius","tacacs+"]]]], + []}; values(T) when T == 'IPFilterRule'; T == 'QoSFilterRule' -> - ["deny in 0 from 127.0.0.1 to 10.0.0.1"]; + {["deny in 0 from 127.0.0.1 to 10.0.0.1"], + [], + []}; %% RFC 3629 defines the UTF-8 encoding of U+0000 through U+10FFFF with the %% exception of U+D800 through U+DFFF. values('UTF8String') -> + S = "ᚠᚢᚦᚨᚱᚲ", + B = unicode:characters_to_binary(S), {[[], + S, lists:seq(0,16#1FF), [0,16#D7FF,16#E000,16#10FFFF], [random(16#D7FF), random(16#E000,16#10FFFF)]], + [B, [B, S, hd(S)], [S, B]], [[-1], [16#D800], [16#DFFF], @@ -372,6 +390,7 @@ values('Time') -> {{2036,2,7},{6,28,15}}, {{2036,2,7},{6,28,16}}, %% 19000101T000000 + 2 bsl 31 {{2104,2,26},{9,42,23}}], + [], [{{1968,1,20},{3,14,7}}, {{2104,2,26},{9,42,24}}]}. %% 19000101T000000 + 3 bsl 31 @@ -382,18 +401,24 @@ values('Time') -> values('Enumerated', Name, Mod) -> {_Name, Vals} = lists:keyfind(?S(Name), 1, types(enum, Mod)), - lists:map(fun({_,N}) -> N end, Vals); + {lists:map(fun({_,N}) -> N end, Vals), + [], + []}; values('Grouped', Name, Mod) -> Rname = Mod:name2rec(Name), Rec = Mod:'#new-'(Rname), Avps = Mod:'#info-'(Rname, fields), - Enum = diameter_enum:combine(lists:map(fun({_,Vs,_}) -> to_enum(Vs) end, + Enum = diameter_enum:combine(lists:map(fun({Vs,_,_}) -> to_enum(Vs) end, [values(F, Mod) || F <- Avps])), - {false, diameter_enum:append(group(Mod, Name, Rec, Avps, Enum))}; + {[], + diameter_enum:append(group(Mod, Name, Rec, Avps, Enum)), + []}; values(_, 'Framed-IP-Address', _) -> - [{127,0,0,1}]; + {[{127,0,0,1}], + [], + []}; values(Type, _, _) -> values(Type). @@ -407,12 +432,14 @@ to_enum(E) -> %% values/2 values('AVP', _) -> - {true, [#diameter_avp{code = 0, data = <<0>>}], []}; + {[#diameter_avp{code = 0, data = <<0>>}], + [], + []}; values(Name, Mod) -> Avps = types(avp_types, Mod), {_Name, _Code, Type, _Flags} = lists:keyfind(?S(Name), 1, Avps), - b(values(?A(Type), Name, Mod)). + values(?A(Type), Name, Mod). %% group/5 %% diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl index 97f4cec11f..9408fae62c 100644 --- a/lib/diameter/test/diameter_transport_SUITE.erl +++ b/lib/diameter/test/diameter_transport_SUITE.erl @@ -180,12 +180,13 @@ reconnect({listen, Ref}) -> [_] = diameter_reg:wait({diameter_tcp, listener, {LRef, '_'}}), true = diameter_reg:add_new({?MODULE, Ref, LRef}), - %% Wait for partner to request transport death: kill to force the - %% peer to reconnect. + %% Wait for partner to request transport death. TPid = abort(SvcName, LRef, Ref), + %% Kill transport to force the peer to reconnect. exit(TPid, kill), + %% Wait for the partner again. abort(SvcName, LRef, Ref); reconnect({connect, Ref}) -> @@ -200,7 +201,7 @@ reconnect({connect, Ref}) -> %% reconnection attempts. abort(SvcName, Pid, Ref), - %% Transport does down and is reestablished. + %% Transport goes down and is reestablished. ?RECV(#diameter_event{service = SvcName, info = {down, CRef, _, _}}), ?RECV(#diameter_event{service = SvcName, info = {reconnect, CRef, _}}), ?RECV(#diameter_event{service = SvcName, info = {up, CRef, _, _, _}}), diff --git a/lib/erl_interface/aclocal.m4 b/lib/erl_interface/aclocal.m4 index 25f40944e7..46b30a16b3 100644 --- a/lib/erl_interface/aclocal.m4 +++ b/lib/erl_interface/aclocal.m4 @@ -954,6 +954,40 @@ dnl AC_DEFUN(ERL_FIND_ETHR_LIB, [ +AC_ARG_ENABLE(native-ethr-impls, + AS_HELP_STRING([--disable-native-ethr-impls], + [disable native ethread implementations]), +[ case "$enableval" in + no) disable_native_ethr_impls=yes ;; + *) disable_native_ethr_impls=no ;; + esac ], disable_native_ethr_impls=no) + +test "X$disable_native_ethr_impls" = "Xyes" && + AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) + +AC_ARG_ENABLE(x86-out-of-order, + AS_HELP_STRING([--enable-x86-out-of-order], + [enable x86/x84_64 out of order support (default disabled)])) + +AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, + AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], + [prefer gcc native ethread implementations]), +[ case "$enableval" in + yes) enable_prefer_gcc_native_ethr_impls=yes ;; + *) enable_prefer_gcc_native_ethr_impls=no ;; + esac ], enable_prefer_gcc_native_ethr_impls=no) + +test $enable_prefer_gcc_native_ethr_impls = yes && + AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) + +AC_ARG_WITH(libatomic_ops, + AS_HELP_STRING([--with-libatomic_ops=PATH], + [specify and prefer usage of libatomic_ops in the ethread library])) + +AC_ARG_WITH(with_sparc_memory_order, + AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], + [specify sparc memory order (defaults to RMO)])) + LM_CHECK_THR_LIB ERL_INTERNAL_LIBS @@ -1003,40 +1037,44 @@ case "$THR_LIB_NAME" in AC_DEFINE(ETHR_WIN32_THREADS, 1, [Define if you have win32 threads]) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) - + if test "X$disable_native_ethr_impls" = "Xyes"; then + have_interlocked_op=no + ethr_have_native_atomics=no + else + ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) + fi test "$ethr_have_native_atomics" = "yes" && ethr_have_native_spinlock=yes ;; @@ -1303,93 +1341,98 @@ case "$THR_LIB_NAME" in int128="__int128_t" fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + if test "X$disable_native_ethr_impls" = "Xyes"; then + ethr_have_native_atomics=no + else + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + + if test $int128 != no; then + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) + fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + AC_MSG_CHECKING([for a usable libatomic_ops implementation]) + case "x$with_libatomic_ops" in + xno | xyes | x) + libatomic_ops_include= + ;; + *) + if test -d "${with_libatomic_ops}/include"; then + libatomic_ops_include="-I$with_libatomic_ops/include" + CPPFLAGS="$CPPFLAGS $libatomic_ops_include" + else + AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) + fi;; + esac + ethr_have_libatomic_ops=no + AC_TRY_LINK([#include "atomic_ops.h"], + [ + volatile AO_t x; + AO_t y; + int z; + + AO_nop_full(); + AO_store(&x, (AO_t) 0); + z = AO_load(&x); + z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); + ], + [ethr_have_native_atomics=yes + ethr_have_libatomic_ops=yes]) + AC_MSG_RESULT([$ethr_have_libatomic_ops]) + if test $ethr_have_libatomic_ops = yes; then + AC_CHECK_SIZEOF(AO_t, , + [ + #include <stdio.h> + #include "atomic_ops.h" + ]) + AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) + + AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) + if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) + fi + ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" + elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_MSG_ERROR([No usable libatomic_ops implementation found]) + fi - if test $int128 != no; then - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) - fi + case "$host_cpu" in + sparc | sun4u | sparc64 | sun4v) + case "$with_sparc_memory_order" in + "TSO") + AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; + "PSO") + AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; + "RMO"|"") + AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; + *) + AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; + esac + ethr_have_native_atomics=yes;; + i86pc | i*86 | x86_64 | amd64) + if test "$enable_x86_out_of_order" = "yes"; then + AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) + fi + ethr_have_native_atomics=yes;; + macppc | ppc | powerpc | "Power Macintosh") + ethr_have_native_atomics=yes;; + tile) + ethr_have_native_atomics=yes;; + *) + ;; + esac - AC_MSG_CHECKING([for a usable libatomic_ops implementation]) - case "x$with_libatomic_ops" in - xno | xyes | x) - libatomic_ops_include= - ;; - *) - if test -d "${with_libatomic_ops}/include"; then - libatomic_ops_include="-I$with_libatomic_ops/include" - CPPFLAGS="$CPPFLAGS $libatomic_ops_include" - else - AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) - fi;; - esac - ethr_have_libatomic_ops=no - AC_TRY_LINK([#include "atomic_ops.h"], - [ - volatile AO_t x; - AO_t y; - int z; - - AO_nop_full(); - AO_store(&x, (AO_t) 0); - z = AO_load(&x); - z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); - ], - [ethr_have_native_atomics=yes - ethr_have_libatomic_ops=yes]) - AC_MSG_RESULT([$ethr_have_libatomic_ops]) - if test $ethr_have_libatomic_ops = yes; then - AC_CHECK_SIZEOF(AO_t, , - [ - #include <stdio.h> - #include "atomic_ops.h" - ]) - AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) - - AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) - if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) - fi - ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" - elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_MSG_ERROR([No usable libatomic_ops implementation found]) fi - case "$host_cpu" in - sparc | sun4u | sparc64 | sun4v) - case "$with_sparc_memory_order" in - "TSO") - AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; - "PSO") - AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; - "RMO"|"") - AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; - *) - AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; - esac - ethr_have_native_atomics=yes;; - i86pc | i*86 | x86_64 | amd64) - if test "$enable_x86_out_of_order" = "yes"; then - AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) - fi - ethr_have_native_atomics=yes;; - macppc | ppc | "Power Macintosh") - ethr_have_native_atomics=yes;; - tile) - ethr_have_native_atomics=yes;; - *) - ;; - esac - test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes dnl Restore LIBS @@ -1451,40 +1494,6 @@ esac AC_C_DOUBLE_MIDDLE_ENDIAN -AC_ARG_ENABLE(native-ethr-impls, - AS_HELP_STRING([--disable-native-ethr-impls], - [disable native ethread implementations]), -[ case "$enableval" in - no) disable_native_ethr_impls=yes ;; - *) disable_native_ethr_impls=no ;; - esac ], disable_native_ethr_impls=no) - -AC_ARG_ENABLE(x86-out-of-order, - AS_HELP_STRING([--enable-x86-out-of-order], - [enable x86/x84_64 out of order support (default disabled)])) - -test "X$disable_native_ethr_impls" = "Xyes" && - AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) - -AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, - AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], - [prefer gcc native ethread implementations]), -[ case "$enableval" in - yes) enable_prefer_gcc_native_ethr_impls=yes ;; - *) enable_prefer_gcc_native_ethr_impls=no ;; - esac ], enable_prefer_gcc_native_ethr_impls=no) - -test $enable_prefer_gcc_native_ethr_impls = yes && - AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) - -AC_ARG_WITH(libatomic_ops, - AS_HELP_STRING([--with-libatomic_ops=PATH], - [specify and prefer usage of libatomic_ops in the ethread library])) - -AC_ARG_WITH(with_sparc_memory_order, - AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], - [specify sparc memory order (defaults to RMO)])) - ETHR_X86_SSE2_ASM=no case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64) diff --git a/lib/erl_interface/src/Makefile.in b/lib/erl_interface/src/Makefile.in index ebacc1cee0..e36b39c1fb 100644 --- a/lib/erl_interface/src/Makefile.in +++ b/lib/erl_interface/src/Makefile.in @@ -866,8 +866,12 @@ release: opt $(INSTALL_DIR) "$(RELSYSDIR)/src/misc" $(INSTALL_DIR) "$(RELSYSDIR)/src/prog" $(INSTALL_DIR) "$(RELSYSDIR)/src/registry" + $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include" + $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib" $(INSTALL_DATA) $(HEADERS) "$(RELSYSDIR)/include" + $(INSTALL_DATA) $(HEADERS) "$(RELEASE_PATH)/usr/include" $(INSTALL_DATA) $(OBJ_TARGETS) "$(RELSYSDIR)/lib" + $(INSTALL_DATA) $(OBJ_TARGETS) "$(RELEASE_PATH)/usr/lib" ifneq ($(EXE_TARGETS),) $(INSTALL_PROGRAM) $(EXE_TARGETS) "$(RELSYSDIR)/bin" endif diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile index 2b85dfc571..1ed34c74a0 100644 --- a/lib/erl_interface/test/Makefile +++ b/lib/erl_interface/test/Makefile @@ -42,7 +42,7 @@ MODULES= \ runner SPEC_FILES = \ - erl_interface.spec + erl_interface.spec erl_interface_smoke.spec COVER_FILE = erl_interface.cover diff --git a/lib/erl_interface/test/ei_decode_encode_SUITE.erl b/lib/erl_interface/test/ei_decode_encode_SUITE.erl index 2271278291..c7830f58f2 100644 --- a/lib/erl_interface/test/ei_decode_encode_SUITE.erl +++ b/lib/erl_interface/test/ei_decode_encode_SUITE.erl @@ -68,6 +68,8 @@ test_ei_decode_encode(Config) when is_list(Config) -> Port = case os:type() of {win32,_} -> open_port({spawn,"sort"},[]); + {unix, darwin} -> + open_port({spawn,"/usr/bin/true"},[]); _ -> open_port({spawn,"/bin/true"},[]) end, diff --git a/lib/erl_interface/test/erl_interface_smoke.spec b/lib/erl_interface/test/erl_interface_smoke.spec new file mode 100644 index 0000000000..bfaea2b279 --- /dev/null +++ b/lib/erl_interface/test/erl_interface_smoke.spec @@ -0,0 +1 @@ +{suites,"../erl_interface_test",[ei_decode_encode_SUITE]}. diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl index 8ebdb6ba16..84242a09aa 100644 --- a/lib/eunit/include/eunit.hrl +++ b/lib/eunit/include/eunit.hrl @@ -102,7 +102,7 @@ %% X gets a new, local binding. %% (Note that lowercase 'let' is a reserved word.) -ifndef(LET). --define(LET(X,Y,Z), ((fun(X)->(Z)end)(Y))). +-define(LET(X,Y,Z), begin ((fun(X)->(Z)end)(Y)) end). -endif. %% It is important that testing code is short and readable. @@ -110,13 +110,13 @@ %% Compare: case f(X) of true->g(X); false->h(X) end %% and: ?IF(f(X), g(Y), h(Z)) -ifndef(IF). --define(IF(B,T,F), (case (B) of true->(T); false->(F) end)). +-define(IF(B,T,F), begin (case (B) of true->(T); false->(F) end) end). -endif. %% This macro yields 'true' if the value of E matches the guarded %% pattern G, otherwise 'false'. -ifndef(MATCHES). --define(MATCHES(G,E), (case (E) of G -> true; _ -> false end)). +-define(MATCHES(G,E), begin (case (E) of G -> true; _ -> false end) end). -endif. %% This macro can be used at any time to check whether or not the code @@ -140,6 +140,7 @@ %% for clauses that cannot match, even if the expression is a constant. -undef(assert). -define(assert(BoolExpr), + begin ((fun () -> case (BoolExpr) of true -> ok; @@ -152,7 +153,8 @@ _ -> {not_a_boolean,__V} end}]}) end - end)())). + end)()) + end). -endif. -define(assertNot(BoolExpr), ?assert(not (BoolExpr))). @@ -168,6 +170,7 @@ -define(assertMatch(Guard, Expr), ok). -else. -define(assertMatch(Guard, Expr), + begin ((fun () -> case (Expr) of Guard -> ok; @@ -178,7 +181,8 @@ {pattern, (??Guard)}, {value, __V}]}) end - end)())). + end)()) + end). -endif. -define(_assertMatch(Guard, Expr), ?_test(?assertMatch(Guard, Expr))). @@ -187,6 +191,7 @@ -define(assertNotMatch(Guard, Expr), ok). -else. -define(assertNotMatch(Guard, Expr), + begin ((fun () -> __V = (Expr), case __V of @@ -198,7 +203,8 @@ {value, __V}]}); _ -> ok end - end)())). + end)()) + end). -endif. -define(_assertNotMatch(Guard, Expr), ?_test(?assertNotMatch(Guard, Expr))). @@ -208,6 +214,7 @@ -define(assertEqual(Expect, Expr), ok). -else. -define(assertEqual(Expect, Expr), + begin ((fun (__X) -> case (Expr) of __X -> ok; @@ -218,7 +225,8 @@ {expected, __X}, {value, __V}]}) end - end)(Expect))). + end)(Expect)) + end). -endif. -define(_assertEqual(Expect, Expr), ?_test(?assertEqual(Expect, Expr))). @@ -227,6 +235,7 @@ -define(assertNotEqual(Unexpected, Expr), ok). -else. -define(assertNotEqual(Unexpected, Expr), + begin ((fun (__X) -> case (Expr) of __X -> erlang:error({assertNotEqual_failed, @@ -236,7 +245,8 @@ {value, __X}]}); _ -> ok end - end)(Unexpected))). + end)(Unexpected)) + end). -endif. -define(_assertNotEqual(Unexpected, Expr), ?_test(?assertNotEqual(Unexpected, Expr))). @@ -247,6 +257,7 @@ -define(assertException(Class, Term, Expr), ok). -else. -define(assertException(Class, Term, Expr), + begin ((fun () -> try (Expr) of __V -> erlang:error({assertException_failed, @@ -271,7 +282,8 @@ {__C, __T, erlang:get_stacktrace()}}]}) end - end)())). + end)()) + end). -endif. -define(assertError(Term, Expr), ?assertException(error, Term, Expr)). @@ -291,6 +303,7 @@ -define(assertNotException(Class, Term, Expr), ok). -else. -define(assertNotException(Class, Term, Expr), + begin ((fun () -> try (Expr) of _ -> ok @@ -316,7 +329,8 @@ _ -> ok end end - end)())). + end)()) + end). -endif. -define(_assertNotException(Class, Term, Expr), ?_test(?assertNotException(Class, Term, Expr))). @@ -327,6 +341,7 @@ %% these can be used for simply running commands in a controlled way -define(_cmd_(Cmd), (eunit_lib:command(Cmd))). -define(cmdStatus(N, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {(N), __Out} -> __Out; @@ -337,7 +352,8 @@ {expected_status,(N)}, {status,__N}]}) end - end)())). + end)()) + end). -define(_cmdStatus(N, Cmd), ?_test(?cmdStatus(N, Cmd))). -define(cmd(Cmd), ?cmdStatus(0, Cmd)). -define(_cmd(Cmd), ?_test(?cmd(Cmd))). @@ -348,6 +364,7 @@ -define(assertCmdStatus(N, Cmd), ok). -else. -define(assertCmdStatus(N, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {(N), _} -> ok; @@ -358,7 +375,8 @@ {expected_status,(N)}, {status,__N}]}) end - end)())). + end)()) + end). -endif. -define(assertCmd(Cmd), ?assertCmdStatus(0, Cmd)). @@ -366,6 +384,7 @@ -define(assertCmdOutput(T, Cmd), ok). -else. -define(assertCmdOutput(T, Cmd), + begin ((fun () -> case ?_cmd_(Cmd) of {_, (T)} -> ok; @@ -376,7 +395,8 @@ {expected_output,(T)}, {output,__T}]}) end - end)())). + end)()) + end). -endif. -define(_assertCmdStatus(N, Cmd), ?_test(?assertCmdStatus(N, Cmd))). @@ -394,26 +414,30 @@ -define(debugTime(S, E), (E)). -else. -define(debugMsg(S), - (begin - io:fwrite(user, <<"~s:~w:~w: ~s\n">>, - [?FILE, ?LINE, self(), S]), - ok - end)). + begin + io:fwrite(user, <<"~s:~w:~w: ~s\n">>, + [?FILE, ?LINE, self(), S]), + ok + end). -define(debugHere, (?debugMsg("<-"))). -define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))). -define(debugVal(E), + begin ((fun (__V) -> ?debugFmt(<<"~s = ~P">>, [(??E), __V, 15]), __V - end)(E))). + end)(E)) + end). -define(debugTime(S, E), + begin ((fun () -> {__T0, _} = statistics(wall_clock), __V = (E), {__T1, _} = statistics(wall_clock), ?debugFmt(<<"~s: ~.3f s">>, [(S), (__T1-__T0)/1000]), __V - end)())). + end)()) + end). -endif. diff --git a/lib/ic/c_src/Makefile.in b/lib/ic/c_src/Makefile.in index 856823b1b3..6e65f06114 100644 --- a/lib/ic/c_src/Makefile.in +++ b/lib/ic/c_src/Makefile.in @@ -149,9 +149,13 @@ release_spec: opt $(INSTALL_DIR) "$(RELSYSDIR)/c_src" $(INSTALL_DIR) "$(RELSYSDIR)/include" $(INSTALL_DIR) "$(RELSYSDIR)/priv/lib" + $(INSTALL_DIR) "$(RELEASE_PATH)/usr/include" + $(INSTALL_DIR) "$(RELEASE_PATH)/usr/lib" $(INSTALL_DATA) ic.c ic_tmo.c "$(RELSYSDIR)/c_src" $(INSTALL_DATA) $(IDL_FILES) $(H_FILES) "$(RELSYSDIR)/include" $(INSTALL_DATA) $(LIBRARY) "$(RELSYSDIR)/priv/lib" + $(INSTALL_DATA) $(IDL_FILES) $(H_FILES) "$(RELEASE_PATH)/usr/include" + $(INSTALL_DATA) $(LIBRARY) "$(RELEASE_PATH)/usr/lib" release_docs_spec: diff --git a/lib/ic/test/Makefile b/lib/ic/test/Makefile index 54ac186c16..63af6ed9f1 100644 --- a/lib/ic/test/Makefile +++ b/lib/ic/test/Makefile @@ -33,7 +33,7 @@ RELSYSDIR = $(RELEASE_PATH)/ic_test # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -TEST_SPEC_FILE = ic.spec +TEST_SPEC_FILE = ic.spec ic_smoke.spec IDL_FILES = diff --git a/lib/ic/test/ic_smoke.spec b/lib/ic/test/ic_smoke.spec new file mode 100644 index 0000000000..ec3b5758b1 --- /dev/null +++ b/lib/ic/test/ic_smoke.spec @@ -0,0 +1 @@ +{suites,"../ic_test",[ic_SUITE]}. diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml index 741f2abaef..d9a27e7d1e 100644 --- a/lib/inets/doc/src/httpc.xml +++ b/lib/inets/doc/src/httpc.xml @@ -300,11 +300,11 @@ filename() = string() process or to a file. When streaming to the calling process using the option <c>self</c> the following stream messages will be sent to that process: <c>{http, {RequestId, - stream_start, Headers}, {http, {RequestId, stream, - BinBodyPart}, {http, {RequestId, stream_end, Headers}</c>. When + stream_start, Headers}}, {http, {RequestId, stream, + BinBodyPart}}, {http, {RequestId, stream_end, Headers}}</c>. When streaming to to the calling processes using the option <c>{self, once}</c> the first message will have an additional - element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}</c>, + element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}}</c>, this is the process id that should be used as an argument to <c>http:stream_next/1</c> to trigger the next message to be sent to the calling process. </p> diff --git a/lib/inets/doc/src/httpd.xml b/lib/inets/doc/src/httpd.xml index 8438961511..4210aea3ec 100644 --- a/lib/inets/doc/src/httpd.xml +++ b/lib/inets/doc/src/httpd.xml @@ -251,14 +251,14 @@ </item> <marker id="prop_max_uri"></marker> - <tag>{max_uri, integer()}</tag> + <tag>{max_uri_size, integer()}</tag> <item> <p>Limits the size of the HTTP request URI. By default there is no limit. </p> </item> <marker id="prop_max_keep_alive_req"></marker> - <tag>{max_keep_alive_requests, integer()}</tag> + <tag>{max_keep_alive_request, integer()}</tag> <item> <p>The number of request that a client can do on one connection. When the server has responded to the number of @@ -406,7 +406,7 @@ bytes begins with url-path is mapped to local files that begins with directory-filename, for example: - <code>{alias, {"/image", "/ftp/pub/image"}</code> + <code>{alias, {"/image", "/ftp/pub/image"}}</code> and an access to http://your.server.org/image/foo.gif would refer to the file /ftp/pub/image/foo.gif. </p> @@ -421,7 +421,7 @@ bytes by re:replace/3 to produce a path in the local filesystem. For example: - <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}</code> + <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}}</code> and an access to http://your.server.org/~bob/foo.gif would refer to the file /home/bob/public/foo.gif. @@ -468,7 +468,7 @@ bytes scripts. URLs with a path beginning with url-path are mapped to scripts beginning with directory-filename, for example: - <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}</code> + <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}}</code> and an access to http://your.server.org/cgi-bin/foo would cause the server to run the script /web/cgi-bin/foo. </p> @@ -483,7 +483,7 @@ bytes scripts. URLs with a path beginning with url-path are mapped to scripts beginning with directory-filename, for example: - <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}</code> + <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}}</code> and an access to http://your.server.org/cgi-bin/17/foo would cause the server to run the script /web/17/cgi-bin/foo. </p> @@ -517,7 +517,7 @@ bytes the standard CGI PATH_INFO and PATH_TRANSLATED environment variables. - <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}</code> + <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}}</code> </p> </item> @@ -532,7 +532,7 @@ bytes the standard CGI PATH_INFO and PATH_TRANSLATED environment variables. - <code>{script, {"PUT", "/cgi-bin/put"}</code> + <code>{script, {"PUT", "/cgi-bin/put"}}</code> </p> </item> @@ -549,7 +549,7 @@ bytes scheme scripts. A matching URL is mapped into a specific module and function. For example: - <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]} + <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}} </code> and a request to @@ -632,7 +632,7 @@ bytes </item> <marker id="prop_edlog"></marker> - <tag>{error_disk_log, internal | external}</tag> + <tag>{error_disk_log, path()}</tag> <item> <p>Defines the filename of the (disk_log(3)) error log file to be used to log server errors. If the filename does not begin @@ -706,7 +706,7 @@ bytes For example: - <code>{allow_from, ["123.34.56.11", "150.100.23"] </code> + <code>{allow_from, ["123.34.56.11", "150.100.23"]}</code> The host 123.34.56.11 and all machines on the 150.100.23 subnet are allowed access. </p> @@ -719,7 +719,7 @@ bytes which should be denied access to a given directory. For example: - <code>{deny_from, ["123.34.56.11", "150.100.23"] </code> + <code>{deny_from, ["123.34.56.11", "150.100.23"]}</code> The host 123.34.56.11 and all machines on the 150.100.23 subnet are not allowed access. </p> @@ -835,7 +835,7 @@ bytes <p><em>Security properties - requires mod_security </em></p> <marker id="prop_sec_dir"></marker> - <p><em>{security_directory, {path(), [{property(), term()}]}</em></p> + <p><em>{security_directory, {path(), [{property(), term()}]}}</em></p> <marker id="props_sdir"></marker> <p>Here follows the valid properties for security directories</p> @@ -1067,7 +1067,7 @@ bytes <fsummary>Called for each request to the Web server.</fsummary> <type> <v>OldData = list()</v> - <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}] </v> + <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}}] </v> <v>StausCode = integer()</v> <v>Body = io_list() | nobody | {Fun, Arg}</v> <v>Head = [HeaderOption]</v> diff --git a/lib/inets/doc/src/httpd_util.xml b/lib/inets/doc/src/httpd_util.xml index 9f290084d2..9218ee91e2 100644 --- a/lib/inets/doc/src/httpd_util.xml +++ b/lib/inets/doc/src/httpd_util.xml @@ -337,10 +337,10 @@ <func> <name>rfc1123_date() -> RFC1123Date</name> - <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}}) -> RFC1123Date</name> + <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}) -> RFC1123Date</name> <fsummary>Return the current date in RFC 1123 format.</fsummary> <type> - <v>YYYY = MM = DD = Hour = Min =Sec = integer()</v> + <v>YYYY = MM = DD = Hour = Min = Sec = integer()</v> <v>RFC1123Date = string()</v> </type> <desc> diff --git a/lib/inets/doc/src/mod_alias.xml b/lib/inets/doc/src/mod_alias.xml index 265a1b8e76..b38be5db28 100644 --- a/lib/inets/doc/src/mod_alias.xml +++ b/lib/inets/doc/src/mod_alias.xml @@ -118,7 +118,7 @@ </func> <func> - <name>real_script_name(ConfigDB,RequestURI,ScriptAliases) -> Ret</name> + <name>real_script_name(ConfigDB, RequestURI, ScriptAliases) -> Ret</name> <fsummary>Expand a request uri using ScriptAlias config directives.</fsummary> <type> <v>ConfigDB = config_db()</v> @@ -129,7 +129,7 @@ </type> <desc> <marker id="real_script_name"></marker> - <p><c>real_name/3</c> traverses <c>ScriptAliases</c>, + <p><c>real_script_name/3</c> traverses <c>ScriptAliases</c>, typically extracted from <c>ConfigDB</c>, and matches each <c>FakeName</c> with <c>RequestURI</c>. If a match is found <c>FakeName</c> is replaced with <c>RealName</c> in the diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml index d2e7ade5d6..f6bb2cca49 100644 --- a/lib/inets/doc/src/notes.xml +++ b/lib/inets/doc/src/notes.xml @@ -45,8 +45,6 @@ </item> </list> </section> - - <section><title>Improvements and New Features</title> <list> <item> @@ -158,7 +156,20 @@ </section> </section> +<section><title>Inets 5.9.2.2</title> + <section><title>Improvements and New Features</title> + <list> + <item> + <p> + Make log_alert configurable as option in ssl, SSLLogLevel + added as option to inets conf file</p> + <p> + Own Id: OTP-11259</p> + </item> + </list> + </section> +</section> <section><title>Inets 5.9.2.1</title> <section><title>Improvements and New Features</title> <list> diff --git a/lib/inets/doc/src/notes_history.xml b/lib/inets/doc/src/notes_history.xml index bd59c1ba47..4162ab97bb 100644 --- a/lib/inets/doc/src/notes_history.xml +++ b/lib/inets/doc/src/notes_history.xml @@ -834,7 +834,7 @@ <list type="bulleted"> <item> <p>[ftp, client] - A new option {progress, {CBmodule, - CBFunction, InitProgressTerm} has been added to allow + CBFunction, InitProgressTerm}} has been added to allow users to create things such as progress bars in there GUI's. The option affects ftp:send/[3,4] and ftp:recv/[3,4].</p> diff --git a/lib/inets/src/ftp/ftp.erl b/lib/inets/src/ftp/ftp.erl index 132a384a49..5d9887a9a4 100644 --- a/lib/inets/src/ftp/ftp.erl +++ b/lib/inets/src/ftp/ftp.erl @@ -1417,7 +1417,7 @@ handle_info({'DOWN', _Ref, _Type, Process, Reason}, State) -> handle_info({'EXIT', Pid, Reason}, #state{progress = Pid} = State) -> Report = io_lib:format("Progress reporting stopped for reason ~p~n", - Reason), + [Reason]), error_logger:info_report(Report), {noreply, State#state{progress = ignore}}; diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl index df58fa1b81..7e679531cf 100644 --- a/lib/inets/src/http_lib/http_transport.erl +++ b/lib/inets/src/http_lib/http_transport.erl @@ -159,7 +159,7 @@ listen(ip_comm = _SocketType, Addr, Port, Fd, IpFamily) -> listen_ip_comm(Addr, Port, Fd, IpFamily); listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) -> - listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily). + listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []). listen(ip_comm = _SocketType, Addr, Port, IpFamily) -> listen_ip_comm(Addr, Port, undefined, IpFamily); @@ -178,7 +178,13 @@ listen({essl, SSLConfig}, Addr, Port, IpFamily) -> [{addr, Addr}, {port, Port}, {ssl_config, SSLConfig}]), - listen_ssl(Addr, Port, undefined, SSLConfig, IpFamily). + {SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of + undefined -> + {SSLConfig, []}; + LogAlert -> + {proplists:delete(log_alert, SSLConfig), [{log_alert, LogAlert}]} + end, + listen_ssl(Addr, Port, undefined, SSLConfig2, IpFamily, ExtraOpts). listen_ip_comm(Addr, Port, Fd, IpFamily) -> case (catch do_listen_ip_comm(Addr, Port, Fd, IpFamily)) of @@ -221,24 +227,23 @@ do_listen_ip_comm(Addr, Port, Fd, IpFamily) -> gen_tcp:listen(NewPort, Opts2) end. - -listen_ssl(Addr, Port, Fd, Opts0, IpFamily) -> +listen_ssl(Addr, Port, Fd, Opts0, IpFamily, ExtraOpts) -> {NewPort, SockOpt} = get_socket_info(Addr, Port, Fd), Opts = SockOpt ++ Opts0, case IpFamily of inet6fb4 -> - Opts2 = [inet6 | Opts], + Opts2 = [inet6 | Opts] ++ ExtraOpts, ?hlrt("try ipv6 listen", [{opts, Opts2}]), case (catch ssl:listen(Port, Opts2)) of {error, Reason} when ((Reason =:= nxdomain) orelse (Reason =:= eafnosupport)) -> - Opts3 = [inet | Opts], + Opts3 = [inet | Opts] ++ ExtraOpts, ?hlrt("ipv6 listen failed - try ipv4 instead", [{reason, Reason}, {opts, Opts3}]), ssl:listen(NewPort, Opts3); {'EXIT', Reason} -> - Opts3 = [inet | Opts], + Opts3 = [inet | Opts] ++ ExtraOpts, ?hlrt("ipv6 listen exit - try ipv4 instead", [{reason, Reason}, {opts, Opts3}]), ssl:listen(NewPort, Opts3); @@ -251,7 +256,7 @@ listen_ssl(Addr, Port, Fd, Opts0, IpFamily) -> _ -> Opts2 = [IpFamily | Opts], ?hlrt("listen", [{opts, Opts2}]), - ssl:listen(NewPort, Opts2) + ssl:listen(NewPort, Opts2 ++ ExtraOpts) end. diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl index d45f3c0048..b3ca13e2fe 100644 --- a/lib/inets/src/http_server/httpd_conf.erl +++ b/lib/inets/src/http_server/httpd_conf.erl @@ -390,6 +390,13 @@ load("SSLCertificateFile " ++ SSLCertificateFile, []) -> {error, ?NICE(clean(SSLCertificateFile)++ " is an invalid SSLCertificateFile")} end; +load("SSLLogLevel " ++ SSLLogAlert, []) -> + case SSLLogAlert of + "none" -> + {ok, [], {ssl_log_alert, false}}; + _ -> + {ok, [], {ssl_log_alert, true}} + end; load("SSLCertificateKeyFile " ++ SSLCertificateKeyFile, []) -> case is_file(clean(SSLCertificateKeyFile)) of {ok, File} -> @@ -948,7 +955,8 @@ ssl_config(ConfigDB) -> ssl_ciphers(ConfigDB) ++ ssl_password(ConfigDB) ++ ssl_verify_depth(ConfigDB) ++ - ssl_ca_certificate_file(ConfigDB). + ssl_ca_certificate_file(ConfigDB) ++ + ssl_log_level(ConfigDB). @@ -1214,6 +1222,14 @@ ssl_certificate_key_file(ConfigDB) -> [{keyfile,SSLCertificateKeyFile}] end. +ssl_log_level(ConfigDB) -> + case httpd_util:lookup(ConfigDB,ssl_log_alert) of + undefined -> + []; + SSLLogLevel -> + [{log_alert,SSLLogLevel}] + end. + ssl_verify_client(ConfigDB) -> case httpd_util:lookup(ConfigDB,ssl_verify_client) of undefined -> diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl index 0f47d785ef..cb20159794 100644 --- a/lib/inets/src/http_server/httpd_request_handler.erl +++ b/lib/inets/src/http_server/httpd_request_handler.erl @@ -106,7 +106,7 @@ init([Manager, ConfigDB, AcceptTimeout]) -> case http_transport:negotiate(SocketType, Socket, TimeOut) of {error, Error} -> ?hdrd("negotiation failed", [{error, Error}]), - exit(Error); %% Can be 'normal'. + exit(shutdown); %% Can be 'normal'. ok -> ?hdrt("negotiation successfull", []), NewTimeout = TimeOut - timer:now_diff(now(),Then) div 1000, diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl index 6b6532266b..a45b04f275 100644 --- a/lib/inets/src/http_server/httpd_response.erl +++ b/lib/inets/src/http_server/httpd_response.erl @@ -20,7 +20,7 @@ -module(httpd_response). -export([generate_and_send_response/1, send_status/3, send_header/3, send_body/3, send_chunk/3, send_final_chunk/2, split_header/2, - is_disable_chunked_send/1, cache_headers/1]). + is_disable_chunked_send/1, cache_headers/2]). -export([map_status_code/2]). -include("httpd.hrl"). @@ -266,8 +266,8 @@ get_connection(false,"HTTP/1.1") -> get_connection(_,_) -> "". -cache_headers(#mod{config_db = Db}) -> - case httpd_util:lookup(Db, script_nocache, false) of +cache_headers(#mod{config_db = Db}, NoCacheType) -> + case httpd_util:lookup(Db, NoCacheType, false) of true -> Date = httpd_util:rfc1123_date(), [{"cache-control", "no-cache"}, diff --git a/lib/inets/src/http_server/mod_cgi.erl b/lib/inets/src/http_server/mod_cgi.erl index c854166c29..f1b73810e6 100644 --- a/lib/inets/src/http_server/mod_cgi.erl +++ b/lib/inets/src/http_server/mod_cgi.erl @@ -295,7 +295,7 @@ receive_headers(Port, Module, Function, Args, Timeout) -> end. send_headers(ModData, {StatusCode, _}, HTTPHeaders) -> - ExtraHeaders = httpd_response:cache_headers(ModData), + ExtraHeaders = httpd_response:cache_headers(ModData, script_nocache), httpd_response:send_header(ModData, StatusCode, ExtraHeaders ++ HTTPHeaders). diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl index e36c33b282..b11df34f9e 100644 --- a/lib/inets/src/http_server/mod_esi.erl +++ b/lib/inets/src/http_server/mod_esi.erl @@ -440,7 +440,7 @@ receive_headers(Timeout) -> end. send_headers(ModData, StatusCode, HTTPHeaders) -> - ExtraHeaders = httpd_response:cache_headers(ModData), + ExtraHeaders = httpd_response:cache_headers(ModData, erl_script_nocache), httpd_response:send_header(ModData, StatusCode, ExtraHeaders ++ HTTPHeaders). diff --git a/lib/inets/test/Makefile b/lib/inets/test/Makefile index dfa86906fd..2f2f6ec16e 100644 --- a/lib/inets/test/Makefile +++ b/lib/inets/test/Makefile @@ -215,7 +215,7 @@ INETS_FILES = inets.config $(INETS_SPECS) # inets_tftp_suite INETS_DATADIRS = inets_SUITE_data inets_sup_SUITE_data -HTTPD_DATADIRS = httpd_test_data httpd_SUITE_data +HTTPD_DATADIRS = httpd_test_data httpd_SUITE_data httpd_basic_SUITE_data HTTPC_DATADIRS = httpc_SUITE_data httpc_proxy_SUITE_data FTP_DATADIRS = ftp_SUITE_data diff --git a/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem b/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem index f274d2021d..427447958d 100644 --- a/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem +++ b/lib/inets/test/httpc_SUITE_data/ssl_client_cert.pem @@ -1,22 +1,31 @@ -----BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBANz7eFvORmJDi1XJMM2U3uHC5wmp/DXTLMw08XaEvtZ73wgVg84E -V0oyX3Kh1thRE3Hch9AyrHjgpizCj9/Ra38CAwEAAQJACzpz2SZYCTIpaEh6xFdm -I86FcsZCXHHIeu/NvRntoHQ+nfM7Np379+z6XNJWIcWh/QgG/jNJalR1BO+eyc6/ -YQIhAP3m8M0LDxJwSgHFtGAGatQqaqw9l48Kq5xdMFqvdpiHAiEA3s7lld6yCJYu -6q7fZjTH+eKUwgg0vpgJutP7Fsok60kCIHHesQBEhW3vjkFdOZgXSLH+k/jLZr1w -O6bU5GrHZpjhAiEAyTvGYcjDtTunXjDY9l+fadK6FlEBCk8ZIpNIiTnDhHkCIQDr -QxxLLuNHRj8iWNbuVVZ99SJy8zC33pMgPFaFKaZesQ== +MIICXQIBAAKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSVwC+n +0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53h2Zr +3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwIDAQAB +AoGACdIVYe/LTeydUihtInC8lZ2QuPgJmoBNocRjqJFipEihoL4scHAx25n1bBvB +I0HZphffzBkGp28oBAtl2LRPWXqu527unc/RWRfLMqSK1xNSq1DxD1a30zkrZPna +QiV65vEJuNSJTtlDy/Zqc/BVZXCpxWlzYQedZgkmf0Qse8ECQQCmaz02Yur8zC9f +eSQKU5OSzGw3bSIumEzziCfHdTheK6MEoccf5TCAyLXhZwA7QlKja4tFXfeyVxws +/LlnUJN9AkEA4j+xnOeYUyGKXL5i+BAbnqpI4MzPiq+IoCYkaRlD/wAws24r5HNI +ZQmEHWqD/NNzOf/A2XuyLtMiTGJPW/DftwJBAKKpJP6Ytuh6xz8BUCnLwO12Y7vV +LtjuQiCzD3aUa5EYA9HOMqxJPxxRkf0LyR0i2VUkE8+sZiPpov+R0cJa7p0CQQCj +40GUiArGRSiF7/+e84QeVfl+pb29F1QftiFv5DZmFEwy3Z572KpbTh5edJbxYHY6 +UDHxGHJFCvnwXNJhpkVXAkBJqfEfiMJ3Q/E5Gpf3sQizacouW92iiN8ojlF1oB80 +t34RysJH7SgI3gdMhTribCo2UUaV0StjR6yodPN+TB2J -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIB7jCCAZgCAQAwDQYJKoZIhvcNAQEEBQAwgYExCzAJBgNVBAYTAlNFMRIwEAYD -VQQHEwlTdG9ja2hvbG0xETAPBgNVBAoTCEVyaWNzc29uMQwwCgYDVQQLEwNFVFgx -FjAUBgNVBAMTDUhlbGVuIEFpcml5YW4xJTAjBgkqhkiG9w0BCQEWFmhlbGVuQGVy -aXguZXJpY3Nzb24uc2UwHhcNOTcwNzI4MDcxNDI1WhcNOTgxMjEwMDcxNDI1WjCB -gTELMAkGA1UEBhMCU0UxEjAQBgNVBAcTCVN0b2NraG9sbTERMA8GA1UEChMIRXJp -Y3Nzb24xDDAKBgNVBAsTA0VUWDEWMBQGA1UEAxMNSGVsZW4gQWlyaXlhbjElMCMG -CSqGSIb3DQEJARYWaGVsZW5AZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEB -AQUAA0sAMEgCQQDc+3hbzkZiQ4tVyTDNlN7hwucJqfw10yzMNPF2hL7We98IFYPO -BFdKMl9yodbYURNx3IfQMqx44KYswo/f0Wt/AgMBAAEwDQYJKoZIhvcNAQEEBQAD -QQC2++hLIaQJ4ChCjFE9UCfXO9cZ3Vq/FT9VjE+G4MRBDo4LQ5mBKNXcPF6EFZmi -7XrlvopXkVPlRguTi2SLRPkY +MIIChzCCAfCgAwIBAgIGAIsapa8BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT +BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE +BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD +VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw +MDAwWjB7MQ8wDQYDVQQDEwZjbGllbnQxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl +cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD +VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSV +wC+n0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53 +h2Zr3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwID +AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAG8t6f1A +PF7xayGxtUpG2r6W5ETylC3ZIKPS2kfJk9aYi7AZNTp7/xTU6SgqvFBN8aBPzxCD +4jHrSNC8DSb4X1x9uimarb6qdZDHEdij+DRAd2eygJHZxEf7+8B4Fx34thQeU9hZ +S1Izke5AlsyFMkvB7h0anE4k9BfuU70vl6v5 -----END CERTIFICATE----- diff --git a/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem b/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem index f01b6c992b..4aac86db49 100644 --- a/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem +++ b/lib/inets/test/httpc_SUITE_data/ssl_server_cert.pem @@ -1,22 +1,31 @@ -----BEGIN RSA PRIVATE KEY----- -MIIBOQIBAAJBAMe2WhP6s+JeKOwWPEjI9susfN4Vjn2dd1X4QUlOETcWVLoF916m -M4JU+ms7+ciMR8GRNCsIeqZGY8/GSqm74ccCAwEAAQJAF08YKlbLYfM9cXiS5qfV -7iWemUkIzW5wfC8yZ3zeE4Cp6R9ViUfs/dadQ/23Cw0Bpo2t8UdTUdCa4KpmqOem -cQIhAOnxTWZ5eo6h6PXDp7L5FZUACg8+wT3qf5f2is2mbSZPAiEA2orUY8JZDTSk -Rm7q9WxLiLNtORsXdTCmnCWhqBOYpwkCIErdowRxScxNekz0IT3AQqzdR1rbnWHg -IpcSGhd39CQ3AiA1XvQxjLP8wp9fyBS/bPwhXVhOOuyGpSP7PEF3b5m3KQIgGQWc -/a5wuWx3pc3mLx0ILwNoJr2ubFEuW1PJPsPJPv0= +MIICXQIBAAKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9Adq6 +7k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ4UAt +NHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQIDAQAB +AoGAQIlma0r6W6bcRj4+Wd4fXCFvHuq5Psu1fYEeC5Yvz8761xVjjSfbrDHJZ9pm +FjOEgedK+s5lbDXqYVyjbdyZSugStBRocSmbG8SQHcAsxR2ZIkNzX2hYzB+lslWo +T3YJojDyB134O7XJznCu+ZFXP86jyJ1JT6k6a+OIHcwnJ+ECQQDYn57dY4Px3mEd +VBLStN3YkRF5oFyT+xk7IaKeLLB6n4gCnoVbBoHut7PFbPYPzoNzEwPk3MQKDIHb +Kig3S5CpAkEAvPA1VmoJWAlN6kUi+F2L8HXEArzE8x7vwdsslrwMKUe4dFS+ZC/7 +5iDOaxcZ7TYkCgwzBt341++DCgP6j3fY1QJBALB6AcOcwi52m6l4B8mu3ZkEPjdX +BHTuONTqhv/TqoaLlxODL2NDvvDKqeMp7KBd/srt79swW2lQXS4+fvrlTdkCQQCm +zxj4O1QWkthkfje6ubSkTwUIOatUzrp1F9GNH2dJRtX2dx9FCwxGCC7WY6XzRXqa +GF0wsedSllbGD+82nWQlAkAicMGqCqRq4hKR/cVmFatOqKVWCVkx6OFF2FhuiI5Z +h5eIOPGCt8dVRs1P9DNSld/D98Sfm65m85z8BtXovvYV -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIIB7jCCAZgCAQAwDQYJKoZIhvcNAQEEBQAwgYExCzAJBgNVBAYTAlNFMRIwEAYD -VQQHEwlTdG9ja2hvbG0xETAPBgNVBAoTCEVyaWNzc29uMQwwCgYDVQQLEwNFVFgx -FjAUBgNVBAMTDUhlbGVuIEFpcml5YW4xJTAjBgkqhkiG9w0BCQEWFmhlbGVuQGVy -aXguZXJpY3Nzb24uc2UwHhcNOTcwNzI4MDcyMTAwWhcNOTgxMjEwMDcyMTAwWjCB -gTELMAkGA1UEBhMCU0UxEjAQBgNVBAcTCVN0b2NraG9sbTERMA8GA1UEChMIRXJp -Y3Nzb24xDDAKBgNVBAsTA0VUWDEWMBQGA1UEAxMNSGVsZW4gQWlyaXlhbjElMCMG -CSqGSIb3DQEJARYWaGVsZW5AZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEB -AQUAA0sAMEgCQQDHtloT+rPiXijsFjxIyPbLrHzeFY59nXdV+EFJThE3FlS6Bfde -pjOCVPprO/nIjEfBkTQrCHqmRmPPxkqpu+HHAgMBAAEwDQYJKoZIhvcNAQEEBQAD -QQCnU1TkxmfbLdUwjdECb5x9QHCevAR7AmTms4Csn2oOEyPX+bgF2d94xhrV1sxO -Rs0yigk1PtN17Ci0Dey0LYkR +MIIChzCCAfCgAwIBAgIGANUxXM9BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT +BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE +BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD +VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw +MDAwWjB7MQ8wDQYDVQQDEwZzZXJ2ZXIxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl +cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD +VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9 +Adq67k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ +4UAtNHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQID +AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAGF5Pfwk +QDdwJup/mVITPxbBls4Yl7anDooUQsq8066lA1g54H/PRfXscGkyCFGh1ifXvf1L +psMRoBAdDHL/wSJplk3rRavkC94eBgnTFZmfKL6844g1j53yameiYL8IEVExYMBg +/XGyc0qwq57WT8B/K4aElrvlBlQ0wF3wN54M -----END CERTIFICATE----- diff --git a/lib/inets/test/httpd_SUITE.erl b/lib/inets/test/httpd_SUITE.erl index 1efa78a63e..5dca76b76b 100644 --- a/lib/inets/test/httpd_SUITE.erl +++ b/lib/inets/test/httpd_SUITE.erl @@ -1919,7 +1919,7 @@ ticket_5865(Config) -> " HTTP/1.1\r\nHost:" ++Host++"\r\n\r\n", [{statuscode, 200}, - {no_last_modified, + {no_header, "last-modified"}]), ok; {error, Reason} -> diff --git a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem index 8221139eb4..427447958d 100644 --- a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem +++ b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_client.pem @@ -1,22 +1,31 @@ -----BEGIN RSA PRIVATE KEY----- -MIIBPAIBAAJBAL6Ym/bgUvhhnPkw08sggGg8Tnp759ThGMEjkmDzhuJ3w3PfnF65 -mgHcgunku4G6LxAQfEUougJWf9Phmjj3oRUCAwEAAQJBAKMjvVvzZxFzfAlP4flc -OI0AEayFokp04dtvtzuFN09f+aBo2dP18xHmKLCZvxrBOaRAROoQYscALiIVpN07 -GAECIQDfi+sSfAFaDlT3vzpL3xE5UEH6IzY8jWpaZfM1QaToJQIhANpEF50H4wGO -8Sbh7dUutNd+s+NYUjsMySW2DjLKMsoxAiEAzzb2ftrdsempD0F+O0gZwiPIFKLB -Kp33YLYyHEKuJtUCIDGi+pvDh2R7VWw6RRQOIyI+tjolg83aAoSI+oGiahqBAiEA -xzmNNajwoaokvWvlaz0na8rhxu45grOvDrflBT9XvSQ= +MIICXQIBAAKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSVwC+n +0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53h2Zr +3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwIDAQAB +AoGACdIVYe/LTeydUihtInC8lZ2QuPgJmoBNocRjqJFipEihoL4scHAx25n1bBvB +I0HZphffzBkGp28oBAtl2LRPWXqu527unc/RWRfLMqSK1xNSq1DxD1a30zkrZPna +QiV65vEJuNSJTtlDy/Zqc/BVZXCpxWlzYQedZgkmf0Qse8ECQQCmaz02Yur8zC9f +eSQKU5OSzGw3bSIumEzziCfHdTheK6MEoccf5TCAyLXhZwA7QlKja4tFXfeyVxws +/LlnUJN9AkEA4j+xnOeYUyGKXL5i+BAbnqpI4MzPiq+IoCYkaRlD/wAws24r5HNI +ZQmEHWqD/NNzOf/A2XuyLtMiTGJPW/DftwJBAKKpJP6Ytuh6xz8BUCnLwO12Y7vV +LtjuQiCzD3aUa5EYA9HOMqxJPxxRkf0LyR0i2VUkE8+sZiPpov+R0cJa7p0CQQCj +40GUiArGRSiF7/+e84QeVfl+pb29F1QftiFv5DZmFEwy3Z572KpbTh5edJbxYHY6 +UDHxGHJFCvnwXNJhpkVXAkBJqfEfiMJ3Q/E5Gpf3sQizacouW92iiN8ojlF1oB80 +t34RysJH7SgI3gdMhTribCo2UUaV0StjR6yodPN+TB2J -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIICDDCCAbYCAQAwDQYJKoZIhvcNAQEEBQAwgZAxCzAJBgNVBAYTAlNFMRIwEAYD -VQQIEwlTdG9ja2hvbG0xDzANBgNVBAcTBkFsdnNqbzEMMAoGA1UEChMDRVRYMQ4w -DAYDVQQLEwVETi9TUDEXMBUGA1UEAxMOSm9ha2ltIEdyZWJlbm8xJTAjBgkqhkiG -9w0BCQEWFmpvY2tlQGVyaXguZXJpY3Nzb24uc2UwHhcNOTcwNzE1MTUzNDM2WhcN -MDMwMjIyMTUzNDM2WjCBkDELMAkGA1UEBhMCU0UxEjAQBgNVBAgTCVN0b2NraG9s -bTEPMA0GA1UEBxMGQWx2c2pvMQwwCgYDVQQKEwNFVFgxDjAMBgNVBAsTBUROL1NQ -MRcwFQYDVQQDEw5Kb2FraW0gR3JlYmVubzElMCMGCSqGSIb3DQEJARYWam9ja2VA -ZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC+mJv24FL4 -YZz5MNPLIIBoPE56e+fU4RjBI5Jg84bid8Nz35xeuZoB3ILp5LuBui8QEHxFKLoC -Vn/T4Zo496EVAgMBAAEwDQYJKoZIhvcNAQEEBQADQQBYxQVfTydyZCE0UXvZd7Ei -josNsAaWJk9fFIJaG9uyXCEfg2dVgoT2eBk3D9DI+7OB+78isM5CVlFbL7hilvP8 +MIIChzCCAfCgAwIBAgIGAIsapa8BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT +BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE +BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD +VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw +MDAwWjB7MQ8wDQYDVQQDEwZjbGllbnQxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl +cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD +VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCTFBPkOO98fDY3j6MIxIGKp+rampfIay50Lx4+EnCnRSSV +wC+n0VVmP7V5SGFJpuXJzN0hvqPUWOOjiMTNlNRaGy0pqu2oMXWAPLOxHWL1wT53 +h2Zr3FUNU/N0Rvnkttse1KZJ9uYCLKUiuXXsv2rR62nH3OhRIiBHSAcSv0NRWwID +AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAG8t6f1A +PF7xayGxtUpG2r6W5ETylC3ZIKPS2kfJk9aYi7AZNTp7/xTU6SgqvFBN8aBPzxCD +4jHrSNC8DSb4X1x9uimarb6qdZDHEdij+DRAd2eygJHZxEf7+8B4Fx34thQeU9hZ +S1Izke5AlsyFMkvB7h0anE4k9BfuU70vl6v5 -----END CERTIFICATE----- diff --git a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem index fe739c15f7..4aac86db49 100644 --- a/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem +++ b/lib/inets/test/httpd_SUITE_data/server_root/ssl/ssl_server.pem @@ -1,22 +1,31 @@ -----BEGIN RSA PRIVATE KEY----- -MIIBOwIBAAJBAL9Bozj3BIjL5Cy8b3rjMT2kPZRychX4wz9bHoIIiKnKo1xXHYjw -g3N9zWM1f1ZzMADwVry1uAInA8q09+7hL20CAwEAAQJACwu2ao7RozjrV64WXimK -6X131P/7GMvCMwGHNIlbozqoOqmZcYrbKaF61l+XuwA2QvTo3ywW1Ivxcyr6TeAr -PQIhAOX+WXT6yiqqwjt08kjBCJyMgfZtdAO6pc/6pKjNWiZfAiEA1OH1iPW/OQe5 -tlQXpiRVdLyneNsPygPRJc4Bdwu3hbMCIQDbI5pA56QxOzqOREOGJsb5wrciAfAE -jZbnr72sSN2YqQIgAWFpvzagw9Tp/mWzNY+cwkIK7/yzsIKv04fveH8p9IMCIQCr -td4IiukeUwXmPSvYM4uCE/+J89wEL9qU8Mlc3gDLXA== +MIICXQIBAAKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9Adq6 +7k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ4UAt +NHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQIDAQAB +AoGAQIlma0r6W6bcRj4+Wd4fXCFvHuq5Psu1fYEeC5Yvz8761xVjjSfbrDHJZ9pm +FjOEgedK+s5lbDXqYVyjbdyZSugStBRocSmbG8SQHcAsxR2ZIkNzX2hYzB+lslWo +T3YJojDyB134O7XJznCu+ZFXP86jyJ1JT6k6a+OIHcwnJ+ECQQDYn57dY4Px3mEd +VBLStN3YkRF5oFyT+xk7IaKeLLB6n4gCnoVbBoHut7PFbPYPzoNzEwPk3MQKDIHb +Kig3S5CpAkEAvPA1VmoJWAlN6kUi+F2L8HXEArzE8x7vwdsslrwMKUe4dFS+ZC/7 +5iDOaxcZ7TYkCgwzBt341++DCgP6j3fY1QJBALB6AcOcwi52m6l4B8mu3ZkEPjdX +BHTuONTqhv/TqoaLlxODL2NDvvDKqeMp7KBd/srt79swW2lQXS4+fvrlTdkCQQCm +zxj4O1QWkthkfje6ubSkTwUIOatUzrp1F9GNH2dJRtX2dx9FCwxGCC7WY6XzRXqa +GF0wsedSllbGD+82nWQlAkAicMGqCqRq4hKR/cVmFatOqKVWCVkx6OFF2FhuiI5Z +h5eIOPGCt8dVRs1P9DNSld/D98Sfm65m85z8BtXovvYV -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- -MIICDDCCAbYCAQAwDQYJKoZIhvcNAQEEBQAwgZAxCzAJBgNVBAYTAlNFMRIwEAYD -VQQIEwlTdG9ja2hvbG0xDzANBgNVBAcTBkFsdnNqbzEMMAoGA1UEChMDRVRYMQ4w -DAYDVQQLEwVETi9TUDEXMBUGA1UEAxMOSm9ha2ltIEdyZWJlbm8xJTAjBgkqhkiG -9w0BCQEWFmpvY2tlQGVyaXguZXJpY3Nzb24uc2UwHhcNOTcwNzE1MTUzMzQxWhcN -MDMwMjIyMTUzMzQxWjCBkDELMAkGA1UEBhMCU0UxEjAQBgNVBAgTCVN0b2NraG9s -bTEPMA0GA1UEBxMGQWx2c2pvMQwwCgYDVQQKEwNFVFgxDjAMBgNVBAsTBUROL1NQ -MRcwFQYDVQQDEw5Kb2FraW0gR3JlYmVubzElMCMGCSqGSIb3DQEJARYWam9ja2VA -ZXJpeC5lcmljc3Nvbi5zZTBcMA0GCSqGSIb3DQEBAQUAA0sAMEgCQQC/QaM49wSI -y+QsvG964zE9pD2UcnIV+MM/Wx6CCIipyqNcVx2I8INzfc1jNX9WczAA8Fa8tbgC -JwPKtPfu4S9tAgMBAAEwDQYJKoZIhvcNAQEEBQADQQAmXDY1CyJjzvQZX442kkHG -ic9QFY1UuVfzokzNMwlHYl1Qx9zaodx0cJCrcH5GF9O9LJbhhV77LzoxT1Q5wZp5 +MIIChzCCAfCgAwIBAgIGANUxXM9BMA0GCSqGSIb3DQEBBQUAMHoxDjAMBgNVBAMT +BW90cENBMSAwHgYJKoZIhvcNAQkBFhF0ZXN0ZXJAZXJsYW5nLm9yZzESMBAGA1UE +BxMJU3RvY2tob2xtMQswCQYDVQQGEwJTRTEPMA0GA1UEChMGZXJsYW5nMRQwEgYD +VQQLEwt0ZXN0aW5nIGRlcDAiGA8yMDEwMDkwMTAwMDAwMFoYDzIwMjUwODI4MDAw +MDAwWjB7MQ8wDQYDVQQDEwZzZXJ2ZXIxIDAeBgkqhkiG9w0BCQEWEXRlc3RlckBl +cmxhbmcub3JnMRIwEAYDVQQHEwlTdG9ja2hvbG0xCzAJBgNVBAYTAlNFMQ8wDQYD +VQQKEwZlcmxhbmcxFDASBgNVBAsTC3Rlc3RpbmcgZGVwMIGfMA0GCSqGSIb3DQEB +AQUAA4GNADCBiQKBgQCf4Htxr99lLs5W8QQw7jdakqyAkIjOW4aqH8sr4va4SvZ9 +Adq67k8jMHefCVZo+F8x4cwsBgB4aWzFIGBnvFTi6YsH27XW7f9O9IPCej8fdhRZ +4UAtNHa253buOWpDGla2JmIdkmfFvXFJycMIKbG5tYilVXoWKBMKmCwWaXz0nQID +AQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAGF5Pfwk +QDdwJup/mVITPxbBls4Yl7anDooUQsq8066lA1g54H/PRfXscGkyCFGh1ifXvf1L +psMRoBAdDHL/wSJplk3rRavkC94eBgnTFZmfKL6844g1j53yameiYL8IEVExYMBg +/XGyc0qwq57WT8B/K4aElrvlBlQ0wF3wN54M -----END CERTIFICATE----- diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl index 523cf9d38c..b1fe373cff 100644 --- a/lib/inets/test/httpd_basic_SUITE.erl +++ b/lib/inets/test/httpd_basic_SUITE.erl @@ -19,6 +19,7 @@ %% -module(httpd_basic_SUITE). +-include_lib("kernel/include/file.hrl"). -include_lib("common_test/include/ct.hrl"). -include("inets_test_lib.hrl"). @@ -33,7 +34,9 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [ uri_too_long_414, - header_too_long_413, + header_too_long_413, + erl_script_nocache_opt, + script_nocache, escaped_url_in_error_body, slowdose ]. @@ -62,6 +65,7 @@ init_per_suite(Config) -> "~n Config: ~p", [Config]), ok = inets:start(), PrivDir = ?config(priv_dir, Config), + DataDir = ?config(data_dir, Config), Dummy = "<HTML> @@ -74,6 +78,18 @@ DUMMY </HTML>", DummyFile = filename:join([PrivDir,"dummy.html"]), + CgiDir = filename:join(PrivDir, "cgi-bin"), + ok = file:make_dir(CgiDir), + Cgi = case test_server:os_type() of + {win32, _} -> + "printenv.bat"; + _ -> + "printenv.sh" + end, + inets_test_lib:copy_file(Cgi, DataDir, CgiDir), + AbsCgi = filename:join([CgiDir, Cgi]), + {ok, FileInfo} = file:read_file_info(AbsCgi), + ok = file:write_file_info(AbsCgi, FileInfo#file_info{mode = 8#00755}), {ok, Fd} = file:open(DummyFile, [write]), ok = file:write(Fd, Dummy), ok = file:close(Fd), @@ -84,7 +100,7 @@ DUMMY {document_root, PrivDir}, {bind_address, "localhost"}], - [{httpd_conf, HttpdConf} | Config]. + [{httpd_conf, HttpdConf}, {cgi_dir, CgiDir}, {cgi_script, Cgi} | Config]. %%-------------------------------------------------------------------- %% Function: end_per_suite(Config) -> _ @@ -178,6 +194,74 @@ header_too_long_413(Config) when is_list(Config) -> {version, "HTTP/1.1"}]), inets:stop(httpd, Pid). +%%------------------------------------------------------------------------- +%%------------------------------------------------------------------------- + +erl_script_nocache_opt(doc) -> + ["Test that too long headers's get 413 HTTP code"]; +erl_script_nocache_opt(suite) -> + []; +erl_script_nocache_opt(Config) when is_list(Config) -> + HttpdConf = ?config(httpd_conf, Config), + {ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]), + Info = httpd:info(Pid), + Port = proplists:get_value(port, Info), + _Address = proplists:get_value(bind_address, Info), + URL1 = ?URL_START ++ integer_to_list(Port), + case httpc:request(get, {URL1 ++ "/dummy.html", []}, + [{url_encode, false}, + {version, "HTTP/1.0"}], + [{full_result, false}]) of + {ok, {200, _}} -> + ok + end, + inets:stop(httpd, Pid). + +%%------------------------------------------------------------------------- +%%------------------------------------------------------------------------- + +script_nocache(doc) -> + ["Test nocache option for mod_cgi and mod_esi"]; +script_nocache(suite) -> + []; +script_nocache(Config) when is_list(Config) -> + Normal = {no_header, "cache-control"}, + NoCache = {header, "cache-control", "no-cache"}, + verify_script_nocache(Config, false, false, Normal, Normal), + verify_script_nocache(Config, true, false, NoCache, Normal), + verify_script_nocache(Config, false, true, Normal, NoCache), + verify_script_nocache(Config, true, true, NoCache, NoCache), + ok. + +verify_script_nocache(Config, CgiNoCache, EsiNoCache, CgiOption, EsiOption) -> + HttpdConf = ?config(httpd_conf, Config), + CgiScript = ?config(cgi_script, Config), + CgiDir = ?config(cgi_dir, Config), + {ok, Pid} = inets:start(httpd, [{port, 0}, + {script_alias, + {"/cgi-bin/", CgiDir ++ "/"}}, + {script_nocache, CgiNoCache}, + {erl_script_alias, + {"/cgi-bin/erl", [httpd_example,io]}}, + {erl_script_nocache, EsiNoCache} + | HttpdConf]), + Info = httpd:info(Pid), + Port = proplists:get_value(port, Info), + Address = proplists:get_value(bind_address, Info), + ok = httpd_test_lib:verify_request(ip_comm, Address, Port, node(), + "GET /cgi-bin/" ++ CgiScript ++ + " HTTP/1.0\r\n\r\n", + [{statuscode, 200}, + CgiOption, + {version, "HTTP/1.0"}]), + ok = httpd_test_lib:verify_request(ip_comm, Address, Port, node(), + "GET /cgi-bin/erl/httpd_example:get " + "HTTP/1.0\r\n\r\n", + [{statuscode, 200}, + EsiOption, + {version, "HTTP/1.0"}]), + inets:stop(httpd, Pid). + %%------------------------------------------------------------------------- %%------------------------------------------------------------------------- diff --git a/lib/inets/test/httpd_basic_SUITE_data/printenv.bat b/lib/inets/test/httpd_basic_SUITE_data/printenv.bat new file mode 120000 index 0000000000..1bc8e52059 --- /dev/null +++ b/lib/inets/test/httpd_basic_SUITE_data/printenv.bat @@ -0,0 +1 @@ +../httpd_SUITE_data/server_root/cgi-bin/printenv.bat
\ No newline at end of file diff --git a/lib/inets/test/httpd_basic_SUITE_data/printenv.sh b/lib/inets/test/httpd_basic_SUITE_data/printenv.sh new file mode 120000 index 0000000000..0136a3fa23 --- /dev/null +++ b/lib/inets/test/httpd_basic_SUITE_data/printenv.sh @@ -0,0 +1 @@ +../httpd_SUITE_data/server_root/cgi-bin/printenv.sh
\ No newline at end of file diff --git a/lib/inets/test/httpd_mod.erl b/lib/inets/test/httpd_mod.erl index df4ed6b179..7d3326fb65 100644 --- a/lib/inets/test/httpd_mod.erl +++ b/lib/inets/test/httpd_mod.erl @@ -842,6 +842,14 @@ cgi(Type, Port, Host, Node) -> {version, "HTTP/1.0"}]), %% tsp("cgi -> done"), + + %% Check "ScriptNoCache" directive (default: false) + ok = httpd_test_lib:verify_request(Type, Host, Port, Node, + "GET /cgi-bin/" ++ Script ++ + " HTTP/1.0\r\n\r\n", + [{statuscode, 200}, + {no_header, "cache-control"}, + {version, "HTTP/1.0"}]), ok. @@ -899,6 +907,13 @@ esi(Type, Port, Host, Node) -> " HTTP/1.0\r\n\r\n", [{statuscode, 302}, {version, "HTTP/1.0"}]), + %% Check "ErlScriptNoCache" directive (default: false) + ok = httpd_test_lib:verify_request(Type, Host, Port, Node, + "GET /cgi-bin/erl/httpd_example:get" + " HTTP/1.0\r\n\r\n", + [{statuscode, 200}, + {no_header, "cache-control"}, + {version, "HTTP/1.0"}]), ok. diff --git a/lib/inets/test/httpd_test_lib.erl b/lib/inets/test/httpd_test_lib.erl index 13584c50f6..3e82324a30 100644 --- a/lib/inets/test/httpd_test_lib.erl +++ b/lib/inets/test/httpd_test_lib.erl @@ -361,7 +361,7 @@ do_validate(Header, [{header, HeaderField, Value}|Rest],N,P) -> tsf({wrong_header_field_value, LowerHeaderField, Header}) end, do_validate(Header, Rest, N, P); -do_validate(Header,[{no_last_modified, HeaderField}|Rest],N,P) -> +do_validate(Header,[{no_header, HeaderField}|Rest],N,P) -> case lists:keysearch(HeaderField,1,Header) of {value,_} -> tsf({wrong_header_field_value, HeaderField, Header}); diff --git a/lib/jinterface/test/Makefile b/lib/jinterface/test/Makefile index d9ff406994..90d4e01035 100644 --- a/lib/jinterface/test/Makefile +++ b/lib/jinterface/test/Makefile @@ -32,7 +32,7 @@ RELSYSDIR = $(RELEASE_PATH)/jinterface_test # ---------------------------------------------------- # Target Specs # ---------------------------------------------------- -TEST_SPEC_FILE = jinterface.spec +TEST_SPEC_FILE = jinterface.spec jinterface_smoke.spec COVER_FILE = jinterface.cover MODULES = nc_SUITE \ diff --git a/lib/jinterface/test/jinterface_smoke.spec b/lib/jinterface/test/jinterface_smoke.spec new file mode 100644 index 0000000000..4a76cce4cd --- /dev/null +++ b/lib/jinterface/test/jinterface_smoke.spec @@ -0,0 +1 @@ +{cases,"../jinterface_test",jinterface_SUITE,[java_erlang_send_receive]}. diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml index 362c373c6c..3909b11e59 100644 --- a/lib/kernel/doc/src/application.xml +++ b/lib/kernel/doc/src/application.xml @@ -253,15 +253,30 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code> </warning> </desc> </func> - <func> + <func> <name name="ensure_started" arity="1"/> <name name="ensure_started" arity="2"/> <fsummary>Load and start an application</fsummary> - <desc> - <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except - it returns <c>ok</c> for already started applications.</p> - </desc> - </func> + <desc> + <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except + it returns <c>ok</c> for already started applications.</p> + </desc> + </func> + <func> + <name name="ensure_all_started" arity="1"/> + <name name="ensure_all_started" arity="2"/> + <fsummary>Load and start an application and its dependencies, recursively</fsummary> + <desc> + <p>Equivalent to calling <seealso marker="#start/2"><c>application:start/1,2</c></seealso> + repeatedly on all dependencies that have not yet been started for an application. + The function returns <c>{ok, AppNames}</c> for a successful start or for an already started + application (which are however omitted from the <c>AppNames</c> list), and reports + <c>{error, {AppName,Reason}}</c> for errors, where <c>Reason</c> is any possible reason + returned by <seealso marker="#start/2"><c>application:start/1,2</c></seealso> when starting a + specific dependency. In case of an error, the applications that were started by the + function are stopped to bring the set of running applications back to its initial state.</p> + </desc> + </func> <func> <name name="start" arity="1"/> <name name="start" arity="2"/> diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml index 7cd98914d1..fd62f778a2 100644 --- a/lib/kernel/doc/src/inet.xml +++ b/lib/kernel/doc/src/inet.xml @@ -76,11 +76,11 @@ FFFF::192.168.42.2 {16#3ffe,16#b80,16#1f8d,16#2,16#204,16#acff,16#fe17,16#bf38} fe80::204:acff:fe17:bf38 {16#fe80,0,0,0,0,16#204,16#acff,16#fe17,16#bf38}</code> - <p>A function that may be useful is <c>inet_parse:address/1</c>:</p> + <p>A function that may be useful is <seealso marker="#parse_address/1">parse_address/1</seealso>:</p> <pre> -1> <input>inet_parse:address("192.168.42.2").</input> +1> <input>inet:parse_address("192.168.42.2").</input> {ok,{192,168,42,2}} -2> <input>inet_parse:address("FFFF::192.168.42.2").</input> +2> <input>inet:parse_address("FFFF::192.168.42.2").</input> {ok,{65535,0,0,0,0,0,49320,10754}}</pre> </description> @@ -375,6 +375,13 @@ fe80::204:acff:fe17:bf38 </desc> </func> <func> + <name name="ntoa" arity="1" /> + <fsummary>Convert IPv6 / IPV4 adress to ascii</fsummary> + <desc> + <p>Parses an <a href="#type-ip_address">ip_address()</a> and returns an IPv4 or IPv6 address string.</p> + </desc> + </func> + <func> <name name="parse_ipv4_address" arity="1" /> <fsummary>Parse an IPv4 address</fsummary> <desc> @@ -715,6 +722,59 @@ fe80::204:acff:fe17:bf38 <p>Received <c>Packet</c> is delivered as defined by Mode.</p> </item> + <tag><c>{netns, Namespace :: file:filename_all()}</c></tag> + <item> + <p>Set a network namespace for the socket. The <c>Namespace</c> + parameter is a filename defining the namespace for example + <c>"/var/run/netns/example"</c> typically created by the command + <c>ip netns add example</c>. This option must be used in a + function call that creates a socket i.e + <seealso marker="gen_tcp#connect/3"> + gen_tcp:connect/3,4</seealso>, + <seealso marker="gen_tcp#listen/2"> + gen_tcp:listen/2</seealso>, + <seealso marker="gen_udp#open/1"> + gen_udp:open/1,2</seealso> or + <seealso marker="gen_sctp#open/0"> + gen_sctp:open/0-2</seealso>. + </p> + <p>This option uses the Linux specific syscall + <c>setns()</c> such as in Linux kernel 3.0 or later + and therefore only exists when the runtime system + has been compiled for such an operating system. + </p> + <p> + The virtual machine also needs elevated privileges either + running as superuser or (for Linux) having the capability + <c>CAP_SYS_ADMIN</c> according to the documentation for setns(2). + However, during testing also <c>CAP_SYS_PTRACE</c> + and <c>CAP_DAC_READ_SEARCH</c> has proven to be necessary. + Example:<code> +setcap cap_sys_admin,cap_sys_ptrace,cap_dac_read_search+epi beam.smp +</code> + Note also that the filesystem containing the virtual machine + executable (<c>beam.smp</c> in the example above) has to be local, + mounted without the <c>nosetuid</c> flag, + support extended attributes and that + the kernel has to support file capabilities. + All this runs out of the box on at least Ubuntu 12.04 LTS, + except that SCTP sockets appears to not support + network namespaces. + </p> + <p>The <c>Namespace</c> is a file name and is encoded + and decoded as discussed in + <seealso marker="file">file</seealso> + except that the emulator flag <c>+fnu</c> is ignored and + <seealso marker="#getopts/2">getopts/2</seealso> + for this option will return a binary for the filename + if the stored filename can not be decoded, + which should only happen if you set the option using a binary + that can not be decoded with the emulator's filename encoding: + <seealso marker="file#native_name_encoding/0"> + file:native_name_encoding/0</seealso>. + </p> + </item> + <tag><c>list</c></tag> <item> <p>Received <c>Packet</c> is delivered as a list.</p> diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl index 5dd6b73857..4e8ba1b78a 100644 --- a/lib/kernel/src/application.erl +++ b/lib/kernel/src/application.erl @@ -18,7 +18,8 @@ %% -module(application). --export([start/1, start/2, start_boot/1, start_boot/2, stop/1, +-export([ensure_all_started/1, ensure_all_started/2, start/1, start/2, + start_boot/1, start_boot/2, stop/1, load/1, load/2, unload/1, takeover/2, which_applications/0, which_applications/1, loaded_applications/0, permit/2]). @@ -113,6 +114,46 @@ load1(Application, DistNodes) -> unload(Application) -> application_controller:unload_application(Application). + +-spec ensure_all_started(Application) -> {'ok', Started} | {'error', Reason} when + Application :: atom(), + Started :: [atom()], + Reason :: term(). +ensure_all_started(Application) -> + ensure_all_started(Application, temporary). + +-spec ensure_all_started(Application, Type) -> {'ok', Started} | {'error', Reason} when + Application :: atom(), + Type :: restart_type(), + Started :: [atom()], + Reason :: term(). +ensure_all_started(Application, Type) -> + case ensure_all_started(Application, Type, []) of + {ok, Started} -> + {ok, lists:reverse(Started)}; + {error, Reason, Started} -> + [stop(App) || App <- Started], + {error, Reason} + end. + +ensure_all_started(Application, Type, Started) -> + case start(Application, Type) of + ok -> + {ok, [Application | Started]}; + {error, {already_started, Application}} -> + {ok, Started}; + {error, {not_started, Dependency}} -> + case ensure_all_started(Dependency, Type, Started) of + {ok, NewStarted} -> + ensure_all_started(Application, Type, NewStarted); + Error -> + Error + end; + {error, Reason} -> + {error, {Application, Reason}, Started} + end. + + -spec start(Application) -> 'ok' | {'error', Reason} when Application :: atom(), Reason :: term(). diff --git a/lib/kernel/src/hipe_unified_loader.erl b/lib/kernel/src/hipe_unified_loader.erl index e676ca997d..0a0e6003ee 100644 --- a/lib/kernel/src/hipe_unified_loader.erl +++ b/lib/kernel/src/hipe_unified_loader.erl @@ -85,7 +85,7 @@ chunk_name(Architecture) -> %%======================================================================== -spec load_native_code(Mod, binary()) -> 'no_native' | {'module', Mod} - when is_subtype(Mod, atom()). + when Mod :: atom(). %% @doc %% Loads the native code of a module Mod. %% Returns {module,Mod} on success (for compatibility with @@ -148,8 +148,8 @@ version_check(Version, Mod) when is_atom(Mod) -> %%======================================================================== --spec load_module(Mod, binary(), _) -> 'bad_crc' | {'module',Mod} - when is_subtype(Mod,atom()). +-spec load_module(Mod, binary(), _) -> 'bad_crc' | {'module', Mod} + when Mod :: atom(). load_module(Mod, Bin, Beam) -> erlang:system_flag(multi_scheduling, block), try @@ -169,8 +169,8 @@ load_module(Mod, Bin, Beam, OldReferencesToPatch) -> %%======================================================================== --spec load(Mod, binary()) -> 'bad_crc' | {'module',Mod} - when is_subtype(Mod,atom()). +-spec load(Mod, binary()) -> 'bad_crc' | {'module', Mod} when Mod :: atom(). + load(Mod, Bin) -> erlang:system_flag(multi_scheduling, block), try @@ -204,15 +204,17 @@ load_common(Mod, Bin, Beam, OldReferencesToPatch) -> bad_crc; true -> %% Create data segment - {ConstAddr,ConstMap2} = create_data_segment(ConstAlign, ConstSize, ConstMap), + {ConstAddr,ConstMap2} = + create_data_segment(ConstAlign, ConstSize, ConstMap), %% Find callees for which we may need trampolines. CalleeMFAs = find_callee_mfas(Refs), %% Write the code to memory. - {CodeAddress,Trampolines} = enter_code(CodeSize, CodeBinary, CalleeMFAs, Mod, Beam), + {CodeAddress,Trampolines} = + enter_code(CodeSize, CodeBinary, CalleeMFAs, Mod, Beam), %% Construct CalleeMFA-to-trampoline mapping. TrampolineMap = mk_trampoline_map(CalleeMFAs, Trampolines), %% Patch references to code labels in data seg. - patch_consts(LabelMap, ConstAddr, CodeAddress), + ok = patch_consts(LabelMap, ConstAddr, CodeAddress), %% Find out which functions are being loaded (and where). %% Note: Addresses are sorted descending. {MFAs,Addresses} = exports(ExportMap, CodeAddress), @@ -221,7 +223,7 @@ load_common(Mod, Bin, Beam, OldReferencesToPatch) -> ok = remove_refs_from(MFAs), %% Patch all dynamic references in the code. %% Function calls, Atoms, Constants, System calls - patch(Refs, CodeAddress, ConstMap2, Addresses, TrampolineMap), + ok = patch(Refs, CodeAddress, ConstMap2, Addresses, TrampolineMap), %% Tell the system where the loaded funs are. %% (patches the BEAM code to redirect to native.) case Beam of @@ -322,7 +324,7 @@ trampoline_map_get(MFA, Map) -> gb_trees:get(MFA, Map). trampoline_map_lookup(_, []) -> []; % archs not using trampolines trampoline_map_lookup(Primop, Map) -> case gb_trees:lookup(Primop, Map) of - {value,X} -> X; + {value, X} -> X; _ -> [] end. @@ -369,7 +371,7 @@ offsets_to_addresses(Os, Base) -> find_closure_patches([{Type,Refs} | Rest]) -> case ?EXT2PATCH_TYPE(Type) of load_address -> - find_closure_refs(Refs,Rest); + find_closure_refs(Refs, Rest); _ -> find_closure_patches(Rest) end; @@ -404,16 +406,17 @@ export_funs([FunDef | Addresses]) -> hipe_bifs:set_native_address(MFA, Address, IsClosure), export_funs(Addresses); export_funs([]) -> - true. + ok. export_funs(Mod, Beam, Addresses, ClosuresToPatch) -> - Fs = [{F,A,Address} || #fundef{address=Address, mfa={_M,F,A}} <- Addresses], - code:make_stub_module(Mod, Beam, {Fs,ClosuresToPatch}). + Fs = [{F,A,Address} || #fundef{address=Address, mfa={_M,F,A}} <- Addresses], + Mod = code:make_stub_module(Mod, Beam, {Fs,ClosuresToPatch}), + ok. %%======================================================================== %% Patching %% @spec patch(refs(), BaseAddress::integer(), ConstAndZone::term(), -%% Addresses::term(), TrampolineMap::term()) -> term() +%% Addresses::term(), TrampolineMap::term()) -> 'ok'. %% @type refs()=[{RefType::integer(), Reflist::reflist()} | refs()] %% %% @type reflist()= [{Data::term(), Offsets::offests()}|reflist()] @@ -426,7 +429,7 @@ export_funs(Mod, Beam, Addresses, ClosuresToPatch) -> %% patch([{Type,SortedRefs}|Rest], CodeAddress, ConstMap2, Addresses, TrampolineMap) -> - ?debug_msg("Patching ~w at [~w+offset] with ~w\n", + ?debug_msg("Patching ~w at [~w+offset] with ~w\n", [Type,CodeAddress,SortedRefs]), case ?EXT2PATCH_TYPE(Type) of call_local -> @@ -437,7 +440,7 @@ patch([{Type,SortedRefs}|Rest], CodeAddress, ConstMap2, Addresses, TrampolineMap patch_all(Other, SortedRefs, CodeAddress, {ConstMap2,CodeAddress}, Addresses) end, patch(Rest, CodeAddress, ConstMap2, Addresses, TrampolineMap); -patch([], _, _, _, _) -> true. +patch([], _, _, _, _) -> ok. %%---------------------------------------------------------------- %% Handle a 'call_local' or 'call_remote' patch. @@ -459,14 +462,14 @@ patch_call([{DestMFA,Offsets}|SortedRefs], BaseAddress, Addresses, RemoteOrLocal end, patch_call(SortedRefs, BaseAddress, Addresses, RemoteOrLocal, TrampolineMap); patch_call([], _, _, _, _) -> - true. + ok. patch_bif_call_list([Offset|Offsets], BaseAddress, BifAddress, Trampoline) -> CallAddress = BaseAddress+Offset, ?ASSERT(assert_local_patch(CallAddress)), patch_call_insn(CallAddress, BifAddress, Trampoline), patch_bif_call_list(Offsets, BaseAddress, BifAddress, Trampoline); -patch_bif_call_list([], _, _, _) -> []. +patch_bif_call_list([], _, _, _) -> ok. patch_mfa_call_list([Offset|Offsets], BaseAddress, DestMFA, DestAddress, Addresses, RemoteOrLocal, Trampoline) -> CallAddress = BaseAddress+Offset, @@ -474,7 +477,7 @@ patch_mfa_call_list([Offset|Offsets], BaseAddress, DestMFA, DestAddress, Address ?ASSERT(assert_local_patch(CallAddress)), patch_call_insn(CallAddress, DestAddress, Trampoline), patch_mfa_call_list(Offsets, BaseAddress, DestMFA, DestAddress, Addresses, RemoteOrLocal, Trampoline); -patch_mfa_call_list([], _, _, _, _, _, _) -> []. +patch_mfa_call_list([], _, _, _, _, _, _) -> ok. patch_call_insn(CallAddress, DestAddress, Trampoline) -> %% This assertion is false when we're called from redirect/2. @@ -487,7 +490,7 @@ patch_call_insn(CallAddress, DestAddress, Trampoline) -> patch_all(Type, [{Dest,Offsets}|Rest], BaseAddress, ConstAndZone, Addresses)-> patch_all_offsets(Type, Dest, Offsets, BaseAddress, ConstAndZone, Addresses), patch_all(Type, Rest, BaseAddress, ConstAndZone, Addresses); -patch_all(_, [], _, _, _) -> true. +patch_all(_, [], _, _, _) -> ok. patch_all_offsets(Type, Data, [Offset|Offsets], BaseAddress, ConstAndZone, Addresses) -> @@ -497,7 +500,7 @@ patch_all_offsets(Type, Data, [Offset|Offsets], BaseAddress, patch_offset(Type, Data, Address, ConstAndZone, Addresses), ?debug_msg("Patching done\n",[]), patch_all_offsets(Type, Data, Offsets, BaseAddress, ConstAndZone, Addresses); -patch_all_offsets(_, _, [], _, _, _) -> true. +patch_all_offsets(_, _, [], _, _, _) -> ok. %%---------------------------------------------------------------- %% Handle any patch type except 'call_local' or 'call_remote'. diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl index 3ea530a366..27f085c3aa 100644 --- a/lib/kernel/src/inet.erl +++ b/lib/kernel/src/inet.erl @@ -32,7 +32,7 @@ ip/1, stats/0, options/0, pushf/3, popf/1, close/1, gethostname/0, gethostname/1, parse_ipv4_address/1, parse_ipv6_address/1, parse_ipv4strict_address/1, - parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1]). + parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]). -export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]). @@ -200,7 +200,14 @@ send(Socket, Packet) -> Options :: [socket_setopt()]. setopts(Socket, Opts) -> - prim_inet:setopts(Socket, Opts). + SocketOpts = + [case Opt of + {netns,NS} -> + {netns,filename2binary(NS)}; + _ -> + Opt + end || Opt <- Opts], + prim_inet:setopts(Socket, SocketOpts). -spec getopts(Socket, Options) -> {'ok', OptionValues} | {'error', posix()} when @@ -209,7 +216,18 @@ setopts(Socket, Opts) -> OptionValues :: [socket_setopt()]. getopts(Socket, Opts) -> - prim_inet:getopts(Socket, Opts). + case prim_inet:getopts(Socket, Opts) of + {ok,OptionValues} -> + {ok, + [case OptionValue of + {netns,Bin} -> + {netns,binary2filename(Bin)}; + _ -> + OptionValue + end || OptionValue <- OptionValues]}; + Other -> + Other + end. -spec getifaddrs(Socket :: socket()) -> {'ok', [string()]} | {'error', posix()}. @@ -529,6 +547,13 @@ getservbyname(Name, Protocol) when is_atom(Name) -> Error -> Error end. +-spec ntoa(IpAddress) -> + {ok, Address} | {error, einval} when + Address :: string(), + IpAddress :: ip_address(). +ntoa(Addr) -> + inet_parse:ntoa(Addr). + -spec parse_ipv4_address(Address) -> {ok, IPv4Address} | {error, einval} when Address :: string(), @@ -634,6 +659,14 @@ con_opt([Opt | Opts], R, As) -> {tcp_module,_} -> con_opt(Opts, R, As); inet -> con_opt(Opts, R, As); inet6 -> con_opt(Opts, R, As); + {netns,NS} -> + BinNS = filename2binary(NS), + case prim_inet:is_sockopt_val(netns, BinNS) of + true -> + con_opt(Opts, R#connect_opts { fd = [{netns,BinNS}] }, As); + false -> + {error, badarg} + end; {Name,Val} when is_atom(Name) -> con_add(Name, Val, R, Opts, As); _ -> {error, badarg} end; @@ -692,6 +725,14 @@ list_opt([Opt | Opts], R, As) -> {tcp_module,_} -> list_opt(Opts, R, As); inet -> list_opt(Opts, R, As); inet6 -> list_opt(Opts, R, As); + {netns,NS} -> + BinNS = filename2binary(NS), + case prim_inet:is_sockopt_val(netns, BinNS) of + true -> + list_opt(Opts, R#listen_opts { fd = [{netns,BinNS}] }, As); + false -> + {error, badarg} + end; {Name,Val} when is_atom(Name) -> list_add(Name, Val, R, Opts, As); _ -> {error, badarg} end; @@ -738,6 +779,14 @@ udp_opt([Opt | Opts], R, As) -> {udp_module,_} -> udp_opt(Opts, R, As); inet -> udp_opt(Opts, R, As); inet6 -> udp_opt(Opts, R, As); + {netns,NS} -> + BinNS = filename2binary(NS), + case prim_inet:is_sockopt_val(netns, BinNS) of + true -> + list_opt(Opts, R#udp_opts { fd = [{netns,BinNS}] }, As); + false -> + {error, badarg} + end; {Name,Val} when is_atom(Name) -> udp_add(Name, Val, R, Opts, As); _ -> {error, badarg} end; @@ -807,6 +856,17 @@ sctp_opt([Opt|Opts], Mod, R, As) -> {sctp_module,_} -> sctp_opt (Opts, Mod, R, As); % Done with inet -> sctp_opt (Opts, Mod, R, As); % Done with inet6 -> sctp_opt (Opts, Mod, R, As); % Done with + {netns,NS} -> + BinNS = filename2binary(NS), + case prim_inet:is_sockopt_val(netns, BinNS) of + true -> + sctp_opt( + Opts, Mod, + R#sctp_opts { fd = [{netns,BinNS}] }, + As); + false -> + {error, badarg} + end; {Name,Val} -> sctp_opt (Opts, Mod, R, As, Name, Val); _ -> {error,badarg} end; @@ -851,6 +911,39 @@ add_opt(Name, Val, Opts, As) -> end. +%% Passthrough all unknown - catch type errors later +filename2binary(List) when is_list(List) -> + OutEncoding = file:native_name_encoding(), + try unicode:characters_to_binary(List, unicode, OutEncoding) of + Bin when is_binary(Bin) -> + Bin; + _ -> + List + catch + error:badarg -> + List + end; +filename2binary(Bin) -> + Bin. + +binary2filename(Bin) -> + InEncoding = file:native_name_encoding(), + case unicode:characters_to_list(Bin, InEncoding) of + Filename when is_list(Filename) -> + Filename; + _ -> + %% For getopt/setopt of netns this should only happen if + %% a binary with wrong encoding was used when setting the + %% option, hence the user shall eat his/her own medicine. + %% + %% I.e passthrough here too for now. + %% Future usecases will most probably not want this, + %% rather Unicode error or warning + %% depending on emulator flag instead. + Bin + end. + + translate_ip(any, inet) -> {0,0,0,0}; translate_ip(loopback, inet) -> {127,0,0,1}; translate_ip(any, inet6) -> {0,0,0,0,0,0,0,0}; @@ -1063,7 +1156,7 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) -> Result -> Result end. --spec open(Fd :: integer(), +-spec open(Fd_or_OpenOpts :: integer() | list(), Addr :: ip_address(), Port :: port_number(), Opts :: [socket_setopt()], @@ -1073,8 +1166,14 @@ gethostbyaddr_tm_native(Addr, Timer, Opts) -> Module :: atom()) -> {'ok', socket()} | {'error', posix()}. -open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) when Fd < 0 -> - case prim_inet:open(Protocol, Family, Type) of +open(FdO, Addr, Port, Opts, Protocol, Family, Type, Module) + when is_integer(FdO), FdO < 0; + is_list(FdO) -> + OpenOpts = + if is_list(FdO) -> FdO; + true -> [] + end, + case prim_inet:open(Protocol, Family, Type, OpenOpts) of {ok,S} -> case prim_inet:setopts(S, Opts) of ok -> @@ -1097,7 +1196,8 @@ open(Fd, Addr, Port, Opts, Protocol, Family, Type, Module) when Fd < 0 -> Error -> Error end; -open(Fd, _Addr, _Port, Opts, Protocol, Family, Type, Module) -> +open(Fd, _Addr, _Port, Opts, Protocol, Family, Type, Module) + when is_integer(Fd) -> fdopen(Fd, Opts, Protocol, Family, Type, Module). bindx(S, [Addr], Port0) -> diff --git a/lib/kernel/src/inet_int.hrl b/lib/kernel/src/inet_int.hrl index 67a99913a1..18a4a61b2f 100644 --- a/lib/kernel/src/inet_int.hrl +++ b/lib/kernel/src/inet_int.hrl @@ -143,6 +143,7 @@ -define(INET_LOPT_TCP_SEND_TIMEOUT_CLOSE, 35). -define(INET_LOPT_MSGQ_HIWTRMRK, 36). -define(INET_LOPT_MSGQ_LOWTRMRK, 37). +-define(INET_LOPT_NETNS, 38). % Specific SCTP options: separate range: -define(SCTP_OPT_RTOINFO, 100). -define(SCTP_OPT_ASSOCINFO, 101). diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl index 619c78a6ca..98bd8d386c 100644 --- a/lib/kernel/src/inet_parse.erl +++ b/lib/kernel/src/inet_parse.erl @@ -722,7 +722,9 @@ ntoa({0,0,0,0,0,16#ffff,A,B}) -> "::FFFF:" ++ dig_to_dec(A) ++ "." ++ dig_to_dec(B); ntoa({_,_,_,_,_,_,_,_}=T) -> %% Find longest sequence of zeros, at least 2, to replace with "::" - ntoa(tuple_to_list(T), []). + ntoa(tuple_to_list(T), []); +ntoa(_) -> + {error, einval}. %% Find first double zero ntoa([], R) -> diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl index ced6f47bfe..0e7e7d2031 100644 --- a/lib/kernel/src/rpc.erl +++ b/lib/kernel/src/rpc.erl @@ -407,7 +407,7 @@ cast(Node, Mod, Fun, Args) -> true. -%% Asynchronous broadcast, returns nothing, it's just send'n prey +%% Asynchronous broadcast, returns nothing, it's just send 'n' pray -spec abcast(Name, Msg) -> abcast when Name :: atom(), Msg :: term(). diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl index bb654495d3..7b4ffb09ca 100644 --- a/lib/kernel/src/user_drv.erl +++ b/lib/kernel/src/user_drv.erl @@ -418,7 +418,7 @@ list_commands(Iport, Oport) -> true -> []; false -> - [{put_chars,unicode," q - quit erlang\n"}] + [{put_chars, unicode," q - quit erlang\n"}] end, io_requests([{put_chars, unicode," c [nn] - connect to job\n"}, {put_chars, unicode," i [nn] - interrupt job\n"}, diff --git a/lib/kernel/test/Makefile b/lib/kernel/test/Makefile index cb11d4e899..f1b8a105ed 100644 --- a/lib/kernel/test/Makefile +++ b/lib/kernel/test/Makefile @@ -145,7 +145,7 @@ release_tests_spec: make_emakefile $(INSTALL_DIR) "$(RELSYSDIR)" $(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)" $(INSTALL_DATA) $(APP_FILES) "$(RELSYSDIR)" - $(INSTALL_DATA) kernel.spec $(EMAKEFILE)\ + $(INSTALL_DATA) kernel.spec kernel_smoke.spec $(EMAKEFILE)\ $(COVERFILE) "$(RELSYSDIR)" chmod -R u+w "$(RELSYSDIR)" @tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl index 1ff291be54..9ec8a15861 100644 --- a/lib/kernel/test/application_SUITE.erl +++ b/lib/kernel/test/application_SUITE.erl @@ -35,7 +35,7 @@ -export([config_change/1, distr_changed_tc1/1, distr_changed_tc2/1, - ensure_started/1, + ensure_started/1, ensure_all_started/1, shutdown_func/1, do_shutdown/1, shutdown_timeout/1]). -define(TESTCASE, testcase_name). @@ -52,7 +52,7 @@ all() -> [failover, failover_comp, permissions, load, load_use_cache, ensure_started, {group, reported_bugs}, start_phases, script_start, nodedown_start, permit_false_start_local, - permit_false_start_dist, get_key, get_env, + permit_false_start_dist, get_key, get_env, ensure_all_started, {group, distr_changed}, config_change, shutdown_func, shutdown_timeout]. groups() -> @@ -978,6 +978,85 @@ ensure_started(Conf) -> ok = application:unload(app1), ok. +ensure_all_started(suite) -> []; +ensure_all_started(doc) -> ["Test application:ensure_all_started/1-2."]; +ensure_all_started(Conf) -> + + {ok, Fd1} = file:open("app1.app", [write]), + w_app1(Fd1), + file:close(Fd1), + {ok, Fd9} = file:open("app9.app", [write]), + w_app9(Fd9), + file:close(Fd9), + {ok, Fd10} = file:open("app10.app", [write]), + w_app10_dep9(Fd10), + file:close(Fd10), + {ok, FdErr} = file:open("app_chain_error.app", [write]), + w_app(FdErr, app_chain_error()), + file:close(FdErr), + {ok, FdErr2} = file:open("app_chain_error2.app", [write]), + w_app(FdErr2, app_chain_error2()), + file:close(FdErr2), + + %% Single app start/stop + false = lists:keyfind(app1, 1, application:which_applications()), + {ok, [app1]} = application:ensure_all_started(app1), % app1 started + {app1, _, _} = lists:keyfind(app1, 1, application:which_applications()), + {ok, []} = application:ensure_all_started(app1), % no start needed + ok = application:stop(app1), + false = lists:keyfind(app1, 1, application:which_applications()), + ok = application:unload(app1), + + %% App or dependency not found. + Name = hopefully_not_an_existing_app_file, + {error,{Name, {"no such file or directory", _ }}} = + application:ensure_all_started(Name), + + %% Start dependencies. + {error, {not_started, app9}} = application:start(app10), + {ok, [app9,app10]} = application:ensure_all_started(app10, temporary), + {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()), + {app10, _, _} = lists:keyfind(app10, 1, application:which_applications()), + %% Only report apps/dependencies that actually needed to start + ok = application:stop(app10), + ok = application:unload(app10), + {ok, [app10]} = application:ensure_all_started(app10, temporary), + ok = application:stop(app9), + ok = application:unload(app9), + ok = application:stop(app10), + ok = application:unload(app10), + + %% Deeper failure chain. We have the following dependencies: + %% app_chain_error -> app_chain_error2 + %% app_chain_error2 -> app10 + %% app_chain_error2 -> hopefully_not_an_existing_app + %% app10 -> app 9 + %% First we have none running and we expect to have neither app9 + %% nor app10 running after failing to start + %% hopefully_not_an_existing_app + {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}= + application:ensure_all_started(app_chain_error), + false = lists:keyfind(app9, 1, application:which_applications()), + false = lists:keyfind(app10, 1, application:which_applications()), + false = lists:keyfind(app_chain_error2,1,application:which_applications()), + false = lists:keyfind(app_chain_error, 1, application:which_applications()), + %% Here we will have app9 already running, and app10 should be + %% able to boot fine. + %% In this dependency failing, we expect app9 to still be running, but + %% not app10 after failing to start hopefully_not_an_existing_app + {ok, [app9]} = application:ensure_all_started(app9, temporary), + {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}= + application:ensure_all_started(app_chain_error), + {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()), + false = lists:keyfind(app10, 1, application:which_applications()), + false = lists:keyfind(app_chain_error2,1,application:which_applications()), + false = lists:keyfind(app_chain_error, 1, application:which_applications()), + ok = application:stop(app9), + ok = application:unload(app9), + ok = application:unload(app10), + ok = application:unload(app_chain_error2), + ok = application:unload(app_chain_error), + ok. %%%----------------------------------------------------------------- %%% Testing of reported bugs and other tickets. @@ -2125,6 +2204,24 @@ app_start_error() -> {applications, [kernel]}, {mod, {app_start_error, []}}]}. +app_chain_error() -> + {application, app_chain_error, + [{description, "ERTS CXC 138 ce"}, + {vsn, "2.0"}, + {modules, []}, + {registered, []}, + {applications, [kernel, app_chain_error2]}, + {mod, {ch_sup, {app_chain_error, 20,20}}}]}. + +app_chain_error2() -> + {application, app_chain_error2, + [{description, "ERTS CXC 138 ce2"}, + {vsn, "2.0"}, + {modules, []}, + {registered, []}, + {applications, [kernel, app10, hopefully_not_an_existing_app]}, + {mod, {ch_sup, {app_chain_error2, 21,21}}}]}. + app_group_leader() -> {application, group_leader, [{description, "GROUP_LEADER CXC 138 11"}, @@ -2374,6 +2471,12 @@ w_app7(Fd) -> w_app8(Fd) -> io:format(Fd, "~p.\n", [app8()]). +w_app9(Fd) -> + io:format(Fd, "~p.\n", [app9()]). + +w_app10_dep9(Fd) -> + io:format(Fd, "~p.\n", [app10_dep9()]). + w_app_start_error(Fd) -> io:format(Fd, "~p.\n", [app_start_error()]). diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl index fc17db2745..cd9359f2aa 100644 --- a/lib/kernel/test/code_SUITE.erl +++ b/lib/kernel/test/code_SUITE.erl @@ -35,7 +35,7 @@ on_load_embedded/1, on_load_errors/1, big_boot_embedded/1, native_early_modules/1, get_mode/1]). --export([init_per_testcase/2, end_per_testcase/2, +-export([init_per_testcase/2, end_per_testcase/2, init_per_suite/1, end_per_suite/1, sticky_compiler/1]). @@ -48,7 +48,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. -all() -> +all() -> [set_path, get_path, add_path, add_paths, del_path, replace_path, load_file, load_abs, ensure_loaded, delete, purge, soft_purge, is_loaded, all_loaded, @@ -62,7 +62,7 @@ all() -> on_load_binary, on_load_embedded, on_load_errors, big_boot_embedded, native_early_modules, get_mode]. -groups() -> +groups() -> []. init_per_group(_GroupName, Config) -> @@ -76,10 +76,10 @@ init_per_suite(Config) -> %% the module name does not match the filename, so %% we must compile to a binary and write the Beam file %% ourselves. - ?line Dir = filename:dirname(code:which(?MODULE)), - ?line File = filename:join(Dir, "code_a_test"), - ?line {ok,code_b_test,Code} = compile:file(File, [binary]), - ?line ok = file:write_file(File++".beam", Code), + Dir = filename:dirname(code:which(?MODULE)), + File = filename:join(Dir, "code_a_test"), + {ok,code_b_test,Code} = compile:file(File, [binary]), + ok = file:write_file(File++".beam", Code), Config. end_per_suite(Config) -> @@ -98,7 +98,7 @@ init_per_testcase(_Func, Config) -> P=code:get_path(), [{watchdog, Dog}, {code_path, P}|Config]. -end_per_testcase(TC, Config) when TC == mult_lib_roots; +end_per_testcase(TC, Config) when TC == mult_lib_roots; TC == big_boot_embedded -> {ok, HostName} = inet:gethostname(), NodeName = list_to_atom(atom_to_list(TC)++"@"++HostName), @@ -121,51 +121,49 @@ set_path(doc) -> []; set_path(Config) when is_list(Config) -> P = code:get_path(), NonExDir = filename:join(?config(priv_dir, Config), ?t:temp_name("hej")), - ?line {'EXIT',_} = (catch code:set_path({a})), - ?line {error, bad_directory} = (catch code:set_path([{a}])), - ?line {error, bad_directory} = code:set_path(NonExDir), - ?line P = code:get_path(), % still the same path. - ?line true = code:set_path(P), % set the same path again. - ?line P = code:get_path(), % still the same path. + {'EXIT',_} = (catch code:set_path({a})), + {error, bad_directory} = (catch code:set_path([{a}])), + {error, bad_directory} = code:set_path(NonExDir), + P = code:get_path(), % still the same path. + true = code:set_path(P), % set the same path again. + P = code:get_path(), % still the same path. LibDir = code:lib_dir(), - ?line true = code:set_path([LibDir | P]), - ?line [LibDir | P] = code:get_path(), - ?line true = code:set_path([LibDir]), - ?line [LibDir] = code:get_path(), + true = code:set_path([LibDir | P]), + [LibDir | P] = code:get_path(), + true = code:set_path([LibDir]), + [LibDir] = code:get_path(), ok. get_path(suite) -> []; get_path(doc) -> []; get_path(Config) when is_list(Config) -> - ?line P = code:get_path(), + P = code:get_path(), % test that all directories are strings (lists). - ?line [] = lists:filter(fun(Dir) when is_list(Dir) -> - false; - (_) -> - true - end, - P), + [] = lists:filter(fun + (Dir) when is_list(Dir) -> false; + (_) -> true + end, P), ok. add_path(suite) -> []; add_path(doc) -> []; add_path(Config) when is_list(Config) -> P = code:get_path(), - ?line {'EXIT',_} = (catch code:add_path({})), - ?line {'EXIT',_} = (catch code:add_patha({})), - ?line {'EXIT',_} = (catch code:add_pathz({})), - ?line {error, bad_directory} = code:add_path("xyz"), - ?line {error, bad_directory} = code:add_patha("xyz"), - ?line {error, bad_directory} = code:add_pathz("xyz"), + {'EXIT',_} = (catch code:add_path({})), + {'EXIT',_} = (catch code:add_patha({})), + {'EXIT',_} = (catch code:add_pathz({})), + {error, bad_directory} = code:add_path("xyz"), + {error, bad_directory} = code:add_patha("xyz"), + {error, bad_directory} = code:add_pathz("xyz"), LibDir = code:lib_dir(), - ?line true = code:add_path(LibDir), - ?line LibDir = lists:last(code:get_path()), + true = code:add_path(LibDir), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line true = code:add_pathz(LibDir), - ?line LibDir = lists:last(code:get_path()), + true = code:add_pathz(LibDir), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line true = code:add_patha(LibDir), - ?line [LibDir|_] = code:get_path(), + true = code:add_patha(LibDir), + [LibDir|_] = code:get_path(), code:set_path(P), ok. @@ -173,134 +171,134 @@ add_paths(suite) -> []; add_paths(doc) -> []; add_paths(Config) when is_list(Config) -> P = code:get_path(), - ?line ok = code:add_paths([{}]), - ?line ok = code:add_pathsa([{}]), - ?line ok = code:add_pathsz([{}]), - ?line ok = code:add_paths(["xyz"]), - ?line ok = code:add_pathsa(["xyz"]), - ?line ok = code:add_pathsz(["xyz"]), + ok = code:add_paths([{}]), + ok = code:add_pathsa([{}]), + ok = code:add_pathsz([{}]), + ok = code:add_paths(["xyz"]), + ok = code:add_pathsa(["xyz"]), + ok = code:add_pathsz(["xyz"]), P = code:get_path(), % check that no directory is added. LibDir = code:lib_dir(), - ?line ok = code:add_paths([LibDir]), - ?line LibDir = lists:last(code:get_path()), + ok = code:add_paths([LibDir]), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line ok = code:add_pathsz([LibDir]), - ?line LibDir = lists:last(code:get_path()), + ok = code:add_pathsz([LibDir]), + LibDir = lists:last(code:get_path()), code:set_path(P), - ?line ok = code:add_pathsa([LibDir]), - ?line [LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir]), + [LibDir|P] = code:get_path(), code:set_path(P), RootDir = code:root_dir(), Res = P ++ [LibDir, RootDir], - ?line ok = code:add_paths([LibDir, RootDir]), - ?line Res = code:get_path(), + ok = code:add_paths([LibDir, RootDir]), + Res = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsz([LibDir, RootDir]), - ?line Res = code:get_path(), + ok = code:add_pathsz([LibDir, RootDir]), + Res = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsa([LibDir, RootDir]), - ?line [RootDir, LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir, RootDir]), + [RootDir, LibDir|P] = code:get_path(), code:set_path(P), - ?line ok = code:add_paths([LibDir, "xyz"]), + ok = code:add_paths([LibDir, "xyz"]), Res1 = P ++ [LibDir], - ?line Res1 = code:get_path(), + Res1 = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsz([LibDir, "xyz"]), - ?line Res1 = code:get_path(), + ok = code:add_pathsz([LibDir, "xyz"]), + Res1 = code:get_path(), code:set_path(P), - ?line ok = code:add_pathsa([LibDir, "xyz"]), - ?line [LibDir|P] = code:get_path(), + ok = code:add_pathsa([LibDir, "xyz"]), + [LibDir|P] = code:get_path(), code:set_path(P), ok. del_path(suite) -> []; del_path(doc) -> []; del_path(Config) when is_list(Config) -> - ?line P = code:get_path(), + P = code:get_path(), test_server:format("Initial code:get_path()=~p~n",[P]), - ?line {'EXIT',_} = (catch code:del_path(3)), - ?line false = code:del_path(my_dummy_name), - ?line false = code:del_path("/kdlk/my_dummy_dir"), + {'EXIT',_} = (catch code:del_path(3)), + false = code:del_path(my_dummy_name), + false = code:del_path("/kdlk/my_dummy_dir"), Dir = filename:join([code:lib_dir(kernel),"ebin"]), test_server:format("kernel dir: ~p~n",[Dir]), - ?line true = code:del_path(kernel), + true = code:del_path(kernel), NewP = code:get_path(), test_server:format("Path after removing 'kernel':~p~n",[NewP]), ReferenceP = lists:delete(Dir,P), test_server:format("Reference path:~p~n",[ReferenceP]), - ?line NewP = ReferenceP, % check that dir is deleted + NewP = ReferenceP, % check that dir is deleted code:set_path(P), - ?line true = code:del_path(Dir), + true = code:del_path(Dir), NewP1 = code:get_path(), - ?line NewP1 = lists:delete(Dir,P), % check that dir is deleted + NewP1 = lists:delete(Dir,P), % check that dir is deleted code:set_path(P), ok. replace_path(suite) -> []; replace_path(doc) -> []; replace_path(Config) when is_list(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line P = code:get_path(), - ?line {'EXIT',_} = (catch code:replace_path(3,"")), - ?line {error, bad_name} = code:replace_path(dummy_name,""), - ?line {error, bad_name} = code:replace_path(kernel, + PrivDir = ?config(priv_dir, Config), + P = code:get_path(), + {'EXIT',_} = (catch code:replace_path(3,"")), + {error, bad_name} = code:replace_path(dummy_name,""), + {error, bad_name} = code:replace_path(kernel, "/kdlk/my_dummy_dir"), - ?line {error, bad_directory} = code:replace_path(kernel, + {error, bad_directory} = code:replace_path(kernel, "/kdlk/kernel-1.2"), - ?line P = code:get_path(), % Check that path is not changed. + P = code:get_path(), % Check that path is not changed. - ?line ok = file:set_cwd(PrivDir), + ok = file:set_cwd(PrivDir), %% Replace an existing application. file:make_dir("./kernel-2.11"), {ok, Cwd} = file:get_cwd(), NewDir = Cwd ++ "/kernel-2.11", - ?line true = code:replace_path(kernel, NewDir), - ?line NewDir = code:lib_dir(kernel), - ?line true = code:set_path(P), %Reset path - ?line ok = file:del_dir("./kernel-2.11"), + true = code:replace_path(kernel, NewDir), + NewDir = code:lib_dir(kernel), + true = code:set_path(P), %Reset path + ok = file:del_dir("./kernel-2.11"), %% Add a completly new application. NewAppName = 'blurf_blarfer', - ?line NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"), - ?line ok = file:make_dir(NewAppDir), - ?line true = code:replace_path(NewAppName, NewAppDir), - ?line NewAppDir = code:lib_dir(NewAppName), - ?line NewAppDir = lists:last(code:get_path()), - ?line true = code:set_path(P), %Reset path - ?line ok = file:del_dir(NewAppDir), + NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"), + ok = file:make_dir(NewAppDir), + true = code:replace_path(NewAppName, NewAppDir), + NewAppDir = code:lib_dir(NewAppName), + NewAppDir = lists:last(code:get_path()), + true = code:set_path(P), %Reset path + ok = file:del_dir(NewAppDir), ok. dir_disappeared(suite) -> []; dir_disappeared(doc) -> ["OTP-3977"]; dir_disappeared(Config) when is_list(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Dir = filename:join(PrivDir, "temp"), - ?line ok = file:make_dir(Dir), - ?line true = code:add_path(Dir), - ?line ok = file:del_dir(Dir), - ?line non_existing = code:which(bubbelskrammel), + PrivDir = ?config(priv_dir, Config), + Dir = filename:join(PrivDir, "temp"), + ok = file:make_dir(Dir), + true = code:add_path(Dir), + ok = file:del_dir(Dir), + non_existing = code:which(bubbelskrammel), ok. load_file(suite) -> []; load_file(doc) -> []; load_file(Config) when is_list(Config) -> - ?line {error, nofile} = code:load_file(duuuumy_mod), - ?line {error, badfile} = code:load_file(code_a_test), - ?line {'EXIT', _} = (catch code:load_file(123)), - ?line {module, code_b_test} = code:load_file(code_b_test), + {error, nofile} = code:load_file(duuuumy_mod), + {error, badfile} = code:load_file(code_a_test), + {'EXIT', _} = (catch code:load_file(123)), + {module, code_b_test} = code:load_file(code_b_test), TestDir = test_dir(), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_file(code_b_test), + {error, sticky_directory} = code:load_file(code_b_test), code:unstick_dir(TestDir), ok. @@ -311,30 +309,30 @@ load_abs(suite) -> []; load_abs(doc) -> []; load_abs(Config) when is_list(Config) -> TestDir = test_dir(), - ?line {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"), - ?line {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"), - ?line {'EXIT', _} = (catch code:load_abs({})), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"), + {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"), + {'EXIT', _} = (catch code:load_abs({})), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"), + {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"), code:unstick_dir(TestDir), ok. ensure_loaded(suite) -> []; ensure_loaded(doc) -> []; ensure_loaded(Config) when is_list(Config) -> - ?line {module, lists} = code:ensure_loaded(lists), + {module, lists} = code:ensure_loaded(lists), case init:get_argument(mode) of {ok, [["embedded"]]} -> - ?line {error, embedded} = code:ensure_loaded(code_b_test), - ?line {error, badarg} = code:ensure_loaded(34), + {error, embedded} = code:ensure_loaded(code_b_test), + {error, badarg} = code:ensure_loaded(34), ok; _ -> - ?line {error, nofile} = code:ensure_loaded(duuuumy_mod), - ?line {error, badfile} = code:ensure_loaded(code_a_test), - ?line {'EXIT', _} = (catch code:ensure_loaded(34)), - ?line {module, code_b_test} = code:ensure_loaded(code_b_test), - ?line {module, code_b_test} = code:ensure_loaded(code_b_test), + {error, nofile} = code:ensure_loaded(duuuumy_mod), + {error, badfile} = code:ensure_loaded(code_a_test), + {'EXIT', _} = (catch code:ensure_loaded(34)), + {module, code_b_test} = code:ensure_loaded(code_b_test), + {module, code_b_test} = code:ensure_loaded(code_b_test), ok end. @@ -343,15 +341,15 @@ delete(doc) -> []; delete(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line {'EXIT',_} = (catch code:delete(122)), - ?line false = code_b_test:check_exit(Pid), - ?line false = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + {'EXIT',_} = (catch code:delete(122)), + false = code_b_test:check_exit(Pid), + false = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), exit(Pid,kill), - ?line true = code_b_test:check_exit(Pid), - ?line false = code:delete(code_b_test), + true = code_b_test:check_exit(Pid), + false = code:delete(code_b_test), code:purge(code_b_test), process_flag(trap_exit, OldFlag), ok. @@ -361,13 +359,13 @@ purge(doc) -> []; purge(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line {'EXIT',_} = (catch code:purge({})), - ?line false = code:purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), - ?line true = code:purge(code_b_test), - ?line true = code_b_test:check_exit(Pid), + {'EXIT',_} = (catch code:purge({})), + false = code:purge(code_b_test), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), + true = code:purge(code_b_test), + true = code_b_test:check_exit(Pid), process_flag(trap_exit, OldFlag), ok. @@ -376,16 +374,16 @@ soft_purge(doc) -> []; soft_purge(Config) when is_list(Config) -> OldFlag = process_flag(trap_exit, true), code:purge(code_b_test), - ?line {'EXIT',_} = (catch code:soft_purge(23)), - ?line true = code:soft_purge(code_b_test), - ?line Pid = code_b_test:do_spawn(), - ?line true = code:delete(code_b_test), - ?line false = code_b_test:check_exit(Pid), - ?line false = code:soft_purge(code_b_test), - ?line false = code_b_test:check_exit(Pid), + {'EXIT',_} = (catch code:soft_purge(23)), + true = code:soft_purge(code_b_test), + Pid = code_b_test:do_spawn(), + true = code:delete(code_b_test), + false = code_b_test:check_exit(Pid), + false = code:soft_purge(code_b_test), + false = code_b_test:check_exit(Pid), exit(Pid,kill), - ?line true = code_b_test:check_exit(Pid), - ?line true = code:soft_purge(code_b_test), + true = code_b_test:check_exit(Pid), + true = code:soft_purge(code_b_test), process_flag(trap_exit, OldFlag), ok. @@ -394,12 +392,12 @@ is_loaded(doc) -> []; is_loaded(Config) when is_list(Config) -> code:purge(code_b_test), code:delete(code_b_test), - ?line false = code:is_loaded(duuuuuumy_mod), - ?line {'EXIT',_} = (catch code:is_loaded(23)), - ?line {file, preloaded} = code:is_loaded(init), + false = code:is_loaded(duuuuuumy_mod), + {'EXIT',_} = (catch code:is_loaded(23)), + {file, preloaded} = code:is_loaded(init), TestDir = test_dir(), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), - ?line {file, _Loaded} = code:is_loaded(code_b_test), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {file, _Loaded} = code:is_loaded(code_b_test), code:purge(code_b_test), code:delete(code_b_test), ok. @@ -413,21 +411,19 @@ all_loaded(Config) when is_list(Config) -> end. all_loaded_1() -> - ?line Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())], + Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())], - ?line Loaded0 = lists:sort(code:all_loaded()), - ?line all_unique(Loaded0), - ?line Loaded1 = lists:keysort(2, Loaded0), - ?line Loaded2 = match_and_remove(Preloaded, Loaded1), + Loaded0 = lists:sort(code:all_loaded()), + all_unique(Loaded0), + Loaded1 = lists:keysort(2, Loaded0), + Loaded2 = match_and_remove(Preloaded, Loaded1), ObjExt = code:objfile_extension(), - ?line [] = lists:filter(fun({Mod,AbsName}) when is_atom(Mod), - is_list(AbsName) -> - Mod =/= list_to_atom(filename:basename(AbsName, - ObjExt)); - (_) -> true - end, - Loaded2), + [] = lists:filter(fun + ({Mod,AbsName}) when is_atom(Mod), is_list(AbsName) -> + Mod =/= list_to_atom(filename:basename(AbsName, ObjExt)); + (_) -> true + end, Loaded2), ok. match_and_remove([], List) -> List; @@ -442,19 +438,19 @@ load_binary(doc) -> []; load_binary(Config) when is_list(Config) -> TestDir = test_dir(), File = TestDir ++ "/code_b_test" ++ code:objfile_extension(), - ?line {ok,Bin} = file:read_file(File), - ?line {'EXIT',_} = (catch code:load_binary(12, File, Bin)), - ?line {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)), - ?line {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)), - ?line {module, code_b_test} = code:load_binary(code_b_test, File, Bin), + {ok,Bin} = file:read_file(File), + {'EXIT',_} = (catch code:load_binary(12, File, Bin)), + {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)), + {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)), + {module, code_b_test} = code:load_binary(code_b_test, File, Bin), code:stick_dir(TestDir), - ?line {error, sticky_directory} = code:load_binary(code_b_test, File, Bin), + {error, sticky_directory} = code:load_binary(code_b_test, File, Bin), code:unstick_dir(TestDir), code:purge(code_b_test), code:delete(code_b_test), ok. -upgrade(Config) -> +upgrade(Config) -> DataDir = ?config(data_dir, Config), %%T = [beam, hipe], @@ -462,28 +458,28 @@ upgrade(Config) -> [upgrade_do(DataDir, Client, U1, U2, O1, O2) || Client<-T, U1<-T, U2<-T, O1<-T, O2<-T], - + ok. upgrade_do(DataDir, Client, U1, U2, O1, O2) -> - compile_load(upgrade_client, DataDir, undefined, Client), + compile_load(upgrade_client, DataDir, undefined, Client), upgrade_client:run(DataDir, U1, U2, O1, O2), ok. compile_load(Mod, Dir, Ver, CodeType) -> Version = case Ver of - undefined -> - io:format("Compiling '~p' as ~p\n", [Mod, CodeType]), - []; - _ -> - io:format("Compiling version ~p of '~p' as ~p\n", - [Ver, Mod, CodeType]), - [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}] - end, + undefined -> + io:format("Compiling '~p' as ~p\n", [Mod, CodeType]), + []; + _ -> + io:format("Compiling version ~p of '~p' as ~p\n", + [Ver, Mod, CodeType]), + [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}] + end, Target = case CodeType of - beam -> []; - hipe -> [native] - end, + beam -> []; + hipe -> [native] + end, CompOpts = [binary, report] ++ Target ++ Version, Src = filename:join(Dir, atom_to_list(Mod) ++ ".erl"), @@ -497,17 +493,17 @@ compile_load(Mod, Dir, Ver, CodeType) -> dir_req(suite) -> []; dir_req(doc) -> []; dir_req(Config) when is_list(Config) -> - ?line {ok,[[Root0]]} = init:get_argument(root), - ?line Root = filename:join([Root0]), % Normalised form. - ?line Root = code:root_dir(), + {ok,[[Root0]]} = init:get_argument(root), + Root = filename:join([Root0]), % Normalised form. + Root = code:root_dir(), LibDir = Root ++ "/lib", - ?line LibDir = code:lib_dir(), - ?line code:compiler_dir(), - ?line {error, bad_name} = code:lib_dir(duuumy), - ?line KernLib = code:lib_dir(kernel), - ?line Priv = KernLib ++ "/priv", - ?line Priv = code:priv_dir(kernel), - ?line {error, bad_name} = code:priv_dir(duuumy), + LibDir = code:lib_dir(), + code:compiler_dir(), + {error, bad_name} = code:lib_dir(duuumy), + KernLib = code:lib_dir(kernel), + Priv = KernLib ++ "/priv", + Priv = code:priv_dir(kernel), + {error, bad_name} = code:priv_dir(duuumy), ok. object_code(suite) -> []; @@ -517,19 +513,19 @@ object_code(Config) when is_list(Config) -> P = code:get_path(), P = code:get_path(), code:add_path(TestDir), - ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), + {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"), LoadedFile = filename:absname(TestDir ++ "/code_b_test" ++ code:objfile_extension()), - ?line case code:get_object_code(code_b_test) of + case code:get_object_code(code_b_test) of {code_b_test,Bin,LoadedFile} when is_binary(Bin) -> ok end, code:purge(code_b_test), code:delete(code_b_test), - ?line error = code:get_object_code(dddddddduuuuuuumy), - ?line {'EXIT',_} = (catch code:get_object_code(23)), - ?line code:set_path(P), - ?line P=code:get_path(), + error = code:get_object_code(dddddddduuuuuuumy), + {'EXIT',_} = (catch code:get_object_code(23)), + code:set_path(P), + P=code:get_path(), ok. set_path_file(suite) -> []; @@ -537,17 +533,17 @@ set_path_file(doc) -> ["Test that set_path does not accept ", "files as pathnames (known previous bug)"]; set_path_file(Config) when is_list(Config) -> File=filename:join(?config(priv_dir, Config), "testfil"), - ?line ok=file:write_file(File, list_to_binary("lite data")), - ?line {error, bad_directory}=code:set_path([File]). + ok=file:write_file(File, list_to_binary("lite data")), + {error, bad_directory}=code:set_path([File]). sticky_dir(suite) -> []; sticky_dir(doc) -> ["Test that a module with the same name as a module in ", "a sticky directory cannot be loaded."]; sticky_dir(Config) when is_list(Config) -> MyDir=filename:dirname(code:which(?MODULE)), - ?line {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]), + {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]), File=filename:join([?config(data_dir, Config), "calendar"]), - ?line Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]), + Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]), case Ret of fail -> ?t:fail("c:c allowed a sticky module to be compiled and loaded."); @@ -607,70 +603,70 @@ add_del_path(Config) when is_list(Config) -> Dir1 = filename:join(DDir,"dummy_app-1.0/ebin"), Dir2 = filename:join(DDir,"dummy_app-2.0/ebin"), code:add_patha(Dir1), - ?line PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"), - ?line PrivDir1 = code:priv_dir(dummy_app), - ?line code:add_path(Dir2), % put last in path - ?line PrivDir1 = code:priv_dir(dummy_app), - ?line code:del_path(Dir2), - ?line PrivDir1 = code:priv_dir(dummy_app), + PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"), + PrivDir1 = code:priv_dir(dummy_app), + code:add_path(Dir2), % put last in path + PrivDir1 = code:priv_dir(dummy_app), + code:del_path(Dir2), + PrivDir1 = code:priv_dir(dummy_app), ok. clash(Config) when is_list(Config) -> DDir = ?config(data_dir,Config)++"clash/", P = code:get_path(), - [TestServerPath|_] = [Path || Path <- code:get_path(), + [TestServerPath|_] = [Path || Path <- code:get_path(), re:run(Path,"test_server/?$",[]) /= nomatch], %% test non-clashing entries %% remove TestServerPath to prevent clash with test-server path - ?line true = code:del_path(TestServerPath), - ?line true = code:add_path(DDir++"foobar-0.1/ebin"), - ?line true = code:add_path(DDir++"zork-0.8/ebin"), + true = code:del_path(TestServerPath), + true = code:add_path(DDir++"foobar-0.1/ebin"), + true = code:add_path(DDir++"zork-0.8/ebin"), test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [OKMsg|_] = test_server:capture_get(), - ?line true = lists:prefix("** Found 0 name clashes", OKMsg), - ?line true = code:set_path(P), + [OKMsg|_] = test_server:capture_get(), + true = lists:prefix("** Found 0 name clashes", OKMsg), + true = code:set_path(P), %% test clashing entries %% remove TestServerPath to prevent clash with test-server path - ?line true = code:del_path(TestServerPath), - ?line true = code:add_path(DDir++"foobar-0.1/ebin"), - ?line true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"), + true = code:del_path(TestServerPath), + true = code:add_path(DDir++"foobar-0.1/ebin"), + true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"), test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [ClashMsg|_] = test_server:capture_get(), - ?line {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*", + [ClashMsg|_] = test_server:capture_get(), + {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*", [{capture,all_but_first,list}]), - ?line true = code:set_path(P), + true = code:set_path(P), %% test "Bad path can't read" %% remove TestServerPath to prevent clash with test-server path Priv = ?config(priv_dir, Config), - ?line true = code:del_path(TestServerPath), + true = code:del_path(TestServerPath), TmpEzFile = Priv++"foobar-0.tmp.ez", - ?line {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile), - ?line true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"), + {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile), + true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"), case os:type() of {win32,_} -> - %% The file wont be deleted on windows until it's closed, why we + %% The file wont be deleted on windows until it's closed, why we %% need to rename instead. - ?line ok = file:rename(TmpEzFile,TmpEzFile++".moved"); + ok = file:rename(TmpEzFile,TmpEzFile++".moved"); _ -> - ?line ok = file:delete(TmpEzFile) + ok = file:delete(TmpEzFile) end, test_server:capture_start(), - ?line ok = code:clash(), + ok = code:clash(), test_server:capture_stop(), - ?line [BadPathMsg|_] = test_server:capture_get(), - ?line true = lists:prefix("** Bad path can't read", BadPathMsg), - ?line true = code:set_path(P), + [BadPathMsg|_] = test_server:capture_get(), + true = lists:prefix("** Bad path can't read", BadPathMsg), + true = code:set_path(P), file:delete(TmpEzFile++".moved"), %% Only effect on windows ok. @@ -687,7 +683,7 @@ ext_mod_dep(Config) when is_list(Config) -> xref:add_directory(s, filename:join(code:lib_dir(kernel),"ebin")), xref:add_directory(s, filename:join(code:lib_dir(stdlib),"ebin")), case catch ext_mod_dep2() of - {'EXIT', Reason} -> + {'EXIT', Reason} -> xref:stop(s), exit(Reason); Else -> @@ -699,7 +695,7 @@ ext_mod_dep(Config) when is_list(Config) -> end. ext_mod_dep2() -> - Exports0 = code_server:module_info(exports) -- + Exports0 = code_server:module_info(exports) -- [{module_info,0},{module_info,1}], Exports = [{code_server,M,A} || {M,A} <- Exports0], case analyse(Exports, [], [], 0) of @@ -709,17 +705,17 @@ ext_mod_dep2() -> {not_verified,ErrCnt} end. -analyse([], [], Visited, ErrCnt) -> +analyse([], [], Visited, ErrCnt) -> {Visited,ErrCnt}; analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) -> %% The code_server has been granted to use the following modules, - %% These modules should be loaded by code.erl before + %% These modules should be loaded by code.erl before %% the code_server is started. OK = [erlang, os, prim_file, erl_prim_loader, init, ets, code_server, lists, lists_sort, unicode, binary, filename, gb_sets, gb_trees, hipe_unified_loader, hipe_bifs, prim_zip, zlib], - ErrCnt1 = + ErrCnt1 = case lists:member(M, OK) or erlang:is_builtin(M,F,A) of true -> 0; @@ -729,7 +725,7 @@ analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) -> {Visited, ErrCnt1+ErrCnt0}; analyse([MFA|R], Path, Visited0, ErrCnt0) -> case lists:member(MFA,Visited0) of - false -> + false -> {Visited,ErrCnt1} = analyse2(MFA, Path, Visited0), analyse(R, Path, Visited, ErrCnt1+ErrCnt0); true -> @@ -814,7 +810,7 @@ check_funs({'$M_EXPR','$F_EXPR',_}, {code_server,start_link,1}]) -> 0; check_funs({'$M_EXPR','$F_EXPR',_}, [{erlang,spawn_link,1},{code_server,start_link,1}]) -> 0; -check_funs({'$M_EXPR',module_info,1}, +check_funs({'$M_EXPR',module_info,1}, [{hipe_unified_loader,patch_to_emu_step1,1} | _]) -> 0; check_funs({'$M_EXPR','$F_EXPR',2}, [{lists,foldl,3}, @@ -829,7 +825,7 @@ check_funs({'$M_EXPR','$F_EXPR',1}, check_funs({'$M_EXPR',warning_msg,2}, [{code_server,finish_on_load_report,2} | _]) -> 0; %% This is cheating! /raimo -%% +%% %% check_funs(This = {M,_,_}, Path) -> %% case catch atom_to_list(M) of %% [$h,$i,$p,$e | _] -> @@ -861,9 +857,9 @@ load_cached(suite) -> load_cached(doc) -> []; load_cached(Config) when is_list(Config) -> - ?line Priv = ?config(priv_dir, Config), - ?line WD = filename:dirname(code:which(?MODULE)), - ?line {ok,Node} = + Priv = ?config(priv_dir, Config), + WD = filename:dirname(code:which(?MODULE)), + {ok,Node} = ?t:start_node(code_cache_node, peer, [{args, "-pa \"" ++ WD ++ "\""}, {erl, [this]}]), @@ -873,7 +869,7 @@ load_cached(Config) when is_list(Config) -> _ -> false end end, - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), case rpc:call(Node, lists, any, [CCTabCreated,Tabs]) of true -> ?t:stop_node(Node), @@ -881,25 +877,25 @@ load_cached(Config) when is_list(Config) -> false -> ok end, - ?line rpc:call(Node, code, del_path, [Priv]), - ?line rpc:call(Node, code, add_pathz, [Priv]), + rpc:call(Node, code, del_path, [Priv]), + rpc:call(Node, code, add_pathz, [Priv]), FullModName = Priv ++ "/code_cache_test", - ?line {ok,Dev} = file:open(FullModName ++ ".erl", [write]), - ?line io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []), - ?line ok = file:close(Dev), - ?line {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]), + {ok,Dev} = file:open(FullModName ++ ".erl", [write]), + io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []), + ok = file:close(Dev), + {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]), F = fun load_loop/2, N = 1000, - ?line {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), + {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), TNoCache = now_diff(T1, T0), - ?line rpc:call(Node, code, rehash, []), - ?line {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), - ?line TCache = now_diff(T3, T2), + rpc:call(Node, code, rehash, []), + {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]), + TCache = now_diff(T3, T2), AvgNoCache = TNoCache/N, AvgCache = TCache/N, - ?line io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]), + io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]), ?t:stop_node(Node), if AvgNoCache =< AvgCache -> ?t:fail("Cache not working properly."); @@ -916,7 +912,7 @@ load_loop(N, M, T0) -> code:delete(M), code:purge(M), load_loop(N-1, M, T0). - + now_diff({A2, B2, C2}, {A1, B1, C1}) -> ((A2-A1)*1000000 + B2-B1)*1000000 + C2-C1. @@ -925,30 +921,30 @@ start_node_with_cache(suite) -> start_node_with_cache(doc) -> []; start_node_with_cache(Config) when is_list(Config) -> - ?line {ok,Node} = - ?t:start_node(code_cache_node, peer, [{args, + {ok,Node} = + ?t:start_node(code_cache_node, peer, [{args, "-code_path_cache"}, {erl, [this]}]), - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), io:format("Tabs: ~w~n", [Tabs]), CCTabCreated = fun(Tab) -> case rpc:call(Node, ets, info, [Tab,name]) of code_cache -> true; _ -> false end - end, - ?line true = lists:any(CCTabCreated, Tabs), + end, + true = lists:any(CCTabCreated, Tabs), ?t:stop_node(Node), ok. - + add_and_rehash(suite) -> []; add_and_rehash(doc) -> []; add_and_rehash(Config) when is_list(Config) -> - ?line Priv = ?config(priv_dir, Config), - ?line WD = filename:dirname(code:which(?MODULE)), - ?line {ok,Node} = + Priv = ?config(priv_dir, Config), + WD = filename:dirname(code:which(?MODULE)), + {ok,Node} = ?t:start_node(code_cache_node, peer, [{args, "-pa \"" ++ WD ++ "\""}, {erl, [this]}]), @@ -958,7 +954,7 @@ add_and_rehash(Config) when is_list(Config) -> _ -> false end end, - ?line Tabs0 = rpc:call(Node, ets, all, []), + Tabs0 = rpc:call(Node, ets, all, []), case rpc:call(Node, lists, any, [CCTabCreated,Tabs0]) of true -> ?t:stop_node(Node), @@ -966,36 +962,36 @@ add_and_rehash(Config) when is_list(Config) -> false -> ok end, - ?line ok = rpc:call(Node, code, rehash, []), % create cache - ?line Tabs1 = rpc:call(Node, ets, all, []), - ?line true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created - ?line ok = rpc:call(Node, code, rehash, []), + ok = rpc:call(Node, code, rehash, []), % create cache + Tabs1 = rpc:call(Node, ets, all, []), + true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created + ok = rpc:call(Node, code, rehash, []), OkDir = filename:join(Priv, ""), BadDir = filename:join(Priv, "guggemuffsussiputt"), - ?line CP = [OkDir | rpc:call(Node, code, get_path, [])], - ?line true = rpc:call(Node, code, set_path, [CP]), + CP = [OkDir | rpc:call(Node, code, get_path, [])], + true = rpc:call(Node, code, set_path, [CP]), CP1 = [BadDir | CP], - ?line {error,_} = rpc:call(Node, code, set_path, [CP1]), - ?line true = rpc:call(Node, code, del_path, [OkDir]), - ?line true = rpc:call(Node, code, add_path, [OkDir]), - ?line true = rpc:call(Node, code, add_path, [OkDir]), - ?line {error,_} = rpc:call(Node, code, add_path, [BadDir]), - ?line ok = rpc:call(Node, code, rehash, []), + {error,_} = rpc:call(Node, code, set_path, [CP1]), + true = rpc:call(Node, code, del_path, [OkDir]), + true = rpc:call(Node, code, add_path, [OkDir]), + true = rpc:call(Node, code, add_path, [OkDir]), + {error,_} = rpc:call(Node, code, add_path, [BadDir]), + ok = rpc:call(Node, code, rehash, []), ?t:stop_node(Node), ok. - + where_is_file_no_cache(suite) -> []; where_is_file_no_cache(doc) -> []; where_is_file_no_cache(Config) when is_list(Config) -> - ?line {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]), + {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]), io:format("Load time: ~w ms~n", [T]), - ?line KernelEbinDir = filename:dirname(KernelBeamFile), - ?line AppFile = filename:join(KernelEbinDir, "kernel.app"), - ?line AppFile = code:where_is_file("kernel.app"), - ?line non_existing = code:where_is_file("kernel"), % no such file + KernelEbinDir = filename:dirname(KernelBeamFile), + AppFile = filename:join(KernelEbinDir, "kernel.app"), + AppFile = code:where_is_file("kernel.app"), + non_existing = code:where_is_file("kernel"), % no such file ok. where_is_file_cached(suite) -> @@ -1003,97 +999,97 @@ where_is_file_cached(suite) -> where_is_file_cached(doc) -> []; where_is_file_cached(Config) when is_list(Config) -> - ?line {ok,Node} = - ?t:start_node(code_cache_node, peer, [{args, + {ok,Node} = + ?t:start_node(code_cache_node, peer, [{args, "-code_path_cache"}, {erl, [this]}]), - ?line Tabs = rpc:call(Node, ets, all, []), + Tabs = rpc:call(Node, ets, all, []), io:format("Tabs: ~w~n", [Tabs]), CCTabCreated = fun(Tab) -> case rpc:call(Node, ets, info, [Tab,name]) of code_cache -> true; _ -> false end - end, - ?line true = lists:any(CCTabCreated, Tabs), - ?line KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]), - ?line {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]), + end, + true = lists:any(CCTabCreated, Tabs), + KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]), + {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]), io:format("Load time: ~w ms~n", [T]), - ?line KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]), - ?line AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]), - ?line AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]), - ?line non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file + KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]), + AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]), + AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]), + non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file ?t:stop_node(Node), ok. - + purge_stacktrace(suite) -> []; purge_stacktrace(doc) -> ["Test that stacktrace is deleted when purging a referred module"]; purge_stacktrace(Config) when is_list(Config) -> - ?line code:purge(code_b_test), + code:purge(code_b_test), try code_b_test:call(fun(b) -> ok end, a) catch error:function_clause -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{?MODULE,_,[a],_}, {code_b_test,call,2,_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, try code_b_test:call(nofun, 2) catch error:function_clause -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{code_b_test,call,[nofun,2],_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, Args = [erlang,error,[badarg]], try code_b_test:call(erlang, error, [badarg,Args]) catch error:badarg -> - ?line code:load_file(code_b_test), - ?line case erlang:get_stacktrace() of + code:load_file(code_b_test), + case erlang:get_stacktrace() of [{code_b_test,call,Args,_}, {?MODULE,purge_stacktrace,1,_}|_] -> - ?line false = code:purge(code_b_test), - ?line [] = erlang:get_stacktrace() + false = code:purge(code_b_test), + [] = erlang:get_stacktrace() end end, ok. mult_lib_roots(Config) when is_list(Config) -> - ?line DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"), - ?line mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"), - ?line mult_lib_compile(DataDir, + DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"), + mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"), + mult_lib_compile(DataDir, "my_dummy_app-c/ebin/code_SUITE_mult_root_module"), %% Set up ERL_LIBS and start a slave node. ErlLibs = filename:join(DataDir, "first_root") ++ mult_lib_sep() ++ filename:join(DataDir, "second_root"), - ?line {ok,Node} = + {ok,Node} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS "++ErlLibs}]), - ?line TSPath = filename:dirname(code:which(test_server)), - ?line Path0 = rpc:call(Node, code, get_path, []), - ?line [TSPath,"."|Path1] = Path0, - ?line [Kernel|Path2] = Path1, - ?line [Stdlib|Path3] = Path2, - ?line mult_lib_verify_lib(Kernel, "kernel"), - ?line mult_lib_verify_lib(Stdlib, "stdlib"), - ?line [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3, + TSPath = filename:dirname(code:which(test_server)), + Path0 = rpc:call(Node, code, get_path, []), + [TSPath,"."|Path1] = Path0, + [Kernel|Path2] = Path1, + [Stdlib|Path3] = Path2, + mult_lib_verify_lib(Kernel, "kernel"), + mult_lib_verify_lib(Stdlib, "stdlib"), + [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3, + - ["first_root/my_dummy_app-a/ebin", "first_root/my_dummy_app-b/ebin", "first_root/my_dummy_app-c/ebin", @@ -1103,7 +1099,7 @@ mult_lib_roots(Config) when is_list(Config) -> E <- lists:sort([Lib1,Lib2,Lib3,Lib4,Lib5])], io:format("~p\n", [Path]), - ?line true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []), + true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []), ok. @@ -1113,7 +1109,7 @@ mult_lib_compile(Root, Last) -> Dir = filename:dirname(Name), {ok,Mod} = compile:file(Name, [report,{outdir,Dir}]), ok. - + mult_lib_sep() -> case os:type() of {win32,_} -> ";"; @@ -1123,23 +1119,23 @@ mult_lib_sep() -> mult_lib_verify_lib(Path, Expected) -> Dir = filename:basename(filename:dirname(Path)), true = lists:prefix(Expected, Dir). - + mult_lib_remove_prefix([H|T1], [H|T2]) -> mult_lib_remove_prefix(T1, T2); mult_lib_remove_prefix([$/|T], []) -> T. bad_erl_libs(Config) when is_list(Config) -> - ?line {ok,Node} = + {ok,Node} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS "}]), - ?line ?t:stop_node(Node), + ?t:stop_node(Node), - ?line {ok,Node2} = + {ok,Node2} = ?t:start_node(mult_lib_roots, slave, [{args,"-env ERL_LIBS /no/such/dir"}]), - ?line ?t:stop_node(Node2), + ?t:stop_node(Node2), ok. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -1158,55 +1154,55 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) -> PrivDir = ?config(priv_dir, Config), App = code_archive_dict, VsnBase = atom_to_list(App) ++ "-1.0", - Base = + Base = case StripVsn of true -> atom_to_list(App); false -> VsnBase end, Ext = init:archive_extension(), RootDir = filename:join([PrivDir, Root]), - ?line ok = file:make_dir(RootDir), + ok = file:make_dir(RootDir), Archive = filename:join([RootDir, VsnBase ++ Ext]), - ?line {ok, _} = zip:create(Archive, [VsnBase], + {ok, _} = zip:create(Archive, [VsnBase], [{compress, []}, {cwd, DataDir}]), - ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]), + {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]), case StripVsn of true -> - ?line ok = file:rename(filename:join([PrivDir, VsnBase]), + ok = file:rename(filename:join([PrivDir, VsnBase]), filename:join([PrivDir, Base])); false -> ok end, - + io:format("DEBUG: ~p\n", [?LINE]), %% Compile the code - ?line ok = compile_app(PrivDir, Base), - + ok = compile_app(PrivDir, Base), + %% Create the archive - ?line ok = file:delete(Archive), - ?line {ok, _} = zip:create(Archive, [Base], + ok = file:delete(Archive), + {ok, _} = zip:create(Archive, [Base], [{compress, []}, {cwd, PrivDir}]), %% Set up ERL_LIBS and start a slave node. - ?line {ok, Node} = + {ok, Node} = ?t:start_node(code_archive, slave, [{args,"-env ERL_LIBS " ++ RootDir}]), - ?line CodePath = rpc:call(Node, code, get_path, []), + CodePath = rpc:call(Node, code, get_path, []), AppEbin = filename:join([Archive, Base, "ebin"]), io:format("AppEbin: ~p\n", [AppEbin]), io:format("CodePath: ~p\n", [CodePath]), io:format("Archive: ~p\n", [erl_prim_loader:read_file_info(Archive)]), - ?line true = lists:member(AppEbin, CodePath), + true = lists:member(AppEbin, CodePath), %% Start the app - ?line ok = rpc:call(Node, application, start, [App]), - + ok = rpc:call(Node, application, start, [App]), + %% Access the app priv dir AppPrivDir = rpc:call(Node, code, priv_dir, [App]), - ?line AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]), + AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]), io:format("AppPrivFile: ~p\n", [AppPrivFile]), - ?line {ok, _Bin, _Path} = + {ok, _Bin, _Path} = rpc:call(Node, erl_prim_loader, get_file, [AppPrivFile]), %% Use the app @@ -1221,14 +1217,14 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) -> error = rpc:call(Node, App, find, [Tab, Key]), ok = rpc:call(Node, App, erase, [Tab]), - ?line ?t:stop_node(Node), + ?t:stop_node(Node), ok. compile_app(TopDir, AppName) -> AppDir = filename:join([TopDir, AppName]), SrcDir = filename:join([AppDir, "src"]), OutDir = filename:join([AppDir, "ebin"]), - ?line {ok, Files} = file:list_dir(SrcDir), + {ok, Files} = file:list_dir(SrcDir), compile_files(Files, SrcDir, OutDir). compile_files([File | Files], SrcDir, OutDir) -> @@ -1253,27 +1249,27 @@ big_boot_embedded(doc) -> ["Test that a boot file with (almost) all of OTP can be used to start an" " embeddedd system."]; big_boot_embedded(Config) when is_list(Config) -> - ?line {BootArg,AppsInBoot} = create_big_boot(Config), - ?line {ok, Node} = + {BootArg,AppsInBoot} = create_big_boot(Config), + {ok, Node} = ?t:start_node(big_boot_embedded, slave, [{args,"-boot "++BootArg++" -mode embedded"}]), - ?line RemoteNodeApps = - [ {X,Y} || {X,_,Y} <- + RemoteNodeApps = + [ {X,Y} || {X,_,Y} <- rpc:call(Node,application,loaded_applications,[]) ], - ?line true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps), + true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps), ok. on_load(Config) when is_list(Config) -> Master = on_load_test_case_process, - ?line Data = filename:join([?config(data_dir, Config),"on_load"]), - ?line ok = file:set_cwd(Data), - ?line up_to_date = make:all([{d,'MASTER',Master}]), + Data = filename:join([?config(data_dir, Config),"on_load"]), + ok = file:set_cwd(Data), + up_to_date = make:all([{d,'MASTER',Master}]), %% Register a name for this process. - ?line register(Master, self()), - - ?line {_,Ref} = spawn_monitor(fun() -> + register(Master, self()), + + {_,Ref} = spawn_monitor(fun() -> exit(on_load_a:data()) end), receive @@ -1285,8 +1281,8 @@ on_load(Config) when is_list(Config) -> receive {on_load_c,PidC} -> ok end, - - ?line Refs = on_load_massive_spawn(lists:seq(1, 50)), + + Refs = on_load_massive_spawn(lists:seq(1, 50)), receive after 7 -> ok end, PidC ! go, @@ -1304,13 +1300,13 @@ on_load(Config) when is_list(Config) -> receive {'DOWN',Ref,process,_,Res} -> - ?line [a,b,c] = Res + [a,b,c] = Res end, on_load_wait_for_all(Refs), receive Any -> - ?line ?t:fail({unexpected,Any}) + ?t:fail({unexpected,Any}) after 10 -> ok end. @@ -1377,13 +1373,13 @@ on_load_embedded(Config) when is_list(Config) -> end. on_load_embedded_1(Config) -> - ?line DataDir = ?config(data_dir, Config), + DataDir = ?config(data_dir, Config), %% Link the on_load_app application into the lib directory. - ?line LibRoot = code:lib_dir(), - ?line LinkName = filename:join(LibRoot, "on_load_app-1.0"), - ?line OnLoadApp = filename:join(DataDir, "on_load_app-1.0"), - ?line del_link(LinkName), + LibRoot = code:lib_dir(), + LinkName = filename:join(LibRoot, "on_load_app-1.0"), + OnLoadApp = filename:join(DataDir, "on_load_app-1.0"), + del_link(LinkName), io:format("LinkName :~p, OnLoadApp: ~p~n",[LinkName,OnLoadApp]), case file:make_symlink(OnLoadApp, LinkName) of {error,enotsup} -> @@ -1392,28 +1388,28 @@ on_load_embedded_1(Config) -> end, %% Compile the code. - ?line OnLoadAppEbin = filename:join(LinkName, "ebin"), - ?line {ok,_ } = compile:file(filename:join([OnLoadApp,"src", + OnLoadAppEbin = filename:join(LinkName, "ebin"), + {ok,_ } = compile:file(filename:join([OnLoadApp,"src", "on_load_embedded"]), [{outdir,OnLoadAppEbin}]), %% Create and compile a boot file. - ?line true = code:add_pathz(OnLoadAppEbin), + true = code:add_pathz(OnLoadAppEbin), Options = case is_source_dir() of true -> [local]; false -> [] end, - ?line BootScript = create_boot(Config, Options), - ?line true = code:del_path(OnLoadAppEbin), + BootScript = create_boot(Config, Options), + true = code:del_path(OnLoadAppEbin), %% Start the node and check that the on_load function was run. - ?line {ok,Node} = start_node(on_load_embedded, + {ok,Node} = start_node(on_load_embedded, "-mode embedded -boot " ++ BootScript), ok = rpc:call(Node, on_load_embedded, status, []), %% Clean up. - ?line stop_node(Node), - ?line ok = del_link(LinkName). + stop_node(Node), + ok = del_link(LinkName). del_link(LinkName) -> case file:delete(LinkName) of @@ -1421,100 +1417,91 @@ del_link(LinkName) -> file:del_dir(LinkName); Other -> Other - end. + end. create_boot(Config, Options) -> - ?line {ok, OldDir} = file:get_cwd(), - ?line {LatestDir,LatestName} = create_script(Config), - ?line ok = file:set_cwd(LatestDir), - ?line ok = systools:make_script(LatestName, Options), - ?line ok = file:set_cwd(OldDir), + {ok, OldDir} = file:get_cwd(), + {LatestDir,LatestName} = create_script(Config), + ok = file:set_cwd(LatestDir), + ok = systools:make_script(LatestName, Options), + ok = file:set_cwd(OldDir), filename:join(LatestDir, LatestName). create_script(Config) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Name = PrivDir ++ "on_load_test", - ?line Apps = application_controller:which_applications(), - ?line {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps), - ?line {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps), - ?line {ok,Fd} = file:open(Name ++ ".rel", [write]), - ?line io:format(Fd, + PrivDir = ?config(priv_dir, Config), + Name = PrivDir ++ "on_load_test", + Apps = application_controller:which_applications(), + {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps), + {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps), + {ok,Fd} = file:open(Name ++ ".rel", [write]), + io:format(Fd, "{release, {\"Test release 3\", \"P2A\"}, \n" " {erts, \"9.42\"}, \n" " [{kernel, \"~s\"}, {stdlib, \"~s\"}," " {on_load_app, \"1.0\"}]}.\n", [KernelVer,StdlibVer]), - ?line file:close(Fd), + file:close(Fd), {filename:dirname(Name),filename:basename(Name)}. create_big_boot(Config) -> - ?line {ok, OldDir} = file:get_cwd(), - ?line {Options,Local} = case is_source_dir() of - true -> {[no_module_tests,local],true}; - _ -> {[no_module_tests],false} + {ok, OldDir} = file:get_cwd(), + {Options,Local} = case is_source_dir() of + true -> {[no_module_tests,local],true}; + _ -> {[no_module_tests],false} end, - ?line {LatestDir,LatestName,Apps} = create_big_script(Config,Local), - ?line ok = file:set_cwd(LatestDir), - ?line ok = systools:make_script(LatestName, Options), - ?line ok = file:set_cwd(OldDir), + {LatestDir,LatestName,Apps} = create_big_script(Config,Local), + ok = file:set_cwd(LatestDir), + ok = systools:make_script(LatestName, Options), + ok = file:set_cwd(OldDir), {filename:join(LatestDir, LatestName),Apps}. -% The following apps cannot be loaded +% The following apps cannot be loaded % hipe .app references (or can reference) files that have no % corresponding beam file (if hipe is not enabled) -filter_app("hipe",_) -> - false; +filter_app("hipe",_) -> false; % Dialyzer and typer depends on hipe -filter_app("dialyzer",_) -> - false; -filter_app("typer",_) -> - false; +filter_app("dialyzer",_) -> false; +filter_app("typer",_) -> false; % Orber requires explicit configuration -filter_app("orber",_) -> - false; +filter_app("orber",_) -> false; % cos* depends on orber -filter_app("cos"++_,_) -> - false; +filter_app("cos"++_,_) -> false; % ic has a mod instruction in the app file but no corresponding start function -filter_app("ic",_) -> - false; +filter_app("ic",_) -> false; % Netconf has some dependency that I really do not understand (maybe like orber) -filter_app("netconf",_) -> - false; +filter_app("netconf",_) -> false; % Safe has the same kind of error in the .app file as ic -filter_app("safe",_) -> - false; +filter_app("safe",_) -> false; % Comte cannot be started in the "usual" way -filter_app("comte",_) -> - false; +filter_app("comte",_) -> false; % OS_mon does not find it's port program when running cerl -filter_app("os_mon",true) -> - false; +filter_app("os_mon",true) -> false; +% erts is not a "real" app either =/ +filter_app("erts",_) -> false; % Other apps should be OK. -filter_app(_,_) -> - true. +filter_app(_,_) -> true. create_big_script(Config,Local) -> - ?line PrivDir = ?config(priv_dir, Config), - ?line Name = filename:join(PrivDir,"full_script_test"), - ?line InitialApplications=application:loaded_applications(), + PrivDir = ?config(priv_dir, Config), + Name = filename:join(PrivDir,"full_script_test"), + InitialApplications=application:loaded_applications(), %% Applications left loaded by the application suite, unload them! - ?line UnloadFix=[app0,app1,app2,group_leader,app_start_error], - ?line [application:unload(Leftover) || + UnloadFix=[app0,app1,app2,group_leader,app_start_error], + [application:unload(Leftover) || Leftover <- UnloadFix, lists:keymember(Leftover,1,InitialApplications) ], %% Now we should have only "real" applications... - ?line [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], - ?line Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], - ?line {ok,Fd} = file:open(Name ++ ".rel", [write]), - ?line io:format(Fd, + [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)], + Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()], + {ok,Fd} = file:open(Name ++ ".rel", [write]), + io:format(Fd, "{release, {\"Test release 3\", \"P2A\"}, \n" " {erts, \"9.42\"}, \n" " ~p}.\n", [Apps]), - ?line file:close(Fd), - ?line NewlyLoaded = + file:close(Fd), + NewlyLoaded = application:loaded_applications() -- InitialApplications, - ?line [ application:unload(N) || {N,_,_} <- NewlyLoaded], + [ application:unload(N) || {N,_,_} <- NewlyLoaded], {filename:dirname(Name),filename:basename(Name),Apps}. is_source_dir() -> @@ -1523,35 +1510,35 @@ is_source_dir() -> on_load_errors(Config) when is_list(Config) -> Master = on_load_error_test_case_process, - ?line register(Master, self()), + register(Master, self()), - ?line Data = filename:join([?config(data_dir, Config),"on_load_errors"]), - ?line ok = file:set_cwd(Data), - ?line up_to_date = make:all([{d,'MASTER',Master}]), + Data = filename:join([?config(data_dir, Config),"on_load_errors"]), + ok = file:set_cwd(Data), + up_to_date = make:all([{d,'MASTER',Master}]), - ?line do_on_load_error(an_atom), + do_on_load_error(an_atom), - ?line error_logger:add_report_handler(?MODULE, self()), + error_logger:add_report_handler(?MODULE, self()), - ?line do_on_load_error({something,terrible,is,wrong}), + do_on_load_error({something,terrible,is,wrong}), receive Any1 -> - ?line {_, "The on_load function"++_, + {_, "The on_load function"++_, [on_load_error, {something,terrible,is,wrong},_]} = Any1 end, - ?line do_on_load_error(fail), %Cause exception. + do_on_load_error(fail), %Cause exception. receive Any2 -> - ?line {_, "The on_load function"++_, + {_, "The on_load function"++_, [on_load_error,{failed,[_|_]},_]} = Any2 end, %% There should be no more messages. receive Unexpected -> - ?line ?t:fail({unexpected,Unexpected}) + ?t:fail({unexpected,Unexpected}) after 10 -> ok end, @@ -1559,14 +1546,14 @@ on_load_errors(Config) when is_list(Config) -> ok. do_on_load_error(ReturnValue) -> - ?line {_,Ref} = spawn_monitor(fun() -> + {_,Ref} = spawn_monitor(fun() -> exit(on_load_error:main()) end), receive {on_load_error,ErrorPid} -> ok end, - ?line ErrorPid ! ReturnValue, + ErrorPid ! ReturnValue, receive {'DOWN',Ref,process,_,Exit} -> - ?line {undef,[{on_load_error,main,[],_}|_]} = Exit + {undef,[{on_load_error,main,[],_}|_]} = Exit end. native_early_modules(suite) -> []; @@ -1580,10 +1567,10 @@ native_early_modules(Config) when is_list(Config) -> end. native_early_modules_1(Architecture) -> - ?line {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists), - ?line ChunkName = hipe_unified_loader:chunk_name(Architecture), - ?line NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]), - ?line IsHipeCompiled = case NativeChunk of + {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists), + ChunkName = hipe_unified_loader:chunk_name(Architecture), + NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]), + IsHipeCompiled = case NativeChunk of {ok,{_,[{_,Bin}]}} when is_binary(Bin) -> true; {error, beam_lib, _} -> false end, @@ -1591,10 +1578,10 @@ native_early_modules_1(Architecture) -> false -> {skip,"OTP apparently not configured with --enable-native-libs"}; true -> - ?line true = lists:all(fun code:is_module_native/1, - [ets,file,filename,gb_sets,gb_trees, - %%hipe_unified_loader, no_native as workaround - lists,os]), + true = lists:all(fun code:is_module_native/1, + [ets,file,filename,gb_sets,gb_trees, + %%hipe_unified_loader, no_native as workaround + lists,os]), ok end. diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl index 62ba95e1a3..ed43749cc0 100644 --- a/lib/kernel/test/inet_SUITE.erl +++ b/lib/kernel/test/inet_SUITE.erl @@ -38,10 +38,10 @@ gethostnative_debug_level/0, gethostnative_debug_level/1, getif/1, getif_ifr_name_overflow/1,getservbyname_overflow/1, getifaddrs/1, - parse_strict_address/1]). + parse_strict_address/1, simple_netns/1]). -export([get_hosts/1, get_ipv6_hosts/1, parse_hosts/1, parse_address/1, - kill_gethost/0, parallell_gethost/0]). + kill_gethost/0, parallell_gethost/0, test_netns/0]). -export([init_per_testcase/2, end_per_testcase/2]). suite() -> [{ct_hooks,[ts_install_cth]}]. @@ -53,7 +53,7 @@ all() -> t_gethostnative, gethostnative_parallell, cname_loop, gethostnative_debug_level, gethostnative_soft_restart, getif, getif_ifr_name_overflow, getservbyname_overflow, - getifaddrs, parse_strict_address]. + getifaddrs, parse_strict_address, simple_netns]. groups() -> [{parse, [], [parse_hosts, parse_address]}]. @@ -226,7 +226,7 @@ t_gethostbyname_v6(Config) when is_list(Config) -> h_addr_list = [IP4]} = HEnt4, {ok,IP46} = inet_parse:ipv6_address( - "::ffff:" ++ inet_parse:ntoa(IP4)), + "::ffff:" ++ inet:ntoa(IP4)), check_elems( [{HEnt#hostent.h_name,[Name,FullName]}]) end, @@ -246,7 +246,7 @@ t_gethostbyname_v6(Config) when is_list(Config) -> h_addr_list = [IP4F]} = HEnt4F, {ok,IP46F} = inet_parse:ipv6_address( - "::ffff:" ++ inet_parse:ntoa(IP4F)), + "::ffff:" ++ inet:ntoa(IP4F)), check_elems( [{HEntF#hostent.h_name,[Name,FullName]}]) end; @@ -1099,3 +1099,96 @@ toupper([C|Cs]) when is_integer(C) -> end; toupper([]) -> []. + + +simple_netns(Config) when is_list(Config) -> + {ok,U} = gen_udp:open(0), + case inet:setopts(U, [{netns,""}]) of + ok -> + jog_netns_opt(U), + ok = gen_udp:close(U), + %% + {ok,L} = gen_tcp:listen(0, []), + jog_netns_opt(L), + ok = gen_tcp:close(L), + %% + {ok,S} = gen_sctp:open(), + jog_netns_opt(S), + ok = gen_sctp:close(S); + {error,einval} -> + {skip,"setns() not supported"} + end. + +jog_netns_opt(S) -> + %% This is just jogging the option mechanics + ok = inet:setopts(S, [{netns,""}]), + {ok,[{netns,""}]} = inet:getopts(S, [netns]), + ok = inet:setopts(S, [{netns,"/proc/self/ns/net"}]), + {ok,[{netns,"/proc/self/ns/net"}]} = inet:getopts(S, [netns]), + ok. + + +%% Manual test to be run outside test_server in an emulator +%% started by root, in a machine with setns() support... +test_netns() -> + DefaultIF = v1, + DefaultIP = {192,168,1,17}, + Namespace = "test", + NamespaceIF = v2, + NamespaceIP = {192,168,1,18}, + %% + DefaultIPString = inet_parse:ntoa(DefaultIP), + NamespaceIPString = inet_parse:ntoa(NamespaceIP), + cmd("ip netns add ~s", + [Namespace]), + cmd("ip link add name ~w type veth peer name ~w netns ~s", + [DefaultIF,NamespaceIF,Namespace]), + cmd("ip netns exec ~s ip addr add ~s/30 dev ~w", + [Namespace,NamespaceIPString,NamespaceIF]), + cmd("ip netns exec ~s ip link set ~w up", + [Namespace,NamespaceIF]), + cmd("ip addr add ~s/30 dev ~w", + [DefaultIPString,DefaultIF]), + cmd("ip link set ~w up", + [DefaultIF]), + try test_netns( + {DefaultIF,DefaultIP}, + filename:join("/var/run/netns/", Namespace), + {NamespaceIF,NamespaceIP}) of + Result -> + io:put_chars(["#### Test done",io_lib:nl()]), + Result + after + cmd("ip link delete ~w type veth", + [DefaultIF]), + cmd("ip netns delete ~s", + [Namespace]) + end. + +test_netns({DefaultIF,DefaultIP}, Namespace, {NamespaceIF,NamespaceIP}) -> + {ok,ListenSocket} = gen_tcp:listen(0, [{active,false}]), + {ok,[{addr,DefaultIP}]} = inet:ifget(ListenSocket, DefaultIF, [addr]), + {ok,ListenPort} = inet:port(ListenSocket), + {ok,ConnectSocket} = + gen_tcp:connect( + DefaultIP, ListenPort, [{active,false},{netns,Namespace}], 3000), + {ok,[{addr,NamespaceIP}]} = inet:ifget(ConnectSocket, NamespaceIF, [addr]), + {ok,ConnectPort} = inet:port(ConnectSocket), + {ok,AcceptSocket} = gen_tcp:accept(ListenSocket, 0), + {ok,AcceptPort} = inet:port(AcceptSocket), + {ok,{NamespaceIP,ConnectPort}} = inet:peername(AcceptSocket), + {ok,{DefaultIP,AcceptPort}} = inet:peername(ConnectSocket), + ok = gen_tcp:send(ConnectSocket, "data"), + ok = gen_tcp:close(ConnectSocket), + {ok,"data"} = gen_tcp:recv(AcceptSocket, 4, 1000), + {error,closed} = gen_tcp:recv(AcceptSocket, 1, 1000), + ok = gen_tcp:close(AcceptSocket), + ok = gen_tcp:close(ListenSocket). + +cmd(Cmd, Args) -> + cmd(io_lib:format(Cmd, Args)). +%% +cmd(CmdString) -> + io:put_chars(["# ",CmdString,io_lib:nl()]), + io:put_chars([os:cmd(CmdString++" ; echo ' =>' $?")]), + ok. diff --git a/lib/kernel/test/interactive_shell_SUITE.erl b/lib/kernel/test/interactive_shell_SUITE.erl index d7d9434b1f..a375adceea 100644 --- a/lib/kernel/test/interactive_shell_SUITE.erl +++ b/lib/kernel/test/interactive_shell_SUITE.erl @@ -22,7 +22,7 @@ init_per_group/2,end_per_group/2, get_columns_and_rows/1, exit_initial/1, job_control_local/1, job_control_remote/1, - job_control_remote_noshell/1]). + job_control_remote_noshell/1,ctrl_keys/1]). -export([init_per_testcase/2, end_per_testcase/2]). %% For spawn @@ -41,7 +41,8 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [get_columns_and_rows, exit_initial, job_control_local, - job_control_remote, job_control_remote_noshell]. + job_control_remote, job_control_remote_noshell, + ctrl_keys]. groups() -> []. @@ -289,7 +290,51 @@ job_control_remote_noshell(Config) when is_list(Config) -> ?line stop_noshell_node(NSNode), ?line Res end. - + +ctrl_keys(suite) -> []; +ctrl_keys(doc) -> ["Tests various control keys"]; +ctrl_keys(_Conf) when is_list(_Conf) -> + Cu=[$\^u], + Cw=[$\^w], + Home=[27,$O,$H], + End=[27,$O,$F], + rtnode([{putline,""}, + {putline,"2."}, + {getline,"2"}, + {putline,"\"hello "++Cw++"world\"."}, % test <CTRL>+W + {getline,"\"world\""}, + {putline,"\"hello "++Cu++"\"world\"."}, % test <CTRL>+U + {getline,"\"world\""}, + {putline,"world\"."++Home++"\"hello "}, % test <HOME> + {getline,"\"hello world\""}, + {putline,"world"++Home++"\"hello "++End++"\"."}, % test <END> + {getline,"\"hello world\""}] + ++wordLeft()++wordRight(),[]). + + +wordLeft() -> + L1=[27,27,$[,$D], + L2=[27]++"[5D", + L3=[27]++"[1;5D", + wordLeft(L1)++wordLeft(L2)++wordLeft(L3). + +wordLeft(Chars) -> + End=[27,$O,$F], + [{putline,"\"world\""++Chars++"hello "++End++"."}, + {getline,"\"hello world\""}]. + +wordRight() -> + R1=[27,27,$[,$C], + R2=[27]++"[5C", + R3=[27]++"[1;5C", + wordRight(R1)++wordRight(R2)++wordRight(R3). + +wordRight(Chars) -> + Home=[27,$O,$H], + [{putline,"world"++Home++"\"hello "++Chars++"\"."}, + {getline,"\"hello world\""}]. + + rtnode(C,N) -> rtnode(C,N,[]). rtnode(Commands,Nodename,ErlPrefix) -> diff --git a/lib/kernel/test/kernel_smoke.spec b/lib/kernel/test/kernel_smoke.spec new file mode 100644 index 0000000000..e5d8273c56 --- /dev/null +++ b/lib/kernel/test/kernel_smoke.spec @@ -0,0 +1,9 @@ +{config, "../test_server/ts.config"}. +{config, "../test_server/ts.unix.config"}. + +{cases,"../kernel_test", inet_SUITE,[t_gethostbyaddr,t_gethostbyname, + t_gethostbyaddr_v6,t_gethostbyname_v6,t_gethostnative,getifaddrs]}. +{cases,"../kernel_test", inet_res_SUITE,[gethostbyaddr,gethostbyname, + gethostbyaddr_v6,gethostbyname_v6,basic]}. +{cases,"../kernel_test", gen_tcp_echo_SUITE,[active_echo]}. +{cases,"../kernel_test", heart_SUITE,[reboot]}. diff --git a/lib/megaco/aclocal.m4 b/lib/megaco/aclocal.m4 index 25f40944e7..46b30a16b3 100644 --- a/lib/megaco/aclocal.m4 +++ b/lib/megaco/aclocal.m4 @@ -954,6 +954,40 @@ dnl AC_DEFUN(ERL_FIND_ETHR_LIB, [ +AC_ARG_ENABLE(native-ethr-impls, + AS_HELP_STRING([--disable-native-ethr-impls], + [disable native ethread implementations]), +[ case "$enableval" in + no) disable_native_ethr_impls=yes ;; + *) disable_native_ethr_impls=no ;; + esac ], disable_native_ethr_impls=no) + +test "X$disable_native_ethr_impls" = "Xyes" && + AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) + +AC_ARG_ENABLE(x86-out-of-order, + AS_HELP_STRING([--enable-x86-out-of-order], + [enable x86/x84_64 out of order support (default disabled)])) + +AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, + AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], + [prefer gcc native ethread implementations]), +[ case "$enableval" in + yes) enable_prefer_gcc_native_ethr_impls=yes ;; + *) enable_prefer_gcc_native_ethr_impls=no ;; + esac ], enable_prefer_gcc_native_ethr_impls=no) + +test $enable_prefer_gcc_native_ethr_impls = yes && + AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) + +AC_ARG_WITH(libatomic_ops, + AS_HELP_STRING([--with-libatomic_ops=PATH], + [specify and prefer usage of libatomic_ops in the ethread library])) + +AC_ARG_WITH(with_sparc_memory_order, + AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], + [specify sparc memory order (defaults to RMO)])) + LM_CHECK_THR_LIB ERL_INTERNAL_LIBS @@ -1003,40 +1037,44 @@ case "$THR_LIB_NAME" in AC_DEFINE(ETHR_WIN32_THREADS, 1, [Define if you have win32 threads]) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) - + if test "X$disable_native_ethr_impls" = "Xyes"; then + have_interlocked_op=no + ethr_have_native_atomics=no + else + ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) + fi test "$ethr_have_native_atomics" = "yes" && ethr_have_native_spinlock=yes ;; @@ -1303,93 +1341,98 @@ case "$THR_LIB_NAME" in int128="__int128_t" fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + if test "X$disable_native_ethr_impls" = "Xyes"; then + ethr_have_native_atomics=no + else + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + + if test $int128 != no; then + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) + fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + AC_MSG_CHECKING([for a usable libatomic_ops implementation]) + case "x$with_libatomic_ops" in + xno | xyes | x) + libatomic_ops_include= + ;; + *) + if test -d "${with_libatomic_ops}/include"; then + libatomic_ops_include="-I$with_libatomic_ops/include" + CPPFLAGS="$CPPFLAGS $libatomic_ops_include" + else + AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) + fi;; + esac + ethr_have_libatomic_ops=no + AC_TRY_LINK([#include "atomic_ops.h"], + [ + volatile AO_t x; + AO_t y; + int z; + + AO_nop_full(); + AO_store(&x, (AO_t) 0); + z = AO_load(&x); + z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); + ], + [ethr_have_native_atomics=yes + ethr_have_libatomic_ops=yes]) + AC_MSG_RESULT([$ethr_have_libatomic_ops]) + if test $ethr_have_libatomic_ops = yes; then + AC_CHECK_SIZEOF(AO_t, , + [ + #include <stdio.h> + #include "atomic_ops.h" + ]) + AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) + + AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) + if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) + fi + ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" + elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_MSG_ERROR([No usable libatomic_ops implementation found]) + fi - if test $int128 != no; then - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) - fi + case "$host_cpu" in + sparc | sun4u | sparc64 | sun4v) + case "$with_sparc_memory_order" in + "TSO") + AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; + "PSO") + AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; + "RMO"|"") + AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; + *) + AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; + esac + ethr_have_native_atomics=yes;; + i86pc | i*86 | x86_64 | amd64) + if test "$enable_x86_out_of_order" = "yes"; then + AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) + fi + ethr_have_native_atomics=yes;; + macppc | ppc | powerpc | "Power Macintosh") + ethr_have_native_atomics=yes;; + tile) + ethr_have_native_atomics=yes;; + *) + ;; + esac - AC_MSG_CHECKING([for a usable libatomic_ops implementation]) - case "x$with_libatomic_ops" in - xno | xyes | x) - libatomic_ops_include= - ;; - *) - if test -d "${with_libatomic_ops}/include"; then - libatomic_ops_include="-I$with_libatomic_ops/include" - CPPFLAGS="$CPPFLAGS $libatomic_ops_include" - else - AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) - fi;; - esac - ethr_have_libatomic_ops=no - AC_TRY_LINK([#include "atomic_ops.h"], - [ - volatile AO_t x; - AO_t y; - int z; - - AO_nop_full(); - AO_store(&x, (AO_t) 0); - z = AO_load(&x); - z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); - ], - [ethr_have_native_atomics=yes - ethr_have_libatomic_ops=yes]) - AC_MSG_RESULT([$ethr_have_libatomic_ops]) - if test $ethr_have_libatomic_ops = yes; then - AC_CHECK_SIZEOF(AO_t, , - [ - #include <stdio.h> - #include "atomic_ops.h" - ]) - AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) - - AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) - if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) - fi - ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" - elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_MSG_ERROR([No usable libatomic_ops implementation found]) fi - case "$host_cpu" in - sparc | sun4u | sparc64 | sun4v) - case "$with_sparc_memory_order" in - "TSO") - AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; - "PSO") - AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; - "RMO"|"") - AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; - *) - AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; - esac - ethr_have_native_atomics=yes;; - i86pc | i*86 | x86_64 | amd64) - if test "$enable_x86_out_of_order" = "yes"; then - AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) - fi - ethr_have_native_atomics=yes;; - macppc | ppc | "Power Macintosh") - ethr_have_native_atomics=yes;; - tile) - ethr_have_native_atomics=yes;; - *) - ;; - esac - test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes dnl Restore LIBS @@ -1451,40 +1494,6 @@ esac AC_C_DOUBLE_MIDDLE_ENDIAN -AC_ARG_ENABLE(native-ethr-impls, - AS_HELP_STRING([--disable-native-ethr-impls], - [disable native ethread implementations]), -[ case "$enableval" in - no) disable_native_ethr_impls=yes ;; - *) disable_native_ethr_impls=no ;; - esac ], disable_native_ethr_impls=no) - -AC_ARG_ENABLE(x86-out-of-order, - AS_HELP_STRING([--enable-x86-out-of-order], - [enable x86/x84_64 out of order support (default disabled)])) - -test "X$disable_native_ethr_impls" = "Xyes" && - AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) - -AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, - AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], - [prefer gcc native ethread implementations]), -[ case "$enableval" in - yes) enable_prefer_gcc_native_ethr_impls=yes ;; - *) enable_prefer_gcc_native_ethr_impls=no ;; - esac ], enable_prefer_gcc_native_ethr_impls=no) - -test $enable_prefer_gcc_native_ethr_impls = yes && - AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) - -AC_ARG_WITH(libatomic_ops, - AS_HELP_STRING([--with-libatomic_ops=PATH], - [specify and prefer usage of libatomic_ops in the ethread library])) - -AC_ARG_WITH(with_sparc_memory_order, - AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], - [specify sparc memory order (defaults to RMO)])) - ETHR_X86_SSE2_ASM=no case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64) diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl index fd87be1759..3b084e7371 100644 --- a/lib/mnesia/src/mnesia_bup.erl +++ b/lib/mnesia/src/mnesia_bup.erl @@ -1052,11 +1052,7 @@ local_uninstall_fallback(Master, FA) -> Tmp = FA2#fallback_args.fallback_tmp, Bup = FA2#fallback_args.fallback_bup, file:delete(Tmp), - Res = - case fallback_exists(Bup) of - true -> file:delete(Bup); - false -> ok - end, + Res = file:delete(Bup), ?eval_debug_fun({?MODULE, uninstall_fallback2, post_delete}, []), Master ! {self(), Res}, unlink(Master), diff --git a/lib/mnesia/src/mnesia_checkpoint.erl b/lib/mnesia/src/mnesia_checkpoint.erl index eb8fe38908..173e3be2f5 100644 --- a/lib/mnesia/src/mnesia_checkpoint.erl +++ b/lib/mnesia/src/mnesia_checkpoint.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2009. All Rights Reserved. +%% Copyright Ericsson AB 1996-2013 %% %% 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 @@ -31,8 +31,7 @@ tm_retain/5, tm_enter_pending/1, tm_enter_pending/3, - tm_exit_pending/1, - convert_cp_record/1 + tm_exit_pending/1 ]). %% Public interface @@ -88,25 +87,6 @@ pid }). -%% Old record definition --record(checkpoint, {name, - allow_remote, - ram_overrides_dump, - nodes, - node, - now, - min, - max, - pending_tab, - wait_for_old, - is_activated, - ignore_new, - retainers, - iterators, - supervisor, - pid - }). - -record(retainer, {cp_name, tab_name, store, writers = [], really_retain = true}). -record(iter, {tab_name, oid_tab, main_tab, retainer_tab, source, val, pid}). @@ -129,15 +109,6 @@ tm_prepare(Cp) when is_record(Cp, checkpoint_args) -> start_retainer(Cp); true -> {error, {already_exists, Name, node()}} - end; -tm_prepare(Cp) when is_record(Cp, checkpoint) -> - %% Node with old protocol sent an old checkpoint record - %% and we have to convert it - case convert_cp_record(Cp) of - {ok, NewCp} -> - tm_prepare(NewCp); - {error, Reason} -> - {error, Reason} end. tm_mnesia_down(Node) -> @@ -156,6 +127,7 @@ tm_enter_pending(Pending) -> tm_enter_pending([], Pending) -> Pending; tm_enter_pending([Tab | Tabs], Pending) -> + %% io:format("Add ~p ~p ~p~n",[Tab, Pending, hd(tl(element(2, process_info(self(), current_stacktrace))))]), catch ?ets_insert(Tab, Pending), tm_enter_pending(Tabs, Pending). @@ -371,9 +343,7 @@ activate(Args) -> end. args2cp(Args) when is_list(Args)-> - case catch lists:foldl(fun check_arg/2, #checkpoint_args{}, Args) of - {'EXIT', Reason} -> - {error, Reason}; + try lists:foldl(fun check_arg/2, #checkpoint_args{}, Args) of Cp -> case check_tables(Cp) of {error, Reason} -> @@ -381,6 +351,10 @@ args2cp(Args) when is_list(Args)-> {ok, Overriders, AllTabs} -> arrange_retainers(Cp, Overriders, AllTabs) end + catch exit:Reason -> + {error, Reason}; + error:Reason -> + {error, Reason} end; args2cp(Args) -> {error, {badarg, Args}}. @@ -390,10 +364,10 @@ check_arg({name, Name}, Cp) -> true -> exit({already_exists, Name}); false -> - case catch tab2retainer({foo, Name}) of - List when is_list(List) -> - Cp#checkpoint_args{name = Name}; - _ -> + try + [_|_] = tab2retainer({foo, Name}), + Cp#checkpoint_args{name = Name} + catch _:_ -> exit({badarg, Name}) end end; @@ -641,11 +615,7 @@ init(Cp) -> process_flag(priority, high), %% Needed dets files might starve the system Name = Cp#checkpoint_args.name, Props = [set, public, {keypos, 2}], - case catch ?ets_new_table(mnesia_pending_checkpoint, Props) of - {'EXIT', Reason} -> %% system limit - Msg = "Cannot create an ets table for pending transactions", - Error = {error, {system_limit, Name, Msg, Reason}}, - proc_lib:init_ack(Cp#checkpoint_args.supervisor, Error); + try ?ets_new_table(mnesia_pending_checkpoint, Props) of PendingTab -> Rs = [prepare_tab(Cp, R) || R <- Cp#checkpoint_args.retainers], Cp2 = Cp#checkpoint_args{retainers = Rs, @@ -658,6 +628,10 @@ init(Cp) -> dbg_out("Checkpoint ~p (~p) started~n", [Name, self()]), proc_lib:init_ack(Cp2#checkpoint_args.supervisor, {ok, self()}), retainer_loop(Cp2) + catch error:Reason -> %% system limit + Msg = "Cannot create an ets table for pending transactions", + Error = {error, {system_limit, Name, Msg, Reason}}, + proc_lib:init_ack(Cp#checkpoint_args.supervisor, Error) end. prepare_tab(Cp, R) -> @@ -798,104 +772,142 @@ retainer_delete({dets, Store}) -> Fname = tab2retainer(Store), file:delete(Fname). -retainer_loop(Cp) -> - Name = Cp#checkpoint_args.name, +retainer_loop(Cp = #checkpoint_args{is_activated=false, name=Name}) -> receive - {_From, {retain, Tid, Tab, Key, OldRecs}} - when Cp#checkpoint_args.wait_for_old == [] -> - R = val({Tab, {retainer, Name}}), - PendingTab = Cp#checkpoint_args.pending_tab, - case R#retainer.really_retain of - true when PendingTab =:= undefined -> - Store = R#retainer.store, - case retainer_get(Store, Key) of - [] -> retainer_put(Store, {Tab, Key, OldRecs}); - _ -> already_retained - end; - true -> - case ets:member(PendingTab, Tid) of - true -> ignore; - false -> - Store = R#retainer.store, - case retainer_get(Store, Key) of - [] -> retainer_put(Store, {Tab, Key, OldRecs}); - _ -> already_retained - end - end; - false -> - ignore - end, - retainer_loop(Cp); - %% Adm + {From, {activate, Pending}} -> + StillPending = mnesia_recover:still_pending(Pending), + enter_still_pending(StillPending, Cp#checkpoint_args.pending_tab), + Local = [Tid || #tid{pid=Pid} = Tid <- StillPending, node(Pid) =/= node()], + Cp2 = maybe_activate(Cp#checkpoint_args{wait_for_old = Local}), + + reply(From, Name, activated), + retainer_loop(Cp2); + + {_From, {exit_pending, Tid}} when is_list(Cp#checkpoint_args.wait_for_old) -> + StillPending = lists:delete(Tid, Cp#checkpoint_args.wait_for_old), + Cp2 = Cp#checkpoint_args{wait_for_old = StillPending}, + Cp3 = maybe_activate(Cp2), + retainer_loop(Cp3); + {From, deactivate} -> do_stop(Cp), reply(From, Name, deactivated), unlink(From), exit(shutdown); + {From, get_checkpoint} -> + reply(From, Name, Cp), + retainer_loop(Cp); + {_From, {add_retainer, R, Node}} -> + Cp2 = do_add_retainer(Cp, R, Node), + retainer_loop(Cp2); + + {From, collect_pending} -> + PendingTab = Cp#checkpoint_args.pending_tab, + del(pending_checkpoints, PendingTab), + Pending = ?ets_match_object(PendingTab, '_'), + reply(From, Name, {ok, Pending}), + retainer_loop(Cp); + + {_From, {mnesia_down, Node}} -> + Cp2 = do_del_retainers(Cp, Node), + retainer_loop(Cp2); + {'EXIT', Parent, _} when Parent == Cp#checkpoint_args.supervisor -> %% do_stop(Cp), %% assume that entire Mnesia is terminating exit(shutdown); - {_From, {mnesia_down, Node}} -> - Cp2 = do_del_retainers(Cp, Node), - retainer_loop(Cp2); + {'EXIT', From, _Reason} -> + Iters = [Iter || Iter <- Cp#checkpoint_args.iterators, + check_iter(From, Iter)], + retainer_loop(Cp#checkpoint_args{iterators = Iters}); + + {system, From, Msg} -> + dbg_out("~p got {system, ~p, ~p}~n", [?MODULE, From, Msg]), + sys:handle_system_msg(Msg, From, Cp#checkpoint_args.supervisor, + ?MODULE, [], Cp) + end; + +retainer_loop(Cp = #checkpoint_args{name=Name}) -> + receive + {_From, {retain, Tid, Tab, Key, OldRecs}} -> + R = val({Tab, {retainer, Name}}), + PendingTab = Cp#checkpoint_args.pending_tab, + case R#retainer.really_retain of + true -> + Store = R#retainer.store, + try true = ets:member(PendingTab, Tid), + %% io:format("CP: ~p ~p ~p ~p~n",[true, Tab, Key, Tid]), + case retainer_get(Store, Key) of + [] -> ignore; + _ -> ets:delete(element(2,Store), Key) + end + catch _:_ -> + %% io:format("CP: ~p ~p ~p ~p~n",[false, Tab, Key, Tid]), + case retainer_get(Store, Key) of + [] -> retainer_put(Store, {Tab, Key, OldRecs}); + _ -> already_retained + end + end; + false -> + ignore + end, + retainer_loop(Cp); + + %% Adm {From, get_checkpoint} -> reply(From, Name, Cp), retainer_loop(Cp); - {From, {add_copy, Tab, Node}} when Cp#checkpoint_args.wait_for_old == [] -> + {From, {add_copy, Tab, Node}} -> {Res, Cp2} = do_add_copy(Cp, Tab, Node), reply(From, Name, Res), retainer_loop(Cp2); - {From, {del_copy, Tab, Node}} when Cp#checkpoint_args.wait_for_old == [] -> + {From, {del_copy, Tab, Node}} -> Cp2 = do_del_copy(Cp, Tab, Node), reply(From, Name, ok), retainer_loop(Cp2); - {From, {change_copy, Tab, From, To}} when Cp#checkpoint_args.wait_for_old == [] -> + {From, {change_copy, Tab, From, To}} -> Cp2 = do_change_copy(Cp, Tab, From, To), reply(From, Name, ok), retainer_loop(Cp2); {_From, {add_retainer, R, Node}} -> Cp2 = do_add_retainer(Cp, R, Node), retainer_loop(Cp2); - {_From, {del_retainer, R, Node}} when Cp#checkpoint_args.wait_for_old == [] -> + {_From, {del_retainer, R, Node}} -> Cp2 = do_del_retainer(Cp, R, Node), retainer_loop(Cp2); %% Iteration - {From, {iter_begin, Iter}} when Cp#checkpoint_args.wait_for_old == [] -> + {From, {iter_begin, Iter}} -> Cp2 = iter_begin(Cp, From, Iter), retainer_loop(Cp2); - {From, {iter_end, Iter}} when Cp#checkpoint_args.wait_for_old == [] -> + {From, {iter_end, Iter}} -> retainer_fixtable(Iter#iter.oid_tab, false), Iters = Cp#checkpoint_args.iterators -- [Iter], reply(From, Name, ok), - retainer_loop(Cp#checkpoint_args{iterators = Iters}); - - {_From, {exit_pending, Tid}} - when is_list(Cp#checkpoint_args.wait_for_old) -> - StillPending = lists:delete(Tid, Cp#checkpoint_args.wait_for_old), - Cp2 = Cp#checkpoint_args{wait_for_old = StillPending}, - Cp3 = maybe_activate(Cp2), - retainer_loop(Cp3); + retainer_loop(Cp#checkpoint_args{iterators = Iters}); - {From, collect_pending} -> - PendingTab = Cp#checkpoint_args.pending_tab, - del(pending_checkpoints, PendingTab), - Pending = ?ets_match_object(PendingTab, '_'), - reply(From, Name, {ok, Pending}), + {_From, {exit_pending, _Tid}} -> retainer_loop(Cp); - {From, {activate, Pending}} -> - StillPending = mnesia_recover:still_pending(Pending), - enter_still_pending(StillPending, Cp#checkpoint_args.pending_tab), - Cp2 = maybe_activate(Cp#checkpoint_args{wait_for_old = StillPending}), - reply(From, Name, activated), + {From, deactivate} -> + do_stop(Cp), + reply(From, Name, deactivated), + unlink(From), + exit(shutdown); + + {_From, {mnesia_down, Node}} -> + Cp2 = do_del_retainers(Cp, Node), retainer_loop(Cp2); + {'EXIT', Parent, _} when Parent == Cp#checkpoint_args.supervisor -> + %% do_stop(Cp), + %% assume that entire Mnesia is terminating + exit(shutdown); + {'EXIT', From, _Reason} -> Iters = [Iter || Iter <- Cp#checkpoint_args.iterators, check_iter(From, Iter)], @@ -903,13 +915,17 @@ retainer_loop(Cp) -> {system, From, Msg} -> dbg_out("~p got {system, ~p, ~p}~n", [?MODULE, From, Msg]), - sys:handle_system_msg(Msg, From, no_parent, ?MODULE, [], Cp) + sys:handle_system_msg(Msg, From, Cp#checkpoint_args.supervisor, + ?MODULE, [], Cp); + Msg -> + dbg_out("~p got ~p~n", [?MODULE, Msg]) end. maybe_activate(Cp) - when Cp#checkpoint_args.wait_for_old == [], - Cp#checkpoint_args.is_activated == false -> - Cp#checkpoint_args{pending_tab = undefined, is_activated = true}; + when Cp#checkpoint_args.wait_for_old == [], + Cp#checkpoint_args.is_activated == false -> + Cp#checkpoint_args{%% pending_tab = undefined, + is_activated = true}; maybe_activate(Cp) -> Cp. @@ -1226,65 +1242,6 @@ system_terminate(_Reason, _Parent,_Debug, Cp) -> system_code_change(Cp, _Module, _OldVsn, _Extra) -> {ok, Cp}. -convert_cp_record(Cp) when is_record(Cp, checkpoint) -> - ROD = - case Cp#checkpoint.ram_overrides_dump of - true -> Cp#checkpoint.min ++ Cp#checkpoint.max; - false -> [] - end, - - {ok, #checkpoint_args{name = Cp#checkpoint.name, - allow_remote = Cp#checkpoint.name, - ram_overrides_dump = ROD, - nodes = Cp#checkpoint.nodes, - node = Cp#checkpoint.node, - now = Cp#checkpoint.now, - cookie = ?unique_cookie, - min = Cp#checkpoint.min, - max = Cp#checkpoint.max, - pending_tab = Cp#checkpoint.pending_tab, - wait_for_old = Cp#checkpoint.wait_for_old, - is_activated = Cp#checkpoint.is_activated, - ignore_new = Cp#checkpoint.ignore_new, - retainers = Cp#checkpoint.retainers, - iterators = Cp#checkpoint.iterators, - supervisor = Cp#checkpoint.supervisor, - pid = Cp#checkpoint.pid - }}; -convert_cp_record(Cp) when is_record(Cp, checkpoint_args) -> - AllTabs = Cp#checkpoint_args.min ++ Cp#checkpoint_args.max, - ROD = case Cp#checkpoint_args.ram_overrides_dump of - [] -> - false; - AllTabs -> - true; - _ -> - error - end, - if - ROD == error -> - {error, {"Old node cannot handle new checkpoint protocol", - ram_overrides_dump}}; - true -> - {ok, #checkpoint{name = Cp#checkpoint_args.name, - allow_remote = Cp#checkpoint_args.name, - ram_overrides_dump = ROD, - nodes = Cp#checkpoint_args.nodes, - node = Cp#checkpoint_args.node, - now = Cp#checkpoint_args.now, - min = Cp#checkpoint_args.min, - max = Cp#checkpoint_args.max, - pending_tab = Cp#checkpoint_args.pending_tab, - wait_for_old = Cp#checkpoint_args.wait_for_old, - is_activated = Cp#checkpoint_args.is_activated, - ignore_new = Cp#checkpoint_args.ignore_new, - retainers = Cp#checkpoint_args.retainers, - iterators = Cp#checkpoint_args.iterators, - supervisor = Cp#checkpoint_args.supervisor, - pid = Cp#checkpoint_args.pid - }} - end. - %%%%%%%%%%%%%%%%%%%%%%%%%% val(Var) -> diff --git a/lib/mnesia/test/mnesia_consistency_test.erl b/lib/mnesia/test/mnesia_consistency_test.erl index 922b89ec2b..a76a0116d5 100644 --- a/lib/mnesia/test/mnesia_consistency_test.erl +++ b/lib/mnesia/test/mnesia_consistency_test.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1997-2012. All Rights Reserved. +%% Copyright Ericsson AB 1997-2013. 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 @@ -39,7 +39,6 @@ all() -> {group, consistency_after_move_replica}, {group, consistency_after_transform_table}, consistency_after_change_table_copy_type, - {group, consistency_after_fallback}, {group, consistency_after_restore}, consistency_after_rename_of_node, {group, checkpoint_retainer_consistency}, @@ -99,10 +98,14 @@ groups() -> [{group, updates_during_checkpoint_activation}, {group, updates_during_checkpoint_iteration}, {group, load_table_with_activated_checkpoint}, - {group, - add_table_copy_to_table_checkpoint}]}, + {group, add_table_copy_to_table_checkpoint}, + {group, consistency_after_fallback} + ]}, {updates_during_checkpoint_activation, [], - [updates_during_checkpoint_activation_2_ram, + [updates_during_checkpoint_activation_1_ram, + updates_during_checkpoint_activation_1_disc, + updates_during_checkpoint_activation_1_disc_only, + updates_during_checkpoint_activation_2_ram, updates_during_checkpoint_activation_2_disc, updates_during_checkpoint_activation_2_disc_only, updates_during_checkpoint_activation_3_ram, @@ -730,6 +733,18 @@ consistency_after_rename_of_node(doc) -> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +updates_during_checkpoint_activation_1_ram(suite) -> []; +updates_during_checkpoint_activation_1_ram(Config) when is_list(Config) -> + updates_during_checkpoint_activation(ram_copies, 1, Config). + +updates_during_checkpoint_activation_1_disc(suite) -> []; +updates_during_checkpoint_activation_1_disc(Config) when is_list(Config) -> + updates_during_checkpoint_activation(disc_copies, 1, Config). + +updates_during_checkpoint_activation_1_disc_only(suite) -> []; +updates_during_checkpoint_activation_1_disc_only(Config) when is_list(Config) -> + updates_during_checkpoint_activation(disc_only_copies, 1, Config). + updates_during_checkpoint_activation_2_ram(suite) -> []; updates_during_checkpoint_activation_2_ram(Config) when is_list(Config) -> updates_during_checkpoint_activation(ram_copies, 2, Config). @@ -771,7 +786,8 @@ updates_during_checkpoint_activation(ReplicaType,NodeConfig,Config) -> timer:sleep(timer:seconds(Delay)), {ok, CPName, _NodeList} = - mnesia:activate_checkpoint([{max, mnesia:system_info(tables)}]), + mnesia:activate_checkpoint([{max, mnesia:system_info(tables)}, + {ram_overrides_dump, true}]), timer:sleep(timer:seconds(Delay)), %% Stop tpcb diff --git a/lib/odbc/aclocal.m4 b/lib/odbc/aclocal.m4 index 25f40944e7..46b30a16b3 100644 --- a/lib/odbc/aclocal.m4 +++ b/lib/odbc/aclocal.m4 @@ -954,6 +954,40 @@ dnl AC_DEFUN(ERL_FIND_ETHR_LIB, [ +AC_ARG_ENABLE(native-ethr-impls, + AS_HELP_STRING([--disable-native-ethr-impls], + [disable native ethread implementations]), +[ case "$enableval" in + no) disable_native_ethr_impls=yes ;; + *) disable_native_ethr_impls=no ;; + esac ], disable_native_ethr_impls=no) + +test "X$disable_native_ethr_impls" = "Xyes" && + AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) + +AC_ARG_ENABLE(x86-out-of-order, + AS_HELP_STRING([--enable-x86-out-of-order], + [enable x86/x84_64 out of order support (default disabled)])) + +AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, + AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], + [prefer gcc native ethread implementations]), +[ case "$enableval" in + yes) enable_prefer_gcc_native_ethr_impls=yes ;; + *) enable_prefer_gcc_native_ethr_impls=no ;; + esac ], enable_prefer_gcc_native_ethr_impls=no) + +test $enable_prefer_gcc_native_ethr_impls = yes && + AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) + +AC_ARG_WITH(libatomic_ops, + AS_HELP_STRING([--with-libatomic_ops=PATH], + [specify and prefer usage of libatomic_ops in the ethread library])) + +AC_ARG_WITH(with_sparc_memory_order, + AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], + [specify sparc memory order (defaults to RMO)])) + LM_CHECK_THR_LIB ERL_INTERNAL_LIBS @@ -1003,40 +1037,44 @@ case "$THR_LIB_NAME" in AC_DEFINE(ETHR_WIN32_THREADS, 1, [Define if you have win32 threads]) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) - + if test "X$disable_native_ethr_impls" = "Xyes"; then + have_interlocked_op=no + ethr_have_native_atomics=no + else + ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) + fi test "$ethr_have_native_atomics" = "yes" && ethr_have_native_spinlock=yes ;; @@ -1303,93 +1341,98 @@ case "$THR_LIB_NAME" in int128="__int128_t" fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + if test "X$disable_native_ethr_impls" = "Xyes"; then + ethr_have_native_atomics=no + else + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + + if test $int128 != no; then + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) + fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + AC_MSG_CHECKING([for a usable libatomic_ops implementation]) + case "x$with_libatomic_ops" in + xno | xyes | x) + libatomic_ops_include= + ;; + *) + if test -d "${with_libatomic_ops}/include"; then + libatomic_ops_include="-I$with_libatomic_ops/include" + CPPFLAGS="$CPPFLAGS $libatomic_ops_include" + else + AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) + fi;; + esac + ethr_have_libatomic_ops=no + AC_TRY_LINK([#include "atomic_ops.h"], + [ + volatile AO_t x; + AO_t y; + int z; + + AO_nop_full(); + AO_store(&x, (AO_t) 0); + z = AO_load(&x); + z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); + ], + [ethr_have_native_atomics=yes + ethr_have_libatomic_ops=yes]) + AC_MSG_RESULT([$ethr_have_libatomic_ops]) + if test $ethr_have_libatomic_ops = yes; then + AC_CHECK_SIZEOF(AO_t, , + [ + #include <stdio.h> + #include "atomic_ops.h" + ]) + AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) + + AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) + if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) + fi + ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" + elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_MSG_ERROR([No usable libatomic_ops implementation found]) + fi - if test $int128 != no; then - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) - fi + case "$host_cpu" in + sparc | sun4u | sparc64 | sun4v) + case "$with_sparc_memory_order" in + "TSO") + AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; + "PSO") + AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; + "RMO"|"") + AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; + *) + AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; + esac + ethr_have_native_atomics=yes;; + i86pc | i*86 | x86_64 | amd64) + if test "$enable_x86_out_of_order" = "yes"; then + AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) + fi + ethr_have_native_atomics=yes;; + macppc | ppc | powerpc | "Power Macintosh") + ethr_have_native_atomics=yes;; + tile) + ethr_have_native_atomics=yes;; + *) + ;; + esac - AC_MSG_CHECKING([for a usable libatomic_ops implementation]) - case "x$with_libatomic_ops" in - xno | xyes | x) - libatomic_ops_include= - ;; - *) - if test -d "${with_libatomic_ops}/include"; then - libatomic_ops_include="-I$with_libatomic_ops/include" - CPPFLAGS="$CPPFLAGS $libatomic_ops_include" - else - AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) - fi;; - esac - ethr_have_libatomic_ops=no - AC_TRY_LINK([#include "atomic_ops.h"], - [ - volatile AO_t x; - AO_t y; - int z; - - AO_nop_full(); - AO_store(&x, (AO_t) 0); - z = AO_load(&x); - z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); - ], - [ethr_have_native_atomics=yes - ethr_have_libatomic_ops=yes]) - AC_MSG_RESULT([$ethr_have_libatomic_ops]) - if test $ethr_have_libatomic_ops = yes; then - AC_CHECK_SIZEOF(AO_t, , - [ - #include <stdio.h> - #include "atomic_ops.h" - ]) - AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) - - AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) - if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) - fi - ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" - elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_MSG_ERROR([No usable libatomic_ops implementation found]) fi - case "$host_cpu" in - sparc | sun4u | sparc64 | sun4v) - case "$with_sparc_memory_order" in - "TSO") - AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; - "PSO") - AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; - "RMO"|"") - AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; - *) - AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; - esac - ethr_have_native_atomics=yes;; - i86pc | i*86 | x86_64 | amd64) - if test "$enable_x86_out_of_order" = "yes"; then - AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) - fi - ethr_have_native_atomics=yes;; - macppc | ppc | "Power Macintosh") - ethr_have_native_atomics=yes;; - tile) - ethr_have_native_atomics=yes;; - *) - ;; - esac - test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes dnl Restore LIBS @@ -1451,40 +1494,6 @@ esac AC_C_DOUBLE_MIDDLE_ENDIAN -AC_ARG_ENABLE(native-ethr-impls, - AS_HELP_STRING([--disable-native-ethr-impls], - [disable native ethread implementations]), -[ case "$enableval" in - no) disable_native_ethr_impls=yes ;; - *) disable_native_ethr_impls=no ;; - esac ], disable_native_ethr_impls=no) - -AC_ARG_ENABLE(x86-out-of-order, - AS_HELP_STRING([--enable-x86-out-of-order], - [enable x86/x84_64 out of order support (default disabled)])) - -test "X$disable_native_ethr_impls" = "Xyes" && - AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) - -AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, - AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], - [prefer gcc native ethread implementations]), -[ case "$enableval" in - yes) enable_prefer_gcc_native_ethr_impls=yes ;; - *) enable_prefer_gcc_native_ethr_impls=no ;; - esac ], enable_prefer_gcc_native_ethr_impls=no) - -test $enable_prefer_gcc_native_ethr_impls = yes && - AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) - -AC_ARG_WITH(libatomic_ops, - AS_HELP_STRING([--with-libatomic_ops=PATH], - [specify and prefer usage of libatomic_ops in the ethread library])) - -AC_ARG_WITH(with_sparc_memory_order, - AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], - [specify sparc memory order (defaults to RMO)])) - ETHR_X86_SSE2_ASM=no case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64) diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c index 5730e20774..8de81a30ae 100644 --- a/lib/odbc/c_src/odbcserver.c +++ b/lib/odbc/c_src/odbcserver.c @@ -277,11 +277,15 @@ int main(void) msg = receive_erlang_port_msg(); temp = strtok(msg, ";"); + if (temp == NULL) + DO_EXIT(EXIT_STDIN_BODY); length = strlen(temp); supervisor_port = safe_malloc(length + 1); strcpy(supervisor_port, temp); temp = strtok(NULL, ";"); + if (temp == NULL) + DO_EXIT(EXIT_STDIN_BODY); length = strlen(temp); odbc_port = safe_malloc(length + 1); strcpy(odbc_port, temp); @@ -1819,12 +1823,20 @@ static byte * receive_erlang_port_msg(void) len |= lengthstr[i]; } + if (len <= 0 || len > 1024) { + DO_EXIT(EXIT_STDIN_HEADER); + } + buffer = (byte *)safe_malloc(len); if (read_exact(buffer, len) <= 0) { DO_EXIT(EXIT_STDIN_BODY); } + if (buffer[len-1] != '\0') { + DO_EXIT(EXIT_STDIN_BODY); + } + return buffer; } diff --git a/lib/odbc/test/odbc_connect_SUITE.erl b/lib/odbc/test/odbc_connect_SUITE.erl index 74ae2c96e6..2a16388929 100644 --- a/lib/odbc/test/odbc_connect_SUITE.erl +++ b/lib/odbc/test/odbc_connect_SUITE.erl @@ -77,6 +77,8 @@ end_per_group(_GroupName, Config) -> %% variable, but should NOT alter/remove any existing entries. %%-------------------------------------------------------------------- init_per_suite(Config) when is_list(Config) -> + file:write_file(filename:join([proplists:get_value(priv_dir,Config), + "..","..","..","ignore_core_files"]),""), case odbc_test_lib:skip() of true -> {skip, "ODBC not supported"}; diff --git a/lib/os_mon/c_src/Makefile.in b/lib/os_mon/c_src/Makefile.in index 51569f6ec9..f84ccf7c87 100644 --- a/lib/os_mon/c_src/Makefile.in +++ b/lib/os_mon/c_src/Makefile.in @@ -84,6 +84,7 @@ debug opt: $(TARGET_FILES) clean: rm -f $(TARGET_FILES) + rm -rf $(OBJDIR) rm -f core *~ docs: diff --git a/lib/os_mon/c_src/cpu_sup.c b/lib/os_mon/c_src/cpu_sup.c index 7372d5b0e8..e9fd75a32c 100644 --- a/lib/os_mon/c_src/cpu_sup.c +++ b/lib/os_mon/c_src/cpu_sup.c @@ -29,6 +29,7 @@ #include <stdio.h> #include <stdlib.h> #include <unistd.h> +#include <string.h> #if defined(__sun__) #include <kstat.h> @@ -120,7 +121,9 @@ typedef struct { static void util_measure(unsigned int **result_vec, int *result_sz); +#if defined(__sun__) static unsigned int misc_measure(char* name); +#endif static void send(unsigned int data); static void sendv(unsigned int data[], int ints); static void error(char* err_msg); @@ -140,7 +143,9 @@ int main(int argc, char** argv) { int rc; int sz; unsigned int *rv; +#if defined(__linux__) unsigned int no_of_cpus = 0; +#endif #if defined(__sun__) kstat_ctl = kstat_open(); @@ -288,10 +293,10 @@ static unsigned int misc_measure(char* name) { if(!entry) return -1; - if(entry->data_type != KSTAT_DATA_ULONG) + if(entry->data_type != KSTAT_DATA_UINT32) return -1; - return entry->value.ul; + return entry->value.ui32; } diff --git a/lib/os_mon/c_src/ferrule.c b/lib/os_mon/c_src/ferrule.c index 744f302b2d..c55f594f34 100644 --- a/lib/os_mon/c_src/ferrule.c +++ b/lib/os_mon/c_src/ferrule.c @@ -50,7 +50,7 @@ #define FDS_STDIN 0 #define FDS_PIPE 1 -main(int argc, char *argv[]) +int main(int argc, char *argv[]) /* usage: ferrule ownpath */ { int i, pipe_fd; diff --git a/lib/os_mon/c_src/mod_syslog.c b/lib/os_mon/c_src/mod_syslog.c index 87fbfbac22..b1bbf80b2a 100644 --- a/lib/os_mon/c_src/mod_syslog.c +++ b/lib/os_mon/c_src/mod_syslog.c @@ -47,7 +47,7 @@ #define TRUE 1 #define WAIT 1 -main(int argc, char *argv[]) +int main(int argc, char *argv[]) /* usage: mod_syslog mode ownpath syslogconf */ { int syslogd_pid, n_lines_copied=0; @@ -128,6 +128,7 @@ main(int argc, char *argv[]) make_exit(PIPE_NOT_FOUND); else */ make_exit(OK); + return 0; } void make_exit(int exit_code) diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl index 8c8bbe843a..278da26a20 100644 --- a/lib/os_mon/src/disksup.erl +++ b/lib/os_mon/src/disksup.erl @@ -263,10 +263,10 @@ check_disk_space({unix, dragonfly}, Port, Threshold) -> Result = my_cmd("/bin/df -k -t ufs,hammer", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, freebsd}, Port, Threshold) -> - Result = my_cmd("/bin/df -k -t ufs", Port), + Result = my_cmd("/bin/df -k -l", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, openbsd}, Port, Threshold) -> - Result = my_cmd("/bin/df -k -t ffs", Port), + Result = my_cmd("/bin/df -k -l", Port), check_disks_solaris(skip_to_eol(Result), Threshold); check_disk_space({unix, netbsd}, Port, Threshold) -> Result = my_cmd("/bin/df -k -t ffs", Port), diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile index 461bebc102..cbb014324d 100644 --- a/lib/os_mon/test/Makefile +++ b/lib/os_mon/test/Makefile @@ -85,7 +85,8 @@ release_spec: release_tests_spec: make_emakefile $(INSTALL_DIR) "$(RELSYSDIR)" - $(INSTALL_DATA) os_mon.spec os_mon.cover $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)" + $(INSTALL_DATA) os_mon.spec os_mon.cover os_mon_smoke.spec \ + $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)" $(INSTALL_DATA) os_mon_mib_SUITE.cfg "$(RELSYSDIR)" ## tar chf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -) diff --git a/lib/os_mon/test/cpu_sup_SUITE.erl b/lib/os_mon/test/cpu_sup_SUITE.erl index d04adbb6d3..e0382cb0c7 100644 --- a/lib/os_mon/test/cpu_sup_SUITE.erl +++ b/lib/os_mon/test/cpu_sup_SUITE.erl @@ -88,6 +88,7 @@ load_api(Config) when is_list(Config) -> ?line N = cpu_sup:nprocs(), ?line true = is_integer(N), ?line true = N>0, + ?line true = N<1000000, %% avg1() ?line Load1 = cpu_sup:avg1(), diff --git a/lib/os_mon/test/disksup_SUITE.erl b/lib/os_mon/test/disksup_SUITE.erl index c1ff2c6afc..9c65d8b692 100644 --- a/lib/os_mon/test/disksup_SUITE.erl +++ b/lib/os_mon/test/disksup_SUITE.erl @@ -34,11 +34,11 @@ -define(default_timeout, ?t:minutes(1)). init_per_suite(Config) when is_list(Config) -> - ?line ok = application:start(os_mon), + ok = application:start(os_mon), Config. end_per_suite(Config) when is_list(Config) -> - ?line ok = application:stop(os_mon), + ok = application:stop(os_mon), Config. init_per_testcase(unavailable, Config) -> @@ -78,80 +78,71 @@ end_per_group(_GroupName, Config) -> Config. -api(suite) -> - []; -api(doc) -> - ["Test of API functions"]; +api(suite) -> []; +api(doc) -> ["Test of API functions"]; api(Config) when is_list(Config) -> %% get_disk_data() - ?line [{Id, KByte, Capacity}|_] = disksup:get_disk_data(), - ?line true = io_lib:printable_list(Id), - ?line true = is_integer(KByte), - ?line true = is_integer(Capacity), - ?line true = KByte>0, - ?line true = Capacity>0, + [{Id,KByte,Capacity}|_] = get_disk_data(), + true = io_lib:printable_list(Id), + true = is_integer(KByte), + true = is_integer(Capacity), + true = Capacity>0, + true = KByte>0, %% get_check_interval() - ?line 1800000 = disksup:get_check_interval(), + 1800000 = disksup:get_check_interval(), %% set_check_interval(Minutes) - ?line ok = disksup:set_check_interval(20), - ?line 1200000 = disksup:get_check_interval(), - ?line {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)), - ?line 1200000 = disksup:get_check_interval(), - ?line ok = disksup:set_check_interval(30), + ok = disksup:set_check_interval(20), + 1200000 = disksup:get_check_interval(), + {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)), + 1200000 = disksup:get_check_interval(), + ok = disksup:set_check_interval(30), %% get_almost_full_threshold() - ?line 80 = disksup:get_almost_full_threshold(), + 80 = disksup:get_almost_full_threshold(), %% set_almost_full_threshold(Float) - ?line ok = disksup:set_almost_full_threshold(0.90), - ?line 90 = disksup:get_almost_full_threshold(), - ?line {'EXIT',{badarg,_}} = + ok = disksup:set_almost_full_threshold(0.90), + 90 = disksup:get_almost_full_threshold(), + {'EXIT',{badarg,_}} = (catch disksup:set_almost_full_threshold(-0.5)), - ?line 90 = disksup:get_almost_full_threshold(), - ?line ok = disksup:set_almost_full_threshold(0.80), + 90 = disksup:get_almost_full_threshold(), + ok = disksup:set_almost_full_threshold(0.80), ok. -config(suite) -> - []; -config(doc) -> - ["Test configuration"]; +config(suite) -> []; +config(doc) -> ["Test configuration"]; config(Config) when is_list(Config) -> %% Change configuration parameters and make sure change is reflected %% when disksup is restarted - ?line ok = - application:set_env(os_mon, disk_space_check_interval, 29), - ?line ok = - application:set_env(os_mon, disk_almost_full_threshold, 0.81), + ok = application:set_env(os_mon, disk_space_check_interval, 29), + ok = application:set_env(os_mon, disk_almost_full_threshold, 0.81), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), - ?line {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup), + ok = supervisor:terminate_child(os_mon_sup, disksup), + {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup), - ?line 1740000 = disksup:get_check_interval(), - ?line 81 = disksup:get_almost_full_threshold(), + 1740000 = disksup:get_check_interval(), + 81 = disksup:get_almost_full_threshold(), %% Also try this with bad parameter values, should be ignored - ?line ok = + ok = application:set_env(os_mon, disk_space_check_interval, 0.5), - ?line ok = + ok = application:set_env(os_mon, disk_almost_full_threshold, -0.81), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), - ?line {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup), + ok = supervisor:terminate_child(os_mon_sup, disksup), + {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup), - ?line 1800000 = disksup:get_check_interval(), - ?line 80 = disksup:get_almost_full_threshold(), + 1800000 = disksup:get_check_interval(), + 80 = disksup:get_almost_full_threshold(), %% Reset configuration parameters - ?line ok = - application:set_env(os_mon, disk_space_check_interval, 30), - ?line ok = - application:set_env(os_mon, disk_almost_full_threshold, 0.80), - + ok = application:set_env(os_mon, disk_space_check_interval, 30), + ok = application:set_env(os_mon, disk_almost_full_threshold, 0.80), ok. %%---------------------------------------------------------------------- @@ -159,24 +150,22 @@ config(Config) when is_list(Config) -> %% changes too much during its course, or if there are timing problems %% with the alarm_handler receiving the alarms too late %%---------------------------------------------------------------------- -alarm(suite) -> - []; -alarm(doc) -> - ["Test that alarms are set and cleared"]; +alarm(suite) -> []; +alarm(doc) -> ["Test that alarms are set and cleared"]; alarm(Config) when is_list(Config) -> %% Find out how many disks exceed the threshold %% and make sure the corresponding number of alarms is set - ?line Threshold1 = disksup:get_almost_full_threshold(), % 80 - ?line Data1 = disksup:get_disk_data(), - ?line Over1 = over_threshold(Data1, Threshold1), - ?line Alarms1 = get_alarms(), + Threshold1 = disksup:get_almost_full_threshold(), % 80 + Data1 = disksup:get_disk_data(), + Over1 = over_threshold(Data1, Threshold1), + Alarms1 = get_alarms(), if Over1==length(Alarms1) -> - ?line true; + true; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold1, Data1, Alarms1}) + ?t:fail({bad_alarms, Threshold1, Data1, Alarms1}) end, %% Try to find a disk with space usage below Threshold1, @@ -187,24 +176,24 @@ alarm(Config) when is_list(Config) -> true -> false end end, - ?line case until(Fun1, Data1) of + case until(Fun1, Data1) of {_, _, Cap1} -> Threshold2 = Cap1-1, - ?line ok = + ok = disksup:set_almost_full_threshold(Threshold2/100), - ?line disksup ! timeout, % force a disk check - ?line Data2 = disksup:get_disk_data(), - ?line Over2 = over_threshold(Data2, Threshold2), - ?line Alarms2 = get_alarms(), + disksup ! timeout, % force a disk check + Data2 = disksup:get_disk_data(), + Over2 = over_threshold(Data2, Threshold2), + Alarms2 = get_alarms(), if Over2==length(Alarms2), Over2>Over1 -> - ?line true; + true; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold2, Data2, Alarms2}) + ?t:fail({bad_alarms, Threshold2, Data2, Alarms2}) end; false -> - ?line ignore + ignore end, %% Find out the highest space usage among all disks @@ -216,40 +205,35 @@ alarm(Config) when is_list(Config) -> true -> MaxAcc end end, - ?line case lists:foldl(Fun2, 0, Data1) of + case lists:foldl(Fun2, 0, Data1) of Max when Max<100 -> Threshold3 = Max+1, - ?line ok = - disksup:set_almost_full_threshold(Threshold3/100), - ?line disksup ! timeout, % force a disk check - ?line Data3 = disksup:get_disk_data(), - ?line Over3 = over_threshold(Data3, Threshold3), - ?line Alarms3 = get_alarms(), + ok = disksup:set_almost_full_threshold(Threshold3/100), + disksup ! timeout, % force a disk check + Data3 = disksup:get_disk_data(), + Over3 = over_threshold(Data3, Threshold3), + Alarms3 = get_alarms(), if Over3==0, length(Alarms3)==0 -> - ?line ok; + ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold3, Data3, Alarms3}) + ?t:fail({bad_alarms, Threshold3, Data3, Alarms3}) end; 100 -> - ?line ignore + ignore end, %% Reset threshold - ?line ok = disksup:set_almost_full_threshold(Threshold1/100), - + ok = disksup:set_almost_full_threshold(Threshold1/100), ok. over_threshold(Data, Threshold) -> Data2 = remove_duplicated_disks(lists:keysort(1, Data)), - lists:foldl(fun({_Id, _Kbyte, Cap}, N) when Cap>=Threshold -> - N+1; - (_DiskData, N) -> - N - end, - 0, - Data2). + lists:foldl(fun + ({_Id, _Kbyte, Cap}, N) when Cap>=Threshold -> N+1; + (_DiskData, N) -> N + end, 0, Data2). %% On some platforms (for example MontaVista) data for one disk can be %% "duplicated": @@ -278,33 +262,30 @@ remove_duplicated_disks([]) -> []. get_alarms() -> - lists:filter(fun({{disk_almost_full, _Disk},_}) -> true; - (_) -> false - end, - alarm_handler:get_alarms()). + lists:filter(fun + ({{disk_almost_full, _Disk},_}) -> true; + (_) -> false + end, alarm_handler:get_alarms()). until(Fun, [H|T]) -> case Fun(H) of true -> H; - false -> - until(Fun, T) + false -> until(Fun, T) end; -until(_Fun, []) -> - false. +until(_Fun, []) -> false. -port(suite) -> - []; +port(suite) -> []; port(doc) -> ["Test that disksup handles a terminating port program"]; port(Config) when is_list(Config) -> - ?line Str = os:cmd("ps -ef | grep '[d]isksup'"), + Str = os:cmd("ps -ef | grep '[d]isksup'"), case io_lib:fread("~s ~s", Str) of - {ok, [_Uid,Pid], _Rest} -> + {ok, [_Uid,Pid], _Rest} -> %% Monitor disksup - ?line MonRef = erlang:monitor(process, disksup), - ?line [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(), - ?line true = Kbyte1>0, + MonRef = erlang:monitor(process, disksup), + [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(), + true = Kbyte1>0, %% Kill the port program case os:cmd("kill -9 " ++ Pid) of @@ -315,17 +296,16 @@ port(Config) when is_list(Config) -> {'DOWN', MonRef, _, _, {port_died, _Reason}} -> ok; {'DOWN', MonRef, _, _, Reason} -> - ?line ?t:fail({unexpected_exit_reason, Reason}) + ?t:fail({unexpected_exit_reason, Reason}) after 3000 -> - ?line ?t:fail({still_alive, Str}) + ?t:fail({still_alive, Str}) end, %% Give os_mon_sup time to restart disksup ?t:sleep(?t:seconds(3)), - ?line [{_Disk2,Kbyte2,_Cap2}|_] = - disksup:get_disk_data(), - ?line true = Kbyte2>0, + [{_Disk2,Kbyte2,_Cap2}|_] = disksup:get_disk_data(), + true = Kbyte2>0, ok; @@ -337,68 +317,61 @@ port(Config) when is_list(Config) -> {skip, {os_pid_not_found, Str}} end. -terminate(suite) -> - []; +terminate(suite) -> []; terminate(Config) when is_list(Config) -> - ?line ok = application:set_env(os_mon, start_disksup, false), - ?line ok = supervisor:terminate_child(os_mon_sup, disksup), + ok = application:set_env(os_mon, start_disksup, false), + ok = supervisor:terminate_child(os_mon_sup, disksup), ok. -unavailable(suite) -> - []; +unavailable(suite) -> []; unavailable(doc) -> ["Test correct behaviour when service is unavailable"]; unavailable(Config) when is_list(Config) -> %% Make sure all API functions return their dummy values - ?line [{"none",0,0}] = disksup:get_disk_data(), - ?line 1800000 = disksup:get_check_interval(), - ?line ok = disksup:set_check_interval(5), - ?line 80 = disksup:get_almost_full_threshold(), - ?line ok = disksup:set_almost_full_threshold(0.9), - + [{"none",0,0}] = disksup:get_disk_data(), + 1800000 = disksup:get_check_interval(), + ok = disksup:set_check_interval(5), + 80 = disksup:get_almost_full_threshold(), + ok = disksup:set_almost_full_threshold(0.9), ok. restart(suite) -> []; restart(Config) when is_list(Config) -> - ?line ok = application:set_env(os_mon, start_disksup, true), - ?line {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup), + ok = application:set_env(os_mon, start_disksup, true), + {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup), ok. -otp_5910(suite) -> - []; +otp_5910(suite) -> []; otp_5910(doc) -> ["Test that alarms are cleared if disksup crashes or " "if OS_Mon is stopped"]; otp_5910(Config) when is_list(Config) -> %% Make sure disksup sets at least one alarm - ?line Data = disksup:get_disk_data(), - ?line Threshold0 = disksup:get_almost_full_threshold(), - ?line Threshold = case over_threshold(Data, Threshold0) of - 0 -> - [{_Id,_Kbyte,Cap}|_] = Data, - ?line ok = disksup:set_almost_full_threshold((Cap-1)/100), - Cap-1; - _N -> - Threshold0 - end, - ?line ok = application:set_env(os_mon, - disk_almost_full_threshold, - Threshold/100), - ?line disksup ! timeout, % force a disk check - ?line Data2 = disksup:get_disk_data(), - ?line Over = over_threshold(Data2, Threshold), - ?line Alarms = get_alarms(), + Data = disksup:get_disk_data(), + Threshold0 = disksup:get_almost_full_threshold(), + Threshold = case over_threshold(Data, Threshold0) of + 0 -> + [{_Id,_Kbyte,Cap}|_] = Data, + ok = disksup:set_almost_full_threshold((Cap-1)/100), + Cap-1; + _N -> Threshold0 + end, + ok = application:set_env(os_mon, disk_almost_full_threshold, Threshold/100), + disksup ! timeout, % force a disk check + Data2 = disksup:get_disk_data(), + Over = over_threshold(Data2, Threshold), + Alarms = get_alarms(), if Over==0 -> - ?line ?t:fail({threshold_too_low, Data2, Threshold}); + ?t:fail({threshold_too_low, Data2, Threshold}); Over==length(Alarms) -> ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold, Data2, Alarms}) + ?t:fail({bad_alarms, Threshold, Data2, Alarms}) end, %% Kill disksup @@ -407,34 +380,42 @@ otp_5910(Config) when is_list(Config) -> %% Wait a little to make sure disksup has been restarted, %% then make sure the alarms are set once, but not twice ?t:sleep(?t:seconds(1)), - ?line Data3 = disksup:get_disk_data(), - ?line Alarms2 = get_alarms(), + Data3 = disksup:get_disk_data(), + Alarms2 = get_alarms(), if - length(Alarms2)==length(Alarms) -> - ok; + length(Alarms2)==length(Alarms) -> ok; true -> dump_info(), - ?line ?t:fail({bad_alarms, Threshold, Data3, Alarms,Alarms2}) + ?t:fail({bad_alarms,Threshold,Data3,Alarms,Alarms2}) end, %% Stop OS_Mon and make sure all disksup alarms are cleared - ?line ok = application:stop(os_mon), + ok = application:stop(os_mon), ?t:sleep(?t:seconds(1)), - ?line Alarms3 = get_alarms(), - if - length(Alarms3)==0 -> - ok; - true -> - ?line ?t:fail({alarms_not_cleared, Alarms3}) + Alarms3 = get_alarms(), + case get_alarms() of + [] -> ok; + _ -> ?t:fail({alarms_not_cleared, Alarms3}) end, %% Reset threshold and restart OS_Mon - ?line ok = application:set_env(os_mon, - disksup_almost_full_threshold, 0.8), - ?line ok = disksup:set_almost_full_threshold(0.8), - ?line ok = application:start(os_mon), - + ok = application:set_env(os_mon, disksup_almost_full_threshold, 0.8), + ok = disksup:set_almost_full_threshold(0.8), + ok = application:start(os_mon), ok. dump_info() -> io:format("Status: ~p~n", [sys:get_status(disksup)]). + +% filter get_disk_data and remove entriew with zero capacity +% "non-normal" filesystems report zero capacity +% - Perhaps errorneous 'df -k -l'? +% - Always list filesystems by type '-t ufs,zfs,..' instead? +% It is unclear what the intention was from the beginning. +get_disk_data() -> + get_disk_data(disksup:get_disk_data()). + +get_disk_data([{"none",0,0}=E]) -> [E]; +get_disk_data([{_,_,0}|Es]) -> get_disk_data(Es); +get_disk_data([E|Es]) -> [E|get_disk_data(Es)]; +get_disk_data([]) -> []. diff --git a/lib/os_mon/test/os_mon_smoke.spec b/lib/os_mon/test/os_mon_smoke.spec new file mode 100644 index 0000000000..6f0d02494b --- /dev/null +++ b/lib/os_mon/test/os_mon_smoke.spec @@ -0,0 +1,3 @@ +{cases,"../os_mon_test",disksup_SUITE,[api]}. +{cases,"../os_mon_test",cpu_sup_SUITE,[load_api,util_api]}. +{cases,"../os_mon_test",memsup_SUITE,[api]}.
\ No newline at end of file diff --git a/lib/parsetools/doc/src/leex.xml b/lib/parsetools/doc/src/leex.xml index d5c24c303d..b4e2af6857 100644 --- a/lib/parsetools/doc/src/leex.xml +++ b/lib/parsetools/doc/src/leex.xml @@ -4,7 +4,7 @@ <erlref> <header> <copyright> - <year>2009</year><year>2011</year> + <year>2009</year><year>2013</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -38,19 +38,21 @@ Token = tuple()</code> </section> <funcs> <func> - <name>file(FileName) -> ok | error</name> - <name>file(FileName, Options) -> ok | error</name> + <name>file(FileName, [, Options]) -> LeexRet</name> <fsummary>Generate a lexical analyzer</fsummary> <type> <v>FileName = filename()</v> <v>Options = Option | [Option]</v> <v>Option = - see below -</v> - <v>FileReturn = {ok, Scannerfile} - | {ok, Scannerfile, Warnings} - | error - | {error, Warnings, Errors}</v> + <v>LeexRet = {ok, Scannerfile} + | {ok, Scannerfile, Warnings} + | error + | {error, Warnings, Errors}</v> <v>Scannerfile = filename()</v> <v>Warnings = Errors = [{filename(), [ErrorInfo]}]</v> + <v>ErrorInfo = {ErrorLine, module(), Reason}</v> + <v>ErrorLine = integer()</v> + <v>Reason = - formatable by format_error/1 -</v> </type> <desc> <p>Generates a lexical analyzer from the definition in the input diff --git a/lib/parsetools/src/leex.erl b/lib/parsetools/src/leex.erl index e531b78a5b..7039aea1ae 100644 --- a/lib/parsetools/src/leex.erl +++ b/lib/parsetools/src/leex.erl @@ -1645,10 +1645,14 @@ output_encoding_comment(File, #leex{encoding = Encoding}) -> output_file_directive(File, Filename, Line) -> io:fwrite(File, <<"-file(~ts, ~w).\n">>, - [format_filename(Filename), Line]). + [format_filename(Filename, File), Line]). -format_filename(Filename) -> - io_lib:write_string(filename:flatten(Filename)). +format_filename(Filename0, File) -> + Filename = filename:flatten(Filename0), + case lists:keyfind(encoding, 1, io:getopts(File)) of + {encoding, unicode} -> io_lib:write_string(Filename); + _ -> io_lib:write_string_as_latin1(Filename) + end. quote($^) -> "\\^"; quote($.) -> "\\."; diff --git a/lib/parsetools/src/yecc.erl b/lib/parsetools/src/yecc.erl index 53292b037a..b698beb558 100644 --- a/lib/parsetools/src/yecc.erl +++ b/lib/parsetools/src/yecc.erl @@ -482,7 +482,7 @@ generate(St0) -> F = case member(time, St1#yecc.options) of true -> io:fwrite(<<"Generating parser from grammar in ~ts\n">>, - [format_filename(St1#yecc.infile)]), + [format_filename(St1#yecc.infile, St1)]), fun timeit/3; false -> fun(_Name, Fn, St) -> Fn(St) end @@ -2106,8 +2106,8 @@ output_state_actions(St0, State, State, {Actions, Jump}, SI) -> output_state_actions(St, State, JState, _XActions, _SI) -> fwrite(St, <<"%% yeccpars2_~w: see yeccpars2_~w\n\n">>, [State, JState]). -output_state_actions1(St, State, [], _IsFirst, normal, _SI) -> - output_state_actions_fini(State, St); +output_state_actions1(St, State, [], IsFirst, normal, _SI) -> + output_state_actions_fini(State, IsFirst, St); output_state_actions1(St0, State, [], IsFirst, {to, ToS}, _SI) -> St = delim(St0, IsFirst), fwrite(St, @@ -2151,9 +2151,9 @@ output_call_to_includefile(NewState, St) -> fwrite(St, <<" yeccpars1(S, ~w, Ss, Stack, T, Ts, Tzr)">>, [NewState]). -output_state_actions_fini(State, St0) -> +output_state_actions_fini(State, IsFirst, St0) -> %% Backward compatible. - St10 = delim(St0, false), + St10 = delim(St0, IsFirst), St = fwrite(St10, <<"yeccpars2_~w(_, _, _, _, T, _, _) ->\n">>, [State]), fwrite(St, <<" yeccerror(T).\n\n">>, []). @@ -2519,7 +2519,7 @@ output_encoding_comment(#yecc{encoding = Encoding}=St) -> output_file_directive(St, Filename, Line) when St#yecc.file_attrs -> fwrite(St, <<"-file(~ts, ~w).\n">>, - [format_filename(Filename), Line]); + [format_filename(Filename, St), Line]); output_file_directive(St, _Filename, _Line) -> St. @@ -2547,8 +2547,12 @@ nl(#yecc{outport = Outport, line = Line}=St) -> io:nl(Outport), St#yecc{line = Line + 1}. -format_filename(Filename) -> - io_lib:write_string(filename:flatten(Filename)). +format_filename(Filename0, St) -> + Filename = filename:flatten(Filename0), + case lists:keyfind(encoding, 1, io:getopts(St#yecc.outport)) of + {encoding, unicode} -> io_lib:write_string(Filename); + _ -> io_lib:write_string_as_latin1(Filename) + end. format_assoc(left) -> "Left"; diff --git a/lib/parsetools/test/leex_SUITE.erl b/lib/parsetools/test/leex_SUITE.erl index afedd79a4e..7cbc72accb 100644 --- a/lib/parsetools/test/leex_SUITE.erl +++ b/lib/parsetools/test/leex_SUITE.erl @@ -45,7 +45,7 @@ pt/1, man/1, ex/1, ex2/1, not_yet/1, - otp_10302/1]). + otp_10302/1, otp_11286/1]). % Default timetrap timeout (set in init_per_testcase). -define(default_timeout, ?t:minutes(1)). @@ -67,7 +67,7 @@ all() -> groups() -> [{checks, [], [file, compile, syntax]}, {examples, [], [pt, man, ex, ex2, not_yet]}, - {tickets, [], [otp_10302]}]. + {tickets, [], [otp_10302, otp_11286]}]. init_per_suite(Config) -> Config. @@ -983,6 +983,68 @@ otp_10302(Config) when is_list(Config) -> ok. +otp_11286(doc) -> + "OTP-11286. A Unicode filename bug; both Leex and Yecc."; +otp_11286(suite) -> []; +otp_11286(Config) when is_list(Config) -> + Node = start_node(otp_11286, "+fnu"), + Dir = ?privdir, + UName = [1024] ++ "u", + UDir = filename:join(Dir, UName), + ok = rpc:call(Node, file, make_dir, [UDir]), + + %% Note: Cannot use UName as filename since the filename is used + %% as module name. To be fixed in R18. + Filename = filename:join(UDir, 'OTP-11286.xrl'), + Scannerfile = filename:join(UDir, 'OTP-11286.erl'), + Options = [return, {scannerfile, Scannerfile}], + + Mini1 = <<"%% coding: utf-8\n" + "Definitions.\n" + "D = [0-9]\n" + "Rules.\n" + "{L}+ : {token,{word,TokenLine,TokenChars}}.\n" + "Erlang code.\n">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini1]), + {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]), + {ok,_,_} = rpc:call(Node, compile, file, + [Scannerfile,[basic_validation,return]]), + + Mini2 = <<"Definitions.\n" + "D = [0-9]\n" + "Rules.\n" + "{L}+ : {token,{word,TokenLine,TokenChars}}.\n" + "Erlang code.\n">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini2]), + {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]), + {ok,_,_} = rpc:call(Node, compile, file, + [Scannerfile,[basic_validation,return]]), + + Mini3 = <<"%% coding: latin-1\n" + "Definitions.\n" + "D = [0-9]\n" + "Rules.\n" + "{L}+ : {token,{word,TokenLine,TokenChars}}.\n" + "Erlang code.\n">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini3]), + {ok, _, []} = rpc:call(Node, leex, file, [Filename, Options]), + {ok,_,_} = rpc:call(Node, compile, file, + [Scannerfile,[basic_validation,return]]), + + true = test_server:stop_node(Node), + ok. + +start_node(Name, Args) -> + [_,Host] = string:tokens(atom_to_list(node()), "@"), + ct:log("Trying to start ~w@~s~n", [Name,Host]), + case test_server:start_node(Name, peer, [{args,Args}]) of + {error,Reason} -> + test_server:fail(Reason); + {ok,Node} -> + ct:log("Node ~p started~n", [Node]), + Node + end. + unwritable(Fname) -> {ok, Info} = file:read_file_info(Fname), Mode = Info#file_info.mode - 8#00200, diff --git a/lib/parsetools/test/yecc_SUITE.erl b/lib/parsetools/test/yecc_SUITE.erl index 3d66a2a525..c7ac9fd232 100644 --- a/lib/parsetools/test/yecc_SUITE.erl +++ b/lib/parsetools/test/yecc_SUITE.erl @@ -49,7 +49,8 @@ otp_5369/1, otp_6362/1, otp_7945/1, otp_8483/1, otp_8486/1, - otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1]). + otp_7292/1, otp_7969/1, otp_8919/1, otp_10302/1, otp_11269/1, + otp_11286/1]). % Default timetrap timeout (set in init_per_testcase). -define(default_timeout, ?t:minutes(1)). @@ -76,7 +77,8 @@ groups() -> [empty, prec, yeccpre, lalr, old_yecc, other_examples]}, {bugs, [], [otp_5369, otp_6362, otp_7945, otp_8483, otp_8486]}, - {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302]}]. + {improvements, [], [otp_7292, otp_7969, otp_8919, otp_10302, + otp_11269, otp_11286]}]. init_per_suite(Config) -> Config. @@ -1963,6 +1965,96 @@ otp_10302(Config) when is_list(Config) -> run(Config, Ts), ok. +otp_11269(doc) -> + "OTP-11269. A bug."; +otp_11269(suite) -> []; +otp_11269(Config) when is_list(Config) -> + Dir = ?privdir, + Filename = filename:join(Dir, "OTP-11269.yrl"), + Ret = [return, {report, false}], + Pai = <<"Nonterminals + list list0 list1 newline_list. + + Terminals + '\n' semi. + + Rootsymbol list. + + Endsymbol '$end'. + + list -> newline_list list0 : '$2'. + + list0 -> list1 '\n' newline_list : '$1'. + + list1 -> list1 semi newline_list list1 : + {command_connect, '$1', '$4', semi}. + + newline_list -> newline_list '\n' : nil.">>, + ok = file:write_file(Filename, Pai), + {ok,ErlFile,[{_YrlFile,[{none,yecc,{conflicts,1,0}}]}]} = + yecc:file(Filename, Ret), + Opts = [return, warn_unused_vars,{outdir,Dir}], + {ok,'OTP-11269',_Warnings} = compile:file(ErlFile, Opts), + ok. + +otp_11286(doc) -> + "OTP-11286. A Unicode filename bug; both Leex and Yecc."; +otp_11286(suite) -> []; +otp_11286(Config) when is_list(Config) -> + Node = start_node(otp_11286, "+fnu"), + Dir = ?privdir, + UName = [1024] ++ "u", + UDir = filename:join(Dir, UName), + ok = rpc:call(Node, file, make_dir, [UDir]), + + %% Note: Cannot use UName as filename since the filename is used + %% as module name. To be fixed in R18. + Filename = filename:join(UDir, 'OTP-11286.yrl'), + Ret = [return, {report, false}, time], + + Mini1 = <<"%% coding: utf-8 + Terminals t. + Nonterminals nt. + Rootsymbol nt. + nt -> t.">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini1]), + {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]), + Opts = [return, warn_unused_vars,{outdir,Dir}], + {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]), + + Mini2 = <<"Terminals t. + Nonterminals nt. + Rootsymbol nt. + nt -> t.">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini2]), + {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]), + Opts = [return, warn_unused_vars,{outdir,Dir}], + {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]), + + Mini3 = <<"%% coding: latin-1 + Terminals t. + Nonterminals nt. + Rootsymbol nt. + nt -> t.">>, + ok = rpc:call(Node, file, write_file, [Filename, Mini3]), + {ok,ErlFile,[]} = rpc:call(Node, yecc, file, [Filename, Ret]), + Opts = [return, warn_unused_vars,{outdir,Dir}], + {ok,_,_Warnings} = rpc:call(Node, compile, file, [ErlFile, Opts]), + + true = test_server:stop_node(Node), + ok. + +start_node(Name, Args) -> + [_,Host] = string:tokens(atom_to_list(node()), "@"), + ct:log("Trying to start ~w@~s~n", [Name,Host]), + case test_server:start_node(Name, peer, [{args,Args}]) of + {error,Reason} -> + test_server:fail(Reason); + {ok,Node} -> + ct:log("Node ~p started~n", [Node]), + Node + end. + yeccpre_size() -> yeccpre_size(default_yeccpre()). diff --git a/lib/public_key/asn1/PKCS-7.asn1 b/lib/public_key/asn1/PKCS-7.asn1 index a6dfd57d80..e76f928acb 100644 --- a/lib/public_key/asn1/PKCS-7.asn1 +++ b/lib/public_key/asn1/PKCS-7.asn1 @@ -78,6 +78,49 @@ signingTime ATTRIBUTE ::= { SigningTime ::= Time -- imported from ISO/IEC 9594-8 +-- begin added for VCE SCEP-support +transactionID ATTRIBUTE ::= { + WITH SYNTAX PrintableString + ID id-transId +} + +messageType ATTRIBUTE ::= { + WITH SYNTAX PrintableString + ID id-messageType +} + +pkiStatus ATTRIBUTE ::= { + WITH SYNTAX PrintableString + ID id-pkiStatus +} + +failInfo ATTRIBUTE ::= { + WITH SYNTAX PrintableString + ID id-failInfo +} + +senderNonce ATTRIBUTE ::= { + WITH SYNTAX OCTET STRING + ID id-senderNonce +} + +recipientNonce ATTRIBUTE ::= { + WITH SYNTAX OCTET STRING + ID id-recipientNonce +} + +-- This is the authenticatedAttributes -member from SignerInfo +-- added here to generate decode/encode functions for it which are +-- needed to build the pkcs-7 used by SCEP, the resulting encoding are +-- used to make a signed digest +SignerInfoAuthenticatedAttributes ::= CHOICE { + aaSet [0] IMPLICIT SET OF AttributePKCS-7 {{Authenticated}}, + aaSequence [2] EXPLICIT SEQUENCE OF AttributePKCS-7 {{Authenticated}} + -- Explicit because easier to compute digest on sequence of attributes and then reuse + -- encoded sequence in aaSequence. + } +-- end added for VCE SCEP-support + -- Also defined in X.509 -- Redeclared here as a parameterized type @@ -224,12 +267,9 @@ SignerInfo ::= SEQUENCE { issuerAndSerialNumber IssuerAndSerialNumber, digestAlgorithm DigestAlgorithmIdentifier, - authenticatedAttributes CHOICE { - aaSet [0] IMPLICIT SET OF AttributePKCS-7 {{Authenticated}}, - aaSequence [2] EXPLICIT SEQUENCE OF AttributePKCS-7 {{Authenticated}} - -- Explicit because easier to compute digest on sequence of attributes and then reuse - -- encoded sequence in aaSequence. - } OPTIONAL, + -- Added explicit type for authenticatedAttributes to be able to + -- encode/decode this type separately + authenticatedAttributes SignerInfoAuthenticatedAttributes OPTIONAL, digestEncryptionAlgorithm DigestEncryptionAlgorithmIdentifier, encryptedDigest EncryptedDigest, @@ -247,7 +287,15 @@ SignerInfo ::= SEQUENCE { Authenticated ATTRIBUTE ::= { contentType | - messageDigest, + messageDigest | +-- begin added for VCE SCEP-support + transactionID | + messageType | + pkiStatus | + failInfo | + senderNonce | + recipientNonce, +-- end added for VCE SCEP-support ..., -- add application-specific attributes here signingTime } @@ -384,4 +432,18 @@ signedAndEnvelopedData OBJECT IDENTIFIER ::= { pkcs-7 4 } digestedData OBJECT IDENTIFIER ::= { pkcs-7 5 } encryptedData OBJECT IDENTIFIER ::= { pkcs-7 6 } +-- begin added for VCE SCEP-support +id-VeriSign OBJECT IDENTIFIER ::= {2 16 us(840) 1 veriSign(113733)} +id-pki OBJECT IDENTIFIER ::= {id-VeriSign pki(1)} +id-attributes OBJECT IDENTIFIER ::= {id-pki attributes(9)} +id-messageType OBJECT IDENTIFIER ::= {id-attributes messageType(2)} +id-pkiStatus OBJECT IDENTIFIER ::= {id-attributes pkiStatus(3)} +id-failInfo OBJECT IDENTIFIER ::= {id-attributes failInfo(4)} +id-senderNonce OBJECT IDENTIFIER ::= {id-attributes senderNonce(5)} +id-recipientNonce OBJECT IDENTIFIER ::= {id-attributes recipientNonce(6)} +id-transId OBJECT IDENTIFIER ::= {id-attributes transId(7)} +id-extensionReq OBJECT IDENTIFIER ::= {id-attributes extensionReq(8)} +-- end added for VCE SCEP-support + + END diff --git a/lib/public_key/src/pubkey_pbe.erl b/lib/public_key/src/pubkey_pbe.erl index 6f0be53db9..460624163b 100644 --- a/lib/public_key/src/pubkey_pbe.erl +++ b/lib/public_key/src/pubkey_pbe.erl @@ -66,7 +66,13 @@ decode(Data, Password,"DES-EDE3-CBC" = Cipher, KeyDevParams) -> decode(Data, Password,"RC2-CBC"= Cipher, KeyDevParams) -> {Key, IV} = password_to_key_and_iv(Password, Cipher, KeyDevParams), - crypto:block_decrypt(rc2_cbc, Key, IV, Data). + crypto:block_decrypt(rc2_cbc, Key, IV, Data); + +decode(Data, Password,"AES-128-CBC"= Cipher, IV) -> + %% PKCS5_SALT_LEN is 8 bytes + <<Salt:8/binary,_/binary>> = IV, + {Key, _} = password_to_key_and_iv(Password, Cipher, Salt), + crypto:block_decrypt(aes_cbc128, Key, IV, Data). %%-------------------------------------------------------------------- -spec pbdkdf1(string(), iodata(), integer(), atom()) -> binary(). @@ -200,7 +206,9 @@ derived_key_length(Cipher,_) when (Cipher == ?'rc2CBC') or 16; derived_key_length(Cipher,_) when (Cipher == ?'des-EDE3-CBC') or (Cipher == "DES-EDE3-CBC") -> - 24. + 24; +derived_key_length(Cipher,_) when (Cipher == "AES-128-CBC") -> + 16. cipher(#'PBES2-params_encryptionScheme'{algorithm = ?'desCBC'}) -> "DES-CBC"; diff --git a/lib/public_key/src/public_key.erl b/lib/public_key/src/public_key.erl index cdbfe6e07c..a4b6b8ad15 100644 --- a/lib/public_key/src/public_key.erl +++ b/lib/public_key/src/public_key.erl @@ -118,6 +118,13 @@ pem_entry_decode({Asn1Type, CryptDer, {Cipher, Salt}} = PemEntry, is_list(Cipher) andalso is_binary(Salt) andalso erlang:byte_size(Salt) == 8 -> + do_pem_entry_decode(PemEntry, Password); +pem_entry_decode({Asn1Type, CryptDer, {"AES-128-CBC"=Cipher, IV}} = PemEntry, + Password) when is_atom(Asn1Type) andalso + is_binary(CryptDer) andalso + is_list(Cipher) andalso + is_binary(IV) andalso + erlang:byte_size(IV) == 16 -> do_pem_entry_decode(PemEntry, Password). %%-------------------------------------------------------------------- diff --git a/lib/public_key/test/pbe_SUITE.erl b/lib/public_key/test/pbe_SUITE.erl index 2c9b17478d..b68ffbd5fd 100644 --- a/lib/public_key/test/pbe_SUITE.erl +++ b/lib/public_key/test/pbe_SUITE.erl @@ -218,6 +218,14 @@ encrypted_private_key_info(Config) when is_list(Config) -> [{'PrivateKeyInfo', _, {"RC2-CBC",_}} = PubEntry2] = PemRc2Entry, KeyInfo = public_key:pem_entry_decode(PubEntry2, "password"), + %% key generated with ssh-keygen -N hello_aes -f aes_128_cbc_enc_key + {ok, PemAesCbc} = file:read_file(filename:join(Datadir, "aes_128_cbc_enc_key")), + + PemAesCbcEntry = public_key:pem_decode(PemAesCbc), + ct:print("Pem entry: ~p" , [PemAesCbcEntry]), + [{'RSAPrivateKey', _, {"AES-128-CBC",_}} = PubAesCbcEntry] = PemAesCbcEntry, + #'RSAPrivateKey'{} = public_key:pem_entry_decode(PubAesCbcEntry, "hello_aes"), + check_key_info(KeyInfo). diff --git a/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key b/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key new file mode 100644 index 0000000000..34c7543f30 --- /dev/null +++ b/lib/public_key/test/pbe_SUITE_data/aes_128_cbc_enc_key @@ -0,0 +1,30 @@ +-----BEGIN RSA PRIVATE KEY----- +Proc-Type: 4,ENCRYPTED +DEK-Info: AES-128-CBC,D64FF97327558643763BE17BD50FDDAD + +oS4LbrLbQHPxfQILHl0KPswnkC1QqJ4RX6SkcQGVoYJJkPcavupABDYD1PSJf/MD +aPiN2OHsYAFLHxa1NGEAH6wKSvgdUJyaQ6jbSBNh9we9p2i3tpMnWsJMCZzXsCQh +RJj23/cFhb2UsqPM3OH6x6/VxX5VmD9Dnt1iU9b+WS6KdU45zP+QWpRd54uBrFab +Pw0kW7o84VFH6ahUDnzT8JUIk4P4G43G2F7wrOCbiK6AS0S8sCh5E83MrGEoJ6jB +NIW4xnLdBOLeV65NTgwWEn7bjLz+8IYSg2/wodjj5GL/ciMgiF+/krdQhzbHJhcm +dXV3SB/lTyjYUUGYU/3wm10f0iLJLFZxVU70yfV0eKhdYtWdR+2RxZjHvstBTGoI +BMtcaGwfMBh3wBHjS2M9AVh35DUYQIGW6QATf1VF+chhgESj6Qktkmfe4R9uAhP0 +r8Qkql/lq19K653c6ZIcUIYWvpAQ4Y/Q6Fdd92GY45FQdXYlZ/dXkwdq+ZYAhe6g +GUNmpwHf5N2a6lgXR3YytPYdhQbYMdy29RjXJsFWJh3sKTxgG/Y+FX2Ua7J1G4IW +wO6yZgQc9GyYzNn1TpT/TQ32GuHbw0u/oQqbNOJEjE0BTsQelEPpnNnEmkgPqSlI +3PNtsBvS6antvJ3CiCnmkQlT7/dLR9ym8nU+jo/hrtIStNUrdopCLB4+iUt7tJdz +jpW3Kc5fWmnGbp1UOXHoOghENfjIN+yUxIx9qCgBmWliY1nncUgzEHM34eGqGdek +nf6PowS4gIbJmO5Uc+0MwPld5HFou21da2M48FKolp3+CO1mX5MhvMLGVoFqNiE3 +dXYJG4bcMdxZncdaMn+c6ycA9iFTufF/qZPF/rGO5I+gc9M50bJjewbixqXM/LJ5 +1OnP/x7DN1Td3PTjAfjFX9yLWRMIjbihG43Htk5bOifaBtnOYj1e7WMjN8uBx91x +OCnfC3rngF4B9WmdYEkEvp9QZixbDlp0oh6/4HiRjjDkUfADnKuU/At7dd8sDOGD +NgaWVskJsulp8d9s3CozM7LmowlNpHV9BvAguckx/B7ZqV10mgAKOqZKk4LDlu2Y +MgQvSLJfyJsz/1q4z4jcXhYtSuZXXHk9lX9dgCZbQfVGnlsptNuV5KwupV2cz0Vi +Uh1mwvDXWFNIFwexZi0z27FJ1pKAKK+sf/GFqoAvdmYgYS6d5bmxh68bGZMZ2C6P +eehHkEZm1pv4CVDxrUTk+bNtqhDXglSdfxR0Xm1QDN95hM0dHq1kDZH6HgD6krJ6 +BBfd7mPRExH3+5JSQXoSUDO8LqP5phxLWKS0B8HDburnP/x9QzBOIKvmtDF1lQEk +FAI/6Lv8GJ0R7WYd2vFfGeqS94iw1BpmO/xS6WINOFpfwVCBuuYmLEdEWcXJgvy9 +zyaTX/mk1RMXo7I1X7aWviaIF7ykGxs1dJdrxQonwJ3oyTySNl2xf8bziKlqB/Ml +LDjeMNX91G8fJE0MdKPWd94PUoLN0CutM5sY5yHzwCvJQV9oQ1qvrQYUbnvtCEyQ +xT+bawt+ODgVb/QnyNeiIyEN5lXc8meJFLr1uMeEwX8WaJ7/KBKGk1V0XqVZTmga +-----END RSA PRIVATE KEY----- diff --git a/lib/public_key/test/public_key_SUITE.erl b/lib/public_key/test/public_key_SUITE.erl index c3aa2e2366..f8d167e770 100644 --- a/lib/public_key/test/public_key_SUITE.erl +++ b/lib/public_key/test/public_key_SUITE.erl @@ -46,7 +46,7 @@ all() -> groups() -> [{pem_decode_encode, [], [dsa_pem, rsa_pem, encrypted_pem, - dh_pem, cert_pem, pkcs10_pem]}, + dh_pem, cert_pem, pkcs7_pem, pkcs10_pem]}, {ssh_public_key_decode_encode, [], [ssh_rsa_public_key, ssh_dsa_public_key, ssh_rfc4716_rsa_comment, ssh_rfc4716_dsa_comment, ssh_rfc4716_rsa_subject, ssh_known_hosts, @@ -188,15 +188,9 @@ dh_pem() -> [{doc, "DH parametrs PEM-file decode/encode"}]. dh_pem(Config) when is_list(Config) -> Datadir = ?config(data_dir, Config), - [{'DHParameter', DerDH, not_encrypted} = Entry] = + [{'DHParameter', _DerDH, not_encrypted} = Entry] = erl_make_certs:pem_to_der(filename:join(Datadir, "dh.pem")), - - erl_make_certs:der_to_pem(filename:join(Datadir, "new_dh.pem"), [Entry]), - - DHParameter = public_key:der_decode('DHParameter', DerDH), - DHParameter = public_key:pem_entry_decode(Entry), - - Entry = public_key:pem_entry_encode('DHParameter', DHParameter). + asn1_encode_decode(Entry). %%-------------------------------------------------------------------- @@ -204,57 +198,38 @@ pkcs10_pem() -> [{doc, "PKCS-10 PEM-file decode/encode"}]. pkcs10_pem(Config) when is_list(Config) -> Datadir = ?config(data_dir, Config), - [{'CertificationRequest', DerPKCS10, not_encrypted} = Entry] = + [{'CertificationRequest', _DerPKCS10, not_encrypted} = Entry] = erl_make_certs:pem_to_der(filename:join(Datadir, "req.pem")), - - erl_make_certs:der_to_pem(filename:join(Datadir, "new_req.pem"), [Entry]), - - PKCS10 = public_key:der_decode('CertificationRequest', DerPKCS10), - PKCS10 = public_key:pem_entry_decode(Entry), - - Entry = public_key:pem_entry_encode('CertificationRequest', PKCS10). - + asn1_encode_decode(Entry). %%-------------------------------------------------------------------- pkcs7_pem() -> [{doc, "PKCS-7 PEM-file decode/encode"}]. pkcs7_pem(Config) when is_list(Config) -> Datadir = ?config(data_dir, Config), - [{'ContentInfo', DerPKCS7, not_encrypted} = Entry] = + [{'ContentInfo', _, not_encrypted} = Entry0] = erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_cert.pem")), - - erl_make_certs:der_to_pem(filename:join(Datadir, "new_pkcs7_cert.pem"), [Entry]), - - PKCS7 = public_key:der_decode('ContentInfo', DerPKCS7), - PKCS7 = public_key:pem_entry_decode(Entry), - - Entry = public_key:pem_entry_encode('ContentInfo', PKCS7). - + [{'ContentInfo', _, not_encrypted} = Entry1] = + erl_make_certs:pem_to_der(filename:join(Datadir, "pkcs7_ext.pem")), + asn1_encode_decode(Entry0), + asn1_encode_decode(Entry1). + %%-------------------------------------------------------------------- cert_pem() -> [{doc, "Certificate PEM-file decode/encode"}]. cert_pem(Config) when is_list(Config) -> Datadir = ?config(data_dir, Config), - - [Entry0] = - erl_make_certs:pem_to_der(filename:join(Datadir, "dsa.pem")), - - [{'Certificate', DerCert, not_encrypted} = Entry7] = + + [{'Certificate', _, not_encrypted} = Entry0] = erl_make_certs:pem_to_der(filename:join(Datadir, "client_cert.pem")), - Cert = public_key:der_decode('Certificate', DerCert), - Cert = public_key:pem_entry_decode(Entry7), + asn1_encode_decode(Entry0), - CertEntries = [{'Certificate', _, not_encrypted} = CertEntry0, - {'Certificate', _, not_encrypted} = CertEntry1] = + [{'Certificate', _, not_encrypted} = Entry1, + {'Certificate', _, not_encrypted} = Entry2] = erl_make_certs:pem_to_der(filename:join(Datadir, "cacerts.pem")), - - ok = erl_make_certs:der_to_pem(filename:join(Datadir, "wcacerts.pem"), CertEntries), - ok = erl_make_certs:der_to_pem(filename:join(Datadir, "wdsa.pem"), [Entry0]), - NewCertEntries = erl_make_certs:pem_to_der(filename:join(Datadir, "wcacerts.pem")), - true = lists:member(CertEntry0, NewCertEntries), - true = lists:member(CertEntry1, NewCertEntries), - [Entry0] = erl_make_certs:pem_to_der(filename:join(Datadir, "wdsa.pem")). + asn1_encode_decode(Entry1), + asn1_encode_decode(Entry2). %%-------------------------------------------------------------------- ssh_rsa_public_key() -> @@ -720,6 +695,12 @@ pkix_iso_dsa_oid(Config) when is_list(Config) -> %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- +asn1_encode_decode({Asn1Type, Der, not_encrypted} = Entry) -> + Decoded = public_key:der_decode(Asn1Type, Der), + Decoded = public_key:pem_entry_decode(Entry), + Entry = public_key:pem_entry_encode(Asn1Type, Decoded), + ok. + check_countryname({rdnSequence,DirName}) -> do_check_countryname(DirName). do_check_countryname([]) -> diff --git a/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem b/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem new file mode 100644 index 0000000000..d7a1d01fe1 --- /dev/null +++ b/lib/public_key/test/public_key_SUITE_data/pkcs7_ext.pem @@ -0,0 +1,62 @@ +-----BEGIN PKCS7----- +MIILCAYJKoZIhvcNAQcCoIIK+TCCCvUCAQExDjAMBggqhkiG9w0CBQUAMIIFmwYJ +KoZIhvcNAQcBoIIFjASCBYgwggWEBgkqhkiG9w0BBwOgggV1MIIFcQIBADGCAmQw +ggJgAgEAMEgwPDELMAkGA1UEBhMCU0UxETAPBgNVBAoMCEVyaWNzc29uMRowGAYD +VQQDDBFWQ19SQlNfU3ViQ0FfVjNfMQIIcw3ZS5VSTIwwDQYJKoZIhvcNAQEBBQAE +ggIAFW0vd8wY2FJ87KVyUqcdK5uCmnjwC6uPbypDqnL44Fe4iAAiNOvmqt1Crm46 +pg9gOq50NbrRb+PY+UUM7lEUNNKZ61cul2iwGwp6r41l05EbMqgfsNoJkH+bTM8Y +YhME4sT+AzdmPHIg1PGoM+pAMHzpjcdnaHFSlfSmwq5xfZwWelR2TDz7arO+AKCk +DVIEnG9qHBrUWvDoT23VDVQQXP5Uja0Nml7B7Jt2RW2EKAiCAYDujkjIWcGy3F3X +2Q+Nm4K2nJKnkdMI5kS0Eu9uHp24VHn98sEyqn8rDiLFOaj5BskQIVMDN6npssgr +X4ChmBiVcquaxCoHMqQYGa/Jrd66C8WK2lQH3NpDCsULS+m6Z76bvXDFyL0K6rEP +sOcn8J91LfB5jXeSvS3vi7zk07M/IwAL03fVKvqiKU65D4859AOgbjkGyytWG1iv +t7ENh6GYHGJj71L+OlZZH25cJQ/2gGsYs4IYrT6w4Z1X5TscOL/tBiCDdTwcdT0q ++YdkL9ZONouHvgszb9IFvfFErzmmG7jTHwC/TzR0nC8vPog9+y05G4vnD1h7lzH7 +8xDsGrn86gcjYXXRPfc4AxDZfmaM8S0SFmd+O7B24sUKmSyxF3A7OVnb0/rTMuez +Izoy6RW9WQpCJM5R9k7YFDI5lQI+PiKT8GqzQuFIFXRYwOIwggMCBgkqhkiG9w0B +BwEwEQYFKw4DAgcECLsGKZ/iQ1HBgIIC4J1lxb/gn6EosJyMrTV8KnJxvD+Garzp +zmrDNvl9Q7CHmpNLuW3dngU5JcB5dElq7B+j6+RXNkupcrd2dvllAmwfPpFblmNp +Snsn99TTwDYv4LrpxNCcoIKSm93H28wfszhPv75zD9+/aIy4JK4UwYuv+p5JHfLW +EhvWO4pxUc2YpB8jiUVKTJJcRohry/lwvXu5s8VjmpoADSflHtAA4DUhFKX2fafu +Ux7muxbh7xFViNY6laQ/tuZuxxjs2Eb5aWWizO00cyLP2724vFQL+lnvyAvtSmcD +z2hOeOvvch6sJ4krx/gFznqe/lVksPyJQOj+Or8RTbC26kV4GQwiuGqgp6zhNjYe +4niPvGxVAFz8Qdv8Zu47fSHgI2nz5YlWuE2NiQ1qtCbMsf2k/NnZrTgx2oZxnZvL +B2We2D0u6BRZo4XMvGUqOLlGIV5scusv39/sBblJGOwNjtekG/pIRmiHXuI+RQOX +yr4tLR8clylf/HEMmYn2UVxXXuWsEr6zdBB3u3JhXhq+YmDpYYnTkxZq4nTz7oMY +MicrF0+iUrun6lIAXEU6yOSPehje5PfZW5PqKlpugKYIQSsbuJ4t/8n/MczHbRk9 +CcIX05OeWUdxRPKYa7Jt8umXnuIqWu7s7uZpbiB/tmuW4Cp16xUv53SgrTm4tiMq +b7O3ftMmEiFZ+uXds/ODfh7bTe4YlWdyimkCcyI4dcIjLxe+ifx4T+b4LktIc5Pd +5MHwAN+F1yIWnPxi8Nep9Pnw4HiX/ZkL0jHG0msZgZ60jb1U3LV4w3VI1WrsjvJM +6M+l7HM3xeTl9posjVQPxb7kyX5s6gDe4IaatPrNYcsDJ4t43v/se/nvlrQtkJzv +D4S2a9l833kYIC0MvoT8dqJuwySPZxjK0Io69sd6Af1BTGBoSQL75pOntrQUhICl +/kfjBkG5h6tpJFSZQEReK3Kg9rKIax5VwgQUte2yVu3EYARd3YZ7On+gggMTMIID +DzCCAfegAwIBAgITAkxY3LTPyvVkS5SUobGvznBgQDANBgkqhkiG9w0BAQUFADBC +MQswCQYDVQQGEwJTRTERMA8GA1UEChMIRXJpY3Nzb24xIDAeBgNVBAMTF0M4MjYx +MjQ1ODEuZXJpY3Nzb24uY29tMB4XDTEzMDgyMTE1MTcwM1oXDTE0MDgyMTE1MTcw +M1owQjELMAkGA1UEBhMCU0UxETAPBgNVBAoTCEVyaWNzc29uMSAwHgYDVQQDExdD +ODI2MTI0NTgxLmVyaWNzc29uLmNvbTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAPgg9zlAP6Z8vDMq+Ux0mq1RPLLtG2kByeauGvKdzbRLxtiyyKlknFQ8 +jdn8w3NrQiXTYSEcR0eDWjpLiwvkW2WC+lARIHUWQjRJWQIaSQ1lu9rDHlMYr2xm +6EF6QDgr/9fqkY1IrF/gEAwnNQhT44qCzSr/jqmf5phd5qslzYlpYY97yeEihiCT +wa/BNl1puS3+ayXI9e73Fpeysd0+TFjgbUwhUZn8kcKnDiynb19cyKzk4F1MQHwu +QDFUkxtFcKMW8GikjEYy0Gw8CJUPl4SedtwoU4PGhWqgA/vYOPhdP6LfSBhTmU3s +tUrFxUuMAiRF24JHdTj2bv+huDotWu0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA +PtB1eG9FbriUPD79Kb5uyt15JoROPDBc3voR9HffqDsANyEJ3VPlvAFEyrQzbdnA +V5slZRR7M5AJBha1K3BIR7Cs74BlCXiiuWi358HnPGsHqqJjKVxlTKJksrRLvUr4 +K2bG1kBniQU/PkSZjB1DbSwAqw4So9BKLbzQFE8888/yETeCIEWnG2YMiRe1GB0r +P/88QJctNrsT5oLdZ9E4igcAoGna6UR71PJSFCBoJ5WsnofMf44gZr7bgg2szoZr +KDPnrlsi9SM4nWzTaxSTjEp3397QMwEHosJxwXv/Zy5QyGBDYfynaTRUVS2BwIfo +AqRdylyrbv/+3NBQxdERRjGCAigwggIkAgEBMFkwQjELMAkGA1UEBhMCU0UxETAP +BgNVBAoTCEVyaWNzc29uMSAwHgYDVQQDExdDODI2MTI0NTgxLmVyaWNzc29uLmNv +bQITAkxY3LTPyvVkS5SUobGvznBgQDAMBggqhkiG9w0CBQUAoIGiMBIGCmCGSAGG ++EUBCQIxBBMCMTkwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAfBgkqhkiG9w0B +CQQxEgQQaEUDvpv6H163UM7zAQiMvDAgBgpghkgBhvhFAQkFMRIEEN4FI8tal3of +ZTXKi1Ny2cswLwYKYIZIAYb4RQEJBzEhEx8yOUFBQjJFNTY5OUY1QjI1QTJEQUI3 +NDlGN0Q0QTFBMA0GCSqGSIb3DQEBAQUABIIBACnR54LqeHZ0u8bSErSnGupEytHK +xbfShraXl3DFPnIZYs0HUuuriw5/BhkFHBsSXO8Oqm759/UgxOjnCUD2AKHenGoK +LB0yqLGe/USBs0IkBv6lXg7HJhSDNqAPES6a5iUVIRv+M40Ldob570MKjZhERVPN +AVSHMJHKmtVTZGt/VqiVk0qqZeV9nqhaSPFyW9pQU0PKep0lFltnwCHUTZiiqHuk +SIpZFCmIgahAUcl/WrxiW4xC9L5+wBgsuaUU5LqLZwg3AFua0aaDs6NZXpSE0A43 +zm5whhmkVePjnSUUr78AoBRalsBdMkDwLoUZZ1Hhq+/WH+WW7TQ96zm+uzE= +-----END PKCS7----- + diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml index d8c82b2459..36b3b51a99 100644 --- a/lib/runtime_tools/doc/src/dbg.xml +++ b/lib/runtime_tools/doc/src/dbg.xml @@ -244,7 +244,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\ </item> <tag><c>all</c></tag> <item> - <p>Sets all flags.</p> + <p>Sets all flags except <c>silent</c>.</p> </item> <tag><c>clear</c></tag> <item> diff --git a/lib/runtime_tools/src/Makefile b/lib/runtime_tools/src/Makefile index 2347986c53..8d2bcfe3d1 100644 --- a/lib/runtime_tools/src/Makefile +++ b/lib/runtime_tools/src/Makefile @@ -42,6 +42,7 @@ MODULES= \ dbg \ dyntrace \ percept_profile \ + system_information \ observer_backend \ ttb_autostart HRL_FILES= ../include/observer_backend.hrl diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl index 6b2fb0460f..f0086e8cc7 100644 --- a/lib/runtime_tools/src/dbg.erl +++ b/lib/runtime_tools/src/dbg.erl @@ -1113,7 +1113,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]); transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]); transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]); transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]); -transform_flags([all|_],_Acc) -> all(); +transform_flags([all|_],_Acc) -> all()--[silent]; transform_flags([F|Tail]=List,Acc) when is_atom(F) -> case lists:member(F, all()) of true -> transform_flags(Tail,[F|Acc]); @@ -1124,7 +1124,7 @@ transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}. all() -> [send,'receive',call,procs,garbage_collection,running, set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link, - timestamp,arity,return_to]. + timestamp,arity,return_to,silent]. display_info([Node|Nodes]) -> io:format("~nNode ~w:~n",[Node]), diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src index 602048dc21..d46cfe1f32 100644 --- a/lib/runtime_tools/src/runtime_tools.app.src +++ b/lib/runtime_tools/src/runtime_tools.app.src @@ -21,7 +21,7 @@ {vsn, "%VSN%"}, {modules, [appmon_info, dbg,observer_backend,percept_profile, runtime_tools,runtime_tools_sup,erts_alloc_config, - ttb_autostart,dyntrace]}, + ttb_autostart,dyntrace,system_information]}, {registered, [runtime_tools_sup]}, {applications, [kernel, stdlib]}, {env, []}, diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl new file mode 100644 index 0000000000..1d4b878d79 --- /dev/null +++ b/lib/runtime_tools/src/system_information.erl @@ -0,0 +1,554 @@ +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. 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% +%% + + +%% The main purpose of system_information is to aggregate all information +%% deemed useful for investigation, i.e. system_information:report/0. + +%% The server and all other utilities surrounding this is for inspecting +%% reported values. Functions will be added to this as time goes by. + +-module(system_information). +-behaviour(gen_server). + +%% API +-export([ + report/0, + from_file/1, + to_file/1 + ]). +-export([ + start/0, stop/0, + load_report/0, load_report/2, + applications/0, applications/1, + application/1, application/2, + environment/0, environment/1, + module/1, module/2, + modules/1 + ]). + +%% gen_server callbacks +-export([ + init/1, + handle_call/3, + handle_cast/2, + handle_info/2, + terminate/2, + code_change/3 + ]). + +-define(SERVER, ?MODULE). + +%% change version if parsing of file changes +-define(REPORT_FILE_VSN, "1.0"). + +-record(state, { + report + }). + +%%=================================================================== +%% API +%%=================================================================== + +start() -> + gen_server:start({local, ?SERVER}, ?MODULE, [], []). + +stop() -> + gen_server:call(?SERVER, stop). + +load_report() -> load_report(data, report()). + +load_report(file, File) -> load_report(data, from_file(File)); +load_report(data, Report) -> + start(), gen_server:call(?SERVER, {load_report, Report}). + +report() -> [ + {init_arguments, init:get_arguments()}, + {code_paths, code:get_path()}, + {code, code()}, + {system_info, erlang_system_info()}, + {erts_compile_info, erlang:system_info(compile_info)}, + {beam_dynamic_libraries, get_dynamic_libraries()}, + {environment_erts, os_getenv_erts_specific()}, + {environment, [split_env(Env) || Env <- os:getenv()]} + ]. + +to_file(File) -> + file:write_file(File, iolist_to_binary([ + io_lib:format("{system_information_version, ~p}.~n", [ + ?REPORT_FILE_VSN + ]), + io_lib:format("{system_information, ~p}.~n", [ + report() + ]) + ])). + +from_file(File) -> + case file:consult(File) of + {ok, Data} -> + case get_value([system_information_version], Data) of + ?REPORT_FILE_VSN -> + get_value([system_information], Data); + Vsn -> + erlang:error({unknown_version, Vsn}) + end; + _ -> + erlang:error(bad_report_file) + end. + +applications() -> applications([]). +applications(Opts) when is_list(Opts) -> + gen_server:call(?SERVER, {applications, Opts}). + +application(App) when is_atom(App) -> application(App, []). +application(App, Opts) when is_atom(App), is_list(Opts) -> + gen_server:call(?SERVER, {application, App, Opts}). + +environment() -> environment([]). +environment(Opts) when is_list(Opts) -> + gen_server:call(?SERVER, {environment, Opts}). + +module(M) when is_atom(M) -> module(M, []). +module(M, Opts) when is_atom(M), is_list(Opts) -> + gen_server:call(?SERVER, {module, M, Opts}). + +modules(Opt) when is_atom(Opt) -> + gen_server:call(?SERVER, {modules, Opt}). + +%%=================================================================== +%% gen_server callbacks +%%=================================================================== + +init([]) -> + {ok, #state{}}. + +handle_call(stop, _From, S) -> + {stop, normal, ok, S}; + +handle_call({load_report, Report}, _From, S) -> + Version = get_value([system_info, system_version], Report), + io:format("Loaded report from system version: ~s~n", [Version]), + {reply, ok, S#state{ report = Report }}; + +handle_call(_Req, _From, #state{ report = undefined } = S) -> + {reply, {error, report_not_loaded}, S}; + +handle_call({applications, Opts}, _From, #state{ report = Report } = S) -> + ok = print_applications(get_value([code], Report), Opts), + {reply, ok, S}; + +handle_call({application, App, Opts}, _From, #state{ report = Report } = S) -> + Data = get_value([App], [AppInfo||{application, AppInfo}<-get_value([code], Report)]), + ok = print_application({App, Data}, Opts), + {reply, ok, S}; + + +handle_call({environment, Opts}, _From, #state{ report = Report } = S) -> + Choices = case proplists:get_bool(full, Opts) of + true -> [environment]; + false -> [environment_erts] + end, + ok = print_environments(get_value(Choices, Report), Opts), + {reply, ok, S}; + + +handle_call({module, M, Opts}, _From, #state{ report = Report } = S) -> + Mods = find_modules_from_code(M, get_value([code], Report)), + print_modules_from_code(M, Mods, Opts), + {reply, ok, S}; + +handle_call({modules, native}, _From, #state{ report = Report } = S) -> + Codes = get_native_modules_from_code(get_value([code],Report)), + io:format("~p~n", [Codes]), + {reply, ok, S}; + + +handle_call(_Request, _From, State) -> + {reply, ok, State}. + +handle_cast(_Msg, State) -> + {noreply, State}. + +handle_info(_Info, State) -> + {noreply, State}. + +terminate(_Reason, _State) -> + ok. + +code_change(_OldVsn, State, _Extra) -> + {ok, State}. + +%%=================================================================== +%% Internal functions +%%=================================================================== + +%% handle report values + +get_value([], Data) -> Data; +get_value([K|Ks], Data) -> + get_value(Ks, proplists:get_value(K, Data, [])). + +find_modules_from_code(M, [{code, Info}|Codes]) -> + case find_modules(M, get_value([modules], Info)) of + [] -> find_modules_from_code(M, Codes); + Mods -> + Path = get_value([path], Info), + [{Path, Mods}|find_modules_from_code(M, Codes)] + end; +find_modules_from_code(M, [{application, {App, Info}}|Codes]) -> + case find_modules(M, get_value([modules], Info)) of + [] -> find_modules_from_code(M, Codes); + Mods -> + Path = get_value([path], Info), + Vsn = get_value([vsn], Info), + [{App, Vsn, Path, Mods}|find_modules_from_code(M, Codes)] + end; +find_modules_from_code(_, []) -> []. + +find_modules(M, [{M, _}=Info|Ms]) -> [Info|find_modules(M,Ms)]; +find_modules(M, [_|Ms]) -> find_modules(M, Ms); +find_modules(_, []) -> []. + +get_native_modules_from_code([{application, {App, Info}}|Cs]) -> + case get_native_modules(get_value([modules], Info)) of + [] -> get_native_modules_from_code(Cs); + Mods -> + Path = get_value([path], Info), + Vsn = get_value([vsn], Info), + [{App, Vsn, Path, Mods}|get_native_modules_from_code(Cs)] + end; +get_native_modules_from_code([{code, Info}|Cs]) -> + case get_native_modules(get_value([modules], Info)) of + [] -> get_native_modules_from_code(Cs); + Mods -> + Path = get_value([path], Info), + [{Path, Mods}|get_native_modules_from_code(Cs)] + end; +get_native_modules_from_code([]) -> []. + +get_native_modules([]) -> []; +get_native_modules([{Mod, Info}|Ms]) -> + case proplists:get_value(native, Info) of + false -> get_native_modules(Ms); + _ -> [Mod|get_native_modules(Ms)] + end. + + +%% print information + +print_applications([{application, App}|Apps], Opts) -> + print_application(App, Opts), + print_applications(Apps, Opts); +print_applications([{code,_}|Apps], Opts) -> + print_applications(Apps, Opts); +print_applications([], _) -> + ok. + +print_application({App, Info}, Opts) -> + Vsn = get_value([vsn], Info), + io:format(" * ~w-~s~n", [App, Vsn]), + case proplists:get_bool(full, Opts) of + true -> + _ = [ begin + print_module(Minfo) + end || Minfo <- get_value([modules], Info) ], + ok; + false -> + ok + end. + +print_environments([Env|Envs],Opts) -> + print_environment(Env,Opts), + print_environments(Envs,Opts); +print_environments([],_) -> + ok. + +print_environment({_Key, false},_) -> ok; +print_environment({Key, Value},_) -> + io:format(" - ~s = ~s~n", [Key, Value]). + +print_modules_from_code(M, [Info|Ms], Opts) -> + print_module_from_code(M, Info), + case proplists:get_bool(full, Opts) of + true -> print_modules_from_code(M, Ms, Opts); + false -> ok + end; +print_modules_from_code(_, [], _) -> + ok. + +print_module_from_code(M, {Path, [{M,ModInfo}]}) -> + io:format(" from path \"~s\" (no application):~n", [Path]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok; +print_module_from_code(M, {App,Vsn,Path,[{M,ModInfo}]}) -> + io:format(" from path \"~s\" (~w-~s):~n", [Path,App,Vsn]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok. + +print_module({Mod, ModInfo}) -> + io:format(" - ~w:~n", [Mod]), + io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]), + io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]), + io:format(" - native: ~w~n", [get_value([native], ModInfo)]), + io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]), + ok. + + + +%% get useful information from erlang:system_info/1 + +erlang_system_info() -> + erlang_system_info([ + allocator, + check_io, + otp_release, + port_limit, + process_limit, + % procs, % not needed + smp_support, + system_version, + system_architecture, + threads, + thread_pool_size, + {wordsize,internal}, + {wordsize,external}, + {cpu_topology, defined}, + {cpu_topology, detected}, + scheduler_bind_type, + scheduler_bindings, + compat_rel, + schedulers_state, + build_type, + logical_processors, + logical_processors_online, + logical_processors_available, + driver_version, + emu_args, + ethread_info, + beam_jump_table, + taints + ]). + +erlang_system_info([]) -> []; +erlang_system_info([Type|Types]) -> + [{Type, erlang:system_info(Type)}|erlang_system_info(Types)]. + + +%% get known useful erts environment + +os_getenv_erts_specific() -> + os_getenv_erts_specific([ + "BINDIR", + "DIALYZER_EMULATOR", + "CERL_DETACHED_PROG", + "EMU", + "ERL_CONSOLE_MODE", + "ERL_CRASH_DUMP", + "ERL_CRASH_DUMP_NICE", + "ERL_CRASH_DUMP_SECONDS", + "ERL_EPMD_PORT", + "ERL_EMULATOR_DLL", + "ERL_FULLSWEEP_AFTER", + "ERL_LIBS", + "ERL_MALLOC_LIB", + "ERL_MAX_PORTS", + "ERL_MAX_ETS_TABLES", + "ERL_NO_VFORK", + "ERL_NO_KERNEL_POLL", + "ERL_THREAD_POOL_SIZE", + "ERLC_EMULATOR", + "ESCRIPT_EMULATOR", + "HOME", + "HOMEDRIVE", + "HOMEPATH", + "LANG", + "LC_ALL", + "LC_CTYPE", + "PATH", + "PROGNAME", + "RELDIR", + "ROOTDIR", + "TERM", + %"VALGRIND_LOG_XML", + + %% heart + "COMSPEC", + "HEART_COMMAND", + + %% run_erl + "RUN_ERL_LOG_ALIVE_MINUTES", + "RUN_ERL_LOG_ACTIVITY_MINUTES", + "RUN_ERL_LOG_ALIVE_FORMAT", + "RUN_ERL_LOG_ALIVE_IN_UTC", + "RUN_ERL_LOG_GENERATIONS", + "RUN_ERL_LOG_MAXSIZE", + "RUN_ERL_DISABLE_FLOWCNTRL", + + %% driver getenv + "CALLER_DRV_USE_OUTPUTV", + "ERL_INET_GETHOST_DEBUG", + "ERL_EFILE_THREAD_SHORT_CIRCUIT", + "ERL_WINDOW_TITLE", + "ERL_ABORT_ON_FAILURE", + "TTYSL_DEBUG_LOG" + ]). + +os_getenv_erts_specific([]) -> []; +os_getenv_erts_specific([Key|Keys]) -> + [{Key, os:getenv(Key)}|os_getenv_erts_specific(Keys)]. + +split_env(Env) -> + split_env(Env, []). + +split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs}; +split_env([I|Vs], Key) -> split_env(Vs, [I|Key]); +split_env([], KV) -> lists:reverse(KV). % should not happen. + +%% get applications + +code() -> + % order is important + get_code_from_paths(code:get_path()). + +get_code_from_paths([]) -> []; +get_code_from_paths([Path|Paths]) -> + case is_application_path(Path) of + true -> + [{application, get_application_from_path(Path)}|get_code_from_paths(Paths)]; + false -> + [{code, [ + {path, Path}, + {modules, get_modules_from_path(Path)} + ]}|get_code_from_paths(Paths)] + end. + +is_application_path(Path) -> + case filelib:wildcard(filename:join(Path, "*.app")) of + [] -> false; + _ -> true + end. + +get_application_from_path(Path) -> + [Appfile|_] = filelib:wildcard(filename:join(Path, "*.app")), + case file:consult(Appfile) of + {ok, [{application, App, Info}]} -> + {App, [ + {description, proplists:get_value(description, Info, [])}, + {vsn, proplists:get_value(vsn, Info, [])}, + {path, Path}, + {modules, get_modules_from_path(Path)} + ]} + end. + +get_modules_from_path(Path) -> + [ + begin + {ok,{Mod, Md5}} = beam_lib:md5(Beam), + Loaded = case code:is_loaded(Mod) of + false -> false; + _ -> true + end, + {Mod, [ + {loaded, Loaded}, + {native, beam_is_native_compiled(Beam)}, + {compiler, get_compiler_version(Beam)}, + {md5, hexstring(Md5)} + ]} + end || Beam <- filelib:wildcard(filename:join(Path, "*.beam")) + ]. + +hexstring(Bin) when is_binary(Bin) -> + lists:flatten([io_lib:format("~2.16.0b", [V]) || <<V>> <= Bin]). + +%% inspect beam files for information + +get_compiler_version(Beam) -> + case beam_lib:chunks(Beam, [compile_info]) of + {ok,{_,[{compile_info, Info}]}} -> + proplists:get_value(version, Info); + _ -> undefined + end. + +%% we don't know the specific chunk names of native code +%% we don't want to load the code to check it +beam_is_native_compiled(Beam) -> + Chunks = get_value([chunks], beam_lib:info(Beam)), + case check_known_hipe_chunks(Chunks) of + [] -> false; + [Arch] -> {true, Arch}; + Archs -> {true, Archs} + end. + + +check_known_hipe_chunks([{Tag,_,_}|Cs]) -> + case is_chunk_tag_hipe_arch(Tag) of + false -> check_known_hipe_chunks(Cs); + {true, Arch} -> [Arch|check_known_hipe_chunks(Cs)] + end; +check_known_hipe_chunks([]) -> []. + +%% these values are taken from hipe_unified_loader +%% perhaps these should be exported in that module? + +-define(HS8P_TAG,"HS8P"). +-define(HPPC_TAG,"HPPC"). +-define(HP64_TAG,"HP64"). +-define(HARM_TAG,"HARM"). +-define(HX86_TAG,"HX86"). +-define(HA64_TAG,"HA64"). + +is_chunk_tag_hipe_arch(Tag) -> + case Tag of + ?HA64_TAG -> {true, amd64}; %% HiPE, x86_64, (implicit: 64-bit, Unix) + ?HARM_TAG -> {true, arm}; %% HiPE, arm, v5 (implicit: 32-bit, Linux) + ?HPPC_TAG -> {true, powerpc}; %% HiPE, PowerPC (implicit: 32-bit, Linux) + ?HP64_TAG -> {true, ppc64}; %% HiPE, ppc64 (implicit: 64-bit, Linux) + ?HS8P_TAG -> {true, ultrasparc}; %% HiPE, SPARC, V8+ (implicit: 32-bit) + %% Future: HSV9 %% HiPE, SPARC, V9 (implicit: 64-bit) + %% HW32 %% HiPE, x86, Win32 + _ -> false + end. + + +get_dynamic_libraries() -> + Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]), + case os:type() of + {unix, darwin} -> os:cmd("otool -L " ++ Beam); + _ -> os:cmd("ldd " ++ Beam) + end. + +get_beam_name() -> + Type = case erlang:system_info(build_type) of + opt -> ""; + TypeName -> "." ++ atom_to_list(TypeName) + end, + Flavor = case erlang:system_info(smp_support) of + false -> ""; + true -> ".smp" + end, + Beam = case os:getenv("EMU") of + false -> "beam"; + Value -> Value + end, + Beam ++ Type ++ Flavor. diff --git a/lib/runtime_tools/test/Makefile b/lib/runtime_tools/test/Makefile index bcabdf13ed..dcb9082231 100644 --- a/lib/runtime_tools/test/Makefile +++ b/lib/runtime_tools/test/Makefile @@ -5,6 +5,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk MODULES = \ dyntrace_SUITE \ runtime_tools_SUITE \ + system_information_SUITE \ dbg_SUITE \ erts_alloc_config_SUITE diff --git a/lib/runtime_tools/test/system_information_SUITE.erl b/lib/runtime_tools/test/system_information_SUITE.erl new file mode 100644 index 0000000000..fb9455a30f --- /dev/null +++ b/lib/runtime_tools/test/system_information_SUITE.erl @@ -0,0 +1,300 @@ +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2013. 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(system_information_SUITE). + +-include_lib("common_test/include/ct.hrl"). + +%% Test server callbacks +-export([suite/0, all/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]). + +%% Test cases +-export([ + %% API-test + api_report/1, + api_to_file/1, + api_from_file/1, + %% server + api_start_stop/1, + validate_server_interface/1 + ]). + +%%-------------------------------------------------------------------- +%% COMMON TEST CALLBACK FUNCTIONS +%%-------------------------------------------------------------------- +%%-------------------------------------------------------------------- +%% Function: groups() -> [Group] +%% +%% Group = {GroupName,Properties,GroupsAndTestCases} +%% GroupName = atom() +%% The name of the group. +%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}] +%% Group properties that may be combined. +%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase] +%% TestCase = atom() +%% The name of a test case. +%% Shuffle = shuffle | {shuffle,Seed} +%% To get cases executed in random order. +%% Seed = {integer(),integer(),integer()} +%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail | +%% repeat_until_any_ok | repeat_until_any_fail +%% To get execution of cases repeated. +%% N = integer() | forever +%% +%% Description: Returns a list of test case group definitions. +%%-------------------------------------------------------------------- +groups() -> + []. + +%%-------------------------------------------------------------------- +%% Function: all() -> GroupsAndTestCases | {skip,Reason} +%% +%% GroupsAndTestCases = [{group,GroupName} | TestCase] +%% GroupName = atom() +%% Name of a test case group. +%% TestCase = atom() +%% Name of a test case. +%% Reason = term() +%% The reason for skipping all groups and test cases. +%% +%% Description: Returns the list of groups and test cases that +%% are to be executed. +%%-------------------------------------------------------------------- +all() -> [ + api_report, + api_to_file, + api_from_file, + api_start_stop, + validate_server_interface + ]. + + +%%-------------------------------------------------------------------- +%% Function: suite() -> Info +%% +%% Info = [tuple()] +%% List of key/value pairs. +%% +%% Description: Returns list of tuples to set default properties +%% for the suite. +%% +%% Note: The suite/0 function is only meant to be used to return +%% default data values, not perform any other operations. +%%-------------------------------------------------------------------- +suite() -> [ + {timetrap,{minutes,1}}, + {ct_hooks,[ts_install_cth]} + ]. + +%%-------------------------------------------------------------------- +%% Function: init_per_suite(Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the suite. +%% +%% Description: Initialization before the suite. +%% +%% Note: This function is free to add any key/value pairs to the Config +%% variable, but should NOT alter/remove any existing entries. +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_suite(Config0) -> void() | {save_config,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% +%% Description: Cleanup after the suite. +%%-------------------------------------------------------------------- +end_per_suite(_Config) -> + ok. + +%%-------------------------------------------------------------------- +%% Function: init_per_group(GroupName, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% GroupName = atom() +%% Name of the test case group that is about to run. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding configuration data for the group. +%% Reason = term() +%% The reason for skipping all test cases and subgroups in the group. +%% +%% Description: Initialization before each test case group. +%%-------------------------------------------------------------------- +init_per_group(_GroupName, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_group(GroupName, Config0) -> +%% void() | {save_config,Config1} +%% +%% GroupName = atom() +%% Name of the test case group that is finished. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding configuration data for the group. +%% +%% Description: Cleanup after each test case group. +%%-------------------------------------------------------------------- +end_per_group(_GroupName, _Config) -> + ok. + +%%-------------------------------------------------------------------- +%% Function: init_per_testcase(TestCase, Config0) -> +%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1} +%% +%% TestCase = atom() +%% Name of the test case that is about to run. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the test case. +%% +%% Description: Initialization before each test case. +%% +%% Note: This function is free to add any key/value pairs to the Config +%% variable, but should NOT alter/remove any existing entries. +%%-------------------------------------------------------------------- +init_per_testcase(_TestCase, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Function: end_per_testcase(TestCase, Config0) -> +%% void() | {save_config,Config1} | {fail,Reason} +%% +%% TestCase = atom() +%% Name of the test case that is finished. +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for failing the test case. +%% +%% Description: Cleanup after each test case. +%%-------------------------------------------------------------------- +end_per_testcase(_TestCase, _Config) -> + ok. + + +%%-------------------------------------------------------------------- +%% TEST CASES +%%-------------------------------------------------------------------- + +%%-------------------------------------------------------------------- +%% Function: TestCase(Config0) -> +%% ok | exit() | {skip,Reason} | {comment,Comment} | +%% {save_config,Config1} | {skip_and_save,Reason,Config1} +%% +%% Config0 = Config1 = [tuple()] +%% A list of key/value pairs, holding the test case configuration. +%% Reason = term() +%% The reason for skipping the test case. +%% Comment = term() +%% A comment about the test case that will be printed in the html log. +%% +%% Description: Test case function. (The name of it must be specified in +%% the all/0 list or in a test case group for the test case +%% to be executed). +%%-------------------------------------------------------------------- + + +api_report(_Config) -> + Report = system_information:report(), + ok = validate_report(Report), + ok. + +api_to_file(Config) -> + DataDir = ?config(data_dir, Config), + Filename = filename:join([DataDir, "system_information_report_1.dat"]), + ok = system_information:to_file(Filename), + {ok, _} = file:consult(Filename), + {save_config, [{report_name, Filename}]}. + +api_from_file(Config) -> + {api_to_file, Saved} = ?config(saved_config, Config), + DataDir = ?config(data_dir, Config), + Fname1 = filename:join([DataDir, "information_test_report.dat"]), + Report1 = system_information:from_file(Fname1), + ok = validate_report(Report1), + Fname2 = ?config(report_name, Saved), + Report2 = system_information:from_file(Fname2), + ok = validate_report(Report2), + ok. + +api_start_stop(_Config) -> + {ok, _} = system_information:start(), + ok = system_information:stop(), + ok. + +validate_server_interface(Config) -> + DataDir = ?config(data_dir, Config), + Fname1 = filename:join([DataDir, "information_test_report.dat"]), + %% load old report + ok = system_information:load_report(file, Fname1), + ok = validate_loaded_report(), + ok = system_information:stop(), + %% load local + ok = system_information:load_report(), + ok = validate_loaded_report(), + ok = system_information:stop(), + ok. + + +%% aux + +validate_loaded_report() -> + ok = system_information:applications(), + ok = system_information:applications([full]), + ok = system_information:environment(), + ok = system_information:environment([full]), + ok = system_information:application(kernel), + ok = system_information:application(kernel,[full]), + ok = system_information:module(gen_server), + ok = system_information:module(gen_server,[full]), + ok = system_information:modules(native), + ok. + + +validate_report([]) -> {error, no_entries}; +validate_report(Report) -> + ensure_report_keys([ + init_arguments, + code_paths, + code, + system_info, + erts_compile_info, + beam_dynamic_libraries, + environment_erts, + environment + ], Report). + +ensure_report_keys([], _) -> ok; +ensure_report_keys([K|Ks], Report) -> + case lists:keysearch(K, 1, Report) of + false -> {error, key_not_found, K}; + _ -> ensure_report_keys(Ks, Report) + end. + diff --git a/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat new file mode 100644 index 0000000000..0900eadd4a --- /dev/null +++ b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat @@ -0,0 +1,9873 @@ +{system_information_version, "1.0"}. +{system_information, [{init_arguments, + [{root, + ["/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"]}, + {progname,["erl"]}, + {home,["/home/otptest"]}]}, + {code_paths, + [".", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"]}, + {code, + [{code,[{path,"."},{modules,[]}]}, + {application, + {kernel, + [{description,"ERTS CXC 138 10"}, + {vsn,"2.16.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin"}, + {modules, + [{application, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"69c3102d717e7258701a536ddae1eb89"}]}, + {application_controller, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bbfd81a8486ac040562ce0fd40c32aa"}]}, + {application_master, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8eee82bfd661e8f0d862f3aad5b85ca"}]}, + {application_starter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d505f3189443053e586fdf270446ce2f"}]}, + {auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"800c93bf9ba03b6e4951de0d5db28328"}]}, + {code, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84f37378526c5e82c5d0d967c1ca8f82"}]}, + {code_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09ce0ef7103f3151553c6badc7e96fc1"}]}, + {disk_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5ab0573095f258c87f6166af8f8425c"}]}, + {disk_log_1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"287f2521436a30a0567d54e2596c1034"}]}, + {disk_log_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c7972e5f3dedce5c87cf8ef88c59bb2"}]}, + {disk_log_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6012237e70b570585bfb58f60537d9c"}]}, + {dist_ac, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4dfa17c94d63da8f6b9edb1532a3e537"}]}, + {dist_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8fa19e7b4bca4b5aac847d138c85c553"}]}, + {erl_boot_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86ecca01e41b2321c01b7181cb826766"}]}, + {erl_ddll, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90f1c7a6fd3cf6595d95b9f57abd87ce"}]}, + {erl_distribution, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16a49a506b48567bd32b2021dac425ff"}]}, + {erl_epmd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eee4870e061790054c43ff70bbccbe25"}]}, + {erl_reply, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e0a4f09b0877938b4d79b41122dad38"}]}, + {error_handler, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1af2b51d167b017b3e1fae0beb408181"}]}, + {error_logger, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"941136b080021af90dc32f23774b0def"}]}, + {erts_debug, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a7b675323db5946605344ffccca170"}]}, + {file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5eccb55276e7162ab5bec77b46562332"}]}, + {file_io_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"032292fd7d9e2bf08ff23de192710f97"}]}, + {file_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58bd1e532dee0fccff9e1fba1e429a5e"}]}, + {gen_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e5e5a8c7708c9a81f26d2a89e3987c"}]}, + {gen_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4cf58918602a7242ca4060bc1d6b5652"}]}, + {gen_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"361b9b25604b9053a8a4c98b8df47408"}]}, + {global, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e553137965978f64ffb9ef274c79e9c2"}]}, + {global_group, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ce6b230fef9340aeb41205a6ef4b4f3"}]}, + {global_search, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a82f2701d71d2a1576074dd69414e1b"}]}, + {group, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6b3164d5d61625f0651c13107459627c"}]}, + {heart, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b808d9003cf50d73ebf888da50d73e12"}]}, + {hipe_unified_loader, + [{loaded,true}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"879423975936fcf88729034f7d4a93b6"}]}, + {inet, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd325ceedcab3ca885eeaf4c982561e0"}]}, + {inet6_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8b6d95ec571f5e669047b5f40455d21"}]}, + {inet6_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93a9204ef927b17957c61a18f3ba47e2"}]}, + {inet6_tcp_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a94acd2c5dc0e625d2c2b4292e9a27a"}]}, + {inet6_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17a90b344977dd2c657309507c99b516"}]}, + {inet_config, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"741587fa47d6b66b96ef125b3d5ba61a"}]}, + {inet_db, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f65160805d30ff194618a5ae4038ae9f"}]}, + {inet_dns, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f0c31b6cecf31d641bf46840f85ebee"}]}, + {inet_gethost_native, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09867d1d19f3c30b73fb47a48d0d843a"}]}, + {inet_hosts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0f48322bd3a1bd0e75f248e39b41f69"}]}, + {inet_parse, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29aee7378a4d1f814e1fd311d0eaab3a"}]}, + {inet_res, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1018a662254323cfa45309afb3b3397"}]}, + {inet_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cbce09a1ffa13cb124d87eaecd25dfbf"}]}, + {inet_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0da6499cb44db53be6145a5dc3449d93"}]}, + {inet_tcp_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"797e28cd89efe3a1a9d83244afd0b880"}]}, + {inet_udp, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70908d7165a2b298a85d9a4c1f8f9fa2"}]}, + {kernel, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf5c248b778654e664e6d2368ec285df"}]}, + {kernel_config, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39fbe27956eeb0cca9d7871f7de40a2e"}]}, + {net, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb8595f084959a2b5e329ab32047dbc4"}]}, + {net_adm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"628c961d8dbbab4c5b2b180e527530be"}]}, + {net_kernel, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"049f43826000bfefbbc2376bd21c9919"}]}, + {os, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"464c6c09afb87824ecf12bfa6065b3dc"}]}, + {pg2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34858fa3619c1dc17d01536593359ed2"}]}, + {ram_file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28bf8253c5f8357ab68b4d505e170856"}]}, + {rpc, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"895e080302ac8a39197dfac0cc53adc6"}]}, + {seq_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"845af954b395a80e5cf3d0c2ea0a3b99"}]}, + {standard_error, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0ac4192fd9f73885581481638c1648a"}]}, + {user, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93ad1841fa2dee776bff76f8989f5021"}]}, + {user_drv, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"161f1a45735f77129c80bacd778e5632"}]}, + {user_sup, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"baab537a62725bcbe4510c9f0b2d99eb"}]}, + {wrap_log_reader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5dceb6e671d0c51d181f51ec4e031798"}]}]}]}}, + {application, + {stdlib, + [{description,"ERTS CXC 138 10"}, + {vsn,"1.19.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin"}, + {modules, + [{array, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7c98b180715bd79794eef21a2930fff"}]}, + {base64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e45b571f2414c6131fbf62b1da3560e5"}]}, + {beam_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e13b050aff529ecac6569f7101237ba"}]}, + {binary, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e77ffd0688b3f1ace1ac70936969da3"}]}, + {c, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"402465a98ccec8e9314139daacf6203e"}]}, + {calendar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c09413575ac7f80ea3d9217b1f7e1bc"}]}, + {dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5154c82c2ffefa19096cf87ffb394a6c"}]}, + {dets_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c810e731ba4101aba5f6b6c08481ea85"}]}, + {dets_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9b4a9ef0f616b7c5464cf6813384e220"}]}, + {dets_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a64e0220f855e6e97d53a9bc4f0a111b"}]}, + {dets_v8, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ebf2c94f62d180c3159b663ba2094189"}]}, + {dets_v9, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9098391234b6304ff3d106dc56d467b6"}]}, + {dict, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0bc1d74a65bd392960cd7e1b230f07bf"}]}, + {digraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac9049d6d7454a87c40c2f03f4223849"}]}, + {digraph_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17bbe67d3314e9024825512c1ccc7be8"}]}, + {edlin, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"518247b4963c998e742c0794091c9864"}]}, + {edlin_expand, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06c4ff7cf326df872bec9feed7f5984d"}]}, + {epp, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"493760bc942ddd16df2a8e55f8b59774"}]}, + {erl_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bba2a00b28557c9678356247c36b0474"}]}, + {erl_compile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"291c9ddceeb66c7a7c36ab3505799513"}]}, + {erl_eval, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9982f2bca01a352a45932a6db95a1336"}]}, + {erl_expand_records, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"047c93973c9fbf83724cdf688e258cff"}]}, + {erl_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3225aadc9ec4f84cc9451f30833cdefb"}]}, + {erl_lint, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98ffb79824edc0f2a8ad49ff447e121c"}]}, + {erl_parse, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9a3d97b028bafa2bba7037bc1987d87"}]}, + {erl_posix_msg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ecb0903ecde21b7cc58277424d8bac3d"}]}, + {erl_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b7945b193daf989e3f62c4a452f773e"}]}, + {erl_scan, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dd9fb779b35d1925a0ad68c092af1f0"}]}, + {erl_tar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6161b31a69bd3566a910d369baae00"}]}, + {error_logger_file_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"218156df9bdedd04e37eecc76863940c"}]}, + {error_logger_tty_h, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a2cac9386113d6879a4111be3e2d191b"}]}, + {escript, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b77d5172cf00acd06fd6e42f03dc9b06"}]}, + {ets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"13c77916ba3c85e6e076aa0664f5674f"}]}, + {eval_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7bf8829d056519787fd0f7900bd04b73"}]}, + {file_sorter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e31c9ca53e59010980dfc4e46e8aaf1"}]}, + {filelib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"641651ced98857991b064b22c85cf90f"}]}, + {filename, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a007021a1e9de6af67e99cc48be13c5"}]}, + {gb_sets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4891f6d98f4bb81bc64415434d08ff9d"}]}, + {gb_trees, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9a8ae86761c41dc0e9d32f57df63c3"}]}, + {gen, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5beaa9b295439aa39187eeef56b8527b"}]}, + {gen_event, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79bc1c9f72e633331d4518d982221af0"}]}, + {gen_fsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb95e4cf29f5cf640e486c789fe9f1f7"}]}, + {gen_server, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14f189569fb6420c633a5dab81f7b897"}]}, + {io, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75fd9a0dc5823e95b4543a09be83c6ce"}]}, + {io_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34c18dd02ec6458cae20ddc323542eed"}]}, + {io_lib_format, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1f8f2a4d12d79d82420335d0e84107a"}]}, + {io_lib_fread, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"27699e322a2de2004b057465f549fa3f"}]}, + {io_lib_pretty, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32d7bae40549bdd60298c0d17efe057b"}]}, + {lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"394b1b967c909d1830939846963ac4f0"}]}, + {lists, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f840b76db5f9e5d37dcc9dc39a436b90"}]}, + {log_mf_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f972dea76e360d99074b659327db69f"}]}, + {math, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe02e030a198ec343f3c4a62f60ebf8a"}]}, + {ms_transform, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dba72a603f0a9382274671842d6aaf55"}]}, + {orddict, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bedb6cdaf10530b2486b46f79853fbea"}]}, + {ordsets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5dfe0e73da077c2f86dbbe846e0dab7"}]}, + {otp_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff3edabfa0633b9553b6fed1e47e41fc"}]}, + {pg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3975b993694a2a465d331278b503f81"}]}, + {pool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d0398428064137474f5acbb4122a70d"}]}, + {proc_lib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5542f4add07ef7bb54a76b0cdfa542ba"}]}, + {proplists, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5723876c3ed585a5a4b10dc3aefaf170"}]}, + {qlc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75df6efc99d9a75bb4c989985125d3da"}]}, + {qlc_pt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e84b6da8fb84f811f2c58365e59dd47f"}]}, + {queue, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"221ed57d299c2281992706fd6e2c6584"}]}, + {random, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e703cb7ee27e2e23baf924c2f6b29f50"}]}, + {re, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6eef786ed4f4dfec57a568e488e3596d"}]}, + {sets, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4fbf3b29bf971465a8dc4077fc3e7c8"}]}, + {shell, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4fdd7e1d18047b5f086b6fe8730c896"}]}, + {shell_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a94fd884c9594ff9056228503cd2731"}]}, + {slave, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5536e71d137302d699982fc65b9d025"}]}, + {sofs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"10f13cd4626d429897246538c02c2cb4"}]}, + {string, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7440fe2e1838223f877286bf7d8f2a4"}]}, + {supervisor, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29c98bf9e58cc955d4c29d881d98e84f"}]}, + {supervisor_bridge, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f58b58a1fefecc46a476490ef5231d7e"}]}, + {sys, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7afd9c746450e5189048ff3635b37926"}]}, + {timer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa3e2b017848accc808f92910abf87b8"}]}, + {unicode, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be45160097c37c9144169f4ba54e0128"}]}, + {win32reg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f59ec1a4af1e6381d8770fc2c5915e4"}]}, + {zip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc9aab95b5fc9ee7e534e890d8e5516c"}]}]}]}}, + {application, + {xmerl, + [{description,"XML parser"}, + {vsn,"1.3.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin"}, + {modules, + [{xmerl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1eabeb9846b832059537e2bdf6fed2d2"}]}, + {xmerl_b64Bin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62075ae2d95f3188143a41f582542bf9"}]}, + {xmerl_b64Bin_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd99982371c4db3baf4883c96e146c96"}]}, + {xmerl_eventp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"99aad15d2ad4be80d580fe7e3ba4178f"}]}, + {xmerl_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f79915eaadae7d92946f1182110e6f81"}]}, + {xmerl_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91fe55408e50bf92a9f8ef8b402a3e51"}]}, + {xmerl_otpsgml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2e027e7204405c168eaa598a6a4d476"}]}, + {xmerl_regexp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"408f3ffbd843e09ed0326f5e6a72356e"}]}, + {xmerl_sax_old_dom, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66b229f3eec3dce1f8754de256ba8d1d"}]}, + {xmerl_sax_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66e80c0d03a583d22abc40a54096777c"}]}, + {xmerl_sax_parser_latin1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a462359d6765811f41b1ac1260c81a"}]}, + {xmerl_sax_parser_list, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db56224dbccdf302e42479027c3f961b"}]}, + {xmerl_sax_parser_utf16be, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aaa379b8f1008944bd486f29a85ab1c2"}]}, + {xmerl_sax_parser_utf16le, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"027d5c2218de2a7dd6f5db3b1c433a74"}]}, + {xmerl_sax_parser_utf8, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40f970e9b4eb4122589c0afec6b8907d"}]}, + {xmerl_sax_simple_dom, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2c08dc40f819e4972a58a2fb2fcf6239"}]}, + {xmerl_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0afb5a6c37db1b5dd100297a149d9f8a"}]}, + {xmerl_sgml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22933821d58054ab2941678ce2f8a298"}]}, + {xmerl_simple, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c83463864e0c2117c7659aae4e6ae50"}]}, + {xmerl_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"661d77ea6d07fe6281f04e8e553528d4"}]}, + {xmerl_ucs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ace187d193a5314fbe329eba939dcf0"}]}, + {xmerl_uri, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1121ced96856184d51daecddbb4b562f"}]}, + {xmerl_validate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe1eb20e24d92db08eb03a7a3fbbd73a"}]}, + {xmerl_xlate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2515e06ee34909465fb4520f199f5a46"}]}, + {xmerl_xml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e04d0e513bb48336b9e69de89208e97c"}]}, + {xmerl_xpath, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02a4e2d946ffe93e960c66ce0d391628"}]}, + {xmerl_xpath_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6531ac82f1524946a0a31f40a90546d"}]}, + {xmerl_xpath_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b3bd078c12f46cf5154d05c49880058"}]}, + {xmerl_xpath_pred, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e2a7d97114507d23ad8cfdf967fd656f"}]}, + {xmerl_xpath_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d43883f65aa0006900fc053453d1bd2"}]}, + {xmerl_xs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6963383b4148fd4a7d51bf8e54b79640"}]}, + {xmerl_xsd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4660a75a540225ba8a88c00914923507"}]}, + {xmerl_xsd_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be422d840d07c53b8ba210889dd5d308"}]}]}]}}, + {application, + {wx, + [{description,"Yet another graphics system"}, + {vsn,"1.0"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin"}, + {modules, + [{gl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b2c807a7fbd4012871027dd4292448b"}]}, + {glu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28a23cf86e317c54ebd1b609b38f2fe3"}]}, + {wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"854481fd306d90c1fe6ad683045a1d98"}]}, + {wxAcceleratorEntry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d7572b3e8662e26666964cc64ff7b90"}]}, + {wxAcceleratorTable, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a261f6c3e0d571493a46fcd40b0361f7"}]}, + {wxArtProvider, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22bc145a24e52e15d6e0f66e3f057df7"}]}, + {wxAuiDockArt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22fca5ae251c6592dda5b08c0688138a"}]}, + {wxAuiManager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f87b4fc280d820edca4655bfc0388bd"}]}, + {wxAuiManagerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d08f2847271aae031ed49a0cab96e8f1"}]}, + {wxAuiNotebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b055991aa4efef19c59653db60d611e"}]}, + {wxAuiNotebookEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9fc2a85bda82dc6406833d3746a1313"}]}, + {wxAuiPaneInfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"96dc39e65e2d04e597a76663651cbe45"}]}, + {wxAuiTabArt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0641080a257e4c0ce7030d7a404ea965"}]}, + {wxBitmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62ddedace917fe7d65ebfdd968e2b442"}]}, + {wxBitmapButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"676cbd0f421681f3cdb110b08b89cdf4"}]}, + {wxBitmapDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ab868e8a18350bb427d08abd31d805c"}]}, + {wxBoxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f30f0ad197cd2fe6bb6956ecf55009e"}]}, + {wxBrush, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f41534b5b14c0528729f3faba6d97e1d"}]}, + {wxBufferedDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14bd8d1184f57ca3b71ae50c396b8fb6"}]}, + {wxBufferedPaintDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b617bb74c090fd1bedd78a44e87620df"}]}, + {wxButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cee0c2cf94d454426067a18f222b5175"}]}, + {wxCalendarCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684d559165e957aac543b2f75db8821a"}]}, + {wxCalendarDateAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3406fdefafb1e56b3b4b0c049e8f306"}]}, + {wxCalendarEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"deb02e8741160ee9f1a44853db16a6d3"}]}, + {wxCaret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"543d4a99c593ac822143cc4c680fbe10"}]}, + {wxCheckBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae5b445190e6d0811bc3bf41c269ad7a"}]}, + {wxCheckListBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"094de5ba936cca4c26ffc0b765d371be"}]}, + {wxChildFocusEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4d29ee311555ab76419724546859432"}]}, + {wxChoice, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7e31246a035375896498e17c366beaa"}]}, + {wxChoicebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32665c0637a00816a2fff4d4f5f418c1"}]}, + {wxClientDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"400fdcc0f51e0e5043be4ca4da99a8a7"}]}, + {wxClipboard, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ddbb8e1f11321204d48d247e9f7548b"}]}, + {wxCloseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"815ac954da8b6cb7b694ca4cb28ccd50"}]}, + {wxColourData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84cf04d6327af73aabd2f775d16bac5d"}]}, + {wxColourDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8e90d5109efec91ee6417d01b929951"}]}, + {wxColourPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7fb673975f4cfa9946c34e30109d036"}]}, + {wxColourPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2cfa29b0fce7f98058c3d5ad016c1f2f"}]}, + {wxComboBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2aa520b9051f42a5e0f1ce1c6408101"}]}, + {wxCommandEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5fed22a39c6c80dcc029ebe5444b0c0"}]}, + {wxContextMenuEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a1739b84b365833c87232bfb298f681"}]}, + {wxControl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aed7a496290caa0b53740c681de998ec"}]}, + {wxControlWithItems, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a14351fadd0f776a4deeaf5ec518a689"}]}, + {wxCursor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79eadaef3d9df7bae0a2146634d43e72"}]}, + {wxDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f88cfd62f368172c3ed90684df53ba3"}]}, + {wxDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"065ea6f1e76ca8b6558ca3dd7ff42077"}]}, + {wxDateEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56c06074946764fbc74b7070f5759e19"}]}, + {wxDatePickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c716525fffbc864c85159fb43b2a8d64"}]}, + {wxDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a480a0c1690092014cf8198ba52d2a3"}]}, + {wxDirDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43565cc473a21632555cb3151138b7c0"}]}, + {wxDirPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6463e54c6564a1f7f5d6bec082f9ea63"}]}, + {wxDisplayChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dbd9061f370f3db0343c4f88f57cfa3"}]}, + {wxEraseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff780a85a34cb23667b7e4072db17a2b"}]}, + {wxEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8644675e2fd7bbc6965d4babd0d14d7a"}]}, + {wxEvtHandler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0991f5d86247ce757145c326adea516"}]}, + {wxFileDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd9b5735e3994492c32ca099a70093d0"}]}, + {wxFileDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9cb446535683e7a9258953f53cd77de"}]}, + {wxFileDirPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6153d339ac822da8c4a9d766d0af22f9"}]}, + {wxFilePickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c9ff43ff739e3ee37aae637a494d7d3"}]}, + {wxFindReplaceData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bccc5beebb4aa0bfd424d26f472745a6"}]}, + {wxFindReplaceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c40b557d35e4bc527a715996daad0e0c"}]}, + {wxFlexGridSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed3da3c3822f59a6b2737f273397367d"}]}, + {wxFocusEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c04cb018d6c94d24a44ae365dae46c1"}]}, + {wxFont, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64303b1a35432898649e40e9c3f5bdd2"}]}, + {wxFontData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0135398ad369de2fd9beda1553f7d309"}]}, + {wxFontDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a872a3b88df4faa051e4b1f8cb0397a0"}]}, + {wxFontPickerCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e5b363ea487a4284714346d43d6c418"}]}, + {wxFontPickerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a22e0effda4c521ce1b35bd5b2259758"}]}, + {wxFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"168aac11a6c3835b122ee653ce2e50a0"}]}, + {wxGBSizerItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"857c0be340c9c324d39cd525749a7cf7"}]}, + {wxGLCanvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88461209c2234e4e166923d760a42164"}]}, + {wxGauge, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d998a1ffcf56ccf2ea3a12eabe375d9"}]}, + {wxGenericDirCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5f8f19f7fdf9545c1a08318a12782b8"}]}, + {wxGraphicsBrush, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9eeb08fd93c17259400e13b1586ef6ee"}]}, + {wxGraphicsContext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bee681fb85f534a63c2747e704d9001d"}]}, + {wxGraphicsFont, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be1d636aa381e330db93a1deb9ff4b13"}]}, + {wxGraphicsMatrix, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b452f9e3d87800b00e063b39d71583aa"}]}, + {wxGraphicsObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64dba881c5b70355d45323363715ba69"}]}, + {wxGraphicsPath, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e93e67098fd350e7eb20ccc5f7287b30"}]}, + {wxGraphicsPen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c8c8c3cf5277cdc526dca9e591a10b0"}]}, + {wxGraphicsRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4aeb3961b9b1a22263c8abf2473cc53f"}]}, + {wxGrid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1195ea11e71c0534fffa76535efefbf"}]}, + {wxGridBagSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"60ee2c7022f1feef9c169a191945d637"}]}, + {wxGridCellAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02222543db113d41d409cd4080764d49"}]}, + {wxGridCellBoolEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"297c5d3648d99bef9bc294d52d28b619"}]}, + {wxGridCellBoolRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5cf8954049f0443ea2f9003deae7960d"}]}, + {wxGridCellChoiceEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b77d6b8cb344c4512cef8adaf23ef93b"}]}, + {wxGridCellEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5cf6065e8754f96612cff48a1fdcd20"}]}, + {wxGridCellFloatEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"723baea27c999730afcacb3280f611c4"}]}, + {wxGridCellFloatRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab56332ebccd1245fff7cb86abfd670b"}]}, + {wxGridCellNumberEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0d86be445b03945610d9154c8905258"}]}, + {wxGridCellNumberRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28ae774386962927dd552da4e9a28ca1"}]}, + {wxGridCellRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6da61c7ff2464f3b007626b1f813dcb"}]}, + {wxGridCellStringRenderer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aefd3b8019cc4321037c8bd8e4faeba2"}]}, + {wxGridCellTextEditor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbce8b54a66e9a9869d84655ef26d908"}]}, + {wxGridEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b41f04ffe42c4602fe2911b5ca44dbe"}]}, + {wxGridSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37bfde707aa6f2a1f68f8377dcbd7580"}]}, + {wxHelpEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"714f8b000f3d09fe7eae13b1a5daa0c7"}]}, + {wxHtmlEasyPrinting, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eaa59118b8408b91d16df3b600494e5e"}]}, + {wxHtmlLinkEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f527856d02011b9f480494b2f3118f0"}]}, + {wxHtmlWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61e947b44d4ae81b9bb0faf9a443cbd3"}]}, + {wxIcon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b4d9209343a029641204f334bd07dc5"}]}, + {wxIconBundle, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3281d9d364552b38009405e79467d5c5"}]}, + {wxIconizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d66e4289534961f6868d91e1d1399b53"}]}, + {wxIdleEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc82957c3a0181ef84ca78ace7a9271e"}]}, + {wxImage, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"25de92b502b3a920e1247d2d1433aa32"}]}, + {wxImageList, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3445492f371fe7d2a6f7534d61ad66a9"}]}, + {wxJoystickEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15c7352ac168dc5adc0de4a872b9740c"}]}, + {wxKeyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2e23f50406c65d5f2269910467a9721"}]}, + {wxLayoutAlgorithm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f93e6eac8570144faabaea83388129a"}]}, + {wxListBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"87aade14ade89a7021b6908143d339f1"}]}, + {wxListCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e35643c3218ee7db6bf18dbd72bc470"}]}, + {wxListEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90354ad1e09b594dd321bca68d8d3f02"}]}, + {wxListItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be95e4c22e265fbcfb14ab7c9c798684"}]}, + {wxListItemAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0137573b7a2b2569b481548c26bb91a9"}]}, + {wxListView, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0022979dbcc2ac873adb72ea26c16aa"}]}, + {wxListbook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e4b01ad81bf68f1784ba30772502e0b"}]}, + {wxLogNull, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17f8273288c6e880ec0c7a21842b022f"}]}, + {wxMDIChildFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5894b4a01bb643f208995257a0f9a00f"}]}, + {wxMDIClientWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa7017cfb2e70f0492550a2ecd01d1c7"}]}, + {wxMDIParentFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"251cf2044002bbb5afc2acddf442f14a"}]}, + {wxMask, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b4ce241e6edd84d32df4b40a2f17a15"}]}, + {wxMaximizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8a766afd7de5050ced825a275c6cdba"}]}, + {wxMemoryDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4c1bb9fed0edf70b44f24ea3fb54f39"}]}, + {wxMenu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2e48cd879d0ece5ee24260bc70e2f9b"}]}, + {wxMenuBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"562e9979f8ce58c85032ae3e02307d7b"}]}, + {wxMenuEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0571277ab11e756d18d34c6cb4f8f1c0"}]}, + {wxMenuItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"900c9de70ac02a326bce22eec1c64d48"}]}, + {wxMessageDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a15267b44d3cbeae16c294c4c0b96324"}]}, + {wxMiniFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ca0204b8a167fd472a555695e58927b"}]}, + {wxMirrorDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d521a1f1e4d37132a7a0de0eccc332f0"}]}, + {wxMouseCaptureChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f85672fbf15ee0b8306de4aaf4eb4719"}]}, + {wxMouseEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"802c21f46105f957d8cd8c84ff36d986"}]}, + {wxMoveEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4231fd181e0b305a82c595f66eb99b96"}]}, + {wxMultiChoiceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4eb40bfa965a25034ebe4b8fca335863"}]}, + {wxNavigationKeyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b113c9dcf181af633d0eae1f18c36f"}]}, + {wxNotebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fef44c082d799a4d86e0cd8db58609df"}]}, + {wxNotebookEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ccae052bfd1cf87236add4c0b26143d"}]}, + {wxNotifyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3d22b2b86ce1a94c57ccd9842211f05"}]}, + {wxPageSetupDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"755792c8d70118493f5147ef26f40d00"}]}, + {wxPageSetupDialogData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"942f2c8bd296e971ea1d0f74ec700be5"}]}, + {wxPaintDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c23afeac816efecc5417b0687437d8cf"}]}, + {wxPaintEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a18ce83af679d334ce979df65607226c"}]}, + {wxPalette, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a5b3e165b8ac3e3cb2d5ba6e149bb0ca"}]}, + {wxPaletteChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"785c765df0a50eac4b2c5c054453c0d9"}]}, + {wxPanel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08c772b8c30e7441366bcfcd5005f21d"}]}, + {wxPasswordEntryDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62b860fd64e74f7d67c51a5d8a0fb157"}]}, + {wxPen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51b981a9e2313e58123888c6b67192ed"}]}, + {wxPickerBase, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab9e2f2d6c3b5f8184d5b1d806b0dce"}]}, + {wxPostScriptDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a820bdc1354c448a8b442016951a6b2"}]}, + {wxPreviewCanvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7b48321129f0e14c2006272c8926544"}]}, + {wxPreviewControlBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62393081a6ffcb6bf092b47703e31b4d"}]}, + {wxPreviewFrame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78f39bbfead1330839955a50281a2329"}]}, + {wxPrintData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"928a6a97c5c4b664687015c40d660cdf"}]}, + {wxPrintDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"acc4c816bf0a64c8ce31af3c001f1688"}]}, + {wxPrintDialogData, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc97f97b620110928f4093806b1b8ce4"}]}, + {wxPrintPreview, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92f04b064e7b041ee27bb202e5a60b80"}]}, + {wxPrinter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"05626841c780ceaf3c5af0212f53fbaf"}]}, + {wxPrintout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"feea26109fa63e4d98c2924189762a43"}]}, + {wxProgressDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb45280951aef0038b8130c91a333833"}]}, + {wxQueryNewPaletteEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be6c85603e81f7c90d4a949d42c0b32d"}]}, + {wxRadioBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33684d6ce3f3c5388e6faf4f06d90463"}]}, + {wxRadioButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92bebfd9b33658dcff2e592b5fcaeb7a"}]}, + {wxRegion, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18cb5a2a1dcb63a646135f2a6cb1b21c"}]}, + {wxSashEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4c51c14137513da9841890751deafd2"}]}, + {wxSashLayoutWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6f5167ff888b73c603b2f641e96a49f"}]}, + {wxSashWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91c5be41fbe95f5ad4504fae2f56f91f"}]}, + {wxScreenDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc9411f49fe7324bcbace2c05d31d39a"}]}, + {wxScrollBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e60ffb44799a3684f74d783addbf42c9"}]}, + {wxScrollEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4fbd1eb49f69e56894aa4a7fb26e1b4b"}]}, + {wxScrollWinEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be44e413061c515cb83a103a46572065"}]}, + {wxScrolledWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ccef65f1430df907d9bd34c27408f9cb"}]}, + {wxSetCursorEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1aad98a9e1d08f792da0d73f23ceb7e5"}]}, + {wxShowEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89a775b3e6579b8e55e35bc6a46649ef"}]}, + {wxSingleChoiceDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0df9c7367cbb88a21c8dbfcff668fed"}]}, + {wxSizeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78d4dff8fa58b02bd49c31b6de28b935"}]}, + {wxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"581f4ba6c9b3befca1efbcd221455b49"}]}, + {wxSizerFlags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"54ae0bf1305ef85943158c8f4bc58669"}]}, + {wxSizerItem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff2680fb6f057abf757516aa98e26281"}]}, + {wxSlider, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e0578ebbde06a5308c00e98e0fbb6b"}]}, + {wxSpinButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d27cc12c048bf0b160f53ca416add6ab"}]}, + {wxSpinCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6ce2382ed84ceb1585afea719fcddf73"}]}, + {wxSpinEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"158d1777d9e8d840b6d8fa93982b876a"}]}, + {wxSplashScreen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2719e687a6f08135c305b0b0692b8f40"}]}, + {wxSplitterEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a71231c8d2c06f12ee862be00ac91fb3"}]}, + {wxSplitterWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7cf57a832b89c0e8574b09e632c7f1d"}]}, + {wxStaticBitmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"709ad1816bd35aa84a5b1eca1a6571f2"}]}, + {wxStaticBox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84480d00723cfae07f5c67ad463bec22"}]}, + {wxStaticBoxSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b32933189486b806c14a04452a3a5887"}]}, + {wxStaticLine, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"569ff89c23e697fc73de1f13d51b17d3"}]}, + {wxStaticText, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6baa91538f6f4d374f0c8c4a2cb5f25c"}]}, + {wxStatusBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1cbef8443710f5270baade15b9312c4e"}]}, + {wxStdDialogButtonSizer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2325bcbc06870de4093489cae45bc2ee"}]}, + {wxStyledTextCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94cc5d191271e6c87926850e0ea8615d"}]}, + {wxStyledTextEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"451ad9ce6872ea2035c3828713fe09c1"}]}, + {wxSysColourChangedEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6f80dd65e0c9731e4a6dfcb10c71059"}]}, + {wxSystemOptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f3db4310f5e978392d4c6ec83347dae"}]}, + {wxSystemSettings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3bb2753eb2dde96fd7f4aac7f944f69e"}]}, + {wxTaskBarIcon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d221781abd0a15270e591e77e279a840"}]}, + {wxTaskBarIconEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d865d9706104b122cab70b07fcc3a1"}]}, + {wxTextAttr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a6de5eb0c71625ca14606d4e3919e53"}]}, + {wxTextCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"924adbbbade1b95c226a18484c6bba33"}]}, + {wxTextDataObject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4a3694d548ae60c8261f55b671ac834a"}]}, + {wxTextEntryDialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c3038c65992b9a6eef33dd1aff7ce1d"}]}, + {wxToggleButton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4471e21c4fb39eece7418adbcd0f0fd1"}]}, + {wxToolBar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"163743b59b5ec0b6af08d7a66f1f36a0"}]}, + {wxToolTip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71dde961902117baba2d2b70f18ebad5"}]}, + {wxToolbook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"053b84811ff7ef240d44fa454f966e71"}]}, + {wxTopLevelWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7dc3f9260823e5ebb2f99855f8d498f"}]}, + {wxTreeCtrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72e339bd396c87edd28d5a7cc6954e6d"}]}, + {wxTreeEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17bf2e16e1f41f451fde53d1b72f8b01"}]}, + {wxTreebook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4889ab8905fd0fd8df5d06c900edf44"}]}, + {wxUpdateUIEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7e61e2de35af5257f49919be1304381"}]}, + {wxWindow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5337193a39eb848cbcd1afc79f19c8f"}]}, + {wxWindowCreateEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c898ff077b90017671180089c5b37048"}]}, + {wxWindowDC, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dcdf0f184f2b85f0915bb8d89ae8be27"}]}, + {wxWindowDestroyEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c443d15978d3a61549f9817ff75fb48"}]}, + {wxXmlResource, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7240754b5985cf7af7c3ff2a3aba3548"}]}, + {wx_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c24e9903d1b499f26e385d7aae15108"}]}, + {wx_object, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b17d673c7c4f59b27e9625b62077ef41"}]}, + {wxe_master, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cbafeb9aba24bb5e831dede889b317c1"}]}, + {wxe_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6fabc67e68c6a41d8fa0ae642f6b272"}]}, + {wxe_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d6e77598d0db8185bb1cb3bad9c5d14"}]}]}]}}, + {application, + {webtool, + [{description,"Toolbar lookalike for the web"}, + {vsn,"0.8.9.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin"}, + {modules, + [{webtool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29344486df5f854ae8fd3bd674c80e99"}]}, + {webtool_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0130c653986734ecbcc9eb173c28c60a"}]}]}]}}, + {application, + {typer, + [{description, + "TYPe annotator for ERlang programs, version 0.9.5"}, + {vsn,"0.9.5"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin"}, + {modules, + [{typer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfd9dd08af18a1e70eacb4048fb641d9"}]}]}]}}, + {application, + {tv, + [{description,"tv Table Visualizer"}, + {vsn,"2.1.4.10"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin"}, + {modules, + [{tv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be7275d94eee00787500a1a2116f2f42"}]}, + {tv_comm_func, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac45aad5047bb8c9fd5567c83f513db4"}]}, + {tv_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97de27d10499042aaf10e26289e1e92b"}]}, + {tv_db_search, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41a489c86d92bc1de3d2b1eba6884c6f"}]}, + {tv_db_sort, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8f3679aece6310ac4b2d574bb4e7180"}]}, + {tv_ets_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71f7fcd2da96e0166340d5fecd7b3878"}]}, + {tv_etsread, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"45a731d225555df8f910b7960330f095"}]}, + {tv_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1c776d3c4a16bc432fed801d2e3c8d70"}]}, + {tv_io_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c34cbecb007f6b330646a192aac6163"}]}, + {tv_io_lib_format, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"843ef9fc1762e75675f7a27b7ba99eb4"}]}, + {tv_io_lib_pretty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e749f6a7879008513c7194c145e0faf2"}]}, + {tv_ip, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d54724ccb30cfd4eaca323d38ef7861"}]}, + {tv_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de096a5d9d31dd3443e6bbbd4207ecd8"}]}, + {tv_mnesia_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"947c40384ab9d95074ee626b399d893d"}]}, + {tv_new_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3105970c5d4e109104492bf286bfb4b"}]}, + {tv_nodewin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfd57496a2e56d57558891338db3e79e"}]}, + {tv_pb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fecb58bfc084d7d6dd979f14ea8c2796"}]}, + {tv_pb_funcs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcfb711f62ae07c91da02c5b145f3099"}]}, + {tv_pc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61f6f61fcc34826ca8bc3b450e94f92f"}]}, + {tv_pc_graph_ctrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e8c763ad45fac44f4356a4739baa30b0"}]}, + {tv_pc_menu_handling, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc155c0472d92d089e6d74a1987d2223"}]}, + {tv_pd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"20b8ec33209b59d6775702be748d2da1"}]}, + {tv_pd_display, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73d810061bb4e923468e82e414f6c962"}]}, + {tv_pd_frames, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8fd381887281403263da14b070a35ca1"}]}, + {tv_pd_scale, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"daff409824df94f43198e08c00c8aadc"}]}, + {tv_pg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de42de073fbf5bd3ae58bef45ee05858"}]}, + {tv_pg_gridfcns, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"663f41dd11d7fbca1f8eb58529e63e53"}]}, + {tv_poll_dialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef887432416a9931b8051963d9a97fdc"}]}, + {tv_pw, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4443616d58cadb7e473ff9ad95c473c"}]}, + {tv_pw_window, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef96313278caafa5e4cb0c1f5da9d165"}]}, + {tv_rec_edit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6cbd579d5ccd73e575e67d00fe9983d2"}]}, + {tv_table_owner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af79fe7c2092cd90cd1cd360def69fec"}]}, + {tv_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6967a2d5f7e03b34c4e26f47355ba43"}]}]}]}}, + {application, + {tools, + [{description,"DEVTOOLS CXC 138 16"}, + {vsn,"2.6.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin"}, + {modules, + [{cover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7856ff33e1e956b68c9f6527b5700b5"}]}, + {cover_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ead2c2bfdef49be858d1caee2d8878a0"}]}, + {cprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0d6cd8fb042b31641c7869b4e148e7c5"}]}, + {eprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8fd5ee11ba9f1cdae8af5c8f1b367a1"}]}, + {fprof, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c549341f79f954416e826f591645f676"}]}, + {instrument, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf9b95c95942f0ca0ca65db707873a74"}]}, + {lcnt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b27f3e814feb4f8d4f95705115ce98"}]}, + {make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a69d24258713596763ad87c247cef15"}]}, + {tags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"450d10b82d488d74ab49eeef1d7277b7"}]}, + {xref, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f07cbb4541ab47dd30a29a9ad6df8c2"}]}, + {xref_base, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cdb2414576f192e4f5df0f8b0d565598"}]}, + {xref_compiler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1bba5a52fff82650e201bd08241277e"}]}, + {xref_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ee075a14d4a9caf00fd422a5b8a4941"}]}, + {xref_reader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d257c5126f9d0cc4e9050fbbae796366"}]}, + {xref_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7e53f28338fe627ac6fd0821ae6c551"}]}, + {xref_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"66929f66fc0606d320c6e5d216cb3b29"}]}]}]}}, + {application, + {toolbar, + [{description,"Toolbar"}, + {vsn,"1.4.2.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin"}, + {modules, + [{canvasbutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2432b0ceaf3b3cd6ab059067bb1b904c"}]}, + {toolbar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0264f53a2881d926b34401d0583b07fe"}]}, + {toolbar_graphics, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"327c7483e8b5cd55e8478a2cea9f0c1f"}]}, + {toolbar_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64977a22d445c231a98bc12926186e0d"}]}, + {toolbar_toolconfig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"037bc3e6d48012cb0c18796d7870c33a"}]}]}]}}, + {application, + {test_server, + [{description,"The OTP Test Server application"}, + {vsn,"3.6.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin"}, + {modules, + [{erl2html2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28fc702edc8365854f9f66fc2fe01793"}]}, + {test_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09cd3b380d55881b18f4020709ad1ef4"}]}, + {test_server_ctrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14f716cc55a7cb00e3db6f747c72bfa7"}]}, + {test_server_gl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91fa2c7419209a51361800e1a28f3891"}]}, + {test_server_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90c3fbf1bdd3260d8be29c0ab04279bf"}]}, + {test_server_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"accd333c058e9b4da064190ef7cf48cc"}]}, + {test_server_node, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"091d5d7aadb062a6e3812afbb130402a"}]}, + {test_server_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9aad63f121b569e197e38735d5f3bf2a"}]}]}]}}, + {application, + {syntax_tools, + [{description,"Syntax tools"}, + {vsn,"1.6.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin"}, + {modules, + [{epp_dodger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec04cd4dd5985f232fc3116ba222bfd6"}]}, + {erl_comment_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b8dce1126af7468c5b30f73044c44db"}]}, + {erl_prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"020fefd3937417a2029a5278dfe6a6c3"}]}, + {erl_recomment, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9ef1a5c9ce3c6ce6b88966b1c766452"}]}, + {erl_syntax, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ee5f2f422313742a2d321fcd901909b"}]}, + {erl_syntax_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f27de1f2cf65260fe863025c358c9c86"}]}, + {erl_tidy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f92471b03263f0cd77f35fd59686258a"}]}, + {igor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eabc7b07e7b92b8d34fa8eb20a507cff"}]}, + {prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1e07ce1f5edda823216364302796ac1"}]}]}]}}, + {application, + {ssl, + [{description,"Erlang/OTP SSL application"}, + {vsn,"5.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin"}, + {modules, + [{dtls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3942c7ba7ffaf15f739485a0294f256"}]}, + {dtls_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0d3d571363ba45d10d8d772f107cd24f"}]}, + {dtls_handshake, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"92217b2b0b6d3b16913521e333533ca6"}]}, + {dtls_record, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4aa88c3ec82a97c9aef5efb0773c153c"}]}, + {inet_tls_dist, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c9e1c10262b46fce60dcd0127455cb0"}]}, + {ssl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c0cf688a767412c4de5ab3be9cb2e55"}]}, + {ssl_alert, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff069c184808a482f096e6cf5aeda43b"}]}, + {ssl_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08781acbe7e677b43923f943d54e17f5"}]}, + {ssl_certificate, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"292c330ca048353298a264de596e2ee2"}]}, + {ssl_cipher, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7da7124e32552cf9438259bf544389c"}]}, + {ssl_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b46886f7e29fdc628a965ee9e2314e1f"}]}, + {ssl_dist_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1db0e97b9d77cbb26348e98cf386210b"}]}, + {ssl_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e170a0ac2f663c4396f5a3b00e36239"}]}, + {ssl_pkix_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c1b5a81345dcd39060c2fb177b29898"}]}, + {ssl_session, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9103614974d7d39d0f1ccb0a9e5b6f8"}]}, + {ssl_session_cache, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09b0d541e61e1ed9dbcb169b1d5b945a"}]}, + {ssl_session_cache_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffafcdc2ff0342c4c698df0dec3cdc96"}]}, + {ssl_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9d62b4943dddf16fbe39f781699260"}]}, + {ssl_srp_primes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c2df3c9a38a3ceb9cb273a030bd423a"}]}, + {ssl_ssl2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6822bde894695368a294a0e890183b67"}]}, + {ssl_ssl3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5cd3fbdb5a3f1fdb4c78a2acf9735fa"}]}, + {ssl_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a69f0e3bb4639f90a310b2b938cb9235"}]}, + {ssl_tls1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14b5f8a146f51df359e9c1265e949564"}]}, + {ssl_tls_dist_proxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bbb1df174c32c1f424cfa64547d075f"}]}, + {tls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ff734327614ac4d6e4d9acf49998c2d"}]}, + {tls_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ad4d62a6b8101cc5b928498752714ed7"}]}, + {tls_handshake, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2c5513a959ecbe56166df52dff06e6e"}]}, + {tls_record, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94501e4bda011f01fba860eebdff5a44"}]}]}]}}, + {application, + {ssh, + [{description,"SSH-2 for Erlang/OTP"}, + {vsn,"2.1.7"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin"}, + {modules, + [{ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b91a0a4f8271ff77d0efceb75ba5e8f"}]}, + {ssh_acceptor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c39ef119dbfcec7618d1cf223d445d6"}]}, + {ssh_acceptor_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d79d965ce6a8121cfbcc1a57029fa06c"}]}, + {ssh_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"11089687f3d5ff2e2ff4527efdb86920"}]}, + {ssh_auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ff2e66febd08d64ffbebed7e7880ca3"}]}, + {ssh_bits, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ab1a9f964ccce1e001d7484b37c561c"}]}, + {ssh_channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4259284ff9d7671940cfde40b8615fe"}]}, + {ssh_channel_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2594f48f478040f5e861f92c63f78eb3"}]}, + {ssh_cli, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6eb0733483419dc0a920452bb42b7344"}]}, + {ssh_client_key_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1a1ce3edce20525a435533b3f37fcfc"}]}, + {ssh_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b551f86d866df22232a147fca4ac7c04"}]}, + {ssh_connection_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bec5a32b6f6199b3f52e1fbfbbceba3"}]}, + {ssh_connection_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"399ad1481f99b9d43c874c162742c91c"}]}, + {ssh_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd1150bc1fe3673d2446811f54dc23de"}]}, + {ssh_daemon_channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17ceee1d84a542cf54dd487808e00a1e"}]}, + {ssh_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d014774c5b5dbd368fad2bc809515e48"}]}, + {ssh_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1045e82cd74643c823a1bda96d24b47"}]}, + {ssh_math, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a4b44ed70c1938a7277f37d56f9de8f"}]}, + {ssh_no_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9bf450746c1bcc1fd90c463299fdaf5"}]}, + {ssh_server_key_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"debb7d5dcdf2eb88d30ed95a56652366"}]}, + {ssh_sftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74ed0ad4eaf38e4233ea40f4b4769b7d"}]}, + {ssh_sftpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"472a422310ca8f6f289334ef64550afd"}]}, + {ssh_sftpd_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5269b3e25dd16faeb466f76ba993ba50"}]}, + {ssh_sftpd_file_api, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"627f97d4fb4abd5bee4b509d9225edaa"}]}, + {ssh_shell, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c7831c144031be28ec9dc12b4da3b94"}]}, + {ssh_subsystem_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"755716a08c990d1f606e90420006a77e"}]}, + {ssh_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"408837d884dc9e1f0a969ef64558d733"}]}, + {ssh_system_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f384bcadd7cdca24ec6e40cbe04d71a0"}]}, + {ssh_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1c9ed65701948f63ddb181cfaf2744"}]}, + {ssh_userreg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4f27505cb543991360e10ddb88870cc"}]}, + {ssh_xfer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0220668d75e0c89e7823990a0c968eaf"}]}, + {sshc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"483104e1f9410dfc4e1e29c61d8827ee"}]}, + {sshd_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aba8a2861b6f773e9016ff2859e8de24"}]}]}]}}, + {application, + {snmp, + [{description,"SNMP CXC 138 13"}, + {vsn,"4.24"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin"}, + {modules, + [{snmp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ab098c46c4c009b5ab8a4a37673cf82"}]}, + {snmp_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2ab3974db30a5b20ba308e1ef0c1d3"}]}, + {snmp_app_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b81a8361da32fd1da51e85f36b678347"}]}, + {snmp_community_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14e553d78094cb09e2e2a1a3476fa9de"}]}, + {snmp_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e5c6bc754f1fdf1dfaf7f9815163cc5"}]}, + {snmp_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9ec2fef69fed3fddbb122a5fd31853b"}]}, + {snmp_framework_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0886188c6a8c18a6ff8a3b08172a0773"}]}, + {snmp_generic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b23bcb8a031ccd450999f71b41f1f0dc"}]}, + {snmp_generic_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74806ef6c5e3a1af2cb14a4121f4442a"}]}, + {snmp_index, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a0358730d6b279e4056b9e78fdabbe2"}]}, + {snmp_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f93d36dbfdfef30de3f4807efcec170e"}]}, + {snmp_mini_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bb79af4e373cdc2ec4e6f5fe71d0e01"}]}, + {snmp_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ccd6ba3cc7e504e0c163f8c0f7ff575"}]}, + {snmp_note_store, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3b5f37d8fc6663a63d177cb72a1c498"}]}, + {snmp_notification_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c283ef6cba1ffb08a38c4228f119c1f2"}]}, + {snmp_pdus, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48138570bb1ff76dabe8f1fa5a6e662c"}]}, + {snmp_shadow_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba004cbc14fe13ad6b29515d6b3b84af"}]}, + {snmp_standard_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75c1099b71f4cde7703c1b651168196a"}]}, + {snmp_target_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52cfb682cf25e4c6ad7c6a31ea71bc41"}]}, + {snmp_user_based_sm_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b3b454fe409f6cd24463bfca9369adf5"}]}, + {snmp_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"667650cc1c2f535f771132907bf12342"}]}, + {snmp_verbosity, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8e3d33775ee83cca4d47f64df1dd5ca"}]}, + {snmp_view_based_acm_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1dcc969b6786ab84f450e9f0875eab3e"}]}, + {snmpa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2057219be785ea520f5a3f1886d51360"}]}, + {snmpa_acm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f21fee89e88dccc36afbae59e8ccd85f"}]}, + {snmpa_agent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1fcbbb2b5328095d05622eb5da5b1fa"}]}, + {snmpa_agent_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"668a5398f181b8abce6b0c68716e175e"}]}, + {snmpa_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16cc3053b5568e50b5fa384baca6a40f"}]}, + {snmpa_authentication_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc05c3f08dbdec4878aae7816eb5033e"}]}, + {snmpa_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"826ab227f8829b50aabc3072cf2a8537"}]}, + {snmpa_discovery_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50040fb1565d5888507dcffe6109cc16"}]}, + {snmpa_discovery_handler_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62413e2497c617d1dabf1ab269610eb3"}]}, + {snmpa_error, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb436bf4d7bf0615c02c649c0e04541e"}]}, + {snmpa_error_io, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98147b5cfad093916c0756b37f763e86"}]}, + {snmpa_error_logger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b0431d9de22543e6608515bc4afc07c2"}]}, + {snmpa_error_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"214d6585224898ce39f6eef6554593c4"}]}, + {snmpa_local_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb82eaa9a8486d087a27e834b58a2f6c"}]}, + {snmpa_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e68b813ac1df34912af16ef01738f185"}]}, + {snmpa_mib_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed334445e6e025059b2c9b618109cb9c"}]}, + {snmpa_mib_data_tttn, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f39357a667d3cb530b431fed0dfa674"}]}, + {snmpa_mib_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79d8aff9ea8d71bce6eac0a6f01f53b8"}]}, + {snmpa_mib_storage, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22e11676e0303ea2f292534da8ae66f5"}]}, + {snmpa_mib_storage_dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8c4649828d764370112243ccdbd2da3"}]}, + {snmpa_mib_storage_ets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4410e4e89e46b6e2b818d3b002a98579"}]}, + {snmpa_mib_storage_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e3d387a72c28b5bf76d7a55ac39071a"}]}, + {snmpa_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6c4244cad7870e2ec012bdd05281b182"}]}, + {snmpa_mpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8475e9d61092213166efe3667bcf0c06"}]}, + {snmpa_net_if, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"258227a8467ed99df2f9e55cc7b5e9ad"}]}, + {snmpa_net_if_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f57faf094fd82ceadc8527983194b2cd"}]}, + {snmpa_network_interface, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"247221ee7ec97ee189ef5a8b5eb2d18a"}]}, + {snmpa_network_interface_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec6d7d452145362e9dcc0a8be42b3280"}]}, + {snmpa_notification_delivery_info_receiver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de84fce31ef758fbb04722b66e1b22d3"}]}, + {snmpa_notification_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e0b2e493bbbe13f1f17f3fd0be7ce1f7"}]}, + {snmpa_set, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7152d8c4f238062a801fb9b46115b1ee"}]}, + {snmpa_set_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1739e0cf36ad6a9249a8a200409813b"}]}, + {snmpa_set_mechanism, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c3bef6423ec85b3b9a144f17c3e3f6c2"}]}, + {snmpa_supervisor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19aa2eef0602df46711bdc98c67d105c"}]}, + {snmpa_svbl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4079d7e9812ac1c42274316b0f883c0"}]}, + {snmpa_symbolic_store, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e0fe1dda713ed3048f51155e47932e06"}]}, + {snmpa_target_cache, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02394ee2b706d7c26f027c960c659f39"}]}, + {snmpa_trap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6ffd78574b7c33a0a96bee64d310531e"}]}, + {snmpa_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b121f7bf87a2d44a14aa42988c2072f3"}]}, + {snmpa_vacm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7c7855fb65468a2355c889aa26badb6"}]}, + {snmpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a474261cc18e1f80f0f742774e3b1417"}]}, + {snmpc_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce88a5b16fdc8fa367c8559a81eabcb8"}]}, + {snmpc_mib_gram, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8b4a0280a0bd9b0e89fd47361381583"}]}, + {snmpc_mib_to_hrl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88a2a7964f0b3501263eaf513a72e876"}]}, + {snmpc_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"feadc3549879e928bcc4941ff25c1756"}]}, + {snmpc_tok, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37784c9fb162c53b0fae3cd77566bdb2"}]}, + {snmpm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfcde2ccea1b2dbfe7d6f3bead4df7d4"}]}, + {snmpm_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d6eef427d28f7a96b5be06a0509ed8d"}]}, + {snmpm_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a026c01e17b82bd2fdcb31fb69ae51a"}]}, + {snmpm_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02dd27ee95e3bbe3aab099b11120b826"}]}, + {snmpm_mpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b593b66256ce780231c57b31298fd29"}]}, + {snmpm_net_if, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"68d325a69b69e7de7106965a049522d2"}]}, + {snmpm_net_if_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a83bf186eec6c82fd6c9b164fc337edb"}]}, + {snmpm_net_if_mt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e44169e0549ab840243a2e4e0fa3d5fa"}]}, + {snmpm_network_interface, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47b0e15cd1537e1a3a1b41b8be44998e"}]}, + {snmpm_network_interface_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"93b503aeb95e30d2fcf28c2b7d2e017e"}]}, + {snmpm_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdf5855cd385c8d4589d43f2aaddee8c"}]}, + {snmpm_server_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fc16c37e8db23a8b3e40d3696488a0d"}]}, + {snmpm_supervisor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"289642b05307317c1684b5ba76cb81c5"}]}, + {snmpm_user, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c6e66b34460082bbcb99ccaf1cedbf3"}]}, + {snmpm_user_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8c7e1b66076bcbde4678471ee9066f0"}]}, + {snmpm_user_old, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae32fe52a746f3be59c94bac2b679fcb"}]}, + {snmpm_usm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"59bb20fedd0aca2f57ce3b5dad4e50aa"}]}]}]}}, + {application, + {sasl, + [{description,"SASL CXC 138 11"}, + {vsn,"2.3.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin"}, + {modules, + [{alarm_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"250185bf9caa8aafeefc21d2dc85671d"}]}, + {erlsrv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"656c183c67d6d7556d846752ac2e0168"}]}, + {format_lib_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be7d1b5e03f626bc3a081680842f3c69"}]}, + {misc_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"57e2232dbb711535686b684350c6412a"}]}, + {overload, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce834faf427a10bffb528420385e75fc"}]}, + {rb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c791582aa44b9701a38bea7b12a737c9"}]}, + {rb_format_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6df90c6b446bfd31471022bae098995"}]}, + {release_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc289c9b3ed6443f9e88a7a40b1bbd78"}]}, + {release_handler_1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b7cbb150cbc1ad629936632bcf8700a"}]}, + {sasl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a39ff904fad2fb7b62b8745b34e29b9"}]}, + {sasl_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"651a20fbd6df5b1c785152aecf691f13"}]}, + {sasl_report_file_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d21420c495fb60e6be13677a923ff7b"}]}, + {sasl_report_tty_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165b304307e62adee19805a95d9b6ccb"}]}, + {si, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ecfe8c3c35aba098dd3530398086bcc1"}]}, + {si_sasl_supp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77c86cc1c9667be73a48dbcb3c480d36"}]}, + {systools, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5514e0264308050ac1cc5cecaf74c950"}]}, + {systools_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1aa9e6a22dccb94499d5609ce1cf66b"}]}, + {systools_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2c4d3e4b7b322b6629575a64e553f90"}]}, + {systools_rc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4337b68dc98fbbed9e93f2bde9ef4d0d"}]}, + {systools_relup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd4bb2c6c8422b979b5a75e6f545baab"}]}]}]}}, + {application, + {runtime_tools, + [{description,"RUNTIME_TOOLS"}, + {vsn,"1.8.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin"}, + {modules, + [{appmon_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62c6dd94499d20f1776df7cd3267c100"}]}, + {dbg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a7b449f37506a70985c5b3f69ec579c"}]}, + {dyntrace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"746609b1554ac41985637b5bba780905"}]}, + {erts_alloc_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a489439d8dded5734eab5eb575ce454"}]}, + {observer_backend, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9af82e565eecf62c161023fce415c58"}]}, + {percept_profile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32909b64d30ade082680e9491a3ddbc8"}]}, + {runtime_tools, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c569a23a42bf744f56abbf4215ca2a9d"}]}, + {runtime_tools_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f52650d88ee6f6754ed9d109accb7eac"}]}, + {system_information, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ed879d33f6159b48fb25bc472369285"}]}, + {ttb_autostart, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6838c97b9564b06d26e5f599adcee4a6"}]}]}]}}, + {application, + {reltool, + [{description,"Reltool the release management tool"}, + {vsn,"0.6.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin"}, + {modules, + [{reltool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b15d15af1453d274df701f6c4b39da09"}]}, + {reltool_app_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e15041fae657a7abcce63e7e775af842"}]}, + {reltool_fgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c07b7a13c2ae36b59f5d1f0daf8a567"}]}, + {reltool_fgraph_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"230041769919290efa2a3419cf70c8cb"}]}, + {reltool_mod_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"752d8f1d674a79955de7afd3ba6b561b"}]}, + {reltool_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"135d9bb6ea57344472c185d61c97573c"}]}, + {reltool_sys_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f02ff065d17fa8203d711b9cc698ebf4"}]}, + {reltool_target, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"036440a327b1c9cbe5e404ffaf02b9a4"}]}, + {reltool_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c623f90e0c5da5db65d4ca56d9088d7a"}]}]}]}}, + {application, + {public_key, + [{description,"Public key infrastructure"}, + {vsn,"0.19"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin"}, + {modules, + [{'OTP-PUB-KEY', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6f796b3667abf21828ee3daf8df487c"}]}, + {'PKCS-FRAME', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4419b1988012d2d620ac3cc7dec13d65"}]}, + {pubkey_cert, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7a4ac659e84ddfb1dc14f0608460fbfb"}]}, + {pubkey_cert_records, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d5b1f48543bb6b0e62b343c2b965615f"}]}, + {pubkey_crl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"680633b53ae9815138f804c999e78bbd"}]}, + {pubkey_pbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"517156230695474828dc4d30af59f656"}]}, + {pubkey_pem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eef5632fcf01194dd6c98f116de8f923"}]}, + {pubkey_ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5acc6568d3caea9be2d2b93904f6bda9"}]}, + {public_key, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7b054e72c6e34943c0143ac34edcc37e"}]}]}]}}, + {application, + {pman, + [{description,"pman The Process Manager"}, + {vsn,"2.7.1.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin"}, + {modules, + [{pman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d0ea0aa857d089d112f46bed16fb83c"}]}, + {pman_buf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efdccd7cb884a2a9c50cc70719d53575"}]}, + {pman_buf_buffer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfdd78d8905bd1bb7e07ee22414a0eae"}]}, + {pman_buf_converter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"afd7e3173377b46ec7374c0e1118a158"}]}, + {pman_buf_printer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7c592081860a9b92b08b557c46b11307"}]}, + {pman_buf_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77e551e0bc43c59bf5a76f0e32daf822"}]}, + {pman_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4371d24cd7312794afb137de259b8e0"}]}, + {pman_module_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0336677781cb813897e9306415f85b38"}]}, + {pman_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"016b8cac7c507593a118b25ab3d642d2"}]}, + {pman_process, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"faab007fad0f14fc692df152d60a8abd"}]}, + {pman_relay, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b12bbe3e253211fac5006414f6f6162b"}]}, + {pman_relay_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3b7eb65c7c1507892ed8f01a1b5e027d"}]}, + {pman_shell, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3b9e7634fb49f1e84a57ed8cee5e3909"}]}, + {pman_tool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58ab631eed4b29ddebd390b4cd30c82f"}]}, + {pman_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"697f4a56a374bcacf06e8329356f7b9d"}]}]}]}}, + {application, + {percept, + [{description,"PERCEPT Erlang Concurrency Profiling Tool"}, + {vsn,"0.8.8.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin"}, + {modules, + [{egd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"810926c65926827a80dc5de6e9cace80"}]}, + {egd_font, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f41911d6aa5ada509332aca159c905e"}]}, + {egd_png, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"201db7435f6981d1d5b738c5431d4a39"}]}, + {egd_primitives, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cba1711d459930f92725953bca582106"}]}, + {egd_render, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b86b9269dfad8feb8753abfa8e9be68e"}]}, + {percept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af81f6c6164ac09eafdfbe02a985976b"}]}, + {percept_analyzer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efe67a4369a96144def43df906f2ac94"}]}, + {percept_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bff80fb7515c9c23977cceb2fba5e0f"}]}, + {percept_graph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1444b51fa93b12bb98f6bf5246e079f9"}]}, + {percept_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b84fd915479ddaa158366217f7fb2ff7"}]}, + {percept_image, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec8d1dae1d54b90ccd7cce76d83573b6"}]}]}]}}, + {application, + {parsetools, + [{description,"XLATETOOLS CXC 138 xx"}, + {vsn,"2.0.9"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin"}, + {modules, + [{leex, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c82fd5f503469e40008fb18b393b5421"}]}, + {yecc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e644a07828dcb46e440058ec4e3ea83b"}]}, + {yeccparser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43c2c84fbd4caf3c3eacfe0e25874f3a"}]}, + {yeccscan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc55537c97f45738825ae56628fd4c71"}]}]}]}}, + {application, + {otp_mibs, + [{description, + "SNMP managment information base for Erlang/OTP nodes."}, + {vsn,"1.0.8"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin"}, + {modules, + [{otp_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b92358a169666b58abe47dc98b1ea1f8"}]}]}]}}, + {application, + {os_mon, + [{description,"CPO CXC 138 46"}, + {vsn,"2.2.12"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin"}, + {modules, + [{cpu_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"071d377ab6c706f3c4404dfddf95316c"}]}, + {disksup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53255f9176fdf57c6d2c62a1e3ca8ce2"}]}, + {memsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d5aa81b4c0017f97827b13d588e907cc"}]}, + {nteventlog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d593ff9832f59a682cb9a7217eb1dc55"}]}, + {os_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8fcf26c77f01a1542d007513e49c214"}]}, + {os_mon_mib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15ff2fbfd1c88ff31ff9c8e85bf10cb9"}]}, + {os_mon_sysinfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bed5dda663ec63a320198f44c90f388"}]}, + {os_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52837f657faabaab44288ba2d29ba473"}]}]}]}}, + {application, + {orber, + [{description,"The Erlang ORB application"}, + {vsn,"3.6.26.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin"}, + {modules, + [{'CosNaming_Binding', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f894f1ca2a53e8c68579c9e786884b64"}]}, + {'CosNaming_BindingIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"938a503dbdbe3f091ce900dbe1efeeaa"}]}, + {'CosNaming_BindingIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"07513574b340d64ec6d50ebf98a772c7"}]}, + {'CosNaming_BindingList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37aaba8fc8623355426055d3b9c2e2b8"}]}, + {'CosNaming_Name', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7053bbff4a4dd27357c7ae2b7a1bd158"}]}, + {'CosNaming_NameComponent', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ef942efe3f30c93b89cbb79f0b0e372"}]}, + {'CosNaming_NamingContext', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e73232824e400a4b6f9a295922420a5"}]}, + {'CosNaming_NamingContextExt', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb072ace0d3d1445fa884fbb59d19ff6"}]}, + {'CosNaming_NamingContextExt_InvalidAddress', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba29a989c4d5c961c62bec9162bedd71"}]}, + {'CosNaming_NamingContextExt_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ece2da1a74559421fd8c5a0fcce5a984"}]}, + {'CosNaming_NamingContext_AlreadyBound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ba2061d5ba1cd24262351fa0b92b8850"}]}, + {'CosNaming_NamingContext_CannotProceed', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"175c9f998a255ce625568ff7d7258988"}]}, + {'CosNaming_NamingContext_InvalidName', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b5bb3702b8105f78101d3deeb4c3717"}]}, + {'CosNaming_NamingContext_NotEmpty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0dbdfc178f40394391977946fdbf331d"}]}, + {'CosNaming_NamingContext_NotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2f4d6cf9150fcc92bd9568ff89d2774"}]}, + {'OrberApp_IFR', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67d245498b4abcae1f6acd51c4edc47e"}]}, + {'OrberApp_IFR_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab7e63e7a7e47bac6d2cc7e703f2915"}]}, + {any, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1339baf3e573eee6bb558d0097bce4c2"}]}, + {cdr_decode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dda23b10f13bec369113cf3ae72b9448"}]}, + {cdr_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d36c6b8ee3a9fddfdc76246030287ba"}]}, + {cdrlib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d97ec0db3640dda02a25e6ecc9d5fa5e"}]}, + {corba, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3794dffcd3c921332af2b343bb9e8e40"}]}, + {corba_boa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dfd1417d677ca18f73c4efe65b37bad"}]}, + {corba_object, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"569d7993c599bd7c2f68bf7a2d11fdbd"}]}, + {erlang_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ec91157e3e220cc5163b552f3a4050d"}]}, + {erlang_pid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"49b95cc1773eeed11661fc4cb36b7921"}]}, + {erlang_port, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b0dd3969488714fc2e2dce30b297b14"}]}, + {erlang_ref, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98b38f4a590a67a1fa34b2c6d60e8992"}]}, + {fixed, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"469aed745e70550ecb4ee6b382a0c919"}]}, + {iop_ior, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d3eeb1d5401ad27f97b75926cbf8387"}]}, + {lname, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"945467530d2858f1dfb87b970a3862bc"}]}, + {lname_component, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2cb0fe6e60c6d07d711cd8c3b28c8f7"}]}, + {oe_CORBA, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02e20118e9fd5c3f5d2f398851cbdcf1"}]}, + {oe_OrberIFR, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ebc39f59cbd7848e61193c82ab0ee2b9"}]}, + {oe_cos_naming, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18745eadd8db295fc1e8e656a5c8d4d6"}]}, + {oe_cos_naming_ext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56520dda2639eaadae720ac4974080d5"}]}, + {oe_erlang, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"963486a48402a80366275f8dace2a80f"}]}, + {orber, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b4c2a1e44684d8f314230f21def86f2"}]}, + {orber_acl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76577170937f03fa23e69e4df6cfc424"}]}, + {orber_cosnaming_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f856cbb99314e9eb7d0d7bfcdb30994e"}]}, + {orber_diagnostics, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"656103538d0ee20b1433c6b2909b26c0"}]}, + {orber_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75b0fa232da40432e3009ead263f3749"}]}, + {orber_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ef09c1b3026ef3aaae5e9c6a5dd2918"}]}, + {orber_ifr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0fed5973a29d60ab161580bf07f3b185"}]}, + {orber_ifr_aliasdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"941404668a378948bbef59da18973eea"}]}, + {orber_ifr_arraydef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4a1ebba0a7f7a26d5205972ac2bc6fc6"}]}, + {orber_ifr_attributedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"141fa0d0127d292e0bfc3f0e654059df"}]}, + {orber_ifr_constantdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"337388d13414ab58cdafcbd70a150741"}]}, + {orber_ifr_contained, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a825abb903208287bc2dfb7323342fe6"}]}, + {orber_ifr_container, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3027632d783e5db3440bead382fbc787"}]}, + {orber_ifr_enumdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f031b9d117143554a1db00a0f7f9d4af"}]}, + {orber_ifr_exceptiondef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e152b750cbb286b90ec49855c9f8115"}]}, + {orber_ifr_fixeddef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c0f66c8a6999241daec6815a1eaf7112"}]}, + {orber_ifr_idltype, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f5b0c9c79289e56f5cfe24c5de10c26"}]}, + {orber_ifr_interfacedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"985cc443e424939f7f067e9d577c0044"}]}, + {orber_ifr_irobject, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"441a6a89092f9059eddaafb3a19fddac"}]}, + {orber_ifr_moduledef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"571791fe8c191478f9d99008066db451"}]}, + {orber_ifr_operationdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"26ff4727920661a5777fdfeb9542447d"}]}, + {orber_ifr_orb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f82245f4568a7ad57b93005504b22f3"}]}, + {orber_ifr_primitivedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cad06f8ddc116042d7dd2f54f189dc9e"}]}, + {orber_ifr_repository, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"88fc8f59fe5a883e6a5cc76c9db0a8f0"}]}, + {orber_ifr_sequencedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55db89bec3e336bf1a1087b8b24ec0c9"}]}, + {orber_ifr_stringdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7119d2c1827fbfe04397a23e0c9b7bea"}]}, + {orber_ifr_structdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e0643a9e51eb2fe1bb3268623005b9c"}]}, + {orber_ifr_typecode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52a2bebb663486dfde545175b24f1db9"}]}, + {orber_ifr_typedef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1440f73d398af50ec1f1854b68a7ba14"}]}, + {orber_ifr_uniondef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a767805d679f87ec96f566ea535b0ae"}]}, + {orber_ifr_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a7a7127b079023e8507c1963bb70c6a8"}]}, + {orber_ifr_wstringdef, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d9705c3d0a8e75958cfc92c0e065688"}]}, + {orber_iiop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08e63cf45c6b87ef390f1ba44908df62"}]}, + {orber_iiop_inproxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7d958ccebf1795810daf42c284df0b0e"}]}, + {orber_iiop_inrequest, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"01cf6a0b86d8575aad71a64d1ead078f"}]}, + {orber_iiop_insup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f3e97ae477f58ab983bbf78c5691a6b"}]}, + {orber_iiop_net, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cf48384275f94de84a88f985e69db8c5"}]}, + {orber_iiop_net_accept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"311c1717af0f83c768a7904bd4f35d87"}]}, + {orber_iiop_outproxy, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aadcfde8449aad07dda946c4fe8ae73f"}]}, + {orber_iiop_outsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bb6aa4ab42569ea07e6410eec054d96"}]}, + {orber_iiop_pm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c23eac6eed61ab8f4b0376bada6a96c"}]}, + {orber_iiop_socketsup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41cb70052711397c5ff4346c78bad0bc"}]}, + {orber_iiop_tracer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3db9add6a744c5d57f2f88593010189c"}]}, + {orber_iiop_tracer_silent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddc6f4254d9d55920c182bfc82174cd5"}]}, + {orber_iiop_tracer_stealth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b5c2faed84597fcc65a1f79f126d38ed"}]}, + {orber_initial_references, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"52d7435fcf9d9b18c41cd15112211641"}]}, + {orber_objectkeys, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77601464765a034f2157e184b66b27bf"}]}, + {orber_pi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7772668cb95512b5068384cffb15f5ec"}]}, + {orber_request_number, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce4912e1c1726a3edd4d2709171895ad"}]}, + {orber_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea78f1c75c253c070f2b3423b896667a"}]}, + {orber_tb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d9b508906d187e6448fd06b88923aea"}]}, + {orber_tc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f43cb767b9c01d13d190a56574aa504c"}]}, + {orber_typedefs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82369e4a3e862ef248d19c460b2df8ea"}]}, + {orber_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23cc5e9ac5ffe3b7ac2315ae0759243c"}]}, + {orber_web_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c95b45e743c0a1f7a2e88e350075f78c"}]}]}]}}, + {application, + {odbc, + [{description,"Erlang ODBC application"}, + {vsn,"2.10.16"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin"}, + {modules, + [{odbc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2763e2d38d62e1fbe7c8ed231cce1905"}]}, + {odbc_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"83f4d02ba9fd29ff84576abe0fde901e"}]}, + {odbc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c39c9a6e602d66a2d12b662bf0a9b20"}]}]}]}}, + {application, + {observer, + [{description,"OBSERVER version 1"}, + {vsn,"1.3.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin"}, + {modules, + [{crashdump_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77bff2805dfd88de4320b9f8c1469fe3"}]}, + {crashdump_viewer_html, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d22f72c96ed77a6e4cabe125db6c8419"}]}, + {etop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"377b59a76eeb5edb5b8531b5f0267399"}]}, + {etop_gui, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0421b554807cd47031f0873f649d5e1"}]}, + {etop_tr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d152946c82611d5f39b1ed3c720cb570"}]}, + {etop_txt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02a670a9ee8ea7c3cea6de5bdcfa356"}]}, + {observer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e7d30dfe8122c8736eeac0582abb076"}]}, + {observer_app_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6130cbc700be448c7f64c7f8bcefcc6"}]}, + {observer_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0973e064b3b2ff3b79f2f1eed47a8539"}]}, + {observer_perf_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b5753467f635c1a98ad5e3f2e50f75f4"}]}, + {observer_pro_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e68919849e91012fd156d3ac6228af"}]}, + {observer_procinfo, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"175c07cc3510655fbdfe95a35012a84a"}]}, + {observer_sys_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7637a94c99800b8b1c47467f7411fce6"}]}, + {observer_trace_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a836a58f29e21107efbf7fa3276c0ff6"}]}, + {observer_traceoptions_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e070e083bc809e6bd67284d46876292e"}]}, + {observer_tv_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dfa1b811025f5313ba91c620bdafa62"}]}, + {observer_tv_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c8661053d6b3b563582c335e6e18bc2"}]}, + {observer_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72d4b855d618e72367b3b26a9c9fe22e"}]}, + {ttb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08eec178cb05729190be64adbfc06fd4"}]}, + {ttb_et, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18006f41b1483c5378d0d803bb73428f"}]}]}]}}, + {application, + {mnesia, + [{description,"MNESIA CXC 138 12"}, + {vsn,"4.9"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin"}, + {modules, + [{mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ef269bdcc2f2ebecc93eed4a7d97e43"}]}, + {mnesia_backup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50581e2e99465b9ab9adb11193ccbcb8"}]}, + {mnesia_bup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63c4dc59c47dedf48fb8a67b3aee3a5a"}]}, + {mnesia_checkpoint, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"57fca37f2b0e856bb728f0660f6ad017"}]}, + {mnesia_checkpoint_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"211e3b158a5869145c472cc12080a148"}]}, + {mnesia_controller, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4d98077e647433bbd4dfe9215bf45c0"}]}, + {mnesia_dumper, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"32b0759359dcf8f05af72e914720ceaf"}]}, + {mnesia_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb423661483d17e8aaa683a22600aee7"}]}, + {mnesia_frag, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"279eb6b4f1f713c9960f1697856030e7"}]}, + {mnesia_frag_hash, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ca1e314bdfa381005e047965e7fe435"}]}, + {mnesia_frag_old_hash, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70dd3592f65741eefd724448e56427a3"}]}, + {mnesia_index, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79261cc27d922d6eeecac20a90920cd0"}]}, + {mnesia_kernel_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f6da4fd3cf0ce074bf7b04e44e86470"}]}, + {mnesia_late_loader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02a44f59cd50a3b6fcb78198781e8e7b"}]}, + {mnesia_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"08abcd0826ef6dce6929ca1741c156d7"}]}, + {mnesia_loader, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b316a61b4f5ce23b5c7e4bcfdaf6367f"}]}, + {mnesia_locker, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"847d79bf891a9bcffda9e12458490e7e"}]}, + {mnesia_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ae50e4995027fe6229091521e842b1e"}]}, + {mnesia_monitor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"105c199cb846668f52e583faee684690"}]}, + {mnesia_recover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91044c669bf165c1d9bb72d76da7135c"}]}, + {mnesia_registry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa46aa5634381be997d54dbbf8da99d1"}]}, + {mnesia_schema, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19676af000bf38b666e545b3c6f22937"}]}, + {mnesia_snmp_hook, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f994954a18270025bf505af1a1dd1244"}]}, + {mnesia_snmp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb3f27cfb0a3fa51e062ca6e86973a3f"}]}, + {mnesia_sp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86565dac38aae327be11f08e8d2e05e8"}]}, + {mnesia_subscr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02b0b2458f5900927d72010d097ea94"}]}, + {mnesia_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"309a5b00197c57437131eec4ce49c560"}]}, + {mnesia_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3008beca178112720e4dc18ec6325583"}]}, + {mnesia_tm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7be29c00407f6162375a0d855b36c68d"}]}]}]}}, + {application, + {megaco, + [{description,"Megaco/H.248 protocol"}, + {vsn,"3.17.0.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin"}, + {modules, + [{megaco, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1621bcd17d72f8165b568b33e80badff"}]}, + {megaco_ber_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12ccb5c139d29b2066d3317a2f6c166f"}]}, + {megaco_ber_media_gateway_control_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c13becbea3de6bd37af08cd022c5b5a1"}]}, + {megaco_ber_media_gateway_control_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"721176c1221d7ea112757ebe621508fb"}]}, + {megaco_ber_media_gateway_control_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c4546f9416ae2b969c41f114c777b994"}]}, + {megaco_ber_media_gateway_control_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f352af0a5bfe76b5ca6a6393ef0782a"}]}, + {megaco_ber_media_gateway_control_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2321767a4aeeadca11a92a77da4bb488"}]}, + {megaco_ber_media_gateway_control_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"851782cffe570769b46773bc55073bc5"}]}, + {megaco_binary_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5e378f272d26a606b7d8b99accc472ff"}]}, + {megaco_binary_encoder_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1eaa0f4ac077056d2753b4945acac2af"}]}, + {megaco_binary_name_resolver_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"afc05954d77f1580e3e3119b28b2ee18"}]}, + {megaco_binary_name_resolver_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64eca1a5ca4891ec6cb56e5b3b747cb1"}]}, + {megaco_binary_name_resolver_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ab8daa26dfc1ecd8593ea03f037e0b1"}]}, + {megaco_binary_name_resolver_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a28e0729df9ed41a27d38e76d2b1efc"}]}, + {megaco_binary_name_resolver_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e831098553576721cfa3187f3246577"}]}, + {megaco_binary_name_resolver_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"adc24901b71b89a59191caa575777136"}]}, + {megaco_binary_term_id, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82f36dc610c932eb0e6ca2e9002d6c5b"}]}, + {megaco_binary_term_id_gen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1f0904c943c78f55b67da76203955d"}]}, + {megaco_binary_transformer_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fff3d874f36cfbc32dbbbc5078dcd380"}]}, + {megaco_binary_transformer_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33cc44d1bf46cd3bfb5aea29887bcd57"}]}, + {megaco_binary_transformer_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ef3fe41f1f88c54aa4fb1caac2724337"}]}, + {megaco_binary_transformer_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f916e19a7725a6887c4f88395c9af607"}]}, + {megaco_binary_transformer_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4c8f6b31357bc55c13c7b7881a9a775"}]}, + {megaco_binary_transformer_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab88024bec5e1fd3c03923d1d0e5119a"}]}, + {megaco_compact_text_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf7e1fe374598225fd46f38b81e07d9f"}]}, + {megaco_compact_text_encoder_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23e6620407ec5197028fa798bf01e51a"}]}, + {megaco_compact_text_encoder_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a475f5b036fb0aa3dd35f86ff1d3c3fd"}]}, + {megaco_compact_text_encoder_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2cbd43381f15e24a25a85797028851d5"}]}, + {megaco_compact_text_encoder_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b193fe2860d7e926e73b71c501412b07"}]}, + {megaco_compact_text_encoder_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"777b3a6ecc8b41b8bbab1ad70c7bf6ae"}]}, + {megaco_compact_text_encoder_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e481d7fc5b319d95e6b6d7301837211c"}]}, + {megaco_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"895d349eeee863ee722653edb146eec3"}]}, + {megaco_config_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"275e3e57bae4ae030b1e8f2be4a4ece2"}]}, + {megaco_digit_map, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e82b7b9950adc2a9b92418b741056198"}]}, + {megaco_edist_compress, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de4bb8d979b71e2a77bc6480c755f0e0"}]}, + {megaco_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"323b5d062600331842c9a23dd847ce29"}]}, + {megaco_erl_dist_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6523fa00adc2e065d8418983cb9caa83"}]}, + {megaco_erl_dist_encoder_mc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41066ab829e0f8ebc457c8e087e029db"}]}, + {megaco_filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"778b451ec26564a06b01bb6449e62004"}]}, + {megaco_flex_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"76674c634aab23d50f8746016a4a0be5"}]}, + {megaco_flex_scanner_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"eeafd9d64269893a5e719f9791e846ec"}]}, + {megaco_messenger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7fc902eabe8adb5b0fe33e79b000ddbd"}]}, + {megaco_messenger_misc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3bee9043dce0a684cdd1cd8134a370a4"}]}, + {megaco_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"441b7ad486bf4eef899e02f97ba14768"}]}, + {megaco_monitor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6da74b6f55cbbbacdea077af0a845ef1"}]}, + {megaco_per_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"58c49d0f60e2132cef575414c82a917b"}]}, + {megaco_per_media_gateway_control_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b84247f3fbcda78fd09755f5368ade94"}]}, + {megaco_per_media_gateway_control_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a981605bd179636baebaef5ff6ebc806"}]}, + {megaco_per_media_gateway_control_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f30445cfec10f8cbd55fe17c6724b53c"}]}, + {megaco_per_media_gateway_control_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0fe217237913122558c928dd10ef79f5"}]}, + {megaco_per_media_gateway_control_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d1a9dfc04639677dfb27b24b2829f7ad"}]}, + {megaco_per_media_gateway_control_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e967677da6dc54388db01f5c1545c77e"}]}, + {megaco_pretty_text_encoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9dce15ad90abfcf6a7cc93391dbdc64"}]}, + {megaco_pretty_text_encoder_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1b00d8cfa3efaae8d225da7007dada64"}]}, + {megaco_pretty_text_encoder_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa844b22554dca495b913fc57cfa3013"}]}, + {megaco_pretty_text_encoder_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91b54a6e884a8afa32ffaa8352893baa"}]}, + {megaco_pretty_text_encoder_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6db8e013212168a6df39fca101e3aa"}]}, + {megaco_pretty_text_encoder_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"079587bd6b00f80224aaeec199380224"}]}, + {megaco_pretty_text_encoder_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d3a6f2cc1885299f91fb769fd4a1cb01"}]}, + {megaco_sdp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e2d41d949f9ab2404116f809237301a"}]}, + {megaco_stats, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03152bbddea7c1e557224711c4b97892"}]}, + {megaco_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb7802016626e692d5a8519f536cf3d2"}]}, + {megaco_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15cec9b1865d957412d0945e11bd5630"}]}, + {megaco_tcp_accept, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4999b86506c5da0b256de8fdf1423c20"}]}, + {megaco_tcp_accept_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91e916f8b5d3aec78b129abb2064f229"}]}, + {megaco_tcp_connection, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53c5b634698b54c66de0676289c52222"}]}, + {megaco_tcp_connection_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48ff5ffa59eb95858702320eed91bf59"}]}, + {megaco_tcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"597fe1780a9081757e42b57e5ebef1b2"}]}, + {megaco_text_mini_decoder, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4675bc758b6dfade5a21f345c13fd523"}]}, + {megaco_text_mini_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbc886fe01447c012941de8bbcb8b1e7"}]}, + {megaco_text_parser_prev3a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc946659afb87b8bcd032cd513206016"}]}, + {megaco_text_parser_prev3b, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d0158fa2aa0880bfcfcea1249e90a259"}]}, + {megaco_text_parser_prev3c, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9acb9c582674145c94ada5f3bc58567f"}]}, + {megaco_text_parser_v1, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfc2972ed82568f1212b10aa5f54a5bf"}]}, + {megaco_text_parser_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38f90460cdfcaf135be0f96917b2f7fa"}]}, + {megaco_text_parser_v3, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e9afc2c639e48188d332c8bccf39588"}]}, + {megaco_text_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d050061e3c87e8f1964b063624202b3"}]}, + {megaco_timer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1252b5457aeb62266567e5905d4fa76f"}]}, + {megaco_trans_sender, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3be0e627b81fb19dc7a3e27885f0958d"}]}, + {megaco_trans_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c89becbc7e0e3b62c0ee8fac09f5adef"}]}, + {megaco_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8ad32251f0bd50e9289ae09286daf84e"}]}, + {megaco_udp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4274133166af4f35b78505125ca3280a"}]}, + {megaco_udp_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84b71d1f62b9e3958dc6bc55ea87dd5d"}]}, + {megaco_udp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e05c1a2e530417dee164ad41e4fa8888"}]}, + {megaco_user_default, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"604d252f88e8e7de2e8b2941d6f2fc2f"}]}]}]}}, + {code, + [{path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8"}, + {modules,[]}]}, + {application, + {inets, + [{description,"INETS CXC 138 49"}, + {vsn,"5.9.5"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin"}, + {modules, + [{ftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f75e6a1763c0f8ad63c48fee7762bd08"}]}, + {ftp_progress, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a9f1247decddc2091349cc0c561740ba"}]}, + {ftp_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8184ca2df27024d938c1745b9b46b21b"}]}, + {ftp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"23491501dc6175d1a49c2bbb888642a9"}]}, + {http_chunk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2d127d36200e815d589b358178ae3d98"}]}, + {http_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9d27256b8abc0a4752a98c5fab193d9"}]}, + {http_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a327d5e08590cae728288f395b5880ea"}]}, + {http_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fefac9e86284528e5883735ff02f9635"}]}, + {http_uri, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d8dafbcdb6a18c64161cda56b762aea"}]}, + {http_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"948c60f737d5c6d13e9e19b518eb5dcc"}]}, + {httpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12f827ea3b4a60e6abe352016df83794"}]}, + {httpc_cookie, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55dbb04357dcd95196eb831ae6c88924"}]}, + {httpc_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"13538972414b85062867ba8f72b63a6a"}]}, + {httpc_handler_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d291f5169c3ee61ab92b272e5612628"}]}, + {httpc_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbc2349ce89229b7aab1397e920c4a23"}]}, + {httpc_profile_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"71f19372131a26ce3fec7fe59cae62a6"}]}, + {httpc_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f9b151b009d24a06987f46db7a7ab32"}]}, + {httpc_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df4086639fe81d9d6b0b0f1c27d783c8"}]}, + {httpc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cac51bc379bec99f8e2fe737e6701177"}]}, + {httpd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"965f24797bd0ecb2662f8cccbf5a114f"}]}, + {httpd_acceptor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"60c4ec255f9d3e71ca247d690fc050e3"}]}, + {httpd_acceptor_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"146196f8aa54e2872ea09789bf43167e"}]}, + {httpd_cgi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"493bef6896bc09b2a84424756e6aa2d6"}]}, + {httpd_conf, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"122f251eb11290e92a55da1a97647ff7"}]}, + {httpd_esi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f0a20e7f4efd148111074d6c027a749d"}]}, + {httpd_example, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e8699c78100cc50e49ac578b154e491"}]}, + {httpd_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"30702eec4e62275db10ea6e81cd67866"}]}, + {httpd_instance_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d7ab2c856e6d5438dd3144b284ee396"}]}, + {httpd_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12fc1dfa3734ae50f2b5912d1245d63d"}]}, + {httpd_manager, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae9176839ab029c3685eaa1e9b2b90d9"}]}, + {httpd_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c61eb0828079a16033e6b33e8095104"}]}, + {httpd_request, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a91f7e3de28a17002b2923df84f4b01e"}]}, + {httpd_request_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2b44228586d6ef9df1fb9bbcdf8e395a"}]}, + {httpd_response, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73a06662a9f1ea7bb68ea6e0487ff3c0"}]}, + {httpd_script_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"348c3920cf5e3c2137127c4a1e1345b4"}]}, + {httpd_socket, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f021c0b5923e108fd344cee27e360a2"}]}, + {httpd_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7814cf6981a80379606be6a64d684e24"}]}, + {httpd_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b6d1e4e24096bf68e395c2105f9ddce"}]}, + {inets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5dea85fffabe81e273c12c78d57d3ea7"}]}, + {inets_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0cc5b16bf76fdd61cc3fcc189509b4cb"}]}, + {inets_regexp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d90aa0458fda8b4878dc77b59f3a996"}]}, + {inets_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fda2c34b97323c1cc7756e681f50073f"}]}, + {inets_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c8287946a050dad1ffd422678150174"}]}, + {inets_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38930cb6dedec461e1cb409ee6902dc4"}]}, + {mod_actions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cd04b142450e4b2a6681a67ff53fe983"}]}, + {mod_alias, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"488cd71dcfc552f96603b8ae70cffbc8"}]}, + {mod_auth, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4c582f449cb199ea9cc8d5a7004a9da"}]}, + {mod_auth_dets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43a467ba929f04d907a1a6ba11bb1893"}]}, + {mod_auth_mnesia, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d3fe40e66d1a310a5814ead817db4f"}]}, + {mod_auth_plain, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1692c15dbed5d5a680dbac4354569ec8"}]}, + {mod_auth_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ee144579a7fd9a4a761307385f6ef449"}]}, + {mod_browser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4187d14f39e293330958d7ed7f61ce5"}]}, + {mod_cgi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4e72a465306011f4ac2a88f03cd6c9dc"}]}, + {mod_dir, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec5cbec9126f452057ed437dba2051b2"}]}, + {mod_disk_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"702d6f87d24465d11d91f561fd11f7b6"}]}, + {mod_esi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e83eabd7527ed663b93fd5a58a587be4"}]}, + {mod_get, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8dd5d81c6a7cc426524180332edb7a14"}]}, + {mod_head, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a62a5beb75a1b60206669499f77130e"}]}, + {mod_htaccess, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1bf3f03a28de0bf786813fc181fdb85f"}]}, + {mod_include, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"145c3dccff68b053b1db14d5f92488a2"}]}, + {mod_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5417983275ff4ded18c546c70b8cc7e5"}]}, + {mod_range, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03a0b6a05ae0fd306c5b3f20bb6e05b8"}]}, + {mod_responsecontrol, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ebe00aaf53af7508dabc9d09b949a0b"}]}, + {mod_security, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"423eb8f57b9a8bde28e3da13db3de59d"}]}, + {mod_security_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cca3960b3899a1a7a4581afc69d7a5cc"}]}, + {mod_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62fba170a84e8fdb39c8744f64b37a64"}]}, + {tftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ade4b7390488800507debf97307bd963"}]}, + {tftp_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67a1747702ba0bff57a6f8aaa883b9d2"}]}, + {tftp_engine, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb9e0ee93bfa57bd7ef5a038c23edecd"}]}, + {tftp_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48fd419a1467c45c1e7057cdbb59a0a7"}]}, + {tftp_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f666dd774c5c60c7ff175b19ade12b2d"}]}, + {tftp_logger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"151ed197576a35d060b7bbf3c74bdf7f"}]}, + {tftp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7fc8de866dbc9c30b3d91a8adf8ebf0c"}]}]}]}}, + {application, + {ic, + [{description,"The IDL Compiler"}, + {vsn,"4.3.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin"}, + {modules, + [{ic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe764abce09fdd454d880128d9ddda2c"}]}, + {ic_array_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"227ce84fee6671f9cdf93fb8048f596c"}]}, + {ic_attribute_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"975e0b45c8a9ce1cb4551fdfb76cbd11"}]}, + {ic_cbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43ac10b9d3c5142c747d99c3b9dad4d7"}]}, + {ic_cclient, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"73ec31c28859c6c5d6e5dc91b6ce5411"}]}, + {ic_code, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02d51ffcaef78b26a0bc8c680938fb53"}]}, + {ic_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41159947a7c4259a58fec12f96d02d69"}]}, + {ic_constant_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ca029a6c4023f792cdd8fb9052241416"}]}, + {ic_cserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf63d17869ccb762e0edab496be39e09"}]}, + {ic_enum_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab555fa7842eec8c99e22d11060e6430"}]}, + {ic_erl_template, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04c3d10872a5ab6edd781ae24512b6aa"}]}, + {ic_erlbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"add3f7151efb782e2437bb626a7d51fd"}]}, + {ic_error, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6379a791ac55b3542b5db5a1e329439d"}]}, + {ic_fetch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bdc5454c6fe20b3a28d3a10ea4a7b3ed"}]}, + {ic_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6597963c839cab5b5591eb1dcaa6a9a1"}]}, + {ic_forms, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bcfeec18c0f2bc54dd64694b0f6d82e"}]}, + {ic_genobj, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97c379af6629a74a7b70c60e6338a245"}]}, + {ic_java_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40d0d5d7707b0d63119fdc658f7f3084"}]}, + {ic_jbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e2429e630ce4f7dad22af0d4ab242b7"}]}, + {ic_noc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c8e61ad2dbb06818f812f1a3dcf0f16c"}]}, + {ic_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f9f64ecd00b68edfcf38b61e79bd0b80"}]}, + {ic_plainbe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"44ee00595baf6554efbdb45d3ee28937"}]}, + {ic_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"857d2fb9fea30b14657b1c4a86d08386"}]}, + {ic_pragma, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f69abbe96dd3cbebbff573664fe0997"}]}, + {ic_sequence_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdf12c1c5c020249ba9966ed529e5062"}]}, + {ic_struct_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4120b045ef93f4db9bea6c9f14180ca6"}]}, + {ic_symtab, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c8ba1bfdd061a5e6864f86c957d6408"}]}, + {ic_union_java, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b9b140a193c08210aa09a4484d9a54f3"}]}, + {ic_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6ce2a93793c15e09c8e18ccca534772"}]}, + {icenum, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a53766074b7015a3bae4631d87f017e7"}]}, + {iceval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d60924eb402c253265ef229824856baa"}]}, + {icparse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2a14e584b40aa5b9e79c5f3101dfb3e"}]}, + {icpreproc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"14b63dc40d8160ee25e0f829a0d088c6"}]}, + {icscan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c8e2841047e577935f05c0b5cb10b02"}]}, + {icstruct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3fc6b7d763b490773a0c893a541b3d3a"}]}, + {ictk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00ad73c637ec333d51a0905c46381eb0"}]}, + {ictype, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8cfb0ed8d61bdff82302c4b52716ebf0"}]}, + {icunion, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db222ee3335d7b431061d104f6ecf9b2"}]}]}]}}, + {application, + {hipe, + [{description,"HiPE Native Code Compiler, version 3.10.2"}, + {vsn,"3.10.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin"}, + {modules, + [{cerl_cconv, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3f8e5afb7f644e20ecc93eff288091d3"}]}, + {cerl_closurean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"598014277bdc97eb3e42db827964786c"}]}, + {cerl_hipeify, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c67cb3c827232c389de98edcb669a6f2"}]}, + {cerl_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81c8c4cc2fddba367e557bb8fa3e46b1"}]}, + {cerl_messagean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d45d1cf2112a30de90c6e02674b471f5"}]}, + {cerl_pmatch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"592ae9106c429413eef5bca3404a312a"}]}, + {cerl_prettypr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c10b7a51c482eaae5d5bb5156072faed"}]}, + {cerl_to_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"975ca9009d46f139766227e24f00167b"}]}, + {cerl_typean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2407a7ab5367d3d2112283c1ddfc53a2"}]}, + {erl_bif_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0a6c9083ace0be207cc54681c6cbf565"}]}, + {erl_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"42d756bf4eaf470785a1b81838979af7"}]}, + {hipe, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"32e6ef5c8585a438373c41e5a5d75d91"}]}, + {hipe_adj_list, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e5bc155da44d7631411dfc1a02fec2ef"}]}, + {hipe_amd64_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1647b309190377cb226db1314fcac5cd"}]}, + {hipe_amd64_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d3829c95a7eed25abc393e29da9bbf19"}]}, + {hipe_amd64_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"49079178cae281b4645ae6f25ce18838"}]}, + {hipe_amd64_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4476b9c0703b2a8473aa502dc6bdada8"}]}, + {hipe_amd64_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"9fab826ab4bd5d716173c1f3b3b4d347"}]}, + {hipe_amd64_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"52b41c777e65aeea7e35a9321585d34a"}]}, + {hipe_amd64_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4eb339172dae5c27d67b4410de84f51f"}]}, + {hipe_amd64_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"73bf464fdfd7cf668efdffc3fc78c352"}]}, + {hipe_amd64_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7bc4f317d89794f58a1a0bda3b599879"}]}, + {hipe_amd64_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5c0509cfd228b140247a46214243a415"}]}, + {hipe_amd64_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6a50f0f7d1c454c50975d6d0b3eb3c4e"}]}, + {hipe_amd64_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1ed593df4c9da2fe96da00274117f1b4"}]}, + {hipe_amd64_ra_sse2_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"277417561a1fed88867bfdafe9e1c580"}]}, + {hipe_amd64_ra_x87_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8684b37d2d952516b2f8e77426decaf2"}]}, + {hipe_amd64_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"02db134b8e57405134b8e68a9f0588d3"}]}, + {hipe_amd64_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c66c33708abe9f32d36337c358a73530"}]}, + {hipe_amd64_specific_sse2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f0e4d5df03612b82d8cffecd5f9d4a84"}]}, + {hipe_amd64_specific_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3a28b90d577a9db6ef4b70d9defbd863"}]}, + {hipe_amd64_spill_restore, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81a80af9658effa33fdfe85f6161a35a"}]}, + {hipe_amd64_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b55ded15ce4283908342b2824226406b"}]}, + {hipe_arm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"160cf412bbc01adfb4229f8b73a45ba5"}]}, + {hipe_arm_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"62390a02348b3abffcb4502ff1b2b9f3"}]}, + {hipe_arm_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"30d169daa65fe2104260b4621d500e17"}]}, + {hipe_arm_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c464aa34b089a594edfc1cdb7012f39c"}]}, + {hipe_arm_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ee3833e47107f465b35e3d9a255d0447"}]}, + {hipe_arm_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"74ce09dca62bfdfdbe0f667075f78c35"}]}, + {hipe_arm_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e46614b822aafd6233af080377bc8729"}]}, + {hipe_arm_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"19888211ce56a0eb039578ea485a7776"}]}, + {hipe_arm_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b745515f7f9a5b4dc2e3f03f8dba82c3"}]}, + {hipe_arm_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3b5de0ec46bf573c64151697e03dcbeb"}]}, + {hipe_arm_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d129dfc23327601b4615e91f849c214f"}]}, + {hipe_arm_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cdeccd5062db370b87cb350b317c041a"}]}, + {hipe_arm_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fd59b7eba19bd0985bfc527377e815ea"}]}, + {hipe_arm_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cbbdef9b7829ce07fc482451a8f7c7a8"}]}, + {hipe_arm_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2a3a8e58a6ba75ca3902348a5b43ec79"}]}, + {hipe_arm_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7bd890ef97657715f12f031658d4c9c4"}]}, + {hipe_arm_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"611f5b731b1c7fa6f589010db3443a81"}]}, + {hipe_bb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"66afe906c353f43505649b33dfed45a9"}]}, + {hipe_beam_to_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"826bf8aa6513c06c61e08faa9383b4fc"}]}, + {hipe_coalescing_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cf5f22f7e27c8ba6a1e73e29900fb096"}]}, + {hipe_consttab, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4a430042156f62e55b404d38b82ef6c1"}]}, + {hipe_data_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7843ffb243b1c8d66351c1452fec1cf5"}]}, + {hipe_digraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3caa6181724dc59e70a3c5ee5b886233"}]}, + {hipe_dominators, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4f7038336d002e637edb3b57cc6b7293"}]}, + {hipe_dot, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0218e226a92b4a444c90b4c18be48c76"}]}, + {hipe_gen_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"75a06ae623c2dd5a78903d11ba61cfd6"}]}, + {hipe_gensym, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1b5a357fb4e6833e55b574343d116217"}]}, + {hipe_graph_coloring_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e25c88384aaa7b7a16c5849b31db4fcf"}]}, + {hipe_icode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"899c47579553070995c5701f16f2c1ca"}]}, + {hipe_icode2rtl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cba4203ea542c9abfac6eaa92cb269e9"}]}, + {hipe_icode_bincomp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4e211977eb23242d6a2bf0b099eff090"}]}, + {hipe_icode_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f79f8f10f1aaaf4280abf06cfa40d56d"}]}, + {hipe_icode_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ca9529e58b378b731ac6aac84218e2da"}]}, + {hipe_icode_coordinator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3a1caa6d31d48a3fb311a2ea97f0c30c"}]}, + {hipe_icode_ebb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b6b088a13c02a03e5a28247be6d45b94"}]}, + {hipe_icode_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"40dfad7ac3602fece6bb4b5a8c9ab98b"}]}, + {hipe_icode_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f3fcc6b3d555dfa882e7483eb64a6571"}]}, + {hipe_icode_heap_test, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fed11d612f8f3da9ea1e4cc67389eff5"}]}, + {hipe_icode_inline_bifs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3027c916d2ecc9762123585e1d91f467"}]}, + {hipe_icode_instruction_counter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cf488cc5eb29636045d2880b33254711"}]}, + {hipe_icode_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bb99ee17bd466d1b802a42b0583e26d7"}]}, + {hipe_icode_mulret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"323e6103d2511e5bd4a87ad2b4dcf3c3"}]}, + {hipe_icode_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"56edb2552a5c36757005cebd6196f7ce"}]}, + {hipe_icode_primops, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3f14ad0079bdc8cf1feb08c6c2da287a"}]}, + {hipe_icode_range, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0040719dd6effa173e861e4eb0e3cff6"}]}, + {hipe_icode_split_arith, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5575b7299b149e93d358fdeccc999652"}]}, + {hipe_icode_ssa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"090ca01ba76f97f346c6fb260751cad3"}]}, + {hipe_icode_ssa_const_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5944b123b3fcd4b0839b316ee68ee36d"}]}, + {hipe_icode_ssa_copy_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"997be266f8aa90058e1cc47807628ab4"}]}, + {hipe_icode_ssa_struct_reuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8fbe27064d4bb5a27507564d4ace240b"}]}, + {hipe_icode_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"cd5755e095fcdc667aa925440a072104"}]}, + {hipe_ig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"023433ebf566fdd844f091a0d35af764"}]}, + {hipe_ig_moves, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b1d86094e8232686f4e234cca76178c6"}]}, + {hipe_jit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d52c6fa1354f23d6c3234f2ba0adb467"}]}, + {hipe_ls_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"af8f6022eafbf853ada08fe69e9509ca"}]}, + {hipe_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c5c32cf830833284942651c29d48e796"}]}, + {hipe_moves, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4b6be3fb7b1fd8acaa60cf09a34ab92"}]}, + {hipe_node_sets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8f506e9e71db4336c1ec699b1335dc17"}]}, + {hipe_optimistic_regalloc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"43cd34d83f3c513ee455a446628c39eb"}]}, + {hipe_pack_constants, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"09e240bfc2522acbaa543f356a28f9af"}]}, + {hipe_ppc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b4a1ef1f5d56e249be91954a55b35b5c"}]}, + {hipe_ppc_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"be62cec21a026c5385d2482369ac59a0"}]}, + {hipe_ppc_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7d0362cb062e78fb25852d9fcf943371"}]}, + {hipe_ppc_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"45a4ac6be649d5ebd584abd44704addc"}]}, + {hipe_ppc_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fb5b41996c46e440e0292565c786d9a2"}]}, + {hipe_ppc_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1475ac44aff754105fdd4e85687346ab"}]}, + {hipe_ppc_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1fd18b642e945b3f6b384549c810f5c6"}]}, + {hipe_ppc_liveness_all, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"5194b99327e725de7a0c94abb4d35974"}]}, + {hipe_ppc_liveness_fpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b3958a1138f1f112f5ff4b357520fa4d"}]}, + {hipe_ppc_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"fc4585d446b47d4151671b7bc83f86eb"}]}, + {hipe_ppc_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ec4dd9d536fb6aa5cdb418dded96184b"}]}, + {hipe_ppc_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c37b9de73810ceeaca37bc0520a76884"}]}, + {hipe_ppc_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"db4deb5ea2a237ff1e0984f7979e5d3f"}]}, + {hipe_ppc_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4376f33857d9cb0cea29ff783ea82cf"}]}, + {hipe_ppc_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6ba2df5f54c48dc90c42547e8bd2ca48"}]}, + {hipe_ppc_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ba3d03b4267f315b10ed939a37d4597c"}]}, + {hipe_ppc_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a9d4ca393bff97c1931d0eb18d38a811"}]}, + {hipe_ppc_ra_postconditions_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"742e3f111a16eb5ca003f1a97804e5a9"}]}, + {hipe_ppc_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"40dd287c6853767e7083a8c5549681ce"}]}, + {hipe_ppc_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d5e2330aa55edd677ecf3e77bf659781"}]}, + {hipe_ppc_specific_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"34a6f358c60c47ebec7956b66205062f"}]}, + {hipe_profile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"210939fd9ea20991d7fae07b12348d35"}]}, + {hipe_reg_worklists, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ee79fa6eb3bca9a4f0025d9e4ce02a72"}]}, + {hipe_regalloc_loop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"19fc9f539fd5abb2ecc5aeaf6c2526db"}]}, + {hipe_rtl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2ab93246a0c75f83327de3e0234dbe08"}]}, + {hipe_rtl_arch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3481cc7240b928da18df9e61214ceb25"}]}, + {hipe_rtl_arith_32, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"328deb7987296b869279c7c0d588f337"}]}, + {hipe_rtl_arith_64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"64cc932e691e7743d06642103170de55"}]}, + {hipe_rtl_binary, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"198df75c4eefcd2b7a7f769922d4ce60"}]}, + {hipe_rtl_binary_construct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7a1b57215669ed36c40b335e6826be2c"}]}, + {hipe_rtl_binary_match, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1c22996f5b79a3818503a19059bdaf8e"}]}, + {hipe_rtl_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"60570bb8a1cbde7c72ad1c37e2b8e17d"}]}, + {hipe_rtl_cleanup_const, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a555a1c325dd9b3ae1775881af8abfad"}]}, + {hipe_rtl_exceptions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6c7f64efbed1c8e51f2323fa693d3b89"}]}, + {hipe_rtl_lcm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bd3735cbd4bc9eb9254b0c2ee67cd1ad"}]}, + {hipe_rtl_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"0dcceb8fd82c12480e42399dd2869c41"}]}, + {hipe_rtl_mk_switch, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8890cf7e39302f57f3adf8987755b34c"}]}, + {hipe_rtl_primops, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c734e269cbc4be78cb3fe47fa55053a5"}]}, + {hipe_rtl_ssa, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4d9ce36d8dc1168eecf173bde8a0871a"}]}, + {hipe_rtl_ssa_avail_expr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ef5653db422ed4115c734d9676f3b030"}]}, + {hipe_rtl_ssa_const_prop, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"598dee97d9fd44735a534b250bf60e2a"}]}, + {hipe_rtl_ssapre, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"93b3ea7957d2008d763bd4416ef98277"}]}, + {hipe_rtl_symbolic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4e6b19de45d978326014a378368a6f8e"}]}, + {hipe_rtl_to_amd64, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6afb4d232649b0a0ee54e5a4859e85ce"}]}, + {hipe_rtl_to_arm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a12eb244baec0e0bcd2d39353ac69b90"}]}, + {hipe_rtl_to_ppc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"521f595296e6c1bf0b7d1caf59bbfb77"}]}, + {hipe_rtl_to_sparc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"66783d3f670bd939159b0abf3548dddc"}]}, + {hipe_rtl_to_x86, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2b4ebecd4e2fa29e952c650809ec89b6"}]}, + {hipe_rtl_varmap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2b1e6ba5714a0764c0897a780fb38c8e"}]}, + {hipe_sdi, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c305600fbb8905b9b0cf792f2f85ed72"}]}, + {hipe_sparc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6a5cf680abe539d1dfa669cb52ce1f80"}]}, + {hipe_sparc_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"330f4c7130dc215c911ecfd48d9dedde"}]}, + {hipe_sparc_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d8278464e9d1d65437625517255ae2ab"}]}, + {hipe_sparc_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a7f131d52962288326e844f28d13d4cc"}]}, + {hipe_sparc_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c1b5971e5e6f3304bcc00f1abeb268f7"}]}, + {hipe_sparc_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"22d88316138d80c3ecf41ced21ec25cf"}]}, + {hipe_sparc_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"623fdaf78bfaff2b07733eb4a211f79b"}]}, + {hipe_sparc_liveness_all, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2bd5c26371c946fdbf9c1530c1478ca1"}]}, + {hipe_sparc_liveness_fpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"7dc401039841503524934a1b97990c2a"}]}, + {hipe_sparc_liveness_gpr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4c5e32e6adbbc37b4f793e8bde52ab2f"}]}, + {hipe_sparc_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"3c063c4c5b1bd8ec02c6ffe60c561056"}]}, + {hipe_sparc_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f89846e24afb3795d259291e4613c155"}]}, + {hipe_sparc_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6925c18182b17ee978041e26fbf490b3"}]}, + {hipe_sparc_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"45cef8c32ae3b2f6f01911592016924b"}]}, + {hipe_sparc_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"2eedc8b13aac2efcd2e3649afd845d02"}]}, + {hipe_sparc_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"81f0a231c4bde04b132bdb6748774c10"}]}, + {hipe_sparc_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"549d7dfb54dce00bb7f5317306694308"}]}, + {hipe_sparc_ra_postconditions_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"9de491abdbbc1c156a20a692d463965b"}]}, + {hipe_sparc_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1a4dd5b6dc938d539fead6b1ad9e2ba0"}]}, + {hipe_sparc_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"809b836428fcb194565eeee86ecf138b"}]}, + {hipe_sparc_specific_fp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4bf2be9b351b82024e81eabfd68806f9"}]}, + {hipe_spillcost, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b9ef65406aa671e28d1bd8428f102fe9"}]}, + {hipe_spillmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bde0ad7813cb8f86fc4ff110090af2da"}]}, + {hipe_spillmin_color, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e277f11303f44d6ea07be695c1057d7f"}]}, + {hipe_spillmin_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b007825bb206e086b9ffc943213aa625"}]}, + {hipe_tagscheme, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"568fc377e498aec5a73e1b2c9cd29432"}]}, + {hipe_temp_map, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"56dff1fb8175d1d7c32f7e8d95e10488"}]}, + {hipe_timing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c3238c3b4adc08c290c37ba1ea7d3a31"}]}, + {hipe_tool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"f93194221b0e3756c9f0f70127b205bd"}]}, + {hipe_vectors, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c4e6ef55b233f27c27bd2f781baf9c94"}]}, + {hipe_x86, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"051e4ee3dd5298e2cee05b1fca82e64d"}]}, + {hipe_x86_assemble, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"d1829f13a89049280e7cb22cd394af0d"}]}, + {hipe_x86_cfg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"b9d6a090c32c03e6e91deac9bbb167ae"}]}, + {hipe_x86_defuse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"c81bb7a0dd72b256c57fb37042de68ff"}]}, + {hipe_x86_encode, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"386d1abc98765c09c6bc6fe44cf2748d"}]}, + {hipe_x86_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"db2a440f5975688c7bf9a88c47aaf627"}]}, + {hipe_x86_liveness, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"8783c19717dda46b566c465ba85b2588"}]}, + {hipe_x86_main, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"236cd462abe386223cefe606b4f48928"}]}, + {hipe_x86_postpass, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"57e5cb6ad12dceef612122c8f759ac15"}]}, + {hipe_x86_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6efd3b5cd8c70edbd326ffe9457a3192"}]}, + {hipe_x86_ra, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"1e8b7f27a05e1e7fac9ea95cdd394909"}]}, + {hipe_x86_ra_finalise, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"4a3c30788866a5e997e0a1687279732e"}]}, + {hipe_x86_ra_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"bb13a4d08391fe3f212fa4eba816029b"}]}, + {hipe_x86_ra_naive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e26c0711db5e891c86b64da12fe064ff"}]}, + {hipe_x86_ra_postconditions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"e3d6ad622a3017744106b653324c0edb"}]}, + {hipe_x86_ra_x87_ls, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a6092f1853a7a04f8d16228f6183dcc0"}]}, + {hipe_x86_registers, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ce77b4ffff06c9532943ad5f6907b18e"}]}, + {hipe_x86_specific, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"ad074b1e645c06c2137a46cd19f88b72"}]}, + {hipe_x86_specific_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"a20c2c2b1742aa084dbb7395a92b650d"}]}, + {hipe_x86_spill_restore, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"88e191ef5057ea6a50c75af85c814013"}]}, + {hipe_x86_x87, + [{loaded,false}, + {native,false}, + {compiler,"4.9.2"}, + {md5,"6edcc888c87ffc96414a8dce57d691da"}]}]}]}}, + {application, + {gs, + [{description,"GS The Graphics System"}, + {vsn,"1.5.15.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin"}, + {modules, + [{gs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9d416ae60d6cda2ea55a05dbde8a53f7"}]}, + {gs_frontend, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb02484f42ac799bdd086f6832b72330"}]}, + {gs_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea7a1edc4bd5b9867ce924130851f295"}]}, + {gs_packer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c5d911152526836f3487cd3de6b0bf9"}]}, + {gs_widgets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2efa721783d863bca4ff2e116c9593fd"}]}, + {gse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9355057cfe2b70da376f208739bd7c06"}]}, + {gstk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684b9d8f370368e25ea2ca2ac708c1ee"}]}, + {gstk_arc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1cd1114560c3839fb84380975d61d68b"}]}, + {gstk_button, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29ce4f10fe8dc2bb85649018aa64d71a"}]}, + {gstk_canvas, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a637d6932415873666ed040817ed2a72"}]}, + {gstk_checkbutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3cad265e62fb4cbeda02c089b5b309bb"}]}, + {gstk_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd236aeb7ff4658fd1a9d1302602a7af"}]}, + {gstk_editor, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17dd7595545d33bb3143ac3995711b39"}]}, + {gstk_entry, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2740de840e6b8871909dfedd96d4b5b4"}]}, + {gstk_font, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bc2fef06167d48c71cc434fa7411ca95"}]}, + {gstk_frame, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5113cb91ebb88a4cb1a0b4cb7665607d"}]}, + {gstk_generic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d392d9f2e6c6220245cff065e99a3f5"}]}, + {gstk_grid, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61def27e9610041778245948e5f82be1"}]}, + {gstk_gridline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40c7173521b57e4c9243ec5258f65d6d"}]}, + {gstk_gs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c9ab7ac782c3e36e201d4760f37e478"}]}, + {gstk_image, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50a6a6b41de78e4f06b0c98cba97992a"}]}, + {gstk_label, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00b5826ce30fc11e417a7a43f0c7e563"}]}, + {gstk_line, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7785bc56e2f32b575a4240a60994d62"}]}, + {gstk_listbox, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"053218bec49478a8334df6b0818e981f"}]}, + {gstk_menu, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ccf11b45fdd908fafb781c897d379370"}]}, + {gstk_menubar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e801f2c6eccc8258d719028b706ec624"}]}, + {gstk_menubutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fc2d88da997bdc39a24f3f0db9963b3"}]}, + {gstk_menuitem, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a4442a7307d34c544783c9d22433135"}]}, + {gstk_oval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f4775c1b7522750f395f28a94eefe453"}]}, + {gstk_polygon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fdc96f316574995486c842b612722e25"}]}, + {gstk_port_handler, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"95ec5d20c905e8cc7fef2df5f99ceb88"}]}, + {gstk_radiobutton, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b67bb9cafd3bf67b210d7b0e0b1bd992"}]}, + {gstk_rectangle, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6bf1f8e7953532468393090fe8d56ba2"}]}, + {gstk_scale, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"848c7ee845d1a59a0a7c4775f64f220e"}]}, + {gstk_text, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"719252f8d069544886ec473e16688530"}]}, + {gstk_widgets, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29b540f4612eb1f1e65123f08809bee4"}]}, + {gstk_window, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"746a06674df1cd96678689e6ab92a95a"}]}, + {tcl2erl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f67bcc59683d0c578cba1c0062ff6b3e"}]}, + {tool_file_dialog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3763cc96ed8e2a6136a4c15e54a9adee"}]}, + {tool_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"96edfeab61de9b40618e7808d62225b2"}]}]}]}}, + {application, + {eunit, + [{description,"EUnit"}, + {vsn,"2.2.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin"}, + {modules, + [{eunit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"800601aeceaf1de519df273ca25741b5"}]}, + {eunit_autoexport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"48f889ffaa560238fa2269614f93bbce"}]}, + {eunit_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed89782dac4c2b21da64d92bf74f1e22"}]}, + {eunit_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"949ed8c5f494a8678c6f29775a7b5154"}]}, + {eunit_listener, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f107b19b4ecf45031a93afa5ace611f"}]}, + {eunit_proc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cfc2da427b2bf7ba843f6b8d8121e2c9"}]}, + {eunit_serial, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f07a040ebbba4af90fa9668c410befba"}]}, + {eunit_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0842dedb36c3b1cd91229a7e4abfe328"}]}, + {eunit_striptests, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"473b48509d28519ba18cfa83a8dea8b4"}]}, + {eunit_surefire, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e6a5cebf210cdd8a558cd32b96ac13"}]}, + {eunit_test, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc3897e05a5146b24c109fbc5da83e86"}]}, + {eunit_tests, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d2b6b165201e0aad13a8d8f4d542f59"}]}, + {eunit_tty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4faaab287e1fa52837cdfd1b58c7faf"}]}]}]}}, + {application, + {et, + [{description,"Event Tracer"}, + {vsn,"1.4.4.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin"}, + {modules, + [{et, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"82db3e8683420a2adb933306c8c822e8"}]}, + {et_collector, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd43f7a22b3c3e6a1799a88163c3d441"}]}, + {et_gs_contents_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"44e7ea855be084e48cd364735d79f5f7"}]}, + {et_gs_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d4ef2a5673c20444b198bdc185cc637a"}]}, + {et_selector, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"267f60d2ecdad671eae269cdd2ff30f6"}]}, + {et_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ae9af3449c17f045d25ca424e9873ae"}]}, + {et_wx_contents_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d14826378988286a32fc85ca4246325"}]}, + {et_wx_viewer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"87f45e31d50a82d9db2443ddff14ad22"}]}]}]}}, + {application, + {erts, + [{description,"ERTS CXC 138 10"}, + {vsn,"5.10.3"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin"}, + {modules, + [{erl_prim_loader, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"719e5362c7c1f0d1fd96601b7f814981"}]}, + {erlang, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04b2444affe04bb9287d86e0e0c80578"}]}, + {erts_internal, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a95c0409fe7b4ccf6e2fe509bfd23da8"}]}, + {init, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55bb9fddcdf820938be2efee15eccd82"}]}, + {otp_ring0, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47fe4e7e2d2a5f20cd3a9393e0743e57"}]}, + {prim_eval, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"16d4fc3a8e5e2ef7200bd866fe8b1abb"}]}, + {prim_file, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da0745178ab8aa8fb8d3a373970ebfdd"}]}, + {prim_inet, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4993598825a1083526cbc23cf027f494"}]}, + {prim_zip, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9280fc2398f9eb3bd09f74cfa1d6d267"}]}, + {zlib, + [{loaded,true}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"811834d04ac37676048717e1c51f63ac"}]}]}]}}, + {code, + [{path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13"}, + {modules,[]}]}, + {application, + {erl_docgen, + [{description,"Misc tools for building documentation"}, + {vsn,"0.3.4"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin"}, + {modules, + [{docgen_edoc_xml_cb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"29c8b94e559528ca0aeacee089f52bcf"}]}, + {docgen_otp_specs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c6d53404b1059d2da87ce44bee49d2dd"}]}, + {docgen_xmerl_xml_cb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"274ef03ec5cb146346fea794e77febcf"}]}]}]}}, + {application, + {eldap, + [{description,"Ldap api"}, + {vsn,"1.0.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin"}, + {modules, + [{'ELDAPv3', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"655b60d1b5b0629024e2a78708c64518"}]}, + {eldap, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df60096d034768188e0fd6eaa0fd571c"}]}]}]}}, + {application, + {edoc, + [{description,"EDoc"}, + {vsn,"0.7.12"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin"}, + {modules, + [{edoc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2749685cb80a536ad42426933220065"}]}, + {edoc_data, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3a444b7ae3acc249aac7fe40b38355af"}]}, + {edoc_doclet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77b3ccaf177983dab1991425fd3d714b"}]}, + {edoc_extract, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9effef62cfe9939a4c80b43b86041c6c"}]}, + {edoc_layout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f2b79a133f490b4de09b13f7519d37dd"}]}, + {edoc_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f421fb61a9b2c711d5fc28387b0ffd0"}]}, + {edoc_macros, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddb1e78cf2ddd20aadc87329067286f3"}]}, + {edoc_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"02fe39575dfda2cffd6031f6c8f470eb"}]}, + {edoc_refs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a3ba4e7f5211445d74a4d19bc4c5963"}]}, + {edoc_report, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bfef03c1f2c7de294972d0ad185a3a11"}]}, + {edoc_run, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0db629008caa57ebafde1dda9672306c"}]}, + {edoc_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165a8e826f458ac6de7c50c395d012df"}]}, + {edoc_specs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21a5746822e2ae01421fb064d9c8ccfd"}]}, + {edoc_tags, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9ad335a1ce6b99189cfbfaef2ca2038"}]}, + {edoc_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"84530d798ce334278df4dea8a69098f4"}]}, + {edoc_wiki, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eabda8c28daf0cdc040eef58f31cc6a8"}]}, + {otpsgml_layout, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a511240c5864dd31d4df687465e355f6"}]}]}]}}, + {application, + {diameter, + [{description,"Diameter protocol"}, + {vsn,"1.4.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin"}, + {modules, + [{diameter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2fdb2feddc71bda9175711150823325"}]}, + {diameter_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6dcc769947f323a9ff306c9bcab4dd2c"}]}, + {diameter_callback, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8c76e1ccf47e3c781cbdf3c8d3e293f"}]}, + {diameter_capx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"65e483a5f121d99db830329f3dc050cb"}]}, + {diameter_codec, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bd2e1ef215e88519ca3865601e479dc"}]}, + {diameter_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"33696e30585762fe29ca103d67ffbb04"}]}, + {diameter_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76e885acd24a697d19b07ce5446f5c2b"}]}, + {diameter_dbg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0954c1f71a204a0f2c8b3682d520c704"}]}, + {diameter_dict, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ed21a8d2eea031aa736e95870a7a165"}]}, + {diameter_dict_parser, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c90e506d7eba4f18547238b8f025ce5e"}]}, + {diameter_dict_scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b3fc9ee26b660a97ad67b4c8728a0b75"}]}, + {diameter_dict_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70475203e0968747889eecc533af3f0f"}]}, + {diameter_etcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dde08c8d8311e2700c59b741274923fb"}]}, + {diameter_etcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"85fc8320ca9eb8daceb03727bdadb6f8"}]}, + {diameter_exprecs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"728aa8871c778eacc02313d922dde7ae"}]}, + {diameter_gen_acct_rfc6733, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53fb49bb8c354f36d6e1ad6366fe02a2"}]}, + {diameter_gen_base_accounting, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"845f38b99248c11778453b628ddb4fed"}]}, + {diameter_gen_base_rfc3588, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f6cd02c8318f4ccc198bd08d1ac789fb"}]}, + {diameter_gen_base_rfc6733, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"49edd3b9955c82c872169f769c833482"}]}, + {diameter_gen_relay, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c970d47476d2832f510b6b03699c95c6"}]}, + {diameter_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"472b763fc9554c0c92992a3b36177667"}]}, + {diameter_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8d49799607d7c7792a79dbc434b4d53e"}]}, + {diameter_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"249d7f673e7f192ddff7c66b578e886e"}]}, + {diameter_misc_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3996fa63b0e083301d35fc6d88b75ce4"}]}, + {diameter_peer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89f28d8d35bdeb8b05995daffb8d868c"}]}, + {diameter_peer_fsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"df03404577882e8cfba57087c91fe3ef"}]}, + {diameter_peer_fsm_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b25500795639e63d9a591e33df6e4af7"}]}, + {diameter_reg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e7d427dafe432249d3535bc9e6ec538"}]}, + {diameter_sctp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cb7487b2c41e3520b1a46738699a88c8"}]}, + {diameter_sctp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02584b6b31789dd38493fd1a8d7d3e3"}]}, + {diameter_service, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e990f54abf1c8706cd7717cba717594c"}]}, + {diameter_service_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a66f4714fa96fd7d289260002851cbf9"}]}, + {diameter_session, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d348e0ca8d3c827d647c3bea8f9c7691"}]}, + {diameter_stats, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f12a18f52de33ca77dacd1bba99680c8"}]}, + {diameter_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c910b68b3d0760f595a81ca58b1337f8"}]}, + {diameter_sync, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff62cfc82b044d2300345ac7912fe320"}]}, + {diameter_tcp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4dae7482d9a79d4ead66ef14d1c3a48"}]}, + {diameter_tcp_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c1b03a96691e03eb93144bc50022a007"}]}, + {diameter_traffic, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d351fdbef0536bba235fe102fe8e697"}]}, + {diameter_transport, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"386e129e240e91794ff79e1da6c6966a"}]}, + {diameter_transport_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c9f8da23c3c870b8a6ed8648d7aac2d5"}]}, + {diameter_types, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d2ecf24e368d30dbef34527e2971caf8"}]}, + {diameter_watchdog, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0ab7bd910bc959c0d1b64f0a2ae4bda"}]}, + {diameter_watchdog_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e4b16aeb2713fd42bf5e9da7cbe43bcf"}]}]}]}}, + {application, + {dialyzer, + [{description, + "DIscrepancy AnaLYZer of ERlang programs, version 2.6.1"}, + {vsn,"2.6.1"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin"}, + {modules, + [{dialyzer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"929cdc37a18725b9710b9c4345c3aca0"}]}, + {dialyzer_analysis_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b679e22bb1edb9f0225b79d995342dc5"}]}, + {dialyzer_behaviours, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5fb71e7e5129b4c2f74cb529d8a745c4"}]}, + {dialyzer_callgraph, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5b03b559fdab4c77a8c955cdfe7a2036"}]}, + {dialyzer_cl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79a2208b0cc03af530473d2d2f49587f"}]}, + {dialyzer_cl_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b4fcced00882cfef0262398a14319c2a"}]}, + {dialyzer_codeserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f5c8a1600210988f627559bc16a49a65"}]}, + {dialyzer_contracts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c002e8bcddf711ae9feef14b88f28873"}]}, + {dialyzer_coordinator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51efdc15e07eaa495060e420585bb74f"}]}, + {dialyzer_dataflow, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddb43241a51460b67c67780ca6174bef"}]}, + {dialyzer_dep, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffffdcfd7edb9901be2e92b6d3a5f082"}]}, + {dialyzer_explanation, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79c9bc71edcc115a03c1bb00a4133627"}]}, + {dialyzer_gui, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec41553832cb5f49cce3b123ec763448"}]}, + {dialyzer_gui_wx, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"00f5ef9bd8202d5bc303fca27c740b00"}]}, + {dialyzer_options, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"713bf0249b3bb22c7461498b908db812"}]}, + {dialyzer_plt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5b1ecae532cb2887c942c6bda2c7dc7"}]}, + {dialyzer_races, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec1b2f026e1dfd438fbb48dcf16a19de"}]}, + {dialyzer_succ_typings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"12a59523b727169f2f415b6e57768910"}]}, + {dialyzer_timing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b170424f433845fb9aab3e554ea61044"}]}, + {dialyzer_typesig, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b6670ae353fa06c5c8a5f301a7079ca6"}]}, + {dialyzer_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cac59b9f59802633948d271fcf8ff92d"}]}, + {dialyzer_worker, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e9ff1cc342b308c73bab8c607a8437e"}]}]}]}}, + {application, + {debugger, + [{description,"Debugger"}, + {vsn,"3.2.11"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin"}, + {modules, + [{dbg_debugged, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78bf1d9b43c718da5e198af36cabb1ce"}]}, + {dbg_icmd, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"615470a6677e03a603c24cf821ba3471"}]}, + {dbg_idb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e78e73c63bfe9149a11122857355f29"}]}, + {dbg_ieval, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e49ed51a1a1e7581334308cd3c9195e"}]}, + {dbg_iload, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f249c44fee09e35262d2cafbfa22ce49"}]}, + {dbg_iserver, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2911ffbd531888ac6e1b96a5475436"}]}, + {dbg_istk, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ae44e86b7893633859292861275bdb7f"}]}, + {dbg_ui_break, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5397708044bd37bac2a6f4e24edbd30"}]}, + {dbg_ui_break_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c974a8a9b180cfd4ccbcfd31a7bb88e5"}]}, + {dbg_ui_edit, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7faadd987bb74826e5f5865d725ca177"}]}, + {dbg_ui_edit_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0e912e444704ad322b3e25fc6393c068"}]}, + {dbg_ui_filedialog_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06a6b13cd9bcfe7d7d203a981352cfaa"}]}, + {dbg_ui_interpret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dcf7a340530f4807d774d4c719a1dbbf"}]}, + {dbg_ui_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c79f2debfab06b86990ef7e390a61b7"}]}, + {dbg_ui_mon_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c43cdde20d4e66b6f51ef903af75250"}]}, + {dbg_ui_settings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8deedced7307e14f36cca3d9fe7e367f"}]}, + {dbg_ui_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c817c2cc2f62354d4f59be8b6e6fac96"}]}, + {dbg_ui_trace_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db1abdd3b7a7b45d3c74dbd9c48f07e8"}]}, + {dbg_ui_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b10a46e072053a225a894ed76dceebca"}]}, + {dbg_ui_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e51ec8a33c335245583f7a9ba8728f66"}]}, + {dbg_ui_winman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2056472842990c08dfdb81e56df2caa8"}]}, + {dbg_wx_break, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55c7dc041c4cd1b1da98d49def9c2b15"}]}, + {dbg_wx_break_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ad9cde7d28f7de18dda8da80d97a8f00"}]}, + {dbg_wx_code, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"27abac65970e6f7c6bbaca07e9ead6a4"}]}, + {dbg_wx_filedialog_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da924842b25d80b7b258100a4e597810"}]}, + {dbg_wx_interpret, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8549ef4a5bad09472dccd1cb3ab2c764"}]}, + {dbg_wx_mon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"09140d34a402d7183cf9dfecb0b2b6e8"}]}, + {dbg_wx_mon_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1fefe3be53da62cf504daf354579d910"}]}, + {dbg_wx_settings, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"350aed0cb189f0b91979fc38752fd4c4"}]}, + {dbg_wx_src_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"644bfb2c2d8fc6e9296722fef5f05b57"}]}, + {dbg_wx_trace, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"024358a893f9b37296fc0c416074a4b1"}]}, + {dbg_wx_trace_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2348218e83d1704bcf894e71c2f3e82"}]}, + {dbg_wx_view, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d37489d27927cff9f19f76bc0c816c9"}]}, + {dbg_wx_win, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d94add4e9adade091198438a278501a8"}]}, + {dbg_wx_winman, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"caa1febd36494a9088fddbd5557c503f"}]}, + {debugger, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e242b76bc941785f65d1cf819fd98a5"}]}, + {i, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bebfb4e91c343a1ad89f1124b06e190"}]}, + {int, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1d4c0b2e30129359db05d3bc4df646c"}]}]}]}}, + {application, + {crypto, + [{description,"CRYPTO version 2"}, + {vsn,"3.0"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin"}, + {modules, + [{crypto, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"858d0e1779f13a6bfde511898916ae94"}]}, + {crypto_app, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d2de1cd4927d57e8eaa4467404c8c02"}]}, + {crypto_server, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"17e05e4b0d772036706b76ba8f68de2e"}]}, + {crypto_sup, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1342a18fe8d994974e41aa3e351d8500"}]}]}]}}, + {application, + {cosTransactions, + [{description,"The Erlang CosTransactions application"}, + {vsn,"1.2.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin"}, + {modules, + [{'CosTransactions_Control', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ee94b22194357e2374fe2c026d2a9fb"}]}, + {'CosTransactions_Coordinator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bca2be777e58bf130a3bf48252c0c0cb"}]}, + {'CosTransactions_HeuristicCommit', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d12c1a0988d03c64a606ba471794e3cc"}]}, + {'CosTransactions_HeuristicHazard', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"79d0dc47e6759987e5b45281bc4c39f2"}]}, + {'CosTransactions_HeuristicMixed', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a77cb11ccf269fa85f2194ab16ec5ebb"}]}, + {'CosTransactions_HeuristicRollback', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67a56bf7b8084c29dd10db9daa8e08f7"}]}, + {'CosTransactions_Inactive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8f94debdaa1912d18bbea77492e6fc88"}]}, + {'CosTransactions_InvalidControl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b14b9b82b831e56235c1bca1f6e02e16"}]}, + {'CosTransactions_NoTransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"24252bfbc89f79dac5c90b35e35a66ad"}]}, + {'CosTransactions_NotPrepared', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ddbcd30a479a50fa2fed4b0cb019c0bd"}]}, + {'CosTransactions_NotSubtransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3904cf57a879720704d8b725802cc530"}]}, + {'CosTransactions_PropagationContext', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d0dd57873deb42ef62f2e9e8620e111"}]}, + {'CosTransactions_RecoveryCoordinator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2a670d242e21803d3a559b812b3f3bfd"}]}, + {'CosTransactions_Resource', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"78bdc7f9989a5277bde7e066804fa1c0"}]}, + {'CosTransactions_SubtransactionAwareResource', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e1194d19b4db72b1c571aec1847fa65f"}]}, + {'CosTransactions_SubtransactionsUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d6ffc90a293248735f58984f7a9f4fa9"}]}, + {'CosTransactions_SynchronizationUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9858316a8256791e5fe66729fcd364ef"}]}, + {'CosTransactions_Terminator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbbba1c622d817538fba982cbefd4a15"}]}, + {'CosTransactions_Terminator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2db2696226a90215edb559cdae7ad928"}]}, + {'CosTransactions_TransIdentity', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d38592cd26cbbbe3a963ca77b5264ea8"}]}, + {'CosTransactions_TransactionFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"04db55c2ba8df7975e98e1c7b7582bb6"}]}, + {'CosTransactions_TransactionFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d8ff8a2434c10c4716b1b59aebbcb9e"}]}, + {'CosTransactions_Unavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a77c05d98c0c72e2f1d52a1f781a1b98"}]}, + {'CosTransactions_WrongTransaction', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c836d95954f2374d89bfc9ff2bd86793"}]}, + {'CosTransactions_otid_t', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1e903c81e783cb34153bbca99e047870"}]}, + {'ETraP_Common', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea5d3e59af9cadcb5587cc42fc750470"}]}, + {'ETraP_Server', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8592fd689bdae07056a29bd258293371"}]}, + {'ETraP_Server_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f192b40f501fd2f5fb3f92b21c5e9d3"}]}, + {cosTransactions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6d83a1fd7da7dc0b87658efe3039f484"}]}, + {etrap_logmgr, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91577f644192b682cb8739b9ce7ac7ad"}]}, + {oe_CosTransactions, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6f6c79ffe50eac0c3ced0fba1a8c08a0"}]}]}]}}, + {application, + {cosTime, + [{description,"The Erlang CosTime application"}, + {vsn,"1.1.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin"}, + {modules, + [{'CosTime_TIO', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"77717ab85418c3c1599b3238c879b770"}]}, + {'CosTime_TIO_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3ce85958b051f2f97925e980f56115e2"}]}, + {'CosTime_TimeService', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a92a3fc07bfeeae58a57075ecddb5ac6"}]}, + {'CosTime_TimeService_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0885fbeef5bd4f72920ae716f0c73d54"}]}, + {'CosTime_TimeUnavailable', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9ee0570f9b91eece7560cc1b6146f784"}]}, + {'CosTime_UTO', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"799ddc99175222b61965c6c8e66e5cb3"}]}, + {'CosTime_UTO_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"552c29f5ece131368c121b5a14c3ae06"}]}, + {'CosTimerEvent_TimerEventHandler', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76961fc9eaae9e46950b5eb52fe62ae3"}]}, + {'CosTimerEvent_TimerEventHandler_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a69e243a494b80eb34b37456f2b1f855"}]}, + {'CosTimerEvent_TimerEventService', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"62c54aabe64cb28b1245eb80f6b9190d"}]}, + {'CosTimerEvent_TimerEventService_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c6926dd7faed0366772908c8593691e"}]}, + {'CosTimerEvent_TimerEventT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74b7db88a5dd4f17c263683a80bcfe3b"}]}, + {'TimeBase_IntervalT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c8f966d02c9520f2d3a4f024892ded3"}]}, + {'TimeBase_UtcT', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"15f72a9538e725e68e375f3d638c1b6d"}]}, + {cosTime, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c96cfbcafba8c9df1a9b57b7e09c4d8"}]}, + {oe_CosTime, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e607ddba4a35690c39bfcbb1fa3e044e"}]}, + {oe_CosTimerEvent, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39f960f5b9c079eaecb87e75d9f90f2b"}]}, + {oe_TimeBase, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"764d088e21dd985285d4ccfd723959fe"}]}]}]}}, + {application, + {cosProperty, + [{description,"The Erlang CosProperty application"}, + {vsn,"1.1.16"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin"}, + {modules, + [{'CosPropertyService_ConflictingProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"67353514e217df9f5a5c5e0d3e97d9bd"}]}, + {'CosPropertyService_ConstraintNotSupported', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ce577ca5520194130903c063d8f2211a"}]}, + {'CosPropertyService_FixedProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0ef0b79fd5dbcb18f7b9c94f941678e2"}]}, + {'CosPropertyService_InvalidPropertyName', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bd173257499295fbdc728d60fd14af92"}]}, + {'CosPropertyService_MultipleExceptions', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3004385ac63dc6aa52bcb2aa46818f0"}]}, + {'CosPropertyService_Properties', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"172b757c8a881b79146f50d9f3da1ea9"}]}, + {'CosPropertyService_PropertiesIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37fa8c7f1e5ab4798845a1b101835900"}]}, + {'CosPropertyService_PropertiesIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"728fabf6239161186aa9f574ad27fbd6"}]}, + {'CosPropertyService_Property', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a912eb5a31517a6f94ee3f8e3b898ece"}]}, + {'CosPropertyService_PropertyDef', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8ea474f53418bda870c1f98c522d15b"}]}, + {'CosPropertyService_PropertyDefs', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c997a6a4db17765d72f52953679fc7d"}]}, + {'CosPropertyService_PropertyException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3600a7d77fe924d3883a003b68ab8902"}]}, + {'CosPropertyService_PropertyExceptions', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a516b05a720966d4a3568f7f087f22cf"}]}, + {'CosPropertyService_PropertyMode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b1e1e285b3a2b01a12e328ed94a65225"}]}, + {'CosPropertyService_PropertyModes', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed697876aa56c111eee5733379303ef3"}]}, + {'CosPropertyService_PropertyNames', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"39684cd186c7d8da459f9d17637606a2"}]}, + {'CosPropertyService_PropertyNamesIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97b170d84779dcb7b98460588de428e3"}]}, + {'CosPropertyService_PropertyNamesIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e06e012106df3651db1e9d52472bebd3"}]}, + {'CosPropertyService_PropertyNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86c83ceacb0b80d4ffa6042cfaec025f"}]}, + {'CosPropertyService_PropertySet', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ffbb0b6b88d4a35cd836322dcc2b4603"}]}, + {'CosPropertyService_PropertySetDef', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"429c3ed48018cc6eef3d28c2407fa42e"}]}, + {'CosPropertyService_PropertySetDefFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"86da518b687db630cd85921ebe96d07a"}]}, + {'CosPropertyService_PropertySetDefFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2f52585d44dd9d6863bd2b0e0359a24e"}]}, + {'CosPropertyService_PropertySetDef_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a02a747cf3856996416253a5cbccfbd7"}]}, + {'CosPropertyService_PropertySetFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"faef66b15f43dc81cbf7dd9bde81c8a2"}]}, + {'CosPropertyService_PropertySetFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b538bc6740ae2b6934e08d831d5b0960"}]}, + {'CosPropertyService_PropertyTypes', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec088d6b4028f6a9dc2917e6722f1c32"}]}, + {'CosPropertyService_ReadOnlyProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3f4d338a44a7ab32daf202f4d2aa7cbb"}]}, + {'CosPropertyService_UnsupportedMode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"203ca7e42a209758ceea013cbff109bd"}]}, + {'CosPropertyService_UnsupportedProperty', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"28e9e73be7eb82646e3713135d695a6d"}]}, + {'CosPropertyService_UnsupportedTypeCode', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da862aea1e36f6fb797bee192a2f3e08"}]}, + {cosProperty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5c17adcc4dc9f93a8cf92c91a12c81e"}]}, + {oe_CosProperty, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c9d35f1b883b805a44e9864136958b1"}]}]}]}}, + {application, + {cosNotification, + [{description,"The Erlang CosNotification application"}, + {vsn,"1.1.20"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin"}, + {modules, + [{'CosNotification', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5a52684ebceaceebe3d7c971fd5e45e6"}]}, + {'CosNotification_AdminPropertiesAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aa2af8e932319a2ab715d799c31678b0"}]}, + {'CosNotification_Common', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e908fdcf47fa3d9d234d4061db9760ab"}]}, + {'CosNotification_EventBatch', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8c79e194e19df338bec34cee83d5c999"}]}, + {'CosNotification_EventHeader', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9e08e276e855cfa3dd60bdc9b563b8e9"}]}, + {'CosNotification_EventType', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"be0b154ef34f6279604f04d0be386d64"}]}, + {'CosNotification_EventTypeSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3719ad475d47fd73c1a70891586f0b17"}]}, + {'CosNotification_FixedEventHeader', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e512d2bce68fcb3de1336060be225cad"}]}, + {'CosNotification_NamedPropertyRange', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e42690af83d192433daaadb6cbfc7e02"}]}, + {'CosNotification_NamedPropertyRangeSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5eac2fb6027077046d918d30b36fb45a"}]}, + {'CosNotification_Property', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d89e479fd34c1e6c46447dcb4aaa44e0"}]}, + {'CosNotification_PropertyError', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2b5a17b0ff2dd997013daf5a4d73a83"}]}, + {'CosNotification_PropertyErrorSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2437aa1bdbeeb5f45213bc7e7922351a"}]}, + {'CosNotification_PropertyRange', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b2392c8040a976dc8db3ba147f7911f2"}]}, + {'CosNotification_PropertySeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6950965079eb678d5b2e010c8266cf13"}]}, + {'CosNotification_QoSAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fafc8842d8f8e11febab4d341a2ce879"}]}, + {'CosNotification_StructuredEvent', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"22a1eae09f5d8cf0d223d06cebf9d85b"}]}, + {'CosNotification_UnsupportedAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0b1d7ff2796dd090e244cecdbfa4d2ce"}]}, + {'CosNotification_UnsupportedQoS', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d0968f6f188653b1e292c34f3b18c51a"}]}, + {'CosNotifyChannelAdmin_AdminIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"42791a7a0d5ca5fef186c441a81cf50b"}]}, + {'CosNotifyChannelAdmin_AdminLimit', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5355d6a703102439e59b070eb6e61b45"}]}, + {'CosNotifyChannelAdmin_AdminLimitExceeded', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"18b11c68d839f9aa90bfe6da07b15cd8"}]}, + {'CosNotifyChannelAdmin_AdminNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c853cd178ef80d6a46a334d3cb5371d4"}]}, + {'CosNotifyChannelAdmin_ChannelIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"992ab8f1ac2f4cc15edd6068c8dc1948"}]}, + {'CosNotifyChannelAdmin_ChannelNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"475e742fdf1dd2ec932704ccb941f3c1"}]}, + {'CosNotifyChannelAdmin_ConnectionAlreadyActive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d8b95c202b2ebc28a7208928563b5382"}]}, + {'CosNotifyChannelAdmin_ConnectionAlreadyInactive', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b106140de30c6cd638b328efe453cb3"}]}, + {'CosNotifyChannelAdmin_ConsumerAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c8c31c812099afa148ed0662dc67ea0"}]}, + {'CosNotifyChannelAdmin_ConsumerAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"172767d1c29ca64e810d8853c61a01e9"}]}, + {'CosNotifyChannelAdmin_EventChannel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e362f0dc4dc40c98e66b91632554ddb7"}]}, + {'CosNotifyChannelAdmin_EventChannelFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4798a326d18d53e9a7870454fb33ef4c"}]}, + {'CosNotifyChannelAdmin_EventChannelFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4bc146f5b9cc168505d2249e7f04a618"}]}, + {'CosNotifyChannelAdmin_EventChannel_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"db6e5631fc1e5ff158dfc77123c7e752"}]}, + {'CosNotifyChannelAdmin_NotConnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b7f5e3229c7849f94b0744a78e38012c"}]}, + {'CosNotifyChannelAdmin_ProxyConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b1aa19779800f6e97852f5a2e8042641"}]}, + {'CosNotifyChannelAdmin_ProxyIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bf0a62dd47773a5a4df90f70644c4e24"}]}, + {'CosNotifyChannelAdmin_ProxyNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"735c610478319545c1a68c1c8b75609d"}]}, + {'CosNotifyChannelAdmin_ProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6cc803a524bd58d1c33bee3fb8f92ac7"}]}, + {'CosNotifyChannelAdmin_ProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1683d6e08309fb3fc51d127c407348a"}]}, + {'CosNotifyChannelAdmin_ProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"94416e046b1c566bfa8df9bc1884bea5"}]}, + {'CosNotifyChannelAdmin_ProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"61c57643509be14cbb5e82090fb5bf6d"}]}, + {'CosNotifyChannelAdmin_ProxySupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4c1c83635cd4d1e4a50577e68f084a39"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"af562a179799a5ae781278e980912710"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"da43e615a23f2485758bec039617792c"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a876b3b2c655fa98e23510ca72be236"}]}, + {'CosNotifyChannelAdmin_SequenceProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"55954cf819fb29c74e8c7fa7dcb17eb8"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"aeb95ea3a9deb7c129dccfd77df7976c"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e72e1de7fb0ea440aae9ca791fbdd403"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d277b85ea15126c7645eccc585325ee2"}]}, + {'CosNotifyChannelAdmin_StructuredProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7339f8c2876066369e6afa27267bfd81"}]}, + {'CosNotifyChannelAdmin_SupplierAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"043d43346f3ff5c2775bf7030a13e1d9"}]}, + {'CosNotifyChannelAdmin_SupplierAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"efe73dc58fd1b27c2adc184018e4091a"}]}, + {'CosNotifyComm_InvalidEventType', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"516a9a10d779d7b47a5752d0b4278017"}]}, + {'CosNotifyComm_NotifyPublish', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c50da2c5c4d79c4cd3974c37b6165fbd"}]}, + {'CosNotifyComm_NotifySubscribe', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"180ce40d1660bec349bb7ddf1275c985"}]}, + {'CosNotifyComm_PullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dd7be30cd0685dbb3e0f22b4de8ffb91"}]}, + {'CosNotifyComm_PullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e76b3f6be347a5d08350ae25cddc77c1"}]}, + {'CosNotifyComm_PushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2c972f2affe7f936ec38997084045b1"}]}, + {'CosNotifyComm_PushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"416e6887077de70bf3aa7cf6c6b35a9c"}]}, + {'CosNotifyComm_SequencePullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1322fb2dadb5669a36391f12455c6969"}]}, + {'CosNotifyComm_SequencePullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"281779a70fdae7a1de3e569ae707d21a"}]}, + {'CosNotifyComm_SequencePushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"701eb7ecaef2fb7f13b5adf2ff8a97aa"}]}, + {'CosNotifyComm_SequencePushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ceb164baf53b3df5f90fdbef4c800d8d"}]}, + {'CosNotifyComm_StructuredPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"70d2e255c8613a9d58a4f1f69b1adf51"}]}, + {'CosNotifyComm_StructuredPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fa8164033103e1c40f7721471fa6b8fd"}]}, + {'CosNotifyComm_StructuredPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"684f225a8d760e970a4380c303f82662"}]}, + {'CosNotifyComm_StructuredPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"de1b05e00095ac428839c165db9f92fc"}]}, + {'CosNotifyFilter_CallbackIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ab4cfad0073e21b629ebd16f8973912"}]}, + {'CosNotifyFilter_CallbackNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ae7cd265c665a4cd4a969c75388b1fc"}]}, + {'CosNotifyFilter_ConstraintExp', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"421355667259ba4906ed0b0ba89ae1ba"}]}, + {'CosNotifyFilter_ConstraintExpSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ef901d08223839966e5d67b55731e63"}]}, + {'CosNotifyFilter_ConstraintIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"50d0d1e84309217b5a2864eb2df3653b"}]}, + {'CosNotifyFilter_ConstraintInfo', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e988281d1a6d6d2ba412a86cb1b89e0b"}]}, + {'CosNotifyFilter_ConstraintInfoSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff21820130cfa051a6781e79f53171af"}]}, + {'CosNotifyFilter_ConstraintNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1611f041bd2826435c850dc36b2a6953"}]}, + {'CosNotifyFilter_DuplicateConstraintID', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40c6d62f59e44a14649e3de2e78deafd"}]}, + {'CosNotifyFilter_Filter', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"864d9d277d782fca9a15809c5c195c1c"}]}, + {'CosNotifyFilter_FilterAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ee1e90ea0fbde4a0c53036e0efa4b89a"}]}, + {'CosNotifyFilter_FilterFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b59a3c5c5e24a9a389792ea9ff254312"}]}, + {'CosNotifyFilter_FilterFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"40bc158ddcbb31abff87fe4da270b55a"}]}, + {'CosNotifyFilter_FilterIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3dd80855340f372c0682a53a6d3bc216"}]}, + {'CosNotifyFilter_FilterNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbdd34c6e28fb4c907410c2f7bc82f92"}]}, + {'CosNotifyFilter_Filter_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6911bf97e4ebe2333e7e19914d821ea"}]}, + {'CosNotifyFilter_InvalidConstraint', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"beaedbe7bcec40b0d90a0404dde063a9"}]}, + {'CosNotifyFilter_InvalidGrammar', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0055f6477430cf9c38cce84d93393a12"}]}, + {'CosNotifyFilter_InvalidValue', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"041b66a4b7933005a983848254dec48c"}]}, + {'CosNotifyFilter_MappingConstraintInfo', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ab3093c4688953509866f4128d0747d2"}]}, + {'CosNotifyFilter_MappingConstraintInfoSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9f81b4c571998ef9f1cefa77c45be6e5"}]}, + {'CosNotifyFilter_MappingConstraintPair', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"305991c110aca04df1398bd3b640e284"}]}, + {'CosNotifyFilter_MappingConstraintPairSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7bd7692f2d9ad411d3d4323ff4ef9a2d"}]}, + {'CosNotifyFilter_MappingFilter', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fbd3cd1cce0f195048025a19666e4bb8"}]}, + {'CosNotifyFilter_MappingFilter_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c337925555dac8714bcde4ff0ac3682"}]}, + {'CosNotifyFilter_UnsupportedFilterableData', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64044f951a82b03309ab90082ed6d354"}]}, + {'PullerConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a96588beb8db62195c499ba6a61cc53f"}]}, + {'PullerSupplier_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"90058bd6464dc08f79814185696ce1fb"}]}, + {'PusherConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72a8f62fb563174cf54b97aa1206b293"}]}, + {'PusherSupplier_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1d03a842669765bf9907b644957fa7cb"}]}, + {cosNotificationApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0a6dabb21a8926c7f733904336b3375b"}]}, + {cosNotification_Filter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63cb134b80f03d8399abe10908055e40"}]}, + {cosNotification_Grammar, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c5636b97c6e449aeafada1b5df5b6e91"}]}, + {cosNotification_Scanner, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9c6334416492eb7be457c13d39b92222"}]}, + {cosNotification_eventDB, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d52b15cf6eaba713bb979684b54fb8df"}]}, + {oe_CosNotification, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"961cde96216694db976f1f714b0f4d6c"}]}, + {oe_CosNotificationComm_Event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"affa53e3f3dfcb411ff317d98a5ce64a"}]}, + {oe_CosNotifyChannelAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4ed58499950adf48241f1701c2116857"}]}, + {oe_CosNotifyComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a944c5aa4379e8f3b07acc9c5fd56f9a"}]}, + {oe_CosNotifyFilter, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c51f3aaa451621c060bdb0d707324fbd"}]}, + {oe_cosNotificationAppComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed879b4fb4e5e3438e523069a29ce1aa"}]}]}]}}, + {application, + {cosFileTransfer, + [{description,"The Erlang CosFileTransfer application"}, + {vsn,"1.1.15"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin"}, + {modules, + [{'CosFileTransfer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"537730bb6ac118a9f672ea5c5616502c"}]}, + {'CosFileTransfer_AccessLevel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"538517d444956f350c54176200fa9c2d"}]}, + {'CosFileTransfer_CommandNotImplementedException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"06bb7e58f28ad101e4cb2cd2336d3698"}]}, + {'CosFileTransfer_Directory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3504d2207476a6439367e5e20b442bc"}]}, + {'CosFileTransfer_Directory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ca00e96f4f13619cbcaf663edf819405"}]}, + {'CosFileTransfer_File', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"082fb7de49fb7a94ad34873e876fbdd8"}]}, + {'CosFileTransfer_FileIterator', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7fce306a50dbb7edaea5f9eeec1d5ce"}]}, + {'CosFileTransfer_FileIterator_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bb5946f486a03df082e02ec55308e270"}]}, + {'CosFileTransfer_FileList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f508ab863f8cf90e46fda1e2bc6a01b"}]}, + {'CosFileTransfer_FileNameList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2044a2695019499e1294315eea9f3092"}]}, + {'CosFileTransfer_FileNotFoundException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b00961e88651b5ab62c9d20b2d60c6e0"}]}, + {'CosFileTransfer_FileTransferSession', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"102d05bd8c1fda9dfa1ba3769ef283fd"}]}, + {'CosFileTransfer_FileTransferSession_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a6774a931a16efaa7bcbf342ef660b49"}]}, + {'CosFileTransfer_FileWrapper', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d19e7d1eeb8b381847003f8837be28d"}]}, + {'CosFileTransfer_File_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64eda7b0b054da3e646bba7fbe6be70d"}]}, + {'CosFileTransfer_IllegalOperationException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"25a05f47c3c2fc5d14d135acb6d72a5f"}]}, + {'CosFileTransfer_ProtocolAddressList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4587002261d4308181fc93122a15cea9"}]}, + {'CosFileTransfer_ProtocolSupport', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c7937786969ccbba0967581d3c25ad54"}]}, + {'CosFileTransfer_RequestFailureException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"384095c7be94a7544378f029e966cf2e"}]}, + {'CosFileTransfer_SessionException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7ef101cef5808b9d7c08037e15ee66fa"}]}, + {'CosFileTransfer_SupportedProtocolAddresses', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d145c64e85be77403b797ad505564018"}]}, + {'CosFileTransfer_TransferException', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a4b8f0ca1710b11ed6d723ee1692c46c"}]}, + {'CosFileTransfer_VirtualFileSystem', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"37e0d0057b23e3e1563b19539bc0a76d"}]}, + {'CosFileTransfer_VirtualFileSystem_ContentList', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"165e5f4d21952fc5eb1f0a289c571fbc"}]}, + {'CosFileTransfer_VirtualFileSystem_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"81b6bf0f44b0eab55cebc3d408671e0a"}]}, + {cosFileTransferApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed8d595027fd9c5f7dd1e9398a4351bf"}]}, + {cosFileTransferNATIVE_file, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"91cd6a5ac4ba42b3d2ef0c0cf4c48270"}]}, + {oe_CosFileTransfer, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"683aa469ec95c19f32d0f62f5f7ef6e7"}]}]}]}}, + {application, + {cosEventDomain, + [{description,"The Erlang CosEventDomain application"}, + {vsn,"1.1.13"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin"}, + {modules, + [{'CosEventDomainAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2e2d9e538ddd0f2a2fa74f499e042db1"}]}, + {'CosEventDomainAdmin_AlreadyExists', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1ce2f0d94e633823bedf296aa1527e5"}]}, + {'CosEventDomainAdmin_Connection', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a3d8e1bead63a2d7644f36edd4a66772"}]}, + {'CosEventDomainAdmin_ConnectionIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"56929f00f5dcec6d75408d85921c693f"}]}, + {'CosEventDomainAdmin_ConnectionNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4de106e024e8f9f45783dd7b45af2cc1"}]}, + {'CosEventDomainAdmin_CycleCreationForbidden', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a28090bafe2078be88ee5cb996f9d23"}]}, + {'CosEventDomainAdmin_CycleSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3232a8bb21e31c81f7791fdf0359d945"}]}, + {'CosEventDomainAdmin_DiamondCreationForbidden', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8b9e307237ee3408e348d4593c0de997"}]}, + {'CosEventDomainAdmin_DiamondSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"65478f4d3f155d7547b52ea7d04f6628"}]}, + {'CosEventDomainAdmin_DomainIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f44a097ccf00511ed397775b33991a8"}]}, + {'CosEventDomainAdmin_DomainNotFound', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e17639bb3b5f18e80cd8f505191dbc7c"}]}, + {'CosEventDomainAdmin_EventDomain', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b21b34fcceae9698702dadc469ef2cd1"}]}, + {'CosEventDomainAdmin_EventDomainFactory', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcf4395bcda2d977235b24ec4416ddec"}]}, + {'CosEventDomainAdmin_EventDomainFactory_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a7d21747fe63505e98037202798cca90"}]}, + {'CosEventDomainAdmin_EventDomain_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2801240b7c96984648d565b9b210b8fb"}]}, + {'CosEventDomainAdmin_MemberIDSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"889c0e92b864877d5c2bbbd2ed185575"}]}, + {'CosEventDomainAdmin_RouteSeq', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f77038e040e610031d35f876dfa2925e"}]}, + {cosEventDomainApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea692728e2b3d71f1f486a7aece4df48"}]}, + {oe_CosEventDomainAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"939160a9e6adced7edf36e0a18927785"}]}]}]}}, + {application, + {cosEvent, + [{description,"The Erlang CosEvent application"}, + {vsn,"2.1.14"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin"}, + {modules, + [{'CosEventChannelAdmin_AlreadyConnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"64cb912070ade0d3254585904ba4c509"}]}, + {'CosEventChannelAdmin_ConsumerAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e027fd366965c17a0b51c3cfd80dcd4f"}]}, + {'CosEventChannelAdmin_EventChannel', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f8d2e64b53114282c8c353dd5110ea9e"}]}, + {'CosEventChannelAdmin_ProxyPullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9aef474c8cb0c5e9e2cb5d4cc43fe52d"}]}, + {'CosEventChannelAdmin_ProxyPullConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9057fc161db130ea1ee3bd656b083ad0"}]}, + {'CosEventChannelAdmin_ProxyPullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"11cc90a016f1b493838f6f79caa959fa"}]}, + {'CosEventChannelAdmin_ProxyPushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21b14ec7e74c8632349f31cb70324ca6"}]}, + {'CosEventChannelAdmin_ProxyPushConsumer_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dabc851d850f372affa761150136640d"}]}, + {'CosEventChannelAdmin_ProxyPushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d32c6d87385b474519aa936d9bd79256"}]}, + {'CosEventChannelAdmin_SupplierAdmin', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b26b61665649ea2af6fc2b7174d7c4f7"}]}, + {'CosEventChannelAdmin_SupplierAdmin_impl', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8606a32b7269881c1f455edce89344db"}]}, + {'CosEventChannelAdmin_TypeError', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"20bb7e990eb8d6b0e854919c0dff94cc"}]}, + {'CosEventComm_Disconnected', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"c2ec0e6b1fa849a2ab22fdd1ce14ecb7"}]}, + {'CosEventComm_PullConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"43972738bc29806b38419aaf76d8c393"}]}, + {'CosEventComm_PullSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5206247fdf5b00621d3732805fe1854a"}]}, + {'CosEventComm_PushConsumer', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"72937626c2c3f3689fb6dafed66bad17"}]}, + {'CosEventComm_PushSupplier', + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"54875107d8748bac2b96a3037669a477"}]}, + {cosEventApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dab9a7b6c3106899fe7d2c9e74fcb021"}]}, + {oe_CosEventChannelAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b192666923744044b3a0e652ec9e9948"}]}, + {oe_CosEventComm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"884bef0af9742bfe5f3f7e345d24cd18"}]}, + {oe_CosEventComm_CAdmin, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f344012f72ef7bfbdef3d29d525e2896"}]}, + {oe_CosEventComm_CAdmin_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"935565447529d9e97da7b98c3631cc92"}]}, + {oe_CosEventComm_Channel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fe816f373688feb5c63c10543eedd3c2"}]}, + {oe_CosEventComm_Channel_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5c3c48bf48ac0b63f62d82064f9ce32f"}]}, + {oe_CosEventComm_Event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7f5146f9630ff6e60665cf32fc7e6641"}]}, + {oe_CosEventComm_PullerS, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dbd58f368f06b16fa0a7628594f84c44"}]}, + {oe_CosEventComm_PullerS_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2bd0c1df9074f1a792985b4ff1b0ec98"}]}, + {oe_CosEventComm_PusherS, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"36dc7eaaa1b298b7875dd41b3e6b5b85"}]}, + {oe_CosEventComm_PusherS_impl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63c64664227a2772b5ad3d0c6519f8c4"}]}, + {oe_cosEventApp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc2ca7e6febb762f39f337c5303390e6"}]}]}]}}, + {application, + {compiler, + [{description,"ERTS CXC 138 10"}, + {vsn,"4.9.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin"}, + {modules, + [{beam_a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a338f3a7878d0c9a407950fcb5a2e7ed"}]}, + {beam_asm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cef85f8577595b73910fa77803c58cdb"}]}, + {beam_block, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7e7610e6f816e2c8d869e7ce1c44cba8"}]}, + {beam_bool, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3fcb1cec9f4370800203e1189c01a10c"}]}, + {beam_bsm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"973abf79efd649a3f0eb1b3351b4fe92"}]}, + {beam_clean, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a0c6b67b764da86372deb11b4c5154f4"}]}, + {beam_dead, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ff4f53d218b932103fcf093dbd366584"}]}, + {beam_dict, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f1e8c36a21a5287a84844e7ffa0a9bbb"}]}, + {beam_disasm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63dd1f997343124a900e2fe982fe4cad"}]}, + {beam_except, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"89dd12d9c4781f83554a9d2101d623d8"}]}, + {beam_flatten, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a1e49fa674cc580042459878a27403e9"}]}, + {beam_jump, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1a9f1ce9787205a57d137424b5ab022b"}]}, + {beam_listing, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e9a84340142cd7c90e95851ab1260a0f"}]}, + {beam_opcodes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d5d21bc2584bf078639eba76a18d221"}]}, + {beam_peep, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d81c38cab19af16ff472ce5838c63b1"}]}, + {beam_receive, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"7d22ec74972c53f3f93bd01dbe369370"}]}, + {beam_split, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"03b0416d0fee9081f68cf6468d036170"}]}, + {beam_trim, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a6a01870ff8f8bda3ea36184da7348a"}]}, + {beam_type, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"cc4a9521730959ffc10d3ccebd20861d"}]}, + {beam_utils, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d7d2b1d7cc0722d47c7fd72fa6487d27"}]}, + {beam_validator, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ed5a82e40ba511c22291f87c1e2b705b"}]}, + {beam_z, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ffafc7070cf14ec69d569b0f8106f9a"}]}, + {cerl, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"38c2ac91b52a3141d74df2f219b45eb5"}]}, + {cerl_clauses, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"75da88dc5ced060fe52f177dae449ac0"}]}, + {cerl_inline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"976487fce255a37192ac2a9258cdacf9"}]}, + {cerl_trees, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a240a6560f194a05956f572e436a6861"}]}, + {compile, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"98a40d5fc6bcd14ac5e516a506b6161f"}]}, + {core_lib, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bdda978e16a885a17587e575cb2b369"}]}, + {core_lint, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"633c18d069ada94f1f1dfec526de2a2a"}]}, + {core_parse, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21b745083d46bbe9725eb423f0c73c7a"}]}, + {core_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9940bb6f480fe3438bf97863ad0a5755"}]}, + {core_scan, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1f3ff89deb03f34714390b93e678989c"}]}, + {erl_bifs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"74c0a1563ea88b196dc2a18b1a34ffed"}]}, + {rec_env, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9a6fdcf8ffe126bb2838f86949ced210"}]}, + {sys_core_dsetel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2c45d53e09f1b3f4e92b8f2ff8adf258"}]}, + {sys_core_fold, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ac092bdc7362a76cda76e27ad5610ec7"}]}, + {sys_core_inline, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f439077cdab9795b782412d556828fa"}]}, + {sys_pre_attributes, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fc95feafdeca105f38589c4ca7b43532"}]}, + {sys_pre_expand, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4b1c1e3bf39af00ca2988295aa2fbdbb"}]}, + {v3_codegen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"590be66e39ccc3e6260a412ccbc8becd"}]}, + {v3_core, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5997d0774f74e0bad9b8887d24a8bfa3"}]}, + {v3_kernel, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"21a4b3edd53de6b910df1b99219824fc"}]}, + {v3_kernel_pp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1ec5b0e503bcf660d6da8aca9cba9682"}]}, + {v3_life, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"eb4ae7606e9409846d17c5c60751b08f"}]}]}]}}, + {application, + {common_test, + [{description,"The OTP Common Test application"}, + {vsn,"1.7.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin"}, + {modules, + [{ct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"1f3d139ac677184b601722b92977b971"}]}, + {ct_config, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0257a2b9a5ed7e176df35b2c39a03a5a"}]}, + {ct_config_plain, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8330eca3a0e4401b3a8f9508343df5cc"}]}, + {ct_config_xml, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3502006ebdcc975febe9d750b28fd2b0"}]}, + {ct_conn_log_h, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5f2e020e7c92f8a7c2c148faf855c9b0"}]}, + {ct_cover, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"76b9cecb99d35c0bf38daa0a7107ddeb"}]}, + {ct_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2dfbb0a114e64e69b012a83a29312fe8"}]}, + {ct_framework, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d65dc75bd25fe8c45b3e574d18b0be87"}]}, + {ct_ftp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f60d1979bd240e45fb63deb00c6dae6e"}]}, + {ct_gen_conn, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"abb8aa2681d03230890eb5f3fcaffc6b"}]}, + {ct_groups, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0f3c50d44938374c7e364cef4c905079"}]}, + {ct_hooks, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5fbdbe96e81a1abe94ff6ce0c20c9574"}]}, + {ct_hooks_lock, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6e94b9611b2abb9a665606264fb96c2c"}]}, + {ct_logs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ec22f1709750c55acff646a44502c2db"}]}, + {ct_make, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a2f7f755c88a136bbe56c5415901e217"}]}, + {ct_master, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3d8a8fd7184fd07d8caec68f3653b7f8"}]}, + {ct_master_event, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c497dbbef03d74f085ee633998aecba"}]}, + {ct_master_logs, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a2180f96ad17256256d5ef731ac4d04"}]}, + {ct_master_status, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5d63adbf76f9afa47c576284d77d75a9"}]}, + {ct_netconfc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9bff4907efdc764c267f373d12956eca"}]}, + {ct_repeat, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"b18f0f016143922207ef2dd5577d60dc"}]}, + {ct_rpc, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"51957dfa13552f236dad5ad5ab1f83a0"}]}, + {ct_run, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"bcaaaf893ba391b4ce961c33d48b3b5f"}]}, + {ct_slave, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6b03499c65f734a1ad97e2fce458be92"}]}, + {ct_snmp, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"8a6826b2fdf26d9e775f8352ab15b454"}]}, + {ct_ssh, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"657b8f076669c2db4245acd4bc8254d7"}]}, + {ct_telnet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"47a92efe0ab4b30fe83d83d8d429a8fe"}]}, + {ct_telnet_client, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"53f220488e09886c1933a060c000dddf"}]}, + {ct_testspec, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"fb607ba1ef1abdab4ba76e654cbd1ce1"}]}, + {ct_util, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6178d700637198b47134c927348b72b"}]}, + {cth_conn_log, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"113d8b745a6d162d678b03dba49ea048"}]}, + {cth_log_redirect, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e7da913515a3b5841c7da153ce0883cb"}]}, + {cth_surefire, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"3c7c9d2147289740b913895898126f1a"}]}, + {unix_telnet, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d38cf476a56523e6222de857b16e89d0"}]}, + {vts, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a31c45897c8d9fe60fbc9115599edcf7"}]}]}]}}, + {application, + {asn1, + [{description,"The Erlang ASN1 compiler version 2.0.2"}, + {vsn,"2.0.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin"}, + {modules, + [{asn1_db, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d9af64def8344330927cefe9a2bf9a8a"}]}, + {asn1ct, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"352b6c8edb6cf7dfc39b3b6b6b0a7b35"}]}, + {asn1ct_check, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"5ef3333d2a492df6b90deff919f28b58"}]}, + {asn1ct_constructed_ber_bin_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"41e917757a2c1195b8f86749a5905d64"}]}, + {asn1ct_constructed_per, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"63d5e7bf85a641a2529c81c7888bfb52"}]}, + {asn1ct_eval_ext, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4f5e38c39875f699ad76e07de7b073b7"}]}, + {asn1ct_func, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"ea7118ee0d45ac6641313e378a1733db"}]}, + {asn1ct_gen, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e5b2688ada58f6ed45c2e7e841088e3e"}]}, + {asn1ct_gen_ber_bin_v2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"26db838a5c213d6ec1fe2fdf997a06d1"}]}, + {asn1ct_gen_per, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"a67d91fec991b9f08680c35e95f907f0"}]}, + {asn1ct_imm, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"9288c73c656cf6d60fd74bd7946581b2"}]}, + {asn1ct_name, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"2ea14b79e5eb0ae2c3f08f92241f9c4f"}]}, + {asn1ct_parser2, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"6a7951b400104d9f72bcfbb7405e4404"}]}, + {asn1ct_pretty_format, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"dc1240d0e121f12732f8469cbd23051a"}]}, + {asn1ct_rtt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"f24866e9e2295b4f6c5553ae44d53270"}]}, + {asn1ct_table, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"4d4ec9835f20bc046769547da299363c"}]}, + {asn1ct_tok, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"19908cc77297850954d101491e5eb97d"}]}, + {asn1ct_value, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"388ba3507e46869822607142eef38d70"}]}, + {asn1rt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0160799421ccb619fc6b08099bfaf37b"}]}, + {asn1rt_nif, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"0c579098c3d97270d004e54a94e42daa"}]}]}]}}, + {application, + {appmon, + [{description,"DEVTOOLS CXC 138 16"}, + {vsn,"2.1.14.2"}, + {path, + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"}, + {modules, + [{appmon, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"97b8d88aecbd66963563a5aa5df0d0bc"}]}, + {appmon_a, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"adb9049e71eb9e2131b6952974302b4c"}]}, + {appmon_dg, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"438c40af3e96404e73904864597dcca0"}]}, + {appmon_lb, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"d851ee67b54dbf0da46cb21a8c1f7bd9"}]}, + {appmon_place, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"192140bb8bc7e74fd7121d8da2019c56"}]}, + {appmon_txt, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"34c7f9da76880b4f7fcfeb0856fcc097"}]}, + {appmon_web, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"449317a9770ff1aa4cf001604bd2261c"}]}, + {process_info, + [{loaded,false}, + {native,false}, + {compiler,"4.9.1"}, + {md5,"e6d86fad6d0d208318c48af00853ec5b"}]}]}]}}]}, + {system_info, + [{allocator, + {glibc, + [2,4], + [sys_alloc,temp_alloc,sl_alloc,std_alloc,ll_alloc, + eheap_alloc,ets_alloc,fix_alloc,binary_alloc,driver_alloc, + mseg_alloc], + [{sys_alloc,[{e,true},{m,libc},{tt,131072},{tp,0}]}, + {temp_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,90}, + {rsbcmt,80}, + {rmbcmt,100}, + {mmbcs,131072}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,10485760}, + {smbcs,1048576}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {sl_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,80}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {std_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {ll_alloc, + [{e,true}, + {t,false}, + {ramv,false}, + {sbct,18446744073709551615}, + {asbcst,0}, + {rsbcst,0}, + {rsbcmt,0}, + {rmbcmt,0}, + {mmbcs,2097112}, + {mmmbc,18446744073709551615}, + {mmsbc,0}, + {lmbcs,10485760}, + {smbcs,1048576}, + {mbcgs,10}, + {acul,0}, + {as,aobf}]}, + {eheap_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,50}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,131072}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {mbsd,3}, + {as,gf}]}, + {ets_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {fix_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,aobf}]}, + {binary_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {driver_alloc, + [{e,true}, + {t,true}, + {ramv,false}, + {sbct,524288}, + {asbcst,4145152}, + {rsbcst,20}, + {rsbcmt,80}, + {rmbcmt,50}, + {mmbcs,32768}, + {mmmbc,18446744073709551615}, + {mmsbc,256}, + {lmbcs,5242880}, + {smbcs,262144}, + {mbcgs,10}, + {acul,0}, + {as,bf}]}, + {mseg_alloc,[{amcbf,4194304},{rmcbf,20},{mcs,10}]}, + {alloc_util,[{mmc,1024},{ycs,1048576}]}, + {instr,[{m,false},{s,false},{t,false}]}]}}, + {check_io, + [{name,erts_poll}, + {primary,poll}, + {fallback,false}, + {kernel_poll,false}, + {memory_size,49808}, + {total_poll_set_size,2}, + {lazy_updates,true}, + {pending_updates,0}, + {batch_updates,false}, + {concurrent_updates,false}, + {max_fds,1024}]}, + {otp_release,"R16B02"}, + {port_limit,65536}, + {process_limit,262144}, + {smp_support,true}, + {system_version, + "Erlang R16B02 (erts-5.10.3) [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]\n"}, + {system_architecture,"x86_64-unknown-linux-gnu"}, + {threads,true}, + {thread_pool_size,10}, + {{wordsize,internal},8}, + {{wordsize,external},8}, + {{cpu_topology,defined},undefined}, + {{cpu_topology,detected}, + [{node, + [{processor,[{core,{logical,0}},{core,{logical,1}}]}]}, + {node, + [{processor,[{core,{logical,2}},{core,{logical,3}}]}]}]}, + {scheduler_bind_type,unbound}, + {scheduler_bindings,{unbound,unbound,unbound,unbound}}, + {compat_rel,16}, + {schedulers_state,{4,4,4}}, + {build_type,opt}, + {logical_processors,4}, + {logical_processors_online,4}, + {logical_processors_available,4}, + {driver_version,"2.1"}, + {taints,[]}]}, + {erts_compile_info, + [{ldflags,[]}, + {cflags, + "-g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -DERTS_SMP -DHAVE_CONFIG_H -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS "}, + {config_h, + "/* x86_64-unknown-linux-gnu/config.h. Generated by configure. */\n/* config.h.in. Generated from configure.in by autoheader. */\n\n\n#define GHBN_R_SOLARIS 2\n#define GHBN_R_AIX 3\n#define GHBN_R_GLIBC 4\n\n\n/* Define the brk() argument type. */\n#define BRK_ARG_TYPE void *\n\n/* Define the brk() return type. */\n#define BRK_RET_TYPE int\n\n/* Define if you do not have a high-res. timer & want to use times() instead\n */\n/* #undef CORRECT_USING_TIMES */\n\n/* Modern style mcontext_t in MacOSX */\n/* #undef DARWIN_MODERN_MCONTEXT */\n\n/* Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H */\n\n/* Define if you need to include winsock2.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_WINSOCK2_H */\n\n/* Define if you want to disable child waiter thread */\n/* #undef DISABLE_CHILD_WAITER_THREAD */\n\n/* Define if you want to disable vfork. */\n/* #undef DISABLE_VFORK */\n\n/* Define to 1 if your processor stores the words in a double in middle-endian\n format (like some ARMs). */\n/* #undef DOUBLE_MIDDLE_ENDIAN */\n\n/* Define if you want to enable child waiter thread */\n/* #undef ENABLE_CHILD_WAITER_THREAD */\n\n/* Define if sbrk()/brk() wrappers can track malloc()s core memory use */\n/* #undef ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC */\n\n/* The only reason ERTS_EMU_CMDLINE_FLAGS exists is to force modification of\n config.h when the emulator command line flags are modified by configure */\n#define ERTS_EMU_CMDLINE_FLAGS \" -g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -g -D_GNU_SOURCE -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement\"\n\n/* Define if you have kernel poll and want to use it */\n#define ERTS_ENABLE_KERNEL_POLL 1\n\n/* Define if the smp emulator is built */\n#define ERTS_HAVE_SMP_EMU 1\n\n/* Define if dlopen() needs to be called before first call to dlerror() */\n/* #undef ERTS_NEED_DLOPEN_BEFORE_DLERROR */\n\n/* Define if poll() should be used instead of select() */\n#define ERTS_USE_POLL 1\n\n/* Define if __after_morecore_hook can track malloc()s core memory use. */\n#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1\n\n/* Define if bigendian */\n/* #undef ETHR_BIGENDIAN */\n\n/* Define if you get a register shortage with cmpxchg8b and position\n independent code */\n/* #undef ETHR_CMPXCHG8B_REGISTER_SHORTAGE */\n\n/* Define if you want to disable native ethread implementations */\n/* #undef ETHR_DISABLE_NATIVE_IMPLS */\n\n/* Define if you want to force usage of pthread rwlocks */\n/* #undef ETHR_FORCE_PTHREAD_RWLOCK */\n\n/* Define if you use a gcc that supports the double word cmpxchg instruction\n */\n#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1\n\n/* Define if you use a gcc that supports -msse2 and understand sse2 specific\n asm statements */\n/* #undef ETHR_GCC_HAVE_SSE2_ASM_SUPPORT */\n\n/* Define if you have all ethread defines */\n#define ETHR_HAVE_ETHREAD_DEFINES 1\n\n/* Define if you have libatomic_ops atomic operations */\n/* #undef ETHR_HAVE_LIBATOMIC_OPS */\n\n/* Define if you have a linux futex implementation. */\n#define ETHR_HAVE_LINUX_FUTEX 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef ETHR_HAVE_MIT_PTHREAD_H */\n\n/* Define if you have the pthread_attr_setguardsize function. */\n#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1\n\n/* Define if you have the <pthread.h> header file. */\n#define ETHR_HAVE_PTHREAD_H 1\n\n/* Define if you have the pthread_rwlockattr_setkind_np() function. */\n#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1\n\n/* Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock\n attribute. */\n#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1\n\n/* Define if you have the pthread_spin_lock function. */\n#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1\n\n/* Define if you have the pthread_yield() function. */\n#define ETHR_HAVE_PTHREAD_YIELD 1\n\n/* Define if you have the <sched.h> header file. */\n#define ETHR_HAVE_SCHED_H 1\n\n/* Define if you have the sched_yield() function. */\n#define ETHR_HAVE_SCHED_YIELD 1\n\n/* Define if you have the <sys/time.h> header file. */\n#define ETHR_HAVE_SYS_TIME_H 1\n\n/* Define if you have _InterlockedAnd() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND */\n\n/* Define if you have _InterlockedAnd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND64 */\n\n/* Define if you have _InterlockedCompareExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE */\n\n/* Define if you have _InterlockedCompareExchange128() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 */\n\n/* Define if you have _InterlockedCompareExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 */\n\n/* Define if you have _InterlockedCompareExchange64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ */\n\n/* Define if you have _InterlockedCompareExchange64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL */\n\n/* Define if you have _InterlockedCompareExchange_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ */\n\n/* Define if you have _InterlockedCompareExchange_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL */\n\n/* Define if you have _InterlockedDecrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT */\n\n/* Define if you have _InterlockedDecrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64 */\n\n/* Define if you have _InterlockedDecrement64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL */\n\n/* Define if you have _InterlockedDecrement_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT_REL */\n\n/* Define if you have _InterlockedExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE */\n\n/* Define if you have _InterlockedExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE64 */\n\n/* Define if you have _InterlockedExchangeAdd() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD */\n\n/* Define if you have _InterlockedExchangeAdd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 */\n\n/* Define if you have _InterlockedExchangeAdd64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ */\n\n/* Define if you have _InterlockedExchangeAdd_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ */\n\n/* Define if you have _InterlockedIncrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT */\n\n/* Define if you have _InterlockedIncrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64 */\n\n/* Define if you have _InterlockedIncrement64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ */\n\n/* Define if you have _InterlockedIncrement_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ */\n\n/* Define if you have _InterlockedOr() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR */\n\n/* Define if you have _InterlockedOr64() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR64 */\n\n/* Define if you have __sync_add_and_fetch() for 32-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH32 1\n\n/* Define if you have __sync_add_and_fetch() for 64-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH64 1\n\n/* Define if you have __sync_fetch_and_and() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND32 1\n\n/* Define if you have __sync_fetch_and_and() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND64 1\n\n/* Define if you have __sync_fetch_and_or() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR32 1\n\n/* Define if you have __sync_fetch_and_or() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR64 1\n\n/* Define if you have __sync_val_compare_and_swap() for 128-bit integers */\n/* #undef ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128 */\n\n/* Define if you have __sync_val_compare_and_swap() for 32-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32 1\n\n/* Define if you have __sync_val_compare_and_swap() for 64-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64 1\n\n/* Define if you want to modify the default stack size */\n/* #undef ETHR_MODIFIED_DEFAULT_STACK_SIZE */\n\n/* Define if you need the <nptl/pthread.h> header file. */\n/* #undef ETHR_NEED_NPTL_PTHREAD_H */\n\n/* Define if you prefer gcc native ethread implementations */\n/* #undef ETHR_PREFER_GCC_NATIVE_IMPLS */\n\n/* Define if you prefer libatomic_ops native ethread implementations */\n/* #undef ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS */\n\n/* Define if you have pthreads */\n#define ETHR_PTHREADS 1\n\n/* Define if pthread_yield() returns an int. */\n#define ETHR_PTHREAD_YIELD_RET_INT 1\n\n/* Define if sched_yield() returns an int. */\n#define ETHR_SCHED_YIELD_RET_INT 1\n\n/* Define to the size of AO_t if libatomic_ops is used */\n/* #undef ETHR_SIZEOF_AO_T */\n\n/* Define to the size of int */\n#define ETHR_SIZEOF_INT 4\n\n/* Define to the size of long */\n#define ETHR_SIZEOF_LONG 8\n\n/* Define to the size of long long */\n#define ETHR_SIZEOF_LONG_LONG 8\n\n/* Define to the size of pointers */\n#define ETHR_SIZEOF_PTR 8\n\n/* Define to the size of __int128_t */\n#define ETHR_SIZEOF___INT128_T 16\n\n/* Define to the size of __int64 */\n#define ETHR_SIZEOF___INT64 0\n\n/* Define if only run in Sparc PSO, or TSO mode */\n/* #undef ETHR_SPARC_PSO */\n\n/* Define if run in Sparc RMO, PSO, or TSO mode */\n/* #undef ETHR_SPARC_RMO */\n\n/* Define if only run in Sparc TSO mode */\n/* #undef ETHR_SPARC_TSO */\n\n/* Define if you can safely include both <sys/time.h> and <time.h>. */\n#define ETHR_TIME_WITH_SYS_TIME 1\n\n/* Define if you have win32 threads */\n/* #undef ETHR_WIN32_THREADS */\n\n/* Define if x86/x86_64 out of order instructions should be synchronized */\n/* #undef ETHR_X86_OUT_OF_ORDER */\n\n/* Define if you want to use clock_gettime to simulate gethrtime */\n#define GETHRTIME_WITH_CLOCK_GETTIME 1\n\n/* Define if building a halfword-heap 64bit emulator */\n/* #undef HALFWORD_HEAP_EMULATOR */\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `brk' function. */\n#define HAVE_BRK 1\n\n/* define if clock_gettime() works for getting process time */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define if you have a decl of fread that conflicts with int fread */\n#define HAVE_CONFLICTING_FREAD_DECLARATION 1\n\n/* Define if you have a putenv() that stores a copy of the key-value pair */\n/* #undef HAVE_COPYING_PUTENV */\n\n/* Define if you have cpuset_getaffinity/cpuset_setaffinity */\n/* #undef HAVE_CPUSET_xETAFFINITY */\n\n/* Define to 1 if you have the declaration of `getrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_GETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_ANY_INIT', and to 0 if\n you don't. */\n#define HAVE_DECL_IN6ADDR_ANY_INIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_LOOPBACK_INIT', and to\n 0 if you don't. */\n#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT 1\n\n/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you\n don't. */\n#define HAVE_DECL_IPV6_V6ONLY 1\n\n/* Define to 1 if you have the declaration of `posix2time', and to 0 if you\n don't. */\n#define HAVE_DECL_POSIX2TIME 0\n\n/* Define to 1 if you have the declaration of `RLIMIT_STACK', and to 0 if you\n don't. */\n#define HAVE_DECL_RLIMIT_STACK 1\n\n/* Define to 1 if you have the declaration of `SCTPS_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_ECHOED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_WAIT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_ESTABLISHED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_IDLE', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_IDLE 0\n\n/* Define to 1 if you have the declaration of `SCTPS_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_ACK_SENT', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_RECEIVED', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTP_ABORT', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_ABORT 1\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_CONFIRMED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_ADDR_CONFIRMED 0\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_OVER', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ADDR_OVER 1\n\n/* Define to 1 if you have the declaration of `SCTP_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTP_CLOSED', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_CLOSED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_COOKIE_ECHOED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_COOKIE_WAIT 1\n\n/* Define to 1 if you have the declaration of `SCTP_DELAYED_ACK_TIME', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_DELAYED_ACK_TIME 1\n\n/* Define to 1 if you have the declaration of `SCTP_EMPTY', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EMPTY 1\n\n/* Define to 1 if you have the declaration of `SCTP_EOF', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EOF 1\n\n/* Define to 1 if you have the declaration of `SCTP_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ESTABLISHED 1\n\n/* Define to 1 if you have the declaration of `SCTP_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTP_SENDALL', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_SENDALL 0\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_ACK_SENT', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_PENDING 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_RECEIVED', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_UNORDERED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_UNORDERED 1\n\n/* Define to 1 if you have the declaration of `setrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_SETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `time2posix', and to 0 if you\n don't. */\n#define HAVE_DECL_TIME2POSIX 0\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n/* #undef HAVE_DOPRNT */\n\n/* Define if you have the 'end' symbol */\n#define HAVE_END_SYMBOL 1\n\n/* Define if you have a working fallocate() */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `fdatasync' function. */\n#define HAVE_FDATASYNC 1\n\n/* Define to 1 if you have the `finite' function. */\n#define HAVE_FINITE 1\n\n/* Define to 1 if you have the `flockfile' function. */\n#define HAVE_FLOCKFILE 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpsetmask' function. */\n/* #undef HAVE_FPSETMASK */\n\n/* Define to 1 if you have the `fstat' function. */\n#define HAVE_FSTAT 1\n\n/* Define if you have fwrite_unlocked */\n#define HAVE_FWRITE_UNLOCKED 1\n\n/* Define to 1 if you have a good `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `gethostbyname2' function. */\n#define HAVE_GETHOSTBYNAME2 1\n\n/* Define to flavour of gethostbyname_r */\n#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC\n\n/* Define to 1 if you have the `gethrtime' function. */\n/* #undef HAVE_GETHRTIME */\n\n/* define if gethrvtime() works and uses ioctl() to /proc/self */\n/* #undef HAVE_GETHRVTIME_PROCFS_IOCTL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n#define HAVE_GETIFADDRS 1\n\n/* Define to 1 if you have the `getipnodebyaddr' function. */\n/* #undef HAVE_GETIPNODEBYADDR */\n\n/* Define to 1 if you have the `getipnodebyname' function. */\n/* #undef HAVE_GETIPNODEBYNAME */\n\n/* Define to 1 if you have a good `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `gmtime_r' function. */\n#define HAVE_GMTIME_R 1\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n/* #undef HAVE_IEEEFP_H */\n\n/* Define to 1 if you have the `ieee_handler' function. */\n/* #undef HAVE_IEEE_HANDLER */\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define if ipv6 is present */\n#define HAVE_IN6 1\n\n/* Define to 1 if you have the variable in6addr_any declared. */\n#define HAVE_IN6ADDR_ANY 1\n\n/* Define to 1 if you have the variable in6addr_loopback declared. */\n#define HAVE_IN6ADDR_LOOPBACK 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Early linux used in_addr6 instead of in6_addr, define if you have this */\n/* #undef HAVE_IN_ADDR6_STRUCT */\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define if you have kstat */\n/* #undef HAVE_KSTAT */\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#define HAVE_LANGINFO_H 1\n\n/* Define to 1 if you have the `dl' library (-ldl). */\n#define HAVE_LIBDL 1\n\n/* Define to 1 if you have the `dlpi' library (-ldlpi). */\n/* #undef HAVE_LIBDLPI */\n\n/* Define to 1 if you have the <libdlpi.h> header file. */\n/* #undef HAVE_LIBDLPI_H */\n\n/* Define to 1 if you have the `inet' library (-linet). */\n/* #undef HAVE_LIBINET */\n\n/* Define to 1 if you have the `m' library (-lm). */\n#define HAVE_LIBM 1\n\n/* Define to 1 if you have the `util' library (-lutil). */\n#define HAVE_LIBUTIL 1\n\n/* Define to 1 if you have the `z' library (-lz). */\n/* #undef HAVE_LIBZ */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <linux/falloc.h> header file. */\n/* #undef HAVE_LINUX_FALLOC_H */\n\n/* Define to 1 if you have the `localtime_r' function. */\n#define HAVE_LOCALTIME_R 1\n\n/* Define to 1 if you have the <malloc.h> header file. */\n#define HAVE_MALLOC_H 1\n\n/* Define to 1 if you have the `mallopt' function. */\n#define HAVE_MALLOPT 1\n\n/* Define to 1 if you have the `memcpy' function. */\n#define HAVE_MEMCPY 1\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef HAVE_MIT_PTHREAD_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the `mremap' function. */\n#define HAVE_MREMAP 1\n\n/* Define if setsockopt() accepts multicast options */\n#define HAVE_MULTICAST_SUPPORT 1\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <netpacket/packet.h> header file. */\n#define HAVE_NETPACKET_PACKET_H 1\n\n/* Define to 1 if you have the <net/errno.h> header file. */\n/* #undef HAVE_NET_ERRNO_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the `nl_langinfo' function. */\n#define HAVE_NL_LANGINFO 1\n\n/* Define if you don't have a definition of INADDR_LOOPBACK */\n/* #undef HAVE_NO_INADDR_LOOPBACK */\n\n/* Define to 1 if you have the `openpty' function. */\n#define HAVE_OPENPTY 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `posix2time' function. */\n/* #undef HAVE_POSIX2TIME */\n\n/* Define to 1 if you have the `posix_fadvise' function. */\n#define HAVE_POSIX_FADVISE 1\n\n/* Define if you have a working posix_fallocate() */\n/* #undef HAVE_POSIX_FALLOCATE */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define if you have processor_bind functionality */\n/* #undef HAVE_PROCESSOR_BIND */\n\n/* Define if you have pset functionality */\n/* #undef HAVE_PSET */\n\n/* Define if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pty.h> header file. */\n#define HAVE_PTY_H 1\n\n/* Define if you have putc_unlocked */\n#define HAVE_PUTC_UNLOCKED 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the `res_gethostbyname' function. */\n/* #undef HAVE_RES_GETHOSTBYNAME */\n\n/* Define to 1 if you have the `sbrk' function. */\n#define HAVE_SBRK 1\n\n/* Define if you have sched_getaffinity/sched_setaffinity */\n#define HAVE_SCHED_xETAFFINITY 1\n\n/* Define to 1 if you have the `sctp_bindx' function. */\n/* #undef HAVE_SCTP_BINDX */\n\n/* Define to 1 if you have the <netinet/sctp.h> header file */\n#define HAVE_SCTP_H 1\n\n/* Define to 1 if you have the `sctp_peeloff' function. */\n/* #undef HAVE_SCTP_PEELOFF */\n\n/* Define to 1 if you have the <sdkddkver.h> header file. */\n/* #undef HAVE_SDKDDKVER_H */\n\n/* Define to 1 if you have the `sendfile' function. */\n#define HAVE_SENDFILE 1\n\n/* Define to 1 if you have the `sendfilev' function. */\n/* #undef HAVE_SENDFILEV */\n\n/* Define to 1 if you have the `setlocale' function. */\n#define HAVE_SETLOCALE 1\n\n/* Define to 1 if you have the `setsid' function. */\n#define HAVE_SETSID 1\n\n/* Define if we have socklen_t */\n#define HAVE_SOCKLEN_T 1\n\n/* define if you have the Solaris/ultrasparc /dev/perfmon interface */\n/* #undef HAVE_SOLARIS_SPARC_PERFMON */\n\n/* Define if you have SO_BSDCOMPAT flag on sockets */\n/* #undef HAVE_SO_BSDCOMPAT */\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the `strerror_r' function. */\n#define HAVE_STRERROR_R 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strlcat' function. */\n/* #undef HAVE_STRLCAT */\n\n/* Define to 1 if you have the `strlcpy' function. */\n/* #undef HAVE_STRLCPY */\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if `ifr_enaddr' is member of `struct ifreq'. */\n/* #undef HAVE_STRUCT_IFREQ_IFR_ENADDR */\n\n/* Define to 1 if `ifr_hwaddr' is member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `spp_flags' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1\n\n/* Define to 1 if `spp_pathmtu' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1\n\n/* Define to 1 if `spp_sackdelay' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1\n\n/* Define to 1 if `sre_data' is member of `struct sctp_remote_error'. */\n#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1\n\n/* Define to 1 if `ssf_data' is member of `struct sctp_send_failed'. */\n#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#define HAVE_SYSLOG_H 1\n\n/* Define if you have <sys/devpoll.h> header file. */\n/* #undef HAVE_SYS_DEVPOLL_H */\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define if you have <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define to 1 if you have the <sys/resource.h> header file */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/sdt.h> header file. */\n/* #undef HAVE_SYS_SDT_H */\n\n/* Define to 1 if you have the <sys/socketio.h> header file. */\n/* #undef HAVE_SYS_SOCKETIO_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/stropts.h> header file. */\n#define HAVE_SYS_STROPTS_H 1\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n#define HAVE_SYS_SYSCTL_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define if termcap functions exists */\n#define HAVE_TERMCAP 1\n\n/* Define to 1 if you have the `time2posix' function. */\n/* #undef HAVE_TIME2POSIX */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the <util.h> header file. */\n/* #undef HAVE_UTIL_H */\n\n/* Define to 1 if you have the <utmp.h> header file. */\n#define HAVE_UTMP_H 1\n\n/* Define to 1 if you have the `vfork' function. */\n#define HAVE_VFORK 1\n\n/* Define to 1 if you have the <vfork.h> header file. */\n/* #undef HAVE_VFORK_H */\n\n/* Define to 1 if you have the `vprintf' function. */\n#define HAVE_VPRINTF 1\n\n/* Define to 1 if you have a `wcwidth' function. */\n#define HAVE_WCWIDTH 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n/* #undef HAVE_WINSOCK2_H */\n\n/* Define to 1 if `fork' works. */\n#define HAVE_WORKING_FORK 1\n\n/* Define if you have a working posix_openpt implementation */\n#define HAVE_WORKING_POSIX_OPENPT 1\n\n/* Define to 1 if `vfork' works. */\n#define HAVE_WORKING_VFORK 1\n\n/* Define to 1 if you have the `writev' function. */\n#define HAVE_WRITEV 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n/* #undef HAVE_WS2TCPIP_H */\n\n/* Define to 1 if you have the `_brk' function. */\n/* #undef HAVE__BRK */\n\n/* Define if you have the '_end' symbol */\n#define HAVE__END_SYMBOL 1\n\n/* Define to 1 if you have the `_sbrk' function. */\n/* #undef HAVE__SBRK */\n\n/* Define to 1 if you have the `__brk' function. */\n/* #undef HAVE___BRK */\n\n/* Define to 1 if you have the `__sbrk' function. */\n#define HAVE___SBRK 1\n\n/* Define to enable HiPE */\n#define HIPE 1\n\n/* define if h_errno is declared (in some way) in a system header file */\n#define H_ERRNO_DECLARED 1\n\n/* Define if netdb.h needs struct sockaddr_in ans in.h CAN be included before\n */\n#define NETDB_H_NEEDS_IN_H 1\n\n/* Define if floating points exceptions are non-existing/not reliable */\n#define NO_FPE_SIGNALS \n\n/* Defined if no found C compiler can handle jump tables */\n/* #undef NO_JUMP_TABLE */\n\n/* Define if you dont have salen */\n#define NO_SA_LEN 1\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"\"\n\n/* Define if you wish to redefine FD_SETSIZE to be able to select on more fd\n */\n/* #undef REDEFINE_FD_SETSIZE */\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define the sbrk() argument type. */\n#define SBRK_ARG_TYPE intptr_t\n\n/* Define the sbrk() return type. */\n#define SBRK_RET_TYPE void *\n\n/* The size of a `AO_t', as computed by sizeof. */\n/* #undef SIZEOF_AO_T */\n\n/* The size of a `char', as computed by sizeof. */\n#define SIZEOF_CHAR 1\n\n/* The size of a `int', as computed by sizeof. */\n#define SIZEOF_INT 4\n\n/* The size of a `long', as computed by sizeof. */\n#define SIZEOF_LONG 8\n\n/* The size of a `long long', as computed by sizeof. */\n#define SIZEOF_LONG_LONG 8\n\n/* The size of a `off_t', as computed by sizeof. */\n#define SIZEOF_OFF_T 8\n\n/* The size of a `short', as computed by sizeof. */\n#define SIZEOF_SHORT 2\n\n/* The size of a `size_t', as computed by sizeof. */\n#define SIZEOF_SIZE_T 8\n\n/* The size of a `time_t', as computed by sizeof. */\n#define SIZEOF_TIME_T 8\n\n/* The size of a `void *', as computed by sizeof. */\n#define SIZEOF_VOID_P 8\n\n/* The size of a `__int128_t', as computed by sizeof. */\n#define SIZEOF___INT128_T 16\n\n/* The size of a `__int64', as computed by sizeof. */\n#define SIZEOF___INT64 0\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* define if the variable sys_errlist is declared in a system header file */\n#define SYS_ERRLIST_DECLARED \n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n#define TIME_WITH_SYS_TIME 1\n\n/* Define to 1 if your <sys/time.h> declares `struct tm'. */\n/* #undef TM_IN_SYS_TIME */\n\n/* Define if you want to use dtrace for dynamic tracing */\n/* #undef USE_DTRACE */\n\n/* Define if you want to use dynamic tracing */\n/* #undef USE_DYNAMIC_TRACE */\n\n/* Define if you have matherr() function and struct exception type */\n#define USE_MATHERR 1\n\n/* Define to enable hrvtime() on Linux systems with perfctr extension */\n/* #undef USE_PERFCTR */\n\n/* Define if select() should be used instead of poll() */\n/* #undef USE_SELECT */\n\n/* Define if you want to use systemtap for dynamic tracing */\n/* #undef USE_SYSTEMTAP */\n\n/* Define to enable VM dynamic trace probes */\n/* #undef USE_VM_PROBES */\n\n/* Define if windows.h includes winsock2.h */\n/* #undef WINDOWS_H_INCLUDES_WINSOCK2_H */\n\n/* Define to 1 if your processor stores words with the most significant byte\n first (like Motorola and SPARC, unlike Intel and VAX). */\n/* #undef WORDS_BIGENDIAN */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `long' if <sys/types.h> does not define. */\n/* #undef off_t */\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef pid_t */\n\n/* Define to `unsigned' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define as `fork' if `vfork' does not work. */\n/* #undef vfork */\n\n\n/* Redefine in6_addr. XXX this should be moved to the files where it's used? */\n#ifdef HAVE_IN_ADDR6_STRUCT\n#define in6_addr in_addr6\n#endif\n\n/* Define a reasonable default for INADDR_LOOPBACK */\n/* XXX this should be moved to the files where it's used? */\n#ifdef HAVE_NO_INADDR_LOOPBACK\n#define INADDR_LOOPBACK (u_long)0x7F000001\n#endif\n\n#ifdef REDEFINE_FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n\n#ifdef HAVE_GETHRVTIME_PROCFS_IOCTL\n#define HAVE_GETHRVTIME\n#endif\n\n#ifndef HAVE_FINITE\n# if defined(HAVE_ISINF) && defined(HAVE_ISNAN)\n# define USE_ISINF_ISNAN\n# endif\n#endif\n\n#if defined(DEBUG) && defined(USE_THREADS) && !defined(ERTS_ENABLE_LOCK_CHECK)\n#define ERTS_ENABLE_LOCK_CHECK 1\n#endif\n\n"}]}, + {beam_dynamic_libraries, + "\tlibutil.so.1 => /lib64/libutil.so.1 (0x00002b3e06a05000)\n\tlibdl.so.2 => /lib64/libdl.so.2 (0x00002b3e06b08000)\n\tlibm.so.6 => /lib64/libm.so.6 (0x00002b3e06c0c000)\n\tlibncurses.so.5 => /lib64/libncurses.so.5 (0x00002b3e06d62000)\n\tlibpthread.so.0 => /lib64/libpthread.so.0 (0x00002b3e06ec5000)\n\tlibrt.so.1 => /lib64/librt.so.1 (0x00002b3e06fdc000)\n\tlibc.so.6 => /lib64/libc.so.6 (0x00002b3e070e6000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00002b3e068e9000)\n"}, + {environment_erts, + [{"BINDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"}, + {"DIALYZER_EMULATOR",false}, + {"CERL_DETACHED_PROG",false}, + {"EMU","beam"}, + {"ERL_CONSOLE_MODE",false}, + {"ERL_CRASH_DUMP",false}, + {"ERL_CRASH_DUMP_NICE",false}, + {"ERL_CRASH_DUMP_SECONDS",false}, + {"ERL_EPMD_PORT",false}, + {"ERL_EMULATOR_DLL",false}, + {"ERL_FULLSWEEP_AFTER",false}, + {"ERL_LIBS",false}, + {"ERL_MALLOC_LIB",false}, + {"ERL_MAX_PORTS",false}, + {"ERL_MAX_ETS_TABLES",false}, + {"ERL_NO_VFORK",false}, + {"ERL_NO_KERNEL_POLL",false}, + {"ERL_THREAD_POOL_SIZE",false}, + {"ERLC_EMULATOR",false}, + {"ESCRIPT_EMULATOR",false}, + {"HOME","/home/otptest"}, + {"HOMEDRIVE",false}, + {"HOMEPATH",false}, + {"LANG","sv_SE.UTF-8"}, + {"LC_ALL",false}, + {"LC_CTYPE",false}, + {"PATH", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"}, + {"PROGNAME","erl"}, + {"RELDIR",false}, + {"ROOTDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"}, + {"TERM","xterm-256color"}, + {"COMSPEC",false}, + {"HEART_COMMAND",false}, + {"RUN_ERL_LOG_ALIVE_MINUTES",false}, + {"RUN_ERL_LOG_ACTIVITY_MINUTES",false}, + {"RUN_ERL_LOG_ALIVE_FORMAT",false}, + {"RUN_ERL_LOG_ALIVE_IN_UTC",false}, + {"RUN_ERL_LOG_GENERATIONS",false}, + {"RUN_ERL_LOG_MAXSIZE",false}, + {"RUN_ERL_DISABLE_FLOWCNTRL",false}, + {"CALLER_DRV_USE_OUTPUTV",false}, + {"ERL_INET_GETHOST_DEBUG",false}, + {"ERL_EFILE_THREAD_SHORT_CIRCUIT",false}, + {"ERL_WINDOW_TITLE",false}, + {"ERL_ABORT_ON_FAILURE",false}, + {"TTYSL_DEBUG_LOG",false}]}, + {environment, + [{"JAVA_ROOT","/usr/lib64/jvm/java"}, + {"COLORTERM","1"}, + {"LC_NAME","sv_SE.UTF-8"}, + {"G_BROKEN_FILENAMES","1"}, + {"LESSCLOSE","lessclose.sh %s %s"}, + {"LC_TIME","sv_SE.UTF-8"}, + {"DISPLAY","localhost:11.0"}, + {"INFOPATH", + "/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info"}, + {"LPDEST","lw5"}, + {"PKG_CONFIG_PATH", + "/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig"}, + {"LESSOPEN","lessopen.sh %s"}, + {"XDG_DATA_DIRS", + "/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/"}, + {"ACLOCAL_FLAGS","-I /opt/gnome/share/aclocal"}, + {"PRINTER","lw5"}, + {"VISUAL","vim"}, + {"GTK_PATH64", + "/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0"}, + {"CVS_RSH","ssh"}, + {"LOGIN_PROFILE_RUN","true"}, + {"G_FILENAME_ENCODING","@locale,UTF-8,ISO-8859-15,CP1252"}, + {"LESS","-M -I"}, + {"MACHTYPE","x86_64-suse-linux"}, + {"LOGNAME","otptest"}, + {"GTK_PATH", + "/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0"}, + {"WINDOWMANAGER","/usr/X11R6/bin/gnome"}, + {"LS_OPTIONS","-N --color=none -T 0"}, + {"LESS_ADVANCED_PREPROCESSOR","no"}, + {"OSTYPE","linux"}, + {"QT_SYSTEM_DIR","/usr/share/desktop-data"}, + {"JDK_HOME","/usr/lib64/jvm/java"}, + {"SHLVL","1"}, + {"HOME","/home/otptest"}, + {"https_proxy","http://www-proxy.ericsson.se:8080"}, + {"SDK_HOME","/usr/lib64/jvm/java"}, + {"LC_MEASUREMENT","sv_SE.UTF-8"}, + {"PYTHONSTARTUP","/etc/pythonstart"}, + {"PROGNAME","erl"}, + {"LANG","sv_SE.UTF-8"}, + {"EDITOR","vim"}, + {"JAVA_HOME","/usr/lib64/jvm/java"}, + {"INPUTRC","/etc/inputrc"}, + {"PWD", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20"}, + {"LC_IDENTIFICATION","sv_SE.UTF-8"}, + {"JAVA_BINDIR","/usr/lib64/jvm/java/bin"}, + {"SSH_SENDS_LOCALE","yes"}, + {"CPU","x86_64"}, + {"LC_MESSAGES","POSIX"}, + {"MAIL","/var/mail/otptest"}, + {"PATH", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"}, + {"MINICOM","-c on"}, + {"XDG_CONFIG_DIRS", + "/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/"}, + {"CSHEDIT","emacs"}, + {"PAGER","less"}, + {"HOSTTYPE","x86_64"}, + {"ENV","/home/otptest/.bashrc"}, + {"ROOTDIR", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"}, + {"XNLSPATH","/usr/X11R6/lib/X11/nls"}, + {"LS_COLORS",[]}, + {"LC_TELEPHONE","sv_SE.UTF-8"}, + {"GROFF_NO_SGR","yes"}, + {"JRE_HOME","/usr/lib64/jvm/java/jre"}, + {"USER","otptest"}, + {"SSH_TTY","/dev/pts/3"}, + {"MORE","-sl"}, + {"LC_NUMERIC","sv_SE.UTF-8"}, + {"BINDIR", + "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"}, + {"PROFILEREAD","true"}, + {"HISTSIZE","1000"}, + {"HOST","duilin"}, + {"TERM","xterm-256color"}, + {"SHELL","/bin/sh"}, + {"GNOME2_PATH","/usr/local:/opt/gnome:/usr"}, + {"XKEYSYMDB","/usr/X11R6/lib/X11/XKeysymDB"}, + {"HOSTNAME","duilin"}, + {"LC_MONETARY","sv_SE.UTF-8"}, + {"EMU","beam"}, + {"LC_ADDRESS","sv_SE.UTF-8"}, + {"LASER","lw5"}, + {"NNTPSERVER","news"}, + {"INFODIR","/usr/local/info:/usr/share/info:/usr/info"}, + {"MANPATH", + "/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man"}, + {"LESSKEY","/etc/lesskey.bin"}, + {"LC_PAPER","sv_SE.UTF-8"}]}]}. diff --git a/lib/sasl/doc/src/rb.xml b/lib/sasl/doc/src/rb.xml index 3da825878e..b94914d8f9 100644 --- a/lib/sasl/doc/src/rb.xml +++ b/lib/sasl/doc/src/rb.xml @@ -138,6 +138,24 @@ </desc> </func> <func> + <name>log_list()</name> + <name>log_list(Type)</name> + <fsummary>Log reports list</fsummary> + <type> + <v>Type = type()</v> + <v>type() = error | error_report | info_msg | info_report | + warning_msg | warning_report | crash_report | + supervisor_report | progress</v> + </type> + <desc> + <p>Same as <c>list/0</c> or <c>list/1</c> functions + but result is printed to logfile, if set, otherwise to standard_io. + </p> + <p>If no <c>Type</c> is given, all reports are listed. + </p> + </desc> + </func> + <func> <name>rescan()</name> <name>rescan(Options)</name> <fsummary>Rescan the report directory</fsummary> @@ -172,7 +190,7 @@ <type> <v>Options = [opt()]</v> <v>opt() = {start_log, FileName} | {max, MaxNoOfReports} | {report_dir, DirString} | {type, ReportType} | {abort_on_error, Bool}</v> - <v>FileName = string() | standard_io</v> + <v>FileName = string() | atom() | pid()</v> <v>MaxNoOfReports = int() | all</v> <v>DirString = string()</v> <v>ReportType = type() | [type()] | all</v> @@ -185,11 +203,13 @@ reports can be browsed. When the <c>rb_server</c> is started, the files in the specified directory are scanned. The other functions assume that the server has - started. + started. </p> - <p><c>{start_log, FileName}</c> starts logging to file. All - reports will be printed to the named file. The default is - <c>standard_io</c>. + <p><c>{start_log, FileName}</c> starts logging to file, + registered name or io_device. All reports will be printed + to the named file. The default is <c>standard_io</c>. + The option {start_log, standard_error} is not allowed and + will be replaced by default standard_io. </p> <p><c>{max, MaxNoOfReports}</c>. Controls how many reports the <c>rb_server</c> should read on start-up. This option is @@ -226,11 +246,11 @@ <name>start_log(FileName)</name> <fsummary>Redirect all output to <c>FileName</c></fsummary> <type> - <v>FileName = string()</v> + <v>FileName = string() | atom() | pid()</v> </type> <desc> <p>Redirects all report output from the RB tool to the - specified file. + specified file, registered name or io_device. </p> </desc> </func> diff --git a/lib/sasl/src/rb.erl b/lib/sasl/src/rb.erl index 8004ef2c5a..767932e659 100644 --- a/lib/sasl/src/rb.erl +++ b/lib/sasl/src/rb.erl @@ -22,7 +22,7 @@ %% External exports -export([start/0, start/1, stop/0, rescan/0, rescan/1]). --export([list/0, list/1, show/0, show/1, grep/1, filter/1, filter/2, start_log/1, stop_log/0]). +-export([list/0, list/1, log_list/0, log_list/1, show/0, show/1, grep/1, filter/1, filter/2, start_log/1, stop_log/0]). -export([h/0, help/0]). %% Internal exports @@ -62,6 +62,9 @@ rescan(Options) -> list() -> list(all). list(Type) -> call({list, Type}). +log_list() -> log_list(all). +log_list(Type) -> call({log_list, Type}). + show() -> call(show). @@ -93,6 +96,8 @@ help() -> io:format("rb:help() - print this help~n"), io:format("rb:list() - list all reports~n"), io:format("rb:list(Type) - list all reports of type Type~n"), + io:format("rb:log_list() - log list of all reports~n"), + io:format("rb:log_list(Type) - log list of all reports of type Type~n"), io:format(" currently supported types are:~n"), print_types(), io:format("rb:grep(RegExp) - print reports containing RegExp.~n"), @@ -113,7 +118,7 @@ help() -> io:format("rb:show(Number) - print report no Number~n"), io:format("rb:show(Type) - print all reports of type Type~n"), io:format("rb:show() - print all reports~n"), - io:format("rb:start_log(File) - redirect all reports to file~n"), + io:format("rb:start_log(File) - redirect all reports to file or io_device~n"), io:format("rb:stop_log() - close the log file and redirect to~n"), io:format(" standard_io~n"), io:format("rb:stop - stop the rb_server~n"). @@ -207,7 +212,10 @@ handle_call({rescan, Options}, _From, State) -> handle_call(_, _From, #state{data = undefined}) -> {reply, {error, no_data}, #state{}}; handle_call({list, Type}, _From, State) -> - print_list(State#state.data, Type), + print_list(standard_io, State#state.data, Type), + {reply, ok, State}; +handle_call({log_list, Type}, _From, State) -> + print_list(State#state.device, State#state.data, Type), {reply, ok, State}; handle_call({start_log, FileName}, _From, State) -> NewDevice = open_log_file(FileName), @@ -262,7 +270,16 @@ code_change(_OldVsn, State, _Extra) -> %% Returns: A Device for later use in call to io:format %%----------------------------------------------------------------- open_log_file(standard_io) -> standard_io; -open_log_file(FileName) -> +open_log_file(Fd) when is_atom(Fd),Fd=/=standard_error -> + case whereis(Fd) of + undefined -> io:format("rb: Registered name not found '~s'.~n", + [Fd]), + io:format("rb: Using standard_io~n"), + open_log_file(standard_io); + Pid -> open_log_file(Pid) + end; +open_log_file(Fd) when is_pid(Fd)-> Fd; +open_log_file(FileName) when is_list(FileName) -> case file:open(FileName, [write,append]) of {ok, Fd} -> Fd; Error -> @@ -270,7 +287,10 @@ open_log_file(FileName) -> [FileName, Error]), io:format("rb: Using standard_io~n"), standard_io - end. + end; +open_log_file(standard_error) -> + io:format("rb: Using standard_io~n"), + standard_io. close_device(Fd) when is_pid(Fd) -> catch file:close(Fd); @@ -550,18 +570,18 @@ local_time_to_universal_time({Date,Time}) -> end. -print_list(Data, Type) -> +print_list(Fd, Data, Type) -> Header = {"No", "Type", "Process", "Date Time"}, Width = find_width([Header | Data], 0)+1, DateWidth = find_date_width([Header | Data], 0) +1, Format = lists:concat(["~4s~20s ~", Width, "s~20s~n"]), - io:format(Format, tuple_to_list(Header)), - io:format(Format, ["==", "====", "=======", "==== ===="]), - print_list(Data, Type, Width, DateWidth). -print_list([], _, _, _) -> true; -print_list([H|T], Type, Width, DateWidth) -> - print_one_report(H, Type, Width, DateWidth), - print_list(T, Type, Width, DateWidth). + io:format(Fd, Format, tuple_to_list(Header)), + io:format(Fd, Format, ["==", "====", "=======", "==== ===="]), + print_list(Fd, Data, Type, Width, DateWidth). +print_list(_, [], _, _, _) -> true; +print_list(Fd, [H|T], Type, Width, DateWidth) -> + print_one_report(Fd, H, Type, Width, DateWidth), + print_list(Fd, T, Type, Width, DateWidth). find_width([], Width) -> Width; find_width([H|T], Width) -> @@ -578,22 +598,22 @@ find_date_width([H|T], Width) -> true -> find_date_width(T, Width) end. -print_one_report({No, RealType, ShortDescr, Date, _Fname, _FilePos}, +print_one_report(Fd, {No, RealType, ShortDescr, Date, _Fname, _FilePos}, WantedType, Width, DateWidth) -> if WantedType == all -> - print_short_descr(No, RealType, ShortDescr, Date, Width, + print_short_descr(Fd, No, RealType, ShortDescr, Date, Width, DateWidth); WantedType == RealType -> - print_short_descr(No, RealType, ShortDescr, Date, Width, + print_short_descr(Fd, No, RealType, ShortDescr, Date, Width, DateWidth); true -> ok end. -print_short_descr(No, Type, ShortDescr, Date, Width, DateWidth) -> +print_short_descr(Fd, No, Type, ShortDescr, Date, Width, DateWidth) -> Format = lists:concat(["~4w~20w ~", Width, "s~", DateWidth,"s~n"]), - io:format(Format, [No, + io:format(Fd, Format, [No, Type, io_lib:format("~s", [ShortDescr]), Date]). diff --git a/lib/sasl/test/rb_SUITE.erl b/lib/sasl/test/rb_SUITE.erl index b0e43be3a2..453f992850 100644 --- a/lib/sasl/test/rb_SUITE.erl +++ b/lib/sasl/test/rb_SUITE.erl @@ -362,18 +362,48 @@ start_stop_log(Config) -> StdioResult = [_|_] = capture(fun() -> rb:show(1) end), {ok,<<>>} = file:read_file(OutFile), - %% Start log and check that show is printed to log and not to standad_io + %% Start log and check that show is printed to log and not to standard_io ok = rb:start_log(OutFile), [] = capture(fun() -> rb:show(1) end), {ok,Bin} = file:read_file(OutFile), true = (Bin =/= <<>>), + %% Start log with atom standard_io and check that show is printed to standard_io + ok = rb:stop_log(), + ok = file:write_file(OutFile,[]), + ok = rb:start_log(standard_io), + StdioResult = [_|_] = capture(fun() -> rb:show(1) end), + {ok,<<>>} = file:read_file(OutFile), + + %% Start log and check that show is printed to iodevice log and not to standard_io + ok = rb:stop_log(), + ok = file:write_file(OutFile,[]), + {ok, IoOutFile} = file:open(OutFile,[write]), + ok = rb:start_log(IoOutFile), + [] = capture(fun() -> rb:show(1) end), + {ok,Bin} = file:read_file(OutFile), + true = (Bin =/= <<>>), + ok = file:close(IoOutFile), + %% Stop log and check that show is printed to standard_io and not to log ok = rb:stop_log(), ok = file:write_file(OutFile,[]), StdioResult = capture(fun() -> rb:show(1) end), {ok,<<>>} = file:read_file(OutFile), + %% Start log and check that list is printed to log and not to standard_io + ok = file:write_file(OutFile,[]), + ok = rb:start_log(OutFile), + [] = capture(fun() -> rb:log_list() end), + {ok,Bin2} = file:read_file(OutFile), + true = (Bin2 =/= <<>>), + + %% Stop log and check that list is printed to standard_io and not to log + ok = rb:stop_log(), + ok = file:write_file(OutFile,[]), + StdioResult2 = capture(fun() -> rb:log_list() end), + {ok,<<>>} = file:read_file(OutFile), + %% Test that standard_io is used if log file can not be opened ok = rb:start_log(filename:join(nonexistingdir,"newfile.txt")), StdioResult = capture(fun() -> rb:show(1) end), diff --git a/lib/sasl/test/systools_SUITE.erl b/lib/sasl/test/systools_SUITE.erl index 367cab1d77..3921b2d3bb 100644 --- a/lib/sasl/test/systools_SUITE.erl +++ b/lib/sasl/test/systools_SUITE.erl @@ -59,6 +59,7 @@ -export([otp_6226_outdir/1]). -export([init_per_suite/1, end_per_suite/1, init_per_testcase/2, end_per_testcase/2]). +-export([delete_tree/1]). -import(lists, [foldl/3]). @@ -299,6 +300,11 @@ unicode_script(Config) when is_list(Config) -> %% 3. path (directory name where unicode_app.tgz is extracted) true = lists:member({path,[P1]},Instr), + %% If all is good, delete the unicode dir to avoid lingering files + %% on windows. + rpc:call(Node,code,add_pathz,[filename:dirname(code:which(?MODULE))]), + rpc:call(Node,?MODULE,delete_tree,[UnicodeLibDir]), + ok. unicode_script(cleanup,Config) -> diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml index 80de9738f1..8ba2161a9d 100644 --- a/lib/snmp/doc/src/notes.xml +++ b/lib/snmp/doc/src/notes.xml @@ -34,6 +34,153 @@ <section> + <title>SNMP Development Toolkit 4.24.2</title> + <p>Version 4.24.2 supports code replacement in runtime from/to + version 4.24.1, 4.24, 4.23.1 and 4.23. </p> + + <section> + <title>Improvements and new features</title> +<!-- + <p>-</p> +--> + + <list type="bulleted"> + <item> + <p>[agent] Improved documentation for the functions for + loading and unloading mibs, + see <seealso marker="snmpa#load_mibs">load_mibs</seealso> and + <seealso marker="snmpa#unload_mibs">unload_mibs</seealso> for + more info. </p> + <p>Also added new functions for loading and unloading a single mib, + see <seealso marker="snmpa#load_mib">load_mib</seealso> and + <seealso marker="snmpa#unload_mib">unload_mib</seealso> for + more info. </p> + <p>Own Id: OTP-11216</p> + </item> + + </list> + + </section> + + <section> + <title>Fixed Bugs and Malfunctions</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[agent] + see <seealso marker="snmpa#load_mibs">load_mibs</seealso> and + <seealso marker="snmpa#unload_mibs">unload_mibs</seealso>. </p> + <p>Own Id: OTP-11216</p> + </item> + + </list> +--> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[manager] The old Addr-and-Port based API functions, previously + long deprecated and marked for deletion in R16B, has now been + removed. </p> + <p>Own Id: OTP-10027</p> + </item> + + </list> +--> + </section> + + </section> <!-- 4.24.2 --> + + + <section> + <title>SNMP Development Toolkit 4.24.1</title> + <p>Version 4.24.1 supports code replacement in runtime from/to + version 4.24, 4.23.1 and 4.23. </p> + + <section> + <title>Improvements and new features</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[agent,manager] Updated to support the new crypto interface. </p> + <p>Own Id: OTP-11009</p> + </item> + + </list> +--> + + </section> + + <section> + <title>Fixed Bugs and Malfunctions</title> +<!-- + <p>-</p> +--> + + <list type="bulleted"> + <item> + <p>[agent] Reading the value of the vacmViewTreeFamilyMask returns + it in the wrong (internal bitlist) format. </p> + <p>The vacmViewTreeFamilyMask is defined as a bit string in the MIB + (OCTET STRING). Internally a bitlist (list of 1's and 0's, + see <seealso marker="snmp_agent_config_files#vacm">vacm config file</seealso> + for more info) is used. + However, the MIB implementation assumed the latter, effectively + rendering all attempts to read/set masks via SNMP unsuccessful. </p> + <p>Since the mask is used in hot paths (e.g. access permission checks + for each SNMP operation, the bitlist representation of the mask has + benefits (e.g. faster processing). Reading/writing the view mask + objects is less time-critical. Therefore, to fix the issue, convert + between the bitlist (internal) representation and bitstring + (external) when the vacmViewTreeFamilyMask objects are accessed. </p> + <p>Also, the check of the vacm config file was invalid with + regard to the mask value. It was assumed to be a proper oid, which + is not strictly the case (see bitlist above). </p> + <p>Own Id: OTP-11177</p> + <p>Stefan Zegenhagen</p> + </item> + + <item> + <p>[agent] The counter increment function in the local-db was + incorrect. It did not handle counter wrap correctly. </p> + <p>Own Id: OTP-11192</p> + </item> + + </list> + + </section> + + <section> + <title>Incompatibilities</title> + <p>-</p> + +<!-- + <list type="bulleted"> + <item> + <p>[manager] The old Addr-and-Port based API functions, previously + long deprecated and marked for deletion in R16B, has now been + removed. </p> + <p>Own Id: OTP-10027</p> + </item> + + </list> +--> + </section> + + </section> <!-- 4.24.1 --> + + + <section> <title>SNMP Development Toolkit 4.24</title> <p>Version 4.24 supports code replacement in runtime from/to version 4.23.1 and 4.23. </p> diff --git a/lib/snmp/doc/src/snmp_agent_config_files.xml b/lib/snmp/doc/src/snmp_agent_config_files.xml index bd5c537522..866b00b77b 100644 --- a/lib/snmp/doc/src/snmp_agent_config_files.xml +++ b/lib/snmp/doc/src/snmp_agent_config_files.xml @@ -4,7 +4,7 @@ <chapter> <header> <copyright> - <year>1997</year><year>2011</year> + <year>1997</year><year>2013</year> <holder>Ericsson AB. All Rights Reserved.</holder> </copyright> <legalnotice> @@ -32,13 +32,15 @@ <file>snmp_agent_config_files.xml</file> </header> <p>All configuration data must be included in configuration files - that are located in the configuration directory. The name of this - directory is given in the <c>config_dir</c> configuration - parameter. These files are read at start-up, and are used to - initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB, - SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB, - SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB - (refer to the <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> for a description of the MIBs). </p> + that are located in the configuration directory. The name of this + directory is given in the <c>config_dir</c> configuration + parameter. These files are read at start-up, and are used to + initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB, + SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB, + SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB + (refer to the + <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> + for a description of the MIBs). </p> <p>The files are: </p> <list type="bulleted"> <item> @@ -79,35 +81,35 @@ </item> </list> <p>The directory where the configuration files are found is given as - a parameter to the agent. </p> + a parameter to the agent. </p> <p>The entry format in all files are Erlang terms, separated by a - '<em>.</em>' and a <em>newline</em>. In the following sections, the - formats of these terms are described. Comments may be specified as - ordinary Erlang comments. </p> + '<em>.</em>' and a <em>newline</em>. In the following sections, the + formats of these terms are described. Comments may be specified as + ordinary Erlang comments. </p> <p>Syntax errors in these files are discovered and reported with the - function <c>config_err/2</c> of the error report module at start-up. </p> - + function <c>config_err/2</c> of the error report module at start-up. </p> + + <marker id="agent_information"></marker> + <section> - <marker id="agent_information"></marker> <title>Agent Information</title> <p>The agent information should be stored in a file called - <c>agent.conf</c>. - </p> - <p>Each entry is a tuple of size two: - </p> + <c>agent.conf</c>. </p> + <p>Each entry is a tuple of size two:</p> <p><c>{AgentVariable, Value}.</c></p> <list type="bulleted"> - <item><c>AgentVariable</c> is one of the variables is - SNMP-FRAMEWORK-MIB or one of the internal variables - <c>intAgentUDPPort</c>, which defines which UDP port the agent - listens to, or <c>intAgentIpAddress</c>, which defines the IP - address of the agent. + <item> + <p><c>AgentVariable</c> is one of the variables is + SNMP-FRAMEWORK-MIB or one of the internal variables + <c>intAgentUDPPort</c>, which defines which UDP port the agent + listens to, or <c>intAgentIpAddress</c>, which defines the IP + address of the agent. </p> </item> - <item><c>Value</c> is the value for the variable. + <item> + <p><c>Value</c> is the value for the variable.</p> </item> </list> - <p>The following example shows a <c>agent.conf</c> file: - </p> + <p>The following example shows a <c>agent.conf</c> file: </p> <pre> {intAgentUDPPort, 4000}. {intAgentIpAddress,[141,213,11,24]}. @@ -115,49 +117,47 @@ {snmpEngineMaxPacketSize, 484}. </pre> <p>The value of <c>snmpEngineID</c> is a string, which for a - deployed agent should have a very specific structure. See - RFC 2271/2571 for details. - </p> + deployed agent should have a very specific structure. See + RFC 2271/2571 for details.</p> + + <marker id="context"></marker> </section> <section> - <marker id="context"></marker> <title>Contexts</title> <p>The context information should be stored in a file called - <c>context.conf</c>. The default context <c>""</c> - need not be present. - </p> + <c>context.conf</c>. The default context <c>""</c> + need not be present.</p> <p>Each row defines a context in the agent. This information is - used in the table <c>vacmContextTable</c> in the - SNMP-VIEW-BASED-ACM-MIB. - </p> - <p>Each entry is a term: - </p> + used in the table <c>vacmContextTable</c> in the + SNMP-VIEW-BASED-ACM-MIB.</p> + <p>Each entry is a term:</p> <p><c>ContextName.</c></p> <list type="bulleted"> - <item><c>ContextName</c> is a string. + <item> + <p><c>ContextName</c> is a string.</p> </item> </list> + + <marker id="system_information"></marker> </section> <section> - <marker id="system_information"></marker> <title>System Information</title> <p>The system information should be stored in a file called - <c>standard.conf</c>. - </p> - <p>Each entry is a tuple of size two: - </p> + <c>standard.conf</c>.</p> + <p>Each entry is a tuple of size two:</p> <p><c>{SystemVariable, Value}.</c></p> <list type="bulleted"> - <item><c>SystemVariable</c> is one of the variables in the - system group, or <c>snmpEnableAuthenTraps</c>. + <item> + <p><c>SystemVariable</c> is one of the variables in the + system group, or <c>snmpEnableAuthenTraps</c>. </p> </item> - <item><c>Value</c> is the value for the variable. + <item> + <p><c>Value</c> is the value for the variable. </p> </item> </list> - <p>The following example shows a valid <c>standard.conf</c> file: - </p> + <p>The following example shows a valid <c>standard.conf</c> file: </p> <pre> {sysDescr, "Erlang SNMP agent"}. {sysObjectID, [1,2,3]}. @@ -167,59 +167,60 @@ {snmpEnableAuthenTraps, enabled}. </pre> <p>A value must be provided for all variables, which lack default - values in the MIB. - </p> + values in the MIB. </p> + + <marker id="community"></marker> </section> <section> - <marker id="community"></marker> <title>Communities</title> <p>The community information should be stored in a file called - <c>community.conf</c>. It must be present if the agent is - configured for SNMPv1 or SNMPv2c. - </p> + <c>community.conf</c>. It must be present if the agent is + configured for SNMPv1 or SNMPv2c. </p> <p>An SNMP <em>community</em> is a relationship between an SNMP agent and a set of SNMP managers that defines authentication, access control and proxy characteristics. </p> <p>The corresponding table is <c>snmpCommunityTable</c> in the - SNMP-COMMUNITY-MIB. </p> + SNMP-COMMUNITY-MIB. </p> <p>Each entry is a term: </p> - <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c></p> + <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c> </p> <list type="bulleted"> - <item><c>CommunityIndex</c> is a non-empty string. + <item> + <p><c>CommunityIndex</c> is a non-empty string.</p> </item> - <item><c>CommunityName</c> is a string. + <item> + <p><c>CommunityName</c> is a string.</p> </item> - <item><c>SecurityName</c> is a string. + <item> + <p><c>SecurityName</c> is a string.</p> </item> - <item><c>ContextName</c> is a string. + <item> + <p><c>ContextName</c> is a string.</p> </item> - <item><c>TransportTag</c> is a string. + <item> + <p><c>TransportTag</c> is a string.</p> </item> </list> + + <marker id="vacm"></marker> </section> <section> - <marker id="vacm"></marker> <title>MIB Views for VACM</title> <p>The information about MIB Views for VACM should be stored in a - file called - <c>vacm.conf</c>. - </p> + file called <c>vacm.conf</c>.</p> <p>The corresponding tables are <c>vacmSecurityToGroupTable</c>, - <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the - SNMP-VIEW-BASED-ACM-MIB. - </p> + <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the + SNMP-VIEW-BASED-ACM-MIB.</p> <p>Each entry is one of the terms, one entry corresponds to one - row in one of the tables. - </p> + row in one of the tables.</p> <p><c>{vacmSecurityToGroup, SecModel, SecName, GroupName}.</c></p> <p><c>{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}.</c></p> <p><c>{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}.</c></p> <list type="bulleted"> <item> <p><c>SecModel</c> is <c>any</c>, <c>v1</c>, <c>v2c</c>, or - <c>usm</c>.</p> + <c>usm</c>.</p> </item> <item> <p><c>SecName</c> is a string.</p> @@ -232,7 +233,7 @@ </item> <item> <p><c>SecLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c>, - or <c>authPriv</c></p> + or <c>authPriv</c></p> </item> <item> <p><c>Match</c> is <c>prefix</c> or <c>exact</c>.</p> @@ -244,8 +245,7 @@ <p><c>WriteView</c> is a string.</p> </item> <item> - <p><c>NotifyView</c> is a string. - </p> + <p><c>NotifyView</c> is a string.</p> </item> <item> <p><c>ViewIndex</c> is an integer.</p> @@ -258,33 +258,29 @@ </item> <item> <p><c>ViewMask</c> is either <c>null</c> or a list of ones and - zeros. Ones nominate that an exact match is used for this - sub-identifier. Zeros are wild-cards which match any - sub-identifier. If the mask is shorter than the sub-tree, the - tail is regarded as all ones. <c>null</c> is shorthand for a - mask with all ones.</p> + zeros. Ones nominate that an exact match is used for this + sub-identifier. Zeros are wild-cards which match any + sub-identifier. If the mask is shorter than the sub-tree, the + tail is regarded as all ones. <c>null</c> is shorthand for a + mask with all ones. </p> </item> </list> + + <marker id="usm"></marker> </section> <section> - <marker id="usm"></marker> <title>Security data for USM</title> <p>The information about Security data for USM should be stored in a - file called - <c>usm.conf</c>, which must be present if the agent is configured - for SNMPv3. - </p> + file called <c>usm.conf</c>, which must be present if the agent is + configured for SNMPv3. </p> <p>The corresponding table is <c>usmUserTable</c> in the - SNMP-USER-BASED-SM-MIB. - </p> - <p>Each entry is a term: - </p> + SNMP-USER-BASED-SM-MIB.</p> + <p>Each entry is a term:</p> <p><c>{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}.</c></p> <list type="bulleted"> <item> - <p><c>EngineID</c> is a string. - </p> + <p><c>EngineID</c> is a string.</p> </item> <item> <p><c>UserName</c> is a string.</p> @@ -297,7 +293,7 @@ </item> <item> <p><c>AuthP</c> is a <c>usmNoAuthProtocol</c>, - <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p> + <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p> </item> <item> <p><c>AuthKeyC</c> is a string.</p> @@ -307,7 +303,7 @@ </item> <item> <p><c>PrivP</c> is a <c>usmNoPrivProtocol</c>, - <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> + <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p> </item> <item> <p><c>PrivKeyC</c> is a string.</p> @@ -319,66 +315,59 @@ <p><c>Public</c> is a string.</p> </item> <item> - <p><c>AuthKey</c> is a list (of integer). This is the User's secret - localized authentication key. It is not visible in the MIB. The length - of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, and - 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p> + <p><c>AuthKey</c> is a list (of integer). This is the User's secret + localized authentication key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, + and 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p> </item> <item> <p><c>PrivKey</c> is a list (of integer). This is the User's secret - localized encryption key. It is not visible in the MIB. The length - of this key needs to be 16 if <c>usmDESPrivProtocol</c> or - <c>usmAesCfb128Protocol</c> is used. - </p> + localized encryption key. It is not visible in the MIB. The length + of this key needs to be 16 if <c>usmDESPrivProtocol</c> or + <c>usmAesCfb128Protocol</c> is used. </p> </item> </list> + + <marker id="notify"></marker> </section> <section> - <marker id="notify"></marker> <title>Notify Definitions</title> <p>The information about Notify Definitions should be stored in a - file called - <c>notify.conf</c>. - </p> + file called <c>notify.conf</c>. </p> <p>The corresponding table is <c>snmpNotifyTable</c> in the - SNMP-NOTIFICATION-MIB. - </p> - <p>Each entry is a term: - </p> + SNMP-NOTIFICATION-MIB.</p> + <p>Each entry is a term:</p> <p><c>{NotifyName, Tag, Type}.</c></p> <list type="bulleted"> <item> - <p><c>NotifyName</c> is a unique non-empty string. - </p> + <p><c>NotifyName</c> is a unique non-empty string.</p> </item> <item> - <p><c>Tag</c> is a string. - </p> + <p><c>Tag</c> is a string.</p> </item> <item> - <p><c>Type</c> is <c>trap</c> or <c>inform</c>. - </p> + <p><c>Type</c> is <c>trap</c> or <c>inform</c>.</p> </item> </list> + + <marker id="target_addr"></marker> </section> <section> - <marker id="target_addr"></marker> <title>Target Address Definitions</title> <p>The information about Target Address Definitions should be - stored in a file called <c>target_addr.conf</c>. </p> + stored in a file called <c>target_addr.conf</c>. </p> <p>The corresponding tables are <c>snmpTargetAddrTable</c> in the - SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the - SNMP-COMMUNITY-MIB. </p> + SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the + SNMP-COMMUNITY-MIB. </p> <p>Each entry is a term: </p> <p><c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId}.</c> <br></br> or <br></br> <c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> <br></br> or <br></br> -<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c></p> +<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> </p> <list type="bulleted"> <item> - <p><c>TargetName</c> is a unique non-empty string. - </p> + <p><c>TargetName</c> is a unique non-empty string. </p> </item> <item> <p><c>Domain</c> is one of the atoms: @@ -414,40 +403,37 @@ </item> </list> <p>Note that if <c>EngineId</c> has the value <c>discovery</c>, - the agent cannot send - <c>inform</c> messages to that manager until it has performed the - <em>discovery</em> process with that manager. </p> + the agent cannot send + <c>inform</c> messages to that manager until it has performed the + <em>discovery</em> process with that manager. </p> + + <marker id="target_params"></marker> </section> <section> - <marker id="target_params"></marker> <title>Target Parameters Definitions</title> <p>The information about Target Parameters Definitions should be - stored in a file called <c>target_params.conf</c>. </p> + stored in a file called <c>target_params.conf</c>. </p> <p>The corresponding table is <c>snmpTargetParamsTable</c> in the - SNMP-TARGET-MIB. </p> + SNMP-TARGET-MIB. </p> <p>Each entry is a term: </p> <p><c>{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}.</c></p> <list type="bulleted"> <item> - <p><c>ParamsName</c> is a unique non-empty string. - </p> + <p><c>ParamsName</c> is a unique non-empty string. </p> </item> <item> <p><c>MPModel</c> is <c>v1</c>, <c>v2c</c> or <c>v3</c></p> </item> <item> - <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>. - </p> + <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>.</p> </item> <item> - <p><c>SecurityName</c> is a string. - </p> + <p><c>SecurityName</c> is a string.</p> </item> <item> <p><c>SecurityLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c> - or <c>authPriv</c>. - </p> + or <c>authPriv</c>. </p> </item> </list> </section> diff --git a/lib/snmp/doc/src/snmpa.xml b/lib/snmp/doc/src/snmpa.xml index 86fde03205..77146f3a89 100644 --- a/lib/snmp/doc/src/snmpa.xml +++ b/lib/snmp/doc/src/snmpa.xml @@ -245,29 +245,75 @@ notification_delivery_info() = #snmpa_notification_delivery_info{} This function is used to convert to the old (pre-4.4) info format. </p> + <marker id="load_mib"></marker> + </desc> + </func> + + <func> + <name>load_mib(Mib) -> ok | {error, Reason}</name> + <name>load_mib(Agent, Mib) -> ok | {error, Reason}</name> + <fsummary>Load single MIB into the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>MibName = string()</v> + <v>Reason = already_loaded | term()</v> + </type> + <desc> + <p>Load a single <c>Mib</c> into an agent. The <c>MibName</c> + is the name of the Mib, including the path to where the compiled + mib is found. For example: </p> + <code type="none"> + Dir = code:priv_dir(my_app) ++ "/mibs/", + snmpa:load_mib(snmp_master_agent, Dir ++ "MY-MIB"). + </code> + <marker id="load_mibs"></marker> </desc> </func> <func> <name>load_mibs(Mibs) -> ok | {error, Reason}</name> - <name>load_mibs(Agent,Mibs) -> ok | {error, Reason}</name> + <name>load_mibs(Mibs, Force) -> ok | {error, Reason}</name> + <name>load_mibs(Agent, Mibs) -> ok | {error, Reason}</name> + <name>load_mibs(Agent, Mibs, Force) -> ok | {error, Reason}</name> <fsummary>Load MIBs into the agent</fsummary> <type> <v>Agent = pid() | atom()</v> <v>Mibs = [MibName]</v> + <v>Force = boolean()</v> <v>MibName = string()</v> - <v>Reason = term()</v> + <v>Reason = {'load aborted at', MibName, InternalReason}</v> + <v>InternalReason = already_loaded | term()</v> </type> <desc> - <p>Loads <c>Mibs</c> into an agent. If the agent cannot load - all MIBs, it will indicate where loading was aborted. The - <c>MibName</c> is the name of the Mib, including the path to - where the compiled mib is found. For example,</p> - <code type="none"> + <p>Load <c>Mibs</c> into an agent. If the agent cannot load all + MIBs (the default value of the <c>Force</c> argument is <c>false</c>), + it will indicate where loading was aborted. The <c>MibName</c> + is the name of the Mib, including the path to where the compiled + mib is found. For example,</p> + <code type="none"> Dir = code:priv_dir(my_app) ++ "/mibs/", snmpa:load_mibs(snmp_master_agent, [Dir ++ "MY-MIB"]). </code> + <p>If <c>Force = true</c> then the agent will continue attempting + to load each mib even after failing to load a previous mib. Use with + care. </p> + + <marker id="unload_mib"></marker> + </desc> + </func> + + <func> + <name>unload_mib(Mib) -> ok | {error, Reason}</name> + <name>unload_mib(Agent, Mib) -> ok | {error, Reason}</name> + <fsummary>Unload single MIB from the agent</fsummary> + <type> + <v>Agent = pid() | atom()</v> + <v>MibName = string()</v> + <v>Reason = not_loaded | term()</v> + </type> + <desc> + <p>Unload a single <c>Mib</c> from an agent. </p> <marker id="unload_mibs"></marker> </desc> @@ -275,16 +321,25 @@ notification_delivery_info() = #snmpa_notification_delivery_info{} <func> <name>unload_mibs(Mibs) -> ok | {error, Reason}</name> - <name>unload_mibs(Agent,Mibs) -> ok | {error, Reason}</name> + <name>unload_mibs(Mibs, Force) -> ok | {error, Reason}</name> + <name>unload_mibs(Agent, Mibs) -> ok | {error, Reason}</name> + <name>unload_mibs(Agent, Mibs, Force) -> ok | {error, Reason}</name> <fsummary>Unload MIBs from the agent</fsummary> <type> <v>Agent = pid() | atom()</v> <v>Mibs = [MibName]</v> + <v>Force = boolean()</v> <v>MibName = string()</v> + <v>Reason = {'unload aborted at', MibName, InternalReason}</v> + <v>InternalReason = not_loaded | term()</v> </type> <desc> - <p>Unloads MIBs into an agent. If it cannot unload all MIBs, - it will indicate where unloading was aborted. </p> + <p>Unload <c>Mibs</c> from an agent. If it cannot unload all MIBs + (the default value of the <c>Force</c> argument is <c>false</c>), + it will indicate where unloading was aborted. </p> + <p>If <c>Force = true</c> then the agent will continue attempting + to unload each mib even after failing to unload a previous mib. + Use with care. </p> <marker id="which_mibs"></marker> </desc> diff --git a/lib/snmp/doc/src/snmpa_mib_data.xml b/lib/snmp/doc/src/snmpa_mib_data.xml index ff07a03b98..c1ea0a91f9 100644 --- a/lib/snmp/doc/src/snmpa_mib_data.xml +++ b/lib/snmp/doc/src/snmpa_mib_data.xml @@ -380,7 +380,7 @@ <desc> <p>Perform a code-change (upgrade or downgrade). </p> <p>See - <seealso marker="gen_server">gen_server</seealso> + <seealso marker="stdlib:gen_server">gen_server</seealso> for more info regarding the <c>Vsn</c> and <c>Extra</c> arguments. </p> </desc> diff --git a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl index ad9540e886..c0177b1cea 100644 --- a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl +++ b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1999-2012. All Rights Reserved. +%% Copyright Ericsson AB 1999-2013. 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 @@ -49,6 +49,14 @@ -endif. +-type internal_view_mask() :: null | [internal_view_mask_element()]. +-type internal_view_mask_element() :: 0 | 1. + +-type external_view_mask() :: octet_string(). % At most length of 16 octet +-type octet_string() :: [octet()]. +-type octet() :: byte(). + + %%----------------------------------------------------------------- %% Func: configure/1 %% Args: Dir is the directory where the configuration files are found. @@ -160,14 +168,7 @@ check_vacm({vacmViewTreeFamily, ViewName, Tree, Type, Mask}) -> {ok, TypeVal} = snmp_conf:check_atom(Type, [{included, ?view_included}, {excluded, ?view_excluded}]), - MaskVal = - case (catch snmp_conf:check_atom(Mask, [{null, []}])) of - {error, _} -> - snmp_conf:check_oid(Mask), - Mask; - {ok, X} -> - X - end, + {ok, MaskVal} = snmp_conf:check_imask(Mask), Vacm = {ViewName, Tree, MaskVal, TypeVal, ?'StorageType_nonVolatile', ?'RowStatus_active'}, {ok, {vacmViewTreeFamily, Vacm}}; @@ -194,8 +195,8 @@ init_tabs(Sec2Group, Access, View) -> ok. init_sec2group_table([Row | T]) -> -%% ?vtrace("init security-to-group table: " -%% "~n Row: ~p",[Row]), + %% ?vtrace("init security-to-group table: " + %% "~n Row: ~p",[Row]), Key1 = element(1, Row), Key2 = element(2, Row), Key = [Key1, length(Key2) | Key2], @@ -953,13 +954,23 @@ verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilySubtree, Tree) -> wrongValue(?vacmViewTreeFamilySubtree) end; verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilyMask, Mask) -> + %% Mask here is in the "external" format. That is, according + %% to the MIB, which means that its an OCTET STRING of max 16 + %% octets. + %% We however store the mask as a list of 1's (exact) and + %% 0's (wildcard), which means we have to convert the mask. case Mask of - null -> []; - [] -> []; + %% The Mask can only have this value if the vacmViewTreeFamilyTable + %% is called locally! + null -> + []; + [] -> + []; _ -> - case (catch snmp_conf:check_oid(Mask)) of - ok -> - Mask; + %% Check and convert to our internal format + case check_mask(Mask) of + {ok, IMask} -> + IMask; _ -> wrongValue(?vacmViewTreeFamilyMask) end @@ -977,6 +988,60 @@ verify_vacmViewTreeFamilyTable_col(_, Val) -> Val. +check_mask(Mask) when is_list(Mask) andalso (length(Mask) =< 16) -> + try + begin + {ok, emask2imask(Mask)} + end + catch + throw:{error, _} -> + {error, {bad_mask, Mask}}; + T:E -> + {error, {bad_mask, Mask, T, E}} + end; +check_mask(BadMask) -> + {error, {bad_mask, BadMask}}. + +-spec emask2imask(EMask :: external_view_mask()) -> + IMask :: internal_view_mask(). + +%% Convert an External Mask (OCTET STRING) to Internal Mask (list of 0 or 1) +emask2imask(EMask) -> + lists:flatten([octet2bits(Octet) || Octet <- EMask]). + +octet2bits(Octet) + when is_integer(Octet) andalso (Octet >= 16#00) andalso (16#FF >= Octet) -> + <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>> = <<Octet>>, + [A, B, C, D, E, F, G, H]; +octet2bits(BadOctet) -> + throw({error, {bad_octet, BadOctet}}). + +-spec imask2emask(IMask :: internal_view_mask()) -> + EMask :: external_view_mask(). + +%% Convert an Internal Mask (list of 0 or 1) to External Mask (OCTET STRING) +imask2emask(IMask) -> + imask2emask(IMask, []). + +imask2emask([], EMask) -> + lists:reverse(EMask); +imask2emask(IMask, EMask) -> + %% Make sure we have atleast 8 bits + %% (maybe extend with 1's) + IMask2 = + case length(IMask) of + Small when Small < 8 -> + IMask ++ lists:duplicate(8-Small, 1); + _ -> + IMask + end, + %% Extract 8 bits + [A, B, C, D, E, F, G, H | IMaskRest] = IMask2, + <<Octet:8>> = <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>>, + imask2emask(IMaskRest, [Octet | EMask]). + + + table_next(Name, RestOid) -> snmp_generic:table_next(db(Name), RestOid). @@ -1014,11 +1079,41 @@ stc(vacmSecurityToGroupTable) -> ?vacmSecurityToGroupStorageType; stc(vacmViewTreeFamilyTable) -> ?vacmViewTreeFamilyStorageType. next(Name, RowIndex, Cols) -> - snmp_generic:handle_table_next(db(Name), RowIndex, Cols, - fa(Name), foi(Name), noc(Name)). + Result = snmp_generic:handle_table_next(db(Name), RowIndex, Cols, + fa(Name), foi(Name), noc(Name)), + externalize_next(Name, Result). get(Name, RowIndex, Cols) -> - snmp_generic:handle_table_get(db(Name), RowIndex, Cols, foi(Name)). + Result = snmp_generic:handle_table_get(db(Name), RowIndex, Cols, + foi(Name)), + externalize_get(Name, Cols, Result). + + +externalize_next(Name, Result) when is_list(Result) -> + F = fun({[Col | _] = Idx, Val}) -> {Idx, externalize(Name, Col, Val)}; + (Other) -> Other + end, + [F(R) || R <- Result]; +externalize_next(_, Result) -> + Result. + + +externalize_get(Name, Cols, Result) when is_list(Result) -> + %% Patch returned values + F = fun({Col, {value, Val}}) -> {value, externalize(Name, Col, Val)}; + ({_, Other}) -> Other + end, + %% Merge column numbers and return values. there must be as much + %% return values as there are columns requested. And then patch all values + [F(R) || R <- lists:zip(Cols, Result)]; +externalize_get(_, _, Result) -> + Result. + +externalize(vacmViewTreeFamilyTable, ?vacmViewTreeFamilyMask, Val) -> + imask2emask(Val); +externalize(_, _, Val) -> + Val. + wrongValue(V) -> throw({wrongValue, V}). diff --git a/lib/snmp/src/agent/snmpa.erl b/lib/snmp/src/agent/snmpa.erl index 14b93439df..a95e41ea42 100644 --- a/lib/snmp/src/agent/snmpa.erl +++ b/lib/snmp/src/agent/snmpa.erl @@ -39,8 +39,10 @@ enum_to_int/2, enum_to_int/3, info/0, info/1, old_info_format/1, - load_mibs/1, load_mibs/2, - unload_mibs/1, unload_mibs/2, + load_mib/1, load_mib/2, + load_mibs/1, load_mibs/2, load_mibs/3, + unload_mib/1, unload_mib/2, + unload_mibs/1, unload_mibs/2, unload_mibs/3, which_mibs/0, which_mibs/1, whereis_mib/1, whereis_mib/2, dump_mibs/0, dump_mibs/1, @@ -300,19 +302,75 @@ backup(Agent, BackupDir) -> dump_mibs() -> snmpa_agent:dump_mibs(snmp_master_agent). dump_mibs(File) -> snmpa_agent:dump_mibs(snmp_master_agent, File). + +load_mib(Mib) -> + load_mib(snmp_master_agent, Mib). + +-spec load_mib(Agent :: pid() | atom(), Mib :: string()) -> + ok | {error, Reason :: already_loaded | term()}. + +load_mib(Agent, Mib) -> + case load_mibs(Agent, [Mib]) of + {error, {'load aborted at', Mib, Reason}} -> + {error, Reason}; + Else -> + Else + end. + load_mibs(Mibs) -> - load_mibs(snmp_master_agent, Mibs). + load_mibs(snmp_master_agent, Mibs, false). load_mibs(Agent, Mibs) when is_list(Mibs) -> - snmpa_agent:load_mibs(Agent, Mibs). + snmpa_agent:load_mibs(Agent, Mibs, false); +load_mibs(Mibs, Force) + when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) -> + load_mibs(snmp_master_agent, Mibs, Force). + +-spec load_mibs(Agent :: pid() | atom(), + Mibs :: [MibName :: string()], + Force :: boolean()) -> + ok | {error, {'load aborted at', MibName :: string(), InternalReason :: already_loaded | term()}}. + +load_mibs(Agent, Mibs, Force) + when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) -> + snmpa_agent:load_mibs(Agent, Mibs, Force). + + +unload_mib(Mib) -> + unload_mib(snmp_master_agent, Mib). + +-spec unload_mib(Agent :: pid() | atom(), Mib :: string()) -> + ok | {error, Reason :: not_loaded | term()}. + +unload_mib(Agent, Mib) -> + case unload_mibs(Agent, [Mib]) of + {error, {'unload aborted at', Mib, Reason}} -> + {error, Reason}; + Else -> + Else + end. unload_mibs(Mibs) -> - unload_mibs(snmp_master_agent, Mibs). + unload_mibs(snmp_master_agent, Mibs, false). unload_mibs(Agent, Mibs) when is_list(Mibs) -> - snmpa_agent:unload_mibs(Agent, Mibs). + snmpa_agent:unload_mibs(Agent, Mibs); +unload_mibs(Mibs, Force) + when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) -> + unload_mibs(snmp_master_agent, Mibs, Force). + +-spec unload_mibs(Agent :: pid() | atom(), + Mibs :: [MibName :: string()], + Force :: boolean()) -> + ok | {error, {'unload aborted at', MibName :: string(), InternalReason :: not_loaded | term()}}. + +unload_mibs(Agent, Mibs, Force) + when is_list(Mibs) andalso ((Force =:= true) orelse (Force =:= false)) -> + snmpa_agent:unload_mibs(Agent, Mibs, Force). + which_mibs() -> which_mibs(snmp_master_agent). which_mibs(Agent) -> snmpa_agent:which_mibs(Agent). + whereis_mib(Mib) -> whereis_mib(snmp_master_agent, Mib). whereis_mib(Agent, Mib) when is_atom(Mib) -> diff --git a/lib/snmp/src/agent/snmpa_agent.erl b/lib/snmp/src/agent/snmpa_agent.erl index c267ce5a70..9bed6e554e 100644 --- a/lib/snmp/src/agent/snmpa_agent.erl +++ b/lib/snmp/src/agent/snmpa_agent.erl @@ -28,7 +28,8 @@ %% External exports -export([start_link/4, start_link/5, stop/1]). -export([subagent_set/2, - load_mibs/2, unload_mibs/2, which_mibs/1, whereis_mib/2, info/1, + load_mibs/3, unload_mibs/3, + which_mibs/1, whereis_mib/2, info/1, register_subagent/3, unregister_subagent/2, send_notification/3, register_notification_filter/5, @@ -71,7 +72,8 @@ handle_pdu/8, worker/2, worker_loop/1, do_send_trap/7, do_send_trap/8]). %% <BACKWARD-COMPAT> --export([handle_pdu/7]). +-export([handle_pdu/7, + load_mibs/2, unload_mibs/2]). %% </BACKWARD-COMPAT> -include("snmpa_internal.hrl"). @@ -528,12 +530,22 @@ subagent_set(SubAgent, Arguments) -> %% Called by administrator (not agent; deadlock would occur) +%% <BACKWARD-COMPAT> load_mibs(Agent, Mibs) -> - call(Agent, {load_mibs, Mibs}). + load_mibs(Agent, Mibs, false). +%% </BACKWARD-COMPAT> + +load_mibs(Agent, Mibs, Force) -> + call(Agent, {load_mibs, Mibs, Force}). %% Called by administrator (not agent; deadlock would occur) +%% <BACKWARD-COMPAT> unload_mibs(Agent, Mibs) -> - call(Agent, {unload_mibs, Mibs}). + unload_mibs(Agent, Mibs, false). +%% </BACKWARD-COMPAT> + +unload_mibs(Agent, Mibs, Force) -> + call(Agent, {unload_mibs, Mibs, Force}). which_mibs(Agent) -> call(Agent, which_mibs). @@ -1216,13 +1228,25 @@ handle_call({unregister_subagent, SubTreeOid}, _From, S) -> end, {reply, Reply, S}; +%% <BACKWARD-COMPAT> handle_call({load_mibs, Mibs}, _From, S) -> ?vlog("load mibs ~p", [Mibs]), {reply, snmpa_mib:load_mibs(get(mibserver), Mibs), S}; +%% </BACKWARD-COMPAT> + +handle_call({load_mibs, Mibs, Force}, _From, S) -> + ?vlog("[~w] load mibs ~p", [Force, Mibs]), + {reply, snmpa_mib:load_mibs(get(mibserver), Mibs, Force), S}; +%% <BACKWARD-COMPAT> handle_call({unload_mibs, Mibs}, _From, S) -> ?vlog("unload mibs ~p", [Mibs]), {reply, snmpa_mib:unload_mibs(get(mibserver), Mibs), S}; +%% </BACKWARD-COMPAT> + +handle_call({unload_mibs, Mibs, Force}, _From, S) -> + ?vlog("[~w] unload mibs ~p", [Force, Mibs]), + {reply, snmpa_mib:unload_mibs(get(mibserver), Mibs, Force), S}; handle_call(which_mibs, _From, S) -> ?vlog("which mibs", []), diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl index 2c0cad807a..5198c6ec4e 100644 --- a/lib/snmp/src/agent/snmpa_local_db.erl +++ b/lib/snmp/src/agent/snmpa_local_db.erl @@ -583,7 +583,7 @@ handle_cast({variable_inc, Name, Db, N}, State) -> {value, Val} -> Val; _ -> 0 end, - insert(Db, Name, M+N rem 4294967296, State), + insert(Db, Name, (M+N) rem 4294967296, State), {noreply, State}; handle_cast({verbosity,Verbosity}, State) -> diff --git a/lib/snmp/src/agent/snmpa_mib.erl b/lib/snmp/src/agent/snmpa_mib.erl index 031309b990..5b523447c5 100644 --- a/lib/snmp/src/agent/snmpa_mib.erl +++ b/lib/snmp/src/agent/snmpa_mib.erl @@ -26,7 +26,7 @@ %% External exports -export([start_link/3, stop/1, lookup/2, next/3, which_mib/2, which_mibs/1, whereis_mib/2, - load_mibs/2, unload_mibs/2, + load_mibs/3, unload_mibs/3, register_subagent/3, unregister_subagent/2, info/1, info/2, verbosity/2, dump/1, dump/2, backup/2, @@ -39,6 +39,10 @@ which_cache_size/1 ]). +%% <BACKWARD-COMPAT> +-export([load_mibs/2, unload_mibs/2]). +%% </BACKWARD-COMPAT> + %% Internal exports -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). @@ -182,19 +186,32 @@ next(MibServer, Oid, MibView) -> %%---------------------------------------------------------------------- %% Purpose: Loads mibs into the mib process. %% Args: Mibs is a list of Filenames (compiled mibs). +%% Force is a boolean %% Returns: ok | {error, Reason} %%---------------------------------------------------------------------- + +%% <BACKWARD-COMPAT> load_mibs(MibServer, Mibs) -> - call(MibServer, {load_mibs, Mibs}). + load_mibs(MibServer, Mibs, false). +%% </BACKWARD-COMPAT> + +load_mibs(MibServer, Mibs, Force) -> + call(MibServer, {load_mibs, Mibs, Force}). %%---------------------------------------------------------------------- %% Purpose: Loads mibs into the mib process. %% Args: Mibs is a list of Filenames (compiled mibs). +%% Force is a boolean %% Returns: ok | {error, Reason} %%---------------------------------------------------------------------- +%% <BACKWARD-COMPAT> unload_mibs(MibServer, Mibs) -> - call(MibServer, {unload_mibs, Mibs}). + unload_mibs(MibServer, Mibs, false). +%% </BACKWARD-COMPAT> + +unload_mibs(MibServer, Mibs, Force) -> + call(MibServer, {unload_mibs, Mibs, Force}). %%---------------------------------------------------------------------- @@ -323,10 +340,6 @@ do_init(Prio, Mibs, Opts) -> %% Returns: {ok, NewMibData} | {'aborted at', Mib, NewData, Reason} %% Args: Operation is load_mib | unload_mib. %%---------------------------------------------------------------------- -mib_operations(Mod, Operation, Mibs, Data, MeOverride, TeOverride) -> - mib_operations(Mod, Operation, Mibs, Data, MeOverride, TeOverride, false). - - mib_operations(_Mod, _Operation, [], Data, _MeOverride, _TeOverride, _Force) -> {ok, Data}; mib_operations(Mod, Operation, [Mib|Mibs], Data0, MeOverride, TeOverride, Force) -> @@ -451,18 +464,23 @@ handle_call({next, Oid, MibView}, _From, ?vdebug("next -> Reply: ~p", [Reply]), {reply, Reply, NewState}; -handle_call({load_mibs, Mibs}, _From, +%% <BACKWARD-COMPAT> +handle_call({load_mibs, Mibs}, From, State) -> + handle_call({load_mibs, Mibs, false}, From, State); +%% </BACKWARD-COMPAT> + +handle_call({load_mibs, Mibs, Force}, _From, #state{data = Data, teo = TeOverride, meo = MeOverride, cache = Cache, data_mod = Mod} = State) -> - ?vlog("load mibs ~p",[Mibs]), + ?vlog("[~w] load mibs ~p", [Force, Mibs]), %% Invalidate cache NewCache = maybe_invalidate_cache(Cache), {NData, Reply} = case (catch mib_operations(Mod, load_mib, Mibs, Data, - MeOverride, TeOverride)) of + MeOverride, TeOverride, Force)) of {'aborted at', Mib, NewData, Reason} -> ?vlog("aborted at ~p for reason ~p",[Mib,Reason]), {NewData, {error, {'load aborted at', Mib, Reason}}}; @@ -472,19 +490,24 @@ handle_call({load_mibs, Mibs}, _From, Mod:sync(NData), {reply, Reply, State#state{data = NData, cache = NewCache}}; -handle_call({unload_mibs, Mibs}, _From, +%% <BACKWARD-COMPAT> +handle_call({unload_mibs, Mibs}, From, State) -> + handle_call({unload_mibs, Mibs, false}, From, State); +%% </BACKWARD-COMPAT> + +handle_call({unload_mibs, Mibs, Force}, _From, #state{data = Data, teo = TeOverride, meo = MeOverride, cache = Cache, data_mod = Mod} = State) -> - ?vlog("unload mibs ~p",[Mibs]), + ?vlog("[~w] unload mibs ~p", [Force, Mibs]), %% Invalidate cache NewCache = maybe_invalidate_cache(Cache), %% Unload mib(s) {NData, Reply} = case (catch mib_operations(Mod, unload_mib, Mibs, Data, - MeOverride, TeOverride)) of + MeOverride, TeOverride, Force)) of {'aborted at', Mib, NewData, Reason} -> ?vlog("aborted at ~p for reason ~p", [Mib,Reason]), {NewData, {error, {'unload aborted at', Mib, Reason}}}; diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src index 7ffa4a725d..6edcf7e833 100644 --- a/lib/snmp/src/app/snmp.appup.src +++ b/lib/snmp/src/app/snmp.appup.src @@ -17,18 +17,64 @@ %% %CopyrightEnd% %% + {"%VSN%", %% ----- U p g r a d e ------------------------------------------------------- +%% Instruction examples: +%% {restart_application, snmp} +%% {load_module, snmp_pdus, soft_purge, soft_purge, []} +%% {update, snmpa_local_db, soft, soft_purge, soft_purge, []} +%% {add_module, snmpm_net_if_mt} + [ + {"4.24.1", + [ + {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_mib, soft, soft_purge, soft_purge, []} + ] + }, + {"4.24", + [ + {load_module, snmp_conf, soft_purge, soft_purge, []}, + {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge, + [snmp_conf]}, + {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_local_db, soft, soft_purge, soft_purge, []}, + {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_mib, soft, soft_purge, soft_purge, []} + ] + }, {"4.23.1", [{restart_application, snmp}]}, {"4.23", [{restart_application, snmp}]} ], %% ------D o w n g r a d e --------------------------------------------------- +%% Instruction examples: +%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}} + [ + {"4.24.1", + [ + {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_mib, soft, soft_purge, soft_purge, []} + ] + }, + {"4.24", + [ + {load_module, snmp_conf, soft_purge, soft_purge, []}, + {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge, + [snmp_conf]}, + {load_module, snmpa, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_local_db, soft, soft_purge, soft_purge, []}, + {update, snmpa_agent, soft, soft_purge, soft_purge, [snmpa_agent]}, + {update, snmpa_mib, soft, soft_purge, soft_purge, []} + ] + }, {"4.23.1", [{restart_application, snmp}]}, {"4.23", [{restart_application, snmp}]} ] diff --git a/lib/snmp/src/misc/snmp_conf.erl b/lib/snmp/src/misc/snmp_conf.erl index e1e7fab57b..46625989d5 100644 --- a/lib/snmp/src/misc/snmp_conf.erl +++ b/lib/snmp/src/misc/snmp_conf.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 1996-2012. All Rights Reserved. +%% Copyright Ericsson AB 1996-2013. 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 @@ -50,6 +50,7 @@ check_packet_size/1, check_oid/1, + check_imask/1, check_emask/1, check_mp_model/1, check_sec_model/1, check_sec_model/2, check_sec_model/3, @@ -488,6 +489,7 @@ do_check_timer(WaitFor, Factor, Incr, Retry) -> check_integer(Retry, {gte, 0}), ok. + %% --------- all_domains() -> @@ -618,6 +620,37 @@ check_oid(X) -> %% --------- +%% Check a (view) mask in the internal form (all 0 and 1): +check_imask(null) -> + {ok, []}; +check_imask(IMask) when is_list(IMask) -> + do_check_imask(IMask), + {ok, IMask}. + +do_check_imask([0|IMask]) -> + do_check_imask(IMask); +do_check_imask([1|IMask]) -> + do_check_imask(IMask); +do_check_imask([X|_]) -> + error({invalid_internal_mask_element, X}). + + +%% Check a (view) mask in the external form (according to MIB, +%% an OCTET STRING of at most length 16). +check_emask(EMask) when is_list(EMask) andalso (length(EMask) =< 16) -> + do_check_emask(EMask). + +do_check_emask([]) -> + ok; +do_check_emask([X|EMask]) + when is_integer(X) andalso (X >= 16#00) andalso (X =< 16#FF) -> + do_check_emask(EMask); +do_check_emask([X|_]) -> + error({invalid_external_mask_element, X}). + + +%% --------- + all_integer([H|T]) when is_integer(H) -> all_integer(T); all_integer([_H|_T]) -> false; all_integer([]) -> true. diff --git a/lib/snmp/test/Makefile b/lib/snmp/test/Makefile index 546d46a002..f22b7ea8ee 100644 --- a/lib/snmp/test/Makefile +++ b/lib/snmp/test/Makefile @@ -86,7 +86,7 @@ RELSYSDIR = $(RELEASE_PATH)/snmp_test # SNMP FLAGS # ---------------------------------------------------- ifeq ($(SNMP_DEBUG),) - SNMP_DEBUG = d + # SNMP_DEBUG = d endif ifeq ($(SNMP_DEBUG),e) diff --git a/lib/snmp/test/snmp_agent_mibs_test.erl b/lib/snmp/test/snmp_agent_mibs_test.erl index 248fe7d83e..f7dae64e3f 100644 --- a/lib/snmp/test/snmp_agent_mibs_test.erl +++ b/lib/snmp/test/snmp_agent_mibs_test.erl @@ -238,6 +238,8 @@ start_and_stop(Config) when is_list(Config) -> load_unload(suite) -> []; load_unload(Config) when is_list(Config) -> + ?DBG("load_unload -> start", []), + Prio = normal, Verbosity = log, MibDir = ?config(data_dir, Config), @@ -253,8 +255,10 @@ load_unload(Config) when is_list(Config) -> ?line ok = load_mibs(MibsPid, MibDir, ["Test2"]), ?line ok = verify_loaded_mibs(MibsPid, MibDir, ["Test2"]), - ?DBG("load_unload -> load one already loaded mib", []), - ?line {error, _} = load_mibs(MibsPid, MibDir, ["Test2"]), + ?DBG("load_unload -> try load one *already loaded* mib", []), + EMib = join(MibDir, "Test2"), + ?line {error, {'load aborted at', EMib, already_loaded}} = + load_mibs(MibsPid, MibDir, ["Test2"]), ?DBG("load_unload -> load 2 not already loaded mibs", []), ?line ok = load_mibs(MibsPid, MibDir, ["TestTrap", "TestTrapv2"]), @@ -266,7 +270,8 @@ load_unload(Config) when is_list(Config) -> ?line ok = verify_loaded_mibs(MibsPid, MibDir, ["TestTrap", "TestTrapv2"]), ?DBG("load_unload -> try unload two loaded mibs and one not loaded", []), - ?line {error, _} = unload_mibs(MibsPid, ["TestTrap","Test2","TestTrapv2"]), + ?line {error, {'unload aborted at', "Test2", not_loaded}} = + unload_mibs(MibsPid, ["TestTrap","Test2","TestTrapv2"]), ?line ok = verify_loaded_mibs(MibsPid, MibDir, ["TestTrapv2"]), ?DBG("load_unload -> unload the remaining loaded mib", []), @@ -279,6 +284,7 @@ load_unload(Config) when is_list(Config) -> ?DBG("load_unload -> stop symbolic store", []), ?line sym_stop(), + ?DBG("load_unload -> done", []), ok. @@ -691,10 +697,16 @@ mibs_info(Pid) -> load_mibs(Pid, Dir, Mibs0) -> Mibs = [join(Dir, Mib) || Mib <- Mibs0], - snmpa_mib:load_mibs(Pid, Mibs). + Res = snmpa_mib:load_mibs(Pid, Mibs), + %% ?DBG("load_mibs -> " + %% "~n Res: ~p", [Res]), + Res. unload_mibs(Pid, Mibs) -> - snmpa_mib:unload_mibs(Pid, Mibs). + Res = snmpa_mib:unload_mibs(Pid, Mibs), + %% ?DBG("unload_mibs -> " + %% "~n Res: ~p", [Res]), + Res. verify_loaded_mibs(Pid, Dir, ExpectedMibs0) -> ExpectedMibs = [join(Dir, Mib) || Mib <- ExpectedMibs0], diff --git a/lib/snmp/test/snmp_agent_test.erl b/lib/snmp/test/snmp_agent_test.erl index 6fe97ccd25..7e683e315a 100644 --- a/lib/snmp/test/snmp_agent_test.erl +++ b/lib/snmp/test/snmp_agent_test.erl @@ -554,7 +554,7 @@ init_per_suite(Config0) when is_list(Config0) -> %% Mib-dirs MibDir = snmp_test_lib:lookup(data_dir, Config2), - StdMibDir = filename:join([code:priv_dir(snmp), "mibs"]), + StdMibDir = join([code:priv_dir(snmp), "mibs"]), Config3 = [{mib_dir, MibDir}, {std_mib_dir, StdMibDir} | Config2], @@ -748,21 +748,21 @@ init_per_testcase2(Case, Config) -> CaseTopDir = snmp_test_lib:init_testcase_top_dir(Case, Config), %% Create agent top-dir(s) - AgentTopDir = filename:join([CaseTopDir, agent]), + AgentTopDir = join([CaseTopDir, agent]), ok = file:make_dir(AgentTopDir), - AgentConfDir = filename:join([AgentTopDir, config]), + AgentConfDir = join([AgentTopDir, config]), ok = file:make_dir(AgentConfDir), - AgentDbDir = filename:join([AgentTopDir, db]), + AgentDbDir = join([AgentTopDir, db]), ok = file:make_dir(AgentDbDir), - AgentLogDir = filename:join([AgentTopDir, log]), + AgentLogDir = join([AgentTopDir, log]), ok = file:make_dir(AgentLogDir), %% Create sub-agent top-dir(s) - SubAgentTopDir = filename:join([CaseTopDir, sub_agent]), + SubAgentTopDir = join([CaseTopDir, sub_agent]), ok = file:make_dir(SubAgentTopDir), %% Create manager top-dir(s) - ManagerTopDir = filename:join([CaseTopDir, manager]), + ManagerTopDir = join([CaseTopDir, manager]), ok = file:make_dir(ManagerTopDir), [{case_top_dir, CaseTopDir}, @@ -1738,19 +1738,19 @@ init_case(Config) -> load_master(Mib) -> ?DBG("load_master -> entry with" "~n Mib: ~p", [Mib]), - snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety - ok = snmpa:load_mibs(snmp_master_agent, [get(mib_dir) ++ Mib]). + snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety + ok = snmpa:load_mib(snmp_master_agent, join(get(mib_dir), Mib)). load_master_std(Mib) -> ?DBG("load_master_std -> entry with" "~n Mib: ~p", [Mib]), - snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety - ok = snmpa:load_mibs(snmp_master_agent, [get(std_mib_dir) ++ Mib]). + snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety + ok = snmpa:load_mib(snmp_master_agent, join(get(std_mib_dir), Mib)). unload_master(Mib) -> ?DBG("unload_master -> entry with" "~n Mib: ~p", [Mib]), - ok = snmpa:unload_mibs(snmp_master_agent, [Mib]). + ok = snmpa:unload_mib(snmp_master_agent, Mib). loaded_mibs() -> ?DBG("loaded_mibs -> entry",[]), @@ -2155,11 +2155,11 @@ subagent(Config) when is_list(Config) -> try_test(unreg_test), ?P1("Loading previous subagent mib in master and testing..."), - ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas1"]), + ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas1")), try_test(load_test), ?P1("Unloading previous subagent mib in master and testing..."), - ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas1"]), + ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas1")), try_test(unreg_test), ?P1("Testing register subagent..."), rpc:call(SaNode, snmp, register_subagent, @@ -2355,11 +2355,11 @@ sa_register(Config) when is_list(Config) -> ?P1("Unloading Klas1..."), ?DBG("sa_register -> unload mibs", []), - snmpa:unload_mibs(SA, [MibDir ++ "Klas1"]), + snmpa:unload_mib(SA, join(MibDir, "Klas1")), ?P1("Loading SA-MIB..."), ?DBG("sa_register -> unload mibs", []), - snmpa:load_mibs(SA, [MibDir ++ "SA-MIB"]), + snmpa:load_mib(SA, join(MibDir, "SA-MIB")), ?P1("register subagent..."), ?DBG("sa_register -> register subagent", []), @@ -2578,7 +2578,7 @@ next_across_sa(Config) when is_list(Config) -> ?line {ok, SA} = start_subagent(SaNode, ?sa, "SA-MIB"), ?P1("Loading another subagent mib (Klas1)..."), - ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas1"]), + ?line ok = snmpa:load_mib(SA, MibDir ++ "Klas1"), ?P1("register subagent..."), rpc:call(SaNode, snmp, register_subagent, [MA, ?klas1, SA]), @@ -2590,7 +2590,7 @@ next_across_sa(Config) when is_list(Config) -> try_test(next_across_sa_test), ?P1("Unloading mib (Klas1)"), - snmpa:unload_mibs(SA, [MibDir ++ "Klas1"]), + snmpa:unload_mib(SA, join(MibDir, "Klas1")), rpc:call(SaNode, snmp, unregister_subagent, [MA, ?klas1]), try_test(unreg_test), @@ -2631,25 +2631,25 @@ undo(Config) when is_list(Config) -> ?line {ok, SA} = start_subagent(SaNode, ?sa, "SA-MIB"), ?P1("Load Klas3 & Klas4..."), - ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas3"]), - ?line ok = snmpa:load_mibs(MA, [MibDir ++ "Klas4"]), + ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas3")), + ?line ok = snmpa:load_mib(MA, join(MibDir, "Klas4")), ?P1("Testing undo phase at master agent..."), try_test(undo_test), try_test(api_test2), ?P1("Unload Klas3..."), - ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas3"]), + ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas3")), ?P1("Testing bad return values from instrum. funcs..."), try_test(bad_return), ?P1("Unload Klas4..."), - ?line ok = snmpa:unload_mibs(MA, [MibDir ++ "Klas4"]), + ?line ok = snmpa:unload_mib(MA, join(MibDir, "Klas4")), ?P1("Testing undo phase at subagent..."), - ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas3"]), - ?line ok = snmpa:load_mibs(SA, [MibDir ++ "Klas4"]), + ?line ok = snmpa:load_mib(SA, join(MibDir, "Klas3")), + ?line ok = snmpa:load_mib(SA, join(MibDir, "Klas4")), ?line ok = snmpa:register_subagent(MA, ?klas3, SA), ?line ok = snmpa:register_subagent(MA, ?klas4, SA), try_test(undo_test), @@ -6247,8 +6247,8 @@ otp_4394_config(AgentConfDir, MgrDir, Ip0) -> "OTP-4394 test"), ?line case update_usm(Vsn, AgentConfDir) of true -> - ?line copy_file(filename:join(AgentConfDir, "usm.conf"), - filename:join(MgrDir, "usm.conf")), + ?line copy_file(join(AgentConfDir, "usm.conf"), + join(MgrDir, "usm.conf")), ?line update_usm_mgr(Vsn, MgrDir); false -> ?line ok @@ -6407,11 +6407,11 @@ otp8395({init, Config}) when is_list(Config) -> %% AgentDbDir = ?config(agent_db_dir, Config), - AgentMnesiaDir = filename:join([AgentDbDir, "mnesia"]), + AgentMnesiaDir = join([AgentDbDir, "mnesia"]), mnesia_init(AgentNode, AgentMnesiaDir), %% SubAgentDir = ?config(sub_agent_dir, Config), - %% SubAgentMnesiaDir = filename:join([SubAgentDir, "mnesia"]), + %% SubAgentMnesiaDir = join([SubAgentDir, "mnesia"]), %% mnesia_init(SubAgentNode, SubAgentMnesiaDir), %% ok = mnesia_create_schema(AgentNode, [AgentNode, SubAgentNode]), @@ -6541,7 +6541,7 @@ otp8395(Config) when is_list(Config) -> ?SLEEP(1000), AgentNode = ?config(agent_node, Config), AgentLogDir = ?config(agent_log_dir, Config), - OutFile = filename:join([AgentLogDir, "otp8395.txt"]), + OutFile = join([AgentLogDir, "otp8395.txt"]), {ok, LogInfo} = rpc:call(AgentNode, snmpa, log_info, []), ?DBG("otp8395 -> LogInfo: ~p", [LogInfo]), @@ -6579,7 +6579,7 @@ otp9884({init, Config}) when is_list(Config) -> %% AgentDbDir = ?config(agent_db_dir, Config), - AgentMnesiaDir = filename:join([AgentDbDir, "mnesia"]), + AgentMnesiaDir = join([AgentDbDir, "mnesia"]), mnesia_init(AgentNode, AgentMnesiaDir), mnesia_create_schema(AgentNode, [AgentNode]), @@ -6609,8 +6609,8 @@ otp9884({init, Config}) when is_list(Config) -> ManagerConfDir = ?config(manager_top_dir, Config), AgentConfDir = ?config(agent_conf_dir, Config), AgentTopDir = ?config(agent_top_dir, Config), - AgentBkpDir1 = filename:join([AgentTopDir, backup1]), - AgentBkpDir2 = filename:join([AgentTopDir, backup2]), + AgentBkpDir1 = join([AgentTopDir, backup1]), + AgentBkpDir2 = join([AgentTopDir, backup2]), ok = file:make_dir(AgentBkpDir1), ok = file:make_dir(AgentBkpDir2), AgentBkpDirs = [AgentBkpDir1, AgentBkpDir2], @@ -7105,7 +7105,7 @@ display_log(Config) -> {value, {_, Node}} -> LogDir = Dir, Mibs = [], - OutFile = filename:join(LogDir, "snmpa_log.txt"), + OutFile = join(LogDir, "snmpa_log.txt"), p("~n" "=========================" " < Audit Trail Log > " @@ -7252,6 +7252,14 @@ lists_key1search(Key, List) when is_atom(Key) -> %% regs() -> %% lists:sort(registered()). +%% ------ + +join(Parts) -> + filename:join(Parts). + +join(Dir, File) -> + filename:join(Dir, File). + %% ------ diff --git a/lib/snmp/test/snmp_agent_test_lib.erl b/lib/snmp/test/snmp_agent_test_lib.erl index 7e4b713e56..122289c28e 100644 --- a/lib/snmp/test/snmp_agent_test_lib.erl +++ b/lib/snmp/test/snmp_agent_test_lib.erl @@ -139,31 +139,31 @@ init_all(Config) when is_list(Config) -> SuiteTopDir = ?config(snmp_suite_top_dir, Config), ?DBG("init_all -> SuiteTopDir ~p", [SuiteTopDir]), - AgentDir = filename:join(SuiteTopDir, "agent/"), + AgentDir = join(SuiteTopDir, "agent/"), ?line ok = file:make_dir(AgentDir), ?DBG("init_all -> AgentDir ~p", [AgentDir]), - AgentDbDir = filename:join(AgentDir, "db/"), + AgentDbDir = join(AgentDir, "db/"), ?line ok = file:make_dir(AgentDbDir), ?DBG("init_all -> AgentDbDir ~p", [AgentDbDir]), - AgentLogDir = filename:join(AgentDir, "log/"), + AgentLogDir = join(AgentDir, "log/"), ?line ok = file:make_dir(AgentLogDir), ?DBG("init_all -> AgentLogDir ~p", [AgentLogDir]), - AgentConfDir = filename:join(AgentDir, "conf/"), + AgentConfDir = join(AgentDir, "conf/"), ?line ok = file:make_dir(AgentConfDir), ?DBG("init_all -> AgentConfDir ~p", [AgentConfDir]), - MgrDir = filename:join(SuiteTopDir, "mgr/"), + MgrDir = join(SuiteTopDir, "mgr/"), ?line ok = file:make_dir(MgrDir), ?DBG("init_all -> MgrDir ~p", [MgrDir]), - SaDir = filename:join(SuiteTopDir, "sa/"), + SaDir = join(SuiteTopDir, "sa/"), ?line ok = file:make_dir(SaDir), ?DBG("init_all -> SaDir ~p", [SaDir]), - SaDbDir = filename:join(SaDir, "db/"), + SaDbDir = join(SaDir, "db/"), ?line ok = file:make_dir(SaDbDir), ?DBG("init_all -> SaDbDir ~p", [SaDbDir]), @@ -183,11 +183,11 @@ init_all(Config) when is_list(Config) -> ?DBG("init_all -> application mnesia: set_env dir",[]), ?line application_controller:set_env(mnesia, dir, - filename:join(AgentDbDir, "Mnesia1")), + join(AgentDbDir, "Mnesia1")), ?DBG("init_all -> application mnesia: set_env dir on node ~p",[SaNode]), ?line rpc:call(SaNode, application_controller, set_env, - [mnesia, dir, filename:join(SaDir, "Mnesia2")]), + [mnesia, dir, join(SaDir, "Mnesia2")]), ?DBG("init_all -> create mnesia schema",[]), ?line ok = mnesia:create_schema([SaNode, node()]), @@ -253,7 +253,7 @@ init_case(Config) when is_list(Config) -> MibDir = ?config(mib_dir, Config), put(mib_dir, MibDir), - StdM = filename:join(code:priv_dir(snmp), "mibs") ++ "/", + StdM = join(code:priv_dir(snmp), "mibs") ++ "/", put(std_mib_dir, StdM), MgrDir = ?config(mgr_dir, Config), @@ -341,7 +341,7 @@ run(Mod, Func, Args, Opts) -> Crypto = ?CRYPTO_START(), ?DBG("run -> Crypto: ~p", [Crypto]), catch snmp_test_mgr:stop(), % If we had a running mgr from a failed case - StdM = filename:join(code:priv_dir(snmp), "mibs") ++ "/", + StdM = join(code:priv_dir(snmp), "mibs") ++ "/", Vsn = get(vsn), ?DBG("run -> config:" "~n M: ~p" @@ -763,7 +763,7 @@ start_subagent(SaNode, RegTree, Mib) -> MA = whereis(snmp_master_agent), ?DBG("start_subagent -> MA: ~p", [MA]), MibDir = get(mib_dir), - Mib1 = join(MibDir,Mib), + Mib1 = join(MibDir, Mib), Mod = snmpa_supervisor, Func = start_sub_agent, Args = [MA, RegTree, [Mib1]], @@ -800,28 +800,25 @@ mibs(StdMibDir,MibDir) -> join(MibDir, "Test2.bin"), join(MibDir, "TestTrapv2.bin")]. -join(D,F) -> - filename:join(D,F). - %% --- various mib load/unload functions --- load_master(Mib) -> ?DBG("load_master -> entry with" "~n Mib: ~p", [Mib]), - snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety - ok = snmpa:load_mibs(snmp_master_agent, [get(mib_dir) ++ Mib]). + snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety + ok = snmpa:load_mib(snmp_master_agent, join(get(mib_dir), Mib)). load_master_std(Mib) -> ?DBG("load_master_std -> entry with" "~n Mib: ~p", [Mib]), - snmpa:unload_mibs(snmp_master_agent, [Mib]), % Unload for safety - ok = snmpa:load_mibs(snmp_master_agent, [get(std_mib_dir) ++ Mib]). + snmpa:unload_mib(snmp_master_agent, Mib), % Unload for safety + ok = snmpa:load_mibs(snmp_master_agent, join(get(std_mib_dir), Mib)). unload_master(Mib) -> ?DBG("unload_master -> entry with" "~n Mib: ~p", [Mib]), - ok = snmpa:unload_mibs(snmp_master_agent, [Mib]). + ok = snmpa:unload_mib(snmp_master_agent, Mib). loaded_mibs() -> ?DBG("loaded_mibs -> entry",[]), @@ -1383,8 +1380,8 @@ config(Vsns, MgrDir, AgentConfDir, MIp, AIp) -> "test"), ?line case update_usm(Vsns, AgentConfDir) of true -> - ?line copy_file(filename:join(AgentConfDir, "usm.conf"), - filename:join(MgrDir, "usm.conf")), + ?line copy_file(join(AgentConfDir, "usm.conf"), + join(MgrDir, "usm.conf")), ?line update_usm_mgr(Vsns, MgrDir); false -> ?line ok @@ -1403,9 +1400,9 @@ delete_files(Config) -> delete_files(_AgentFiles, []) -> ok; delete_files(AgentDir, [DirName|DirNames]) -> - Dir = filename:join(AgentDir, DirName), + Dir = join(AgentDir, DirName), {ok, Files} = file:list_dir(Dir), - lists:foreach(fun(FName) -> file:delete(filename:join(Dir, FName)) end, + lists:foreach(fun(FName) -> file:delete(join(Dir, FName)) end, Files), delete_files(AgentDir, DirNames). @@ -1481,8 +1478,8 @@ update_usm_mgr(Vsns, Dir) -> end. rewrite_usm_mgr(Dir, ShaKey, DesKey) -> - ?line ok = file:rename(filename:join(Dir,"usm.conf"), - filename:join(Dir,"usm.old")), + ?line ok = file:rename(join(Dir,"usm.conf"), + join(Dir,"usm.old")), Conf = [{"agentEngine", "newUser", "newUser", zeroDotZero, usmHMACSHAAuthProtocol, "", "", usmDESPrivProtocol, "", "", "", ShaKey, DesKey}, @@ -1492,8 +1489,8 @@ rewrite_usm_mgr(Dir, ShaKey, DesKey) -> ok = snmp_config:write_agent_usm_config(Dir, "", Conf). reset_usm_mgr(Dir) -> - ?line ok = file:rename(filename:join(Dir,"usm.old"), - filename:join(Dir,"usm.conf")). + ?line ok = file:rename(join(Dir,"usm.old"), + join(Dir,"usm.conf")). update_community([v3], _Dir) -> @@ -1526,7 +1523,7 @@ write_target_addr_conf(Dir, ManagerIp, UDP, Vsns) -> rewrite_target_addr_conf(Dir, NewPort) -> ?DBG("rewrite_target_addr_conf -> entry with" "~n NewPort: ~p", [NewPort]), - TAFile = filename:join(Dir, "target_addr.conf"), + TAFile = join(Dir, "target_addr.conf"), case file:read_file_info(TAFile) of {ok, _} -> ok; @@ -1546,8 +1543,8 @@ rewrite_target_addr_conf(Dir, NewPort) -> ?DBG("rewrite_target_addr_conf -> NewAddrs: ~p",[NewAddrs]), - ?line ok = file:rename(filename:join(Dir,"target_addr.conf"), - filename:join(Dir,"target_addr.old")), + ?line ok = file:rename(join(Dir,"target_addr.conf"), + join(Dir,"target_addr.old")), ?line ok = snmp_config:write_agent_target_addr_config(Dir, "", NewAddrs). @@ -1565,8 +1562,8 @@ rewrite_target_addr_conf2(_NewPort,O) -> O. reset_target_addr_conf(Dir) -> - ?line ok = file:rename(filename:join(Dir, "target_addr.old"), - filename:join(Dir, "target_addr.conf")). + ?line ok = file:rename(join(Dir, "target_addr.old"), + join(Dir, "target_addr.conf")). write_target_params_conf(Dir, Vsns) -> F = fun(v1) -> {"target_v1", v1, v1, "all-rights", noAuthNoPriv}; @@ -1578,14 +1575,14 @@ write_target_params_conf(Dir, Vsns) -> rewrite_target_params_conf(Dir, SecName, SecLevel) when is_list(SecName) andalso is_atom(SecLevel) -> - ?line ok = file:rename(filename:join(Dir,"target_params.conf"), - filename:join(Dir,"target_params.old")), + ?line ok = file:rename(join(Dir,"target_params.conf"), + join(Dir,"target_params.old")), Conf = [{"target_v3", v3, usm, SecName, SecLevel}], snmp_config:write_agent_target_params_config(Dir, "", Conf). reset_target_params_conf(Dir) -> - ?line ok = file:rename(filename:join(Dir,"target_params.old"), - filename:join(Dir,"target_params.conf")). + ?line ok = file:rename(join(Dir,"target_params.old"), + join(Dir,"target_params.conf")). write_notify_conf(Dir) -> Conf = [{"standard trap", "std_trap", trap}, @@ -1648,6 +1645,9 @@ rpc(Node, F, A) -> rpc:call(Node, snmpa, F, A). +join(Dir, File) -> + filename:join(Dir, File). + %% await_pdu(To) -> %% await_response(To, pdu). %% diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk index 0e48e7ea56..2164121e86 100644 --- a/lib/snmp/vsn.mk +++ b/lib/snmp/vsn.mk @@ -18,6 +18,6 @@ # %CopyrightEnd% APPLICATION = snmp -SNMP_VSN = 4.24 +SNMP_VSN = 4.24.2 PRE_VSN = APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)" diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml index bd0d3d49dd..141d3df38e 100644 --- a/lib/ssh/doc/src/ssh.xml +++ b/lib/ssh/doc/src/ssh.xml @@ -88,6 +88,7 @@ number for SSH.</d> <v>Options = [{Option, Value}]</v> <v>Timeout = infinity | integer(milliseconds)</v> + <d>Negotiation timeout, for connection timeout use the option <c>{connect_timeout, timeout()}</c>.</d> </type> <desc> <p>Connects to an SSH server. No channel is started. This is done diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl index da5750b6c3..4fd347ba8f 100644 --- a/lib/ssh/src/ssh.hrl +++ b/lib/ssh/src/ssh.hrl @@ -127,7 +127,8 @@ userauth_supported_methods , % userauth_methods, userauth_preference, - available_host_keys + available_host_keys, + authenticated = false }). -record(alg, diff --git a/lib/ssh/src/ssh_cli.erl b/lib/ssh/src/ssh_cli.erl index 69b1ab186f..54911e757c 100644 --- a/lib/ssh/src/ssh_cli.erl +++ b/lib/ssh/src/ssh_cli.erl @@ -68,7 +68,8 @@ init([Shell]) -> handle_ssh_msg({ssh_cm, _ConnectionManager, {data, _ChannelId, _Type, Data}}, #state{group = Group} = State) -> - Group ! {self(), {data, binary_to_list(Data)}}, + List = binary_to_list(Data), + to_group(List, Group), {ok, State}; handle_ssh_msg({ssh_cm, ConnectionManager, @@ -188,6 +189,22 @@ terminate(_Reason, _State) -> %%% Internal functions %%-------------------------------------------------------------------- +to_group([], _Group) -> + ok; +to_group([$\^C | Tail], Group) -> + exit(Group, interrupt), + to_group(Tail, Group); +to_group(Data, Group) -> + Func = fun(C) -> C /= $\^C end, + Tail = case lists:splitwith(Func, Data) of + {[], Right} -> + Right; + {Left, Right} -> + Group ! {self(), {data, Left}}, + Right + end, + to_group(Tail, Group). + exec(Cmd) -> case eval(parse(scan(Cmd))) of {error, _} -> diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl index df6175e27c..9de4dd5967 100644 --- a/lib/ssh/src/ssh_connection_handler.erl +++ b/lib/ssh/src/ssh_connection_handler.erl @@ -426,10 +426,10 @@ userauth(#ssh_msg_userauth_info_response{} = Msg, language = "en"}, State) end; -userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client}, +userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client} = Ssh, manager = Pid} = State) -> Pid ! ssh_connected, - {next_state, connected, next_packet(State)}; + {next_state, connected, next_packet(State#state{ssh_params = Ssh#ssh{authenticated = true}})}; userauth(#ssh_msg_userauth_failure{}, #state{ssh_params = #ssh{role = client, diff --git a/lib/ssh/src/ssh_file.erl b/lib/ssh/src/ssh_file.erl index f115a32710..21cdedc156 100644 --- a/lib/ssh/src/ssh_file.erl +++ b/lib/ssh/src/ssh_file.erl @@ -315,5 +315,12 @@ default_user_dir()-> {ok,[[Home|_]]} = init:get_argument(home), UserDir = filename:join(Home, ".ssh"), ok = filelib:ensure_dir(filename:join(UserDir, "dummy")), - ok = file:change_mode(UserDir, ?PERM_700), + {ok,Info} = file:read_file_info(UserDir), + #file_info{mode=Mode} = Info, + case (Mode band 8#777) of + ?PERM_700 -> + ok; + _Other -> + ok = file:change_mode(UserDir, ?PERM_700) + end, UserDir. diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl index beaffdc025..682d766d99 100644 --- a/lib/ssh/src/ssh_transport.erl +++ b/lib/ssh/src/ssh_transport.erl @@ -206,6 +206,7 @@ key_exchange_init_msg(Ssh0) -> kex_init(#ssh{role = Role, opts = Opts, available_host_keys = HostKeyAlgs}) -> Random = ssh_bits:random(16), Compression = case proplists:get_value(compression, Opts, none) of + openssh_zlib -> ["[email protected]", "none"]; zlib -> ["zlib", "none"]; none -> ["none", "zlib"] end, @@ -855,13 +856,14 @@ decrypt(#ssh{decrypt = 'aes128-cbc', decrypt_keys = Key, IV = crypto:next_iv(aes_cbc, Data), {Ssh#ssh{decrypt_ctx = IV}, Dec}. - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Compression %% -%% none REQUIRED no compression -%% zlib OPTIONAL ZLIB (LZ77) compression +%% none REQUIRED no compression +%% zlib OPTIONAL ZLIB (LZ77) compression +%% openssh_zlib OPTIONAL ZLIB (LZ77) compression %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + compress_init(SSH) -> compress_init(SSH, 1). @@ -870,19 +872,32 @@ compress_init(#ssh{compress = none} = Ssh, _) -> compress_init(#ssh{compress = zlib} = Ssh, Level) -> Zlib = zlib:open(), ok = zlib:deflateInit(Zlib, Level), + {ok, Ssh#ssh{compress_ctx = Zlib}}; +compress_init(#ssh{compress = '[email protected]'} = Ssh, Level) -> + Zlib = zlib:open(), + ok = zlib:deflateInit(Zlib, Level), {ok, Ssh#ssh{compress_ctx = Zlib}}. - compress_final(#ssh{compress = none} = Ssh) -> {ok, Ssh}; compress_final(#ssh{compress = zlib, compress_ctx = Context} = Ssh) -> zlib:close(Context), + {ok, Ssh#ssh{compress = none, compress_ctx = undefined}}; +compress_final(#ssh{compress = '[email protected]', authenticated = false} = Ssh) -> + {ok, Ssh}; +compress_final(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh) -> + zlib:close(Context), {ok, Ssh#ssh{compress = none, compress_ctx = undefined}}. compress(#ssh{compress = none} = Ssh, Data) -> {Ssh, Data}; compress(#ssh{compress = zlib, compress_ctx = Context} = Ssh, Data) -> Compressed = zlib:deflate(Context, Data, sync), + {Ssh, list_to_binary(Compressed)}; +compress(#ssh{compress = '[email protected]', authenticated = false} = Ssh, Data) -> + {Ssh, Data}; +compress(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh, Data) -> + Compressed = zlib:deflate(Context, Data, sync), {Ssh, list_to_binary(Compressed)}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -894,18 +909,32 @@ decompress_init(#ssh{decompress = none} = Ssh) -> decompress_init(#ssh{decompress = zlib} = Ssh) -> Zlib = zlib:open(), ok = zlib:inflateInit(Zlib), + {ok, Ssh#ssh{decompress_ctx = Zlib}}; +decompress_init(#ssh{decompress = '[email protected]'} = Ssh) -> + Zlib = zlib:open(), + ok = zlib:inflateInit(Zlib), {ok, Ssh#ssh{decompress_ctx = Zlib}}. decompress_final(#ssh{decompress = none} = Ssh) -> {ok, Ssh}; decompress_final(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh) -> zlib:close(Context), + {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}; +decompress_final(#ssh{decompress = '[email protected]', authenticated = false} = Ssh) -> + {ok, Ssh}; +decompress_final(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh) -> + zlib:close(Context), {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}. decompress(#ssh{decompress = none} = Ssh, Data) -> {Ssh, Data}; decompress(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh, Data) -> Decompressed = zlib:inflate(Context, Data), + {Ssh, list_to_binary(Decompressed)}; +decompress(#ssh{decompress = '[email protected]', authenticated = false} = Ssh, Data) -> + {Ssh, Data}; +decompress(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh, Data) -> + Decompressed = zlib:inflate(Context, Data), {Ssh, list_to_binary(Decompressed)}. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl index 93029c5038..0aa60624bf 100644 --- a/lib/ssh/test/ssh_basic_SUITE.erl +++ b/lib/ssh/test/ssh_basic_SUITE.erl @@ -48,8 +48,8 @@ all() -> close]. groups() -> - [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]}, - {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]}, + [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]}, + {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]}, {dsa_pass_key, [], [pass_phrase]}, {rsa_pass_key, [], [pass_phrase]}, {internal_error, [], [internal_error]} @@ -493,7 +493,24 @@ close(Config) when is_list(Config) -> exit(CM, {shutdown, normal}), ok = ssh:close(CM). - + +openssh_zlib_basic_test() -> + [{doc, "Test basic connection with openssh_zlib"}]. +openssh_zlib_basic_test(Config) -> + SystemDir = filename:join(?config(priv_dir, Config), system), + UserDir = ?config(priv_dir, Config), + + {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir}, + {user_dir, UserDir}, + {failfun, fun ssh_test_lib:failfun/2}]), + ConnectionRef = + ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true}, + {user_dir, UserDir}, + {user_interaction, false}, + {compression, openssh_zlib}]), + ok = ssh:close(ConnectionRef), + ssh:stop_daemon(Pid). + %%-------------------------------------------------------------------- %% Internal functions ------------------------------------------------ %%-------------------------------------------------------------------- diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml index 8875d07535..301ff21068 100644 --- a/lib/ssl/doc/src/notes.xml +++ b/lib/ssl/doc/src/notes.xml @@ -25,7 +25,6 @@ <file>notes.xml</file> </header> <p>This document describes the changes made to the SSL application.</p> - <section><title>SSL 5.3</title> <section><title>Fixed Bugs and Malfunctions</title> @@ -100,7 +99,6 @@ </section> <section><title>SSL 5.2.1</title> - <section><title>Improvements and New Features</title> <list> <item> @@ -126,9 +124,20 @@ </section> </section> - +<section><title>SSL 5.1.2.1</title> +<section><title>Improvements and New Features</title> +<list> + <item> + <p> + Make log_alert configurable as option in ssl, SSLLogLevel + added as option to inets conf file</p> + <p> + Own Id: OTP-11259</p> + </item> +</list> +</section> +</section> <section><title>SSL 5.2</title> - <section><title>Fixed Bugs and Malfunctions</title> <list> <item> diff --git a/lib/ssl/doc/src/ssl.xml b/lib/ssl/doc/src/ssl.xml index 1645eb15f3..6029a09730 100644 --- a/lib/ssl/doc/src/ssl.xml +++ b/lib/ssl/doc/src/ssl.xml @@ -86,7 +86,8 @@ {user_lookup_fun, {fun(), term()}}, {psk_identity, string()}, {srp_identity, {string(), string()}} | {ssl_imp, ssl_imp()} | {reuse_sessions, boolean()} | {reuse_session, fun()} {next_protocols_advertised, [binary()]} | - {client_preferred_next_protocols, client | server, [binary()]} + {client_preferred_next_protocols, client | server, [binary()]} | + {log_alert, boolean()} </c></p> <p><c>transportoption() = {cb_info, {CallbackModule::atom(), DataTag::atom(), ClosedTag::atom(), ErrTag:atom()}} @@ -446,7 +447,8 @@ fun(srp, Username :: string(), UserState :: term()) -> <tag>{psk_identity, string()}</tag> <item>Specifies the server identity hint the server presents to the client. </item> - + <tag>{log_alert, boolean()}</tag> + <item>If false, error reports will not be displayed.</item> </taglist> </section> diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl index 0c1e47311d..dc6898d001 100644 --- a/lib/ssl/src/ssl.erl +++ b/lib/ssl/src/ssl.erl @@ -219,4 +219,3 @@ format_error(Error) -> random_bytes(N) -> tls:random_bytes(N). - diff --git a/lib/ssl/src/ssl_cipher.erl b/lib/ssl/src/ssl_cipher.erl index ec5d793d65..09aad8e414 100644 --- a/lib/ssl/src/ssl_cipher.erl +++ b/lib/ssl/src/ssl_cipher.erl @@ -36,7 +36,7 @@ decipher/5, cipher/5, suite/1, suites/1, anonymous_suites/0, psk_suites/1, srp_suites/0, openssl_suite/1, openssl_suite_name/1, filter/2, filter_suites/1, - hash_algorithm/1, sign_algorithm/1]). + hash_algorithm/1, sign_algorithm/1, is_acceptable_hash/2]). -compile(inline). @@ -1009,6 +1009,7 @@ filter(DerCert, Ciphers) -> filter_keyuse(OtpCert, (Ciphers -- rsa_keyed_suites()) -- dsa_signed_suites(), [], ecdhe_ecdsa_suites()) end, + case public_key:pkix_sign_types(SigAlg#'SignatureAlgorithm'.algorithm) of {_, rsa} -> Ciphers1 -- ecdsa_signed_suites(); @@ -1191,15 +1192,15 @@ hash_size(md5) -> hash_size(sha) -> 20; %% Uncomment when adding cipher suite that needs it -%% hash_size(sha224) -> -%% 28; +hash_size(sha224) -> + 28; hash_size(sha256) -> 32; hash_size(sha384) -> - 48. + 48; %% Uncomment when adding cipher suite that needs it -%% hash_size(sha512) -> -%% 64. +hash_size(sha512) -> + 64. %% RFC 5246: 6.2.3.2. CBC Block Cipher %% @@ -1259,15 +1260,15 @@ generic_stream_cipher_from_bin(T, HashSz) -> %% SSL 3.0 and TLS 1.0 as it is not strictly required and breaks %% interopability with for instance Google. is_correct_padding(#generic_block_cipher{padding_length = Len, - padding = Padding}, {3, N}) + padding = Padding}, {3, N}) when N == 0; N == 1 -> Len == byte_size(Padding); %% Padding must be check in TLS 1.1 and after is_correct_padding(#generic_block_cipher{padding_length = Len, - padding = Padding}, _) -> + padding = Padding}, _) -> Len == byte_size(Padding) andalso list_to_binary(lists:duplicate(Len, Len)) == Padding. - + get_padding(Length, BlockSize) -> get_padding_aux(BlockSize, Length rem BlockSize). @@ -1291,7 +1292,7 @@ next_iv(Bin, IV) -> rsa_signed_suites() -> dhe_rsa_suites() ++ rsa_suites() ++ psk_rsa_suites() ++ srp_rsa_suites() ++ - ecdh_rsa_suites(). + ecdh_rsa_suites() ++ ecdhe_rsa_suites(). rsa_keyed_suites() -> dhe_rsa_suites() ++ rsa_suites() ++ diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl index 14db4a6067..de8d20d399 100644 --- a/lib/ssl/src/ssl_internal.hrl +++ b/lib/ssl/src/ssl_internal.hrl @@ -111,7 +111,8 @@ %% This option should only be set to true by inet_tls_dist erl_dist = false, next_protocols_advertised = undefined, %% [binary()], - next_protocol_selector = undefined %% fun([binary()]) -> binary()) + next_protocol_selector = undefined, %% fun([binary()]) -> binary()) + log_alert }). -record(socket_options, diff --git a/lib/ssl/src/ssl_manager.erl b/lib/ssl/src/ssl_manager.erl index 7af4a68461..4d5eaeb607 100644 --- a/lib/ssl/src/ssl_manager.erl +++ b/lib/ssl/src/ssl_manager.erl @@ -30,7 +30,7 @@ lookup_trusted_cert/4, new_session_id/1, clean_cert_db/2, register_session/2, register_session/3, invalidate_session/2, - invalidate_session/3, clear_pem_cache/0]). + invalidate_session/3, clear_pem_cache/0, manager_name/1]). % Spawn export -export([init_session_validator/1]). @@ -64,6 +64,18 @@ %%==================================================================== %% API %%==================================================================== + +%%-------------------------------------------------------------------- +-spec manager_name(normal | dist) -> atom(). +%% +%% Description: Returns the registered name of the ssl manager process +%% in the operation modes 'normal' and 'dist'. +%%-------------------------------------------------------------------- +manager_name(normal) -> + ?MODULE; +manager_name(dist) -> + list_to_atom(atom_to_list(?MODULE) ++ "dist"). + %%-------------------------------------------------------------------- -spec start_link(list()) -> {ok, pid()} | ignore | {error, term()}. %% @@ -71,7 +83,8 @@ %% and certificate caching. %%-------------------------------------------------------------------- start_link(Opts) -> - gen_server:start_link({local, ?MODULE}, ?MODULE, [?MODULE, Opts], []). + DistMangerName = manager_name(normal), + gen_server:start_link({local, DistMangerName}, ?MODULE, [DistMangerName, Opts], []). %%-------------------------------------------------------------------- -spec start_link_dist(list()) -> {ok, pid()} | ignore | {error, term()}. @@ -80,7 +93,8 @@ start_link(Opts) -> %% be used by the erlang distribution. Note disables soft upgrade! %%-------------------------------------------------------------------- start_link_dist(Opts) -> - gen_server:start_link({local, ssl_manager_dist}, ?MODULE, [ssl_manager_dist, Opts], []). + DistMangerName = manager_name(dist), + gen_server:start_link({local, DistMangerName}, ?MODULE, [DistMangerName, Opts], []). %%-------------------------------------------------------------------- -spec connection_init(binary()| {der, list()}, client | server) -> @@ -100,7 +114,7 @@ connection_init(Trustedcerts, Role) -> %%-------------------------------------------------------------------- -spec cache_pem_file(binary(), term()) -> {ok, term()} | {error, reason()}. %% -%% Description: Cach a pem file and return its content. +%% Description: Cache a pem file and return its content. %%-------------------------------------------------------------------- cache_pem_file(File, DbHandle) -> MD5 = crypto:hash(md5, File), @@ -120,7 +134,7 @@ cache_pem_file(File, DbHandle) -> %%-------------------------------------------------------------------- clear_pem_cache() -> %% Not supported for distribution at the moement, should it be? - put(ssl_manager, ssl_manager), + put(ssl_manager, manager_name(normal)), call(unconditionally_clear_pem_cache). %%-------------------------------------------------------------------- diff --git a/lib/ssl/src/tls.erl b/lib/ssl/src/tls.erl index bb02695c12..b220a48f73 100644 --- a/lib/ssl/src/tls.erl +++ b/lib/ssl/src/tls.erl @@ -663,7 +663,8 @@ handle_options(Opts0, _Role) -> handle_option(next_protocols_advertised, Opts, undefined), next_protocol_selector = make_next_protocol_selector( - handle_option(client_preferred_next_protocols, Opts, undefined)) + handle_option(client_preferred_next_protocols, Opts, undefined)), + log_alert = handle_option(log_alert, Opts, true) }, CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}), @@ -675,7 +676,7 @@ handle_options(Opts0, _Role) -> reuse_session, reuse_sessions, ssl_imp, cb_info, renegotiate_at, secure_renegotiate, hibernate_after, erl_dist, next_protocols_advertised, - client_preferred_next_protocols], + client_preferred_next_protocols, log_alert], SockOpts = lists:foldl(fun(Key, PropList) -> proplists:delete(Key, PropList) @@ -840,6 +841,9 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro validate_option(client_preferred_next_protocols, undefined) -> undefined; +validate_option(log_alert, Value) when Value == true; + Value == false -> + Value; validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) -> case tls_record:highest_protocol_version([]) of {3,0} -> diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl index 246fecf34a..0415ea6ecc 100644 --- a/lib/ssl/src/tls_connection.erl +++ b/lib/ssl/src/tls_connection.erl @@ -76,7 +76,8 @@ negotiated_version, % tls_version() client_certificate_requested = false, key_algorithm, % atom as defined by cipher_suite - hashsign_algorithm, % atom as defined by cipher_suite + hashsign_algorithm = {undefined, undefined}, + cert_hashsign_algorithm, public_key_info, % PKIX: {Algorithm, PublicKey, PublicKeyParams} private_key, % PKIX: #'RSAPrivateKey'{} diffie_hellman_params, % PKIX: #'DHParameter'{} relevant for server side @@ -89,7 +90,6 @@ cert_db_ref, % ref() bytes_to_read, % integer(), # bytes to read in passive mode user_data_buffer, % binary() - log_alert, % boolean() renegotiation, % {boolean(), From | internal | peer} start_or_recv_from, % "gen_fsm From" timer, % start_or_recv_timer @@ -367,6 +367,7 @@ hello(#hello_request{}, #state{role = client} = State0) -> next_state(hello, hello, Record, State); hello(#server_hello{cipher_suite = CipherSuite, + hash_signs = HashSign, compression_method = Compression} = Hello, #state{session = #session{session_id = OldId}, connection_states = ConnectionStates0, @@ -389,9 +390,10 @@ hello(#server_hello{cipher_suite = CipherSuite, _ -> NextProtocol end, - + State = State0#state{key_algorithm = KeyAlgorithm, - hashsign_algorithm = default_hashsign(Version, KeyAlgorithm), + hashsign_algorithm = + negotiated_hashsign(HashSign, KeyAlgorithm, Version), negotiated_version = Version, connection_states = ConnectionStates, premaster_secret = PremasterSecret, @@ -407,22 +409,28 @@ hello(#server_hello{cipher_suite = CipherSuite, end end; -hello(Hello = #client_hello{client_version = ClientVersion}, +hello(Hello = #client_hello{client_version = ClientVersion, + hash_signs = HashSigns}, State = #state{connection_states = ConnectionStates0, port = Port, session = #session{own_certificate = Cert} = Session0, renegotiation = {Renegotiation, _}, session_cache = Cache, session_cache_cb = CacheCb, ssl_options = SslOpts}) -> + + HashSign = tls_handshake:select_hashsign(HashSigns, Cert), case tls_handshake:hello(Hello, SslOpts, {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert}, Renegotiation) of - {Version, {Type, Session}, ConnectionStates, ProtocolsToAdvertise, + {Version, {Type, #session{cipher_suite = CipherSuite} = Session}, ConnectionStates, ProtocolsToAdvertise, EcPointFormats, EllipticCurves} -> + {KeyAlgorithm, _, _, _} = ssl_cipher:suite_definition(CipherSuite), + NH = negotiated_hashsign(HashSign, KeyAlgorithm, Version), do_server_hello(Type, ProtocolsToAdvertise, EcPointFormats, EllipticCurves, State#state{connection_states = ConnectionStates, negotiated_version = Version, session = Session, + hashsign_algorithm = NH, client_ecc = {EllipticCurves, EcPointFormats}}); #alert{} = Alert -> handle_own_alert(Alert, ClientVersion, hello, State) @@ -527,7 +535,7 @@ certify(#certificate{} = Cert, Opts#ssl_options.verify, Opts#ssl_options.verify_fun, Role) of {PeerCert, PublicKeyInfo} -> - handle_peer_cert(PeerCert, PublicKeyInfo, + handle_peer_cert(Role, PeerCert, PublicKeyInfo, State#state{client_certificate_requested = false}); #alert{} = Alert -> handle_own_alert(Alert, Version, certify, State) @@ -553,9 +561,11 @@ certify(#server_key_exchange{} = Msg, #state{role = client, key_algorithm = rsa} = State) -> handle_unexpected_message(Msg, certify_server_keyexchange, State); -certify(#certificate_request{}, State0) -> +certify(#certificate_request{hashsign_algorithms = HashSigns}, + #state{session = #session{own_certificate = Cert}} = State0) -> + HashSign = tls_handshake:select_hashsign(HashSigns, Cert), {Record, State} = next_record(State0#state{client_certificate_requested = true}), - next_state(certify, certify, Record, State); + next_state(certify, certify, Record, State#state{cert_hashsign_algorithm = HashSign}); %% PSK and RSA_PSK might bypass the Server-Key-Exchange certify(#server_hello_done{}, @@ -758,21 +768,18 @@ cipher(#hello_request{}, State0) -> cipher(#certificate_verify{signature = Signature, hashsign_algorithm = CertHashSign}, #state{role = server, - public_key_info = PublicKeyInfo, + public_key_info = {Algo, _, _} =PublicKeyInfo, negotiated_version = Version, session = #session{master_secret = MasterSecret}, - hashsign_algorithm = ConnectionHashSign, tls_handshake_history = Handshake } = State0) -> - HashSign = case CertHashSign of - {_, _} -> CertHashSign; - _ -> ConnectionHashSign - end, + + HashSign = tls_handshake:select_cert_hashsign(CertHashSign, Algo, Version), case tls_handshake:certificate_verify(Signature, PublicKeyInfo, Version, HashSign, MasterSecret, Handshake) of valid -> {Record, State} = next_record(State0), - next_state(cipher, cipher, Record, State); + next_state(cipher, cipher, Record, State#state{cert_hashsign_algorithm = HashSign}); #alert{} = Alert -> handle_own_alert(Alert, Version, cipher, State0) end; @@ -978,7 +985,7 @@ handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protoc handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protocol = NextProtocol} = State) -> {reply, {ok, NextProtocol}, StateName, State, get_timeout(State)}; -handle_sync_event({set_opts, Opts0}, _From, StateName, +handle_sync_event({set_opts, Opts0}, _From, StateName0, #state{socket_options = Opts1, socket = Socket, transport_cb = Transport, @@ -987,11 +994,12 @@ handle_sync_event({set_opts, Opts0}, _From, StateName, State1 = State0#state{socket_options = Opts}, if Opts#socket_options.active =:= false -> - {reply, Reply, StateName, State1, get_timeout(State1)}; + {reply, Reply, StateName0, State1, get_timeout(State1)}; Buffer =:= <<>>, Opts1#socket_options.active =:= false -> %% Need data, set active once {Record, State2} = next_record_if_active(State1), - case next_state(StateName, StateName, Record, State2) of + %% Note: Renogotiation may cause StateName0 =/= StateName + case next_state(StateName0, StateName0, Record, State2) of {next_state, StateName, State, Timeout} -> {reply, Reply, StateName, State, Timeout}; {stop, Reason, State} -> @@ -999,13 +1007,14 @@ handle_sync_event({set_opts, Opts0}, _From, StateName, end; Buffer =:= <<>> -> %% Active once already set - {reply, Reply, StateName, State1, get_timeout(State1)}; + {reply, Reply, StateName0, State1, get_timeout(State1)}; true -> case read_application_data(<<>>, State1) of Stop = {stop,_,_} -> Stop; {Record, State2} -> - case next_state(StateName, StateName, Record, State2) of + %% Note: Renogotiation may cause StateName0 =/= StateName + case next_state(StateName0, StateName0, Record, State2) of {next_state, StateName, State, Timeout} -> {reply, Reply, StateName, State, Timeout}; {stop, Reason, State} -> @@ -1238,9 +1247,9 @@ ssl_init(SslOpts, Role) -> {ok, CertDbRef, CertDbHandle, FileRefHandle, CacheHandle, OwnCert, PrivateKey, DHParams}. init_manager_name(false) -> - put(ssl_manager, ssl_manager); + put(ssl_manager, ssl_manager:manager_name(normal)); init_manager_name(true) -> - put(ssl_manager, ssl_manager_dist). + put(ssl_manager, ssl_manager:manager_name(dist)). init_certificates(#ssl_options{cacerts = CaCerts, cacertfile = CACertFile, @@ -1368,25 +1377,34 @@ sync_send_all_state_event(FsmPid, Event) -> {error, closed} end. -%% We do currently not support cipher suites that use fixed DH. -%% If we want to implement that we should add a code -%% here to extract DH parameters form cert. -handle_peer_cert(PeerCert, PublicKeyInfo, - #state{session = Session} = State0) -> +handle_peer_cert(Role, PeerCert, PublicKeyInfo, + #state{session = #session{cipher_suite = CipherSuite} = Session} = State0) -> State1 = State0#state{session = Session#session{peer_certificate = PeerCert}, public_key_info = PublicKeyInfo}, - State2 = case PublicKeyInfo of - {?'id-ecPublicKey', #'ECPoint'{point = _ECPoint} = PublicKey, PublicKeyParams} -> - ECDHKey = public_key:generate_key(PublicKeyParams), - State3 = State1#state{diffie_hellman_keys = ECDHKey}, - ec_dh_master_secret(ECDHKey, PublicKey, State3); - - _ -> State1 - end, + {KeyAlg,_,_,_} = ssl_cipher:suite_definition(CipherSuite), + State2 = handle_peer_cert_key(Role, PeerCert, PublicKeyInfo, KeyAlg, State1), + {Record, State} = next_record(State2), next_state(certify, certify, Record, State). +handle_peer_cert_key(client, _, + {?'id-ecPublicKey', #'ECPoint'{point = _ECPoint} = PublicKey, PublicKeyParams}, + KeyAlg, State) when KeyAlg == ecdh_rsa; + KeyAlg == ecdh_ecdsa -> + ECDHKey = public_key:generate_key(PublicKeyParams), + ec_dh_master_secret(ECDHKey, PublicKey, State#state{diffie_hellman_keys = ECDHKey}); + +%% We do currently not support cipher suites that use fixed DH. +%% If we want to implement that the following clause can be used +%% to extract DH parameters form cert. +%% handle_peer_cert_key(client, _PeerCert, {?dhpublicnumber, PublicKey, PublicKeyParams}, {_,SignAlg}, +%% #state{diffie_hellman_keys = {_, MyPrivatKey}} = State) when SignAlg == dh_rsa; +%% SignAlg == dh_dss -> +%% dh_master_secret(PublicKeyParams, PublicKey, MyPrivatKey, State); +handle_peer_cert_key(_, _, _, _, State) -> + State. + certify_client(#state{client_certificate_requested = true, role = client, connection_states = ConnectionStates0, transport_cb = Transport, @@ -1413,10 +1431,9 @@ verify_client_cert(#state{client_certificate_requested = true, role = client, private_key = PrivateKey, session = #session{master_secret = MasterSecret, own_certificate = OwnCert}, - hashsign_algorithm = HashSign, + cert_hashsign_algorithm = HashSign, tls_handshake_history = Handshake0} = State) -> - %%TODO: for TLS 1.2 we can choose a different/stronger HashSign combination for this. case tls_handshake:client_certificate_verify(OwnCert, MasterSecret, Version, HashSign, PrivateKey, Handshake0) of #certificate_verify{} = Verified -> @@ -1559,8 +1576,7 @@ server_hello(ServerHello, #state{transport_cb = Transport, Transport:send(Socket, BinMsg), State#state{connection_states = ConnectionStates1, tls_handshake_history = Handshake1, - key_algorithm = KeyAlgorithm, - hashsign_algorithm = default_hashsign(Version, KeyAlgorithm)}. + key_algorithm = KeyAlgorithm}. server_hello_done(#state{transport_cb = Transport, socket = Socket, @@ -1936,7 +1952,7 @@ request_client_cert(#state{ssl_options = #ssl_options{verify = verify_peer}, negotiated_version = Version, socket = Socket, transport_cb = Transport} = State) -> - Msg = tls_handshake:certificate_request(ConnectionStates0, CertDbHandle, CertDbRef), + Msg = tls_handshake:certificate_request(ConnectionStates0, CertDbHandle, CertDbRef, Version), {BinMsg, ConnectionStates, Handshake} = encode_handshake(Msg, Version, ConnectionStates0, Handshake0), Transport:send(Socket, BinMsg), @@ -2013,12 +2029,13 @@ handle_server_key(#server_key_exchange{exchange_keys = Keys}, #state{key_algorithm = KeyAlg, negotiated_version = Version} = State) -> Params = tls_handshake:decode_server_key(Keys, KeyAlg, Version), - HashSign = connection_hashsign(Params#server_key_params.hashsign, State), - case HashSign of - {_, SignAlgo} when SignAlgo == anon; SignAlgo == ecdh_anon -> - server_master_secret(Params#server_key_params.params, State); - _ -> - verify_server_key(Params, HashSign, State) + HashSign = negotiated_hashsign(Params#server_key_params.hashsign, KeyAlg, Version), + case is_anonymous(KeyAlg) of + true -> + server_master_secret(Params#server_key_params.params, + State#state{hashsign_algorithm = HashSign}); + false -> + verify_server_key(Params, HashSign, State#state{hashsign_algorithm = HashSign}) end. verify_server_key(#server_key_params{params = Params, @@ -2458,7 +2475,7 @@ do_format_reply(list, _,_, Data) -> binary_to_list(Data). header(0, <<>>) -> - []; + <<>>; header(_, <<>>) -> []; header(0, Binary) -> @@ -2677,7 +2694,6 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User, tls_cipher_texts = [], user_application = {Monitor, User}, user_data_buffer = <<>>, - log_alert = true, session_cache_cb = SessionCacheCb, renegotiation = {false, first}, start_or_recv_from = undefined, @@ -2778,12 +2794,11 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State, _Timeout}) -> handle_alerts(Alerts, handle_alert(Alert, StateName, State)). handle_alert(#alert{level = ?FATAL} = Alert, StateName, - #state{socket = Socket, transport_cb = Transport, - start_or_recv_from = From, host = Host, + #state{socket = Socket, transport_cb = Transport, ssl_options = SslOpts, start_or_recv_from = From, host = Host, port = Port, session = Session, user_application = {_Mon, Pid}, - log_alert = Log, role = Role, socket_options = Opts} = State) -> + role = Role, socket_options = Opts} = State) -> invalidate_session(Role, Host, Port, Session), - log_alert(Log, StateName, Alert), + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), alert_user(Transport, Socket, StateName, Opts, Pid, From, Alert, Role), {stop, normal, State}; @@ -2793,21 +2808,21 @@ handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert, {stop, {shutdown, peer_close}, State}; handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName, - #state{log_alert = Log, renegotiation = {true, internal}} = State) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), handle_normal_shutdown(Alert, StateName, State), {stop, {shutdown, peer_close}, State}; handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName, - #state{log_alert = Log, renegotiation = {true, From}} = State0) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), gen_fsm:reply(From, {error, renegotiation_rejected}), {Record, State} = next_record(State0), next_state(StateName, connection, Record, State); handle_alert(#alert{level = ?WARNING, description = ?USER_CANCELED} = Alert, StateName, - #state{log_alert = Log} = State0) -> - log_alert(Log, StateName, Alert), + #state{ssl_options = SslOpts} = State0) -> + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), {Record, State} = next_record(State0), next_state(StateName, StateName, Record, State). @@ -2845,7 +2860,7 @@ handle_own_alert(Alert, Version, StateName, #state{transport_cb = Transport, socket = Socket, connection_states = ConnectionStates, - log_alert = Log} = State) -> + ssl_options = SslOpts} = State) -> try %% Try to tell the other side {BinMsg, _} = encode_alert(Alert, Version, ConnectionStates), @@ -2855,7 +2870,7 @@ handle_own_alert(Alert, Version, StateName, ignore end, try %% Try to tell the local user - log_alert(Log, StateName, Alert), + log_alert(SslOpts#ssl_options.log_alert, StateName, Alert), handle_normal_shutdown(Alert,StateName, State) catch _:_ -> ok @@ -2996,11 +3011,6 @@ get_pending_connection_state_prf(CStates, Direction) -> CS = tls_record:pending_connection_state(CStates, Direction), CS#connection_state.security_parameters#security_parameters.prf_algorithm. -connection_hashsign(HashSign = {_, _}, _State) -> - HashSign; -connection_hashsign(_, #state{hashsign_algorithm = HashSign}) -> - HashSign. - %% RFC 5246, Sect. 7.4.1.4.1. Signature Algorithms %% If the client does not send the signature_algorithms extension, the %% server MUST do the following: @@ -3015,12 +3025,18 @@ connection_hashsign(_, #state{hashsign_algorithm = HashSign}) -> %% - If the negotiated key exchange algorithm is one of (ECDH_ECDSA, %% ECDHE_ECDSA), behave as if the client had sent value {sha1,ecdsa}. +negotiated_hashsign(undefined, Algo, Version) -> + default_hashsign(Version, Algo); +negotiated_hashsign(HashSign = {_, _}, _, _) -> + HashSign. + default_hashsign(_Version = {Major, Minor}, KeyExchange) - when Major == 3 andalso Minor >= 3 andalso + when Major >= 3 andalso Minor >= 3 andalso (KeyExchange == rsa orelse KeyExchange == dhe_rsa orelse KeyExchange == dh_rsa orelse KeyExchange == ecdhe_rsa orelse + KeyExchange == ecdh_rsa orelse KeyExchange == srp_rsa) -> {sha, rsa}; default_hashsign(_Version, KeyExchange) @@ -3028,12 +3044,12 @@ default_hashsign(_Version, KeyExchange) KeyExchange == dhe_rsa; KeyExchange == dh_rsa; KeyExchange == ecdhe_rsa; + KeyExchange == ecdh_rsa; KeyExchange == srp_rsa -> {md5sha, rsa}; default_hashsign(_Version, KeyExchange) when KeyExchange == ecdhe_ecdsa; - KeyExchange == ecdh_ecdsa; - KeyExchange == ecdh_rsa -> + KeyExchange == ecdh_ecdsa -> {sha, ecdsa}; default_hashsign(_Version, KeyExchange) when KeyExchange == dhe_dss; @@ -3082,3 +3098,13 @@ select_curve(#state{client_ecc = {[Curve|_], _}}) -> {namedCurve, Curve}; select_curve(_) -> {namedCurve, ?secp256k1}. + +is_anonymous(Algo) when Algo == dh_anon; + Algo == ecdh_anon; + Algo == psk; + Algo == dhe_psk; + Algo == rsa_psk; + Algo == srp_anon -> + true; +is_anonymous(_) -> + false. diff --git a/lib/ssl/src/tls_handshake.erl b/lib/ssl/src/tls_handshake.erl index 51fd2e1dc9..6cc6e9e885 100644 --- a/lib/ssl/src/tls_handshake.erl +++ b/lib/ssl/src/tls_handshake.erl @@ -34,11 +34,12 @@ -export([master_secret/4, client_hello/8, server_hello/7, hello/4, hello_request/0, certify/7, certificate/4, client_certificate_verify/6, certificate_verify/6, verify_signature/5, - certificate_request/3, key_exchange/3, server_key_exchange_hash/2, + certificate_request/4, key_exchange/3, server_key_exchange_hash/2, finished/5, verify_connection/6, get_tls_handshake/3, decode_client_key/3, decode_server_key/3, server_hello_done/0, encode_handshake/2, init_handshake_history/0, update_handshake_history/2, - decrypt_premaster_secret/2, prf/5, next_protocol/1]). + decrypt_premaster_secret/2, prf/5, next_protocol/1, select_hashsign/2, + select_cert_hashsign/3]). -export([dec_hello_extensions/2]). @@ -82,7 +83,7 @@ client_hello(Host, Port, ConnectionStates, renegotiation_info = renegotiation_info(client, ConnectionStates, Renegotiation), srp = SRP, - hash_signs = default_hash_signs(), + hash_signs = advertised_hash_signs(Version), ec_point_formats = EcPointFormats, elliptic_curves = EllipticCurves, next_protocol_negotiation = @@ -152,7 +153,6 @@ hello(#server_hello{cipher_suite = CipherSuite, server_version = Version, #ssl_options{secure_renegotiate = SecureRenegotation, next_protocol_selector = NextProtocolSelector, versions = SupportedVersions}, ConnectionStates0, Renegotiation) -> - %%TODO: select hash and signature algorigthm case tls_record:is_acceptable_version(Version, SupportedVersions) of true -> case handle_renegotiation_info(client, Info, ConnectionStates0, @@ -177,7 +177,6 @@ hello(#server_hello{cipher_suite = CipherSuite, server_version = Version, hello(#client_hello{client_version = ClientVersion} = Hello, #ssl_options{versions = Versions} = SslOpts, {Port, Session0, Cache, CacheCb, ConnectionStates0, Cert}, Renegotiation) -> - %% TODO: select hash and signature algorithm Version = select_version(ClientVersion, Versions), case tls_record:is_acceptable_version(Version, Versions) of true -> @@ -298,7 +297,7 @@ client_certificate_verify(undefined, _, _, _, _, _) -> client_certificate_verify(_, _, _, _, undefined, _) -> ignore; client_certificate_verify(OwnCert, MasterSecret, Version, - {HashAlgo, SignAlgo}, + {HashAlgo, _} = HashSign, PrivateKey, {Handshake, _}) -> case public_key:pkix_is_fixed_dh_cert(OwnCert) of true -> @@ -307,7 +306,7 @@ client_certificate_verify(OwnCert, MasterSecret, Version, Hashes = calc_certificate_verify(Version, HashAlgo, MasterSecret, Handshake), Signed = digitally_signed(Version, Hashes, HashAlgo, PrivateKey), - #certificate_verify{signature = Signed, hashsign_algorithm = {HashAlgo, SignAlgo}} + #certificate_verify{signature = Signed, hashsign_algorithm = HashSign} end. %%-------------------------------------------------------------------- @@ -349,17 +348,17 @@ verify_signature(_Version, Hash, {HashAlgo, ecdsa}, Signature, {?'id-ecPublicKey public_key:verify({digest, Hash}, HashAlgo, Signature, {PublicKey, PublicKeyParams}). %%-------------------------------------------------------------------- --spec certificate_request(#connection_states{}, db_handle(), certdb_ref()) -> +-spec certificate_request(#connection_states{}, db_handle(), certdb_ref(), tls_version()) -> #certificate_request{}. %% %% Description: Creates a certificate_request message, called by the server. %%-------------------------------------------------------------------- -certificate_request(ConnectionStates, CertDbHandle, CertDbRef) -> +certificate_request(ConnectionStates, CertDbHandle, CertDbRef, Version) -> #connection_state{security_parameters = #security_parameters{cipher_suite = CipherSuite}} = tls_record:pending_connection_state(ConnectionStates, read), Types = certificate_types(CipherSuite), - HashSigns = default_hash_signs(), + HashSigns = advertised_hash_signs(Version), Authorities = certificate_authorities(CertDbHandle, CertDbRef), #certificate_request{ certificate_types = Types, @@ -687,6 +686,54 @@ prf({3,1}, Secret, Label, Seed, WantedLength) -> prf({3,_N}, Secret, Label, Seed, WantedLength) -> {ok, ssl_tls1:prf(?SHA256, Secret, Label, Seed, WantedLength)}. + +%%-------------------------------------------------------------------- +-spec select_hashsign(#hash_sign_algos{}| undefined, undefined | term()) -> + [{atom(), atom()}] | undefined. + +%% +%% Description: +%%-------------------------------------------------------------------- +select_hashsign(_, undefined) -> + {null, anon}; +select_hashsign(undefined, Cert) -> + #'OTPCertificate'{tbsCertificate = TBSCert} = public_key:pkix_decode_cert(Cert, otp), + #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo, + select_cert_hashsign(undefined, Algo, {undefined, undefined}); +select_hashsign(#hash_sign_algos{hash_sign_algos = HashSigns}, Cert) -> + #'OTPCertificate'{tbsCertificate = TBSCert} =public_key:pkix_decode_cert(Cert, otp), + #'OTPSubjectPublicKeyInfo'{algorithm = {_,Algo, _}} = TBSCert#'OTPTBSCertificate'.subjectPublicKeyInfo, + DefaultHashSign = {_, Sign} = select_cert_hashsign(undefined, Algo, {undefined, undefined}), + case lists:filter(fun({sha, dsa}) -> + true; + ({_, dsa}) -> + false; + ({Hash, S}) when S == Sign -> + ssl_cipher:is_acceptable_hash(Hash, proplists:get_value(hashs, crypto:supports())); + (_) -> + false + end, HashSigns) of + [] -> + DefaultHashSign; + [HashSign| _] -> + HashSign + end. +%%-------------------------------------------------------------------- +-spec select_cert_hashsign(#hash_sign_algos{}| undefined, oid(), tls_version()) -> + [{atom(), atom()}]. + +%% +%% Description: +%%-------------------------------------------------------------------- +select_cert_hashsign(HashSign, _, {Major, Minor}) when HashSign =/= undefined andalso Major >= 3 andalso Minor >= 3 -> + HashSign; +select_cert_hashsign(undefined,?'id-ecPublicKey', _) -> + {sha, ecdsa}; +select_cert_hashsign(undefined, ?rsaEncryption, _) -> + {md5sha, rsa}; +select_cert_hashsign(undefined, ?'id-dsa', _) -> + {sha, dsa}. + %%-------------------------------------------------------------------- %%% Internal functions %%-------------------------------------------------------------------- @@ -1066,7 +1113,7 @@ dec_hs(_Version, ?CLIENT_HELLO, <<?BYTE(Major), ?BYTE(Minor), Random:32/binary, cipher_suites = from_2bytes(CipherSuites), compression_methods = Comp_methods, renegotiation_info = RenegotiationInfo, - srp = SRP, + srp = SRP, hash_signs = HashSigns, elliptic_curves = EllipticCurves, next_protocol_negotiation = NextProtocolNegotiation @@ -1179,12 +1226,12 @@ dec_ske_params(Len, Keys, Version) -> dec_ske_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo), ?UINT16(0)>>, {Major, Minor}) - when Major == 3, Minor >= 3 -> + when Major >= 3, Minor >= 3 -> HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)}, {Params, HashSign, <<>>}; dec_ske_signature(Params, <<?BYTE(HashAlgo), ?BYTE(SignAlgo), ?UINT16(Len), Signature:Len/binary>>, {Major, Minor}) - when Major == 3, Minor >= 3 -> + when Major >= 3, Minor >= 3 -> HashSign = {ssl_cipher:hash_algorithm(HashAlgo), ssl_cipher:sign_algorithm(SignAlgo)}, {Params, HashSign, Signature}; dec_ske_signature(Params, <<>>, _) -> @@ -1219,11 +1266,11 @@ dec_server_key(<<?BYTE(?NAMED_CURVE), ?UINT16(CurveID), params_bin = BinMsg, hashsign = HashSign, signature = Signature}; -dec_server_key(<<?UINT16(Len), PskIdentityHint:Len/binary>> = KeyStruct, +dec_server_key(<<?UINT16(Len), PskIdentityHint:Len/binary, _/binary>> = KeyStruct, KeyExchange, Version) when KeyExchange == ?KEY_EXCHANGE_PSK; KeyExchange == ?KEY_EXCHANGE_RSA_PSK -> Params = #server_psk_params{ - hint = PskIdentityHint}, + hint = PskIdentityHint}, {BinMsg, HashSign, Signature} = dec_ske_params(Len + 2, KeyStruct, Version), #server_key_params{params = Params, params_bin = BinMsg, @@ -1236,8 +1283,8 @@ dec_server_key(<<?UINT16(Len), IdentityHint:Len/binary, ?KEY_EXCHANGE_DHE_PSK, Version) -> DHParams = #server_dh_params{dh_p = P, dh_g = G, dh_y = Y}, Params = #server_dhe_psk_params{ - hint = IdentityHint, - dh_params = DHParams}, + hint = IdentityHint, + dh_params = DHParams}, {BinMsg, HashSign, Signature} = dec_ske_params(Len + PLen + GLen + YLen + 8, KeyStruct, Version), #server_key_params{params = Params, params_bin = BinMsg, @@ -1297,16 +1344,14 @@ dec_hello_extensions(<<?UINT16(?SIGNATURE_ALGORITHMS_EXT), ?UINT16(Len), dec_hello_extensions(<<?UINT16(?ELLIPTIC_CURVES_EXT), ?UINT16(Len), ExtData:Len/binary, Rest/binary>>, Acc) -> - EllipticCurveListLen = Len - 2, - <<?UINT16(EllipticCurveListLen), EllipticCurveList/binary>> = ExtData, + <<?UINT16(_), EllipticCurveList/binary>> = ExtData, EllipticCurves = [ssl_tls1:enum_to_oid(X) || <<X:16>> <= EllipticCurveList], dec_hello_extensions(Rest, [{elliptic_curves, #elliptic_curves{elliptic_curve_list = EllipticCurves}} | Acc]); dec_hello_extensions(<<?UINT16(?EC_POINT_FORMATS_EXT), ?UINT16(Len), ExtData:Len/binary, Rest/binary>>, Acc) -> - ECPointFormatListLen = Len - 1, - <<?BYTE(ECPointFormatListLen), ECPointFormatList/binary>> = ExtData, + <<?BYTE(_), ECPointFormatList/binary>> = ExtData, ECPointFormats = binary_to_list(ECPointFormatList), dec_hello_extensions(Rest, [{ec_point_formats, #ec_point_formats{ec_point_format_list = ECPointFormats}} | Acc]); @@ -1755,26 +1800,6 @@ apply_user_fun(Fun, OtpCert, ExtensionOrError, UserState0, SslState) -> {unknown, {SslState, UserState}} end. --define(TLSEXT_SIGALG_RSA(MD), {MD, rsa}). --define(TLSEXT_SIGALG_DSA(MD), {MD, dsa}). --define(TLSEXT_SIGALG_ECDSA(MD), {MD, ecdsa}). - --define(TLSEXT_SIGALG(MD), ?TLSEXT_SIGALG_ECDSA(MD), ?TLSEXT_SIGALG_RSA(MD)). - -default_hash_signs() -> - HashSigns = [?TLSEXT_SIGALG(sha512), - ?TLSEXT_SIGALG(sha384), - ?TLSEXT_SIGALG(sha256), - ?TLSEXT_SIGALG(sha224), - ?TLSEXT_SIGALG(sha), - ?TLSEXT_SIGALG_DSA(sha), - ?TLSEXT_SIGALG_RSA(md5)], - CryptoSupport = proplists:get_value(public_keys, crypto:supports()), - HasECC = proplists:get_bool(ecdsa, CryptoSupport), - #hash_sign_algos{hash_sign_algos = - lists:filter(fun({_, ecdsa}) -> HasECC; - (_) -> true end, HashSigns)}. - handle_hello_extensions(#client_hello{random = Random, cipher_suites = CipherSuites, renegotiation_info = Info, @@ -1825,3 +1850,26 @@ handle_srp_extension(#srp{username = Username}, Session) -> int_to_bin(I) -> L = (length(integer_to_list(I, 16)) + 1) div 2, <<I:(L*8)>>. + +-define(TLSEXT_SIGALG_RSA(MD), {MD, rsa}). +-define(TLSEXT_SIGALG_DSA(MD), {MD, dsa}). +-define(TLSEXT_SIGALG_ECDSA(MD), {MD, ecdsa}). + +-define(TLSEXT_SIGALG(MD), ?TLSEXT_SIGALG_ECDSA(MD), ?TLSEXT_SIGALG_RSA(MD)). + +advertised_hash_signs({Major, Minor}) when Major >= 3 andalso Minor >= 3 -> + HashSigns = [?TLSEXT_SIGALG(sha512), + ?TLSEXT_SIGALG(sha384), + ?TLSEXT_SIGALG(sha256), + ?TLSEXT_SIGALG(sha224), + ?TLSEXT_SIGALG(sha), + ?TLSEXT_SIGALG_DSA(sha), + ?TLSEXT_SIGALG_RSA(md5)], + CryptoSupport = crypto:supports(), + HasECC = proplists:get_bool(ecdsa, proplists:get_value(public_keys, CryptoSupport)), + Hashs = proplists:get_value(hashs, CryptoSupport), + #hash_sign_algos{hash_sign_algos = + lists:filter(fun({Hash, ecdsa}) -> HasECC andalso proplists:get_bool(Hash, Hashs); + ({Hash, _}) -> proplists:get_bool(Hash, Hashs) end, HashSigns)}; +advertised_hash_signs(_) -> + undefined. diff --git a/lib/ssl/test/Makefile b/lib/ssl/test/Makefile index 39aa22ffb4..cb919baf4e 100644 --- a/lib/ssl/test/Makefile +++ b/lib/ssl/test/Makefile @@ -47,6 +47,7 @@ MODULES = \ ssl_payload_SUITE \ ssl_session_cache_SUITE \ ssl_to_openssl_SUITE \ + ssl_ECC_SUITE \ make_certs\ erl_make_certs diff --git a/lib/ssl/test/ssl_ECC_SUITE.erl b/lib/ssl/test/ssl_ECC_SUITE.erl new file mode 100644 index 0000000000..608f2f11c3 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE.erl @@ -0,0 +1,225 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2007-2013. 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/.2 +%% +%% 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(ssl_ECC_SUITE). + +%% Note: This directive should only be used in test suites. +-compile(export_all). + +-include_lib("common_test/include/ct.hrl"). +-include_lib("public_key/include/public_key.hrl"). + +%%-------------------------------------------------------------------- +%% Common Test interface functions ----------------------------------- +%%-------------------------------------------------------------------- + +suite() -> [{ct_hooks,[ts_install_cth]}]. + +all() -> + [ + {group, 'tlsv1.2'}, + {group, 'tlsv1.1'}, + {group, 'tlsv1'} + ]. + +groups() -> + [ + {'tlsv1.2', [], all_versions_groups()}, + {'tlsv1.1', [], all_versions_groups()}, + {'tlsv1', [], all_versions_groups()}, + {'erlang_server', [], key_cert_combinations()}, + {'erlang_client', [], key_cert_combinations()}, + {'erlang', [], key_cert_combinations()} + ]. + +all_versions_groups ()-> + [{group, 'erlang_server'}, + {group, 'erlang_client'}, + {group, 'erlang'} + ]. + +key_cert_combinations() -> + [client_ec_server_ec, + client_rsa_server_ec, + client_ec_server_rsa, + client_rsa_server_rsa]. + +%%-------------------------------------------------------------------- +init_per_suite(Config) -> + catch crypto:stop(), + try crypto:start() of + ok -> + ssl:start(), + Config + catch _:_ -> + {skip, "Crypto did not start"} + end. + +end_per_suite(_Config) -> + ssl:stop(), + application:stop(crypto). + +%%-------------------------------------------------------------------- +init_per_group(erlang_client, Config) -> + case ssl_test_lib:is_sane_ecc(openssl) of + true -> + common_init_per_group(erlang_client, [{server_type, openssl}, + {client_type, erlang} | Config]); + false -> + {skip, "Known ECC bug in openssl"} + end; + +init_per_group(erlang_server, Config) -> + case ssl_test_lib:is_sane_ecc(openssl) of + true -> + common_init_per_group(erlang_client, [{server_type, erlang}, + {client_type, openssl} | Config]); + false -> + {skip, "Known ECC bug in openssl"} + end; + +init_per_group(erlang = Group, Config) -> + case ssl_test_lib:sufficient_crypto_support(Group) of + true -> + common_init_per_group(erlang, [{server_type, erlang}, + {client_type, erlang} | Config]); + false -> + {skip, "Crypto does not support ECC"} + end; +init_per_group(Group, Config) -> + common_init_per_group(Group, Config). + +common_init_per_group(GroupName, Config) -> + case ssl_test_lib:is_tls_version(GroupName) of + true -> + ssl_test_lib:init_tls_version(GroupName), + [{tls_version, GroupName} | Config]; + _ -> + openssl_check(GroupName, Config) + end. + +end_per_group(_GroupName, Config) -> + Config. + +%%-------------------------------------------------------------------- + +init_per_testcase(_TestCase, Config) -> + ct:log("TLS/SSL version ~p~n ", [tls_record:supported_protocol_versions()]), + ct:log("Ciphers: ~p~n ", [ ssl:cipher_suites()]), + Config. + +end_per_testcase(_TestCase, Config) -> + Config. + +%%-------------------------------------------------------------------- +%% Test Cases -------------------------------------------------------- +%%-------------------------------------------------------------------- + +client_ec_server_ec(Config) when is_list(Config) -> + basic_test("ec1.crt", "ec1.key", "ec2.crt", "ec2.key", Config). + +client_ec_server_rsa(Config) when is_list(Config) -> + basic_test("ec1.crt", "ec1.key", "rsa1.crt", "rsa1.key", Config). + +client_rsa_server_ec(Config) when is_list(Config) -> + basic_test("rsa1.crt", "rsa1.key", "ec2.crt", "ec2.key", Config). + +client_rsa_server_rsa(Config) when is_list(Config) -> + basic_test("rsa1.crt", "rsa1.key", "rsa2.crt", "rsa2.key", Config). + +%%-------------------------------------------------------------------- +%% Internal functions ------------------------------------------------ +%%-------------------------------------------------------------------- +basic_test(ClientCert, ClientKey, ServerCert, ServerKey, Config) -> + DataDir = ?config(data_dir, Config), + SType = ?config(server_type, Config), + CType = ?config(client_type, Config), + {Server, Port} = start_server(SType, + filename:join(DataDir, "CA.pem"), + filename:join(DataDir, ServerCert), + filename:join(DataDir, ServerKey), + Config), + Client = start_client(CType, Port, filename:join(DataDir, "CA.pem"), + filename:join(DataDir, ClientCert), + filename:join(DataDir, ClientKey), Config), + check_result(Server, SType, Client, CType). + +start_client(openssl, Port, CA, Cert, Key, _) -> + Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), + Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ + " -cert " ++ Cert ++ " -CAfile " ++ CA + ++ " -key " ++ Key ++ " -host localhost -msg", + OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), + true = port_command(OpenSslPort, "Hello world"), + OpenSslPort; +start_client(erlang, Port, CA, Cert, Key, Config) -> + {ClientNode, _, Hostname} = ssl_test_lib:run_where(Config), + ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, + {host, Hostname}, + {from, self()}, + {mfa, {ssl_test_lib, send_recv_result_active, []}}, + {options, [{verify, verify_peer}, {cacertfile, CA}, + {certfile, Cert}, {keyfile, Key}]}]). + +start_server(openssl, CA, Cert, Key, _) -> + Port = ssl_test_lib:inet_port(node()), + Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ + " -cert " ++ Cert ++ " -CAfile " ++ CA + ++ " -key " ++ Key ++ " -Verify 2 -msg", + OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), + ssl_test_lib:wait_for_openssl_server(), + true = port_command(OpenSslPort, "Hello world"), + {OpenSslPort, Port}; + +start_server(erlang, CA, Cert, Key, Config) -> + {_, 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}, {keyfile, Key}]}]), + {Server, ssl_test_lib:inet_port(Server)}. + +check_result(Server, erlang, Client, erlang) -> + ssl_test_lib:check_result(Server, ok, Client, ok); +check_result(Server, erlang, _, _) -> + ssl_test_lib:check_result(Server, ok); +check_result(_, _, Client, erlang) -> + ssl_test_lib:check_result(Client, ok); +check_result(_,openssl, _, openssl) -> + ok. + +openssl_check(erlang, Config) -> + Config; +openssl_check(_, Config) -> + TLSVersion = ?config(tls_version, Config), + case ssl_test_lib:check_sane_openssl_version(TLSVersion) of + true -> + ssl:start(), + Config; + false -> + {skip, "TLS version not supported by openssl"} + end. + diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem b/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem new file mode 100644 index 0000000000..f82efdefc5 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/CA.pem @@ -0,0 +1,14 @@ +-----BEGIN CERTIFICATE----- +MIICGjCCAYegAwIBAgIQZIIqq4RXfpBKJXV69Jc4BjAJBgUrDgMCHQUAMB0xGzAZ +BgNVBAMTEklTQSBUZXN0IEF1dGhvcml0eTAeFw0xMjAzMjAxNzEzMjFaFw0zOTEy +MzEyMzU5NTlaMB0xGzAZBgNVBAMTEklTQSBUZXN0IEF1dGhvcml0eTCBnzANBgkq +hkiG9w0BAQEFAAOBjQAwgYkCgYEAqnt6FSyFQVSDyP7mY63IhCzgysTxBEg1qDb8 +nBHj9REReZA5UQ5iyEOdTbdLyOaSk2rJyA2wdTjYkNnLzK49nZFlpf89r3/bakAM +wZv69S3FJi9W2z9m4JPv/5+QCYnFNRSnnHw3maNElwoQyknx96I3W7EuVOvKtKhh +4DaD0WsCAwEAAaNjMGEwDwYDVR0TAQH/BAUwAwEB/zBOBgNVHQEERzBFgBBCHwn2 +8AmbN+cvJl1iJ1bsoR8wHTEbMBkGA1UEAxMSSVNBIFRlc3QgQXV0aG9yaXR5ghBk +giqrhFd+kEoldXr0lzgGMAkGBSsOAwIdBQADgYEAIlVecua5Cr1z/cdwQ8znlgOU +U+y/uzg0nupKkopzVnRYhwV4hxZt3izAz4C/SJZB7eL0bUKlg1ceGjbQsGEm0fzF +LEV3vym4G51bxv03Iecwo96G4NgjJ7+9/7ciBVzfxZyfuCpYG1M2LyrbOyuevtTy +2+vIueT0lv6UftgBfIE= +-----END CERTIFICATE----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt new file mode 100644 index 0000000000..7d2b9cde9d --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBhjCB8AIBBjANBgkqhkiG9w0BAQUFADAdMRswGQYDVQQDExJJU0EgVGVzdCBB +dXRob3JpdHkwHhcNMTMwODA4MTAxNDI3WhcNMjMwODA2MTAxNDI3WjBFMQswCQYD +VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExFTATBgNVBAcTDEZvcnQgQmVsdm9p +cjEMMAoGA1UEAxMDZWMxMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEpiRIxUCESROR +P8IByg+vBv1fDdAg7yXfAh95GxFtvhBqZs6ATwaRKyLmZYgUm/4NUAyUeqmTBb7s +2msKo5mnNzANBgkqhkiG9w0BAQUFAAOBgQAmwzoB1DVO69FQOUdBVnyups4t0c1c +8h+1z/5P4EtPltk4o3mRn0AZogqdXCpNbuSGbSJh+dep5xW30VLxNHdc+tZSLK6j +pT7A3hymMk8qbi13hxeH/VpEP25y1EjHowow9Wmb6ebtT/v7qFQ9AAHD9ONcIM4I +FCC8vdFo7M5GgQ== +-----END CERTIFICATE----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key new file mode 100644 index 0000000000..2dc9508b3c --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec1.key @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BgUrgQQACg== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHQCAQEEIOO0WK8znNzLyZIoGRIlaKnCNr2Wy8uk9i+GGFIhDGNAoAcGBSuBBAAK +oUQDQgAEpiRIxUCESRORP8IByg+vBv1fDdAg7yXfAh95GxFtvhBqZs6ATwaRKyLm +ZYgUm/4NUAyUeqmTBb7s2msKo5mnNw== +-----END EC PRIVATE KEY----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt new file mode 100644 index 0000000000..b0558a0ebc --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.crt @@ -0,0 +1,11 @@ +-----BEGIN CERTIFICATE----- +MIIBhjCB8AIBBzANBgkqhkiG9w0BAQUFADAdMRswGQYDVQQDExJJU0EgVGVzdCBB +dXRob3JpdHkwHhcNMTMwODA4MTAxNDM0WhcNMjMwODA2MTAxNDM0WjBFMQswCQYD +VQQGEwJVUzERMA8GA1UECBMIVmlyZ2luaWExFTATBgNVBAcTDEZvcnQgQmVsdm9p +cjEMMAoGA1UEAxMDZWMyMFYwEAYHKoZIzj0CAQYFK4EEAAoDQgAEzXaYReUyvoYl +FwGOe0MJEXWCUncMfr2xG4GMjGYlfZsvLGEokefsJIvW+I+9jgUT2UFjxFXYNAvm +uD1A1iWVWjANBgkqhkiG9w0BAQUFAAOBgQBFa6iIlrT9DWptIdB8uSYvp7qwiHxN +hiVH5YhGIHHqjGZqtRHrSxqNEYMXXrgH9Hxc6gDbk9PsHZyVVoh/HgVWddqW1inh +tStZm420PAKCuH4T6Cfsk76GE2m7FRzJvw9TM1f2A5nIy9abyrpup8lZGcIL4Kmq +1Fix1LRtrmLNTA== +-----END CERTIFICATE----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key new file mode 100644 index 0000000000..366d13648b --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/ec2.key @@ -0,0 +1,8 @@ +-----BEGIN EC PARAMETERS----- +BgUrgQQACg== +-----END EC PARAMETERS----- +-----BEGIN EC PRIVATE KEY----- +MHQCAQEEIPR3ORUpAFMTQhUJ0jllN38LKWziG8yP2H54Y/9vh1PwoAcGBSuBBAAK +oUQDQgAEzXaYReUyvoYlFwGOe0MJEXWCUncMfr2xG4GMjGYlfZsvLGEokefsJIvW ++I+9jgUT2UFjxFXYNAvmuD1A1iWVWg== +-----END EC PRIVATE KEY----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt new file mode 100644 index 0000000000..ed9beacf68 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVjCCAr8CAQkwDQYJKoZIhvcNAQEFBQAwHTEbMBkGA1UEAxMSSVNBIFRlc3Qg +QXV0aG9yaXR5MB4XDTEzMDgwODEwMTUzNFoXDTQwMTIyNDEwMTUzNFowRjELMAkG +A1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRUwEwYDVQQHEwxGb3J0IEJlbHZv +aXIxDTALBgNVBAMTBHJzYTEwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQC62v40w1AjV3oJuyYC2Fw6XhTOi1il6xZFnB9J1WhCmuxAB/VMhBcNypx38mNk +eQ7a/ERQ5ddhZey29DYeFYU8oqfDURgWx5USHufb90xBen9KPmX3VNuQ8ZFP2q8Q +b01/oRHBJQRBuaCtFHzpGIVBjC6dD5yeQgJsYaF4u+PBbonsIGROXMybcvUzXmjU +dwpy2NhjGQL5sWcOdIeRP43APSyRYvq4tuBUZk2XxWfBcvA8LpcoYPMlRTf6jGL1 +/fAAcCYJ9lh3h92w0NZ/7ZRa/ebTplxK6yqCftuSKui1KdL69m0WZqHl79AUSfs9 +lsOwx9lHkyYvJeMofyeDbZ+3OYLmVqEBG1fza2aV2XVh9zJ8fAwmXy/c2IDhw/oD +HAe/rSg/Sgt03ydIKqtZHbl3v0EexQQRlJRULIzdtON02dJMUd4EFUgQ9OUtEmC2 +Psj9Jdu1g5cevU7Mymu8Ot+fjHiGTcBUsXNuXFCbON3Gw7cIDl4+iv+cpDHHVC9L +HK3PMEq3vu3qOGXSz+LDOoqkfROcLG7BclBuN2zoVSsMHFkB4aJhwy7eHhGz0z2W +c6LTVd+GAApdY80kmjOjT//QxHEsX/n1useHza3OszQqZiArr4ub4rtq+l1DxAS/ +DWrZ/JGsbKL8cjWso6qBF94xTi8WhjkKuUYhsm+qLAbNOQIDAQABMA0GCSqGSIb3 +DQEBBQUAA4GBAIcuzqRkfypV/9Z85ZQCCoejPm5Urhv7dfg1/B3QtazogPBZLgL5 +e60fG1uAw5GmqTViHLvW06z73oQvJrFkrCLVvadDNtrKYKXnXqdkgVyk36F/B737 +A43HGnMfSxCfRhIOuKZB9clP5PiNlhw36yi3DratqT6TUvI69hg8a7jA +-----END CERTIFICATE----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key new file mode 100644 index 0000000000..6e0d913d79 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa1.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJKAIBAAKCAgEAutr+NMNQI1d6CbsmAthcOl4UzotYpesWRZwfSdVoQprsQAf1 +TIQXDcqcd/JjZHkO2vxEUOXXYWXstvQ2HhWFPKKnw1EYFseVEh7n2/dMQXp/Sj5l +91TbkPGRT9qvEG9Nf6ERwSUEQbmgrRR86RiFQYwunQ+cnkICbGGheLvjwW6J7CBk +TlzMm3L1M15o1HcKctjYYxkC+bFnDnSHkT+NwD0skWL6uLbgVGZNl8VnwXLwPC6X +KGDzJUU3+oxi9f3wAHAmCfZYd4fdsNDWf+2UWv3m06ZcSusqgn7bkirotSnS+vZt +Fmah5e/QFEn7PZbDsMfZR5MmLyXjKH8ng22ftzmC5lahARtX82tmldl1YfcyfHwM +Jl8v3NiA4cP6AxwHv60oP0oLdN8nSCqrWR25d79BHsUEEZSUVCyM3bTjdNnSTFHe +BBVIEPTlLRJgtj7I/SXbtYOXHr1OzMprvDrfn4x4hk3AVLFzblxQmzjdxsO3CA5e +Por/nKQxx1QvSxytzzBKt77t6jhl0s/iwzqKpH0TnCxuwXJQbjds6FUrDBxZAeGi +YcMu3h4Rs9M9lnOi01XfhgAKXWPNJJozo0//0MRxLF/59brHh82tzrM0KmYgK6+L +m+K7avpdQ8QEvw1q2fyRrGyi/HI1rKOqgRfeMU4vFoY5CrlGIbJvqiwGzTkCAwEA +AQKCAgBkXyaWKSRvF5pSh9lPRfGk2MzMdkXUOofoNIkKHDy5KocljiDSTVIk8mVC +eU2ytuSn9UKtQgmEJEAXtu8rEdxUSftcC7+o3OTSqw9ZNWoc8jRWKVaUmVyoa1rn +Tk0jwuYaXOcwnTXAKHqK/qpqe+V45FhVvgEfcc3jcj5OoH8jdMFZubyn62ltRz83 +rMsa9icCskDqWpEil40IUshP2ZfHYBUEs+qCNpoiPCIKGNw3KgqqCUzhP9LcfmYn +jCnMge/eDGAikdXLv4vyYvwWFATRK/pGTuLcy542IvbHeY0vY5wVezH2CoOFBGD9 +xQ/UcZwE5hVtQToNsYhoRIVxL/3Of0qDk1M6W2Plh2MAstyejIHE3ct0pPfW3rsu +j/9Z/H0P9Q5ghSjarwOp2qGrrz6/4LVbbTDY8V1L928l4SqbUMtEQxcxTBN8YFoD +mPV3Jc3zls9wiiEX53RcH8MK5tjrcRwWqurTZvi/pkLfXlGDgKGCOaa3HgWVQyU+ +L6jVZM+u1nwN+jNXQYGeLEro/6tvG8WQbRMHQoxLG+rm4V3/SwH0DcfrVFDTg+i6 +3wMU1GC/aQEdTFWXvHAkpwrf4M9QWvjtheiaSxtBUoAY6l+ixCVHKrIk6glKLEjx +92HxmcJdopQScFETAyg8eVKV0kOGfVeFEpIqwq7hVedmTflpQQKCAQEA44h4dAta +cYeBqBr8eljWcgs79gmgwBEQxQUnwE/zuzLKn5NxAW324Kh25V/n/MupUzBlLPWn +91UHfw9PCXT8/HvgYQ4S5sXbKRbGmuPSsTmz4Rfe2ix6RggVNUOwORVNDyM7SQh7 +USdzZH5dMxKfF5L/b4Byx7eQZaoeKlfaXcqgikNZZ6pkhVCNxUKi9vvjS9r2wwCd +xtgu5MfTpdEci0zH1+uuRisVRcEbcRX9umUTCiZrmEeddZXNiwTAS3FtX7qGzuq9 +LKIeETwcOZrWj0E48UvbSfK4Axn7sf5J0n7/Qo7I089S5QQEI6ZDP501i71dNFhn +qfcY30c1k3TC7QKCAQEA0juuVHExKNLLNmQejNPfuHYoH0Uk2BH/8x96/Mkj6k6K +SUCHDS3iWOljXGw8YtpS8v5mGBGgMhJ+s/vCRM6R9eXYTc8u2ktY/kjyW0PgW8/Z +vb9VrQpn5svTNwj2Q8qYsTqXnQKO7YuL+hnQpQNAcID6FTeOASVLGObEf810qRfN +4y3RqCWUnYXXTyXj+cJdbXTxfF7HVZPIAQKqE7J5Qo9ynYILY62oSmUGC6m8VKyE +rrvDMK1IVi0X4w+Jx4HX0IC2+DBKxCaLWT69bE1IwjB06Q5zoTQPVi6c6qQp7K0H +kqSyLJ/ctwcEubu0DPNmvMlgWtAbAsoESA5GbIit/QKCAQEAxRzp9OYNAUM6AK74 +QOmLRZsT4+6tUxa1p2jy6fiZlnfG731kra9c630mG0n9iJPK6aWIUO20CGGiL+HM +P84YiIaseIgfucp4NV1kyrRJR31MptjuF6Xme5ru/IjaNmmMq2uDJZ7ybfi2T73k +8aTVLDANl8P4K6qLrnc00MvxAcXTVFRKNLN5h8CkQNqcoUjPvVxA3+g9xxBrd4jh +gsnoZ4kpq5WiEWmrcRV8t3gsqfh8CRQFrBOGhmIzgZapG/J0pTTLKqBTKEJ9t8KS +VRkdfVcshGWJ4MMjxJQS5zz7KR8Z9cgKlOwLzRiwmU2k/owr4hY3k2xuyeClrHBd +KpRBdQKCAQBvDk/dE55gbloi9WieBB6eluxC+IeqDHgkunCBsM9kKvEqGQg+kgqL +5V4zqImNvr8q1fCgrk7tpI+CDHBnYKgCOdS15cheUIdGbMp6I7UVSws/DR/5NRIF +/Y4p+HX/Abr/hHAq5PsTyS+8gn6RbNJRnBB/vMUrHcQ5902+JY6G9KgyZjXmmVOU +kutWSDHR8jbgZ3JZvMeYEWUKA5pMpW8hFh35zoStt0K7afpzlsqCAFBm7ZEC2cbo +nxGLRN4HojObVSNSoFAepi3eiyINYBYbXvWjV5sFgTbI0/7YhLgQ6qahdJcas6go +l3CLnPhUDxAqkkZwMpbSNl1kowXYt6sRAoIBAAOWnXgf9Bdb9OWKGgt42gVfC4cz +zj2JoLpbDTtbEdHNn8XQvPhGbpdtgnsuEMijIMy1UTlmv17jbFWdZTDeN31EUJrC +smgKX0OlVFKD90AI0BiIREK0hJUBV0pV4JoUjwnQBHGvranD06/wAtHEqgqF1Ipp +DCAKwxggM7qtB1R1vkrc/aLQej+mlwA8N6q92rnEsg+EnEbhtLDDZQcV/q5cSDCN +MMcnM+QdyjKwEeCVXHaqNfeSqKg/Ab2eZbS9VxA+XZD73+eUY/JeJsg7LfZrRz0T +ij5LCS7A+nVB5/B5tGkk4fcNhk2n356be6l46S98BEgtuwGLC9pqXf7zyp4= +-----END RSA PRIVATE KEY----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt new file mode 100644 index 0000000000..06ca92dda3 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDVjCCAr8CAQowDQYJKoZIhvcNAQEFBQAwHTEbMBkGA1UEAxMSSVNBIFRlc3Qg +QXV0aG9yaXR5MB4XDTEzMDgwODEwMTYwMloXDTQwMTIyNDEwMTYwMlowRjELMAkG +A1UEBhMCVVMxETAPBgNVBAgTCFZpcmdpbmlhMRUwEwYDVQQHEwxGb3J0IEJlbHZv +aXIxDTALBgNVBAMTBHJzYTIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQCjQUe0BGOpULjOAmLbXM4SSQzJvxJbCFi3tryyd+OARq6Fdp6/fslVhsr0PhWE +X8yRbAugIjseTpLwz+1OC6LavOGV1ixzGTI/9HDXGKbf8qoCrSdh28sqQJnmqGT4 +UCKLn6Rqjg2iyBBcSK3LrtKEPI4C7NaSOZUtANkppvziEMwm+0r16sgHh2Xx6mxd +22q01kq1lJqwEnIDPMSz3+ESUVQQ4T3ka7yFIhc9PYmILIXkZi0x7AiDeRkIILul +GQrduTWSPGY3prXeDAbmQNazxrHp8fcR2AfFSI6HYxMALq9jWxc4xDIkss6BO2Et +riJOIgXFpbyVsYCbkI1kXhEWFDt3uJBIcmtJKGzro4xv+XLG6BbUeTJgSHXMc7Cb +fX87+CBIFR5a/aqkEKh/mcvsDdaV+kpNKdr7q4wAuIQb8g7IyXEDuAm1VZjQs9WC +KFRGSq9sergEw9gna0iThRZjD+dzNzB17XmlAK4wa98a7MntwqpAt/GsCFOiPM8E +c+8gpuo8WqC0kP8OpImyw9cQhlZ3dca1qkr2cyKyAOGxUxyA67FgiHSsxJJ2Xhse +o49qeKTjMZd8zhSokM2TH6qEf7YfOePU51YRfAHUhzRmE31N/MExqDjFjklksEtM +iHhbPo+cOoxV8x1u13umdUvtTaAUSBA/DpvzWdnORvnaqQIDAQABMA0GCSqGSIb3 +DQEBBQUAA4GBAFD+O7h+5R5S1rIN9eC+oEGpvRhMG4v4G3pJp+c7bbtO7ifFx1WP +bta1b5YtiQYcKP0ORABm/3Kcvsb3VbaMH/zkxWEbASZsmIcBY3ml4f2kkn6WT2hD +Wc6VMIAR3N6Mj1b30yI1qYVIid+zIouiykMB+zqllm+Uar0SPNjKxDU/ +-----END CERTIFICATE----- diff --git a/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key new file mode 100644 index 0000000000..d415ef0391 --- /dev/null +++ b/lib/ssl/test/ssl_ECC_SUITE_data/rsa2.key @@ -0,0 +1,51 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIJJwIBAAKCAgEAo0FHtARjqVC4zgJi21zOEkkMyb8SWwhYt7a8snfjgEauhXae +v37JVYbK9D4VhF/MkWwLoCI7Hk6S8M/tTgui2rzhldYscxkyP/Rw1xim3/KqAq0n +YdvLKkCZ5qhk+FAii5+kao4NosgQXEity67ShDyOAuzWkjmVLQDZKab84hDMJvtK +9erIB4dl8epsXdtqtNZKtZSasBJyAzzEs9/hElFUEOE95Gu8hSIXPT2JiCyF5GYt +MewIg3kZCCC7pRkK3bk1kjxmN6a13gwG5kDWs8ax6fH3EdgHxUiOh2MTAC6vY1sX +OMQyJLLOgTthLa4iTiIFxaW8lbGAm5CNZF4RFhQ7d7iQSHJrSShs66OMb/lyxugW +1HkyYEh1zHOwm31/O/ggSBUeWv2qpBCof5nL7A3WlfpKTSna+6uMALiEG/IOyMlx +A7gJtVWY0LPVgihURkqvbHq4BMPYJ2tIk4UWYw/nczcwde15pQCuMGvfGuzJ7cKq +QLfxrAhTojzPBHPvIKbqPFqgtJD/DqSJssPXEIZWd3XGtapK9nMisgDhsVMcgOux +YIh0rMSSdl4bHqOPanik4zGXfM4UqJDNkx+qhH+2Hznj1OdWEXwB1Ic0ZhN9TfzB +Mag4xY5JZLBLTIh4Wz6PnDqMVfMdbtd7pnVL7U2gFEgQPw6b81nZzkb52qkCAwEA +AQKCAgBORLHXwHL3bdfsDIDQooG5ioQzBQQL2MiP63A0L/5GNZzeJ6ycKnDkLCeJ +SWqPeE5fOemo8EBfm1QfV9BxpmqBbCTK7U+KLv5EYzDmLs9ydqjDd7h11iZlL2uZ +hgpCckjdn7/3xfsLm9ccJ0wLZtlOxKlhBaMpn6nBVbLHoWOEDoGR/tBFbjZQRb2+ +aaFirhtOb56Jx6ER4QYAP1Ye1qrVWWBwZ0yBApXzThDOL36MZqwagFISqRK71YcG +uoq78HGhM3ZXkdV/wNFYj3OPWG6W6h/KBVNqnqO7FbofdoRZhghYHgfYE1fm+ELA ++nLwr5eK1gzmYTs0mVELRBZFlEOkCfYNOnuRgysFezEklS+ICp3HzIhYXza3kyTf +B2ZBwZZVCv/94MKyibyANErmv1a5ugY5Hsn9/WKC8qTto+qLYoyFCvBjzj0PSaVX +/3cty2DY0SK16K1Y4AOPtJMYTXYB3tVX8Akgjz1F6REBtZSOXrSQ3Vhy1ORl3Hzf +WCBYDqL8K0hJiBVgkvneIyIjmFHsdM60Nr7EldBEnJ/UrPzsl2VuWFPZlnasfUaW +x+vq1H4Dfz+bHt8coBRHDjKgUvwkfFeBQOBR5DG3vMrxguVRA1EYYMRR5C3yxk2m +ARAtdh4VxUQDQjjrmr7Dl/y1rU34aInXIrrFWpuvIhl8Ht09sQKCAQEA1pXKK5f0 +HkKfM/qk5xzF+WdHClBrPXi0XwLN6UQ+WWMMNhkGZ+FMPXl/6IJDT91s6DA3tPhr +OZF64n9ZFaGgHNBXNiB+Txjv5vZeSBMFt3hSonqt42aijx6gXfmLnkA+TYpa6Wex +YCeEgdH8LocJa7Gj2vzrYliPYk3deh6SnZZ6N8bI+ciwK3ZGF/pkWaTX83dIFq3w +YyZ+0dEpNGbA9812wNVourPg3OfqG3/CdnTfvY1M9KCC3JalpyzQL4Zm5soXF0wj +36C2yTxA02AyFz3TvUIBrvsN6i0gmGfE79+UIp29JYrFRsIgBDt+ze2vQWUz2MX5 +GeX6/yCBgiTXtwKCAQEAwsNf6k2m5Cw+WtuLzzUfBBJCN+t1lrnYJ6lF0HubW6TZ +vX1kBWyc+Rpo4ljr/+f4R9aC/gTEQOmV/hNVZy1RU2dAI8cH+r6JWG9lgif+8h// +5R81txE7gnuK1Na7PmvnQPPN661zsQZ5e1ENPXS3TJmUW/M01JxAMqEQjvAPa/II +H2KjL5NX28k9Hiw9rP6n+qXAfG/LEwXgoVCcehPwfANqQ1l95UgOdKDmjG94dipI +h2DEK70ZbrsgQbT60Wd8I5h0yhiQsik2/bVkqLmcG4SSg0/5cf2vZMApgoH/adUz +rJFdthm7iGPLhwS6fbhXew17Af96FvzfkifUV+cgnwKCAQBNUlYyFSQKz1jMgxFu +kciokNVhWw75bIgaAEmwNz38OZuJ1sSfI+iz8hbr8hxNJ+15UP6RwD3q1YghG2A/ +Uij+mPgD8ftxhvvTDo10jR4vOTUVhP0phq8mwRNqKWRs1ptcl3Egz5NzoWm22bJ0 +FYaIfs8bNq2el2i7NHGM8n1EOZe6h2+dyfno/0pMk5YbUzHZce7Q9UY8g/+InUSq +tCfuYuPaokuFkxGAqDSMSiIJSx3gEI1dTIU69TGlppkxts1XdhSR+YanqyKSKpr1 +T6FdDJNCjAlNQvuFmVM4d5PYF4kqXApu/60MTSD6RXHwxCe1ecEP6G5VLbCew9jG +y33LAoIBAGsWyC9pwQEm/qYwn4AwYjx32acrtX1J9HtiTLvkqzjJvNu/DXcaEHm7 +tr32TNVp9A9z+JS5hDt49Hs+oC/aMCRe2lqRvmZ1y8kvfy4A1eLGC4stDPj65bDK +QzziURRyejYxmCElPz6wI63VlCUdfwgEThn88SiSPY5ZF2SwxJoC+8peDwJCzwVP +cmabxtHPOAfOibciNRPhoHCyhUdunUVjD1O26k1ewGwKaJoBVMgMWdLuNw8hq9FB +3OukGmF3uD9OPbE9rpn3pX/89Dr9y8MpsvG20J6H8Z/BNVHILus/SmlxiIhvP7kv +viIgTHaCHL/RWrhvg+8N3dRcSBqJQFsCggEAFe2TMEq2AlnBn4gsuAOIuZPYKQCg +2a+tl1grQzmNth6AGGQcIqShadICD6SnVMIS64HHV/m18Cuz7GhJ06ZVjXJsHueG +UpTE9wAmI2LxnNkupkLJu+SVcW3N86PujWmQBFpHkd+IRPLS51xjD9W5zLJ7HL4/ +fnKO+B+ZK6Imxbe5C5vJezkGfeOSyQoVtt6MT/XtSKNEGPBX+M6fLKgUMMg2H2Mt +/SsD7DkOzFteKXzaEg/K8oOTpsOPkVDwNl2KErlEqbJv0k7yEVw50mYmsn/OLjh8 ++9EibISwCODbPxB+PhV6u2ue1IvGLRqtsN60lFOvbGn+kSewy9EUVHHQDQ== +-----END RSA PRIVATE KEY----- diff --git a/lib/ssl/test/ssl_basic_SUITE.erl b/lib/ssl/test/ssl_basic_SUITE.erl index b5cf6d1212..b8849d5cbd 100644 --- a/lib/ssl/test/ssl_basic_SUITE.erl +++ b/lib/ssl/test/ssl_basic_SUITE.erl @@ -212,21 +212,20 @@ end_per_suite(_Config) -> %%-------------------------------------------------------------------- init_per_group(GroupName, Config) -> - case ssl_test_lib:is_tls_version(GroupName) of + case ssl_test_lib:is_tls_version(GroupName) andalso ssl_test_lib:sufficient_crypto_support(GroupName) of true -> + ssl_test_lib:init_tls_version(GroupName), + Config; + _ -> case ssl_test_lib:sufficient_crypto_support(GroupName) of true -> - ssl_test_lib:init_tls_version(GroupName), + ssl:start(), Config; false -> {skip, "Missing crypto support"} - end; - _ -> - ssl:start(), - Config + end end. - end_per_group(_GroupName, Config) -> Config. diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl index 36f7af784d..d50498f547 100644 --- a/lib/ssl/test/ssl_packet_SUITE.erl +++ b/lib/ssl/test/ssl_packet_SUITE.erl @@ -1631,8 +1631,8 @@ header_decode_one_byte_active(Config) when is_list(Config) -> {from, self()}, {mfa, {?MODULE, client_header_decode_active, [Data, [11 | <<"Hello world">> ]]}}, - {options, [{active, true}, {header, 1}, - binary | ClientOpts]}]), + {options, [{active, true}, binary, {header, 1} + | ClientOpts]}]), ssl_test_lib:check_result(Server, ok, Client, ok), @@ -1688,7 +1688,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) -> Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0}, {from, self()}, {mfa, {?MODULE, server_header_decode_active, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, true}, binary, {header,2}|ServerOpts]}]), @@ -1697,7 +1697,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) -> {host, Hostname}, {from, self()}, {mfa, {?MODULE, client_header_decode_active, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, true}, {header, 2}, binary | ClientOpts]}]), @@ -1765,8 +1765,8 @@ header_decode_one_byte_passive(Config) when is_list(Config) -> {from, self()}, {mfa, {?MODULE, client_header_decode_passive, [Data, [11 | <<"Hello world">> ]]}}, - {options, [{active, false}, {header, 1}, - binary | ClientOpts]}]), + {options, [{active, false}, binary, {header, 1} + | ClientOpts]}]), ssl_test_lib:check_result(Server, ok, Client, ok), @@ -1822,7 +1822,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) -> Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0}, {from, self()}, {mfa, {?MODULE, server_header_decode_passive, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, false}, binary, {header,2}|ServerOpts]}]), @@ -1831,7 +1831,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) -> {host, Hostname}, {from, self()}, {mfa, {?MODULE, client_header_decode_passive, - [Data, [$H, $e]]}}, + [Data, [$H, $e | <<>>]]}}, {options, [{active, false}, {header, 2}, binary | ClientOpts]}]), @@ -2124,10 +2124,14 @@ client_header_decode_passive(Socket, Packet, Result) -> %% option and the bitsynax makes it obsolete! check_header_result([Byte1 | _], [Byte1]) -> ok; +check_header_result([Byte1 | _], [Byte1| <<>>]) -> + ok; check_header_result([Byte1, Byte2 | _], [Byte1, Byte2]) -> ok; -check_header_result(_,Got) -> - exit({?LINE, Got}). +check_header_result([Byte1, Byte2 | _], [Byte1, Byte2 | <<>>]) -> + ok; +check_header_result(Expected,Got) -> + exit({?LINE, {Expected, Got}}). server_line_packet_decode(Socket, Packet) when is_binary(Packet) -> [L1, L2] = string:tokens(binary_to_list(Packet), "\n"), diff --git a/lib/ssl/test/ssl_test_lib.erl b/lib/ssl/test/ssl_test_lib.erl index 34c52b10b3..74fadc0cc7 100644 --- a/lib/ssl/test/ssl_test_lib.erl +++ b/lib/ssl/test/ssl_test_lib.erl @@ -27,6 +27,7 @@ -compile(export_all). -record(sslsocket, { fd = nil, pid = nil}). +-define(SLEEP, 1000). %% For now always run locally run_where(_) -> @@ -949,7 +950,10 @@ init_tls_version(Version) -> sufficient_crypto_support('tlsv1.2') -> CryptoSupport = crypto:supports(), proplists:get_bool(sha256, proplists:get_value(hashs, CryptoSupport)); -sufficient_crypto_support(ciphers_ec) -> +sufficient_crypto_support(Group) when Group == ciphers_ec; %% From ssl_basic_SUITE + Group == erlang_server; %% From ssl_ECC_SUITE + Group == erlang_client; %% From ssl_ECC_SUITE + Group == erlang -> %% From ssl_ECC_SUITE CryptoSupport = crypto:supports(), proplists:get_bool(ecdh, proplists:get_value(public_keys, CryptoSupport)); sufficient_crypto_support(_) -> @@ -1026,3 +1030,39 @@ cipher_restriction(Config0) -> true -> Config0 end. + +check_sane_openssl_version(Version) -> + case {Version, os:cmd("openssl version")} of + {_, "OpenSSL 1.0.1" ++ _} -> + true; + {'tlsv1.2', "OpenSSL 1.0" ++ _} -> + false; + {'tlsv1.1', "OpenSSL 1.0" ++ _} -> + false; + {'tlsv1.2', "OpenSSL 0" ++ _} -> + false; + {'tlsv1.1', "OpenSSL 0" ++ _} -> + false; + {_, _} -> + true + end. + +wait_for_openssl_server() -> + receive + {Port, {data, Debug}} when is_port(Port) -> + ct:log("openssl ~s~n",[Debug]), + %% openssl has started make sure + %% it will be in accept. Parsing + %% output is too error prone. (Even + %% more so than sleep!) + ct:sleep(?SLEEP) + end. + +version_flag(tlsv1) -> + " -tls1 "; +version_flag('tlsv1.1') -> + " -tls1_1 "; +version_flag('tlsv1.2') -> + " -tls1_2 "; +version_flag(sslv3) -> + " -ssl3 ". diff --git a/lib/ssl/test/ssl_to_openssl_SUITE.erl b/lib/ssl/test/ssl_to_openssl_SUITE.erl index 019ed58b1b..b576b8f70d 100644 --- a/lib/ssl/test/ssl_to_openssl_SUITE.erl +++ b/lib/ssl/test/ssl_to_openssl_SUITE.erl @@ -120,7 +120,7 @@ end_per_suite(_Config) -> init_per_group(GroupName, Config) -> case ssl_test_lib:is_tls_version(GroupName) of true -> - case check_sane_openssl_version(GroupName) of + case ssl_test_lib:check_sane_openssl_version(GroupName) of true -> ssl_test_lib:init_tls_version(GroupName), Config; @@ -204,7 +204,7 @@ basic_erlang_client_openssl_server(Config) when is_list(Config) -> OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -269,14 +269,14 @@ erlang_client_openssl_server(Config) when is_list(Config) -> CertFile = proplists:get_value(certfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile, ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -311,7 +311,7 @@ erlang_server_openssl_client(Config) when is_list(Config) -> Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -345,7 +345,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) -> KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile ++ " -key " ++ KeyFile ++ " -Verify 2 -msg", @@ -353,7 +353,7 @@ erlang_client_openssl_server_dsa_cert(Config) when is_list(Config) -> OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -392,7 +392,7 @@ erlang_server_openssl_client_dsa_cert(Config) when is_list(Config) -> {options, ServerOpts}]), Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost " ++ " -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile ++ " -key " ++ KeyFile ++ " -msg", @@ -428,7 +428,7 @@ erlang_server_openssl_client_reuse_session(Config) when is_list(Config) -> {options, ServerOpts}]), Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost -reconnect", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -464,14 +464,14 @@ erlang_client_openssl_server_renegotiate(Config) when is_list(Config) -> KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg", ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -513,14 +513,14 @@ erlang_client_openssl_server_nowrap_seqnum(Config) when is_list(Config) -> CertFile = proplists:get_value(certfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg", ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -559,7 +559,7 @@ erlang_server_openssl_client_nowrap_seqnum(Config) when is_list(Config) -> {options, [{renegotiate_at, N}, {reuse_sessions, false} | ServerOpts]}]), Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost -msg", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -594,14 +594,14 @@ erlang_client_openssl_server_no_server_ca_cert(Config) when is_list(Config) -> CertFile = proplists:get_value(certfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ " -msg", ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -636,7 +636,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) -> CaCertFile = proplists:get_value(cacertfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile ++ " -key " ++ KeyFile ++ " -Verify 2", @@ -644,7 +644,7 @@ erlang_client_openssl_server_client_cert(Config) when is_list(Config) -> OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -688,7 +688,7 @@ erlang_server_openssl_client_client_cert(Config) when is_list(Config) -> KeyFile = proplists:get_value(keyfile, ClientOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), Cmd = "openssl s_client -cert " ++ CertFile ++ " -CAfile " ++ CaCertFile - ++ " -key " ++ KeyFile ++ " -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + ++ " -key " ++ KeyFile ++ " -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -776,14 +776,14 @@ erlang_client_bad_openssl_server(Config) when is_list(Config) -> CertFile = proplists:get_value(certfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "", ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client0 = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -839,7 +839,7 @@ expired_session(Config) when is_list(Config) -> OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client0 = ssl_test_lib:start_client([{node, ClientNode}, @@ -1033,14 +1033,14 @@ cipher(CipherSuite, Version, Config, ClientOpts, ServerOpts) -> CertFile = proplists:get_value(certfile, ServerOpts), KeyFile = proplists:get_value(keyfile, ServerOpts), - Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile ++ "", ct:log("openssl cmd: ~p~n", [Cmd]), OpenSslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), ConnectionInfo = {ok, {Version, CipherSuite}}, @@ -1097,14 +1097,14 @@ start_erlang_client_and_openssl_server_with_opts(Config, ErlangClientOpts, Opens Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), Cmd = "openssl s_server " ++ OpensslServerOpts ++ " -accept " ++ - integer_to_list(Port) ++ version_flag(Version) ++ + integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile, ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -1136,14 +1136,14 @@ start_erlang_client_and_openssl_server_for_npn_negotiation(Config, Data, Callbac KeyFile = proplists:get_value(keyfile, ServerOpts), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_server -msg -nextprotoneg http/1.1,spdy/2 -accept " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_server -msg -nextprotoneg http/1.1,spdy/2 -accept " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -cert " ++ CertFile ++ " -key " ++ KeyFile, ct:log("openssl cmd: ~p~n", [Cmd]), OpensslPort = open_port({spawn, Cmd}, [stderr_to_stdout]), - wait_for_openssl_server(), + ssl_test_lib:wait_for_openssl_server(), Client = ssl_test_lib:start_client([{node, ClientNode}, {port, Port}, {host, Hostname}, @@ -1174,7 +1174,7 @@ start_erlang_server_and_openssl_client_for_npn_negotiation(Config, Data, Callbac {options, ServerOpts}]), Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client -nextprotoneg http/1.0,spdy/2 -msg -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client -nextprotoneg http/1.0,spdy/2 -msg -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -1203,7 +1203,7 @@ start_erlang_server_and_openssl_client_with_opts(Config, ErlangServerOpts, OpenS {options, ServerOpts}]), Port = ssl_test_lib:inet_port(Server), Version = tls_record:protocol_version(tls_record:highest_protocol_version([])), - Cmd = "openssl s_client " ++ OpenSSLClientOpts ++ " -msg -port " ++ integer_to_list(Port) ++ version_flag(Version) ++ + Cmd = "openssl s_client " ++ OpenSSLClientOpts ++ " -msg -port " ++ integer_to_list(Port) ++ ssl_test_lib:version_flag(Version) ++ " -host localhost", ct:log("openssl cmd: ~p~n", [Cmd]), @@ -1302,25 +1302,6 @@ server_sent_garbage(Socket) -> end. -wait_for_openssl_server() -> - receive - {Port, {data, Debug}} when is_port(Port) -> - ct:log("openssl ~s~n",[Debug]), - %% openssl has started make sure - %% it will be in accept. Parsing - %% output is too error prone. (Even - %% more so than sleep!) - ct:sleep(?SLEEP) - end. - -version_flag(tlsv1) -> - " -tls1 "; -version_flag('tlsv1.1') -> - " -tls1_1 "; -version_flag('tlsv1.2') -> - " -tls1_2 "; -version_flag(sslv3) -> - " -ssl3 ". check_openssl_npn_support(Config) -> HelpText = os:cmd("openssl s_client --help"), @@ -1365,18 +1346,3 @@ supports_sslv2(Port) -> true end. -check_sane_openssl_version(Version) -> - case {Version, os:cmd("openssl version")} of - {_, "OpenSSL 1.0.1" ++ _} -> - true; - {'tlsv1.2', "OpenSSL 1.0" ++ _} -> - false; - {'tlsv1.1', "OpenSSL 1.0" ++ _} -> - false; - {'tlsv1.2', "OpenSSL 0" ++ _} -> - false; - {'tlsv1.1', "OpenSSL 0" ++ _} -> - false; - {_, _} -> - true - end. diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml index bd780b2b2f..d24d17be80 100644 --- a/lib/stdlib/doc/src/filelib.xml +++ b/lib/stdlib/doc/src/filelib.xml @@ -49,6 +49,12 @@ <datatype> <name name="dirname"/> </datatype> + <datatype> + <name name="dirname_all"/> + </datatype> + <datatype> + <name name="filename_all"/> + </datatype> </datatypes> <funcs> diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml index 3dac259477..68352ffeb1 100644 --- a/lib/stdlib/doc/src/io_lib.xml +++ b/lib/stdlib/doc/src/io_lib.xml @@ -54,6 +54,9 @@ <name name="fread_error"/> </datatype> <datatype> + <name name="fread_item"/> + </datatype> + <datatype> <name name="latin1_string"/> </datatype> </datatypes> diff --git a/lib/stdlib/doc/src/supervisor.xml b/lib/stdlib/doc/src/supervisor.xml index ed09f6e1f2..e2c9c14e6a 100644 --- a/lib/stdlib/doc/src/supervisor.xml +++ b/lib/stdlib/doc/src/supervisor.xml @@ -371,7 +371,7 @@ child_spec() = {Id,StartFunc,Restart,Shutdown,Type,Modules} children.</p> <p>If the supervisor is <c>simple_one_for_one</c>, <c><anno>Id</anno></c> - must be the child process' <c>pid()</c>. I the specified + must be the child process' <c>pid()</c>. If the specified process is alive, but is not a child of the given supervisor, the function will return <c>{error,not_found}</c>. If the child specification diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl index 50812cc532..68b157c13c 100644 --- a/lib/stdlib/src/dets.erl +++ b/lib/stdlib/src/dets.erl @@ -951,10 +951,10 @@ do_trav(Proc, Acc, Fun) -> Error end. -do_trav(#dets_cont{bin = eof}, _Proc, Acc, _Fun) -> - Acc; do_trav(State, Proc, Acc, Fun) -> case req(Proc, {match_init, State, safe}) of + '$end_of_table'-> + Acc; {cont, {Bins, NewState}} -> do_trav_bins(NewState, Proc, Acc, Fun, lists:reverse(Bins)); Error -> diff --git a/lib/stdlib/src/digraph.erl b/lib/stdlib/src/digraph.erl index e3f87d2c57..78f74631dc 100644 --- a/lib/stdlib/src/digraph.erl +++ b/lib/stdlib/src/digraph.erl @@ -36,7 +36,7 @@ -export([get_short_path/3, get_short_cycle/2]). --export_type([digraph/0, d_type/0, vertex/0]). +-export_type([digraph/0, d_type/0, vertex/0, edge/0]). -record(digraph, {vtab = notable :: ets:tab(), etab = notable :: ets:tab(), diff --git a/lib/stdlib/src/edlin.erl b/lib/stdlib/src/edlin.erl index 3192879f09..f5998c54fd 100644 --- a/lib/stdlib/src/edlin.erl +++ b/lib/stdlib/src/edlin.erl @@ -79,6 +79,14 @@ edit([C|Cs], P, {Bef,Aft}, Prefix, Rs0) -> case key_map(C, Prefix) of meta -> edit(Cs, P, {Bef,Aft}, meta, Rs0); + meta_o -> + edit(Cs, P, {Bef,Aft}, meta_o, Rs0); + meta_csi -> + edit(Cs, P, {Bef,Aft}, meta_csi, Rs0); + meta_meta -> + edit(Cs, P, {Bef,Aft}, meta_meta, Rs0); + {csi, _} = Csi -> + edit(Cs, P, {Bef,Aft}, Csi, Rs0); meta_left_sq_bracket -> edit(Cs, P, {Bef,Aft}, meta_left_sq_bracket, Rs0); search_meta -> @@ -178,6 +186,7 @@ key_map($\^U, none) -> ctlu; key_map($\^], none) -> auto_blink; key_map($\^X, none) -> ctlx; key_map($\^Y, none) -> yank; +key_map($\^W, none) -> backward_kill_word; key_map($\e, none) -> meta; key_map($), Prefix) when Prefix =/= meta, Prefix =/= search, @@ -198,11 +207,29 @@ key_map($d, meta) -> kill_word; key_map($f, meta) -> forward_word; key_map($t, meta) -> transpose_word; key_map($y, meta) -> yank_pop; +key_map($O, meta) -> meta_o; +key_map($H, meta_o) -> beginning_of_line; +key_map($F, meta_o) -> end_of_line; key_map($\177, none) -> backward_delete_char; key_map($\177, meta) -> backward_kill_word; key_map($[, meta) -> meta_left_sq_bracket; key_map($D, meta_left_sq_bracket) -> backward_char; key_map($C, meta_left_sq_bracket) -> forward_char; +% support a few <CTRL>+<CURSOR LEFT|RIGHT> combinations... +% - forward: \e\e[C, \e[5C, \e[1;5C +% - backward: \e\e[D, \e[5D, \e[1;5D +key_map($\e, meta) -> meta_meta; +key_map($[, meta_meta) -> meta_csi; +key_map($C, meta_csi) -> forward_word; +key_map($D, meta_csi) -> backward_word; +key_map($1, meta_left_sq_bracket) -> {csi, "1"}; +key_map($5, meta_left_sq_bracket) -> {csi, "5"}; +key_map($5, {csi, "1;"}) -> {csi, "1;5"}; +key_map($C, {csi, "5"}) -> forward_word; +key_map($C, {csi, "1;5"}) -> forward_word; +key_map($D, {csi, "5"}) -> backward_word; +key_map($D, {csi, "1;5"}) -> backward_word; +key_map($;, {csi, "1"}) -> {csi, "1;"}; key_map(C, none) when C >= $\s -> {insert,C}; %% for search, we need smarter line handling and so @@ -363,6 +390,9 @@ do_op(end_of_line, Bef, [C|Aft], Rs) -> {{reverse(Aft, [C|Bef]),[]},[{move_rel,length(Aft)+1}|Rs]}; do_op(end_of_line, Bef, [], Rs) -> {{Bef,[]},Rs}; +do_op(ctlu, Bef, Aft, Rs) -> + put(kill_buffer, Bef), + {{[], Aft}, [{delete_chars, -length(Bef)} | Rs]}; do_op(beep, Bef, Aft, Rs) -> {{Bef,Aft},[beep|Rs]}; do_op(_, Bef, Aft, Rs) -> diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl index 08b8541014..f599881c07 100644 --- a/lib/stdlib/src/erl_lint.erl +++ b/lib/stdlib/src/erl_lint.erl @@ -1953,12 +1953,10 @@ expr({string,_Line,_S}, _Vt, St) -> {[],St}; expr({nil,_Line}, _Vt, St) -> {[],St}; expr({cons,_Line,H,T}, Vt, St) -> expr_list([H,T], Vt, St); -expr({lc,_Line,E,Qs}, Vt0, St0) -> - {Vt,St} = handle_comprehension(E, Qs, Vt0, St0), - {vtold(Vt, Vt0),St}; %Don't export local variables -expr({bc,_Line,E,Qs}, Vt0, St0) -> - {Vt,St} = handle_comprehension(E, Qs, Vt0, St0), - {vtold(Vt,Vt0),St}; %Don't export local variables +expr({lc,_Line,E,Qs}, Vt, St) -> + handle_comprehension(E, Qs, Vt, St); +expr({bc,_Line,E,Qs}, Vt, St) -> + handle_comprehension(E, Qs, Vt, St); expr({tuple,_Line,Es}, Vt, St) -> expr_list(Es, Vt, St); expr({record_index,Line,Name,Field}, _Vt, St) -> @@ -2012,8 +2010,7 @@ expr({'fun',Line,Body}, Vt, St) -> %%No one can think funs export! case Body of {clauses,Cs} -> - {Bvt, St1} = fun_clauses(Cs, Vt, St), - {vtupdate(Bvt, Vt), St1}; + fun_clauses(Cs, Vt, St); {function,F,A} -> %% BifClash - Fun expression %% N.B. Only allows BIFs here as well, NO IMPORTS!! @@ -2111,12 +2108,12 @@ expr({'try',Line,Es,Scs,Ccs,As}, Vt, St0) -> {Evt0,St1} = exprs(Es, Vt, St0), TryLine = {'try',Line}, Uvt = vtunsafe(vtnames(vtnew(Evt0, Vt)), TryLine, []), - Evt1 = vtupdate(Uvt, vtupdate(Evt0, Vt)), - {Sccs,St2} = icrt_clauses(Scs++Ccs, TryLine, Evt1, St1), + Evt1 = vtupdate(Uvt, vtsubtract(Evt0, Uvt)), + {Sccs,St2} = icrt_clauses(Scs++Ccs, TryLine, vtupdate(Evt1, Vt), St1), Rvt0 = Sccs, Rvt1 = vtupdate(vtunsafe(vtnames(vtnew(Rvt0, Vt)), TryLine, []), Rvt0), Evt2 = vtmerge(Evt1, Rvt1), - {Avt0,St} = exprs(As, Evt2, St2), + {Avt0,St} = exprs(As, vtupdate(Evt2, Vt), St2), Avt1 = vtupdate(vtunsafe(vtnames(vtnew(Avt0, Vt)), TryLine, []), Avt0), Avt = vtmerge(Evt2, Avt1), {Avt,St}; @@ -2150,10 +2147,11 @@ expr({remote,Line,_M,_F}, _Vt, St) -> %% {UsedVarTable,State} expr_list(Es, Vt, St) -> - foldl(fun (E, {Esvt,St0}) -> - {Evt,St1} = expr(E, Vt, St0), - {vtmerge(Evt, Esvt),St1} - end, {[],St}, Es). + {Vt1,St1} = foldl(fun (E, {Esvt,St0}) -> + {Evt,St1} = expr(E, Vt, St0), + {vtmerge_pat(Evt, Esvt),St1} + end, {[],St}, Es), + {vtmerge(vtnew(Vt1, Vt), vtold(Vt1, Vt)),St1}. record_expr(Line, Rec, Vt, St0) -> St1 = warn_invalid_record(Line, Rec, St0), @@ -2310,7 +2308,7 @@ check_fields(Fs, Name, Fields, Vt, St0, CheckFun) -> check_field({record_field,Lf,{atom,La,F},Val}, Name, Fields, Vt, St, Sfs, CheckFun) -> case member(F, Sfs) of - true -> {Sfs,{Vt,add_error(Lf, {redefine_field,Name,F}, St)}}; + true -> {Sfs,{[],add_error(Lf, {redefine_field,Name,F}, St)}}; false -> {[F|Sfs], case find_field(F, Fields) of @@ -2843,7 +2841,9 @@ icrt_export(Csvt, Vt, In, St) -> Uvt = vtmerge(Evt, Unused), %% Make exported and unsafe unused variables unused in subsequent code: Vt2 = vtmerge(Uvt, vtsubtract(Vt1, Uvt)), - {Vt2,St}. + %% Forget about old variables which were not used: + Vt3 = vtmerge(vtnew(Vt2, Vt), vt_no_unused(vtold(Vt2, Vt))), + {Vt3,St}. handle_comprehension(E, Qs, Vt0, St0) -> {Vt1, Uvt, St1} = lc_quals(Qs, Vt0, St0), @@ -2856,7 +2856,11 @@ handle_comprehension(E, Qs, Vt0, St0) -> %% Local variables that have not been shadowed. {_,St} = check_unused_vars(Vt2, Vt0, St4), Vt3 = vtmerge(vtsubtract(Vt2, Uvt), Uvt), - {Vt3,St}. + %% Don't export local variables. + Vt4 = vtold(Vt3, Vt0), + %% Forget about old variables which were not used. + Vt5 = vt_no_unused(Vt4), + {Vt5,St}. %% lc_quals(Qualifiers, ImportVarTable, State) -> %% {VarTable,ShadowedVarTable,State} @@ -2920,7 +2924,7 @@ fun_clauses(Cs, Vt, St) -> {Cvt,St1} = fun_clause(C, Vt, St0), {vtmerge(Cvt, Bvt0),St1} end, {[],St#lint{recdef_top = false}}, Cs), - {Bvt,St2#lint{recdef_top = OldRecDef}}. + {vt_no_unused(vtold(Bvt, Vt)),St2#lint{recdef_top = OldRecDef}}. fun_clause({clause,_Line,H,G,B}, Vt0, St0) -> {Hvt,Binvt,St1} = head(H, Vt0, [], St0), % No imported pattern variables @@ -3181,6 +3185,8 @@ vt_no_unsafe(Vt) -> [V || {_,{S,_U,_L}}=V <- Vt, _ -> true end]. +vt_no_unused(Vt) -> [V || {_,{_,U,_L}}=V <- Vt, U =/= unused]. + %% vunion(VarTable1, VarTable2) -> [VarName]. %% vunion([VarTable]) -> [VarName]. %% vintersection(VarTable1, VarTable2) -> [VarName]. @@ -3219,7 +3225,8 @@ modify_line(T, F0) -> %% Forms. modify_line1({function,F,A}, _Mf) -> {function,F,A}; -modify_line1({function,M,F,A}, _Mf) -> {function,M,F,A}; +modify_line1({function,M,F,A}, Mf) -> + {function,modify_line1(M, Mf),modify_line1(F, Mf),modify_line1(A, Mf)}; modify_line1({attribute,L,record,{Name,Fields}}, Mf) -> {attribute,Mf(L),record,{Name,modify_line1(Fields, Mf)}}; modify_line1({attribute,L,spec,{Fun,Types}}, Mf) -> diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl index 42ef3679a2..9ef4954194 100644 --- a/lib/stdlib/src/filelib.erl +++ b/lib/stdlib/src/filelib.erl @@ -41,6 +41,9 @@ -type filename() :: file:name(). -type dirname() :: filename(). +-type filename_all() :: file:name_all(). +-type dirname_all() :: filename_all(). + %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -spec wildcard(Wildcard) -> [file:filename()] when @@ -62,29 +65,29 @@ wildcard(Pattern, Cwd, Mod) ?HANDLE_ERROR(do_wildcard(Pattern, Cwd, Mod)). -spec is_dir(Name) -> boolean() when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). is_dir(Dir) -> do_is_dir(Dir, file). --spec is_dir(file:name(), atom()) -> boolean(). +-spec is_dir(file:name_all(), atom()) -> boolean(). is_dir(Dir, Mod) when is_atom(Mod) -> do_is_dir(Dir, Mod). -spec is_file(Name) -> boolean() when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). is_file(File) -> do_is_file(File, file). --spec is_file(file:name(), atom()) -> boolean(). +-spec is_file(file:name_all(), atom()) -> boolean(). is_file(File, Mod) when is_atom(Mod) -> do_is_file(File, Mod). -spec is_regular(Name) -> boolean() when - Name :: filename(). + Name :: filename_all(). is_regular(File) -> do_is_regular(File, file). --spec is_regular(file:name(), atom()) -> boolean(). +-spec is_regular(file:name_all(), atom()) -> boolean(). is_regular(File, Mod) when is_atom(Mod) -> do_is_regular(File, Mod). @@ -103,16 +106,16 @@ fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod) when is_atom(Mod) -> do_fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod). -spec last_modified(Name) -> file:date_time() | 0 when - Name :: filename() | dirname(). + Name :: filename_all() | dirname_all(). last_modified(File) -> do_last_modified(File, file). --spec last_modified(file:name(), atom()) -> file:date_time() | 0. +-spec last_modified(file:name_all(), atom()) -> file:date_time() | 0. last_modified(File, Mod) when is_atom(Mod) -> do_last_modified(File, Mod). -spec file_size(Filename) -> non_neg_integer() when - Filename :: filename(). + Filename :: filename_all(). file_size(File) -> do_file_size(File, file). @@ -218,7 +221,7 @@ do_file_size(File, Mod) -> %% ensures that the directory name required to create D exists -spec ensure_dir(Name) -> 'ok' | {'error', Reason} when - Name :: filename() | dirname(), + Name :: filename_all() | dirname_all(), Reason :: file:posix(). ensure_dir("/") -> ok; diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl index bc76c9fd10..7f65131f67 100644 --- a/lib/stdlib/src/gen_server.erl +++ b/lib/stdlib/src/gen_server.erl @@ -124,7 +124,7 @@ {noreply, NewState :: term()} | {noreply, NewState :: term(), timeout() | hibernate} | {stop, Reason :: term(), NewState :: term()}. --callback handle_info(Info :: timeout() | term(), State :: term()) -> +-callback handle_info(Info :: timeout | term(), State :: term()) -> {noreply, NewState :: term()} | {noreply, NewState :: term(), timeout() | hibernate} | {stop, Reason :: term(), NewState :: term()}. @@ -217,7 +217,7 @@ reply({To, Tag}, Reply) -> catch To ! {Tag, Reply}. %% ----------------------------------------------------------------- -%% Asyncronous broadcast, returns nothing, it's just send'n prey +%% Asynchronous broadcast, returns nothing, it's just send 'n' pray %%----------------------------------------------------------------- abcast(Name, Request) when is_atom(Name) -> do_abcast([node() | nodes()], Name, cast_msg(Request)). diff --git a/lib/stdlib/src/io.erl b/lib/stdlib/src/io.erl index 53728237ca..b11d41e2eb 100644 --- a/lib/stdlib/src/io.erl +++ b/lib/stdlib/src/io.erl @@ -40,7 +40,7 @@ %%------------------------------------------------------------------------- -type device() :: atom() | pid(). --type prompt() :: atom() | string(). +-type prompt() :: atom() | unicode:chardata(). %% ErrorDescription is whatever the I/O-server sends. -type server_no_data() :: {'error', ErrorDescription :: term()} | 'eof'. diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl index a9b6d4131e..92a086b077 100644 --- a/lib/stdlib/src/io_lib.erl +++ b/lib/stdlib/src/io_lib.erl @@ -83,7 +83,8 @@ -export([write_unicode_string/1, write_unicode_char/1, deep_unicode_char_list/1]). --export_type([chars/0, latin1_string/0, continuation/0, fread_error/0]). +-export_type([chars/0, latin1_string/0, continuation/0, + fread_error/0, fread_item/0]). %%---------------------------------------------------------------------- @@ -106,6 +107,8 @@ | 'string' | 'unsigned'. +-type fread_item() :: string() | atom() | integer() | float(). + %%---------------------------------------------------------------------- %% Interface calls to sub-modules. @@ -120,7 +123,7 @@ fwrite(Format, Args) -> -spec fread(Format, String) -> Result when Format :: string(), String :: string(), - Result :: {'ok', InputList :: [term()], LeftOverChars :: string()} + Result :: {'ok', InputList :: [fread_item()], LeftOverChars :: string()} | {'more', RestFormat :: string(), Nchars :: non_neg_integer(), InputStack :: chars()} @@ -135,7 +138,7 @@ fread(Chars, Format) -> Format :: string(), Return :: {'more', Continuation1 :: continuation()} | {'done', Result, LeftOverChars :: string()}, - Result :: {'ok', InputList :: [term()]} + Result :: {'ok', InputList :: [fread_item()]} | 'eof' | {'error', {'fread', What :: fread_error()}}. diff --git a/lib/stdlib/src/io_lib_fread.erl b/lib/stdlib/src/io_lib_fread.erl index 92a34995b8..491e1f40d7 100644 --- a/lib/stdlib/src/io_lib_fread.erl +++ b/lib/stdlib/src/io_lib_fread.erl @@ -41,9 +41,9 @@ Format :: string(), Return :: {'more', Continuation1 :: io_lib:continuation()} | {'done', Result, LeftOverChars :: string()}, - Result :: {'ok', InputList :: io_lib:chars()} + Result :: {'ok', InputList :: [io_lib:fread_item()]} | 'eof' - | {'error', {'read', What :: io_lib:fread_error()}}. + | {'error', {'fread', What :: io_lib:fread_error()}}. fread([], Chars, Format) -> %%io:format("FREAD: ~w `~s'~n", [Format,Chars]), @@ -101,11 +101,12 @@ fread_line(Format0, Line, N0, Results0, More, Newline) -> -spec fread(Format, String) -> Result when Format :: string(), String :: string(), - Result :: {'ok', InputList :: io_lib:chars(), LeftOverChars :: string()} + Result :: {'ok', InputList :: [io_lib:fread_item()], + LeftOverChars :: string()} | {'more', RestFormat :: string(), Nchars :: non_neg_integer(), InputStack :: io_lib:chars()} - | {'error', What :: term()}. + | {'error', {'fread', What :: io_lib:fread_error()}}. fread(Format, Line) -> fread(Format, Line, 0, []). diff --git a/lib/stdlib/test/dets_SUITE.erl b/lib/stdlib/test/dets_SUITE.erl index 8ff7c3ccc9..059d553b00 100644 --- a/lib/stdlib/test/dets_SUITE.erl +++ b/lib/stdlib/test/dets_SUITE.erl @@ -52,7 +52,7 @@ simultaneous_open/1, insert_new/1, repair_continuation/1, otp_5487/1, otp_6206/1, otp_6359/1, otp_4738/1, otp_7146/1, otp_8070/1, otp_8856/1, otp_8898/1, otp_8899/1, otp_8903/1, - otp_8923/1, otp_9282/1]). + otp_8923/1, otp_9282/1, otp_11245/1]). -export([dets_dirty_loop/0]). @@ -109,7 +109,7 @@ all() -> many_clients, otp_4906, otp_5402, simultaneous_open, insert_new, repair_continuation, otp_5487, otp_6206, otp_6359, otp_4738, otp_7146, otp_8070, otp_8856, otp_8898, - otp_8899, otp_8903, otp_8923, otp_9282 + otp_8899, otp_8903, otp_8923, otp_9282, otp_11245 ]. groups() -> @@ -3898,6 +3898,28 @@ some_calls(Tab, Config) -> file:delete(File). +otp_11245(doc) -> + ["OTP-11245. Tables remained fixed after traversal"]; +otp_11245(suite) -> + []; +otp_11245(Config) when is_list(Config) -> + Tab = otp_11245, + File = filename(Tab, Config), + {ok, Tab} = dets:open_file(Tab, [{file,File}]), + N = 1024, + ins(Tab, N), + N = length(dets:match(Tab, '_')), + false = dets:info(Tab, safe_fixed), + dets:traverse(Tab, fun(_) -> continue end), + false = dets:info(Tab, safe_fixed), + N = dets:foldl(fun(_, N2) -> N2+1 end, 0, Tab), + false = dets:info(Tab, safe_fixed), + N = dets:foldr(fun(_, N2) -> N2+1 end, 0, Tab), + false = dets:info(Tab, safe_fixed), + ok = dets:close(Tab), + file:delete(File), + ok. + %% %% Parts common to several test cases %% diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl index f8345559c4..48ddeac478 100644 --- a/lib/stdlib/test/erl_lint_SUITE.erl +++ b/lib/stdlib/test/erl_lint_SUITE.erl @@ -50,7 +50,7 @@ unsafe_vars_try/1, guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1, otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1, - otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, + otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1, export_all/1, bif_clash/1, behaviour_basic/1, behaviour_multiple/1, @@ -82,7 +82,7 @@ all() -> unsafe_vars, unsafe_vars2, unsafe_vars_try, guard, otp_4886, otp_4988, otp_5091, otp_5276, otp_5338, otp_5362, otp_5371, otp_7227, otp_5494, otp_5644, - otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, export_all, + otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, otp_11254,export_all, bif_clash, behaviour_basic, behaviour_multiple, otp_7550, otp_8051, format_warn, {group, on_load}, too_many_arguments, basic_errors, bin_syntax_errors]. @@ -151,7 +151,16 @@ unused_vars_warn_basic(Config) when is_list(Config) -> {22,erl_lint,{unused_var,'N'}}, {23,erl_lint,{shadowed_var,'N','fun'}}, {28,erl_lint,{unused_var,'B'}}, - {29,erl_lint,{unused_var,'B'}}]}}], + {29,erl_lint,{unused_var,'B'}}]}}, + {basic2, + <<"-record(r, {x,y}). + f({X,Y}) -> {Z=X,Z=Y}; + f([H|T]) -> [Z=H|Z=T]; + f(#r{x=X,y=Y}) -> #r{x=A=X,y=A=Y}. + g({M, F}) -> (Z=M):(Z=F)(); + g({M, F, Arg}) -> (Z=M):F(Z=Arg). + h(X, Y) -> (Z=X) + (Z=Y).">>, + [warn_unused_vars], []}], ?line [] = run(Config, Ts), ok. @@ -537,7 +546,29 @@ unused_vars_warn_rec(Config) when is_list(Config) -> end. ">>, [warn_unused_vars], - {warnings,[{22,erl_lint,{unused_var,'Same'}}]}}], + {warnings,[{22,erl_lint,{unused_var,'Same'}}]}}, + {rec2, + <<"-record(r, {a,b}). + f(X, Y) -> #r{a=[K || K <- Y], b=[K || K <- Y]}. + g(X, Y) -> #r{a=lists:map(fun (K) -> K end, Y), + b=lists:map(fun (K) -> K end, Y)}. + h(X, Y) -> #r{a=case Y of _ when is_list(Y) -> Y end, + b=case Y of _ when is_list(Y) -> Y end}. + i(X, Y) -> #r{a=if is_list(Y) -> Y end, b=if is_list(Y) -> Y end}. + ">>, + [warn_unused_vars], + {warnings,[{2,erl_lint,{unused_var,'X'}}, + {3,erl_lint,{unused_var,'X'}}, + {5,erl_lint,{unused_var,'X'}}, + {7,erl_lint,{unused_var,'X'}}]}}, + {rec3, + <<"-record(r, {a}). + t() -> X = 1, #r{a=foo, a=bar, a=qux}. + ">>, + [warn_unused_vars], + {error,[{2,erl_lint,{redefine_field,r,a}}, + {2,erl_lint,{redefine_field,r,a}}], + [{2,erl_lint,{unused_var,'X'}}]}}], ?line [] = run(Config, Ts), ok. @@ -1075,7 +1106,24 @@ unsafe_vars_try(Config) when is_list(Config) -> {10,erl_lint,{unsafe_var,'Ra',{'try',3}}}, {10,erl_lint,{unsafe_var,'Rc',{'try',3}}}, {10,erl_lint,{unsafe_var,'Ro',{'try',3}}}], - []}}], + []}}, + {unsafe_try5, + <<"bang() -> + case 1 of + nil -> + Acc = 2; + _ -> + try + Acc = 3, + Acc + catch _:_ -> + ok + end + end, + Acc. + ">>, + [], + {errors,[{13,erl_lint,{unsafe_var,'Acc',{'try',6}}}],[]}}], ?line [] = run(Config, Ts), ok. @@ -2418,6 +2466,20 @@ otp_10436(Config) when is_list(Config) -> run_test2(Config, Ts2, []), ok. +otp_11254(doc) -> + "OTP-11254. Warnings for opaque types."; +otp_11254(suite) -> []; +otp_11254(Config) when is_list(Config) -> + Ts = <<"-module(p2). + -export([manifest/2]). + manifest(Module, Name) -> + fun Module:Nine/1. + ">>, + {error,[{4,erl_lint,{unbound_var,'Nine'}}], + [{3,erl_lint,{unused_var,'Name'}}]} = + run_test2(Config, Ts, []), + ok. + export_all(doc) -> "OTP-7392. Warning for export_all."; export_all(Config) when is_list(Config) -> diff --git a/lib/test_server/src/Makefile b/lib/test_server/src/Makefile index ebc5f5b71b..ab4dd4d95d 100644 --- a/lib/test_server/src/Makefile +++ b/lib/test_server/src/Makefile @@ -45,7 +45,6 @@ MODULES= test_server_ctrl \ test_server_node \ test_server \ test_server_sup \ - test_server_h \ erl2html2 TS_MODULES= \ diff --git a/lib/test_server/src/test_server.app.src b/lib/test_server/src/test_server.app.src index 163f370a47..42e78ed279 100644 --- a/lib/test_server/src/test_server.app.src +++ b/lib/test_server/src/test_server.app.src @@ -23,7 +23,6 @@ erl2html2, test_server_ctrl, test_server, - test_server_h, test_server_io, test_server_node, test_server_sup diff --git a/lib/test_server/src/test_server.erl b/lib/test_server/src/test_server.erl index c350f758ce..6ddb2b615f 100644 --- a/lib/test_server/src/test_server.erl +++ b/lib/test_server/src/test_server.erl @@ -389,7 +389,6 @@ run_test_case_apply({CaseNum,Mod,Func,Args,Name, os:putenv("VALGRIND_LOGFILE_INFIX",atom_to_list(Mod)++"."++ atom_to_list(Func)++"-") end, - test_server_h:testcase({Mod,Func,1}), ProcBef = erlang:system_info(process_count), Result = run_test_case_apply(Mod, Func, Args, Name, RunInit, TimetrapData), diff --git a/lib/test_server/src/test_server_ctrl.erl b/lib/test_server/src/test_server_ctrl.erl index ffa21d054c..d0f31af198 100644 --- a/lib/test_server/src/test_server_ctrl.erl +++ b/lib/test_server/src/test_server_ctrl.erl @@ -479,12 +479,6 @@ init([]) -> test_server_sup:call_trace(TraceSpec) end, process_flag(trap_exit, true), - case lists:keysearch(sasl, 1, application:which_applications()) of - {value,_} -> - test_server_h:install(); - false -> - ok - end, %% copy format_exception setting from init arg to application environment case init:get_argument(test_server_format_exception) of {ok,[[TSFE]]} -> @@ -1067,12 +1061,6 @@ terminate(_Reason, State) -> end, kill_all_jobs(State#state.jobs), test_server_node:kill_nodes(), - case lists:keysearch(sasl, 1, application:which_applications()) of - {value,_} -> - test_server_h:restore(); - _ -> - ok - end, ok. kill_all_jobs([{_Name,JobPid}|Jobs]) -> @@ -1183,7 +1171,13 @@ init_tester(Mod, Func, Args, Dir, Name, {_,_,MinLev}=Levels, "<td>~.3fs</td><td><b>~ts</b></td><td>~w Ok, ~w Failed~ts of ~w</td></tr>\n" "</tfoot>\n", [Time,SuccessStr,OkN,FailedN,SkipStr,OkN+FailedN+SkippedN]), - test_server_io:stop([major,html,unexpected_io]). + + test_server_io:stop([major,html,unexpected_io]), + {UnexpectedIoName,UnexpectedIoFooter} = get(test_server_unexpected_footer), + {ok,UnexpectedIoFd} = open_html_file(UnexpectedIoName, [append]), + io:put_chars(UnexpectedIoFd, "\n</pre>\n"++UnexpectedIoFooter), + file:close(UnexpectedIoFd), + ok. report_severe_error(Reason) -> test_server_sup:framework_call(report, [severe_error,Reason]). @@ -1642,15 +1636,13 @@ start_log_file() -> FilenameMode), ok = write_file(?last_file, TestDir1 ++ "\n", FilenameMode), put(test_server_log_dir_base,TestDir1), + MajorName = filename:join(TestDir1, ?suitelog_name), HtmlName = MajorName ++ ?html_ext, UnexpectedName = filename:join(TestDir1, ?unexpected_io_log), + {ok,Major} = open_utf8_file(MajorName), {ok,Html} = open_html_file(HtmlName), - {ok,Unexpected} = open_html_file(UnexpectedName), - test_server_io:set_fd(major, Major), - test_server_io:set_fd(html, Html), - test_server_io:set_fd(unexpected_io, Unexpected), {UnexpHeader,UnexpFooter} = case test_server_sup:framework_call(get_html_wrapper, @@ -1663,8 +1655,17 @@ start_log_file() -> {xhtml,UH,UF} -> {UH,UF} end, - io:put_chars(Unexpected, UnexpHeader++"\n<pre>\n"), - put(test_server_unexpected_footer,UnexpFooter), + + {ok,Unexpected} = open_html_file(UnexpectedName), + io:put_chars(Unexpected, [UnexpHeader, + xhtml("<br>\n<h2>Unexpected I/O</h2>", + "<br />\n<h3>Unexpected I/O</h3>"), + "\n<pre>\n"]), + put(test_server_unexpected_footer,{UnexpectedName,UnexpFooter}), + + test_server_io:set_fd(major, Major), + test_server_io:set_fd(html, Html), + test_server_io:set_fd(unexpected_io, Unexpected), make_html_link(filename:absname(?last_test ++ ?html_ext), HtmlName, filename:basename(Dir)), @@ -5299,6 +5300,9 @@ html_header(Title) -> open_html_file(File) -> open_utf8_file(File). +open_html_file(File,Opts) -> + open_utf8_file(File,Opts). + write_html_file(File,Content) -> write_file(File,Content,utf8). @@ -5307,6 +5311,9 @@ write_html_file(File,Content) -> open_utf8_file(File) -> file:open(File,[write,{encoding,utf8}]). +open_utf8_file(File,Opts) -> + file:open(File,[{encoding,utf8}|Opts]). + %% Write a file with specified encoding write_file(File,Content,latin1) -> file:write_file(File,Content); diff --git a/lib/test_server/src/test_server_h.erl b/lib/test_server/src/test_server_h.erl deleted file mode 100644 index 24063ddb10..0000000000 --- a/lib/test_server/src/test_server_h.erl +++ /dev/null @@ -1,148 +0,0 @@ -%% -%% %CopyrightBegin% -%% -%% Copyright Ericsson AB 2005-2013. 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(test_server_h). --behaviour(gen_event). - -%% API --export([install/0, restore/0]). --export([testcase/1]). - -%% gen_event callbacks --export([init/1, handle_event/2, handle_call/2, - handle_info/2, terminate/2, code_change/3]). - --record(state, {kernel, sasl, testcase}). - -%%==================================================================== -%% API -%%==================================================================== - -install() -> - case gen_event:add_handler(error_logger, ?MODULE, []) of - ok -> - error_logger:delete_report_handler(sasl_report_tty_h), - gen_event:delete_handler(error_logger, error_logger_tty_h, []), - ok; - Error -> - Error - end. - -restore() -> - gen_event:add_handler(error_logger, error_logger_tty_h, []), - error_logger:add_report_handler(sasl_report_tty_h, all), - gen_event:delete_handler(error_logger, ?MODULE, []). - -testcase(Testcase) -> - gen_event:call(error_logger, ?MODULE, {set_testcase, Testcase}, 10*60*1000). - -%%==================================================================== -%% gen_event callbacks -%%==================================================================== - -init([]) -> - - %% error_logger_tty_h initialization - User = set_group_leader(), - - %% sasl_report_tty_h initialization - Type = all, - - {ok, #state{kernel={User, []}, sasl=Type}}. - -set_group_leader() -> - case whereis(user) of - User when is_pid(User) -> - link(User), - group_leader(User, self()), - User; - _ -> - false - end. - -handle_event({_Type, GL, _Msg}, State) when node(GL)/=node() -> - {ok, State}; -handle_event({Tag, _GL, {_Pid, Type, _Report}} = Event, State) -> - SASL = lists:keyfind(sasl, 1, application:which_applications()), - case report_receiver(Tag, Type) of - sasl when SASL /= false -> - {ok,ErrLogType} = application:get_env(sasl, errlog_type), - SReport = sasl_report:format_report(group_leader(), ErrLogType, - tag_event(Event)), - if is_list(SReport) -> - tag(State#state.testcase), - sasl_report_tty_h:handle_event(Event, - State#state.sasl); - true -> %% Report is an atom if no logging is to be done - ignore - end; - sasl -> %% SASL not running - ignore; - kernel -> - tag(State#state.testcase), - error_logger_tty_h:handle_event(Event, State#state.kernel); - none -> - ignore - end, - {ok, State}; -handle_event(_Event, State) -> - {ok, State}. - -handle_call({set_testcase, Testcase}, State) -> - {ok, ok, State#state{testcase=Testcase}}; -handle_call(_Query, _State) -> - {error, bad_query}. - -handle_info({emulator,GL,_Chars}=Event, State) when node(GL)==node() -> - tag(State#state.testcase), - error_logger_tty_h:handle_info(Event, State#state.kernel), - {ok, State}; -handle_info(_Msg, State) -> - {ok, State}. - -terminate(_Reason, _State) -> - ok. - -code_change(_OldVsn, State, _Extra) -> - {ok, State}. - -report_receiver(error_report, supervisor_report) -> sasl; -report_receiver(error_report, crash_report) -> sasl; -report_receiver(info_report, progress) -> sasl; -report_receiver(error, _) -> kernel; -report_receiver(error_report, _) -> kernel; -report_receiver(warning_msg, _) -> kernel; -report_receiver(warning_report, _) -> kernel; -report_receiver(info, _) -> kernel; -report_receiver(info_msg, _) -> kernel; -report_receiver(info_report,Tuple) - when is_tuple(Tuple) andalso - (element(1,Tuple)==ct_connection orelse - element(1,Tuple)==conn_log) -> - none; -report_receiver(info_report, _) -> kernel; -report_receiver(_, _) -> none. - -tag({M,F,A}) when is_atom(M), is_atom(F), is_integer(A) -> - io:format(user, "~n=TESTCASE: ~w:~w/~w", [M,F,A]); -tag(Testcase) -> - io:format(user, "~n=TESTCASE: ~p", [Testcase]). - -tag_event(Event) -> - {calendar:local_time(), Event}. diff --git a/lib/test_server/src/test_server_io.erl b/lib/test_server/src/test_server_io.erl index 73d4468bda..62af3d5b28 100644 --- a/lib/test_server/src/test_server_io.erl +++ b/lib/test_server/src/test_server_io.erl @@ -32,27 +32,39 @@ -export([start_link/0,stop/1,get_gl/1,set_fd/2, start_transaction/0,end_transaction/0, print_buffered/1,print/3,print_unexpected/1, - set_footer/1,set_job_name/1,set_gl_props/1]). + set_footer/1,set_job_name/1,set_gl_props/1, + reset_state/0,finish/0]). -export([init/1,handle_call/3,handle_info/2,terminate/2]). --record(st, {fds, %Singleton fds (gb_tree) - shared_gl :: pid(), %Shared group leader - gls, %Group leaders (gb_set) - io_buffering=false, %I/O buffering - buffered, %Buffered I/O requests - html_footer, %HTML footer - job_name, %Name of current job. - gl_props, %Properties for GL. - stopping +-record(st, {fds, % Singleton fds (gb_tree) + tags=[], % Known tag types + shared_gl :: pid(), % Shared group leader + gls, % Group leaders (gb_set) + io_buffering=false, % I/O buffering + buffered, % Buffered I/O requests + html_footer, % HTML footer + job_name, % Name of current job. + gl_props, % Properties for GL + phase, % Indicates current mode + offline_buffer, % Buffer I/O during startup + stopping, % Reply to when process stopped + pending_ops % Perform when process idle }). start_link() -> - case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of - {ok,Pid} -> - {ok,Pid}; - Other -> - Other + case whereis(?MODULE) of + undefined -> + case gen_server:start_link({local,?MODULE}, ?MODULE, [], []) of + {ok,Pid} -> + {ok,Pid}; + Other -> + Other + end; + Pid -> + %% already running, reset the state + reset_state(), + {ok,Pid} end. stop(FilesToClose) -> @@ -62,6 +74,9 @@ stop(FilesToClose) -> group_leader(OldGL, self()), ok. +finish() -> + req(finish). + %% get_gl(Shared) -> Pid %% Shared = boolean() %% Pid = pid() @@ -142,19 +157,27 @@ set_footer(Footer) -> req({set_footer,Footer}). %% set_job_name(Name) +%% %% Set a name for the currently running job. The name will be used %% when printing to 'stdout'. %% + set_job_name(Name) -> req({set_job_name,Name}). %% set_gl_props(PropList) +%% %% Set properties for group leader processes. When a group_leader process %% is created, test_server_gl:set_props(PropList) will be called. set_gl_props(PropList) -> req({set_gl_props,PropList}). +%% reset_state +%% +%% Reset the initial state +reset_state() -> + req(reset_state). %%% Internal functions. @@ -167,7 +190,10 @@ init([]) -> buffered=Empty, html_footer="</body>\n</html>\n", job_name="<name not set>", - gl_props=[]}}. + gl_props=[], + phase=starting, + offline_buffer=[], + pending_ops=[]}}. req(Req) -> gen_server:call(?MODULE, Req, infinity). @@ -178,9 +204,24 @@ handle_call({get_gl,false}, _From, #st{gls=Gls,gl_props=Props}=St) -> {reply,Pid,St#st{gls=gb_sets:insert(Pid, Gls)}}; handle_call({get_gl,true}, _From, #st{shared_gl=Shared}=St) -> {reply,Shared,St}; -handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0}=St) -> +handle_call({set_fd,Tag,Fd}, _From, #st{fds=Fds0,tags=Tags0, + offline_buffer=OfflineBuff}=St) -> Fds = gb_trees:enter(Tag, Fd, Fds0), - {reply,ok,St#st{fds=Fds}}; + St1 = St#st{fds=Fds,tags=[Tag|lists:delete(Tag, Tags0)]}, + OfflineBuff1 = + if OfflineBuff == [] -> + []; + true -> + %% Fd ready, print anything buffered for associated Tag + lists:filtermap(fun({T,From,Str}) when T == Tag -> + output(From, Tag, Str, St1), + false; + (_) -> + true + end, lists:reverse(OfflineBuff)) + end, + {reply,ok,St1#st{phase=started, + offline_buffer=lists:reverse(OfflineBuff1)}}; handle_call({start_transaction,Pid}, _From, #st{io_buffering=Buffer0, buffered=Buf0}=St) -> Buf = case gb_trees:is_defined(Pid, Buf0) of @@ -213,12 +254,15 @@ handle_call({set_job_name,Name}, _From, St) -> handle_call({set_gl_props,Props}, _From, #st{shared_gl=Shared}=St) -> test_server_gl:set_props(Shared, Props), {reply,ok,St#st{gl_props=Props}}; -handle_call({stop,FdTags}, From, #st{fds=Fds,shared_gl=SGL,gls=Gls0}=St0) -> - St = St0#st{gls=gb_sets:insert(SGL, Gls0),stopping=From}, - gc(St), - %% Give the users of the surviving group leaders some - %% time to finish. - erlang:send_after(2000, self(), stop_group_leaders), +handle_call(reset_state, From, #st{phase=stopping,pending_ops=Ops}=St) -> + %% can't reset during stopping phase, save op for later + Op = fun(NewSt) -> + {_,Result,NewSt1} = handle_call(reset_state, From, NewSt), + {Result,NewSt1} + end, + {noreply,St#st{pending_ops=[{From,Op}|Ops]}}; +handle_call(reset_state, _From, #st{fds=Fds,tags=Tags,gls=Gls, + offline_buffer=OfflineBuff}) -> %% close open log files lists:foreach(fun(Tag) -> case gb_trees:lookup(Tag, Fds) of @@ -227,8 +271,50 @@ handle_call({stop,FdTags}, From, #st{fds=Fds,shared_gl=SGL,gls=Gls0}=St0) -> {value,Fd} -> file:close(Fd) end - end, FdTags), - {noreply,St}. + end, Tags), + GlList = gb_sets:to_list(Gls), + [test_server_gl:stop(GL) || GL <- GlList], + timer:sleep(100), + case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlList) of + [] -> + ok; + _ -> + timer:sleep(2000), + [exit(GL, kill) || GL <- GlList] + end, + Empty = gb_trees:empty(), + {ok,Shared} = test_server_gl:start_link(), + {reply,ok,#st{fds=Empty,shared_gl=Shared,gls=gb_sets:empty(), + io_buffering=gb_sets:empty(), + buffered=Empty, + html_footer="</body>\n</html>\n", + job_name="<name not set>", + gl_props=[], + phase=starting, + offline_buffer=OfflineBuff, + pending_ops=[]}}; +handle_call({stop,FdTags}, From, #st{fds=Fds0,tags=Tags0, + shared_gl=SGL,gls=Gls0}=St0) -> + St = St0#st{gls=gb_sets:insert(SGL, Gls0),phase=stopping,stopping=From}, + gc(St), + %% close open log files + {Fds1,Tags1} = lists:foldl(fun(Tag, {Fds,Tags}) -> + case gb_trees:lookup(Tag, Fds) of + none -> + {Fds,Tags}; + {value,Fd} -> + file:close(Fd), + {gb_trees:delete(Tag, Fds), + lists:delete(Tag, Tags)} + end + end, {Fds0,Tags0}, FdTags), + %% Give the users of the surviving group leaders some + %% time to finish. + erlang:send_after(1000, self(), stop_group_leaders), + {noreply,St#st{fds=Fds1,tags=Tags1}}; +handle_call(finish, From, St) -> + gen_server:reply(From, ok), + {stop,normal,St}. handle_info({'EXIT',Pid,normal}, #st{gls=Gls0,stopping=From}=St) -> Gls = gb_sets:delete_any(Pid, Gls0), @@ -236,22 +322,40 @@ handle_info({'EXIT',Pid,normal}, #st{gls=Gls0,stopping=From}=St) -> true -> %% No more group leaders left. gen_server:reply(From, ok), - {stop,normal,St#st{gls=Gls,stopping=undefined}}; + {noreply,St#st{gls=Gls,phase=stopping,stopping=undefined}}; false -> %% Wait for more group leaders to finish. - {noreply,St#st{gls=Gls}} + {noreply,St#st{gls=Gls,phase=stopping}} end; handle_info({'EXIT',_Pid,Reason}, _St) -> exit(Reason); handle_info(stop_group_leaders, #st{gls=Gls}=St) -> %% Stop the remaining group leaders. - [test_server_gl:stop(GL) || GL <- gb_sets:to_list(Gls)], - erlang:send_after(2000, self(), kill_group_leaders), + GlPids = gb_sets:to_list(Gls), + [test_server_gl:stop(GL) || GL <- GlPids], + timer:sleep(100), + Wait = + case lists:filter(fun(GlPid) -> is_process_alive(GlPid) end, GlPids) of + [] -> 0; + _ -> 2000 + end, + erlang:send_after(Wait, self(), kill_group_leaders), {noreply,St}; -handle_info(kill_group_leaders, #st{gls=Gls,stopping=From}=St) -> +handle_info(kill_group_leaders, #st{gls=Gls,stopping=From, + pending_ops=Ops}=St) -> [exit(GL, kill) || GL <- gb_sets:to_list(Gls)], - gen_server:reply(From, ok), - {stop,normal,St}; + if From /= undefined -> + gen_server:reply(From, ok); + true -> % reply has been sent already + ok + end, + %% we're idle, check if any ops are pending + St1 = lists:foldr(fun({ReplyTo,Op},NewSt) -> + {Result,NewSt1} = Op(NewSt), + gen_server:reply(ReplyTo, Result), + NewSt1 + end, St#st{phase=idle,pending_ops=[]}, Ops), + {noreply,St1}; handle_info(Other, St) -> io:format("Ignoring: ~p\n", [Other]), {noreply,St}. @@ -259,11 +363,19 @@ handle_info(Other, St) -> terminate(_, _) -> ok. -output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0}=St) -> +output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0, + phase=Phase,offline_buffer=OfflineBuff}=St) -> case gb_sets:is_member(From, Buffered) of false -> - do_output(Tag, Str, St), - St; + case do_output(Tag, Str, Phase, St) of + buffer when length(OfflineBuff)>500 -> + %% something's wrong, clear buffer + St#st{offline_buffer=[]}; + buffer -> + St#st{offline_buffer=[{Tag,From,Str}|OfflineBuff]}; + _ -> + St + end; true -> Q0 = gb_trees:get(From, Buf0), Q = queue:in({Tag,Str}, Q0), @@ -271,17 +383,19 @@ output(From, Tag, Str, #st{io_buffering=Buffered,buffered=Buf0}=St) -> St#st{buffered=Buf} end. -do_output(stdout, Str, #st{job_name=undefined}) -> +do_output(stdout, Str, _, #st{job_name=undefined}) -> io:put_chars(Str); -do_output(stdout, Str0, #st{job_name=Name}) -> +do_output(stdout, Str0, _, #st{job_name=Name}) -> Str = io_lib:format("Testing ~ts: ~ts\n", [Name,Str0]), io:put_chars(Str); -do_output(Tag, Str, #st{fds=Fds}=St) -> +do_output(Tag, Str, Phase, #st{fds=Fds}=St) -> case gb_trees:lookup(Tag, Fds) of + none when Phase /= started -> + buffer; none -> S = io_lib:format("\n*** ERROR: ~w, line ~w: No known '~p' log file\n", [?MODULE,?LINE,Tag]), - do_output(stdout, [S,Str], St); + do_output(stdout, [S,Str], Phase, St); {value,Fd} -> try io:put_chars(Fd, Str), @@ -293,14 +407,14 @@ do_output(Tag, Str, #st{fds=Fds}=St) -> S = io_lib:format("\n*** ERROR: ~w, line ~w: Error writing to " "log file '~p': ~p\n", [?MODULE,?LINE,Tag,Error]), - do_output(stdout, [S,Str], St) + do_output(stdout, [S,Str], Phase, St) end end. finalise_table(Fd, #st{html_footer=Footer}) -> case file:position(Fd, {cur,0}) of {ok,Pos} -> - %% We are writing to a seekable file. Finalise so + %% We are writing to a seekable file. Finalise so %% we get complete valid (and viewable) HTML code. %% Then rewind to overwrite the finalising code. io:put_chars(Fd, ["\n</table>\n",Footer]), @@ -319,7 +433,7 @@ do_print_buffered(Q0, St) -> eot -> Q; {Tag,Str} -> - do_output(Tag, Str, St), + do_output(Tag, Str, undefined, St), do_print_buffered(Q, St) end. diff --git a/lib/test_server/src/ts.erl b/lib/test_server/src/ts.erl index 4e5dc1b759..8e71c69d35 100644 --- a/lib/test_server/src/ts.erl +++ b/lib/test_server/src/ts.erl @@ -28,6 +28,7 @@ tests/0, tests/1, install/0, install/1, bench/0, bench/1, bench/2, benchmarks/0, + smoke_test/0, smoke_test/1,smoke_test/2, smoke_tests/0, estone/0, estone/1, cross_cover_analyse/1, compile_testcases/0, compile_testcases/1, @@ -174,6 +175,13 @@ help(installed) -> " ts:bench(Spec) - Runs all benchmarks in the given spec file.\n" " The spec file is actually ../*_test/Spec_bench.spec\n\n" " ts:bench can take the same Options argument as ts:run.\n" + "Smoke test functions:\n" + " ts:smoke_tests() - Get all available families of smoke tests\n" + " ts:smoke_test() - Runs all smoke tests\n" + " ts:smoke_test(Spec)\n" + " - Runs all smoke tests in the given spec file.\n" + " The spec file is actually ../*_test/Spec_smoke.spec\n\n" + " ts:smoke_test can take the same Options argument as ts:run.\n" "\n" "Installation (already done):\n" ], @@ -258,6 +266,7 @@ run(List, Opts) when is_list(List), is_list(Opts) -> %% Runs one test spec with Options run(Testspec, Config) when is_atom(Testspec), is_list(Config) -> Options=check_test_get_opts(Testspec, Config), + IsSmoke=proplists:get_value(smoke,Config), File=atom_to_list(Testspec), WhatToDo = case Testspec of @@ -293,6 +302,8 @@ run(Testspec, Config) when is_atom(Testspec), is_list(Config) -> case WhatToDo of skip -> create_skip_spec(Testspec, tests(Testspec)); + test when IsSmoke -> + File++"_smoke.spec"; test -> File++".spec" end, @@ -507,7 +518,22 @@ bench(Specs, Opts) -> benchmarks() -> ts_benchmark:benchmarks(). +smoke_test() -> + smoke_test([]). +smoke_test(Opts) when is_list(Opts) -> + smoke_test(smoke_tests(),Opts); +smoke_test(Spec) -> + smoke_test([Spec],[]). + +smoke_test(Spec, Opts) when is_atom(Spec) -> + smoke_test([Spec],Opts); +smoke_test(Specs, Opts) -> + run(Specs, [{smoke,true}|Opts]). + +smoke_tests() -> + {ok, Cwd} = file:get_cwd(), + ts_lib:specialized_specs(Cwd,"smoke"). %% %% estone/0, estone/1 diff --git a/lib/test_server/src/ts_benchmark.erl b/lib/test_server/src/ts_benchmark.erl index 516d22fd2d..bd6abc3372 100644 --- a/lib/test_server/src/ts_benchmark.erl +++ b/lib/test_server/src/ts_benchmark.erl @@ -30,12 +30,7 @@ benchmarks() -> {ok, Cwd} = file:get_cwd(), - Benches = filelib:wildcard( - filename:join([Cwd,"..","*_test","*_bench.spec"])), - [begin - Base = filename:basename(N), - list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1)) - end || N <- Benches]. + ts_lib:specialized_specs(Cwd,"bench"). run(Specs, Opts, Vars) -> {ok, Cwd} = file:get_cwd(), diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl index a00f607fc1..52bb346043 100644 --- a/lib/test_server/src/ts_lib.erl +++ b/lib/test_server/src/ts_lib.erl @@ -27,6 +27,7 @@ erlang_type/1, initial_capital/1, specs/1, suites/2, + specialized_specs/2, subst_file/3, subst/2, print_data/1, make_non_erlang/2, maybe_atom_to_list/1, progress/4, @@ -91,13 +92,22 @@ initial_capital([C|Rest]) when $a =< C, C =< $z -> initial_capital(String) -> String. +specialized_specs(Dir,PostFix) -> + Specs = filelib:wildcard(filename:join([filename:dirname(Dir), + "*_test", "*_"++PostFix++".spec"])), + sort_tests([begin + Base = filename:basename(Name), + list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1)) + end || Name <- Specs]). + specs(Dir) -> Specs = filelib:wildcard(filename:join([filename:dirname(Dir), "*_test", "*.{dyn,}spec"])), - % Filter away all spec which end with _bench.spec + % Filter away all spec which end with {_bench,_smoke}.spec NoBench = fun(SpecName) -> case lists:reverse(SpecName) of "ceps.hcneb_"++_ -> false; + "ceps.ekoms_"++_ -> false; _ -> true end end, diff --git a/lib/tools/emacs/erlang-skels.el b/lib/tools/emacs/erlang-skels.el index 355b223822..527e812444 100644 --- a/lib/tools/emacs/erlang-skels.el +++ b/lib/tools/emacs/erlang-skels.el @@ -457,7 +457,7 @@ Please see the function `tempo-define-template'.") "handle_info/2," n> "terminate/2, code_change/3])." n n - "-define(SERVER, ?MODULE). " n n + "-define(SERVER, ?MODULE)." n n "-record(state, {})." n n @@ -572,7 +572,7 @@ Please see the function `tempo-define-template'.") "-export([init/1, handle_event/2, handle_call/2, " n> "handle_info/2, terminate/2, code_change/3])." n n - "-define(SERVER, ?MODULE). " n n + "-define(SERVER, ?MODULE)." n n "-record(state, {})." n n diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el index f3bc95e3e5..624042204c 100644 --- a/lib/tools/emacs/erlang.el +++ b/lib/tools/emacs/erlang.el @@ -2813,6 +2813,9 @@ Return nil if inside string, t if in a comment." (- (+ 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 *\\($\\|%\\)") @@ -5365,7 +5368,7 @@ There exists two workarounds for this bug: (inferior-erlang-prepare-for-input) (let* ((dir (inferior-erlang-compile-outdir)) ;;; (file (file-name-nondirectory (buffer-file-name))) - (noext (substring (buffer-file-name) 0 -4)) + (noext (substring (erlang-local-buffer-file-name) 0 -4)) (opts (append (list (cons 'outdir dir)) (if current-prefix-arg (list 'debug_info 'export_all)) @@ -5403,7 +5406,7 @@ 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 (buffer-file-name)))) + (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")) @@ -5421,11 +5424,11 @@ unless the optional NO-DISPLAY is non-nil." (res (inferior-erlang-compute-erl-compile-command module-name opts)) ccfn-entry done) - (if (not (null (buffer-file-name))) + (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) (buffer-file-name)) + (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)) @@ -5457,7 +5460,7 @@ unless the optional NO-DISPLAY is non-nil." tmpvar tmpvar tmpvar2))))) (defun inferior-erlang-compute-leex-compile-command (module-name opts) - (let ((file-name (buffer-file-name)) + (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)))) @@ -5476,7 +5479,7 @@ unless the optional NO-DISPLAY is non-nil." erl-compile-expr))) (defun inferior-erlang-compute-yecc-compile-command (module-name opts) - (let ((file-name (buffer-file-name)) + (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)))) @@ -5527,6 +5530,36 @@ unless the optional NO-DISPLAY is non-nil." (setq strs (cdr strs))) result)) +(defun erlang-local-buffer-file-name () + ;; When editing a file remotely via tramp, + ;; the buffer's file name may be for example + ;; "/ssh:host.example.com:/some/path/x.erl" + ;; + ;; If I try to compile such a file using C-c C-k, an + ;; erlang shell on the remote host is automatically + ;; started if needed, but for it to successfully compile + ;; the file, the c(...) command that is sent must contain + ;; 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)))) + +(defun erlang-tramp-remote-file-p () + (and (fboundp 'tramp-tramp-file-p) + (tramp-tramp-file-p (buffer-file-name)))) + +(defun erlang-tramp-get-localname () + (let ((tramp-info (tramp-dissect-file-name (buffer-file-name)))) + (if (fboundp 'tramp-file-name-localname) + (tramp-file-name-localname tramp-info) + ;; In old versions of tramp, it was `tramp-file-name-path' + ;; instead of the newer `tramp-file-name-localname' + (tramp-file-name-path tramp-info)))) + ;; `next-error' only accepts buffers with major mode `compilation-mode' ;; or with the minor mode `compilation-minor-mode' activated. ;; (To activate the minor mode is out of the question, since it will @@ -5561,7 +5594,7 @@ Capable of finding error messages in an inferior Erlang buffer." "Make the inferior Erlang change directory. The default is to go to the directory of the current buffer." (interactive) - (or dir (setq dir (file-name-directory (buffer-file-name)))) + (or dir (setq dir (file-name-directory (erlang-local-buffer-file-name)))) (or (inferior-erlang-running-p) (error "No inferior Erlang is running")) (inferior-erlang-display-buffer) diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented index 6c9343f6cb..7e61bcc45b 100644 --- a/lib/tools/emacs/test.erl.indented +++ b/lib/tools/emacs/test.erl.indented @@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{ 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" , "" } + ] } + ] } + ] + }. diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig index 0f8c4a9175..932758997d 100644 --- a/lib/tools/emacs/test.erl.orig +++ b/lib/tools/emacs/test.erl.orig @@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{ 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" , "" } + ] } + ] } +] +}. diff --git a/lib/wx/aclocal.m4 b/lib/wx/aclocal.m4 index 25f40944e7..46b30a16b3 100644 --- a/lib/wx/aclocal.m4 +++ b/lib/wx/aclocal.m4 @@ -954,6 +954,40 @@ dnl AC_DEFUN(ERL_FIND_ETHR_LIB, [ +AC_ARG_ENABLE(native-ethr-impls, + AS_HELP_STRING([--disable-native-ethr-impls], + [disable native ethread implementations]), +[ case "$enableval" in + no) disable_native_ethr_impls=yes ;; + *) disable_native_ethr_impls=no ;; + esac ], disable_native_ethr_impls=no) + +test "X$disable_native_ethr_impls" = "Xyes" && + AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) + +AC_ARG_ENABLE(x86-out-of-order, + AS_HELP_STRING([--enable-x86-out-of-order], + [enable x86/x84_64 out of order support (default disabled)])) + +AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, + AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], + [prefer gcc native ethread implementations]), +[ case "$enableval" in + yes) enable_prefer_gcc_native_ethr_impls=yes ;; + *) enable_prefer_gcc_native_ethr_impls=no ;; + esac ], enable_prefer_gcc_native_ethr_impls=no) + +test $enable_prefer_gcc_native_ethr_impls = yes && + AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) + +AC_ARG_WITH(libatomic_ops, + AS_HELP_STRING([--with-libatomic_ops=PATH], + [specify and prefer usage of libatomic_ops in the ethread library])) + +AC_ARG_WITH(with_sparc_memory_order, + AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], + [specify sparc memory order (defaults to RMO)])) + LM_CHECK_THR_LIB ERL_INTERNAL_LIBS @@ -1003,40 +1037,44 @@ case "$THR_LIB_NAME" in AC_DEFINE(ETHR_WIN32_THREADS, 1, [Define if you have win32 threads]) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) - ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) - ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) - ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) - ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) - test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes - - ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) - + if test "X$disable_native_ethr_impls" = "Xyes"; then + have_interlocked_op=no + ethr_have_native_atomics=no + else + ETHR_CHK_INTERLOCKED([_InterlockedDecrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT, 1, [Define if you have _InterlockedDecrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement_rel], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT_REL, 1, [Define if you have _InterlockedDecrement_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT, 1, [Define if you have _InterlockedIncrement()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement_acq], [1], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ, 1, [Define if you have _InterlockedIncrement_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD, 1, [Define if you have _InterlockedExchangeAdd()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd_acq], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ, 1, [Define if you have _InterlockedExchangeAdd_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND, 1, [Define if you have _InterlockedAnd()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR, 1, [Define if you have _InterlockedOr()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange], [2], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE, 1, [Define if you have _InterlockedExchange()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE, 1, [Define if you have _InterlockedCompareExchange()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_acq], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ, 1, [Define if you have _InterlockedCompareExchange_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange_rel], [3], [long], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL, 1, [Define if you have _InterlockedCompareExchange_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64, 1, [Define if you have _InterlockedDecrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedDecrement64_rel], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDDECREMENT64_REL, 1, [Define if you have _InterlockedDecrement64_rel()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64, 1, [Define if you have _InterlockedIncrement64()])) + ETHR_CHK_INTERLOCKED([_InterlockedIncrement64_acq], [1], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ, 1, [Define if you have _InterlockedIncrement64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64, 1, [Define if you have _InterlockedExchangeAdd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchangeAdd64_acq], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ, 1, [Define if you have _InterlockedExchangeAdd64_acq()])) + ETHR_CHK_INTERLOCKED([_InterlockedAnd64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDAND64, 1, [Define if you have _InterlockedAnd64()])) + ETHR_CHK_INTERLOCKED([_InterlockedOr64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDOR64, 1, [Define if you have _InterlockedOr64()])) + ETHR_CHK_INTERLOCKED([_InterlockedExchange64], [2], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDEXCHANGE64, 1, [Define if you have _InterlockedExchange64()])) + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64, 1, [Define if you have _InterlockedCompareExchange64()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_acq], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ, 1, [Define if you have _InterlockedCompareExchange64_acq()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange64_rel], [3], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL, 1, [Define if you have _InterlockedCompareExchange64_rel()])) + test "$have_interlocked_op" = "yes" && ethr_have_native_atomics=yes + + ETHR_CHK_INTERLOCKED([_InterlockedCompareExchange128], [4], [__int64], AC_DEFINE_UNQUOTED(ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128, 1, [Define if you have _InterlockedCompareExchange128()])) + fi test "$ethr_have_native_atomics" = "yes" && ethr_have_native_spinlock=yes ;; @@ -1303,93 +1341,98 @@ case "$THR_LIB_NAME" in int128="__int128_t" fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + if test "X$disable_native_ethr_impls" = "Xyes"; then + ethr_have_native_atomics=no + else + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32, 1, [Define if you have __sync_val_compare_and_swap() for 32-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH32, 1, [Define if you have __sync_add_and_fetch() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND32, 1, [Define if you have __sync_fetch_and_and() for 32-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [32], [$int32], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR32, 1, [Define if you have __sync_fetch_and_or() for 32-bit integers])) + + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) + test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes + ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) + ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + + if test $int128 != no; then + ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) + fi - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64, 1, [Define if you have __sync_val_compare_and_swap() for 64-bit integers])) - test "$have_sync_op" = "yes" && ethr_have_native_atomics=yes - ETHR_CHK_SYNC_OP([__sync_add_and_fetch], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_ADD_AND_FETCH64, 1, [Define if you have __sync_add_and_fetch() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_and], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_AND64, 1, [Define if you have __sync_fetch_and_and() for 64-bit integers])) - ETHR_CHK_SYNC_OP([__sync_fetch_and_or], [2], [64], [$int64], AC_DEFINE(ETHR_HAVE___SYNC_FETCH_AND_OR64, 1, [Define if you have __sync_fetch_and_or() for 64-bit integers])) + AC_MSG_CHECKING([for a usable libatomic_ops implementation]) + case "x$with_libatomic_ops" in + xno | xyes | x) + libatomic_ops_include= + ;; + *) + if test -d "${with_libatomic_ops}/include"; then + libatomic_ops_include="-I$with_libatomic_ops/include" + CPPFLAGS="$CPPFLAGS $libatomic_ops_include" + else + AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) + fi;; + esac + ethr_have_libatomic_ops=no + AC_TRY_LINK([#include "atomic_ops.h"], + [ + volatile AO_t x; + AO_t y; + int z; + + AO_nop_full(); + AO_store(&x, (AO_t) 0); + z = AO_load(&x); + z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); + ], + [ethr_have_native_atomics=yes + ethr_have_libatomic_ops=yes]) + AC_MSG_RESULT([$ethr_have_libatomic_ops]) + if test $ethr_have_libatomic_ops = yes; then + AC_CHECK_SIZEOF(AO_t, , + [ + #include <stdio.h> + #include "atomic_ops.h" + ]) + AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) + + AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) + if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) + fi + ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" + elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then + AC_MSG_ERROR([No usable libatomic_ops implementation found]) + fi - if test $int128 != no; then - ETHR_CHK_SYNC_OP([__sync_val_compare_and_swap], [3], [128], [$int128], AC_DEFINE(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128, 1, [Define if you have __sync_val_compare_and_swap() for 128-bit integers])) - fi + case "$host_cpu" in + sparc | sun4u | sparc64 | sun4v) + case "$with_sparc_memory_order" in + "TSO") + AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; + "PSO") + AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; + "RMO"|"") + AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; + *) + AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; + esac + ethr_have_native_atomics=yes;; + i86pc | i*86 | x86_64 | amd64) + if test "$enable_x86_out_of_order" = "yes"; then + AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) + fi + ethr_have_native_atomics=yes;; + macppc | ppc | powerpc | "Power Macintosh") + ethr_have_native_atomics=yes;; + tile) + ethr_have_native_atomics=yes;; + *) + ;; + esac - AC_MSG_CHECKING([for a usable libatomic_ops implementation]) - case "x$with_libatomic_ops" in - xno | xyes | x) - libatomic_ops_include= - ;; - *) - if test -d "${with_libatomic_ops}/include"; then - libatomic_ops_include="-I$with_libatomic_ops/include" - CPPFLAGS="$CPPFLAGS $libatomic_ops_include" - else - AC_MSG_ERROR([libatomic_ops include directory $with_libatomic_ops/include not found]) - fi;; - esac - ethr_have_libatomic_ops=no - AC_TRY_LINK([#include "atomic_ops.h"], - [ - volatile AO_t x; - AO_t y; - int z; - - AO_nop_full(); - AO_store(&x, (AO_t) 0); - z = AO_load(&x); - z = AO_compare_and_swap_full(&x, (AO_t) 0, (AO_t) 1); - ], - [ethr_have_native_atomics=yes - ethr_have_libatomic_ops=yes]) - AC_MSG_RESULT([$ethr_have_libatomic_ops]) - if test $ethr_have_libatomic_ops = yes; then - AC_CHECK_SIZEOF(AO_t, , - [ - #include <stdio.h> - #include "atomic_ops.h" - ]) - AC_DEFINE_UNQUOTED(ETHR_SIZEOF_AO_T, $ac_cv_sizeof_AO_t, [Define to the size of AO_t if libatomic_ops is used]) - - AC_DEFINE(ETHR_HAVE_LIBATOMIC_OPS, 1, [Define if you have libatomic_ops atomic operations]) - if test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_DEFINE(ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS, 1, [Define if you prefer libatomic_ops native ethread implementations]) - fi - ETHR_DEFS="$ETHR_DEFS $libatomic_ops_include" - elif test "x$with_libatomic_ops" != "xno" && test "x$with_libatomic_ops" != "x"; then - AC_MSG_ERROR([No usable libatomic_ops implementation found]) fi - case "$host_cpu" in - sparc | sun4u | sparc64 | sun4v) - case "$with_sparc_memory_order" in - "TSO") - AC_DEFINE(ETHR_SPARC_TSO, 1, [Define if only run in Sparc TSO mode]);; - "PSO") - AC_DEFINE(ETHR_SPARC_PSO, 1, [Define if only run in Sparc PSO, or TSO mode]);; - "RMO"|"") - AC_DEFINE(ETHR_SPARC_RMO, 1, [Define if run in Sparc RMO, PSO, or TSO mode]);; - *) - AC_MSG_ERROR([Unsupported Sparc memory order: $with_sparc_memory_order]);; - esac - ethr_have_native_atomics=yes;; - i86pc | i*86 | x86_64 | amd64) - if test "$enable_x86_out_of_order" = "yes"; then - AC_DEFINE(ETHR_X86_OUT_OF_ORDER, 1, [Define if x86/x86_64 out of order instructions should be synchronized]) - fi - ethr_have_native_atomics=yes;; - macppc | ppc | "Power Macintosh") - ethr_have_native_atomics=yes;; - tile) - ethr_have_native_atomics=yes;; - *) - ;; - esac - test ethr_have_native_atomics = "yes" && ethr_have_native_spinlock=yes dnl Restore LIBS @@ -1451,40 +1494,6 @@ esac AC_C_DOUBLE_MIDDLE_ENDIAN -AC_ARG_ENABLE(native-ethr-impls, - AS_HELP_STRING([--disable-native-ethr-impls], - [disable native ethread implementations]), -[ case "$enableval" in - no) disable_native_ethr_impls=yes ;; - *) disable_native_ethr_impls=no ;; - esac ], disable_native_ethr_impls=no) - -AC_ARG_ENABLE(x86-out-of-order, - AS_HELP_STRING([--enable-x86-out-of-order], - [enable x86/x84_64 out of order support (default disabled)])) - -test "X$disable_native_ethr_impls" = "Xyes" && - AC_DEFINE(ETHR_DISABLE_NATIVE_IMPLS, 1, [Define if you want to disable native ethread implementations]) - -AC_ARG_ENABLE(prefer-gcc-native-ethr-impls, - AS_HELP_STRING([--enable-prefer-gcc-native-ethr-impls], - [prefer gcc native ethread implementations]), -[ case "$enableval" in - yes) enable_prefer_gcc_native_ethr_impls=yes ;; - *) enable_prefer_gcc_native_ethr_impls=no ;; - esac ], enable_prefer_gcc_native_ethr_impls=no) - -test $enable_prefer_gcc_native_ethr_impls = yes && - AC_DEFINE(ETHR_PREFER_GCC_NATIVE_IMPLS, 1, [Define if you prefer gcc native ethread implementations]) - -AC_ARG_WITH(libatomic_ops, - AS_HELP_STRING([--with-libatomic_ops=PATH], - [specify and prefer usage of libatomic_ops in the ethread library])) - -AC_ARG_WITH(with_sparc_memory_order, - AS_HELP_STRING([--with-sparc-memory-order=TSO|PSO|RMO], - [specify sparc memory order (defaults to RMO)])) - ETHR_X86_SSE2_ASM=no case "$GCC-$ac_cv_sizeof_void_p-$host_cpu" in yes-4-i86pc | yes-4-i*86 | yes-4-x86_64 | yes-4-amd64) diff --git a/lib/wx/api_gen/wx_extra/bugs.h b/lib/wx/api_gen/wx_extra/bugs.h index e3a4fa200b..0563a8901f 100644 --- a/lib/wx/api_gen/wx_extra/bugs.h +++ b/lib/wx/api_gen/wx_extra/bugs.h @@ -39,4 +39,12 @@ class WXDLLIMPEXP_ADV wxTreeCtrlBase : public wxControl { public: static bool IsTreeItemIdOk(wxTreeItemId id); -} +}; + + +// Enable lost macro functionality +class WXDLLEXPORT wxPanel : public wxWindow +{ + public: + void SetFocusIgnoringChildren(); +}; diff --git a/lib/wx/api_gen/wx_gen.erl b/lib/wx/api_gen/wx_gen.erl index 2eb9d9d33d..3ca8cd7d14 100644 --- a/lib/wx/api_gen/wx_gen.erl +++ b/lib/wx/api_gen/wx_gen.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -1350,7 +1350,11 @@ extract_enum3([#xmlElement{name=name,content=[#xmlText{value=Name}]}|R], Id, Acc end; extract_enum3([#xmlElement{name=initializer,content=Cs}|_],_Id,[{Name,_}|Acc]) -> - String = extract_def2(Cs), + String = case extract_def2(Cs) of + "= " ++ Str0 -> Str0; %% Doxygen 1.8.3.1 keeps the '=' sign + "=" ++ Str0 -> Str0; %% Doxygen 1.8.3.1 keeps the '=' sign + Str0 -> Str0 + end, Val0 = gen_util:tokens(String,"<& "), try case Val0 of diff --git a/lib/wx/api_gen/wxapi.conf b/lib/wx/api_gen/wxapi.conf index 81f2a389ab..21f9f1b44d 100644 --- a/lib/wx/api_gen/wxapi.conf +++ b/lib/wx/api_gen/wxapi.conf @@ -190,8 +190,9 @@ {class, wxPanel, wxWindow, [], ['wxPanel','~wxPanel',%'Create', %%'GetDefaultItem', - 'InitDialog'%, - %%'OnSysColourChanged', %'SetDefaultItem','SetFocus','SetFocusIgnoringChildren' + 'InitDialog', + %%'OnSysColourChanged', %'SetDefaultItem','SetFocus', + 'SetFocusIgnoringChildren' ]}. {class, wxScrolledWindow, wxPanel, [], @@ -504,7 +505,8 @@ [{'wxStatusBar',[{"size", skip_member}]}, '~wxStatusBar', {'Create',[{"size", skip_member}]}, - 'GetFieldRect','GetFieldsCount','GetStatusText','PopStatusText', + {'GetFieldRect', [{"rect", out}]}, + 'GetFieldsCount','GetStatusText','PopStatusText', 'PushStatusText', {'SetFieldsCount', [{"number", {def,none}}, {"widths", [{single, array}, {def, "(int *) NULL"}]}]}, @@ -1741,6 +1743,12 @@ 'Get' ]}. +{class, wxClipboardTextEvent, wxCommandEvent, + [{event, [wxEVT_COMMAND_TEXT_COPY, + wxEVT_COMMAND_TEXT_CUT, + wxEVT_COMMAND_TEXT_PASTE]}], + []}. + {class, wxSpinEvent, wxNotifyEvent, [{acc, [{m_commandInt, "GetPosition()"}]}, {event, [wxEVT_COMMAND_SPINCTRL_UPDATED, diff --git a/lib/wx/c_src/gen/wxe_events.cpp b/lib/wx/c_src/gen/wxe_events.cpp index c9cdee3160..a6a37cb37f 100644 --- a/lib/wx/c_src/gen/wxe_events.cpp +++ b/lib/wx/c_src/gen/wxe_events.cpp @@ -243,57 +243,60 @@ void initEventTable() {wxEVT_COMMAND_TREE_ITEM_MENU, 208, "command_tree_item_menu"}, {wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGED, 209, "command_notebook_page_changed"}, {wxEVT_COMMAND_NOTEBOOK_PAGE_CHANGING, 209, "command_notebook_page_changing"}, - {wxEVT_COMMAND_SPINCTRL_UPDATED, 215, "command_spinctrl_updated"}, + {wxEVT_COMMAND_TEXT_COPY, 215, "command_text_copy"}, + {wxEVT_COMMAND_TEXT_CUT, 215, "command_text_cut"}, + {wxEVT_COMMAND_TEXT_PASTE, 215, "command_text_paste"}, + {wxEVT_COMMAND_SPINCTRL_UPDATED, 216, "command_spinctrl_updated"}, {wxEVT_SCROLL_LINEUP + wxEVT_USER_FIRST, 165, "spin_up"}, {wxEVT_SCROLL_LINEDOWN + wxEVT_USER_FIRST, 165, "spin_down"}, {wxEVT_SCROLL_THUMBTRACK + wxEVT_USER_FIRST, 165, "spin"}, - {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 217, "command_splitter_sash_pos_changed"}, - {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 217, "command_splitter_sash_pos_changing"}, - {wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 217, "command_splitter_doubleclicked"}, - {wxEVT_COMMAND_SPLITTER_UNSPLIT, 217, "command_splitter_unsplit"}, - {wxEVT_COMMAND_HTML_LINK_CLICKED, 219, "command_html_link_clicked"}, - {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 222, "command_auinotebook_page_close"}, - {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 222, "command_auinotebook_page_changed"}, - {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 222, "command_auinotebook_page_changing"}, - {wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 222, "command_auinotebook_button"}, - {wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 222, "command_auinotebook_begin_drag"}, - {wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 222, "command_auinotebook_end_drag"}, - {wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 222, "command_auinotebook_drag_motion"}, - {wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 222, "command_auinotebook_allow_dnd"}, + {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGED, 218, "command_splitter_sash_pos_changed"}, + {wxEVT_COMMAND_SPLITTER_SASH_POS_CHANGING, 218, "command_splitter_sash_pos_changing"}, + {wxEVT_COMMAND_SPLITTER_DOUBLECLICKED, 218, "command_splitter_doubleclicked"}, + {wxEVT_COMMAND_SPLITTER_UNSPLIT, 218, "command_splitter_unsplit"}, + {wxEVT_COMMAND_HTML_LINK_CLICKED, 220, "command_html_link_clicked"}, + {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSE, 223, "command_auinotebook_page_close"}, + {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGED, 223, "command_auinotebook_page_changed"}, + {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CHANGING, 223, "command_auinotebook_page_changing"}, + {wxEVT_COMMAND_AUINOTEBOOK_BUTTON, 223, "command_auinotebook_button"}, + {wxEVT_COMMAND_AUINOTEBOOK_BEGIN_DRAG, 223, "command_auinotebook_begin_drag"}, + {wxEVT_COMMAND_AUINOTEBOOK_END_DRAG, 223, "command_auinotebook_end_drag"}, + {wxEVT_COMMAND_AUINOTEBOOK_DRAG_MOTION, 223, "command_auinotebook_drag_motion"}, + {wxEVT_COMMAND_AUINOTEBOOK_ALLOW_DND, 223, "command_auinotebook_allow_dnd"}, #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 222, "command_auinotebook_tab_middle_down"}, + {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_DOWN, 223, "command_auinotebook_tab_middle_down"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 222, "command_auinotebook_tab_middle_up"}, + {wxEVT_COMMAND_AUINOTEBOOK_TAB_MIDDLE_UP, 223, "command_auinotebook_tab_middle_up"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 222, "command_auinotebook_tab_right_down"}, + {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_DOWN, 223, "command_auinotebook_tab_right_down"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 222, "command_auinotebook_tab_right_up"}, + {wxEVT_COMMAND_AUINOTEBOOK_TAB_RIGHT_UP, 223, "command_auinotebook_tab_right_up"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 222, "command_auinotebook_page_closed"}, + {wxEVT_COMMAND_AUINOTEBOOK_PAGE_CLOSED, 223, "command_auinotebook_page_closed"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 222, "command_auinotebook_drag_done"}, + {wxEVT_COMMAND_AUINOTEBOOK_DRAG_DONE, 223, "command_auinotebook_drag_done"}, #endif #if wxCHECK_VERSION(2,8,5) - {wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 222, "command_auinotebook_bg_dclick"}, + {wxEVT_COMMAND_AUINOTEBOOK_BG_DCLICK, 223, "command_auinotebook_bg_dclick"}, #endif - {wxEVT_AUI_PANE_BUTTON, 223, "aui_pane_button"}, - {wxEVT_AUI_PANE_CLOSE, 223, "aui_pane_close"}, - {wxEVT_AUI_PANE_MAXIMIZE, 223, "aui_pane_maximize"}, - {wxEVT_AUI_PANE_RESTORE, 223, "aui_pane_restore"}, - {wxEVT_AUI_RENDER, 223, "aui_render"}, - {wxEVT_AUI_FIND_MANAGER, 223, "aui_find_manager"}, - {wxEVT_TASKBAR_MOVE, 226, "taskbar_move"}, - {wxEVT_TASKBAR_LEFT_DOWN, 226, "taskbar_left_down"}, - {wxEVT_TASKBAR_LEFT_UP, 226, "taskbar_left_up"}, - {wxEVT_TASKBAR_RIGHT_DOWN, 226, "taskbar_right_down"}, - {wxEVT_TASKBAR_RIGHT_UP, 226, "taskbar_right_up"}, - {wxEVT_TASKBAR_LEFT_DCLICK, 226, "taskbar_left_dclick"}, - {wxEVT_TASKBAR_RIGHT_DCLICK, 226, "taskbar_right_dclick"}, + {wxEVT_AUI_PANE_BUTTON, 224, "aui_pane_button"}, + {wxEVT_AUI_PANE_CLOSE, 224, "aui_pane_close"}, + {wxEVT_AUI_PANE_MAXIMIZE, 224, "aui_pane_maximize"}, + {wxEVT_AUI_PANE_RESTORE, 224, "aui_pane_restore"}, + {wxEVT_AUI_RENDER, 224, "aui_render"}, + {wxEVT_AUI_FIND_MANAGER, 224, "aui_find_manager"}, + {wxEVT_TASKBAR_MOVE, 227, "taskbar_move"}, + {wxEVT_TASKBAR_LEFT_DOWN, 227, "taskbar_left_down"}, + {wxEVT_TASKBAR_LEFT_UP, 227, "taskbar_left_up"}, + {wxEVT_TASKBAR_RIGHT_DOWN, 227, "taskbar_right_down"}, + {wxEVT_TASKBAR_RIGHT_UP, 227, "taskbar_right_up"}, + {wxEVT_TASKBAR_LEFT_DCLICK, 227, "taskbar_left_dclick"}, + {wxEVT_TASKBAR_RIGHT_DCLICK, 227, "taskbar_right_dclick"}, {-1, 0, } }; for(int i=0; event_types[i].ev_type != -1; i++) { @@ -743,7 +746,14 @@ case 209: {// wxNotebookEvent rt.addTupleCount(2); break; } -case 215: {// wxSpinEvent +case 215: {// wxClipboardTextEvent + evClass = (char*)"wxClipboardTextEvent"; + rt.addAtom((char*)"wxClipboardText"); + rt.addAtom(Etype->eName); + rt.addTupleCount(2); + break; +} +case 216: {// wxSpinEvent wxSpinEvent * ev = (wxSpinEvent *) event; evClass = (char*)"wxSpinEvent"; rt.addAtom((char*)"wxSpin"); @@ -752,14 +762,14 @@ case 215: {// wxSpinEvent rt.addTupleCount(3); break; } -case 217: {// wxSplitterEvent +case 218: {// wxSplitterEvent evClass = (char*)"wxSplitterEvent"; rt.addAtom((char*)"wxSplitter"); rt.addAtom(Etype->eName); rt.addTupleCount(2); break; } -case 219: {// wxHtmlLinkEvent +case 220: {// wxHtmlLinkEvent wxHtmlLinkEvent * ev = (wxHtmlLinkEvent *) event; evClass = (char*)"wxHtmlLinkEvent"; rt.addAtom((char*)"wxHtmlLink"); @@ -768,7 +778,7 @@ case 219: {// wxHtmlLinkEvent rt.addTupleCount(3); break; } -case 222: {// wxAuiNotebookEvent +case 223: {// wxAuiNotebookEvent wxAuiNotebookEvent * ev = (wxAuiNotebookEvent *) event; wxAuiNotebook * GetDragSource = ev->GetDragSource(); evClass = (char*)"wxAuiNotebookEvent"; @@ -780,7 +790,7 @@ case 222: {// wxAuiNotebookEvent rt.addTupleCount(5); break; } -case 223: {// wxAuiManagerEvent +case 224: {// wxAuiManagerEvent wxAuiManagerEvent * ev = (wxAuiManagerEvent *) event; wxAuiManager * GetManager = ev->GetManager(); wxAuiPaneInfo * GetPane = ev->GetPane(); @@ -797,7 +807,7 @@ case 223: {// wxAuiManagerEvent rt.addTupleCount(8); break; } -case 226: {// wxTaskBarIconEvent +case 227: {// wxTaskBarIconEvent evClass = (char*)"wxTaskBarIconEvent"; rt.addAtom((char*)"wxTaskBarIcon"); rt.addAtom(Etype->eName); diff --git a/lib/wx/c_src/gen/wxe_funcs.cpp b/lib/wx/c_src/gen/wxe_funcs.cpp index 2d55f34346..2d8dbb242b 100644 --- a/lib/wx/c_src/gen/wxe_funcs.cpp +++ b/lib/wx/c_src/gen/wxe_funcs.cpp @@ -2218,6 +2218,12 @@ case wxPanel_InitDialog: { // wxPanel::InitDialog This->InitDialog(); break; } +case wxPanel_SetFocusIgnoringChildren: { // wxPanel::SetFocusIgnoringChildren + wxPanel *This = (wxPanel *) getPtr(bp,memenv); bp += 4; + if(!This) throw wxe_badarg(0); + This->SetFocusIgnoringChildren(); + break; +} case wxScrolledWindow_new_0: { // wxScrolledWindow::wxScrolledWindow wxScrolledWindow * Result = new EwxScrolledWindow(); newPtr((void *) Result, 0, memenv); @@ -8849,16 +8855,14 @@ case wxStatusBar_Create: { // wxStatusBar::Create break; } case wxStatusBar_GetFieldRect: { // wxStatusBar::GetFieldRect + wxRect rect; wxStatusBar *This = (wxStatusBar *) getPtr(bp,memenv); bp += 4; int * i = (int *) bp; bp += 4; - int * rectX = (int *) bp; bp += 4; - int * rectY = (int *) bp; bp += 4; - int * rectW = (int *) bp; bp += 4; - int * rectH = (int *) bp; bp += 4; - wxRect rect = wxRect(*rectX,*rectY,*rectW,*rectH); if(!This) throw wxe_badarg(0); bool Result = This->GetFieldRect(*i,rect); rt.addBool(Result); + rt.add(rect); + rt.addTupleCount(2); break; } case wxStatusBar_GetFieldsCount: { // wxStatusBar::GetFieldsCount @@ -31360,7 +31364,7 @@ case wxAuiManagerEvent_CanVeto: { // wxAuiManagerEvent::CanVeto } case wxLogNull_new: { // wxLogNull::wxLogNull wxLogNull * Result = new wxLogNull(); - newPtr((void *) Result, 224, memenv); + newPtr((void *) Result, 225, memenv); rt.addRef(getRef((void *)Result,memenv), "wxLogNull"); break; } @@ -31450,7 +31454,7 @@ void WxeApp::delete_object(void *ptr, wxeRefData *refd) { case 211: /* delete (wxFileDataObject *) ptr;These objects must be deleted by owner object */ break; case 212: /* delete (wxTextDataObject *) ptr;These objects must be deleted by owner object */ break; case 213: /* delete (wxBitmapDataObject *) ptr;These objects must be deleted by owner object */ break; - case 224: delete (wxLogNull *) ptr; break; + case 225: delete (wxLogNull *) ptr; break; default: delete (wxObject *) ptr; }} diff --git a/lib/wx/c_src/gen/wxe_macros.h b/lib/wx/c_src/gen/wxe_macros.h index c341825d8d..bd7e962fcc 100644 --- a/lib/wx/c_src/gen/wxe_macros.h +++ b/lib/wx/c_src/gen/wxe_macros.h @@ -288,3068 +288,3069 @@ #define wxPanel_new_2 334 #define wxPanel_destruct 335 #define wxPanel_InitDialog 336 -#define wxScrolledWindow_new_0 337 -#define wxScrolledWindow_new_2 338 -#define wxScrolledWindow_destruct 339 -#define wxScrolledWindow_CalcScrolledPosition_4 340 -#define wxScrolledWindow_CalcScrolledPosition_1 341 -#define wxScrolledWindow_CalcUnscrolledPosition_4 342 -#define wxScrolledWindow_CalcUnscrolledPosition_1 343 -#define wxScrolledWindow_EnableScrolling 344 -#define wxScrolledWindow_GetScrollPixelsPerUnit 345 -#define wxScrolledWindow_GetViewStart 346 -#define wxScrolledWindow_DoPrepareDC 347 -#define wxScrolledWindow_PrepareDC 348 -#define wxScrolledWindow_Scroll 349 -#define wxScrolledWindow_SetScrollbars 350 -#define wxScrolledWindow_SetScrollRate 351 -#define wxScrolledWindow_SetTargetWindow 352 -#define wxSashWindow_new_0 353 -#define wxSashWindow_new_2 354 -#define wxSashWindow_destruct 355 -#define wxSashWindow_GetSashVisible 356 -#define wxSashWindow_GetMaximumSizeX 357 -#define wxSashWindow_GetMaximumSizeY 358 -#define wxSashWindow_GetMinimumSizeX 359 -#define wxSashWindow_GetMinimumSizeY 360 -#define wxSashWindow_SetMaximumSizeX 361 -#define wxSashWindow_SetMaximumSizeY 362 -#define wxSashWindow_SetMinimumSizeX 363 -#define wxSashWindow_SetMinimumSizeY 364 -#define wxSashWindow_SetSashVisible 365 -#define wxSashLayoutWindow_new_0 366 -#define wxSashLayoutWindow_new_2 367 -#define wxSashLayoutWindow_Create 368 -#define wxSashLayoutWindow_GetAlignment 369 -#define wxSashLayoutWindow_GetOrientation 370 -#define wxSashLayoutWindow_SetAlignment 371 -#define wxSashLayoutWindow_SetDefaultSize 372 -#define wxSashLayoutWindow_SetOrientation 373 -#define wxSashLayoutWindow_destroy 374 -#define wxGrid_new_0 375 -#define wxGrid_new_3 376 -#define wxGrid_new_4 377 -#define wxGrid_destruct 378 -#define wxGrid_AppendCols 379 -#define wxGrid_AppendRows 380 -#define wxGrid_AutoSize 381 -#define wxGrid_AutoSizeColumn 382 -#define wxGrid_AutoSizeColumns 383 -#define wxGrid_AutoSizeRow 384 -#define wxGrid_AutoSizeRows 385 -#define wxGrid_BeginBatch 386 -#define wxGrid_BlockToDeviceRect 387 -#define wxGrid_CanDragColSize 388 -#define wxGrid_CanDragRowSize 389 -#define wxGrid_CanDragGridSize 390 -#define wxGrid_CanEnableCellControl 391 -#define wxGrid_CellToRect_2 392 -#define wxGrid_CellToRect_1 393 -#define wxGrid_ClearGrid 394 -#define wxGrid_ClearSelection 395 -#define wxGrid_CreateGrid 396 -#define wxGrid_DeleteCols 397 -#define wxGrid_DeleteRows 398 -#define wxGrid_DisableCellEditControl 399 -#define wxGrid_DisableDragColSize 400 -#define wxGrid_DisableDragGridSize 401 -#define wxGrid_DisableDragRowSize 402 -#define wxGrid_EnableCellEditControl 403 -#define wxGrid_EnableDragColSize 404 -#define wxGrid_EnableDragGridSize 405 -#define wxGrid_EnableDragRowSize 406 -#define wxGrid_EnableEditing 407 -#define wxGrid_EnableGridLines 408 -#define wxGrid_EndBatch 409 -#define wxGrid_Fit 410 -#define wxGrid_ForceRefresh 411 -#define wxGrid_GetBatchCount 412 -#define wxGrid_GetCellAlignment 413 -#define wxGrid_GetCellBackgroundColour 414 -#define wxGrid_GetCellEditor 415 -#define wxGrid_GetCellFont 416 -#define wxGrid_GetCellRenderer 417 -#define wxGrid_GetCellTextColour 418 -#define wxGrid_GetCellValue_2 419 -#define wxGrid_GetCellValue_1 420 -#define wxGrid_GetColLabelAlignment 421 -#define wxGrid_GetColLabelSize 422 -#define wxGrid_GetColLabelValue 423 -#define wxGrid_GetColMinimalAcceptableWidth 424 -#define wxGrid_GetDefaultCellAlignment 425 -#define wxGrid_GetDefaultCellBackgroundColour 426 -#define wxGrid_GetDefaultCellFont 427 -#define wxGrid_GetDefaultCellTextColour 428 -#define wxGrid_GetDefaultColLabelSize 429 -#define wxGrid_GetDefaultColSize 430 -#define wxGrid_GetDefaultEditor 431 -#define wxGrid_GetDefaultEditorForCell_2 432 -#define wxGrid_GetDefaultEditorForCell_1 433 -#define wxGrid_GetDefaultEditorForType 434 -#define wxGrid_GetDefaultRenderer 435 -#define wxGrid_GetDefaultRendererForCell 436 -#define wxGrid_GetDefaultRendererForType 437 -#define wxGrid_GetDefaultRowLabelSize 438 -#define wxGrid_GetDefaultRowSize 439 -#define wxGrid_GetGridCursorCol 440 -#define wxGrid_GetGridCursorRow 441 -#define wxGrid_GetGridLineColour 442 -#define wxGrid_GridLinesEnabled 443 -#define wxGrid_GetLabelBackgroundColour 444 -#define wxGrid_GetLabelFont 445 -#define wxGrid_GetLabelTextColour 446 -#define wxGrid_GetNumberCols 447 -#define wxGrid_GetNumberRows 448 -#define wxGrid_GetOrCreateCellAttr 449 -#define wxGrid_GetRowMinimalAcceptableHeight 450 -#define wxGrid_GetRowLabelAlignment 451 -#define wxGrid_GetRowLabelSize 452 -#define wxGrid_GetRowLabelValue 453 -#define wxGrid_GetRowSize 454 -#define wxGrid_GetScrollLineX 455 -#define wxGrid_GetScrollLineY 456 -#define wxGrid_GetSelectedCells 457 -#define wxGrid_GetSelectedCols 458 -#define wxGrid_GetSelectedRows 459 -#define wxGrid_GetSelectionBackground 460 -#define wxGrid_GetSelectionBlockTopLeft 461 -#define wxGrid_GetSelectionBlockBottomRight 462 -#define wxGrid_GetSelectionForeground 463 -#define wxGrid_GetViewWidth 464 -#define wxGrid_GetGridWindow 465 -#define wxGrid_GetGridRowLabelWindow 466 -#define wxGrid_GetGridColLabelWindow 467 -#define wxGrid_GetGridCornerLabelWindow 468 -#define wxGrid_HideCellEditControl 469 -#define wxGrid_InsertCols 470 -#define wxGrid_InsertRows 471 -#define wxGrid_IsCellEditControlEnabled 472 -#define wxGrid_IsCurrentCellReadOnly 473 -#define wxGrid_IsEditable 474 -#define wxGrid_IsInSelection_2 475 -#define wxGrid_IsInSelection_1 476 -#define wxGrid_IsReadOnly 477 -#define wxGrid_IsSelection 478 -#define wxGrid_IsVisible_3 479 -#define wxGrid_IsVisible_2 480 -#define wxGrid_MakeCellVisible_2 481 -#define wxGrid_MakeCellVisible_1 482 -#define wxGrid_MoveCursorDown 483 -#define wxGrid_MoveCursorLeft 484 -#define wxGrid_MoveCursorRight 485 -#define wxGrid_MoveCursorUp 486 -#define wxGrid_MoveCursorDownBlock 487 -#define wxGrid_MoveCursorLeftBlock 488 -#define wxGrid_MoveCursorRightBlock 489 -#define wxGrid_MoveCursorUpBlock 490 -#define wxGrid_MovePageDown 491 -#define wxGrid_MovePageUp 492 -#define wxGrid_RegisterDataType 493 -#define wxGrid_SaveEditControlValue 494 -#define wxGrid_SelectAll 495 -#define wxGrid_SelectBlock_5 496 -#define wxGrid_SelectBlock_3 497 -#define wxGrid_SelectCol 498 -#define wxGrid_SelectRow 499 -#define wxGrid_SetCellAlignment_4 500 -#define wxGrid_SetCellAlignment_3 501 -#define wxGrid_SetCellAlignment_1 502 -#define wxGrid_SetCellBackgroundColour_3_0 503 -#define wxGrid_SetCellBackgroundColour_1 504 -#define wxGrid_SetCellBackgroundColour_3_1 505 -#define wxGrid_SetCellEditor 506 -#define wxGrid_SetCellFont 507 -#define wxGrid_SetCellRenderer 508 -#define wxGrid_SetCellTextColour_3_0 509 -#define wxGrid_SetCellTextColour_3_1 510 -#define wxGrid_SetCellTextColour_1 511 -#define wxGrid_SetCellValue_3_0 512 -#define wxGrid_SetCellValue_2 513 -#define wxGrid_SetCellValue_3_1 514 -#define wxGrid_SetColAttr 515 -#define wxGrid_SetColFormatBool 516 -#define wxGrid_SetColFormatNumber 517 -#define wxGrid_SetColFormatFloat 518 -#define wxGrid_SetColFormatCustom 519 -#define wxGrid_SetColLabelAlignment 520 -#define wxGrid_SetColLabelSize 521 -#define wxGrid_SetColLabelValue 522 -#define wxGrid_SetColMinimalWidth 523 -#define wxGrid_SetColMinimalAcceptableWidth 524 -#define wxGrid_SetColSize 525 -#define wxGrid_SetDefaultCellAlignment 526 -#define wxGrid_SetDefaultCellBackgroundColour 527 -#define wxGrid_SetDefaultCellFont 528 -#define wxGrid_SetDefaultCellTextColour 529 -#define wxGrid_SetDefaultEditor 530 -#define wxGrid_SetDefaultRenderer 531 -#define wxGrid_SetDefaultColSize 532 -#define wxGrid_SetDefaultRowSize 533 -#define wxGrid_SetGridCursor 534 -#define wxGrid_SetGridLineColour 535 -#define wxGrid_SetLabelBackgroundColour 536 -#define wxGrid_SetLabelFont 537 -#define wxGrid_SetLabelTextColour 538 -#define wxGrid_SetMargins 539 -#define wxGrid_SetReadOnly 540 -#define wxGrid_SetRowAttr 541 -#define wxGrid_SetRowLabelAlignment 542 -#define wxGrid_SetRowLabelSize 543 -#define wxGrid_SetRowLabelValue 544 -#define wxGrid_SetRowMinimalHeight 545 -#define wxGrid_SetRowMinimalAcceptableHeight 546 -#define wxGrid_SetRowSize 547 -#define wxGrid_SetScrollLineX 548 -#define wxGrid_SetScrollLineY 549 -#define wxGrid_SetSelectionBackground 550 -#define wxGrid_SetSelectionForeground 551 -#define wxGrid_SetSelectionMode 552 -#define wxGrid_ShowCellEditControl 553 -#define wxGrid_XToCol 554 -#define wxGrid_XToEdgeOfCol 555 -#define wxGrid_YToEdgeOfRow 556 -#define wxGrid_YToRow 557 -#define wxGridCellRenderer_Draw 558 -#define wxGridCellRenderer_GetBestSize 559 -#define wxGridCellEditor_Create 560 -#define wxGridCellEditor_IsCreated 561 -#define wxGridCellEditor_SetSize 562 -#define wxGridCellEditor_Show 563 -#define wxGridCellEditor_PaintBackground 564 -#define wxGridCellEditor_BeginEdit 565 -#define wxGridCellEditor_EndEdit 566 -#define wxGridCellEditor_Reset 567 -#define wxGridCellEditor_StartingKey 568 -#define wxGridCellEditor_StartingClick 569 -#define wxGridCellEditor_HandleReturn 570 -#define wxGridCellBoolRenderer_new 571 -#define wxGridCellBoolRenderer_destroy 572 -#define wxGridCellBoolEditor_new 573 -#define wxGridCellBoolEditor_IsTrueValue 574 -#define wxGridCellBoolEditor_UseStringValues 575 -#define wxGridCellBoolEditor_destroy 576 -#define wxGridCellFloatRenderer_new 577 -#define wxGridCellFloatRenderer_GetPrecision 578 -#define wxGridCellFloatRenderer_GetWidth 579 -#define wxGridCellFloatRenderer_SetParameters 580 -#define wxGridCellFloatRenderer_SetPrecision 581 -#define wxGridCellFloatRenderer_SetWidth 582 -#define wxGridCellFloatRenderer_destroy 583 -#define wxGridCellFloatEditor_new 584 -#define wxGridCellFloatEditor_SetParameters 585 -#define wxGridCellFloatEditor_destroy 586 -#define wxGridCellStringRenderer_new 587 -#define wxGridCellStringRenderer_destroy 588 -#define wxGridCellTextEditor_new 589 -#define wxGridCellTextEditor_SetParameters 590 -#define wxGridCellTextEditor_destroy 591 -#define wxGridCellChoiceEditor_new 593 -#define wxGridCellChoiceEditor_SetParameters 594 -#define wxGridCellChoiceEditor_destroy 595 -#define wxGridCellNumberRenderer_new 596 -#define wxGridCellNumberRenderer_destroy 597 -#define wxGridCellNumberEditor_new 598 -#define wxGridCellNumberEditor_GetValue 599 -#define wxGridCellNumberEditor_SetParameters 600 -#define wxGridCellNumberEditor_destroy 601 -#define wxGridCellAttr_SetTextColour 602 -#define wxGridCellAttr_SetBackgroundColour 603 -#define wxGridCellAttr_SetFont 604 -#define wxGridCellAttr_SetAlignment 605 -#define wxGridCellAttr_SetReadOnly 606 -#define wxGridCellAttr_SetRenderer 607 -#define wxGridCellAttr_SetEditor 608 -#define wxGridCellAttr_HasTextColour 609 -#define wxGridCellAttr_HasBackgroundColour 610 -#define wxGridCellAttr_HasFont 611 -#define wxGridCellAttr_HasAlignment 612 -#define wxGridCellAttr_HasRenderer 613 -#define wxGridCellAttr_HasEditor 614 -#define wxGridCellAttr_GetTextColour 615 -#define wxGridCellAttr_GetBackgroundColour 616 -#define wxGridCellAttr_GetFont 617 -#define wxGridCellAttr_GetAlignment 618 -#define wxGridCellAttr_GetRenderer 619 -#define wxGridCellAttr_GetEditor 620 -#define wxGridCellAttr_IsReadOnly 621 -#define wxGridCellAttr_SetDefAttr 622 -#define wxDC_Blit 623 -#define wxDC_CalcBoundingBox 624 -#define wxDC_Clear 625 -#define wxDC_ComputeScaleAndOrigin 626 -#define wxDC_CrossHair 627 -#define wxDC_DestroyClippingRegion 628 -#define wxDC_DeviceToLogicalX 629 -#define wxDC_DeviceToLogicalXRel 630 -#define wxDC_DeviceToLogicalY 631 -#define wxDC_DeviceToLogicalYRel 632 -#define wxDC_DrawArc 633 -#define wxDC_DrawBitmap 634 -#define wxDC_DrawCheckMark 635 -#define wxDC_DrawCircle 636 -#define wxDC_DrawEllipse_2 638 -#define wxDC_DrawEllipse_1 639 -#define wxDC_DrawEllipticArc 640 -#define wxDC_DrawIcon 641 -#define wxDC_DrawLabel 642 -#define wxDC_DrawLine 643 -#define wxDC_DrawLines 644 -#define wxDC_DrawPolygon 646 -#define wxDC_DrawPoint 648 -#define wxDC_DrawRectangle_2 650 -#define wxDC_DrawRectangle_1 651 -#define wxDC_DrawRotatedText 652 -#define wxDC_DrawRoundedRectangle_3 654 -#define wxDC_DrawRoundedRectangle_2 655 -#define wxDC_DrawText 656 -#define wxDC_EndDoc 657 -#define wxDC_EndPage 658 -#define wxDC_FloodFill 659 -#define wxDC_GetBackground 660 -#define wxDC_GetBackgroundMode 661 -#define wxDC_GetBrush 662 -#define wxDC_GetCharHeight 663 -#define wxDC_GetCharWidth 664 -#define wxDC_GetClippingBox 665 -#define wxDC_GetFont 667 -#define wxDC_GetLayoutDirection 668 -#define wxDC_GetLogicalFunction 669 -#define wxDC_GetMapMode 670 -#define wxDC_GetMultiLineTextExtent_4 671 -#define wxDC_GetMultiLineTextExtent_1 672 -#define wxDC_GetPartialTextExtents 673 -#define wxDC_GetPen 674 -#define wxDC_GetPixel 675 -#define wxDC_GetPPI 676 -#define wxDC_GetSize 678 -#define wxDC_GetSizeMM 680 -#define wxDC_GetTextBackground 681 -#define wxDC_GetTextExtent_4 682 -#define wxDC_GetTextExtent_1 683 -#define wxDC_GetTextForeground 685 -#define wxDC_GetUserScale 686 -#define wxDC_GradientFillConcentric_3 687 -#define wxDC_GradientFillConcentric_4 688 -#define wxDC_GradientFillLinear 689 -#define wxDC_LogicalToDeviceX 690 -#define wxDC_LogicalToDeviceXRel 691 -#define wxDC_LogicalToDeviceY 692 -#define wxDC_LogicalToDeviceYRel 693 -#define wxDC_MaxX 694 -#define wxDC_MaxY 695 -#define wxDC_MinX 696 -#define wxDC_MinY 697 -#define wxDC_IsOk 698 -#define wxDC_ResetBoundingBox 699 -#define wxDC_SetAxisOrientation 700 -#define wxDC_SetBackground 701 -#define wxDC_SetBackgroundMode 702 -#define wxDC_SetBrush 703 -#define wxDC_SetClippingRegion_2 705 -#define wxDC_SetClippingRegion_1_1 706 -#define wxDC_SetClippingRegion_1_0 707 -#define wxDC_SetDeviceOrigin 708 -#define wxDC_SetFont 709 -#define wxDC_SetLayoutDirection 710 -#define wxDC_SetLogicalFunction 711 -#define wxDC_SetMapMode 712 -#define wxDC_SetPalette 713 -#define wxDC_SetPen 714 -#define wxDC_SetTextBackground 715 -#define wxDC_SetTextForeground 716 -#define wxDC_SetUserScale 717 -#define wxDC_StartDoc 718 -#define wxDC_StartPage 719 -#define wxMirrorDC_new 720 -#define wxMirrorDC_destroy 721 -#define wxScreenDC_new 722 -#define wxScreenDC_destruct 723 -#define wxPostScriptDC_new_0 724 -#define wxPostScriptDC_new_1 725 -#define wxPostScriptDC_destruct 726 -#define wxPostScriptDC_SetResolution 727 -#define wxPostScriptDC_GetResolution 728 -#define wxWindowDC_new_0 729 -#define wxWindowDC_new_1 730 -#define wxWindowDC_destruct 731 -#define wxClientDC_new_0 732 -#define wxClientDC_new_1 733 -#define wxClientDC_destroy 734 -#define wxPaintDC_new_0 735 -#define wxPaintDC_new_1 736 -#define wxPaintDC_destroy 737 -#define wxMemoryDC_new_1_0 739 -#define wxMemoryDC_new_1_1 740 -#define wxMemoryDC_new_0 741 -#define wxMemoryDC_destruct 743 -#define wxMemoryDC_SelectObject 744 -#define wxMemoryDC_SelectObjectAsSource 745 -#define wxBufferedDC_new_0 746 -#define wxBufferedDC_new_2 747 -#define wxBufferedDC_new_3 748 -#define wxBufferedDC_destruct 749 -#define wxBufferedDC_Init_2 750 -#define wxBufferedDC_Init_3 751 -#define wxBufferedPaintDC_new_3 752 -#define wxBufferedPaintDC_new_2 753 -#define wxBufferedPaintDC_destruct 754 -#define wxGraphicsObject_destruct 755 -#define wxGraphicsObject_GetRenderer 756 -#define wxGraphicsObject_IsNull 757 -#define wxGraphicsContext_destruct 758 -#define wxGraphicsContext_Create_1_1 759 -#define wxGraphicsContext_Create_1_0 760 -#define wxGraphicsContext_Create_0 761 -#define wxGraphicsContext_CreatePen 762 -#define wxGraphicsContext_CreateBrush 763 -#define wxGraphicsContext_CreateRadialGradientBrush 764 -#define wxGraphicsContext_CreateLinearGradientBrush 765 -#define wxGraphicsContext_CreateFont 766 -#define wxGraphicsContext_CreateMatrix 767 -#define wxGraphicsContext_CreatePath 768 -#define wxGraphicsContext_Clip_1 769 -#define wxGraphicsContext_Clip_4 770 -#define wxGraphicsContext_ResetClip 771 -#define wxGraphicsContext_DrawBitmap 772 -#define wxGraphicsContext_DrawEllipse 773 -#define wxGraphicsContext_DrawIcon 774 -#define wxGraphicsContext_DrawLines 775 -#define wxGraphicsContext_DrawPath 776 -#define wxGraphicsContext_DrawRectangle 777 -#define wxGraphicsContext_DrawRoundedRectangle 778 -#define wxGraphicsContext_DrawText_3 779 -#define wxGraphicsContext_DrawText_4_0 780 -#define wxGraphicsContext_DrawText_4_1 781 -#define wxGraphicsContext_DrawText_5 782 -#define wxGraphicsContext_FillPath 783 -#define wxGraphicsContext_StrokePath 784 -#define wxGraphicsContext_GetPartialTextExtents 785 -#define wxGraphicsContext_GetTextExtent 786 -#define wxGraphicsContext_Rotate 787 -#define wxGraphicsContext_Scale 788 -#define wxGraphicsContext_Translate 789 -#define wxGraphicsContext_GetTransform 790 -#define wxGraphicsContext_SetTransform 791 -#define wxGraphicsContext_ConcatTransform 792 -#define wxGraphicsContext_SetBrush_1_1 793 -#define wxGraphicsContext_SetBrush_1_0 794 -#define wxGraphicsContext_SetFont_1 795 -#define wxGraphicsContext_SetFont_2 796 -#define wxGraphicsContext_SetPen_1_0 797 -#define wxGraphicsContext_SetPen_1_1 798 -#define wxGraphicsContext_StrokeLine 799 -#define wxGraphicsContext_StrokeLines 800 -#define wxGraphicsMatrix_Concat 802 -#define wxGraphicsMatrix_Get 804 -#define wxGraphicsMatrix_Invert 805 -#define wxGraphicsMatrix_IsEqual 806 -#define wxGraphicsMatrix_IsIdentity 808 -#define wxGraphicsMatrix_Rotate 809 -#define wxGraphicsMatrix_Scale 810 -#define wxGraphicsMatrix_Translate 811 -#define wxGraphicsMatrix_Set 812 -#define wxGraphicsMatrix_TransformPoint 813 -#define wxGraphicsMatrix_TransformDistance 814 -#define wxGraphicsPath_MoveToPoint_2 815 -#define wxGraphicsPath_MoveToPoint_1 816 -#define wxGraphicsPath_AddArc_6 817 -#define wxGraphicsPath_AddArc_5 818 -#define wxGraphicsPath_AddArcToPoint 819 -#define wxGraphicsPath_AddCircle 820 -#define wxGraphicsPath_AddCurveToPoint_6 821 -#define wxGraphicsPath_AddCurveToPoint_3 822 -#define wxGraphicsPath_AddEllipse 823 -#define wxGraphicsPath_AddLineToPoint_2 824 -#define wxGraphicsPath_AddLineToPoint_1 825 -#define wxGraphicsPath_AddPath 826 -#define wxGraphicsPath_AddQuadCurveToPoint 827 -#define wxGraphicsPath_AddRectangle 828 -#define wxGraphicsPath_AddRoundedRectangle 829 -#define wxGraphicsPath_CloseSubpath 830 -#define wxGraphicsPath_Contains_3 831 -#define wxGraphicsPath_Contains_2 832 -#define wxGraphicsPath_GetBox 834 -#define wxGraphicsPath_GetCurrentPoint 836 -#define wxGraphicsPath_Transform 837 -#define wxGraphicsRenderer_GetDefaultRenderer 838 -#define wxGraphicsRenderer_CreateContext_1_1 839 -#define wxGraphicsRenderer_CreateContext_1_0 840 -#define wxGraphicsRenderer_CreatePen 841 -#define wxGraphicsRenderer_CreateBrush 842 -#define wxGraphicsRenderer_CreateLinearGradientBrush 843 -#define wxGraphicsRenderer_CreateRadialGradientBrush 844 -#define wxGraphicsRenderer_CreateFont 845 -#define wxGraphicsRenderer_CreateMatrix 846 -#define wxGraphicsRenderer_CreatePath 847 -#define wxMenuBar_new_1 849 -#define wxMenuBar_new_0 851 -#define wxMenuBar_destruct 853 -#define wxMenuBar_Append 854 -#define wxMenuBar_Check 855 -#define wxMenuBar_Enable_2 856 -#define wxMenuBar_Enable_1 857 -#define wxMenuBar_EnableTop 858 -#define wxMenuBar_FindMenu 859 -#define wxMenuBar_FindMenuItem 860 -#define wxMenuBar_FindItem 861 -#define wxMenuBar_GetHelpString 862 -#define wxMenuBar_GetLabel_1 863 -#define wxMenuBar_GetLabel_0 864 -#define wxMenuBar_GetLabelTop 865 -#define wxMenuBar_GetMenu 866 -#define wxMenuBar_GetMenuCount 867 -#define wxMenuBar_Insert 868 -#define wxMenuBar_IsChecked 869 -#define wxMenuBar_IsEnabled_1 870 -#define wxMenuBar_IsEnabled_0 871 -#define wxMenuBar_Remove 872 -#define wxMenuBar_Replace 873 -#define wxMenuBar_SetHelpString 874 -#define wxMenuBar_SetLabel_2 875 -#define wxMenuBar_SetLabel_1 876 -#define wxMenuBar_SetLabelTop 877 -#define wxControl_GetLabel 878 -#define wxControl_SetLabel 879 -#define wxControlWithItems_Append_1 880 -#define wxControlWithItems_Append_2 881 -#define wxControlWithItems_appendStrings_1 882 -#define wxControlWithItems_Clear 883 -#define wxControlWithItems_Delete 884 -#define wxControlWithItems_FindString 885 -#define wxControlWithItems_getClientData 886 -#define wxControlWithItems_setClientData 887 -#define wxControlWithItems_GetCount 888 -#define wxControlWithItems_GetSelection 889 -#define wxControlWithItems_GetString 890 -#define wxControlWithItems_GetStringSelection 891 -#define wxControlWithItems_Insert_2 892 -#define wxControlWithItems_Insert_3 893 -#define wxControlWithItems_IsEmpty 894 -#define wxControlWithItems_Select 895 -#define wxControlWithItems_SetSelection 896 -#define wxControlWithItems_SetString 897 -#define wxControlWithItems_SetStringSelection 898 -#define wxMenu_new_2 901 -#define wxMenu_new_1 902 -#define wxMenu_destruct 904 -#define wxMenu_Append_3 905 -#define wxMenu_Append_1 906 -#define wxMenu_Append_4_0 907 -#define wxMenu_Append_4_1 908 -#define wxMenu_AppendCheckItem 909 -#define wxMenu_AppendRadioItem 910 -#define wxMenu_AppendSeparator 911 -#define wxMenu_Break 912 -#define wxMenu_Check 913 -#define wxMenu_Delete_1_0 914 -#define wxMenu_Delete_1_1 915 -#define wxMenu_Destroy_1_0 916 -#define wxMenu_Destroy_1_1 917 -#define wxMenu_Enable 918 -#define wxMenu_FindItem_1 919 -#define wxMenu_FindItem_2 920 -#define wxMenu_FindItemByPosition 921 -#define wxMenu_GetHelpString 922 -#define wxMenu_GetLabel 923 -#define wxMenu_GetMenuItemCount 924 -#define wxMenu_GetMenuItems 925 -#define wxMenu_GetTitle 927 -#define wxMenu_Insert_2 928 -#define wxMenu_Insert_3 929 -#define wxMenu_Insert_5_1 930 -#define wxMenu_Insert_5_0 931 -#define wxMenu_InsertCheckItem 932 -#define wxMenu_InsertRadioItem 933 -#define wxMenu_InsertSeparator 934 -#define wxMenu_IsChecked 935 -#define wxMenu_IsEnabled 936 -#define wxMenu_Prepend_1 937 -#define wxMenu_Prepend_2 938 -#define wxMenu_Prepend_4_1 939 -#define wxMenu_Prepend_4_0 940 -#define wxMenu_PrependCheckItem 941 -#define wxMenu_PrependRadioItem 942 -#define wxMenu_PrependSeparator 943 -#define wxMenu_Remove_1_0 944 -#define wxMenu_Remove_1_1 945 -#define wxMenu_SetHelpString 946 -#define wxMenu_SetLabel 947 -#define wxMenu_SetTitle 948 -#define wxMenuItem_new 949 -#define wxMenuItem_destruct 951 -#define wxMenuItem_Check 952 -#define wxMenuItem_Enable 953 -#define wxMenuItem_GetBitmap 954 -#define wxMenuItem_GetHelp 955 -#define wxMenuItem_GetId 956 -#define wxMenuItem_GetKind 957 -#define wxMenuItem_GetLabel 958 -#define wxMenuItem_GetLabelFromText 959 -#define wxMenuItem_GetMenu 960 -#define wxMenuItem_GetText 961 -#define wxMenuItem_GetSubMenu 962 -#define wxMenuItem_IsCheckable 963 -#define wxMenuItem_IsChecked 964 -#define wxMenuItem_IsEnabled 965 -#define wxMenuItem_IsSeparator 966 -#define wxMenuItem_IsSubMenu 967 -#define wxMenuItem_SetBitmap 968 -#define wxMenuItem_SetHelp 969 -#define wxMenuItem_SetMenu 970 -#define wxMenuItem_SetSubMenu 971 -#define wxMenuItem_SetText 972 -#define wxToolBar_AddControl 973 -#define wxToolBar_AddSeparator 974 -#define wxToolBar_AddTool_5 975 -#define wxToolBar_AddTool_4_0 976 -#define wxToolBar_AddTool_1 977 -#define wxToolBar_AddTool_4_1 978 -#define wxToolBar_AddTool_3 979 -#define wxToolBar_AddTool_6 980 -#define wxToolBar_AddCheckTool 981 -#define wxToolBar_AddRadioTool 982 -#define wxToolBar_DeleteTool 983 -#define wxToolBar_DeleteToolByPos 984 -#define wxToolBar_EnableTool 985 -#define wxToolBar_FindById 986 -#define wxToolBar_FindControl 987 -#define wxToolBar_FindToolForPosition 988 -#define wxToolBar_GetToolSize 989 -#define wxToolBar_GetToolBitmapSize 990 -#define wxToolBar_GetMargins 991 -#define wxToolBar_GetToolEnabled 992 -#define wxToolBar_GetToolLongHelp 993 -#define wxToolBar_GetToolPacking 994 -#define wxToolBar_GetToolPos 995 -#define wxToolBar_GetToolSeparation 996 -#define wxToolBar_GetToolShortHelp 997 -#define wxToolBar_GetToolState 998 -#define wxToolBar_InsertControl 999 -#define wxToolBar_InsertSeparator 1000 -#define wxToolBar_InsertTool_5 1001 -#define wxToolBar_InsertTool_2 1002 -#define wxToolBar_InsertTool_4 1003 -#define wxToolBar_Realize 1004 -#define wxToolBar_RemoveTool 1005 -#define wxToolBar_SetMargins 1006 -#define wxToolBar_SetToolBitmapSize 1007 -#define wxToolBar_SetToolLongHelp 1008 -#define wxToolBar_SetToolPacking 1009 -#define wxToolBar_SetToolShortHelp 1010 -#define wxToolBar_SetToolSeparation 1011 -#define wxToolBar_ToggleTool 1012 -#define wxStatusBar_new_0 1014 -#define wxStatusBar_new_2 1015 -#define wxStatusBar_destruct 1017 -#define wxStatusBar_Create 1018 -#define wxStatusBar_GetFieldRect 1019 -#define wxStatusBar_GetFieldsCount 1020 -#define wxStatusBar_GetStatusText 1021 -#define wxStatusBar_PopStatusText 1022 -#define wxStatusBar_PushStatusText 1023 -#define wxStatusBar_SetFieldsCount 1024 -#define wxStatusBar_SetMinHeight 1025 -#define wxStatusBar_SetStatusText 1026 -#define wxStatusBar_SetStatusWidths 1027 -#define wxStatusBar_SetStatusStyles 1028 -#define wxBitmap_new_0 1029 -#define wxBitmap_new_3 1030 -#define wxBitmap_new_4 1031 -#define wxBitmap_new_2_0 1032 -#define wxBitmap_new_2_1 1033 -#define wxBitmap_destruct 1034 -#define wxBitmap_ConvertToImage 1035 -#define wxBitmap_CopyFromIcon 1036 -#define wxBitmap_Create 1037 -#define wxBitmap_GetDepth 1038 -#define wxBitmap_GetHeight 1039 -#define wxBitmap_GetPalette 1040 -#define wxBitmap_GetMask 1041 -#define wxBitmap_GetWidth 1042 -#define wxBitmap_GetSubBitmap 1043 -#define wxBitmap_LoadFile 1044 -#define wxBitmap_Ok 1045 -#define wxBitmap_SaveFile 1046 -#define wxBitmap_SetDepth 1047 -#define wxBitmap_SetHeight 1048 -#define wxBitmap_SetMask 1049 -#define wxBitmap_SetPalette 1050 -#define wxBitmap_SetWidth 1051 -#define wxIcon_new_0 1052 -#define wxIcon_new_2 1053 -#define wxIcon_new_1 1054 -#define wxIcon_CopyFromBitmap 1055 -#define wxIcon_destroy 1056 -#define wxIconBundle_new_0 1057 -#define wxIconBundle_new_2 1058 -#define wxIconBundle_new_1_0 1059 -#define wxIconBundle_new_1_1 1060 -#define wxIconBundle_destruct 1061 -#define wxIconBundle_AddIcon_2 1062 -#define wxIconBundle_AddIcon_1 1063 -#define wxIconBundle_GetIcon_1_1 1064 -#define wxIconBundle_GetIcon_1_0 1065 -#define wxCursor_new_0 1066 -#define wxCursor_new_1_0 1067 -#define wxCursor_new_1_1 1068 -#define wxCursor_new_4 1069 -#define wxCursor_destruct 1070 -#define wxCursor_Ok 1071 -#define wxMask_new_0 1072 -#define wxMask_new_2_1 1073 -#define wxMask_new_2_0 1074 -#define wxMask_new_1 1075 -#define wxMask_destruct 1076 -#define wxMask_Create_2_1 1077 -#define wxMask_Create_2_0 1078 -#define wxMask_Create_1 1079 -#define wxImage_new_0 1080 -#define wxImage_new_3_0 1081 -#define wxImage_new_4 1082 -#define wxImage_new_5 1083 -#define wxImage_new_2 1084 -#define wxImage_new_3_1 1085 -#define wxImage_Blur 1086 -#define wxImage_BlurHorizontal 1087 -#define wxImage_BlurVertical 1088 -#define wxImage_ConvertAlphaToMask 1089 -#define wxImage_ConvertToGreyscale 1090 -#define wxImage_ConvertToMono 1091 -#define wxImage_Copy 1092 -#define wxImage_Create_3 1093 -#define wxImage_Create_4 1094 -#define wxImage_Create_5 1095 -#define wxImage_Destroy 1096 -#define wxImage_FindFirstUnusedColour 1097 -#define wxImage_GetImageExtWildcard 1098 -#define wxImage_GetAlpha_2 1099 -#define wxImage_GetAlpha_0 1100 -#define wxImage_GetBlue 1101 -#define wxImage_GetData 1102 -#define wxImage_GetGreen 1103 -#define wxImage_GetImageCount 1104 -#define wxImage_GetHeight 1105 -#define wxImage_GetMaskBlue 1106 -#define wxImage_GetMaskGreen 1107 -#define wxImage_GetMaskRed 1108 -#define wxImage_GetOrFindMaskColour 1109 -#define wxImage_GetPalette 1110 -#define wxImage_GetRed 1111 -#define wxImage_GetSubImage 1112 -#define wxImage_GetWidth 1113 -#define wxImage_HasAlpha 1114 -#define wxImage_HasMask 1115 -#define wxImage_GetOption 1116 -#define wxImage_GetOptionInt 1117 -#define wxImage_HasOption 1118 -#define wxImage_InitAlpha 1119 -#define wxImage_InitStandardHandlers 1120 -#define wxImage_IsTransparent 1121 -#define wxImage_LoadFile_2 1122 -#define wxImage_LoadFile_3 1123 -#define wxImage_Ok 1124 -#define wxImage_RemoveHandler 1125 -#define wxImage_Mirror 1126 -#define wxImage_Replace 1127 -#define wxImage_Rescale 1128 -#define wxImage_Resize 1129 -#define wxImage_Rotate 1130 -#define wxImage_RotateHue 1131 -#define wxImage_Rotate90 1132 -#define wxImage_SaveFile_1 1133 -#define wxImage_SaveFile_2_0 1134 -#define wxImage_SaveFile_2_1 1135 -#define wxImage_Scale 1136 -#define wxImage_Size 1137 -#define wxImage_SetAlpha_3 1138 -#define wxImage_SetAlpha_2 1139 -#define wxImage_SetData_2 1140 -#define wxImage_SetData_4 1141 -#define wxImage_SetMask 1142 -#define wxImage_SetMaskColour 1143 -#define wxImage_SetMaskFromImage 1144 -#define wxImage_SetOption_2_1 1145 -#define wxImage_SetOption_2_0 1146 -#define wxImage_SetPalette 1147 -#define wxImage_SetRGB_5 1148 -#define wxImage_SetRGB_4 1149 -#define wxImage_destroy 1150 -#define wxBrush_new_0 1151 -#define wxBrush_new_2 1152 -#define wxBrush_new_1 1153 -#define wxBrush_destruct 1155 -#define wxBrush_GetColour 1156 -#define wxBrush_GetStipple 1157 -#define wxBrush_GetStyle 1158 -#define wxBrush_IsHatch 1159 -#define wxBrush_IsOk 1160 -#define wxBrush_SetColour_1 1161 -#define wxBrush_SetColour_3 1162 -#define wxBrush_SetStipple 1163 -#define wxBrush_SetStyle 1164 -#define wxPen_new_0 1165 -#define wxPen_new_2 1166 -#define wxPen_destruct 1167 -#define wxPen_GetCap 1168 -#define wxPen_GetColour 1169 -#define wxPen_GetJoin 1170 -#define wxPen_GetStyle 1171 -#define wxPen_GetWidth 1172 -#define wxPen_IsOk 1173 -#define wxPen_SetCap 1174 -#define wxPen_SetColour_1 1175 -#define wxPen_SetColour_3 1176 -#define wxPen_SetJoin 1177 -#define wxPen_SetStyle 1178 -#define wxPen_SetWidth 1179 -#define wxRegion_new_0 1180 -#define wxRegion_new_4 1181 -#define wxRegion_new_2 1182 -#define wxRegion_new_1_1 1183 -#define wxRegion_new_1_0 1185 -#define wxRegion_destruct 1187 -#define wxRegion_Clear 1188 -#define wxRegion_Contains_2 1189 -#define wxRegion_Contains_1_0 1190 -#define wxRegion_Contains_4 1191 -#define wxRegion_Contains_1_1 1192 -#define wxRegion_ConvertToBitmap 1193 -#define wxRegion_GetBox 1194 -#define wxRegion_Intersect_4 1195 -#define wxRegion_Intersect_1_1 1196 -#define wxRegion_Intersect_1_0 1197 -#define wxRegion_IsEmpty 1198 -#define wxRegion_Subtract_4 1199 -#define wxRegion_Subtract_1_1 1200 -#define wxRegion_Subtract_1_0 1201 -#define wxRegion_Offset_2 1202 -#define wxRegion_Offset_1 1203 -#define wxRegion_Union_4 1204 -#define wxRegion_Union_1_2 1205 -#define wxRegion_Union_1_1 1206 -#define wxRegion_Union_1_0 1207 -#define wxRegion_Union_3 1208 -#define wxRegion_Xor_4 1209 -#define wxRegion_Xor_1_1 1210 -#define wxRegion_Xor_1_0 1211 -#define wxAcceleratorTable_new_0 1212 -#define wxAcceleratorTable_new_2 1213 -#define wxAcceleratorTable_destruct 1214 -#define wxAcceleratorTable_Ok 1215 -#define wxAcceleratorEntry_new_1_0 1216 -#define wxAcceleratorEntry_new_1_1 1217 -#define wxAcceleratorEntry_GetCommand 1218 -#define wxAcceleratorEntry_GetFlags 1219 -#define wxAcceleratorEntry_GetKeyCode 1220 -#define wxAcceleratorEntry_Set 1221 -#define wxAcceleratorEntry_destroy 1222 -#define wxCaret_new_3 1227 -#define wxCaret_new_2 1228 -#define wxCaret_destruct 1230 -#define wxCaret_Create_3 1231 -#define wxCaret_Create_2 1232 -#define wxCaret_GetBlinkTime 1233 -#define wxCaret_GetPosition 1235 -#define wxCaret_GetSize 1237 -#define wxCaret_GetWindow 1238 -#define wxCaret_Hide 1239 -#define wxCaret_IsOk 1240 -#define wxCaret_IsVisible 1241 -#define wxCaret_Move_2 1242 -#define wxCaret_Move_1 1243 -#define wxCaret_SetBlinkTime 1244 -#define wxCaret_SetSize_2 1245 -#define wxCaret_SetSize_1 1246 -#define wxCaret_Show 1247 -#define wxSizer_Add_2_1 1248 -#define wxSizer_Add_2_0 1249 -#define wxSizer_Add_3 1250 -#define wxSizer_Add_2_3 1251 -#define wxSizer_Add_2_2 1252 -#define wxSizer_AddSpacer 1253 -#define wxSizer_AddStretchSpacer 1254 -#define wxSizer_CalcMin 1255 -#define wxSizer_Clear 1256 -#define wxSizer_Detach_1_2 1257 -#define wxSizer_Detach_1_1 1258 -#define wxSizer_Detach_1_0 1259 -#define wxSizer_Fit 1260 -#define wxSizer_FitInside 1261 -#define wxSizer_GetChildren 1262 -#define wxSizer_GetItem_2_1 1263 -#define wxSizer_GetItem_2_0 1264 -#define wxSizer_GetItem_1 1265 -#define wxSizer_GetSize 1266 -#define wxSizer_GetPosition 1267 -#define wxSizer_GetMinSize 1268 -#define wxSizer_Hide_2_0 1269 -#define wxSizer_Hide_2_1 1270 -#define wxSizer_Hide_1 1271 -#define wxSizer_Insert_3_1 1272 -#define wxSizer_Insert_3_0 1273 -#define wxSizer_Insert_4 1274 -#define wxSizer_Insert_3_3 1275 -#define wxSizer_Insert_3_2 1276 -#define wxSizer_Insert_2 1277 -#define wxSizer_InsertSpacer 1278 -#define wxSizer_InsertStretchSpacer 1279 -#define wxSizer_IsShown_1_2 1280 -#define wxSizer_IsShown_1_1 1281 -#define wxSizer_IsShown_1_0 1282 -#define wxSizer_Layout 1283 -#define wxSizer_Prepend_2_1 1284 -#define wxSizer_Prepend_2_0 1285 -#define wxSizer_Prepend_3 1286 -#define wxSizer_Prepend_2_3 1287 -#define wxSizer_Prepend_2_2 1288 -#define wxSizer_Prepend_1 1289 -#define wxSizer_PrependSpacer 1290 -#define wxSizer_PrependStretchSpacer 1291 -#define wxSizer_RecalcSizes 1292 -#define wxSizer_Remove_1_1 1293 -#define wxSizer_Remove_1_0 1294 -#define wxSizer_Replace_3_1 1295 -#define wxSizer_Replace_3_0 1296 -#define wxSizer_Replace_2 1297 -#define wxSizer_SetDimension 1298 -#define wxSizer_SetMinSize_2 1299 -#define wxSizer_SetMinSize_1 1300 -#define wxSizer_SetItemMinSize_3_2 1301 -#define wxSizer_SetItemMinSize_2_2 1302 -#define wxSizer_SetItemMinSize_3_1 1303 -#define wxSizer_SetItemMinSize_2_1 1304 -#define wxSizer_SetItemMinSize_3_0 1305 -#define wxSizer_SetItemMinSize_2_0 1306 -#define wxSizer_SetSizeHints 1307 -#define wxSizer_SetVirtualSizeHints 1308 -#define wxSizer_Show_2_2 1309 -#define wxSizer_Show_2_1 1310 -#define wxSizer_Show_2_0 1311 -#define wxSizer_Show_1 1312 -#define wxSizerFlags_new 1313 -#define wxSizerFlags_Align 1314 -#define wxSizerFlags_Border_2 1315 -#define wxSizerFlags_Border_1 1316 -#define wxSizerFlags_Center 1317 -#define wxSizerFlags_Centre 1318 -#define wxSizerFlags_Expand 1319 -#define wxSizerFlags_Left 1320 -#define wxSizerFlags_Proportion 1321 -#define wxSizerFlags_Right 1322 -#define wxSizerFlags_destroy 1323 -#define wxSizerItem_new_5_1 1324 -#define wxSizerItem_new_2_1 1325 -#define wxSizerItem_new_5_0 1326 -#define wxSizerItem_new_2_0 1327 -#define wxSizerItem_new_6 1328 -#define wxSizerItem_new_3 1329 -#define wxSizerItem_new_0 1330 -#define wxSizerItem_destruct 1331 -#define wxSizerItem_CalcMin 1332 -#define wxSizerItem_DeleteWindows 1333 -#define wxSizerItem_DetachSizer 1334 -#define wxSizerItem_GetBorder 1335 -#define wxSizerItem_GetFlag 1336 -#define wxSizerItem_GetMinSize 1337 -#define wxSizerItem_GetPosition 1338 -#define wxSizerItem_GetProportion 1339 -#define wxSizerItem_GetRatio 1340 -#define wxSizerItem_GetRect 1341 -#define wxSizerItem_GetSize 1342 -#define wxSizerItem_GetSizer 1343 -#define wxSizerItem_GetSpacer 1344 -#define wxSizerItem_GetUserData 1345 -#define wxSizerItem_GetWindow 1346 -#define wxSizerItem_IsSizer 1347 -#define wxSizerItem_IsShown 1348 -#define wxSizerItem_IsSpacer 1349 -#define wxSizerItem_IsWindow 1350 -#define wxSizerItem_SetBorder 1351 -#define wxSizerItem_SetDimension 1352 -#define wxSizerItem_SetFlag 1353 -#define wxSizerItem_SetInitSize 1354 -#define wxSizerItem_SetMinSize_1 1355 -#define wxSizerItem_SetMinSize_2 1356 -#define wxSizerItem_SetProportion 1357 -#define wxSizerItem_SetRatio_2 1358 -#define wxSizerItem_SetRatio_1_1 1359 -#define wxSizerItem_SetRatio_1_0 1360 -#define wxSizerItem_SetSizer 1361 -#define wxSizerItem_SetSpacer_1 1362 -#define wxSizerItem_SetSpacer_2 1363 -#define wxSizerItem_SetWindow 1364 -#define wxSizerItem_Show 1365 -#define wxBoxSizer_new 1366 -#define wxBoxSizer_GetOrientation 1367 -#define wxBoxSizer_destroy 1368 -#define wxStaticBoxSizer_new_2 1369 -#define wxStaticBoxSizer_new_3 1370 -#define wxStaticBoxSizer_GetStaticBox 1371 -#define wxStaticBoxSizer_destroy 1372 -#define wxGridSizer_new_4 1373 -#define wxGridSizer_new_2 1374 -#define wxGridSizer_GetCols 1375 -#define wxGridSizer_GetHGap 1376 -#define wxGridSizer_GetRows 1377 -#define wxGridSizer_GetVGap 1378 -#define wxGridSizer_SetCols 1379 -#define wxGridSizer_SetHGap 1380 -#define wxGridSizer_SetRows 1381 -#define wxGridSizer_SetVGap 1382 -#define wxGridSizer_destroy 1383 -#define wxFlexGridSizer_new_4 1384 -#define wxFlexGridSizer_new_2 1385 -#define wxFlexGridSizer_AddGrowableCol 1386 -#define wxFlexGridSizer_AddGrowableRow 1387 -#define wxFlexGridSizer_GetFlexibleDirection 1388 -#define wxFlexGridSizer_GetNonFlexibleGrowMode 1389 -#define wxFlexGridSizer_RemoveGrowableCol 1390 -#define wxFlexGridSizer_RemoveGrowableRow 1391 -#define wxFlexGridSizer_SetFlexibleDirection 1392 -#define wxFlexGridSizer_SetNonFlexibleGrowMode 1393 -#define wxFlexGridSizer_destroy 1394 -#define wxGridBagSizer_new 1395 -#define wxGridBagSizer_Add_3_2 1396 -#define wxGridBagSizer_Add_3_1 1397 -#define wxGridBagSizer_Add_4 1398 -#define wxGridBagSizer_Add_1_0 1399 -#define wxGridBagSizer_Add_2_1 1400 -#define wxGridBagSizer_Add_2_0 1401 -#define wxGridBagSizer_Add_3_0 1402 -#define wxGridBagSizer_Add_1_1 1403 -#define wxGridBagSizer_CalcMin 1404 -#define wxGridBagSizer_CheckForIntersection_2 1405 -#define wxGridBagSizer_CheckForIntersection_3 1406 -#define wxGridBagSizer_FindItem_1_1 1407 -#define wxGridBagSizer_FindItem_1_0 1408 -#define wxGridBagSizer_FindItemAtPoint 1409 -#define wxGridBagSizer_FindItemAtPosition 1410 -#define wxGridBagSizer_FindItemWithData 1411 -#define wxGridBagSizer_GetCellSize 1412 -#define wxGridBagSizer_GetEmptyCellSize 1413 -#define wxGridBagSizer_GetItemPosition_1_2 1414 -#define wxGridBagSizer_GetItemPosition_1_1 1415 -#define wxGridBagSizer_GetItemPosition_1_0 1416 -#define wxGridBagSizer_GetItemSpan_1_2 1417 -#define wxGridBagSizer_GetItemSpan_1_1 1418 -#define wxGridBagSizer_GetItemSpan_1_0 1419 -#define wxGridBagSizer_SetEmptyCellSize 1420 -#define wxGridBagSizer_SetItemPosition_2_2 1421 -#define wxGridBagSizer_SetItemPosition_2_1 1422 -#define wxGridBagSizer_SetItemPosition_2_0 1423 -#define wxGridBagSizer_SetItemSpan_2_2 1424 -#define wxGridBagSizer_SetItemSpan_2_1 1425 -#define wxGridBagSizer_SetItemSpan_2_0 1426 -#define wxGridBagSizer_destroy 1427 -#define wxStdDialogButtonSizer_new 1428 -#define wxStdDialogButtonSizer_AddButton 1429 -#define wxStdDialogButtonSizer_Realize 1430 -#define wxStdDialogButtonSizer_SetAffirmativeButton 1431 -#define wxStdDialogButtonSizer_SetCancelButton 1432 -#define wxStdDialogButtonSizer_SetNegativeButton 1433 -#define wxStdDialogButtonSizer_destroy 1434 -#define wxFont_new_0 1435 -#define wxFont_new_1 1436 -#define wxFont_new_5 1437 -#define wxFont_destruct 1439 -#define wxFont_IsFixedWidth 1440 -#define wxFont_GetDefaultEncoding 1441 -#define wxFont_GetFaceName 1442 -#define wxFont_GetFamily 1443 -#define wxFont_GetNativeFontInfoDesc 1444 -#define wxFont_GetNativeFontInfoUserDesc 1445 -#define wxFont_GetPointSize 1446 -#define wxFont_GetStyle 1447 -#define wxFont_GetUnderlined 1448 -#define wxFont_GetWeight 1449 -#define wxFont_Ok 1450 -#define wxFont_SetDefaultEncoding 1451 -#define wxFont_SetFaceName 1452 -#define wxFont_SetFamily 1453 -#define wxFont_SetPointSize 1454 -#define wxFont_SetStyle 1455 -#define wxFont_SetUnderlined 1456 -#define wxFont_SetWeight 1457 -#define wxToolTip_Enable 1458 -#define wxToolTip_SetDelay 1459 -#define wxToolTip_new 1460 -#define wxToolTip_SetTip 1461 -#define wxToolTip_GetTip 1462 -#define wxToolTip_GetWindow 1463 -#define wxToolTip_destroy 1464 -#define wxButton_new_3 1466 -#define wxButton_new_0 1467 -#define wxButton_destruct 1468 -#define wxButton_Create 1469 -#define wxButton_GetDefaultSize 1470 -#define wxButton_SetDefault 1471 -#define wxButton_SetLabel 1472 -#define wxBitmapButton_new_4 1474 -#define wxBitmapButton_new_0 1475 -#define wxBitmapButton_Create 1476 -#define wxBitmapButton_GetBitmapDisabled 1477 -#define wxBitmapButton_GetBitmapFocus 1479 -#define wxBitmapButton_GetBitmapLabel 1481 -#define wxBitmapButton_GetBitmapSelected 1483 -#define wxBitmapButton_SetBitmapDisabled 1485 -#define wxBitmapButton_SetBitmapFocus 1486 -#define wxBitmapButton_SetBitmapLabel 1487 -#define wxBitmapButton_SetBitmapSelected 1488 -#define wxBitmapButton_destroy 1489 -#define wxToggleButton_new_0 1490 -#define wxToggleButton_new_4 1491 -#define wxToggleButton_Create 1492 -#define wxToggleButton_GetValue 1493 -#define wxToggleButton_SetValue 1494 -#define wxToggleButton_destroy 1495 -#define wxCalendarCtrl_new_0 1496 -#define wxCalendarCtrl_new_3 1497 -#define wxCalendarCtrl_Create 1498 -#define wxCalendarCtrl_destruct 1499 -#define wxCalendarCtrl_SetDate 1500 -#define wxCalendarCtrl_GetDate 1501 -#define wxCalendarCtrl_EnableYearChange 1502 -#define wxCalendarCtrl_EnableMonthChange 1503 -#define wxCalendarCtrl_EnableHolidayDisplay 1504 -#define wxCalendarCtrl_SetHeaderColours 1505 -#define wxCalendarCtrl_GetHeaderColourFg 1506 -#define wxCalendarCtrl_GetHeaderColourBg 1507 -#define wxCalendarCtrl_SetHighlightColours 1508 -#define wxCalendarCtrl_GetHighlightColourFg 1509 -#define wxCalendarCtrl_GetHighlightColourBg 1510 -#define wxCalendarCtrl_SetHolidayColours 1511 -#define wxCalendarCtrl_GetHolidayColourFg 1512 -#define wxCalendarCtrl_GetHolidayColourBg 1513 -#define wxCalendarCtrl_GetAttr 1514 -#define wxCalendarCtrl_SetAttr 1515 -#define wxCalendarCtrl_SetHoliday 1516 -#define wxCalendarCtrl_ResetAttr 1517 -#define wxCalendarCtrl_HitTest 1518 -#define wxCalendarDateAttr_new_0 1519 -#define wxCalendarDateAttr_new_2_1 1520 -#define wxCalendarDateAttr_new_2_0 1521 -#define wxCalendarDateAttr_SetTextColour 1522 -#define wxCalendarDateAttr_SetBackgroundColour 1523 -#define wxCalendarDateAttr_SetBorderColour 1524 -#define wxCalendarDateAttr_SetFont 1525 -#define wxCalendarDateAttr_SetBorder 1526 -#define wxCalendarDateAttr_SetHoliday 1527 -#define wxCalendarDateAttr_HasTextColour 1528 -#define wxCalendarDateAttr_HasBackgroundColour 1529 -#define wxCalendarDateAttr_HasBorderColour 1530 -#define wxCalendarDateAttr_HasFont 1531 -#define wxCalendarDateAttr_HasBorder 1532 -#define wxCalendarDateAttr_IsHoliday 1533 -#define wxCalendarDateAttr_GetTextColour 1534 -#define wxCalendarDateAttr_GetBackgroundColour 1535 -#define wxCalendarDateAttr_GetBorderColour 1536 -#define wxCalendarDateAttr_GetFont 1537 -#define wxCalendarDateAttr_GetBorder 1538 -#define wxCalendarDateAttr_destroy 1539 -#define wxCheckBox_new_4 1541 -#define wxCheckBox_new_0 1542 -#define wxCheckBox_Create 1543 -#define wxCheckBox_GetValue 1544 -#define wxCheckBox_Get3StateValue 1545 -#define wxCheckBox_Is3rdStateAllowedForUser 1546 -#define wxCheckBox_Is3State 1547 -#define wxCheckBox_IsChecked 1548 -#define wxCheckBox_SetValue 1549 -#define wxCheckBox_Set3StateValue 1550 -#define wxCheckBox_destroy 1551 -#define wxCheckListBox_new_0 1552 -#define wxCheckListBox_new_3 1554 -#define wxCheckListBox_Check 1555 -#define wxCheckListBox_IsChecked 1556 -#define wxCheckListBox_destroy 1557 -#define wxChoice_new_3 1560 -#define wxChoice_new_0 1561 -#define wxChoice_destruct 1563 -#define wxChoice_Create 1565 -#define wxChoice_Delete 1566 -#define wxChoice_GetColumns 1567 -#define wxChoice_SetColumns 1568 -#define wxComboBox_new_0 1569 -#define wxComboBox_new_3 1571 -#define wxComboBox_destruct 1572 -#define wxComboBox_Create 1574 -#define wxComboBox_CanCopy 1575 -#define wxComboBox_CanCut 1576 -#define wxComboBox_CanPaste 1577 -#define wxComboBox_CanRedo 1578 -#define wxComboBox_CanUndo 1579 -#define wxComboBox_Copy 1580 -#define wxComboBox_Cut 1581 -#define wxComboBox_GetInsertionPoint 1582 -#define wxComboBox_GetLastPosition 1583 -#define wxComboBox_GetValue 1584 -#define wxComboBox_Paste 1585 -#define wxComboBox_Redo 1586 -#define wxComboBox_Replace 1587 -#define wxComboBox_Remove 1588 -#define wxComboBox_SetInsertionPoint 1589 -#define wxComboBox_SetInsertionPointEnd 1590 -#define wxComboBox_SetSelection_1 1591 -#define wxComboBox_SetSelection_2 1592 -#define wxComboBox_SetValue 1593 -#define wxComboBox_Undo 1594 -#define wxGauge_new_0 1595 -#define wxGauge_new_4 1596 -#define wxGauge_Create 1597 -#define wxGauge_GetBezelFace 1598 -#define wxGauge_GetRange 1599 -#define wxGauge_GetShadowWidth 1600 -#define wxGauge_GetValue 1601 -#define wxGauge_IsVertical 1602 -#define wxGauge_SetBezelFace 1603 -#define wxGauge_SetRange 1604 -#define wxGauge_SetShadowWidth 1605 -#define wxGauge_SetValue 1606 -#define wxGauge_Pulse 1607 -#define wxGauge_destroy 1608 -#define wxGenericDirCtrl_new_0 1609 -#define wxGenericDirCtrl_new_2 1610 -#define wxGenericDirCtrl_destruct 1611 -#define wxGenericDirCtrl_Create 1612 -#define wxGenericDirCtrl_Init 1613 -#define wxGenericDirCtrl_CollapseTree 1614 -#define wxGenericDirCtrl_ExpandPath 1615 -#define wxGenericDirCtrl_GetDefaultPath 1616 -#define wxGenericDirCtrl_GetPath 1617 -#define wxGenericDirCtrl_GetFilePath 1618 -#define wxGenericDirCtrl_GetFilter 1619 -#define wxGenericDirCtrl_GetFilterIndex 1620 -#define wxGenericDirCtrl_GetRootId 1621 -#define wxGenericDirCtrl_GetTreeCtrl 1622 -#define wxGenericDirCtrl_ReCreateTree 1623 -#define wxGenericDirCtrl_SetDefaultPath 1624 -#define wxGenericDirCtrl_SetFilter 1625 -#define wxGenericDirCtrl_SetFilterIndex 1626 -#define wxGenericDirCtrl_SetPath 1627 -#define wxStaticBox_new_4 1629 -#define wxStaticBox_new_0 1630 -#define wxStaticBox_Create 1631 -#define wxStaticBox_destroy 1632 -#define wxStaticLine_new_2 1634 -#define wxStaticLine_new_0 1635 -#define wxStaticLine_Create 1636 -#define wxStaticLine_IsVertical 1637 -#define wxStaticLine_GetDefaultSize 1638 -#define wxStaticLine_destroy 1639 -#define wxListBox_new_3 1642 -#define wxListBox_new_0 1643 -#define wxListBox_destruct 1645 -#define wxListBox_Create 1647 -#define wxListBox_Deselect 1648 -#define wxListBox_GetSelections 1649 -#define wxListBox_InsertItems 1650 -#define wxListBox_IsSelected 1651 -#define wxListBox_Set 1653 -#define wxListBox_HitTest 1654 -#define wxListBox_SetFirstItem_1_0 1655 -#define wxListBox_SetFirstItem_1_1 1656 -#define wxListCtrl_new_0 1657 -#define wxListCtrl_new_2 1658 -#define wxListCtrl_Arrange 1659 -#define wxListCtrl_AssignImageList 1660 -#define wxListCtrl_ClearAll 1661 -#define wxListCtrl_Create 1662 -#define wxListCtrl_DeleteAllItems 1663 -#define wxListCtrl_DeleteColumn 1664 -#define wxListCtrl_DeleteItem 1665 -#define wxListCtrl_EditLabel 1666 -#define wxListCtrl_EnsureVisible 1667 -#define wxListCtrl_FindItem_3_0 1668 -#define wxListCtrl_FindItem_3_1 1669 -#define wxListCtrl_GetColumn 1670 -#define wxListCtrl_GetColumnCount 1671 -#define wxListCtrl_GetColumnWidth 1672 -#define wxListCtrl_GetCountPerPage 1673 -#define wxListCtrl_GetEditControl 1674 -#define wxListCtrl_GetImageList 1675 -#define wxListCtrl_GetItem 1676 -#define wxListCtrl_GetItemBackgroundColour 1677 -#define wxListCtrl_GetItemCount 1678 -#define wxListCtrl_GetItemData 1679 -#define wxListCtrl_GetItemFont 1680 -#define wxListCtrl_GetItemPosition 1681 -#define wxListCtrl_GetItemRect 1682 -#define wxListCtrl_GetItemSpacing 1683 -#define wxListCtrl_GetItemState 1684 -#define wxListCtrl_GetItemText 1685 -#define wxListCtrl_GetItemTextColour 1686 -#define wxListCtrl_GetNextItem 1687 -#define wxListCtrl_GetSelectedItemCount 1688 -#define wxListCtrl_GetTextColour 1689 -#define wxListCtrl_GetTopItem 1690 -#define wxListCtrl_GetViewRect 1691 -#define wxListCtrl_HitTest 1692 -#define wxListCtrl_InsertColumn_2 1693 -#define wxListCtrl_InsertColumn_3 1694 -#define wxListCtrl_InsertItem_1 1695 -#define wxListCtrl_InsertItem_2_1 1696 -#define wxListCtrl_InsertItem_2_0 1697 -#define wxListCtrl_InsertItem_3 1698 -#define wxListCtrl_RefreshItem 1699 -#define wxListCtrl_RefreshItems 1700 -#define wxListCtrl_ScrollList 1701 -#define wxListCtrl_SetBackgroundColour 1702 -#define wxListCtrl_SetColumn 1703 -#define wxListCtrl_SetColumnWidth 1704 -#define wxListCtrl_SetImageList 1705 -#define wxListCtrl_SetItem_1 1706 -#define wxListCtrl_SetItem_4 1707 -#define wxListCtrl_SetItemBackgroundColour 1708 -#define wxListCtrl_SetItemCount 1709 -#define wxListCtrl_SetItemData 1710 -#define wxListCtrl_SetItemFont 1711 -#define wxListCtrl_SetItemImage 1712 -#define wxListCtrl_SetItemColumnImage 1713 -#define wxListCtrl_SetItemPosition 1714 -#define wxListCtrl_SetItemState 1715 -#define wxListCtrl_SetItemText 1716 -#define wxListCtrl_SetItemTextColour 1717 -#define wxListCtrl_SetSingleStyle 1718 -#define wxListCtrl_SetTextColour 1719 -#define wxListCtrl_SetWindowStyleFlag 1720 -#define wxListCtrl_SortItems 1721 -#define wxListCtrl_destroy 1722 -#define wxListView_ClearColumnImage 1723 -#define wxListView_Focus 1724 -#define wxListView_GetFirstSelected 1725 -#define wxListView_GetFocusedItem 1726 -#define wxListView_GetNextSelected 1727 -#define wxListView_IsSelected 1728 -#define wxListView_Select 1729 -#define wxListView_SetColumnImage 1730 -#define wxListItem_new_0 1731 -#define wxListItem_new_1 1732 -#define wxListItem_destruct 1733 -#define wxListItem_Clear 1734 -#define wxListItem_GetAlign 1735 -#define wxListItem_GetBackgroundColour 1736 -#define wxListItem_GetColumn 1737 -#define wxListItem_GetFont 1738 -#define wxListItem_GetId 1739 -#define wxListItem_GetImage 1740 -#define wxListItem_GetMask 1741 -#define wxListItem_GetState 1742 -#define wxListItem_GetText 1743 -#define wxListItem_GetTextColour 1744 -#define wxListItem_GetWidth 1745 -#define wxListItem_SetAlign 1746 -#define wxListItem_SetBackgroundColour 1747 -#define wxListItem_SetColumn 1748 -#define wxListItem_SetFont 1749 -#define wxListItem_SetId 1750 -#define wxListItem_SetImage 1751 -#define wxListItem_SetMask 1752 -#define wxListItem_SetState 1753 -#define wxListItem_SetStateMask 1754 -#define wxListItem_SetText 1755 -#define wxListItem_SetTextColour 1756 -#define wxListItem_SetWidth 1757 -#define wxListItemAttr_new_0 1758 -#define wxListItemAttr_new_3 1759 -#define wxListItemAttr_GetBackgroundColour 1760 -#define wxListItemAttr_GetFont 1761 -#define wxListItemAttr_GetTextColour 1762 -#define wxListItemAttr_HasBackgroundColour 1763 -#define wxListItemAttr_HasFont 1764 -#define wxListItemAttr_HasTextColour 1765 -#define wxListItemAttr_SetBackgroundColour 1766 -#define wxListItemAttr_SetFont 1767 -#define wxListItemAttr_SetTextColour 1768 -#define wxListItemAttr_destroy 1769 -#define wxImageList_new_0 1770 -#define wxImageList_new_3 1771 -#define wxImageList_Add_1 1772 -#define wxImageList_Add_2_0 1773 -#define wxImageList_Add_2_1 1774 -#define wxImageList_Create 1775 -#define wxImageList_Draw 1777 -#define wxImageList_GetBitmap 1778 -#define wxImageList_GetIcon 1779 -#define wxImageList_GetImageCount 1780 -#define wxImageList_GetSize 1781 -#define wxImageList_Remove 1782 -#define wxImageList_RemoveAll 1783 -#define wxImageList_Replace_2 1784 -#define wxImageList_Replace_3 1785 -#define wxImageList_destroy 1786 -#define wxTextAttr_new_0 1787 -#define wxTextAttr_new_2 1788 -#define wxTextAttr_GetAlignment 1789 -#define wxTextAttr_GetBackgroundColour 1790 -#define wxTextAttr_GetFont 1791 -#define wxTextAttr_GetLeftIndent 1792 -#define wxTextAttr_GetLeftSubIndent 1793 -#define wxTextAttr_GetRightIndent 1794 -#define wxTextAttr_GetTabs 1795 -#define wxTextAttr_GetTextColour 1796 -#define wxTextAttr_HasBackgroundColour 1797 -#define wxTextAttr_HasFont 1798 -#define wxTextAttr_HasTextColour 1799 -#define wxTextAttr_GetFlags 1800 -#define wxTextAttr_IsDefault 1801 -#define wxTextAttr_SetAlignment 1802 -#define wxTextAttr_SetBackgroundColour 1803 -#define wxTextAttr_SetFlags 1804 -#define wxTextAttr_SetFont 1805 -#define wxTextAttr_SetLeftIndent 1806 -#define wxTextAttr_SetRightIndent 1807 -#define wxTextAttr_SetTabs 1808 -#define wxTextAttr_SetTextColour 1809 -#define wxTextAttr_destroy 1810 -#define wxTextCtrl_new_3 1812 -#define wxTextCtrl_new_0 1813 -#define wxTextCtrl_destruct 1815 -#define wxTextCtrl_AppendText 1816 -#define wxTextCtrl_CanCopy 1817 -#define wxTextCtrl_CanCut 1818 -#define wxTextCtrl_CanPaste 1819 -#define wxTextCtrl_CanRedo 1820 -#define wxTextCtrl_CanUndo 1821 -#define wxTextCtrl_Clear 1822 -#define wxTextCtrl_Copy 1823 -#define wxTextCtrl_Create 1824 -#define wxTextCtrl_Cut 1825 -#define wxTextCtrl_DiscardEdits 1826 -#define wxTextCtrl_EmulateKeyPress 1827 -#define wxTextCtrl_GetDefaultStyle 1828 -#define wxTextCtrl_GetInsertionPoint 1829 -#define wxTextCtrl_GetLastPosition 1830 -#define wxTextCtrl_GetLineLength 1831 -#define wxTextCtrl_GetLineText 1832 -#define wxTextCtrl_GetNumberOfLines 1833 -#define wxTextCtrl_GetRange 1834 -#define wxTextCtrl_GetSelection 1835 -#define wxTextCtrl_GetStringSelection 1836 -#define wxTextCtrl_GetStyle 1837 -#define wxTextCtrl_GetValue 1838 -#define wxTextCtrl_IsEditable 1839 -#define wxTextCtrl_IsModified 1840 -#define wxTextCtrl_IsMultiLine 1841 -#define wxTextCtrl_IsSingleLine 1842 -#define wxTextCtrl_LoadFile 1843 -#define wxTextCtrl_MarkDirty 1844 -#define wxTextCtrl_Paste 1845 -#define wxTextCtrl_PositionToXY 1846 -#define wxTextCtrl_Redo 1847 -#define wxTextCtrl_Remove 1848 -#define wxTextCtrl_Replace 1849 -#define wxTextCtrl_SaveFile 1850 -#define wxTextCtrl_SetDefaultStyle 1851 -#define wxTextCtrl_SetEditable 1852 -#define wxTextCtrl_SetInsertionPoint 1853 -#define wxTextCtrl_SetInsertionPointEnd 1854 -#define wxTextCtrl_SetMaxLength 1856 -#define wxTextCtrl_SetSelection 1857 -#define wxTextCtrl_SetStyle 1858 -#define wxTextCtrl_SetValue 1859 -#define wxTextCtrl_ShowPosition 1860 -#define wxTextCtrl_Undo 1861 -#define wxTextCtrl_WriteText 1862 -#define wxTextCtrl_XYToPosition 1863 -#define wxNotebook_new_0 1866 -#define wxNotebook_new_3 1867 -#define wxNotebook_destruct 1868 -#define wxNotebook_AddPage 1869 -#define wxNotebook_AdvanceSelection 1870 -#define wxNotebook_AssignImageList 1871 -#define wxNotebook_Create 1872 -#define wxNotebook_DeleteAllPages 1873 -#define wxNotebook_DeletePage 1874 -#define wxNotebook_RemovePage 1875 -#define wxNotebook_GetCurrentPage 1876 -#define wxNotebook_GetImageList 1877 -#define wxNotebook_GetPage 1879 -#define wxNotebook_GetPageCount 1880 -#define wxNotebook_GetPageImage 1881 -#define wxNotebook_GetPageText 1882 -#define wxNotebook_GetRowCount 1883 -#define wxNotebook_GetSelection 1884 -#define wxNotebook_GetThemeBackgroundColour 1885 -#define wxNotebook_HitTest 1887 -#define wxNotebook_InsertPage 1889 -#define wxNotebook_SetImageList 1890 -#define wxNotebook_SetPadding 1891 -#define wxNotebook_SetPageSize 1892 -#define wxNotebook_SetPageImage 1893 -#define wxNotebook_SetPageText 1894 -#define wxNotebook_SetSelection 1895 -#define wxNotebook_ChangeSelection 1896 -#define wxChoicebook_new_0 1897 -#define wxChoicebook_new_3 1898 -#define wxChoicebook_AddPage 1899 -#define wxChoicebook_AdvanceSelection 1900 -#define wxChoicebook_AssignImageList 1901 -#define wxChoicebook_Create 1902 -#define wxChoicebook_DeleteAllPages 1903 -#define wxChoicebook_DeletePage 1904 -#define wxChoicebook_RemovePage 1905 -#define wxChoicebook_GetCurrentPage 1906 -#define wxChoicebook_GetImageList 1907 -#define wxChoicebook_GetPage 1909 -#define wxChoicebook_GetPageCount 1910 -#define wxChoicebook_GetPageImage 1911 -#define wxChoicebook_GetPageText 1912 -#define wxChoicebook_GetSelection 1913 -#define wxChoicebook_HitTest 1914 -#define wxChoicebook_InsertPage 1915 -#define wxChoicebook_SetImageList 1916 -#define wxChoicebook_SetPageSize 1917 -#define wxChoicebook_SetPageImage 1918 -#define wxChoicebook_SetPageText 1919 -#define wxChoicebook_SetSelection 1920 -#define wxChoicebook_ChangeSelection 1921 -#define wxChoicebook_destroy 1922 -#define wxToolbook_new_0 1923 -#define wxToolbook_new_3 1924 -#define wxToolbook_AddPage 1925 -#define wxToolbook_AdvanceSelection 1926 -#define wxToolbook_AssignImageList 1927 -#define wxToolbook_Create 1928 -#define wxToolbook_DeleteAllPages 1929 -#define wxToolbook_DeletePage 1930 -#define wxToolbook_RemovePage 1931 -#define wxToolbook_GetCurrentPage 1932 -#define wxToolbook_GetImageList 1933 -#define wxToolbook_GetPage 1935 -#define wxToolbook_GetPageCount 1936 -#define wxToolbook_GetPageImage 1937 -#define wxToolbook_GetPageText 1938 -#define wxToolbook_GetSelection 1939 -#define wxToolbook_HitTest 1941 -#define wxToolbook_InsertPage 1942 -#define wxToolbook_SetImageList 1943 -#define wxToolbook_SetPageSize 1944 -#define wxToolbook_SetPageImage 1945 -#define wxToolbook_SetPageText 1946 -#define wxToolbook_SetSelection 1947 -#define wxToolbook_ChangeSelection 1948 -#define wxToolbook_destroy 1949 -#define wxListbook_new_0 1950 -#define wxListbook_new_3 1951 -#define wxListbook_AddPage 1952 -#define wxListbook_AdvanceSelection 1953 -#define wxListbook_AssignImageList 1954 -#define wxListbook_Create 1955 -#define wxListbook_DeleteAllPages 1956 -#define wxListbook_DeletePage 1957 -#define wxListbook_RemovePage 1958 -#define wxListbook_GetCurrentPage 1959 -#define wxListbook_GetImageList 1960 -#define wxListbook_GetPage 1962 -#define wxListbook_GetPageCount 1963 -#define wxListbook_GetPageImage 1964 -#define wxListbook_GetPageText 1965 -#define wxListbook_GetSelection 1966 -#define wxListbook_HitTest 1968 -#define wxListbook_InsertPage 1969 -#define wxListbook_SetImageList 1970 -#define wxListbook_SetPageSize 1971 -#define wxListbook_SetPageImage 1972 -#define wxListbook_SetPageText 1973 -#define wxListbook_SetSelection 1974 -#define wxListbook_ChangeSelection 1975 -#define wxListbook_destroy 1976 -#define wxTreebook_new_0 1977 -#define wxTreebook_new_3 1978 -#define wxTreebook_AddPage 1979 -#define wxTreebook_AdvanceSelection 1980 -#define wxTreebook_AssignImageList 1981 -#define wxTreebook_Create 1982 -#define wxTreebook_DeleteAllPages 1983 -#define wxTreebook_DeletePage 1984 -#define wxTreebook_RemovePage 1985 -#define wxTreebook_GetCurrentPage 1986 -#define wxTreebook_GetImageList 1987 -#define wxTreebook_GetPage 1989 -#define wxTreebook_GetPageCount 1990 -#define wxTreebook_GetPageImage 1991 -#define wxTreebook_GetPageText 1992 -#define wxTreebook_GetSelection 1993 -#define wxTreebook_ExpandNode 1994 -#define wxTreebook_IsNodeExpanded 1995 -#define wxTreebook_HitTest 1997 -#define wxTreebook_InsertPage 1998 -#define wxTreebook_InsertSubPage 1999 -#define wxTreebook_SetImageList 2000 -#define wxTreebook_SetPageSize 2001 -#define wxTreebook_SetPageImage 2002 -#define wxTreebook_SetPageText 2003 -#define wxTreebook_SetSelection 2004 -#define wxTreebook_ChangeSelection 2005 -#define wxTreebook_destroy 2006 -#define wxTreeCtrl_new_2 2009 -#define wxTreeCtrl_new_0 2010 -#define wxTreeCtrl_destruct 2012 -#define wxTreeCtrl_AddRoot 2013 -#define wxTreeCtrl_AppendItem 2014 -#define wxTreeCtrl_AssignImageList 2015 -#define wxTreeCtrl_AssignStateImageList 2016 -#define wxTreeCtrl_Collapse 2017 -#define wxTreeCtrl_CollapseAndReset 2018 -#define wxTreeCtrl_Create 2019 -#define wxTreeCtrl_Delete 2020 -#define wxTreeCtrl_DeleteAllItems 2021 -#define wxTreeCtrl_DeleteChildren 2022 -#define wxTreeCtrl_EditLabel 2023 -#define wxTreeCtrl_EnsureVisible 2024 -#define wxTreeCtrl_Expand 2025 -#define wxTreeCtrl_GetBoundingRect 2026 -#define wxTreeCtrl_GetChildrenCount 2028 -#define wxTreeCtrl_GetCount 2029 -#define wxTreeCtrl_GetEditControl 2030 -#define wxTreeCtrl_GetFirstChild 2031 -#define wxTreeCtrl_GetNextChild 2032 -#define wxTreeCtrl_GetFirstVisibleItem 2033 -#define wxTreeCtrl_GetImageList 2034 -#define wxTreeCtrl_GetIndent 2035 -#define wxTreeCtrl_GetItemBackgroundColour 2036 -#define wxTreeCtrl_GetItemData 2037 -#define wxTreeCtrl_GetItemFont 2038 -#define wxTreeCtrl_GetItemImage_1 2039 -#define wxTreeCtrl_GetItemImage_2 2040 -#define wxTreeCtrl_GetItemText 2041 -#define wxTreeCtrl_GetItemTextColour 2042 -#define wxTreeCtrl_GetLastChild 2043 -#define wxTreeCtrl_GetNextSibling 2044 -#define wxTreeCtrl_GetNextVisible 2045 -#define wxTreeCtrl_GetItemParent 2046 -#define wxTreeCtrl_GetPrevSibling 2047 -#define wxTreeCtrl_GetPrevVisible 2048 -#define wxTreeCtrl_GetRootItem 2049 -#define wxTreeCtrl_GetSelection 2050 -#define wxTreeCtrl_GetSelections 2051 -#define wxTreeCtrl_GetStateImageList 2052 -#define wxTreeCtrl_HitTest 2053 -#define wxTreeCtrl_InsertItem 2055 -#define wxTreeCtrl_IsBold 2056 -#define wxTreeCtrl_IsExpanded 2057 -#define wxTreeCtrl_IsSelected 2058 -#define wxTreeCtrl_IsVisible 2059 -#define wxTreeCtrl_ItemHasChildren 2060 -#define wxTreeCtrl_IsTreeItemIdOk 2061 -#define wxTreeCtrl_PrependItem 2062 -#define wxTreeCtrl_ScrollTo 2063 -#define wxTreeCtrl_SelectItem_1 2064 -#define wxTreeCtrl_SelectItem_2 2065 -#define wxTreeCtrl_SetIndent 2066 -#define wxTreeCtrl_SetImageList 2067 -#define wxTreeCtrl_SetItemBackgroundColour 2068 -#define wxTreeCtrl_SetItemBold 2069 -#define wxTreeCtrl_SetItemData 2070 -#define wxTreeCtrl_SetItemDropHighlight 2071 -#define wxTreeCtrl_SetItemFont 2072 -#define wxTreeCtrl_SetItemHasChildren 2073 -#define wxTreeCtrl_SetItemImage_2 2074 -#define wxTreeCtrl_SetItemImage_3 2075 -#define wxTreeCtrl_SetItemText 2076 -#define wxTreeCtrl_SetItemTextColour 2077 -#define wxTreeCtrl_SetStateImageList 2078 -#define wxTreeCtrl_SetWindowStyle 2079 -#define wxTreeCtrl_SortChildren 2080 -#define wxTreeCtrl_Toggle 2081 -#define wxTreeCtrl_ToggleItemSelection 2082 -#define wxTreeCtrl_Unselect 2083 -#define wxTreeCtrl_UnselectAll 2084 -#define wxTreeCtrl_UnselectItem 2085 -#define wxScrollBar_new_0 2086 -#define wxScrollBar_new_3 2087 -#define wxScrollBar_destruct 2088 -#define wxScrollBar_Create 2089 -#define wxScrollBar_GetRange 2090 -#define wxScrollBar_GetPageSize 2091 -#define wxScrollBar_GetThumbPosition 2092 -#define wxScrollBar_GetThumbSize 2093 -#define wxScrollBar_SetThumbPosition 2094 -#define wxScrollBar_SetScrollbar 2095 -#define wxSpinButton_new_2 2097 -#define wxSpinButton_new_0 2098 -#define wxSpinButton_Create 2099 -#define wxSpinButton_GetMax 2100 -#define wxSpinButton_GetMin 2101 -#define wxSpinButton_GetValue 2102 -#define wxSpinButton_SetRange 2103 -#define wxSpinButton_SetValue 2104 -#define wxSpinButton_destroy 2105 -#define wxSpinCtrl_new_0 2106 -#define wxSpinCtrl_new_2 2107 -#define wxSpinCtrl_Create 2109 -#define wxSpinCtrl_SetValue_1_1 2112 -#define wxSpinCtrl_SetValue_1_0 2113 -#define wxSpinCtrl_GetValue 2115 -#define wxSpinCtrl_SetRange 2117 -#define wxSpinCtrl_SetSelection 2118 -#define wxSpinCtrl_GetMin 2120 -#define wxSpinCtrl_GetMax 2122 -#define wxSpinCtrl_destroy 2123 -#define wxStaticText_new_0 2124 -#define wxStaticText_new_4 2125 -#define wxStaticText_Create 2126 -#define wxStaticText_GetLabel 2127 -#define wxStaticText_SetLabel 2128 -#define wxStaticText_Wrap 2129 -#define wxStaticText_destroy 2130 -#define wxStaticBitmap_new_0 2131 -#define wxStaticBitmap_new_4 2132 -#define wxStaticBitmap_Create 2133 -#define wxStaticBitmap_GetBitmap 2134 -#define wxStaticBitmap_SetBitmap 2135 -#define wxStaticBitmap_destroy 2136 -#define wxRadioBox_new 2137 -#define wxRadioBox_destruct 2139 -#define wxRadioBox_Create 2140 -#define wxRadioBox_Enable_2 2141 -#define wxRadioBox_Enable_1 2142 -#define wxRadioBox_GetSelection 2143 -#define wxRadioBox_GetString 2144 -#define wxRadioBox_SetSelection 2145 -#define wxRadioBox_Show_2 2146 -#define wxRadioBox_Show_1 2147 -#define wxRadioBox_GetColumnCount 2148 -#define wxRadioBox_GetItemHelpText 2149 -#define wxRadioBox_GetItemToolTip 2150 -#define wxRadioBox_GetItemFromPoint 2152 -#define wxRadioBox_GetRowCount 2153 -#define wxRadioBox_IsItemEnabled 2154 -#define wxRadioBox_IsItemShown 2155 -#define wxRadioBox_SetItemHelpText 2156 -#define wxRadioBox_SetItemToolTip 2157 -#define wxRadioButton_new_0 2158 -#define wxRadioButton_new_4 2159 -#define wxRadioButton_Create 2160 -#define wxRadioButton_GetValue 2161 -#define wxRadioButton_SetValue 2162 -#define wxRadioButton_destroy 2163 -#define wxSlider_new_6 2165 -#define wxSlider_new_0 2166 -#define wxSlider_Create 2167 -#define wxSlider_GetLineSize 2168 -#define wxSlider_GetMax 2169 -#define wxSlider_GetMin 2170 -#define wxSlider_GetPageSize 2171 -#define wxSlider_GetThumbLength 2172 -#define wxSlider_GetValue 2173 -#define wxSlider_SetLineSize 2174 -#define wxSlider_SetPageSize 2175 -#define wxSlider_SetRange 2176 -#define wxSlider_SetThumbLength 2177 -#define wxSlider_SetValue 2178 -#define wxSlider_destroy 2179 -#define wxDialog_new_4 2181 -#define wxDialog_new_0 2182 -#define wxDialog_destruct 2184 -#define wxDialog_Create 2185 -#define wxDialog_CreateButtonSizer 2186 -#define wxDialog_CreateStdDialogButtonSizer 2187 -#define wxDialog_EndModal 2188 -#define wxDialog_GetAffirmativeId 2189 -#define wxDialog_GetReturnCode 2190 -#define wxDialog_IsModal 2191 -#define wxDialog_SetAffirmativeId 2192 -#define wxDialog_SetReturnCode 2193 -#define wxDialog_Show 2194 -#define wxDialog_ShowModal 2195 -#define wxColourDialog_new_0 2196 -#define wxColourDialog_new_2 2197 -#define wxColourDialog_destruct 2198 -#define wxColourDialog_Create 2199 -#define wxColourDialog_GetColourData 2200 -#define wxColourData_new_0 2201 -#define wxColourData_new_1 2202 -#define wxColourData_destruct 2203 -#define wxColourData_GetChooseFull 2204 -#define wxColourData_GetColour 2205 -#define wxColourData_GetCustomColour 2207 -#define wxColourData_SetChooseFull 2208 -#define wxColourData_SetColour 2209 -#define wxColourData_SetCustomColour 2210 -#define wxPalette_new_0 2211 -#define wxPalette_new_4 2212 -#define wxPalette_destruct 2214 -#define wxPalette_Create 2215 -#define wxPalette_GetColoursCount 2216 -#define wxPalette_GetPixel 2217 -#define wxPalette_GetRGB 2218 -#define wxPalette_IsOk 2219 -#define wxDirDialog_new 2223 -#define wxDirDialog_destruct 2224 -#define wxDirDialog_GetPath 2225 -#define wxDirDialog_GetMessage 2226 -#define wxDirDialog_SetMessage 2227 -#define wxDirDialog_SetPath 2228 -#define wxFileDialog_new 2232 -#define wxFileDialog_destruct 2233 -#define wxFileDialog_GetDirectory 2234 -#define wxFileDialog_GetFilename 2235 -#define wxFileDialog_GetFilenames 2236 -#define wxFileDialog_GetFilterIndex 2237 -#define wxFileDialog_GetMessage 2238 -#define wxFileDialog_GetPath 2239 -#define wxFileDialog_GetPaths 2240 -#define wxFileDialog_GetWildcard 2241 -#define wxFileDialog_SetDirectory 2242 -#define wxFileDialog_SetFilename 2243 -#define wxFileDialog_SetFilterIndex 2244 -#define wxFileDialog_SetMessage 2245 -#define wxFileDialog_SetPath 2246 -#define wxFileDialog_SetWildcard 2247 -#define wxPickerBase_SetInternalMargin 2248 -#define wxPickerBase_GetInternalMargin 2249 -#define wxPickerBase_SetTextCtrlProportion 2250 -#define wxPickerBase_SetPickerCtrlProportion 2251 -#define wxPickerBase_GetTextCtrlProportion 2252 -#define wxPickerBase_GetPickerCtrlProportion 2253 -#define wxPickerBase_HasTextCtrl 2254 -#define wxPickerBase_GetTextCtrl 2255 -#define wxPickerBase_IsTextCtrlGrowable 2256 -#define wxPickerBase_SetPickerCtrlGrowable 2257 -#define wxPickerBase_SetTextCtrlGrowable 2258 -#define wxPickerBase_IsPickerCtrlGrowable 2259 -#define wxFilePickerCtrl_new_0 2260 -#define wxFilePickerCtrl_new_3 2261 -#define wxFilePickerCtrl_Create 2262 -#define wxFilePickerCtrl_GetPath 2263 -#define wxFilePickerCtrl_SetPath 2264 -#define wxFilePickerCtrl_destroy 2265 -#define wxDirPickerCtrl_new_0 2266 -#define wxDirPickerCtrl_new_3 2267 -#define wxDirPickerCtrl_Create 2268 -#define wxDirPickerCtrl_GetPath 2269 -#define wxDirPickerCtrl_SetPath 2270 -#define wxDirPickerCtrl_destroy 2271 -#define wxColourPickerCtrl_new_0 2272 -#define wxColourPickerCtrl_new_3 2273 -#define wxColourPickerCtrl_Create 2274 -#define wxColourPickerCtrl_GetColour 2275 -#define wxColourPickerCtrl_SetColour_1_1 2276 -#define wxColourPickerCtrl_SetColour_1_0 2277 -#define wxColourPickerCtrl_destroy 2278 -#define wxDatePickerCtrl_new_0 2279 -#define wxDatePickerCtrl_new_3 2280 -#define wxDatePickerCtrl_GetRange 2281 -#define wxDatePickerCtrl_GetValue 2282 -#define wxDatePickerCtrl_SetRange 2283 -#define wxDatePickerCtrl_SetValue 2284 -#define wxDatePickerCtrl_destroy 2285 -#define wxFontPickerCtrl_new_0 2286 -#define wxFontPickerCtrl_new_3 2287 -#define wxFontPickerCtrl_Create 2288 -#define wxFontPickerCtrl_GetSelectedFont 2289 -#define wxFontPickerCtrl_SetSelectedFont 2290 -#define wxFontPickerCtrl_GetMaxPointSize 2291 -#define wxFontPickerCtrl_SetMaxPointSize 2292 -#define wxFontPickerCtrl_destroy 2293 -#define wxFindReplaceDialog_new_0 2296 -#define wxFindReplaceDialog_new_4 2297 -#define wxFindReplaceDialog_destruct 2298 -#define wxFindReplaceDialog_Create 2299 -#define wxFindReplaceDialog_GetData 2300 -#define wxFindReplaceData_new_0 2301 -#define wxFindReplaceData_new_1 2302 -#define wxFindReplaceData_GetFindString 2303 -#define wxFindReplaceData_GetReplaceString 2304 -#define wxFindReplaceData_GetFlags 2305 -#define wxFindReplaceData_SetFlags 2306 -#define wxFindReplaceData_SetFindString 2307 -#define wxFindReplaceData_SetReplaceString 2308 -#define wxFindReplaceData_destroy 2309 -#define wxMultiChoiceDialog_new_0 2310 -#define wxMultiChoiceDialog_new_5 2312 -#define wxMultiChoiceDialog_GetSelections 2313 -#define wxMultiChoiceDialog_SetSelections 2314 -#define wxMultiChoiceDialog_destroy 2315 -#define wxSingleChoiceDialog_new_0 2316 -#define wxSingleChoiceDialog_new_5 2318 -#define wxSingleChoiceDialog_GetSelection 2319 -#define wxSingleChoiceDialog_GetStringSelection 2320 -#define wxSingleChoiceDialog_SetSelection 2321 -#define wxSingleChoiceDialog_destroy 2322 -#define wxTextEntryDialog_new 2323 -#define wxTextEntryDialog_GetValue 2324 -#define wxTextEntryDialog_SetValue 2325 -#define wxTextEntryDialog_destroy 2326 -#define wxPasswordEntryDialog_new 2327 -#define wxPasswordEntryDialog_destroy 2328 -#define wxFontData_new_0 2329 -#define wxFontData_new_1 2330 -#define wxFontData_destruct 2331 -#define wxFontData_EnableEffects 2332 -#define wxFontData_GetAllowSymbols 2333 -#define wxFontData_GetColour 2334 -#define wxFontData_GetChosenFont 2335 -#define wxFontData_GetEnableEffects 2336 -#define wxFontData_GetInitialFont 2337 -#define wxFontData_GetShowHelp 2338 -#define wxFontData_SetAllowSymbols 2339 -#define wxFontData_SetChosenFont 2340 -#define wxFontData_SetColour 2341 -#define wxFontData_SetInitialFont 2342 -#define wxFontData_SetRange 2343 -#define wxFontData_SetShowHelp 2344 -#define wxFontDialog_new_0 2348 -#define wxFontDialog_new_2 2350 -#define wxFontDialog_Create 2352 -#define wxFontDialog_GetFontData 2353 -#define wxFontDialog_destroy 2355 -#define wxProgressDialog_new 2356 -#define wxProgressDialog_destruct 2357 -#define wxProgressDialog_Resume 2358 -#define wxProgressDialog_Update_2 2359 -#define wxProgressDialog_Update_0 2360 -#define wxMessageDialog_new 2361 -#define wxMessageDialog_destruct 2362 -#define wxPageSetupDialog_new 2363 -#define wxPageSetupDialog_destruct 2364 -#define wxPageSetupDialog_GetPageSetupData 2365 -#define wxPageSetupDialog_ShowModal 2366 -#define wxPageSetupDialogData_new_0 2367 -#define wxPageSetupDialogData_new_1_0 2368 -#define wxPageSetupDialogData_new_1_1 2369 -#define wxPageSetupDialogData_destruct 2370 -#define wxPageSetupDialogData_EnableHelp 2371 -#define wxPageSetupDialogData_EnableMargins 2372 -#define wxPageSetupDialogData_EnableOrientation 2373 -#define wxPageSetupDialogData_EnablePaper 2374 -#define wxPageSetupDialogData_EnablePrinter 2375 -#define wxPageSetupDialogData_GetDefaultMinMargins 2376 -#define wxPageSetupDialogData_GetEnableMargins 2377 -#define wxPageSetupDialogData_GetEnableOrientation 2378 -#define wxPageSetupDialogData_GetEnablePaper 2379 -#define wxPageSetupDialogData_GetEnablePrinter 2380 -#define wxPageSetupDialogData_GetEnableHelp 2381 -#define wxPageSetupDialogData_GetDefaultInfo 2382 -#define wxPageSetupDialogData_GetMarginTopLeft 2383 -#define wxPageSetupDialogData_GetMarginBottomRight 2384 -#define wxPageSetupDialogData_GetMinMarginTopLeft 2385 -#define wxPageSetupDialogData_GetMinMarginBottomRight 2386 -#define wxPageSetupDialogData_GetPaperId 2387 -#define wxPageSetupDialogData_GetPaperSize 2388 -#define wxPageSetupDialogData_GetPrintData 2390 -#define wxPageSetupDialogData_IsOk 2391 -#define wxPageSetupDialogData_SetDefaultInfo 2392 -#define wxPageSetupDialogData_SetDefaultMinMargins 2393 -#define wxPageSetupDialogData_SetMarginTopLeft 2394 -#define wxPageSetupDialogData_SetMarginBottomRight 2395 -#define wxPageSetupDialogData_SetMinMarginTopLeft 2396 -#define wxPageSetupDialogData_SetMinMarginBottomRight 2397 -#define wxPageSetupDialogData_SetPaperId 2398 -#define wxPageSetupDialogData_SetPaperSize_1_1 2399 -#define wxPageSetupDialogData_SetPaperSize_1_0 2400 -#define wxPageSetupDialogData_SetPrintData 2401 -#define wxPrintDialog_new_2_0 2402 -#define wxPrintDialog_new_2_1 2403 -#define wxPrintDialog_destruct 2404 -#define wxPrintDialog_GetPrintDialogData 2405 -#define wxPrintDialog_GetPrintDC 2406 -#define wxPrintDialogData_new_0 2407 -#define wxPrintDialogData_new_1_1 2408 -#define wxPrintDialogData_new_1_0 2409 -#define wxPrintDialogData_destruct 2410 -#define wxPrintDialogData_EnableHelp 2411 -#define wxPrintDialogData_EnablePageNumbers 2412 -#define wxPrintDialogData_EnablePrintToFile 2413 -#define wxPrintDialogData_EnableSelection 2414 -#define wxPrintDialogData_GetAllPages 2415 -#define wxPrintDialogData_GetCollate 2416 -#define wxPrintDialogData_GetFromPage 2417 -#define wxPrintDialogData_GetMaxPage 2418 -#define wxPrintDialogData_GetMinPage 2419 -#define wxPrintDialogData_GetNoCopies 2420 -#define wxPrintDialogData_GetPrintData 2421 -#define wxPrintDialogData_GetPrintToFile 2422 -#define wxPrintDialogData_GetSelection 2423 -#define wxPrintDialogData_GetToPage 2424 -#define wxPrintDialogData_IsOk 2425 -#define wxPrintDialogData_SetCollate 2426 -#define wxPrintDialogData_SetFromPage 2427 -#define wxPrintDialogData_SetMaxPage 2428 -#define wxPrintDialogData_SetMinPage 2429 -#define wxPrintDialogData_SetNoCopies 2430 -#define wxPrintDialogData_SetPrintData 2431 -#define wxPrintDialogData_SetPrintToFile 2432 -#define wxPrintDialogData_SetSelection 2433 -#define wxPrintDialogData_SetToPage 2434 -#define wxPrintData_new_0 2435 -#define wxPrintData_new_1 2436 -#define wxPrintData_destruct 2437 -#define wxPrintData_GetCollate 2438 -#define wxPrintData_GetBin 2439 -#define wxPrintData_GetColour 2440 -#define wxPrintData_GetDuplex 2441 -#define wxPrintData_GetNoCopies 2442 -#define wxPrintData_GetOrientation 2443 -#define wxPrintData_GetPaperId 2444 -#define wxPrintData_GetPrinterName 2445 -#define wxPrintData_GetQuality 2446 -#define wxPrintData_IsOk 2447 -#define wxPrintData_SetBin 2448 -#define wxPrintData_SetCollate 2449 -#define wxPrintData_SetColour 2450 -#define wxPrintData_SetDuplex 2451 -#define wxPrintData_SetNoCopies 2452 -#define wxPrintData_SetOrientation 2453 -#define wxPrintData_SetPaperId 2454 -#define wxPrintData_SetPrinterName 2455 -#define wxPrintData_SetQuality 2456 -#define wxPrintPreview_new_2 2459 -#define wxPrintPreview_new_3 2460 -#define wxPrintPreview_destruct 2462 -#define wxPrintPreview_GetCanvas 2463 -#define wxPrintPreview_GetCurrentPage 2464 -#define wxPrintPreview_GetFrame 2465 -#define wxPrintPreview_GetMaxPage 2466 -#define wxPrintPreview_GetMinPage 2467 -#define wxPrintPreview_GetPrintout 2468 -#define wxPrintPreview_GetPrintoutForPrinting 2469 -#define wxPrintPreview_IsOk 2470 -#define wxPrintPreview_PaintPage 2471 -#define wxPrintPreview_Print 2472 -#define wxPrintPreview_RenderPage 2473 -#define wxPrintPreview_SetCanvas 2474 -#define wxPrintPreview_SetCurrentPage 2475 -#define wxPrintPreview_SetFrame 2476 -#define wxPrintPreview_SetPrintout 2477 -#define wxPrintPreview_SetZoom 2478 -#define wxPreviewFrame_new 2479 -#define wxPreviewFrame_destruct 2480 -#define wxPreviewFrame_CreateControlBar 2481 -#define wxPreviewFrame_CreateCanvas 2482 -#define wxPreviewFrame_Initialize 2483 -#define wxPreviewFrame_OnCloseWindow 2484 -#define wxPreviewControlBar_new 2485 -#define wxPreviewControlBar_destruct 2486 -#define wxPreviewControlBar_CreateButtons 2487 -#define wxPreviewControlBar_GetPrintPreview 2488 -#define wxPreviewControlBar_GetZoomControl 2489 -#define wxPreviewControlBar_SetZoomControl 2490 -#define wxPrinter_new 2492 -#define wxPrinter_CreateAbortWindow 2493 -#define wxPrinter_GetAbort 2494 -#define wxPrinter_GetLastError 2495 -#define wxPrinter_GetPrintDialogData 2496 -#define wxPrinter_Print 2497 -#define wxPrinter_PrintDialog 2498 -#define wxPrinter_ReportError 2499 -#define wxPrinter_Setup 2500 -#define wxPrinter_destroy 2501 -#define wxXmlResource_new_1 2502 -#define wxXmlResource_new_2 2503 -#define wxXmlResource_destruct 2504 -#define wxXmlResource_AttachUnknownControl 2505 -#define wxXmlResource_ClearHandlers 2506 -#define wxXmlResource_CompareVersion 2507 -#define wxXmlResource_Get 2508 -#define wxXmlResource_GetFlags 2509 -#define wxXmlResource_GetVersion 2510 -#define wxXmlResource_GetXRCID 2511 -#define wxXmlResource_InitAllHandlers 2512 -#define wxXmlResource_Load 2513 -#define wxXmlResource_LoadBitmap 2514 -#define wxXmlResource_LoadDialog_2 2515 -#define wxXmlResource_LoadDialog_3 2516 -#define wxXmlResource_LoadFrame_2 2517 -#define wxXmlResource_LoadFrame_3 2518 -#define wxXmlResource_LoadIcon 2519 -#define wxXmlResource_LoadMenu 2520 -#define wxXmlResource_LoadMenuBar_2 2521 -#define wxXmlResource_LoadMenuBar_1 2522 -#define wxXmlResource_LoadPanel_2 2523 -#define wxXmlResource_LoadPanel_3 2524 -#define wxXmlResource_LoadToolBar 2525 -#define wxXmlResource_Set 2526 -#define wxXmlResource_SetFlags 2527 -#define wxXmlResource_Unload 2528 -#define wxXmlResource_xrcctrl 2529 -#define wxHtmlEasyPrinting_new 2530 -#define wxHtmlEasyPrinting_destruct 2531 -#define wxHtmlEasyPrinting_GetPrintData 2532 -#define wxHtmlEasyPrinting_GetPageSetupData 2533 -#define wxHtmlEasyPrinting_PreviewFile 2534 -#define wxHtmlEasyPrinting_PreviewText 2535 -#define wxHtmlEasyPrinting_PrintFile 2536 -#define wxHtmlEasyPrinting_PrintText 2537 -#define wxHtmlEasyPrinting_PageSetup 2538 -#define wxHtmlEasyPrinting_SetFonts 2539 -#define wxHtmlEasyPrinting_SetHeader 2540 -#define wxHtmlEasyPrinting_SetFooter 2541 -#define wxGLCanvas_new_2 2543 -#define wxGLCanvas_new_3_1 2544 -#define wxGLCanvas_new_3_0 2545 -#define wxGLCanvas_GetContext 2546 -#define wxGLCanvas_SetCurrent 2548 -#define wxGLCanvas_SwapBuffers 2549 -#define wxGLCanvas_destroy 2550 -#define wxAuiManager_new 2551 -#define wxAuiManager_destruct 2552 -#define wxAuiManager_AddPane_2_1 2553 -#define wxAuiManager_AddPane_3 2554 -#define wxAuiManager_AddPane_2_0 2555 -#define wxAuiManager_DetachPane 2556 -#define wxAuiManager_GetAllPanes 2557 -#define wxAuiManager_GetArtProvider 2558 -#define wxAuiManager_GetDockSizeConstraint 2559 -#define wxAuiManager_GetFlags 2560 -#define wxAuiManager_GetManagedWindow 2561 -#define wxAuiManager_GetManager 2562 -#define wxAuiManager_GetPane_1_1 2563 -#define wxAuiManager_GetPane_1_0 2564 -#define wxAuiManager_HideHint 2565 -#define wxAuiManager_InsertPane 2566 -#define wxAuiManager_LoadPaneInfo 2567 -#define wxAuiManager_LoadPerspective 2568 -#define wxAuiManager_SavePaneInfo 2569 -#define wxAuiManager_SavePerspective 2570 -#define wxAuiManager_SetArtProvider 2571 -#define wxAuiManager_SetDockSizeConstraint 2572 -#define wxAuiManager_SetFlags 2573 -#define wxAuiManager_SetManagedWindow 2574 -#define wxAuiManager_ShowHint 2575 -#define wxAuiManager_UnInit 2576 -#define wxAuiManager_Update 2577 -#define wxAuiPaneInfo_new_0 2578 -#define wxAuiPaneInfo_new_1 2579 -#define wxAuiPaneInfo_destruct 2580 -#define wxAuiPaneInfo_BestSize_1 2581 -#define wxAuiPaneInfo_BestSize_2 2582 -#define wxAuiPaneInfo_Bottom 2583 -#define wxAuiPaneInfo_BottomDockable 2584 -#define wxAuiPaneInfo_Caption 2585 -#define wxAuiPaneInfo_CaptionVisible 2586 -#define wxAuiPaneInfo_Centre 2587 -#define wxAuiPaneInfo_CentrePane 2588 -#define wxAuiPaneInfo_CloseButton 2589 -#define wxAuiPaneInfo_DefaultPane 2590 -#define wxAuiPaneInfo_DestroyOnClose 2591 -#define wxAuiPaneInfo_Direction 2592 -#define wxAuiPaneInfo_Dock 2593 -#define wxAuiPaneInfo_Dockable 2594 -#define wxAuiPaneInfo_Fixed 2595 -#define wxAuiPaneInfo_Float 2596 -#define wxAuiPaneInfo_Floatable 2597 -#define wxAuiPaneInfo_FloatingPosition_1 2598 -#define wxAuiPaneInfo_FloatingPosition_2 2599 -#define wxAuiPaneInfo_FloatingSize_1 2600 -#define wxAuiPaneInfo_FloatingSize_2 2601 -#define wxAuiPaneInfo_Gripper 2602 -#define wxAuiPaneInfo_GripperTop 2603 -#define wxAuiPaneInfo_HasBorder 2604 -#define wxAuiPaneInfo_HasCaption 2605 -#define wxAuiPaneInfo_HasCloseButton 2606 -#define wxAuiPaneInfo_HasFlag 2607 -#define wxAuiPaneInfo_HasGripper 2608 -#define wxAuiPaneInfo_HasGripperTop 2609 -#define wxAuiPaneInfo_HasMaximizeButton 2610 -#define wxAuiPaneInfo_HasMinimizeButton 2611 -#define wxAuiPaneInfo_HasPinButton 2612 -#define wxAuiPaneInfo_Hide 2613 -#define wxAuiPaneInfo_IsBottomDockable 2614 -#define wxAuiPaneInfo_IsDocked 2615 -#define wxAuiPaneInfo_IsFixed 2616 -#define wxAuiPaneInfo_IsFloatable 2617 -#define wxAuiPaneInfo_IsFloating 2618 -#define wxAuiPaneInfo_IsLeftDockable 2619 -#define wxAuiPaneInfo_IsMovable 2620 -#define wxAuiPaneInfo_IsOk 2621 -#define wxAuiPaneInfo_IsResizable 2622 -#define wxAuiPaneInfo_IsRightDockable 2623 -#define wxAuiPaneInfo_IsShown 2624 -#define wxAuiPaneInfo_IsToolbar 2625 -#define wxAuiPaneInfo_IsTopDockable 2626 -#define wxAuiPaneInfo_Layer 2627 -#define wxAuiPaneInfo_Left 2628 -#define wxAuiPaneInfo_LeftDockable 2629 -#define wxAuiPaneInfo_MaxSize_1 2630 -#define wxAuiPaneInfo_MaxSize_2 2631 -#define wxAuiPaneInfo_MaximizeButton 2632 -#define wxAuiPaneInfo_MinSize_1 2633 -#define wxAuiPaneInfo_MinSize_2 2634 -#define wxAuiPaneInfo_MinimizeButton 2635 -#define wxAuiPaneInfo_Movable 2636 -#define wxAuiPaneInfo_Name 2637 -#define wxAuiPaneInfo_PaneBorder 2638 -#define wxAuiPaneInfo_PinButton 2639 -#define wxAuiPaneInfo_Position 2640 -#define wxAuiPaneInfo_Resizable 2641 -#define wxAuiPaneInfo_Right 2642 -#define wxAuiPaneInfo_RightDockable 2643 -#define wxAuiPaneInfo_Row 2644 -#define wxAuiPaneInfo_SafeSet 2645 -#define wxAuiPaneInfo_SetFlag 2646 -#define wxAuiPaneInfo_Show 2647 -#define wxAuiPaneInfo_ToolbarPane 2648 -#define wxAuiPaneInfo_Top 2649 -#define wxAuiPaneInfo_TopDockable 2650 -#define wxAuiPaneInfo_Window 2651 -#define wxAuiNotebook_new_0 2652 -#define wxAuiNotebook_new_2 2653 -#define wxAuiNotebook_AddPage 2654 -#define wxAuiNotebook_Create 2655 -#define wxAuiNotebook_DeletePage 2656 -#define wxAuiNotebook_GetArtProvider 2657 -#define wxAuiNotebook_GetPage 2658 -#define wxAuiNotebook_GetPageBitmap 2659 -#define wxAuiNotebook_GetPageCount 2660 -#define wxAuiNotebook_GetPageIndex 2661 -#define wxAuiNotebook_GetPageText 2662 -#define wxAuiNotebook_GetSelection 2663 -#define wxAuiNotebook_InsertPage 2664 -#define wxAuiNotebook_RemovePage 2665 -#define wxAuiNotebook_SetArtProvider 2666 -#define wxAuiNotebook_SetFont 2667 -#define wxAuiNotebook_SetPageBitmap 2668 -#define wxAuiNotebook_SetPageText 2669 -#define wxAuiNotebook_SetSelection 2670 -#define wxAuiNotebook_SetTabCtrlHeight 2671 -#define wxAuiNotebook_SetUniformBitmapSize 2672 -#define wxAuiNotebook_destroy 2673 -#define wxMDIParentFrame_new_0 2674 -#define wxMDIParentFrame_new_4 2675 -#define wxMDIParentFrame_destruct 2676 -#define wxMDIParentFrame_ActivateNext 2677 -#define wxMDIParentFrame_ActivatePrevious 2678 -#define wxMDIParentFrame_ArrangeIcons 2679 -#define wxMDIParentFrame_Cascade 2680 -#define wxMDIParentFrame_Create 2681 -#define wxMDIParentFrame_GetActiveChild 2682 -#define wxMDIParentFrame_GetClientWindow 2683 -#define wxMDIParentFrame_Tile 2684 -#define wxMDIChildFrame_new_0 2685 -#define wxMDIChildFrame_new_4 2686 -#define wxMDIChildFrame_destruct 2687 -#define wxMDIChildFrame_Activate 2688 -#define wxMDIChildFrame_Create 2689 -#define wxMDIChildFrame_Maximize 2690 -#define wxMDIChildFrame_Restore 2691 -#define wxMDIClientWindow_new_0 2692 -#define wxMDIClientWindow_new_2 2693 -#define wxMDIClientWindow_destruct 2694 -#define wxMDIClientWindow_CreateClient 2695 -#define wxLayoutAlgorithm_new 2696 -#define wxLayoutAlgorithm_LayoutFrame 2697 -#define wxLayoutAlgorithm_LayoutMDIFrame 2698 -#define wxLayoutAlgorithm_LayoutWindow 2699 -#define wxLayoutAlgorithm_destroy 2700 -#define wxEvent_GetId 2701 -#define wxEvent_GetSkipped 2702 -#define wxEvent_GetTimestamp 2703 -#define wxEvent_IsCommandEvent 2704 -#define wxEvent_ResumePropagation 2705 -#define wxEvent_ShouldPropagate 2706 -#define wxEvent_Skip 2707 -#define wxEvent_StopPropagation 2708 -#define wxCommandEvent_getClientData 2709 -#define wxCommandEvent_GetExtraLong 2710 -#define wxCommandEvent_GetInt 2711 -#define wxCommandEvent_GetSelection 2712 -#define wxCommandEvent_GetString 2713 -#define wxCommandEvent_IsChecked 2714 -#define wxCommandEvent_IsSelection 2715 -#define wxCommandEvent_SetInt 2716 -#define wxCommandEvent_SetString 2717 -#define wxScrollEvent_GetOrientation 2718 -#define wxScrollEvent_GetPosition 2719 -#define wxScrollWinEvent_GetOrientation 2720 -#define wxScrollWinEvent_GetPosition 2721 -#define wxMouseEvent_AltDown 2722 -#define wxMouseEvent_Button 2723 -#define wxMouseEvent_ButtonDClick 2724 -#define wxMouseEvent_ButtonDown 2725 -#define wxMouseEvent_ButtonUp 2726 -#define wxMouseEvent_CmdDown 2727 -#define wxMouseEvent_ControlDown 2728 -#define wxMouseEvent_Dragging 2729 -#define wxMouseEvent_Entering 2730 -#define wxMouseEvent_GetButton 2731 -#define wxMouseEvent_GetPosition 2734 -#define wxMouseEvent_GetLogicalPosition 2735 -#define wxMouseEvent_GetLinesPerAction 2736 -#define wxMouseEvent_GetWheelRotation 2737 -#define wxMouseEvent_GetWheelDelta 2738 -#define wxMouseEvent_GetX 2739 -#define wxMouseEvent_GetY 2740 -#define wxMouseEvent_IsButton 2741 -#define wxMouseEvent_IsPageScroll 2742 -#define wxMouseEvent_Leaving 2743 -#define wxMouseEvent_LeftDClick 2744 -#define wxMouseEvent_LeftDown 2745 -#define wxMouseEvent_LeftIsDown 2746 -#define wxMouseEvent_LeftUp 2747 -#define wxMouseEvent_MetaDown 2748 -#define wxMouseEvent_MiddleDClick 2749 -#define wxMouseEvent_MiddleDown 2750 -#define wxMouseEvent_MiddleIsDown 2751 -#define wxMouseEvent_MiddleUp 2752 -#define wxMouseEvent_Moving 2753 -#define wxMouseEvent_RightDClick 2754 -#define wxMouseEvent_RightDown 2755 -#define wxMouseEvent_RightIsDown 2756 -#define wxMouseEvent_RightUp 2757 -#define wxMouseEvent_ShiftDown 2758 -#define wxSetCursorEvent_GetCursor 2759 -#define wxSetCursorEvent_GetX 2760 -#define wxSetCursorEvent_GetY 2761 -#define wxSetCursorEvent_HasCursor 2762 -#define wxSetCursorEvent_SetCursor 2763 -#define wxKeyEvent_AltDown 2764 -#define wxKeyEvent_CmdDown 2765 -#define wxKeyEvent_ControlDown 2766 -#define wxKeyEvent_GetKeyCode 2767 -#define wxKeyEvent_GetModifiers 2768 -#define wxKeyEvent_GetPosition 2771 -#define wxKeyEvent_GetRawKeyCode 2772 -#define wxKeyEvent_GetRawKeyFlags 2773 -#define wxKeyEvent_GetUnicodeKey 2774 -#define wxKeyEvent_GetX 2775 -#define wxKeyEvent_GetY 2776 -#define wxKeyEvent_HasModifiers 2777 -#define wxKeyEvent_MetaDown 2778 -#define wxKeyEvent_ShiftDown 2779 -#define wxSizeEvent_GetSize 2780 -#define wxMoveEvent_GetPosition 2781 -#define wxEraseEvent_GetDC 2782 -#define wxFocusEvent_GetWindow 2783 -#define wxChildFocusEvent_GetWindow 2784 -#define wxMenuEvent_GetMenu 2785 -#define wxMenuEvent_GetMenuId 2786 -#define wxMenuEvent_IsPopup 2787 -#define wxCloseEvent_CanVeto 2788 -#define wxCloseEvent_GetLoggingOff 2789 -#define wxCloseEvent_SetCanVeto 2790 -#define wxCloseEvent_SetLoggingOff 2791 -#define wxCloseEvent_Veto 2792 -#define wxShowEvent_SetShow 2793 -#define wxShowEvent_GetShow 2794 -#define wxIconizeEvent_Iconized 2795 -#define wxJoystickEvent_ButtonDown 2796 -#define wxJoystickEvent_ButtonIsDown 2797 -#define wxJoystickEvent_ButtonUp 2798 -#define wxJoystickEvent_GetButtonChange 2799 -#define wxJoystickEvent_GetButtonState 2800 -#define wxJoystickEvent_GetJoystick 2801 -#define wxJoystickEvent_GetPosition 2802 -#define wxJoystickEvent_GetZPosition 2803 -#define wxJoystickEvent_IsButton 2804 -#define wxJoystickEvent_IsMove 2805 -#define wxJoystickEvent_IsZMove 2806 -#define wxUpdateUIEvent_CanUpdate 2807 -#define wxUpdateUIEvent_Check 2808 -#define wxUpdateUIEvent_Enable 2809 -#define wxUpdateUIEvent_Show 2810 -#define wxUpdateUIEvent_GetChecked 2811 -#define wxUpdateUIEvent_GetEnabled 2812 -#define wxUpdateUIEvent_GetShown 2813 -#define wxUpdateUIEvent_GetSetChecked 2814 -#define wxUpdateUIEvent_GetSetEnabled 2815 -#define wxUpdateUIEvent_GetSetShown 2816 -#define wxUpdateUIEvent_GetSetText 2817 -#define wxUpdateUIEvent_GetText 2818 -#define wxUpdateUIEvent_GetMode 2819 -#define wxUpdateUIEvent_GetUpdateInterval 2820 -#define wxUpdateUIEvent_ResetUpdateTime 2821 -#define wxUpdateUIEvent_SetMode 2822 -#define wxUpdateUIEvent_SetText 2823 -#define wxUpdateUIEvent_SetUpdateInterval 2824 -#define wxMouseCaptureChangedEvent_GetCapturedWindow 2825 -#define wxPaletteChangedEvent_SetChangedWindow 2826 -#define wxPaletteChangedEvent_GetChangedWindow 2827 -#define wxQueryNewPaletteEvent_SetPaletteRealized 2828 -#define wxQueryNewPaletteEvent_GetPaletteRealized 2829 -#define wxNavigationKeyEvent_GetDirection 2830 -#define wxNavigationKeyEvent_SetDirection 2831 -#define wxNavigationKeyEvent_IsWindowChange 2832 -#define wxNavigationKeyEvent_SetWindowChange 2833 -#define wxNavigationKeyEvent_IsFromTab 2834 -#define wxNavigationKeyEvent_SetFromTab 2835 -#define wxNavigationKeyEvent_GetCurrentFocus 2836 -#define wxNavigationKeyEvent_SetCurrentFocus 2837 -#define wxHelpEvent_GetOrigin 2838 -#define wxHelpEvent_GetPosition 2839 -#define wxHelpEvent_SetOrigin 2840 -#define wxHelpEvent_SetPosition 2841 -#define wxContextMenuEvent_GetPosition 2842 -#define wxContextMenuEvent_SetPosition 2843 -#define wxIdleEvent_CanSend 2844 -#define wxIdleEvent_GetMode 2845 -#define wxIdleEvent_RequestMore 2846 -#define wxIdleEvent_MoreRequested 2847 -#define wxIdleEvent_SetMode 2848 -#define wxGridEvent_AltDown 2849 -#define wxGridEvent_ControlDown 2850 -#define wxGridEvent_GetCol 2851 -#define wxGridEvent_GetPosition 2852 -#define wxGridEvent_GetRow 2853 -#define wxGridEvent_MetaDown 2854 -#define wxGridEvent_Selecting 2855 -#define wxGridEvent_ShiftDown 2856 -#define wxNotifyEvent_Allow 2857 -#define wxNotifyEvent_IsAllowed 2858 -#define wxNotifyEvent_Veto 2859 -#define wxSashEvent_GetEdge 2860 -#define wxSashEvent_GetDragRect 2861 -#define wxSashEvent_GetDragStatus 2862 -#define wxListEvent_GetCacheFrom 2863 -#define wxListEvent_GetCacheTo 2864 -#define wxListEvent_GetKeyCode 2865 -#define wxListEvent_GetIndex 2866 -#define wxListEvent_GetColumn 2867 -#define wxListEvent_GetPoint 2868 -#define wxListEvent_GetLabel 2869 -#define wxListEvent_GetText 2870 -#define wxListEvent_GetImage 2871 -#define wxListEvent_GetData 2872 -#define wxListEvent_GetMask 2873 -#define wxListEvent_GetItem 2874 -#define wxListEvent_IsEditCancelled 2875 -#define wxDateEvent_GetDate 2876 -#define wxCalendarEvent_GetWeekDay 2877 -#define wxFileDirPickerEvent_GetPath 2878 -#define wxColourPickerEvent_GetColour 2879 -#define wxFontPickerEvent_GetFont 2880 -#define wxStyledTextEvent_GetPosition 2881 -#define wxStyledTextEvent_GetKey 2882 -#define wxStyledTextEvent_GetModifiers 2883 -#define wxStyledTextEvent_GetModificationType 2884 -#define wxStyledTextEvent_GetText 2885 -#define wxStyledTextEvent_GetLength 2886 -#define wxStyledTextEvent_GetLinesAdded 2887 -#define wxStyledTextEvent_GetLine 2888 -#define wxStyledTextEvent_GetFoldLevelNow 2889 -#define wxStyledTextEvent_GetFoldLevelPrev 2890 -#define wxStyledTextEvent_GetMargin 2891 -#define wxStyledTextEvent_GetMessage 2892 -#define wxStyledTextEvent_GetWParam 2893 -#define wxStyledTextEvent_GetLParam 2894 -#define wxStyledTextEvent_GetListType 2895 -#define wxStyledTextEvent_GetX 2896 -#define wxStyledTextEvent_GetY 2897 -#define wxStyledTextEvent_GetDragText 2898 -#define wxStyledTextEvent_GetDragAllowMove 2899 -#define wxStyledTextEvent_GetDragResult 2900 -#define wxStyledTextEvent_GetShift 2901 -#define wxStyledTextEvent_GetControl 2902 -#define wxStyledTextEvent_GetAlt 2903 -#define utils_wxGetKeyState 2904 -#define utils_wxGetMousePosition 2905 -#define utils_wxGetMouseState 2906 -#define utils_wxSetDetectableAutoRepeat 2907 -#define utils_wxBell 2908 -#define utils_wxFindMenuItemId 2909 -#define utils_wxGenericFindWindowAtPoint 2910 -#define utils_wxFindWindowAtPoint 2911 -#define utils_wxBeginBusyCursor 2912 -#define utils_wxEndBusyCursor 2913 -#define utils_wxIsBusy 2914 -#define utils_wxShutdown 2915 -#define utils_wxShell 2916 -#define utils_wxLaunchDefaultBrowser 2917 -#define utils_wxGetEmailAddress 2918 -#define utils_wxGetUserId 2919 -#define utils_wxGetHomeDir 2920 -#define utils_wxNewId 2921 -#define utils_wxRegisterId 2922 -#define utils_wxGetCurrentId 2923 -#define utils_wxGetOsDescription 2924 -#define utils_wxIsPlatformLittleEndian 2925 -#define utils_wxIsPlatform64Bit 2926 -#define wxPrintout_new 2927 -#define wxPrintout_destruct 2928 -#define wxPrintout_GetDC 2929 -#define wxPrintout_GetPageSizeMM 2930 -#define wxPrintout_GetPageSizePixels 2931 -#define wxPrintout_GetPaperRectPixels 2932 -#define wxPrintout_GetPPIPrinter 2933 -#define wxPrintout_GetPPIScreen 2934 -#define wxPrintout_GetTitle 2935 -#define wxPrintout_IsPreview 2936 -#define wxPrintout_FitThisSizeToPaper 2937 -#define wxPrintout_FitThisSizeToPage 2938 -#define wxPrintout_FitThisSizeToPageMargins 2939 -#define wxPrintout_MapScreenSizeToPaper 2940 -#define wxPrintout_MapScreenSizeToPage 2941 -#define wxPrintout_MapScreenSizeToPageMargins 2942 -#define wxPrintout_MapScreenSizeToDevice 2943 -#define wxPrintout_GetLogicalPaperRect 2944 -#define wxPrintout_GetLogicalPageRect 2945 -#define wxPrintout_GetLogicalPageMarginsRect 2946 -#define wxPrintout_SetLogicalOrigin 2947 -#define wxPrintout_OffsetLogicalOrigin 2948 -#define wxStyledTextCtrl_new_2 2949 -#define wxStyledTextCtrl_new_0 2950 -#define wxStyledTextCtrl_destruct 2951 -#define wxStyledTextCtrl_Create 2952 -#define wxStyledTextCtrl_AddText 2953 -#define wxStyledTextCtrl_AddStyledText 2954 -#define wxStyledTextCtrl_InsertText 2955 -#define wxStyledTextCtrl_ClearAll 2956 -#define wxStyledTextCtrl_ClearDocumentStyle 2957 -#define wxStyledTextCtrl_GetLength 2958 -#define wxStyledTextCtrl_GetCharAt 2959 -#define wxStyledTextCtrl_GetCurrentPos 2960 -#define wxStyledTextCtrl_GetAnchor 2961 -#define wxStyledTextCtrl_GetStyleAt 2962 -#define wxStyledTextCtrl_Redo 2963 -#define wxStyledTextCtrl_SetUndoCollection 2964 -#define wxStyledTextCtrl_SelectAll 2965 -#define wxStyledTextCtrl_SetSavePoint 2966 -#define wxStyledTextCtrl_GetStyledText 2967 -#define wxStyledTextCtrl_CanRedo 2968 -#define wxStyledTextCtrl_MarkerLineFromHandle 2969 -#define wxStyledTextCtrl_MarkerDeleteHandle 2970 -#define wxStyledTextCtrl_GetUndoCollection 2971 -#define wxStyledTextCtrl_GetViewWhiteSpace 2972 -#define wxStyledTextCtrl_SetViewWhiteSpace 2973 -#define wxStyledTextCtrl_PositionFromPoint 2974 -#define wxStyledTextCtrl_PositionFromPointClose 2975 -#define wxStyledTextCtrl_GotoLine 2976 -#define wxStyledTextCtrl_GotoPos 2977 -#define wxStyledTextCtrl_SetAnchor 2978 -#define wxStyledTextCtrl_GetCurLine 2979 -#define wxStyledTextCtrl_GetEndStyled 2980 -#define wxStyledTextCtrl_ConvertEOLs 2981 -#define wxStyledTextCtrl_GetEOLMode 2982 -#define wxStyledTextCtrl_SetEOLMode 2983 -#define wxStyledTextCtrl_StartStyling 2984 -#define wxStyledTextCtrl_SetStyling 2985 -#define wxStyledTextCtrl_GetBufferedDraw 2986 -#define wxStyledTextCtrl_SetBufferedDraw 2987 -#define wxStyledTextCtrl_SetTabWidth 2988 -#define wxStyledTextCtrl_GetTabWidth 2989 -#define wxStyledTextCtrl_SetCodePage 2990 -#define wxStyledTextCtrl_MarkerDefine 2991 -#define wxStyledTextCtrl_MarkerSetForeground 2992 -#define wxStyledTextCtrl_MarkerSetBackground 2993 -#define wxStyledTextCtrl_MarkerAdd 2994 -#define wxStyledTextCtrl_MarkerDelete 2995 -#define wxStyledTextCtrl_MarkerDeleteAll 2996 -#define wxStyledTextCtrl_MarkerGet 2997 -#define wxStyledTextCtrl_MarkerNext 2998 -#define wxStyledTextCtrl_MarkerPrevious 2999 -#define wxStyledTextCtrl_MarkerDefineBitmap 3000 -#define wxStyledTextCtrl_MarkerAddSet 3001 -#define wxStyledTextCtrl_MarkerSetAlpha 3002 -#define wxStyledTextCtrl_SetMarginType 3003 -#define wxStyledTextCtrl_GetMarginType 3004 -#define wxStyledTextCtrl_SetMarginWidth 3005 -#define wxStyledTextCtrl_GetMarginWidth 3006 -#define wxStyledTextCtrl_SetMarginMask 3007 -#define wxStyledTextCtrl_GetMarginMask 3008 -#define wxStyledTextCtrl_SetMarginSensitive 3009 -#define wxStyledTextCtrl_GetMarginSensitive 3010 -#define wxStyledTextCtrl_StyleClearAll 3011 -#define wxStyledTextCtrl_StyleSetForeground 3012 -#define wxStyledTextCtrl_StyleSetBackground 3013 -#define wxStyledTextCtrl_StyleSetBold 3014 -#define wxStyledTextCtrl_StyleSetItalic 3015 -#define wxStyledTextCtrl_StyleSetSize 3016 -#define wxStyledTextCtrl_StyleSetFaceName 3017 -#define wxStyledTextCtrl_StyleSetEOLFilled 3018 -#define wxStyledTextCtrl_StyleResetDefault 3019 -#define wxStyledTextCtrl_StyleSetUnderline 3020 -#define wxStyledTextCtrl_StyleSetCase 3021 -#define wxStyledTextCtrl_StyleSetHotSpot 3022 -#define wxStyledTextCtrl_SetSelForeground 3023 -#define wxStyledTextCtrl_SetSelBackground 3024 -#define wxStyledTextCtrl_GetSelAlpha 3025 -#define wxStyledTextCtrl_SetSelAlpha 3026 -#define wxStyledTextCtrl_SetCaretForeground 3027 -#define wxStyledTextCtrl_CmdKeyAssign 3028 -#define wxStyledTextCtrl_CmdKeyClear 3029 -#define wxStyledTextCtrl_CmdKeyClearAll 3030 -#define wxStyledTextCtrl_SetStyleBytes 3031 -#define wxStyledTextCtrl_StyleSetVisible 3032 -#define wxStyledTextCtrl_GetCaretPeriod 3033 -#define wxStyledTextCtrl_SetCaretPeriod 3034 -#define wxStyledTextCtrl_SetWordChars 3035 -#define wxStyledTextCtrl_BeginUndoAction 3036 -#define wxStyledTextCtrl_EndUndoAction 3037 -#define wxStyledTextCtrl_IndicatorSetStyle 3038 -#define wxStyledTextCtrl_IndicatorGetStyle 3039 -#define wxStyledTextCtrl_IndicatorSetForeground 3040 -#define wxStyledTextCtrl_IndicatorGetForeground 3041 -#define wxStyledTextCtrl_SetWhitespaceForeground 3042 -#define wxStyledTextCtrl_SetWhitespaceBackground 3043 -#define wxStyledTextCtrl_GetStyleBits 3044 -#define wxStyledTextCtrl_SetLineState 3045 -#define wxStyledTextCtrl_GetLineState 3046 -#define wxStyledTextCtrl_GetMaxLineState 3047 -#define wxStyledTextCtrl_GetCaretLineVisible 3048 -#define wxStyledTextCtrl_SetCaretLineVisible 3049 -#define wxStyledTextCtrl_GetCaretLineBackground 3050 -#define wxStyledTextCtrl_SetCaretLineBackground 3051 -#define wxStyledTextCtrl_AutoCompShow 3052 -#define wxStyledTextCtrl_AutoCompCancel 3053 -#define wxStyledTextCtrl_AutoCompActive 3054 -#define wxStyledTextCtrl_AutoCompPosStart 3055 -#define wxStyledTextCtrl_AutoCompComplete 3056 -#define wxStyledTextCtrl_AutoCompStops 3057 -#define wxStyledTextCtrl_AutoCompSetSeparator 3058 -#define wxStyledTextCtrl_AutoCompGetSeparator 3059 -#define wxStyledTextCtrl_AutoCompSelect 3060 -#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3061 -#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3062 -#define wxStyledTextCtrl_AutoCompSetFillUps 3063 -#define wxStyledTextCtrl_AutoCompSetChooseSingle 3064 -#define wxStyledTextCtrl_AutoCompGetChooseSingle 3065 -#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3066 -#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3067 -#define wxStyledTextCtrl_UserListShow 3068 -#define wxStyledTextCtrl_AutoCompSetAutoHide 3069 -#define wxStyledTextCtrl_AutoCompGetAutoHide 3070 -#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3071 -#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3072 -#define wxStyledTextCtrl_RegisterImage 3073 -#define wxStyledTextCtrl_ClearRegisteredImages 3074 -#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3075 -#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3076 -#define wxStyledTextCtrl_AutoCompSetMaxWidth 3077 -#define wxStyledTextCtrl_AutoCompGetMaxWidth 3078 -#define wxStyledTextCtrl_AutoCompSetMaxHeight 3079 -#define wxStyledTextCtrl_AutoCompGetMaxHeight 3080 -#define wxStyledTextCtrl_SetIndent 3081 -#define wxStyledTextCtrl_GetIndent 3082 -#define wxStyledTextCtrl_SetUseTabs 3083 -#define wxStyledTextCtrl_GetUseTabs 3084 -#define wxStyledTextCtrl_SetLineIndentation 3085 -#define wxStyledTextCtrl_GetLineIndentation 3086 -#define wxStyledTextCtrl_GetLineIndentPosition 3087 -#define wxStyledTextCtrl_GetColumn 3088 -#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3089 -#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3090 -#define wxStyledTextCtrl_SetIndentationGuides 3091 -#define wxStyledTextCtrl_GetIndentationGuides 3092 -#define wxStyledTextCtrl_SetHighlightGuide 3093 -#define wxStyledTextCtrl_GetHighlightGuide 3094 -#define wxStyledTextCtrl_GetLineEndPosition 3095 -#define wxStyledTextCtrl_GetCodePage 3096 -#define wxStyledTextCtrl_GetCaretForeground 3097 -#define wxStyledTextCtrl_GetReadOnly 3098 -#define wxStyledTextCtrl_SetCurrentPos 3099 -#define wxStyledTextCtrl_SetSelectionStart 3100 -#define wxStyledTextCtrl_GetSelectionStart 3101 -#define wxStyledTextCtrl_SetSelectionEnd 3102 -#define wxStyledTextCtrl_GetSelectionEnd 3103 -#define wxStyledTextCtrl_SetPrintMagnification 3104 -#define wxStyledTextCtrl_GetPrintMagnification 3105 -#define wxStyledTextCtrl_SetPrintColourMode 3106 -#define wxStyledTextCtrl_GetPrintColourMode 3107 -#define wxStyledTextCtrl_FindText 3108 -#define wxStyledTextCtrl_FormatRange 3109 -#define wxStyledTextCtrl_GetFirstVisibleLine 3110 -#define wxStyledTextCtrl_GetLine 3111 -#define wxStyledTextCtrl_GetLineCount 3112 -#define wxStyledTextCtrl_SetMarginLeft 3113 -#define wxStyledTextCtrl_GetMarginLeft 3114 -#define wxStyledTextCtrl_SetMarginRight 3115 -#define wxStyledTextCtrl_GetMarginRight 3116 -#define wxStyledTextCtrl_GetModify 3117 -#define wxStyledTextCtrl_SetSelection 3118 -#define wxStyledTextCtrl_GetSelectedText 3119 -#define wxStyledTextCtrl_GetTextRange 3120 -#define wxStyledTextCtrl_HideSelection 3121 -#define wxStyledTextCtrl_LineFromPosition 3122 -#define wxStyledTextCtrl_PositionFromLine 3123 -#define wxStyledTextCtrl_LineScroll 3124 -#define wxStyledTextCtrl_EnsureCaretVisible 3125 -#define wxStyledTextCtrl_ReplaceSelection 3126 -#define wxStyledTextCtrl_SetReadOnly 3127 -#define wxStyledTextCtrl_CanPaste 3128 -#define wxStyledTextCtrl_CanUndo 3129 -#define wxStyledTextCtrl_EmptyUndoBuffer 3130 -#define wxStyledTextCtrl_Undo 3131 -#define wxStyledTextCtrl_Cut 3132 -#define wxStyledTextCtrl_Copy 3133 -#define wxStyledTextCtrl_Paste 3134 -#define wxStyledTextCtrl_Clear 3135 -#define wxStyledTextCtrl_SetText 3136 -#define wxStyledTextCtrl_GetText 3137 -#define wxStyledTextCtrl_GetTextLength 3138 -#define wxStyledTextCtrl_GetOvertype 3139 -#define wxStyledTextCtrl_SetCaretWidth 3140 -#define wxStyledTextCtrl_GetCaretWidth 3141 -#define wxStyledTextCtrl_SetTargetStart 3142 -#define wxStyledTextCtrl_GetTargetStart 3143 -#define wxStyledTextCtrl_SetTargetEnd 3144 -#define wxStyledTextCtrl_GetTargetEnd 3145 -#define wxStyledTextCtrl_ReplaceTarget 3146 -#define wxStyledTextCtrl_SearchInTarget 3147 -#define wxStyledTextCtrl_SetSearchFlags 3148 -#define wxStyledTextCtrl_GetSearchFlags 3149 -#define wxStyledTextCtrl_CallTipShow 3150 -#define wxStyledTextCtrl_CallTipCancel 3151 -#define wxStyledTextCtrl_CallTipActive 3152 -#define wxStyledTextCtrl_CallTipPosAtStart 3153 -#define wxStyledTextCtrl_CallTipSetHighlight 3154 -#define wxStyledTextCtrl_CallTipSetBackground 3155 -#define wxStyledTextCtrl_CallTipSetForeground 3156 -#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3157 -#define wxStyledTextCtrl_CallTipUseStyle 3158 -#define wxStyledTextCtrl_VisibleFromDocLine 3159 -#define wxStyledTextCtrl_DocLineFromVisible 3160 -#define wxStyledTextCtrl_WrapCount 3161 -#define wxStyledTextCtrl_SetFoldLevel 3162 -#define wxStyledTextCtrl_GetFoldLevel 3163 -#define wxStyledTextCtrl_GetLastChild 3164 -#define wxStyledTextCtrl_GetFoldParent 3165 -#define wxStyledTextCtrl_ShowLines 3166 -#define wxStyledTextCtrl_HideLines 3167 -#define wxStyledTextCtrl_GetLineVisible 3168 -#define wxStyledTextCtrl_SetFoldExpanded 3169 -#define wxStyledTextCtrl_GetFoldExpanded 3170 -#define wxStyledTextCtrl_ToggleFold 3171 -#define wxStyledTextCtrl_EnsureVisible 3172 -#define wxStyledTextCtrl_SetFoldFlags 3173 -#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3174 -#define wxStyledTextCtrl_SetTabIndents 3175 -#define wxStyledTextCtrl_GetTabIndents 3176 -#define wxStyledTextCtrl_SetBackSpaceUnIndents 3177 -#define wxStyledTextCtrl_GetBackSpaceUnIndents 3178 -#define wxStyledTextCtrl_SetMouseDwellTime 3179 -#define wxStyledTextCtrl_GetMouseDwellTime 3180 -#define wxStyledTextCtrl_WordStartPosition 3181 -#define wxStyledTextCtrl_WordEndPosition 3182 -#define wxStyledTextCtrl_SetWrapMode 3183 -#define wxStyledTextCtrl_GetWrapMode 3184 -#define wxStyledTextCtrl_SetWrapVisualFlags 3185 -#define wxStyledTextCtrl_GetWrapVisualFlags 3186 -#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3187 -#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3188 -#define wxStyledTextCtrl_SetWrapStartIndent 3189 -#define wxStyledTextCtrl_GetWrapStartIndent 3190 -#define wxStyledTextCtrl_SetLayoutCache 3191 -#define wxStyledTextCtrl_GetLayoutCache 3192 -#define wxStyledTextCtrl_SetScrollWidth 3193 -#define wxStyledTextCtrl_GetScrollWidth 3194 -#define wxStyledTextCtrl_TextWidth 3195 -#define wxStyledTextCtrl_GetEndAtLastLine 3196 -#define wxStyledTextCtrl_TextHeight 3197 -#define wxStyledTextCtrl_SetUseVerticalScrollBar 3198 -#define wxStyledTextCtrl_GetUseVerticalScrollBar 3199 -#define wxStyledTextCtrl_AppendText 3200 -#define wxStyledTextCtrl_GetTwoPhaseDraw 3201 -#define wxStyledTextCtrl_SetTwoPhaseDraw 3202 -#define wxStyledTextCtrl_TargetFromSelection 3203 -#define wxStyledTextCtrl_LinesJoin 3204 -#define wxStyledTextCtrl_LinesSplit 3205 -#define wxStyledTextCtrl_SetFoldMarginColour 3206 -#define wxStyledTextCtrl_SetFoldMarginHiColour 3207 -#define wxStyledTextCtrl_LineDown 3208 -#define wxStyledTextCtrl_LineDownExtend 3209 -#define wxStyledTextCtrl_LineUp 3210 -#define wxStyledTextCtrl_LineUpExtend 3211 -#define wxStyledTextCtrl_CharLeft 3212 -#define wxStyledTextCtrl_CharLeftExtend 3213 -#define wxStyledTextCtrl_CharRight 3214 -#define wxStyledTextCtrl_CharRightExtend 3215 -#define wxStyledTextCtrl_WordLeft 3216 -#define wxStyledTextCtrl_WordLeftExtend 3217 -#define wxStyledTextCtrl_WordRight 3218 -#define wxStyledTextCtrl_WordRightExtend 3219 -#define wxStyledTextCtrl_Home 3220 -#define wxStyledTextCtrl_HomeExtend 3221 -#define wxStyledTextCtrl_LineEnd 3222 -#define wxStyledTextCtrl_LineEndExtend 3223 -#define wxStyledTextCtrl_DocumentStart 3224 -#define wxStyledTextCtrl_DocumentStartExtend 3225 -#define wxStyledTextCtrl_DocumentEnd 3226 -#define wxStyledTextCtrl_DocumentEndExtend 3227 -#define wxStyledTextCtrl_PageUp 3228 -#define wxStyledTextCtrl_PageUpExtend 3229 -#define wxStyledTextCtrl_PageDown 3230 -#define wxStyledTextCtrl_PageDownExtend 3231 -#define wxStyledTextCtrl_EditToggleOvertype 3232 -#define wxStyledTextCtrl_Cancel 3233 -#define wxStyledTextCtrl_DeleteBack 3234 -#define wxStyledTextCtrl_Tab 3235 -#define wxStyledTextCtrl_BackTab 3236 -#define wxStyledTextCtrl_NewLine 3237 -#define wxStyledTextCtrl_FormFeed 3238 -#define wxStyledTextCtrl_VCHome 3239 -#define wxStyledTextCtrl_VCHomeExtend 3240 -#define wxStyledTextCtrl_ZoomIn 3241 -#define wxStyledTextCtrl_ZoomOut 3242 -#define wxStyledTextCtrl_DelWordLeft 3243 -#define wxStyledTextCtrl_DelWordRight 3244 -#define wxStyledTextCtrl_LineCut 3245 -#define wxStyledTextCtrl_LineDelete 3246 -#define wxStyledTextCtrl_LineTranspose 3247 -#define wxStyledTextCtrl_LineDuplicate 3248 -#define wxStyledTextCtrl_LowerCase 3249 -#define wxStyledTextCtrl_UpperCase 3250 -#define wxStyledTextCtrl_LineScrollDown 3251 -#define wxStyledTextCtrl_LineScrollUp 3252 -#define wxStyledTextCtrl_DeleteBackNotLine 3253 -#define wxStyledTextCtrl_HomeDisplay 3254 -#define wxStyledTextCtrl_HomeDisplayExtend 3255 -#define wxStyledTextCtrl_LineEndDisplay 3256 -#define wxStyledTextCtrl_LineEndDisplayExtend 3257 -#define wxStyledTextCtrl_HomeWrapExtend 3258 -#define wxStyledTextCtrl_LineEndWrap 3259 -#define wxStyledTextCtrl_LineEndWrapExtend 3260 -#define wxStyledTextCtrl_VCHomeWrap 3261 -#define wxStyledTextCtrl_VCHomeWrapExtend 3262 -#define wxStyledTextCtrl_LineCopy 3263 -#define wxStyledTextCtrl_MoveCaretInsideView 3264 -#define wxStyledTextCtrl_LineLength 3265 -#define wxStyledTextCtrl_BraceHighlight 3266 -#define wxStyledTextCtrl_BraceBadLight 3267 -#define wxStyledTextCtrl_BraceMatch 3268 -#define wxStyledTextCtrl_GetViewEOL 3269 -#define wxStyledTextCtrl_SetViewEOL 3270 -#define wxStyledTextCtrl_SetModEventMask 3271 -#define wxStyledTextCtrl_GetEdgeColumn 3272 -#define wxStyledTextCtrl_SetEdgeColumn 3273 -#define wxStyledTextCtrl_SetEdgeMode 3274 -#define wxStyledTextCtrl_GetEdgeMode 3275 -#define wxStyledTextCtrl_GetEdgeColour 3276 -#define wxStyledTextCtrl_SetEdgeColour 3277 -#define wxStyledTextCtrl_SearchAnchor 3278 -#define wxStyledTextCtrl_SearchNext 3279 -#define wxStyledTextCtrl_SearchPrev 3280 -#define wxStyledTextCtrl_LinesOnScreen 3281 -#define wxStyledTextCtrl_UsePopUp 3282 -#define wxStyledTextCtrl_SelectionIsRectangle 3283 -#define wxStyledTextCtrl_SetZoom 3284 -#define wxStyledTextCtrl_GetZoom 3285 -#define wxStyledTextCtrl_GetModEventMask 3286 -#define wxStyledTextCtrl_SetSTCFocus 3287 -#define wxStyledTextCtrl_GetSTCFocus 3288 -#define wxStyledTextCtrl_SetStatus 3289 -#define wxStyledTextCtrl_GetStatus 3290 -#define wxStyledTextCtrl_SetMouseDownCaptures 3291 -#define wxStyledTextCtrl_GetMouseDownCaptures 3292 -#define wxStyledTextCtrl_SetSTCCursor 3293 -#define wxStyledTextCtrl_GetSTCCursor 3294 -#define wxStyledTextCtrl_SetControlCharSymbol 3295 -#define wxStyledTextCtrl_GetControlCharSymbol 3296 -#define wxStyledTextCtrl_WordPartLeft 3297 -#define wxStyledTextCtrl_WordPartLeftExtend 3298 -#define wxStyledTextCtrl_WordPartRight 3299 -#define wxStyledTextCtrl_WordPartRightExtend 3300 -#define wxStyledTextCtrl_SetVisiblePolicy 3301 -#define wxStyledTextCtrl_DelLineLeft 3302 -#define wxStyledTextCtrl_DelLineRight 3303 -#define wxStyledTextCtrl_GetXOffset 3304 -#define wxStyledTextCtrl_ChooseCaretX 3305 -#define wxStyledTextCtrl_SetXCaretPolicy 3306 -#define wxStyledTextCtrl_SetYCaretPolicy 3307 -#define wxStyledTextCtrl_GetPrintWrapMode 3308 -#define wxStyledTextCtrl_SetHotspotActiveForeground 3309 -#define wxStyledTextCtrl_SetHotspotActiveBackground 3310 -#define wxStyledTextCtrl_SetHotspotActiveUnderline 3311 -#define wxStyledTextCtrl_SetHotspotSingleLine 3312 -#define wxStyledTextCtrl_ParaDownExtend 3313 -#define wxStyledTextCtrl_ParaUp 3314 -#define wxStyledTextCtrl_ParaUpExtend 3315 -#define wxStyledTextCtrl_PositionBefore 3316 -#define wxStyledTextCtrl_PositionAfter 3317 -#define wxStyledTextCtrl_CopyRange 3318 -#define wxStyledTextCtrl_CopyText 3319 -#define wxStyledTextCtrl_SetSelectionMode 3320 -#define wxStyledTextCtrl_GetSelectionMode 3321 -#define wxStyledTextCtrl_LineDownRectExtend 3322 -#define wxStyledTextCtrl_LineUpRectExtend 3323 -#define wxStyledTextCtrl_CharLeftRectExtend 3324 -#define wxStyledTextCtrl_CharRightRectExtend 3325 -#define wxStyledTextCtrl_HomeRectExtend 3326 -#define wxStyledTextCtrl_VCHomeRectExtend 3327 -#define wxStyledTextCtrl_LineEndRectExtend 3328 -#define wxStyledTextCtrl_PageUpRectExtend 3329 -#define wxStyledTextCtrl_PageDownRectExtend 3330 -#define wxStyledTextCtrl_StutteredPageUp 3331 -#define wxStyledTextCtrl_StutteredPageUpExtend 3332 -#define wxStyledTextCtrl_StutteredPageDown 3333 -#define wxStyledTextCtrl_StutteredPageDownExtend 3334 -#define wxStyledTextCtrl_WordLeftEnd 3335 -#define wxStyledTextCtrl_WordLeftEndExtend 3336 -#define wxStyledTextCtrl_WordRightEnd 3337 -#define wxStyledTextCtrl_WordRightEndExtend 3338 -#define wxStyledTextCtrl_SetWhitespaceChars 3339 -#define wxStyledTextCtrl_SetCharsDefault 3340 -#define wxStyledTextCtrl_AutoCompGetCurrent 3341 -#define wxStyledTextCtrl_Allocate 3342 -#define wxStyledTextCtrl_FindColumn 3343 -#define wxStyledTextCtrl_GetCaretSticky 3344 -#define wxStyledTextCtrl_SetCaretSticky 3345 -#define wxStyledTextCtrl_ToggleCaretSticky 3346 -#define wxStyledTextCtrl_SetPasteConvertEndings 3347 -#define wxStyledTextCtrl_GetPasteConvertEndings 3348 -#define wxStyledTextCtrl_SelectionDuplicate 3349 -#define wxStyledTextCtrl_SetCaretLineBackAlpha 3350 -#define wxStyledTextCtrl_GetCaretLineBackAlpha 3351 -#define wxStyledTextCtrl_StartRecord 3352 -#define wxStyledTextCtrl_StopRecord 3353 -#define wxStyledTextCtrl_SetLexer 3354 -#define wxStyledTextCtrl_GetLexer 3355 -#define wxStyledTextCtrl_Colourise 3356 -#define wxStyledTextCtrl_SetProperty 3357 -#define wxStyledTextCtrl_SetKeyWords 3358 -#define wxStyledTextCtrl_SetLexerLanguage 3359 -#define wxStyledTextCtrl_GetProperty 3360 -#define wxStyledTextCtrl_GetStyleBitsNeeded 3361 -#define wxStyledTextCtrl_GetCurrentLine 3362 -#define wxStyledTextCtrl_StyleSetSpec 3363 -#define wxStyledTextCtrl_StyleSetFont 3364 -#define wxStyledTextCtrl_StyleSetFontAttr 3365 -#define wxStyledTextCtrl_StyleSetCharacterSet 3366 -#define wxStyledTextCtrl_StyleSetFontEncoding 3367 -#define wxStyledTextCtrl_CmdKeyExecute 3368 -#define wxStyledTextCtrl_SetMargins 3369 -#define wxStyledTextCtrl_GetSelection 3370 -#define wxStyledTextCtrl_PointFromPosition 3371 -#define wxStyledTextCtrl_ScrollToLine 3372 -#define wxStyledTextCtrl_ScrollToColumn 3373 -#define wxStyledTextCtrl_SetVScrollBar 3374 -#define wxStyledTextCtrl_SetHScrollBar 3375 -#define wxStyledTextCtrl_GetLastKeydownProcessed 3376 -#define wxStyledTextCtrl_SetLastKeydownProcessed 3377 -#define wxStyledTextCtrl_SaveFile 3378 -#define wxStyledTextCtrl_LoadFile 3379 -#define wxStyledTextCtrl_DoDragOver 3380 -#define wxStyledTextCtrl_DoDropText 3381 -#define wxStyledTextCtrl_GetUseAntiAliasing 3382 -#define wxStyledTextCtrl_AddTextRaw 3383 -#define wxStyledTextCtrl_InsertTextRaw 3384 -#define wxStyledTextCtrl_GetCurLineRaw 3385 -#define wxStyledTextCtrl_GetLineRaw 3386 -#define wxStyledTextCtrl_GetSelectedTextRaw 3387 -#define wxStyledTextCtrl_GetTextRangeRaw 3388 -#define wxStyledTextCtrl_SetTextRaw 3389 -#define wxStyledTextCtrl_GetTextRaw 3390 -#define wxStyledTextCtrl_AppendTextRaw 3391 -#define wxArtProvider_GetBitmap 3392 -#define wxArtProvider_GetIcon 3393 -#define wxTreeEvent_GetKeyCode 3394 -#define wxTreeEvent_GetItem 3395 -#define wxTreeEvent_GetKeyEvent 3396 -#define wxTreeEvent_GetLabel 3397 -#define wxTreeEvent_GetOldItem 3398 -#define wxTreeEvent_GetPoint 3399 -#define wxTreeEvent_IsEditCancelled 3400 -#define wxTreeEvent_SetToolTip 3401 -#define wxNotebookEvent_GetOldSelection 3402 -#define wxNotebookEvent_GetSelection 3403 -#define wxNotebookEvent_SetOldSelection 3404 -#define wxNotebookEvent_SetSelection 3405 -#define wxFileDataObject_new 3406 -#define wxFileDataObject_AddFile 3407 -#define wxFileDataObject_GetFilenames 3408 -#define wxFileDataObject_destroy 3409 -#define wxTextDataObject_new 3410 -#define wxTextDataObject_GetTextLength 3411 -#define wxTextDataObject_GetText 3412 -#define wxTextDataObject_SetText 3413 -#define wxTextDataObject_destroy 3414 -#define wxBitmapDataObject_new_1_1 3415 -#define wxBitmapDataObject_new_1_0 3416 -#define wxBitmapDataObject_GetBitmap 3417 -#define wxBitmapDataObject_SetBitmap 3418 -#define wxBitmapDataObject_destroy 3419 -#define wxClipboard_new 3421 -#define wxClipboard_destruct 3422 -#define wxClipboard_AddData 3423 -#define wxClipboard_Clear 3424 -#define wxClipboard_Close 3425 -#define wxClipboard_Flush 3426 -#define wxClipboard_GetData 3427 -#define wxClipboard_IsOpened 3428 -#define wxClipboard_Open 3429 -#define wxClipboard_SetData 3430 -#define wxClipboard_UsePrimarySelection 3432 -#define wxClipboard_IsSupported 3433 -#define wxClipboard_Get 3434 -#define wxSpinEvent_GetPosition 3435 -#define wxSpinEvent_SetPosition 3436 -#define wxSplitterWindow_new_0 3437 -#define wxSplitterWindow_new_2 3438 -#define wxSplitterWindow_destruct 3439 -#define wxSplitterWindow_Create 3440 -#define wxSplitterWindow_GetMinimumPaneSize 3441 -#define wxSplitterWindow_GetSashGravity 3442 -#define wxSplitterWindow_GetSashPosition 3443 -#define wxSplitterWindow_GetSplitMode 3444 -#define wxSplitterWindow_GetWindow1 3445 -#define wxSplitterWindow_GetWindow2 3446 -#define wxSplitterWindow_Initialize 3447 -#define wxSplitterWindow_IsSplit 3448 -#define wxSplitterWindow_ReplaceWindow 3449 -#define wxSplitterWindow_SetSashGravity 3450 -#define wxSplitterWindow_SetSashPosition 3451 -#define wxSplitterWindow_SetSashSize 3452 -#define wxSplitterWindow_SetMinimumPaneSize 3453 -#define wxSplitterWindow_SetSplitMode 3454 -#define wxSplitterWindow_SplitHorizontally 3455 -#define wxSplitterWindow_SplitVertically 3456 -#define wxSplitterWindow_Unsplit 3457 -#define wxSplitterWindow_UpdateSize 3458 -#define wxSplitterEvent_GetSashPosition 3459 -#define wxSplitterEvent_GetX 3460 -#define wxSplitterEvent_GetY 3461 -#define wxSplitterEvent_GetWindowBeingRemoved 3462 -#define wxSplitterEvent_SetSashPosition 3463 -#define wxHtmlWindow_new_0 3464 -#define wxHtmlWindow_new_2 3465 -#define wxHtmlWindow_AppendToPage 3466 -#define wxHtmlWindow_GetOpenedAnchor 3467 -#define wxHtmlWindow_GetOpenedPage 3468 -#define wxHtmlWindow_GetOpenedPageTitle 3469 -#define wxHtmlWindow_GetRelatedFrame 3470 -#define wxHtmlWindow_HistoryBack 3471 -#define wxHtmlWindow_HistoryCanBack 3472 -#define wxHtmlWindow_HistoryCanForward 3473 -#define wxHtmlWindow_HistoryClear 3474 -#define wxHtmlWindow_HistoryForward 3475 -#define wxHtmlWindow_LoadFile 3476 -#define wxHtmlWindow_LoadPage 3477 -#define wxHtmlWindow_SelectAll 3478 -#define wxHtmlWindow_SelectionToText 3479 -#define wxHtmlWindow_SelectLine 3480 -#define wxHtmlWindow_SelectWord 3481 -#define wxHtmlWindow_SetBorders 3482 -#define wxHtmlWindow_SetFonts 3483 -#define wxHtmlWindow_SetPage 3484 -#define wxHtmlWindow_SetRelatedFrame 3485 -#define wxHtmlWindow_SetRelatedStatusBar 3486 -#define wxHtmlWindow_ToText 3487 -#define wxHtmlWindow_destroy 3488 -#define wxHtmlLinkEvent_GetLinkInfo 3489 -#define wxSystemSettings_GetColour 3490 -#define wxSystemSettings_GetFont 3491 -#define wxSystemSettings_GetMetric 3492 -#define wxSystemSettings_GetScreenType 3493 -#define wxSystemOptions_GetOption 3494 -#define wxSystemOptions_GetOptionInt 3495 -#define wxSystemOptions_HasOption 3496 -#define wxSystemOptions_IsFalse 3497 -#define wxSystemOptions_SetOption_2_1 3498 -#define wxSystemOptions_SetOption_2_0 3499 -#define wxAuiNotebookEvent_SetSelection 3500 -#define wxAuiNotebookEvent_GetSelection 3501 -#define wxAuiNotebookEvent_SetOldSelection 3502 -#define wxAuiNotebookEvent_GetOldSelection 3503 -#define wxAuiNotebookEvent_SetDragSource 3504 -#define wxAuiNotebookEvent_GetDragSource 3505 -#define wxAuiManagerEvent_SetManager 3506 -#define wxAuiManagerEvent_GetManager 3507 -#define wxAuiManagerEvent_SetPane 3508 -#define wxAuiManagerEvent_GetPane 3509 -#define wxAuiManagerEvent_SetButton 3510 -#define wxAuiManagerEvent_GetButton 3511 -#define wxAuiManagerEvent_SetDC 3512 -#define wxAuiManagerEvent_GetDC 3513 -#define wxAuiManagerEvent_Veto 3514 -#define wxAuiManagerEvent_GetVeto 3515 -#define wxAuiManagerEvent_SetCanVeto 3516 -#define wxAuiManagerEvent_CanVeto 3517 -#define wxLogNull_new 3518 -#define wxLogNull_destroy 3519 -#define wxTaskBarIcon_new 3520 -#define wxTaskBarIcon_destruct 3521 -#define wxTaskBarIcon_PopupMenu 3522 -#define wxTaskBarIcon_RemoveIcon 3523 -#define wxTaskBarIcon_SetIcon 3524 +#define wxPanel_SetFocusIgnoringChildren 337 +#define wxScrolledWindow_new_0 338 +#define wxScrolledWindow_new_2 339 +#define wxScrolledWindow_destruct 340 +#define wxScrolledWindow_CalcScrolledPosition_4 341 +#define wxScrolledWindow_CalcScrolledPosition_1 342 +#define wxScrolledWindow_CalcUnscrolledPosition_4 343 +#define wxScrolledWindow_CalcUnscrolledPosition_1 344 +#define wxScrolledWindow_EnableScrolling 345 +#define wxScrolledWindow_GetScrollPixelsPerUnit 346 +#define wxScrolledWindow_GetViewStart 347 +#define wxScrolledWindow_DoPrepareDC 348 +#define wxScrolledWindow_PrepareDC 349 +#define wxScrolledWindow_Scroll 350 +#define wxScrolledWindow_SetScrollbars 351 +#define wxScrolledWindow_SetScrollRate 352 +#define wxScrolledWindow_SetTargetWindow 353 +#define wxSashWindow_new_0 354 +#define wxSashWindow_new_2 355 +#define wxSashWindow_destruct 356 +#define wxSashWindow_GetSashVisible 357 +#define wxSashWindow_GetMaximumSizeX 358 +#define wxSashWindow_GetMaximumSizeY 359 +#define wxSashWindow_GetMinimumSizeX 360 +#define wxSashWindow_GetMinimumSizeY 361 +#define wxSashWindow_SetMaximumSizeX 362 +#define wxSashWindow_SetMaximumSizeY 363 +#define wxSashWindow_SetMinimumSizeX 364 +#define wxSashWindow_SetMinimumSizeY 365 +#define wxSashWindow_SetSashVisible 366 +#define wxSashLayoutWindow_new_0 367 +#define wxSashLayoutWindow_new_2 368 +#define wxSashLayoutWindow_Create 369 +#define wxSashLayoutWindow_GetAlignment 370 +#define wxSashLayoutWindow_GetOrientation 371 +#define wxSashLayoutWindow_SetAlignment 372 +#define wxSashLayoutWindow_SetDefaultSize 373 +#define wxSashLayoutWindow_SetOrientation 374 +#define wxSashLayoutWindow_destroy 375 +#define wxGrid_new_0 376 +#define wxGrid_new_3 377 +#define wxGrid_new_4 378 +#define wxGrid_destruct 379 +#define wxGrid_AppendCols 380 +#define wxGrid_AppendRows 381 +#define wxGrid_AutoSize 382 +#define wxGrid_AutoSizeColumn 383 +#define wxGrid_AutoSizeColumns 384 +#define wxGrid_AutoSizeRow 385 +#define wxGrid_AutoSizeRows 386 +#define wxGrid_BeginBatch 387 +#define wxGrid_BlockToDeviceRect 388 +#define wxGrid_CanDragColSize 389 +#define wxGrid_CanDragRowSize 390 +#define wxGrid_CanDragGridSize 391 +#define wxGrid_CanEnableCellControl 392 +#define wxGrid_CellToRect_2 393 +#define wxGrid_CellToRect_1 394 +#define wxGrid_ClearGrid 395 +#define wxGrid_ClearSelection 396 +#define wxGrid_CreateGrid 397 +#define wxGrid_DeleteCols 398 +#define wxGrid_DeleteRows 399 +#define wxGrid_DisableCellEditControl 400 +#define wxGrid_DisableDragColSize 401 +#define wxGrid_DisableDragGridSize 402 +#define wxGrid_DisableDragRowSize 403 +#define wxGrid_EnableCellEditControl 404 +#define wxGrid_EnableDragColSize 405 +#define wxGrid_EnableDragGridSize 406 +#define wxGrid_EnableDragRowSize 407 +#define wxGrid_EnableEditing 408 +#define wxGrid_EnableGridLines 409 +#define wxGrid_EndBatch 410 +#define wxGrid_Fit 411 +#define wxGrid_ForceRefresh 412 +#define wxGrid_GetBatchCount 413 +#define wxGrid_GetCellAlignment 414 +#define wxGrid_GetCellBackgroundColour 415 +#define wxGrid_GetCellEditor 416 +#define wxGrid_GetCellFont 417 +#define wxGrid_GetCellRenderer 418 +#define wxGrid_GetCellTextColour 419 +#define wxGrid_GetCellValue_2 420 +#define wxGrid_GetCellValue_1 421 +#define wxGrid_GetColLabelAlignment 422 +#define wxGrid_GetColLabelSize 423 +#define wxGrid_GetColLabelValue 424 +#define wxGrid_GetColMinimalAcceptableWidth 425 +#define wxGrid_GetDefaultCellAlignment 426 +#define wxGrid_GetDefaultCellBackgroundColour 427 +#define wxGrid_GetDefaultCellFont 428 +#define wxGrid_GetDefaultCellTextColour 429 +#define wxGrid_GetDefaultColLabelSize 430 +#define wxGrid_GetDefaultColSize 431 +#define wxGrid_GetDefaultEditor 432 +#define wxGrid_GetDefaultEditorForCell_2 433 +#define wxGrid_GetDefaultEditorForCell_1 434 +#define wxGrid_GetDefaultEditorForType 435 +#define wxGrid_GetDefaultRenderer 436 +#define wxGrid_GetDefaultRendererForCell 437 +#define wxGrid_GetDefaultRendererForType 438 +#define wxGrid_GetDefaultRowLabelSize 439 +#define wxGrid_GetDefaultRowSize 440 +#define wxGrid_GetGridCursorCol 441 +#define wxGrid_GetGridCursorRow 442 +#define wxGrid_GetGridLineColour 443 +#define wxGrid_GridLinesEnabled 444 +#define wxGrid_GetLabelBackgroundColour 445 +#define wxGrid_GetLabelFont 446 +#define wxGrid_GetLabelTextColour 447 +#define wxGrid_GetNumberCols 448 +#define wxGrid_GetNumberRows 449 +#define wxGrid_GetOrCreateCellAttr 450 +#define wxGrid_GetRowMinimalAcceptableHeight 451 +#define wxGrid_GetRowLabelAlignment 452 +#define wxGrid_GetRowLabelSize 453 +#define wxGrid_GetRowLabelValue 454 +#define wxGrid_GetRowSize 455 +#define wxGrid_GetScrollLineX 456 +#define wxGrid_GetScrollLineY 457 +#define wxGrid_GetSelectedCells 458 +#define wxGrid_GetSelectedCols 459 +#define wxGrid_GetSelectedRows 460 +#define wxGrid_GetSelectionBackground 461 +#define wxGrid_GetSelectionBlockTopLeft 462 +#define wxGrid_GetSelectionBlockBottomRight 463 +#define wxGrid_GetSelectionForeground 464 +#define wxGrid_GetViewWidth 465 +#define wxGrid_GetGridWindow 466 +#define wxGrid_GetGridRowLabelWindow 467 +#define wxGrid_GetGridColLabelWindow 468 +#define wxGrid_GetGridCornerLabelWindow 469 +#define wxGrid_HideCellEditControl 470 +#define wxGrid_InsertCols 471 +#define wxGrid_InsertRows 472 +#define wxGrid_IsCellEditControlEnabled 473 +#define wxGrid_IsCurrentCellReadOnly 474 +#define wxGrid_IsEditable 475 +#define wxGrid_IsInSelection_2 476 +#define wxGrid_IsInSelection_1 477 +#define wxGrid_IsReadOnly 478 +#define wxGrid_IsSelection 479 +#define wxGrid_IsVisible_3 480 +#define wxGrid_IsVisible_2 481 +#define wxGrid_MakeCellVisible_2 482 +#define wxGrid_MakeCellVisible_1 483 +#define wxGrid_MoveCursorDown 484 +#define wxGrid_MoveCursorLeft 485 +#define wxGrid_MoveCursorRight 486 +#define wxGrid_MoveCursorUp 487 +#define wxGrid_MoveCursorDownBlock 488 +#define wxGrid_MoveCursorLeftBlock 489 +#define wxGrid_MoveCursorRightBlock 490 +#define wxGrid_MoveCursorUpBlock 491 +#define wxGrid_MovePageDown 492 +#define wxGrid_MovePageUp 493 +#define wxGrid_RegisterDataType 494 +#define wxGrid_SaveEditControlValue 495 +#define wxGrid_SelectAll 496 +#define wxGrid_SelectBlock_5 497 +#define wxGrid_SelectBlock_3 498 +#define wxGrid_SelectCol 499 +#define wxGrid_SelectRow 500 +#define wxGrid_SetCellAlignment_4 501 +#define wxGrid_SetCellAlignment_3 502 +#define wxGrid_SetCellAlignment_1 503 +#define wxGrid_SetCellBackgroundColour_3_0 504 +#define wxGrid_SetCellBackgroundColour_1 505 +#define wxGrid_SetCellBackgroundColour_3_1 506 +#define wxGrid_SetCellEditor 507 +#define wxGrid_SetCellFont 508 +#define wxGrid_SetCellRenderer 509 +#define wxGrid_SetCellTextColour_3_0 510 +#define wxGrid_SetCellTextColour_3_1 511 +#define wxGrid_SetCellTextColour_1 512 +#define wxGrid_SetCellValue_3_0 513 +#define wxGrid_SetCellValue_2 514 +#define wxGrid_SetCellValue_3_1 515 +#define wxGrid_SetColAttr 516 +#define wxGrid_SetColFormatBool 517 +#define wxGrid_SetColFormatNumber 518 +#define wxGrid_SetColFormatFloat 519 +#define wxGrid_SetColFormatCustom 520 +#define wxGrid_SetColLabelAlignment 521 +#define wxGrid_SetColLabelSize 522 +#define wxGrid_SetColLabelValue 523 +#define wxGrid_SetColMinimalWidth 524 +#define wxGrid_SetColMinimalAcceptableWidth 525 +#define wxGrid_SetColSize 526 +#define wxGrid_SetDefaultCellAlignment 527 +#define wxGrid_SetDefaultCellBackgroundColour 528 +#define wxGrid_SetDefaultCellFont 529 +#define wxGrid_SetDefaultCellTextColour 530 +#define wxGrid_SetDefaultEditor 531 +#define wxGrid_SetDefaultRenderer 532 +#define wxGrid_SetDefaultColSize 533 +#define wxGrid_SetDefaultRowSize 534 +#define wxGrid_SetGridCursor 535 +#define wxGrid_SetGridLineColour 536 +#define wxGrid_SetLabelBackgroundColour 537 +#define wxGrid_SetLabelFont 538 +#define wxGrid_SetLabelTextColour 539 +#define wxGrid_SetMargins 540 +#define wxGrid_SetReadOnly 541 +#define wxGrid_SetRowAttr 542 +#define wxGrid_SetRowLabelAlignment 543 +#define wxGrid_SetRowLabelSize 544 +#define wxGrid_SetRowLabelValue 545 +#define wxGrid_SetRowMinimalHeight 546 +#define wxGrid_SetRowMinimalAcceptableHeight 547 +#define wxGrid_SetRowSize 548 +#define wxGrid_SetScrollLineX 549 +#define wxGrid_SetScrollLineY 550 +#define wxGrid_SetSelectionBackground 551 +#define wxGrid_SetSelectionForeground 552 +#define wxGrid_SetSelectionMode 553 +#define wxGrid_ShowCellEditControl 554 +#define wxGrid_XToCol 555 +#define wxGrid_XToEdgeOfCol 556 +#define wxGrid_YToEdgeOfRow 557 +#define wxGrid_YToRow 558 +#define wxGridCellRenderer_Draw 559 +#define wxGridCellRenderer_GetBestSize 560 +#define wxGridCellEditor_Create 561 +#define wxGridCellEditor_IsCreated 562 +#define wxGridCellEditor_SetSize 563 +#define wxGridCellEditor_Show 564 +#define wxGridCellEditor_PaintBackground 565 +#define wxGridCellEditor_BeginEdit 566 +#define wxGridCellEditor_EndEdit 567 +#define wxGridCellEditor_Reset 568 +#define wxGridCellEditor_StartingKey 569 +#define wxGridCellEditor_StartingClick 570 +#define wxGridCellEditor_HandleReturn 571 +#define wxGridCellBoolRenderer_new 572 +#define wxGridCellBoolRenderer_destroy 573 +#define wxGridCellBoolEditor_new 574 +#define wxGridCellBoolEditor_IsTrueValue 575 +#define wxGridCellBoolEditor_UseStringValues 576 +#define wxGridCellBoolEditor_destroy 577 +#define wxGridCellFloatRenderer_new 578 +#define wxGridCellFloatRenderer_GetPrecision 579 +#define wxGridCellFloatRenderer_GetWidth 580 +#define wxGridCellFloatRenderer_SetParameters 581 +#define wxGridCellFloatRenderer_SetPrecision 582 +#define wxGridCellFloatRenderer_SetWidth 583 +#define wxGridCellFloatRenderer_destroy 584 +#define wxGridCellFloatEditor_new 585 +#define wxGridCellFloatEditor_SetParameters 586 +#define wxGridCellFloatEditor_destroy 587 +#define wxGridCellStringRenderer_new 588 +#define wxGridCellStringRenderer_destroy 589 +#define wxGridCellTextEditor_new 590 +#define wxGridCellTextEditor_SetParameters 591 +#define wxGridCellTextEditor_destroy 592 +#define wxGridCellChoiceEditor_new 594 +#define wxGridCellChoiceEditor_SetParameters 595 +#define wxGridCellChoiceEditor_destroy 596 +#define wxGridCellNumberRenderer_new 597 +#define wxGridCellNumberRenderer_destroy 598 +#define wxGridCellNumberEditor_new 599 +#define wxGridCellNumberEditor_GetValue 600 +#define wxGridCellNumberEditor_SetParameters 601 +#define wxGridCellNumberEditor_destroy 602 +#define wxGridCellAttr_SetTextColour 603 +#define wxGridCellAttr_SetBackgroundColour 604 +#define wxGridCellAttr_SetFont 605 +#define wxGridCellAttr_SetAlignment 606 +#define wxGridCellAttr_SetReadOnly 607 +#define wxGridCellAttr_SetRenderer 608 +#define wxGridCellAttr_SetEditor 609 +#define wxGridCellAttr_HasTextColour 610 +#define wxGridCellAttr_HasBackgroundColour 611 +#define wxGridCellAttr_HasFont 612 +#define wxGridCellAttr_HasAlignment 613 +#define wxGridCellAttr_HasRenderer 614 +#define wxGridCellAttr_HasEditor 615 +#define wxGridCellAttr_GetTextColour 616 +#define wxGridCellAttr_GetBackgroundColour 617 +#define wxGridCellAttr_GetFont 618 +#define wxGridCellAttr_GetAlignment 619 +#define wxGridCellAttr_GetRenderer 620 +#define wxGridCellAttr_GetEditor 621 +#define wxGridCellAttr_IsReadOnly 622 +#define wxGridCellAttr_SetDefAttr 623 +#define wxDC_Blit 624 +#define wxDC_CalcBoundingBox 625 +#define wxDC_Clear 626 +#define wxDC_ComputeScaleAndOrigin 627 +#define wxDC_CrossHair 628 +#define wxDC_DestroyClippingRegion 629 +#define wxDC_DeviceToLogicalX 630 +#define wxDC_DeviceToLogicalXRel 631 +#define wxDC_DeviceToLogicalY 632 +#define wxDC_DeviceToLogicalYRel 633 +#define wxDC_DrawArc 634 +#define wxDC_DrawBitmap 635 +#define wxDC_DrawCheckMark 636 +#define wxDC_DrawCircle 637 +#define wxDC_DrawEllipse_2 639 +#define wxDC_DrawEllipse_1 640 +#define wxDC_DrawEllipticArc 641 +#define wxDC_DrawIcon 642 +#define wxDC_DrawLabel 643 +#define wxDC_DrawLine 644 +#define wxDC_DrawLines 645 +#define wxDC_DrawPolygon 647 +#define wxDC_DrawPoint 649 +#define wxDC_DrawRectangle_2 651 +#define wxDC_DrawRectangle_1 652 +#define wxDC_DrawRotatedText 653 +#define wxDC_DrawRoundedRectangle_3 655 +#define wxDC_DrawRoundedRectangle_2 656 +#define wxDC_DrawText 657 +#define wxDC_EndDoc 658 +#define wxDC_EndPage 659 +#define wxDC_FloodFill 660 +#define wxDC_GetBackground 661 +#define wxDC_GetBackgroundMode 662 +#define wxDC_GetBrush 663 +#define wxDC_GetCharHeight 664 +#define wxDC_GetCharWidth 665 +#define wxDC_GetClippingBox 666 +#define wxDC_GetFont 668 +#define wxDC_GetLayoutDirection 669 +#define wxDC_GetLogicalFunction 670 +#define wxDC_GetMapMode 671 +#define wxDC_GetMultiLineTextExtent_4 672 +#define wxDC_GetMultiLineTextExtent_1 673 +#define wxDC_GetPartialTextExtents 674 +#define wxDC_GetPen 675 +#define wxDC_GetPixel 676 +#define wxDC_GetPPI 677 +#define wxDC_GetSize 679 +#define wxDC_GetSizeMM 681 +#define wxDC_GetTextBackground 682 +#define wxDC_GetTextExtent_4 683 +#define wxDC_GetTextExtent_1 684 +#define wxDC_GetTextForeground 686 +#define wxDC_GetUserScale 687 +#define wxDC_GradientFillConcentric_3 688 +#define wxDC_GradientFillConcentric_4 689 +#define wxDC_GradientFillLinear 690 +#define wxDC_LogicalToDeviceX 691 +#define wxDC_LogicalToDeviceXRel 692 +#define wxDC_LogicalToDeviceY 693 +#define wxDC_LogicalToDeviceYRel 694 +#define wxDC_MaxX 695 +#define wxDC_MaxY 696 +#define wxDC_MinX 697 +#define wxDC_MinY 698 +#define wxDC_IsOk 699 +#define wxDC_ResetBoundingBox 700 +#define wxDC_SetAxisOrientation 701 +#define wxDC_SetBackground 702 +#define wxDC_SetBackgroundMode 703 +#define wxDC_SetBrush 704 +#define wxDC_SetClippingRegion_2 706 +#define wxDC_SetClippingRegion_1_1 707 +#define wxDC_SetClippingRegion_1_0 708 +#define wxDC_SetDeviceOrigin 709 +#define wxDC_SetFont 710 +#define wxDC_SetLayoutDirection 711 +#define wxDC_SetLogicalFunction 712 +#define wxDC_SetMapMode 713 +#define wxDC_SetPalette 714 +#define wxDC_SetPen 715 +#define wxDC_SetTextBackground 716 +#define wxDC_SetTextForeground 717 +#define wxDC_SetUserScale 718 +#define wxDC_StartDoc 719 +#define wxDC_StartPage 720 +#define wxMirrorDC_new 721 +#define wxMirrorDC_destroy 722 +#define wxScreenDC_new 723 +#define wxScreenDC_destruct 724 +#define wxPostScriptDC_new_0 725 +#define wxPostScriptDC_new_1 726 +#define wxPostScriptDC_destruct 727 +#define wxPostScriptDC_SetResolution 728 +#define wxPostScriptDC_GetResolution 729 +#define wxWindowDC_new_0 730 +#define wxWindowDC_new_1 731 +#define wxWindowDC_destruct 732 +#define wxClientDC_new_0 733 +#define wxClientDC_new_1 734 +#define wxClientDC_destroy 735 +#define wxPaintDC_new_0 736 +#define wxPaintDC_new_1 737 +#define wxPaintDC_destroy 738 +#define wxMemoryDC_new_1_0 740 +#define wxMemoryDC_new_1_1 741 +#define wxMemoryDC_new_0 742 +#define wxMemoryDC_destruct 744 +#define wxMemoryDC_SelectObject 745 +#define wxMemoryDC_SelectObjectAsSource 746 +#define wxBufferedDC_new_0 747 +#define wxBufferedDC_new_2 748 +#define wxBufferedDC_new_3 749 +#define wxBufferedDC_destruct 750 +#define wxBufferedDC_Init_2 751 +#define wxBufferedDC_Init_3 752 +#define wxBufferedPaintDC_new_3 753 +#define wxBufferedPaintDC_new_2 754 +#define wxBufferedPaintDC_destruct 755 +#define wxGraphicsObject_destruct 756 +#define wxGraphicsObject_GetRenderer 757 +#define wxGraphicsObject_IsNull 758 +#define wxGraphicsContext_destruct 759 +#define wxGraphicsContext_Create_1_1 760 +#define wxGraphicsContext_Create_1_0 761 +#define wxGraphicsContext_Create_0 762 +#define wxGraphicsContext_CreatePen 763 +#define wxGraphicsContext_CreateBrush 764 +#define wxGraphicsContext_CreateRadialGradientBrush 765 +#define wxGraphicsContext_CreateLinearGradientBrush 766 +#define wxGraphicsContext_CreateFont 767 +#define wxGraphicsContext_CreateMatrix 768 +#define wxGraphicsContext_CreatePath 769 +#define wxGraphicsContext_Clip_1 770 +#define wxGraphicsContext_Clip_4 771 +#define wxGraphicsContext_ResetClip 772 +#define wxGraphicsContext_DrawBitmap 773 +#define wxGraphicsContext_DrawEllipse 774 +#define wxGraphicsContext_DrawIcon 775 +#define wxGraphicsContext_DrawLines 776 +#define wxGraphicsContext_DrawPath 777 +#define wxGraphicsContext_DrawRectangle 778 +#define wxGraphicsContext_DrawRoundedRectangle 779 +#define wxGraphicsContext_DrawText_3 780 +#define wxGraphicsContext_DrawText_4_0 781 +#define wxGraphicsContext_DrawText_4_1 782 +#define wxGraphicsContext_DrawText_5 783 +#define wxGraphicsContext_FillPath 784 +#define wxGraphicsContext_StrokePath 785 +#define wxGraphicsContext_GetPartialTextExtents 786 +#define wxGraphicsContext_GetTextExtent 787 +#define wxGraphicsContext_Rotate 788 +#define wxGraphicsContext_Scale 789 +#define wxGraphicsContext_Translate 790 +#define wxGraphicsContext_GetTransform 791 +#define wxGraphicsContext_SetTransform 792 +#define wxGraphicsContext_ConcatTransform 793 +#define wxGraphicsContext_SetBrush_1_1 794 +#define wxGraphicsContext_SetBrush_1_0 795 +#define wxGraphicsContext_SetFont_1 796 +#define wxGraphicsContext_SetFont_2 797 +#define wxGraphicsContext_SetPen_1_0 798 +#define wxGraphicsContext_SetPen_1_1 799 +#define wxGraphicsContext_StrokeLine 800 +#define wxGraphicsContext_StrokeLines 801 +#define wxGraphicsMatrix_Concat 803 +#define wxGraphicsMatrix_Get 805 +#define wxGraphicsMatrix_Invert 806 +#define wxGraphicsMatrix_IsEqual 807 +#define wxGraphicsMatrix_IsIdentity 809 +#define wxGraphicsMatrix_Rotate 810 +#define wxGraphicsMatrix_Scale 811 +#define wxGraphicsMatrix_Translate 812 +#define wxGraphicsMatrix_Set 813 +#define wxGraphicsMatrix_TransformPoint 814 +#define wxGraphicsMatrix_TransformDistance 815 +#define wxGraphicsPath_MoveToPoint_2 816 +#define wxGraphicsPath_MoveToPoint_1 817 +#define wxGraphicsPath_AddArc_6 818 +#define wxGraphicsPath_AddArc_5 819 +#define wxGraphicsPath_AddArcToPoint 820 +#define wxGraphicsPath_AddCircle 821 +#define wxGraphicsPath_AddCurveToPoint_6 822 +#define wxGraphicsPath_AddCurveToPoint_3 823 +#define wxGraphicsPath_AddEllipse 824 +#define wxGraphicsPath_AddLineToPoint_2 825 +#define wxGraphicsPath_AddLineToPoint_1 826 +#define wxGraphicsPath_AddPath 827 +#define wxGraphicsPath_AddQuadCurveToPoint 828 +#define wxGraphicsPath_AddRectangle 829 +#define wxGraphicsPath_AddRoundedRectangle 830 +#define wxGraphicsPath_CloseSubpath 831 +#define wxGraphicsPath_Contains_3 832 +#define wxGraphicsPath_Contains_2 833 +#define wxGraphicsPath_GetBox 835 +#define wxGraphicsPath_GetCurrentPoint 837 +#define wxGraphicsPath_Transform 838 +#define wxGraphicsRenderer_GetDefaultRenderer 839 +#define wxGraphicsRenderer_CreateContext_1_1 840 +#define wxGraphicsRenderer_CreateContext_1_0 841 +#define wxGraphicsRenderer_CreatePen 842 +#define wxGraphicsRenderer_CreateBrush 843 +#define wxGraphicsRenderer_CreateLinearGradientBrush 844 +#define wxGraphicsRenderer_CreateRadialGradientBrush 845 +#define wxGraphicsRenderer_CreateFont 846 +#define wxGraphicsRenderer_CreateMatrix 847 +#define wxGraphicsRenderer_CreatePath 848 +#define wxMenuBar_new_1 850 +#define wxMenuBar_new_0 852 +#define wxMenuBar_destruct 854 +#define wxMenuBar_Append 855 +#define wxMenuBar_Check 856 +#define wxMenuBar_Enable_2 857 +#define wxMenuBar_Enable_1 858 +#define wxMenuBar_EnableTop 859 +#define wxMenuBar_FindMenu 860 +#define wxMenuBar_FindMenuItem 861 +#define wxMenuBar_FindItem 862 +#define wxMenuBar_GetHelpString 863 +#define wxMenuBar_GetLabel_1 864 +#define wxMenuBar_GetLabel_0 865 +#define wxMenuBar_GetLabelTop 866 +#define wxMenuBar_GetMenu 867 +#define wxMenuBar_GetMenuCount 868 +#define wxMenuBar_Insert 869 +#define wxMenuBar_IsChecked 870 +#define wxMenuBar_IsEnabled_1 871 +#define wxMenuBar_IsEnabled_0 872 +#define wxMenuBar_Remove 873 +#define wxMenuBar_Replace 874 +#define wxMenuBar_SetHelpString 875 +#define wxMenuBar_SetLabel_2 876 +#define wxMenuBar_SetLabel_1 877 +#define wxMenuBar_SetLabelTop 878 +#define wxControl_GetLabel 879 +#define wxControl_SetLabel 880 +#define wxControlWithItems_Append_1 881 +#define wxControlWithItems_Append_2 882 +#define wxControlWithItems_appendStrings_1 883 +#define wxControlWithItems_Clear 884 +#define wxControlWithItems_Delete 885 +#define wxControlWithItems_FindString 886 +#define wxControlWithItems_getClientData 887 +#define wxControlWithItems_setClientData 888 +#define wxControlWithItems_GetCount 889 +#define wxControlWithItems_GetSelection 890 +#define wxControlWithItems_GetString 891 +#define wxControlWithItems_GetStringSelection 892 +#define wxControlWithItems_Insert_2 893 +#define wxControlWithItems_Insert_3 894 +#define wxControlWithItems_IsEmpty 895 +#define wxControlWithItems_Select 896 +#define wxControlWithItems_SetSelection 897 +#define wxControlWithItems_SetString 898 +#define wxControlWithItems_SetStringSelection 899 +#define wxMenu_new_2 902 +#define wxMenu_new_1 903 +#define wxMenu_destruct 905 +#define wxMenu_Append_3 906 +#define wxMenu_Append_1 907 +#define wxMenu_Append_4_0 908 +#define wxMenu_Append_4_1 909 +#define wxMenu_AppendCheckItem 910 +#define wxMenu_AppendRadioItem 911 +#define wxMenu_AppendSeparator 912 +#define wxMenu_Break 913 +#define wxMenu_Check 914 +#define wxMenu_Delete_1_0 915 +#define wxMenu_Delete_1_1 916 +#define wxMenu_Destroy_1_0 917 +#define wxMenu_Destroy_1_1 918 +#define wxMenu_Enable 919 +#define wxMenu_FindItem_1 920 +#define wxMenu_FindItem_2 921 +#define wxMenu_FindItemByPosition 922 +#define wxMenu_GetHelpString 923 +#define wxMenu_GetLabel 924 +#define wxMenu_GetMenuItemCount 925 +#define wxMenu_GetMenuItems 926 +#define wxMenu_GetTitle 928 +#define wxMenu_Insert_2 929 +#define wxMenu_Insert_3 930 +#define wxMenu_Insert_5_1 931 +#define wxMenu_Insert_5_0 932 +#define wxMenu_InsertCheckItem 933 +#define wxMenu_InsertRadioItem 934 +#define wxMenu_InsertSeparator 935 +#define wxMenu_IsChecked 936 +#define wxMenu_IsEnabled 937 +#define wxMenu_Prepend_1 938 +#define wxMenu_Prepend_2 939 +#define wxMenu_Prepend_4_1 940 +#define wxMenu_Prepend_4_0 941 +#define wxMenu_PrependCheckItem 942 +#define wxMenu_PrependRadioItem 943 +#define wxMenu_PrependSeparator 944 +#define wxMenu_Remove_1_0 945 +#define wxMenu_Remove_1_1 946 +#define wxMenu_SetHelpString 947 +#define wxMenu_SetLabel 948 +#define wxMenu_SetTitle 949 +#define wxMenuItem_new 950 +#define wxMenuItem_destruct 952 +#define wxMenuItem_Check 953 +#define wxMenuItem_Enable 954 +#define wxMenuItem_GetBitmap 955 +#define wxMenuItem_GetHelp 956 +#define wxMenuItem_GetId 957 +#define wxMenuItem_GetKind 958 +#define wxMenuItem_GetLabel 959 +#define wxMenuItem_GetLabelFromText 960 +#define wxMenuItem_GetMenu 961 +#define wxMenuItem_GetText 962 +#define wxMenuItem_GetSubMenu 963 +#define wxMenuItem_IsCheckable 964 +#define wxMenuItem_IsChecked 965 +#define wxMenuItem_IsEnabled 966 +#define wxMenuItem_IsSeparator 967 +#define wxMenuItem_IsSubMenu 968 +#define wxMenuItem_SetBitmap 969 +#define wxMenuItem_SetHelp 970 +#define wxMenuItem_SetMenu 971 +#define wxMenuItem_SetSubMenu 972 +#define wxMenuItem_SetText 973 +#define wxToolBar_AddControl 974 +#define wxToolBar_AddSeparator 975 +#define wxToolBar_AddTool_5 976 +#define wxToolBar_AddTool_4_0 977 +#define wxToolBar_AddTool_1 978 +#define wxToolBar_AddTool_4_1 979 +#define wxToolBar_AddTool_3 980 +#define wxToolBar_AddTool_6 981 +#define wxToolBar_AddCheckTool 982 +#define wxToolBar_AddRadioTool 983 +#define wxToolBar_DeleteTool 984 +#define wxToolBar_DeleteToolByPos 985 +#define wxToolBar_EnableTool 986 +#define wxToolBar_FindById 987 +#define wxToolBar_FindControl 988 +#define wxToolBar_FindToolForPosition 989 +#define wxToolBar_GetToolSize 990 +#define wxToolBar_GetToolBitmapSize 991 +#define wxToolBar_GetMargins 992 +#define wxToolBar_GetToolEnabled 993 +#define wxToolBar_GetToolLongHelp 994 +#define wxToolBar_GetToolPacking 995 +#define wxToolBar_GetToolPos 996 +#define wxToolBar_GetToolSeparation 997 +#define wxToolBar_GetToolShortHelp 998 +#define wxToolBar_GetToolState 999 +#define wxToolBar_InsertControl 1000 +#define wxToolBar_InsertSeparator 1001 +#define wxToolBar_InsertTool_5 1002 +#define wxToolBar_InsertTool_2 1003 +#define wxToolBar_InsertTool_4 1004 +#define wxToolBar_Realize 1005 +#define wxToolBar_RemoveTool 1006 +#define wxToolBar_SetMargins 1007 +#define wxToolBar_SetToolBitmapSize 1008 +#define wxToolBar_SetToolLongHelp 1009 +#define wxToolBar_SetToolPacking 1010 +#define wxToolBar_SetToolShortHelp 1011 +#define wxToolBar_SetToolSeparation 1012 +#define wxToolBar_ToggleTool 1013 +#define wxStatusBar_new_0 1015 +#define wxStatusBar_new_2 1016 +#define wxStatusBar_destruct 1018 +#define wxStatusBar_Create 1019 +#define wxStatusBar_GetFieldRect 1020 +#define wxStatusBar_GetFieldsCount 1021 +#define wxStatusBar_GetStatusText 1022 +#define wxStatusBar_PopStatusText 1023 +#define wxStatusBar_PushStatusText 1024 +#define wxStatusBar_SetFieldsCount 1025 +#define wxStatusBar_SetMinHeight 1026 +#define wxStatusBar_SetStatusText 1027 +#define wxStatusBar_SetStatusWidths 1028 +#define wxStatusBar_SetStatusStyles 1029 +#define wxBitmap_new_0 1030 +#define wxBitmap_new_3 1031 +#define wxBitmap_new_4 1032 +#define wxBitmap_new_2_0 1033 +#define wxBitmap_new_2_1 1034 +#define wxBitmap_destruct 1035 +#define wxBitmap_ConvertToImage 1036 +#define wxBitmap_CopyFromIcon 1037 +#define wxBitmap_Create 1038 +#define wxBitmap_GetDepth 1039 +#define wxBitmap_GetHeight 1040 +#define wxBitmap_GetPalette 1041 +#define wxBitmap_GetMask 1042 +#define wxBitmap_GetWidth 1043 +#define wxBitmap_GetSubBitmap 1044 +#define wxBitmap_LoadFile 1045 +#define wxBitmap_Ok 1046 +#define wxBitmap_SaveFile 1047 +#define wxBitmap_SetDepth 1048 +#define wxBitmap_SetHeight 1049 +#define wxBitmap_SetMask 1050 +#define wxBitmap_SetPalette 1051 +#define wxBitmap_SetWidth 1052 +#define wxIcon_new_0 1053 +#define wxIcon_new_2 1054 +#define wxIcon_new_1 1055 +#define wxIcon_CopyFromBitmap 1056 +#define wxIcon_destroy 1057 +#define wxIconBundle_new_0 1058 +#define wxIconBundle_new_2 1059 +#define wxIconBundle_new_1_0 1060 +#define wxIconBundle_new_1_1 1061 +#define wxIconBundle_destruct 1062 +#define wxIconBundle_AddIcon_2 1063 +#define wxIconBundle_AddIcon_1 1064 +#define wxIconBundle_GetIcon_1_1 1065 +#define wxIconBundle_GetIcon_1_0 1066 +#define wxCursor_new_0 1067 +#define wxCursor_new_1_0 1068 +#define wxCursor_new_1_1 1069 +#define wxCursor_new_4 1070 +#define wxCursor_destruct 1071 +#define wxCursor_Ok 1072 +#define wxMask_new_0 1073 +#define wxMask_new_2_1 1074 +#define wxMask_new_2_0 1075 +#define wxMask_new_1 1076 +#define wxMask_destruct 1077 +#define wxMask_Create_2_1 1078 +#define wxMask_Create_2_0 1079 +#define wxMask_Create_1 1080 +#define wxImage_new_0 1081 +#define wxImage_new_3_0 1082 +#define wxImage_new_4 1083 +#define wxImage_new_5 1084 +#define wxImage_new_2 1085 +#define wxImage_new_3_1 1086 +#define wxImage_Blur 1087 +#define wxImage_BlurHorizontal 1088 +#define wxImage_BlurVertical 1089 +#define wxImage_ConvertAlphaToMask 1090 +#define wxImage_ConvertToGreyscale 1091 +#define wxImage_ConvertToMono 1092 +#define wxImage_Copy 1093 +#define wxImage_Create_3 1094 +#define wxImage_Create_4 1095 +#define wxImage_Create_5 1096 +#define wxImage_Destroy 1097 +#define wxImage_FindFirstUnusedColour 1098 +#define wxImage_GetImageExtWildcard 1099 +#define wxImage_GetAlpha_2 1100 +#define wxImage_GetAlpha_0 1101 +#define wxImage_GetBlue 1102 +#define wxImage_GetData 1103 +#define wxImage_GetGreen 1104 +#define wxImage_GetImageCount 1105 +#define wxImage_GetHeight 1106 +#define wxImage_GetMaskBlue 1107 +#define wxImage_GetMaskGreen 1108 +#define wxImage_GetMaskRed 1109 +#define wxImage_GetOrFindMaskColour 1110 +#define wxImage_GetPalette 1111 +#define wxImage_GetRed 1112 +#define wxImage_GetSubImage 1113 +#define wxImage_GetWidth 1114 +#define wxImage_HasAlpha 1115 +#define wxImage_HasMask 1116 +#define wxImage_GetOption 1117 +#define wxImage_GetOptionInt 1118 +#define wxImage_HasOption 1119 +#define wxImage_InitAlpha 1120 +#define wxImage_InitStandardHandlers 1121 +#define wxImage_IsTransparent 1122 +#define wxImage_LoadFile_2 1123 +#define wxImage_LoadFile_3 1124 +#define wxImage_Ok 1125 +#define wxImage_RemoveHandler 1126 +#define wxImage_Mirror 1127 +#define wxImage_Replace 1128 +#define wxImage_Rescale 1129 +#define wxImage_Resize 1130 +#define wxImage_Rotate 1131 +#define wxImage_RotateHue 1132 +#define wxImage_Rotate90 1133 +#define wxImage_SaveFile_1 1134 +#define wxImage_SaveFile_2_0 1135 +#define wxImage_SaveFile_2_1 1136 +#define wxImage_Scale 1137 +#define wxImage_Size 1138 +#define wxImage_SetAlpha_3 1139 +#define wxImage_SetAlpha_2 1140 +#define wxImage_SetData_2 1141 +#define wxImage_SetData_4 1142 +#define wxImage_SetMask 1143 +#define wxImage_SetMaskColour 1144 +#define wxImage_SetMaskFromImage 1145 +#define wxImage_SetOption_2_1 1146 +#define wxImage_SetOption_2_0 1147 +#define wxImage_SetPalette 1148 +#define wxImage_SetRGB_5 1149 +#define wxImage_SetRGB_4 1150 +#define wxImage_destroy 1151 +#define wxBrush_new_0 1152 +#define wxBrush_new_2 1153 +#define wxBrush_new_1 1154 +#define wxBrush_destruct 1156 +#define wxBrush_GetColour 1157 +#define wxBrush_GetStipple 1158 +#define wxBrush_GetStyle 1159 +#define wxBrush_IsHatch 1160 +#define wxBrush_IsOk 1161 +#define wxBrush_SetColour_1 1162 +#define wxBrush_SetColour_3 1163 +#define wxBrush_SetStipple 1164 +#define wxBrush_SetStyle 1165 +#define wxPen_new_0 1166 +#define wxPen_new_2 1167 +#define wxPen_destruct 1168 +#define wxPen_GetCap 1169 +#define wxPen_GetColour 1170 +#define wxPen_GetJoin 1171 +#define wxPen_GetStyle 1172 +#define wxPen_GetWidth 1173 +#define wxPen_IsOk 1174 +#define wxPen_SetCap 1175 +#define wxPen_SetColour_1 1176 +#define wxPen_SetColour_3 1177 +#define wxPen_SetJoin 1178 +#define wxPen_SetStyle 1179 +#define wxPen_SetWidth 1180 +#define wxRegion_new_0 1181 +#define wxRegion_new_4 1182 +#define wxRegion_new_2 1183 +#define wxRegion_new_1_1 1184 +#define wxRegion_new_1_0 1186 +#define wxRegion_destruct 1188 +#define wxRegion_Clear 1189 +#define wxRegion_Contains_2 1190 +#define wxRegion_Contains_1_0 1191 +#define wxRegion_Contains_4 1192 +#define wxRegion_Contains_1_1 1193 +#define wxRegion_ConvertToBitmap 1194 +#define wxRegion_GetBox 1195 +#define wxRegion_Intersect_4 1196 +#define wxRegion_Intersect_1_1 1197 +#define wxRegion_Intersect_1_0 1198 +#define wxRegion_IsEmpty 1199 +#define wxRegion_Subtract_4 1200 +#define wxRegion_Subtract_1_1 1201 +#define wxRegion_Subtract_1_0 1202 +#define wxRegion_Offset_2 1203 +#define wxRegion_Offset_1 1204 +#define wxRegion_Union_4 1205 +#define wxRegion_Union_1_2 1206 +#define wxRegion_Union_1_1 1207 +#define wxRegion_Union_1_0 1208 +#define wxRegion_Union_3 1209 +#define wxRegion_Xor_4 1210 +#define wxRegion_Xor_1_1 1211 +#define wxRegion_Xor_1_0 1212 +#define wxAcceleratorTable_new_0 1213 +#define wxAcceleratorTable_new_2 1214 +#define wxAcceleratorTable_destruct 1215 +#define wxAcceleratorTable_Ok 1216 +#define wxAcceleratorEntry_new_1_0 1217 +#define wxAcceleratorEntry_new_1_1 1218 +#define wxAcceleratorEntry_GetCommand 1219 +#define wxAcceleratorEntry_GetFlags 1220 +#define wxAcceleratorEntry_GetKeyCode 1221 +#define wxAcceleratorEntry_Set 1222 +#define wxAcceleratorEntry_destroy 1223 +#define wxCaret_new_3 1228 +#define wxCaret_new_2 1229 +#define wxCaret_destruct 1231 +#define wxCaret_Create_3 1232 +#define wxCaret_Create_2 1233 +#define wxCaret_GetBlinkTime 1234 +#define wxCaret_GetPosition 1236 +#define wxCaret_GetSize 1238 +#define wxCaret_GetWindow 1239 +#define wxCaret_Hide 1240 +#define wxCaret_IsOk 1241 +#define wxCaret_IsVisible 1242 +#define wxCaret_Move_2 1243 +#define wxCaret_Move_1 1244 +#define wxCaret_SetBlinkTime 1245 +#define wxCaret_SetSize_2 1246 +#define wxCaret_SetSize_1 1247 +#define wxCaret_Show 1248 +#define wxSizer_Add_2_1 1249 +#define wxSizer_Add_2_0 1250 +#define wxSizer_Add_3 1251 +#define wxSizer_Add_2_3 1252 +#define wxSizer_Add_2_2 1253 +#define wxSizer_AddSpacer 1254 +#define wxSizer_AddStretchSpacer 1255 +#define wxSizer_CalcMin 1256 +#define wxSizer_Clear 1257 +#define wxSizer_Detach_1_2 1258 +#define wxSizer_Detach_1_1 1259 +#define wxSizer_Detach_1_0 1260 +#define wxSizer_Fit 1261 +#define wxSizer_FitInside 1262 +#define wxSizer_GetChildren 1263 +#define wxSizer_GetItem_2_1 1264 +#define wxSizer_GetItem_2_0 1265 +#define wxSizer_GetItem_1 1266 +#define wxSizer_GetSize 1267 +#define wxSizer_GetPosition 1268 +#define wxSizer_GetMinSize 1269 +#define wxSizer_Hide_2_0 1270 +#define wxSizer_Hide_2_1 1271 +#define wxSizer_Hide_1 1272 +#define wxSizer_Insert_3_1 1273 +#define wxSizer_Insert_3_0 1274 +#define wxSizer_Insert_4 1275 +#define wxSizer_Insert_3_3 1276 +#define wxSizer_Insert_3_2 1277 +#define wxSizer_Insert_2 1278 +#define wxSizer_InsertSpacer 1279 +#define wxSizer_InsertStretchSpacer 1280 +#define wxSizer_IsShown_1_2 1281 +#define wxSizer_IsShown_1_1 1282 +#define wxSizer_IsShown_1_0 1283 +#define wxSizer_Layout 1284 +#define wxSizer_Prepend_2_1 1285 +#define wxSizer_Prepend_2_0 1286 +#define wxSizer_Prepend_3 1287 +#define wxSizer_Prepend_2_3 1288 +#define wxSizer_Prepend_2_2 1289 +#define wxSizer_Prepend_1 1290 +#define wxSizer_PrependSpacer 1291 +#define wxSizer_PrependStretchSpacer 1292 +#define wxSizer_RecalcSizes 1293 +#define wxSizer_Remove_1_1 1294 +#define wxSizer_Remove_1_0 1295 +#define wxSizer_Replace_3_1 1296 +#define wxSizer_Replace_3_0 1297 +#define wxSizer_Replace_2 1298 +#define wxSizer_SetDimension 1299 +#define wxSizer_SetMinSize_2 1300 +#define wxSizer_SetMinSize_1 1301 +#define wxSizer_SetItemMinSize_3_2 1302 +#define wxSizer_SetItemMinSize_2_2 1303 +#define wxSizer_SetItemMinSize_3_1 1304 +#define wxSizer_SetItemMinSize_2_1 1305 +#define wxSizer_SetItemMinSize_3_0 1306 +#define wxSizer_SetItemMinSize_2_0 1307 +#define wxSizer_SetSizeHints 1308 +#define wxSizer_SetVirtualSizeHints 1309 +#define wxSizer_Show_2_2 1310 +#define wxSizer_Show_2_1 1311 +#define wxSizer_Show_2_0 1312 +#define wxSizer_Show_1 1313 +#define wxSizerFlags_new 1314 +#define wxSizerFlags_Align 1315 +#define wxSizerFlags_Border_2 1316 +#define wxSizerFlags_Border_1 1317 +#define wxSizerFlags_Center 1318 +#define wxSizerFlags_Centre 1319 +#define wxSizerFlags_Expand 1320 +#define wxSizerFlags_Left 1321 +#define wxSizerFlags_Proportion 1322 +#define wxSizerFlags_Right 1323 +#define wxSizerFlags_destroy 1324 +#define wxSizerItem_new_5_1 1325 +#define wxSizerItem_new_2_1 1326 +#define wxSizerItem_new_5_0 1327 +#define wxSizerItem_new_2_0 1328 +#define wxSizerItem_new_6 1329 +#define wxSizerItem_new_3 1330 +#define wxSizerItem_new_0 1331 +#define wxSizerItem_destruct 1332 +#define wxSizerItem_CalcMin 1333 +#define wxSizerItem_DeleteWindows 1334 +#define wxSizerItem_DetachSizer 1335 +#define wxSizerItem_GetBorder 1336 +#define wxSizerItem_GetFlag 1337 +#define wxSizerItem_GetMinSize 1338 +#define wxSizerItem_GetPosition 1339 +#define wxSizerItem_GetProportion 1340 +#define wxSizerItem_GetRatio 1341 +#define wxSizerItem_GetRect 1342 +#define wxSizerItem_GetSize 1343 +#define wxSizerItem_GetSizer 1344 +#define wxSizerItem_GetSpacer 1345 +#define wxSizerItem_GetUserData 1346 +#define wxSizerItem_GetWindow 1347 +#define wxSizerItem_IsSizer 1348 +#define wxSizerItem_IsShown 1349 +#define wxSizerItem_IsSpacer 1350 +#define wxSizerItem_IsWindow 1351 +#define wxSizerItem_SetBorder 1352 +#define wxSizerItem_SetDimension 1353 +#define wxSizerItem_SetFlag 1354 +#define wxSizerItem_SetInitSize 1355 +#define wxSizerItem_SetMinSize_1 1356 +#define wxSizerItem_SetMinSize_2 1357 +#define wxSizerItem_SetProportion 1358 +#define wxSizerItem_SetRatio_2 1359 +#define wxSizerItem_SetRatio_1_1 1360 +#define wxSizerItem_SetRatio_1_0 1361 +#define wxSizerItem_SetSizer 1362 +#define wxSizerItem_SetSpacer_1 1363 +#define wxSizerItem_SetSpacer_2 1364 +#define wxSizerItem_SetWindow 1365 +#define wxSizerItem_Show 1366 +#define wxBoxSizer_new 1367 +#define wxBoxSizer_GetOrientation 1368 +#define wxBoxSizer_destroy 1369 +#define wxStaticBoxSizer_new_2 1370 +#define wxStaticBoxSizer_new_3 1371 +#define wxStaticBoxSizer_GetStaticBox 1372 +#define wxStaticBoxSizer_destroy 1373 +#define wxGridSizer_new_4 1374 +#define wxGridSizer_new_2 1375 +#define wxGridSizer_GetCols 1376 +#define wxGridSizer_GetHGap 1377 +#define wxGridSizer_GetRows 1378 +#define wxGridSizer_GetVGap 1379 +#define wxGridSizer_SetCols 1380 +#define wxGridSizer_SetHGap 1381 +#define wxGridSizer_SetRows 1382 +#define wxGridSizer_SetVGap 1383 +#define wxGridSizer_destroy 1384 +#define wxFlexGridSizer_new_4 1385 +#define wxFlexGridSizer_new_2 1386 +#define wxFlexGridSizer_AddGrowableCol 1387 +#define wxFlexGridSizer_AddGrowableRow 1388 +#define wxFlexGridSizer_GetFlexibleDirection 1389 +#define wxFlexGridSizer_GetNonFlexibleGrowMode 1390 +#define wxFlexGridSizer_RemoveGrowableCol 1391 +#define wxFlexGridSizer_RemoveGrowableRow 1392 +#define wxFlexGridSizer_SetFlexibleDirection 1393 +#define wxFlexGridSizer_SetNonFlexibleGrowMode 1394 +#define wxFlexGridSizer_destroy 1395 +#define wxGridBagSizer_new 1396 +#define wxGridBagSizer_Add_3_2 1397 +#define wxGridBagSizer_Add_3_1 1398 +#define wxGridBagSizer_Add_4 1399 +#define wxGridBagSizer_Add_1_0 1400 +#define wxGridBagSizer_Add_2_1 1401 +#define wxGridBagSizer_Add_2_0 1402 +#define wxGridBagSizer_Add_3_0 1403 +#define wxGridBagSizer_Add_1_1 1404 +#define wxGridBagSizer_CalcMin 1405 +#define wxGridBagSizer_CheckForIntersection_2 1406 +#define wxGridBagSizer_CheckForIntersection_3 1407 +#define wxGridBagSizer_FindItem_1_1 1408 +#define wxGridBagSizer_FindItem_1_0 1409 +#define wxGridBagSizer_FindItemAtPoint 1410 +#define wxGridBagSizer_FindItemAtPosition 1411 +#define wxGridBagSizer_FindItemWithData 1412 +#define wxGridBagSizer_GetCellSize 1413 +#define wxGridBagSizer_GetEmptyCellSize 1414 +#define wxGridBagSizer_GetItemPosition_1_2 1415 +#define wxGridBagSizer_GetItemPosition_1_1 1416 +#define wxGridBagSizer_GetItemPosition_1_0 1417 +#define wxGridBagSizer_GetItemSpan_1_2 1418 +#define wxGridBagSizer_GetItemSpan_1_1 1419 +#define wxGridBagSizer_GetItemSpan_1_0 1420 +#define wxGridBagSizer_SetEmptyCellSize 1421 +#define wxGridBagSizer_SetItemPosition_2_2 1422 +#define wxGridBagSizer_SetItemPosition_2_1 1423 +#define wxGridBagSizer_SetItemPosition_2_0 1424 +#define wxGridBagSizer_SetItemSpan_2_2 1425 +#define wxGridBagSizer_SetItemSpan_2_1 1426 +#define wxGridBagSizer_SetItemSpan_2_0 1427 +#define wxGridBagSizer_destroy 1428 +#define wxStdDialogButtonSizer_new 1429 +#define wxStdDialogButtonSizer_AddButton 1430 +#define wxStdDialogButtonSizer_Realize 1431 +#define wxStdDialogButtonSizer_SetAffirmativeButton 1432 +#define wxStdDialogButtonSizer_SetCancelButton 1433 +#define wxStdDialogButtonSizer_SetNegativeButton 1434 +#define wxStdDialogButtonSizer_destroy 1435 +#define wxFont_new_0 1436 +#define wxFont_new_1 1437 +#define wxFont_new_5 1438 +#define wxFont_destruct 1440 +#define wxFont_IsFixedWidth 1441 +#define wxFont_GetDefaultEncoding 1442 +#define wxFont_GetFaceName 1443 +#define wxFont_GetFamily 1444 +#define wxFont_GetNativeFontInfoDesc 1445 +#define wxFont_GetNativeFontInfoUserDesc 1446 +#define wxFont_GetPointSize 1447 +#define wxFont_GetStyle 1448 +#define wxFont_GetUnderlined 1449 +#define wxFont_GetWeight 1450 +#define wxFont_Ok 1451 +#define wxFont_SetDefaultEncoding 1452 +#define wxFont_SetFaceName 1453 +#define wxFont_SetFamily 1454 +#define wxFont_SetPointSize 1455 +#define wxFont_SetStyle 1456 +#define wxFont_SetUnderlined 1457 +#define wxFont_SetWeight 1458 +#define wxToolTip_Enable 1459 +#define wxToolTip_SetDelay 1460 +#define wxToolTip_new 1461 +#define wxToolTip_SetTip 1462 +#define wxToolTip_GetTip 1463 +#define wxToolTip_GetWindow 1464 +#define wxToolTip_destroy 1465 +#define wxButton_new_3 1467 +#define wxButton_new_0 1468 +#define wxButton_destruct 1469 +#define wxButton_Create 1470 +#define wxButton_GetDefaultSize 1471 +#define wxButton_SetDefault 1472 +#define wxButton_SetLabel 1473 +#define wxBitmapButton_new_4 1475 +#define wxBitmapButton_new_0 1476 +#define wxBitmapButton_Create 1477 +#define wxBitmapButton_GetBitmapDisabled 1478 +#define wxBitmapButton_GetBitmapFocus 1480 +#define wxBitmapButton_GetBitmapLabel 1482 +#define wxBitmapButton_GetBitmapSelected 1484 +#define wxBitmapButton_SetBitmapDisabled 1486 +#define wxBitmapButton_SetBitmapFocus 1487 +#define wxBitmapButton_SetBitmapLabel 1488 +#define wxBitmapButton_SetBitmapSelected 1489 +#define wxBitmapButton_destroy 1490 +#define wxToggleButton_new_0 1491 +#define wxToggleButton_new_4 1492 +#define wxToggleButton_Create 1493 +#define wxToggleButton_GetValue 1494 +#define wxToggleButton_SetValue 1495 +#define wxToggleButton_destroy 1496 +#define wxCalendarCtrl_new_0 1497 +#define wxCalendarCtrl_new_3 1498 +#define wxCalendarCtrl_Create 1499 +#define wxCalendarCtrl_destruct 1500 +#define wxCalendarCtrl_SetDate 1501 +#define wxCalendarCtrl_GetDate 1502 +#define wxCalendarCtrl_EnableYearChange 1503 +#define wxCalendarCtrl_EnableMonthChange 1504 +#define wxCalendarCtrl_EnableHolidayDisplay 1505 +#define wxCalendarCtrl_SetHeaderColours 1506 +#define wxCalendarCtrl_GetHeaderColourFg 1507 +#define wxCalendarCtrl_GetHeaderColourBg 1508 +#define wxCalendarCtrl_SetHighlightColours 1509 +#define wxCalendarCtrl_GetHighlightColourFg 1510 +#define wxCalendarCtrl_GetHighlightColourBg 1511 +#define wxCalendarCtrl_SetHolidayColours 1512 +#define wxCalendarCtrl_GetHolidayColourFg 1513 +#define wxCalendarCtrl_GetHolidayColourBg 1514 +#define wxCalendarCtrl_GetAttr 1515 +#define wxCalendarCtrl_SetAttr 1516 +#define wxCalendarCtrl_SetHoliday 1517 +#define wxCalendarCtrl_ResetAttr 1518 +#define wxCalendarCtrl_HitTest 1519 +#define wxCalendarDateAttr_new_0 1520 +#define wxCalendarDateAttr_new_2_1 1521 +#define wxCalendarDateAttr_new_2_0 1522 +#define wxCalendarDateAttr_SetTextColour 1523 +#define wxCalendarDateAttr_SetBackgroundColour 1524 +#define wxCalendarDateAttr_SetBorderColour 1525 +#define wxCalendarDateAttr_SetFont 1526 +#define wxCalendarDateAttr_SetBorder 1527 +#define wxCalendarDateAttr_SetHoliday 1528 +#define wxCalendarDateAttr_HasTextColour 1529 +#define wxCalendarDateAttr_HasBackgroundColour 1530 +#define wxCalendarDateAttr_HasBorderColour 1531 +#define wxCalendarDateAttr_HasFont 1532 +#define wxCalendarDateAttr_HasBorder 1533 +#define wxCalendarDateAttr_IsHoliday 1534 +#define wxCalendarDateAttr_GetTextColour 1535 +#define wxCalendarDateAttr_GetBackgroundColour 1536 +#define wxCalendarDateAttr_GetBorderColour 1537 +#define wxCalendarDateAttr_GetFont 1538 +#define wxCalendarDateAttr_GetBorder 1539 +#define wxCalendarDateAttr_destroy 1540 +#define wxCheckBox_new_4 1542 +#define wxCheckBox_new_0 1543 +#define wxCheckBox_Create 1544 +#define wxCheckBox_GetValue 1545 +#define wxCheckBox_Get3StateValue 1546 +#define wxCheckBox_Is3rdStateAllowedForUser 1547 +#define wxCheckBox_Is3State 1548 +#define wxCheckBox_IsChecked 1549 +#define wxCheckBox_SetValue 1550 +#define wxCheckBox_Set3StateValue 1551 +#define wxCheckBox_destroy 1552 +#define wxCheckListBox_new_0 1553 +#define wxCheckListBox_new_3 1555 +#define wxCheckListBox_Check 1556 +#define wxCheckListBox_IsChecked 1557 +#define wxCheckListBox_destroy 1558 +#define wxChoice_new_3 1561 +#define wxChoice_new_0 1562 +#define wxChoice_destruct 1564 +#define wxChoice_Create 1566 +#define wxChoice_Delete 1567 +#define wxChoice_GetColumns 1568 +#define wxChoice_SetColumns 1569 +#define wxComboBox_new_0 1570 +#define wxComboBox_new_3 1572 +#define wxComboBox_destruct 1573 +#define wxComboBox_Create 1575 +#define wxComboBox_CanCopy 1576 +#define wxComboBox_CanCut 1577 +#define wxComboBox_CanPaste 1578 +#define wxComboBox_CanRedo 1579 +#define wxComboBox_CanUndo 1580 +#define wxComboBox_Copy 1581 +#define wxComboBox_Cut 1582 +#define wxComboBox_GetInsertionPoint 1583 +#define wxComboBox_GetLastPosition 1584 +#define wxComboBox_GetValue 1585 +#define wxComboBox_Paste 1586 +#define wxComboBox_Redo 1587 +#define wxComboBox_Replace 1588 +#define wxComboBox_Remove 1589 +#define wxComboBox_SetInsertionPoint 1590 +#define wxComboBox_SetInsertionPointEnd 1591 +#define wxComboBox_SetSelection_1 1592 +#define wxComboBox_SetSelection_2 1593 +#define wxComboBox_SetValue 1594 +#define wxComboBox_Undo 1595 +#define wxGauge_new_0 1596 +#define wxGauge_new_4 1597 +#define wxGauge_Create 1598 +#define wxGauge_GetBezelFace 1599 +#define wxGauge_GetRange 1600 +#define wxGauge_GetShadowWidth 1601 +#define wxGauge_GetValue 1602 +#define wxGauge_IsVertical 1603 +#define wxGauge_SetBezelFace 1604 +#define wxGauge_SetRange 1605 +#define wxGauge_SetShadowWidth 1606 +#define wxGauge_SetValue 1607 +#define wxGauge_Pulse 1608 +#define wxGauge_destroy 1609 +#define wxGenericDirCtrl_new_0 1610 +#define wxGenericDirCtrl_new_2 1611 +#define wxGenericDirCtrl_destruct 1612 +#define wxGenericDirCtrl_Create 1613 +#define wxGenericDirCtrl_Init 1614 +#define wxGenericDirCtrl_CollapseTree 1615 +#define wxGenericDirCtrl_ExpandPath 1616 +#define wxGenericDirCtrl_GetDefaultPath 1617 +#define wxGenericDirCtrl_GetPath 1618 +#define wxGenericDirCtrl_GetFilePath 1619 +#define wxGenericDirCtrl_GetFilter 1620 +#define wxGenericDirCtrl_GetFilterIndex 1621 +#define wxGenericDirCtrl_GetRootId 1622 +#define wxGenericDirCtrl_GetTreeCtrl 1623 +#define wxGenericDirCtrl_ReCreateTree 1624 +#define wxGenericDirCtrl_SetDefaultPath 1625 +#define wxGenericDirCtrl_SetFilter 1626 +#define wxGenericDirCtrl_SetFilterIndex 1627 +#define wxGenericDirCtrl_SetPath 1628 +#define wxStaticBox_new_4 1630 +#define wxStaticBox_new_0 1631 +#define wxStaticBox_Create 1632 +#define wxStaticBox_destroy 1633 +#define wxStaticLine_new_2 1635 +#define wxStaticLine_new_0 1636 +#define wxStaticLine_Create 1637 +#define wxStaticLine_IsVertical 1638 +#define wxStaticLine_GetDefaultSize 1639 +#define wxStaticLine_destroy 1640 +#define wxListBox_new_3 1643 +#define wxListBox_new_0 1644 +#define wxListBox_destruct 1646 +#define wxListBox_Create 1648 +#define wxListBox_Deselect 1649 +#define wxListBox_GetSelections 1650 +#define wxListBox_InsertItems 1651 +#define wxListBox_IsSelected 1652 +#define wxListBox_Set 1654 +#define wxListBox_HitTest 1655 +#define wxListBox_SetFirstItem_1_0 1656 +#define wxListBox_SetFirstItem_1_1 1657 +#define wxListCtrl_new_0 1658 +#define wxListCtrl_new_2 1659 +#define wxListCtrl_Arrange 1660 +#define wxListCtrl_AssignImageList 1661 +#define wxListCtrl_ClearAll 1662 +#define wxListCtrl_Create 1663 +#define wxListCtrl_DeleteAllItems 1664 +#define wxListCtrl_DeleteColumn 1665 +#define wxListCtrl_DeleteItem 1666 +#define wxListCtrl_EditLabel 1667 +#define wxListCtrl_EnsureVisible 1668 +#define wxListCtrl_FindItem_3_0 1669 +#define wxListCtrl_FindItem_3_1 1670 +#define wxListCtrl_GetColumn 1671 +#define wxListCtrl_GetColumnCount 1672 +#define wxListCtrl_GetColumnWidth 1673 +#define wxListCtrl_GetCountPerPage 1674 +#define wxListCtrl_GetEditControl 1675 +#define wxListCtrl_GetImageList 1676 +#define wxListCtrl_GetItem 1677 +#define wxListCtrl_GetItemBackgroundColour 1678 +#define wxListCtrl_GetItemCount 1679 +#define wxListCtrl_GetItemData 1680 +#define wxListCtrl_GetItemFont 1681 +#define wxListCtrl_GetItemPosition 1682 +#define wxListCtrl_GetItemRect 1683 +#define wxListCtrl_GetItemSpacing 1684 +#define wxListCtrl_GetItemState 1685 +#define wxListCtrl_GetItemText 1686 +#define wxListCtrl_GetItemTextColour 1687 +#define wxListCtrl_GetNextItem 1688 +#define wxListCtrl_GetSelectedItemCount 1689 +#define wxListCtrl_GetTextColour 1690 +#define wxListCtrl_GetTopItem 1691 +#define wxListCtrl_GetViewRect 1692 +#define wxListCtrl_HitTest 1693 +#define wxListCtrl_InsertColumn_2 1694 +#define wxListCtrl_InsertColumn_3 1695 +#define wxListCtrl_InsertItem_1 1696 +#define wxListCtrl_InsertItem_2_1 1697 +#define wxListCtrl_InsertItem_2_0 1698 +#define wxListCtrl_InsertItem_3 1699 +#define wxListCtrl_RefreshItem 1700 +#define wxListCtrl_RefreshItems 1701 +#define wxListCtrl_ScrollList 1702 +#define wxListCtrl_SetBackgroundColour 1703 +#define wxListCtrl_SetColumn 1704 +#define wxListCtrl_SetColumnWidth 1705 +#define wxListCtrl_SetImageList 1706 +#define wxListCtrl_SetItem_1 1707 +#define wxListCtrl_SetItem_4 1708 +#define wxListCtrl_SetItemBackgroundColour 1709 +#define wxListCtrl_SetItemCount 1710 +#define wxListCtrl_SetItemData 1711 +#define wxListCtrl_SetItemFont 1712 +#define wxListCtrl_SetItemImage 1713 +#define wxListCtrl_SetItemColumnImage 1714 +#define wxListCtrl_SetItemPosition 1715 +#define wxListCtrl_SetItemState 1716 +#define wxListCtrl_SetItemText 1717 +#define wxListCtrl_SetItemTextColour 1718 +#define wxListCtrl_SetSingleStyle 1719 +#define wxListCtrl_SetTextColour 1720 +#define wxListCtrl_SetWindowStyleFlag 1721 +#define wxListCtrl_SortItems 1722 +#define wxListCtrl_destroy 1723 +#define wxListView_ClearColumnImage 1724 +#define wxListView_Focus 1725 +#define wxListView_GetFirstSelected 1726 +#define wxListView_GetFocusedItem 1727 +#define wxListView_GetNextSelected 1728 +#define wxListView_IsSelected 1729 +#define wxListView_Select 1730 +#define wxListView_SetColumnImage 1731 +#define wxListItem_new_0 1732 +#define wxListItem_new_1 1733 +#define wxListItem_destruct 1734 +#define wxListItem_Clear 1735 +#define wxListItem_GetAlign 1736 +#define wxListItem_GetBackgroundColour 1737 +#define wxListItem_GetColumn 1738 +#define wxListItem_GetFont 1739 +#define wxListItem_GetId 1740 +#define wxListItem_GetImage 1741 +#define wxListItem_GetMask 1742 +#define wxListItem_GetState 1743 +#define wxListItem_GetText 1744 +#define wxListItem_GetTextColour 1745 +#define wxListItem_GetWidth 1746 +#define wxListItem_SetAlign 1747 +#define wxListItem_SetBackgroundColour 1748 +#define wxListItem_SetColumn 1749 +#define wxListItem_SetFont 1750 +#define wxListItem_SetId 1751 +#define wxListItem_SetImage 1752 +#define wxListItem_SetMask 1753 +#define wxListItem_SetState 1754 +#define wxListItem_SetStateMask 1755 +#define wxListItem_SetText 1756 +#define wxListItem_SetTextColour 1757 +#define wxListItem_SetWidth 1758 +#define wxListItemAttr_new_0 1759 +#define wxListItemAttr_new_3 1760 +#define wxListItemAttr_GetBackgroundColour 1761 +#define wxListItemAttr_GetFont 1762 +#define wxListItemAttr_GetTextColour 1763 +#define wxListItemAttr_HasBackgroundColour 1764 +#define wxListItemAttr_HasFont 1765 +#define wxListItemAttr_HasTextColour 1766 +#define wxListItemAttr_SetBackgroundColour 1767 +#define wxListItemAttr_SetFont 1768 +#define wxListItemAttr_SetTextColour 1769 +#define wxListItemAttr_destroy 1770 +#define wxImageList_new_0 1771 +#define wxImageList_new_3 1772 +#define wxImageList_Add_1 1773 +#define wxImageList_Add_2_0 1774 +#define wxImageList_Add_2_1 1775 +#define wxImageList_Create 1776 +#define wxImageList_Draw 1778 +#define wxImageList_GetBitmap 1779 +#define wxImageList_GetIcon 1780 +#define wxImageList_GetImageCount 1781 +#define wxImageList_GetSize 1782 +#define wxImageList_Remove 1783 +#define wxImageList_RemoveAll 1784 +#define wxImageList_Replace_2 1785 +#define wxImageList_Replace_3 1786 +#define wxImageList_destroy 1787 +#define wxTextAttr_new_0 1788 +#define wxTextAttr_new_2 1789 +#define wxTextAttr_GetAlignment 1790 +#define wxTextAttr_GetBackgroundColour 1791 +#define wxTextAttr_GetFont 1792 +#define wxTextAttr_GetLeftIndent 1793 +#define wxTextAttr_GetLeftSubIndent 1794 +#define wxTextAttr_GetRightIndent 1795 +#define wxTextAttr_GetTabs 1796 +#define wxTextAttr_GetTextColour 1797 +#define wxTextAttr_HasBackgroundColour 1798 +#define wxTextAttr_HasFont 1799 +#define wxTextAttr_HasTextColour 1800 +#define wxTextAttr_GetFlags 1801 +#define wxTextAttr_IsDefault 1802 +#define wxTextAttr_SetAlignment 1803 +#define wxTextAttr_SetBackgroundColour 1804 +#define wxTextAttr_SetFlags 1805 +#define wxTextAttr_SetFont 1806 +#define wxTextAttr_SetLeftIndent 1807 +#define wxTextAttr_SetRightIndent 1808 +#define wxTextAttr_SetTabs 1809 +#define wxTextAttr_SetTextColour 1810 +#define wxTextAttr_destroy 1811 +#define wxTextCtrl_new_3 1813 +#define wxTextCtrl_new_0 1814 +#define wxTextCtrl_destruct 1816 +#define wxTextCtrl_AppendText 1817 +#define wxTextCtrl_CanCopy 1818 +#define wxTextCtrl_CanCut 1819 +#define wxTextCtrl_CanPaste 1820 +#define wxTextCtrl_CanRedo 1821 +#define wxTextCtrl_CanUndo 1822 +#define wxTextCtrl_Clear 1823 +#define wxTextCtrl_Copy 1824 +#define wxTextCtrl_Create 1825 +#define wxTextCtrl_Cut 1826 +#define wxTextCtrl_DiscardEdits 1827 +#define wxTextCtrl_EmulateKeyPress 1828 +#define wxTextCtrl_GetDefaultStyle 1829 +#define wxTextCtrl_GetInsertionPoint 1830 +#define wxTextCtrl_GetLastPosition 1831 +#define wxTextCtrl_GetLineLength 1832 +#define wxTextCtrl_GetLineText 1833 +#define wxTextCtrl_GetNumberOfLines 1834 +#define wxTextCtrl_GetRange 1835 +#define wxTextCtrl_GetSelection 1836 +#define wxTextCtrl_GetStringSelection 1837 +#define wxTextCtrl_GetStyle 1838 +#define wxTextCtrl_GetValue 1839 +#define wxTextCtrl_IsEditable 1840 +#define wxTextCtrl_IsModified 1841 +#define wxTextCtrl_IsMultiLine 1842 +#define wxTextCtrl_IsSingleLine 1843 +#define wxTextCtrl_LoadFile 1844 +#define wxTextCtrl_MarkDirty 1845 +#define wxTextCtrl_Paste 1846 +#define wxTextCtrl_PositionToXY 1847 +#define wxTextCtrl_Redo 1848 +#define wxTextCtrl_Remove 1849 +#define wxTextCtrl_Replace 1850 +#define wxTextCtrl_SaveFile 1851 +#define wxTextCtrl_SetDefaultStyle 1852 +#define wxTextCtrl_SetEditable 1853 +#define wxTextCtrl_SetInsertionPoint 1854 +#define wxTextCtrl_SetInsertionPointEnd 1855 +#define wxTextCtrl_SetMaxLength 1857 +#define wxTextCtrl_SetSelection 1858 +#define wxTextCtrl_SetStyle 1859 +#define wxTextCtrl_SetValue 1860 +#define wxTextCtrl_ShowPosition 1861 +#define wxTextCtrl_Undo 1862 +#define wxTextCtrl_WriteText 1863 +#define wxTextCtrl_XYToPosition 1864 +#define wxNotebook_new_0 1867 +#define wxNotebook_new_3 1868 +#define wxNotebook_destruct 1869 +#define wxNotebook_AddPage 1870 +#define wxNotebook_AdvanceSelection 1871 +#define wxNotebook_AssignImageList 1872 +#define wxNotebook_Create 1873 +#define wxNotebook_DeleteAllPages 1874 +#define wxNotebook_DeletePage 1875 +#define wxNotebook_RemovePage 1876 +#define wxNotebook_GetCurrentPage 1877 +#define wxNotebook_GetImageList 1878 +#define wxNotebook_GetPage 1880 +#define wxNotebook_GetPageCount 1881 +#define wxNotebook_GetPageImage 1882 +#define wxNotebook_GetPageText 1883 +#define wxNotebook_GetRowCount 1884 +#define wxNotebook_GetSelection 1885 +#define wxNotebook_GetThemeBackgroundColour 1886 +#define wxNotebook_HitTest 1888 +#define wxNotebook_InsertPage 1890 +#define wxNotebook_SetImageList 1891 +#define wxNotebook_SetPadding 1892 +#define wxNotebook_SetPageSize 1893 +#define wxNotebook_SetPageImage 1894 +#define wxNotebook_SetPageText 1895 +#define wxNotebook_SetSelection 1896 +#define wxNotebook_ChangeSelection 1897 +#define wxChoicebook_new_0 1898 +#define wxChoicebook_new_3 1899 +#define wxChoicebook_AddPage 1900 +#define wxChoicebook_AdvanceSelection 1901 +#define wxChoicebook_AssignImageList 1902 +#define wxChoicebook_Create 1903 +#define wxChoicebook_DeleteAllPages 1904 +#define wxChoicebook_DeletePage 1905 +#define wxChoicebook_RemovePage 1906 +#define wxChoicebook_GetCurrentPage 1907 +#define wxChoicebook_GetImageList 1908 +#define wxChoicebook_GetPage 1910 +#define wxChoicebook_GetPageCount 1911 +#define wxChoicebook_GetPageImage 1912 +#define wxChoicebook_GetPageText 1913 +#define wxChoicebook_GetSelection 1914 +#define wxChoicebook_HitTest 1915 +#define wxChoicebook_InsertPage 1916 +#define wxChoicebook_SetImageList 1917 +#define wxChoicebook_SetPageSize 1918 +#define wxChoicebook_SetPageImage 1919 +#define wxChoicebook_SetPageText 1920 +#define wxChoicebook_SetSelection 1921 +#define wxChoicebook_ChangeSelection 1922 +#define wxChoicebook_destroy 1923 +#define wxToolbook_new_0 1924 +#define wxToolbook_new_3 1925 +#define wxToolbook_AddPage 1926 +#define wxToolbook_AdvanceSelection 1927 +#define wxToolbook_AssignImageList 1928 +#define wxToolbook_Create 1929 +#define wxToolbook_DeleteAllPages 1930 +#define wxToolbook_DeletePage 1931 +#define wxToolbook_RemovePage 1932 +#define wxToolbook_GetCurrentPage 1933 +#define wxToolbook_GetImageList 1934 +#define wxToolbook_GetPage 1936 +#define wxToolbook_GetPageCount 1937 +#define wxToolbook_GetPageImage 1938 +#define wxToolbook_GetPageText 1939 +#define wxToolbook_GetSelection 1940 +#define wxToolbook_HitTest 1942 +#define wxToolbook_InsertPage 1943 +#define wxToolbook_SetImageList 1944 +#define wxToolbook_SetPageSize 1945 +#define wxToolbook_SetPageImage 1946 +#define wxToolbook_SetPageText 1947 +#define wxToolbook_SetSelection 1948 +#define wxToolbook_ChangeSelection 1949 +#define wxToolbook_destroy 1950 +#define wxListbook_new_0 1951 +#define wxListbook_new_3 1952 +#define wxListbook_AddPage 1953 +#define wxListbook_AdvanceSelection 1954 +#define wxListbook_AssignImageList 1955 +#define wxListbook_Create 1956 +#define wxListbook_DeleteAllPages 1957 +#define wxListbook_DeletePage 1958 +#define wxListbook_RemovePage 1959 +#define wxListbook_GetCurrentPage 1960 +#define wxListbook_GetImageList 1961 +#define wxListbook_GetPage 1963 +#define wxListbook_GetPageCount 1964 +#define wxListbook_GetPageImage 1965 +#define wxListbook_GetPageText 1966 +#define wxListbook_GetSelection 1967 +#define wxListbook_HitTest 1969 +#define wxListbook_InsertPage 1970 +#define wxListbook_SetImageList 1971 +#define wxListbook_SetPageSize 1972 +#define wxListbook_SetPageImage 1973 +#define wxListbook_SetPageText 1974 +#define wxListbook_SetSelection 1975 +#define wxListbook_ChangeSelection 1976 +#define wxListbook_destroy 1977 +#define wxTreebook_new_0 1978 +#define wxTreebook_new_3 1979 +#define wxTreebook_AddPage 1980 +#define wxTreebook_AdvanceSelection 1981 +#define wxTreebook_AssignImageList 1982 +#define wxTreebook_Create 1983 +#define wxTreebook_DeleteAllPages 1984 +#define wxTreebook_DeletePage 1985 +#define wxTreebook_RemovePage 1986 +#define wxTreebook_GetCurrentPage 1987 +#define wxTreebook_GetImageList 1988 +#define wxTreebook_GetPage 1990 +#define wxTreebook_GetPageCount 1991 +#define wxTreebook_GetPageImage 1992 +#define wxTreebook_GetPageText 1993 +#define wxTreebook_GetSelection 1994 +#define wxTreebook_ExpandNode 1995 +#define wxTreebook_IsNodeExpanded 1996 +#define wxTreebook_HitTest 1998 +#define wxTreebook_InsertPage 1999 +#define wxTreebook_InsertSubPage 2000 +#define wxTreebook_SetImageList 2001 +#define wxTreebook_SetPageSize 2002 +#define wxTreebook_SetPageImage 2003 +#define wxTreebook_SetPageText 2004 +#define wxTreebook_SetSelection 2005 +#define wxTreebook_ChangeSelection 2006 +#define wxTreebook_destroy 2007 +#define wxTreeCtrl_new_2 2010 +#define wxTreeCtrl_new_0 2011 +#define wxTreeCtrl_destruct 2013 +#define wxTreeCtrl_AddRoot 2014 +#define wxTreeCtrl_AppendItem 2015 +#define wxTreeCtrl_AssignImageList 2016 +#define wxTreeCtrl_AssignStateImageList 2017 +#define wxTreeCtrl_Collapse 2018 +#define wxTreeCtrl_CollapseAndReset 2019 +#define wxTreeCtrl_Create 2020 +#define wxTreeCtrl_Delete 2021 +#define wxTreeCtrl_DeleteAllItems 2022 +#define wxTreeCtrl_DeleteChildren 2023 +#define wxTreeCtrl_EditLabel 2024 +#define wxTreeCtrl_EnsureVisible 2025 +#define wxTreeCtrl_Expand 2026 +#define wxTreeCtrl_GetBoundingRect 2027 +#define wxTreeCtrl_GetChildrenCount 2029 +#define wxTreeCtrl_GetCount 2030 +#define wxTreeCtrl_GetEditControl 2031 +#define wxTreeCtrl_GetFirstChild 2032 +#define wxTreeCtrl_GetNextChild 2033 +#define wxTreeCtrl_GetFirstVisibleItem 2034 +#define wxTreeCtrl_GetImageList 2035 +#define wxTreeCtrl_GetIndent 2036 +#define wxTreeCtrl_GetItemBackgroundColour 2037 +#define wxTreeCtrl_GetItemData 2038 +#define wxTreeCtrl_GetItemFont 2039 +#define wxTreeCtrl_GetItemImage_1 2040 +#define wxTreeCtrl_GetItemImage_2 2041 +#define wxTreeCtrl_GetItemText 2042 +#define wxTreeCtrl_GetItemTextColour 2043 +#define wxTreeCtrl_GetLastChild 2044 +#define wxTreeCtrl_GetNextSibling 2045 +#define wxTreeCtrl_GetNextVisible 2046 +#define wxTreeCtrl_GetItemParent 2047 +#define wxTreeCtrl_GetPrevSibling 2048 +#define wxTreeCtrl_GetPrevVisible 2049 +#define wxTreeCtrl_GetRootItem 2050 +#define wxTreeCtrl_GetSelection 2051 +#define wxTreeCtrl_GetSelections 2052 +#define wxTreeCtrl_GetStateImageList 2053 +#define wxTreeCtrl_HitTest 2054 +#define wxTreeCtrl_InsertItem 2056 +#define wxTreeCtrl_IsBold 2057 +#define wxTreeCtrl_IsExpanded 2058 +#define wxTreeCtrl_IsSelected 2059 +#define wxTreeCtrl_IsVisible 2060 +#define wxTreeCtrl_ItemHasChildren 2061 +#define wxTreeCtrl_IsTreeItemIdOk 2062 +#define wxTreeCtrl_PrependItem 2063 +#define wxTreeCtrl_ScrollTo 2064 +#define wxTreeCtrl_SelectItem_1 2065 +#define wxTreeCtrl_SelectItem_2 2066 +#define wxTreeCtrl_SetIndent 2067 +#define wxTreeCtrl_SetImageList 2068 +#define wxTreeCtrl_SetItemBackgroundColour 2069 +#define wxTreeCtrl_SetItemBold 2070 +#define wxTreeCtrl_SetItemData 2071 +#define wxTreeCtrl_SetItemDropHighlight 2072 +#define wxTreeCtrl_SetItemFont 2073 +#define wxTreeCtrl_SetItemHasChildren 2074 +#define wxTreeCtrl_SetItemImage_2 2075 +#define wxTreeCtrl_SetItemImage_3 2076 +#define wxTreeCtrl_SetItemText 2077 +#define wxTreeCtrl_SetItemTextColour 2078 +#define wxTreeCtrl_SetStateImageList 2079 +#define wxTreeCtrl_SetWindowStyle 2080 +#define wxTreeCtrl_SortChildren 2081 +#define wxTreeCtrl_Toggle 2082 +#define wxTreeCtrl_ToggleItemSelection 2083 +#define wxTreeCtrl_Unselect 2084 +#define wxTreeCtrl_UnselectAll 2085 +#define wxTreeCtrl_UnselectItem 2086 +#define wxScrollBar_new_0 2087 +#define wxScrollBar_new_3 2088 +#define wxScrollBar_destruct 2089 +#define wxScrollBar_Create 2090 +#define wxScrollBar_GetRange 2091 +#define wxScrollBar_GetPageSize 2092 +#define wxScrollBar_GetThumbPosition 2093 +#define wxScrollBar_GetThumbSize 2094 +#define wxScrollBar_SetThumbPosition 2095 +#define wxScrollBar_SetScrollbar 2096 +#define wxSpinButton_new_2 2098 +#define wxSpinButton_new_0 2099 +#define wxSpinButton_Create 2100 +#define wxSpinButton_GetMax 2101 +#define wxSpinButton_GetMin 2102 +#define wxSpinButton_GetValue 2103 +#define wxSpinButton_SetRange 2104 +#define wxSpinButton_SetValue 2105 +#define wxSpinButton_destroy 2106 +#define wxSpinCtrl_new_0 2107 +#define wxSpinCtrl_new_2 2108 +#define wxSpinCtrl_Create 2110 +#define wxSpinCtrl_SetValue_1_1 2113 +#define wxSpinCtrl_SetValue_1_0 2114 +#define wxSpinCtrl_GetValue 2116 +#define wxSpinCtrl_SetRange 2118 +#define wxSpinCtrl_SetSelection 2119 +#define wxSpinCtrl_GetMin 2121 +#define wxSpinCtrl_GetMax 2123 +#define wxSpinCtrl_destroy 2124 +#define wxStaticText_new_0 2125 +#define wxStaticText_new_4 2126 +#define wxStaticText_Create 2127 +#define wxStaticText_GetLabel 2128 +#define wxStaticText_SetLabel 2129 +#define wxStaticText_Wrap 2130 +#define wxStaticText_destroy 2131 +#define wxStaticBitmap_new_0 2132 +#define wxStaticBitmap_new_4 2133 +#define wxStaticBitmap_Create 2134 +#define wxStaticBitmap_GetBitmap 2135 +#define wxStaticBitmap_SetBitmap 2136 +#define wxStaticBitmap_destroy 2137 +#define wxRadioBox_new 2138 +#define wxRadioBox_destruct 2140 +#define wxRadioBox_Create 2141 +#define wxRadioBox_Enable_2 2142 +#define wxRadioBox_Enable_1 2143 +#define wxRadioBox_GetSelection 2144 +#define wxRadioBox_GetString 2145 +#define wxRadioBox_SetSelection 2146 +#define wxRadioBox_Show_2 2147 +#define wxRadioBox_Show_1 2148 +#define wxRadioBox_GetColumnCount 2149 +#define wxRadioBox_GetItemHelpText 2150 +#define wxRadioBox_GetItemToolTip 2151 +#define wxRadioBox_GetItemFromPoint 2153 +#define wxRadioBox_GetRowCount 2154 +#define wxRadioBox_IsItemEnabled 2155 +#define wxRadioBox_IsItemShown 2156 +#define wxRadioBox_SetItemHelpText 2157 +#define wxRadioBox_SetItemToolTip 2158 +#define wxRadioButton_new_0 2159 +#define wxRadioButton_new_4 2160 +#define wxRadioButton_Create 2161 +#define wxRadioButton_GetValue 2162 +#define wxRadioButton_SetValue 2163 +#define wxRadioButton_destroy 2164 +#define wxSlider_new_6 2166 +#define wxSlider_new_0 2167 +#define wxSlider_Create 2168 +#define wxSlider_GetLineSize 2169 +#define wxSlider_GetMax 2170 +#define wxSlider_GetMin 2171 +#define wxSlider_GetPageSize 2172 +#define wxSlider_GetThumbLength 2173 +#define wxSlider_GetValue 2174 +#define wxSlider_SetLineSize 2175 +#define wxSlider_SetPageSize 2176 +#define wxSlider_SetRange 2177 +#define wxSlider_SetThumbLength 2178 +#define wxSlider_SetValue 2179 +#define wxSlider_destroy 2180 +#define wxDialog_new_4 2182 +#define wxDialog_new_0 2183 +#define wxDialog_destruct 2185 +#define wxDialog_Create 2186 +#define wxDialog_CreateButtonSizer 2187 +#define wxDialog_CreateStdDialogButtonSizer 2188 +#define wxDialog_EndModal 2189 +#define wxDialog_GetAffirmativeId 2190 +#define wxDialog_GetReturnCode 2191 +#define wxDialog_IsModal 2192 +#define wxDialog_SetAffirmativeId 2193 +#define wxDialog_SetReturnCode 2194 +#define wxDialog_Show 2195 +#define wxDialog_ShowModal 2196 +#define wxColourDialog_new_0 2197 +#define wxColourDialog_new_2 2198 +#define wxColourDialog_destruct 2199 +#define wxColourDialog_Create 2200 +#define wxColourDialog_GetColourData 2201 +#define wxColourData_new_0 2202 +#define wxColourData_new_1 2203 +#define wxColourData_destruct 2204 +#define wxColourData_GetChooseFull 2205 +#define wxColourData_GetColour 2206 +#define wxColourData_GetCustomColour 2208 +#define wxColourData_SetChooseFull 2209 +#define wxColourData_SetColour 2210 +#define wxColourData_SetCustomColour 2211 +#define wxPalette_new_0 2212 +#define wxPalette_new_4 2213 +#define wxPalette_destruct 2215 +#define wxPalette_Create 2216 +#define wxPalette_GetColoursCount 2217 +#define wxPalette_GetPixel 2218 +#define wxPalette_GetRGB 2219 +#define wxPalette_IsOk 2220 +#define wxDirDialog_new 2224 +#define wxDirDialog_destruct 2225 +#define wxDirDialog_GetPath 2226 +#define wxDirDialog_GetMessage 2227 +#define wxDirDialog_SetMessage 2228 +#define wxDirDialog_SetPath 2229 +#define wxFileDialog_new 2233 +#define wxFileDialog_destruct 2234 +#define wxFileDialog_GetDirectory 2235 +#define wxFileDialog_GetFilename 2236 +#define wxFileDialog_GetFilenames 2237 +#define wxFileDialog_GetFilterIndex 2238 +#define wxFileDialog_GetMessage 2239 +#define wxFileDialog_GetPath 2240 +#define wxFileDialog_GetPaths 2241 +#define wxFileDialog_GetWildcard 2242 +#define wxFileDialog_SetDirectory 2243 +#define wxFileDialog_SetFilename 2244 +#define wxFileDialog_SetFilterIndex 2245 +#define wxFileDialog_SetMessage 2246 +#define wxFileDialog_SetPath 2247 +#define wxFileDialog_SetWildcard 2248 +#define wxPickerBase_SetInternalMargin 2249 +#define wxPickerBase_GetInternalMargin 2250 +#define wxPickerBase_SetTextCtrlProportion 2251 +#define wxPickerBase_SetPickerCtrlProportion 2252 +#define wxPickerBase_GetTextCtrlProportion 2253 +#define wxPickerBase_GetPickerCtrlProportion 2254 +#define wxPickerBase_HasTextCtrl 2255 +#define wxPickerBase_GetTextCtrl 2256 +#define wxPickerBase_IsTextCtrlGrowable 2257 +#define wxPickerBase_SetPickerCtrlGrowable 2258 +#define wxPickerBase_SetTextCtrlGrowable 2259 +#define wxPickerBase_IsPickerCtrlGrowable 2260 +#define wxFilePickerCtrl_new_0 2261 +#define wxFilePickerCtrl_new_3 2262 +#define wxFilePickerCtrl_Create 2263 +#define wxFilePickerCtrl_GetPath 2264 +#define wxFilePickerCtrl_SetPath 2265 +#define wxFilePickerCtrl_destroy 2266 +#define wxDirPickerCtrl_new_0 2267 +#define wxDirPickerCtrl_new_3 2268 +#define wxDirPickerCtrl_Create 2269 +#define wxDirPickerCtrl_GetPath 2270 +#define wxDirPickerCtrl_SetPath 2271 +#define wxDirPickerCtrl_destroy 2272 +#define wxColourPickerCtrl_new_0 2273 +#define wxColourPickerCtrl_new_3 2274 +#define wxColourPickerCtrl_Create 2275 +#define wxColourPickerCtrl_GetColour 2276 +#define wxColourPickerCtrl_SetColour_1_1 2277 +#define wxColourPickerCtrl_SetColour_1_0 2278 +#define wxColourPickerCtrl_destroy 2279 +#define wxDatePickerCtrl_new_0 2280 +#define wxDatePickerCtrl_new_3 2281 +#define wxDatePickerCtrl_GetRange 2282 +#define wxDatePickerCtrl_GetValue 2283 +#define wxDatePickerCtrl_SetRange 2284 +#define wxDatePickerCtrl_SetValue 2285 +#define wxDatePickerCtrl_destroy 2286 +#define wxFontPickerCtrl_new_0 2287 +#define wxFontPickerCtrl_new_3 2288 +#define wxFontPickerCtrl_Create 2289 +#define wxFontPickerCtrl_GetSelectedFont 2290 +#define wxFontPickerCtrl_SetSelectedFont 2291 +#define wxFontPickerCtrl_GetMaxPointSize 2292 +#define wxFontPickerCtrl_SetMaxPointSize 2293 +#define wxFontPickerCtrl_destroy 2294 +#define wxFindReplaceDialog_new_0 2297 +#define wxFindReplaceDialog_new_4 2298 +#define wxFindReplaceDialog_destruct 2299 +#define wxFindReplaceDialog_Create 2300 +#define wxFindReplaceDialog_GetData 2301 +#define wxFindReplaceData_new_0 2302 +#define wxFindReplaceData_new_1 2303 +#define wxFindReplaceData_GetFindString 2304 +#define wxFindReplaceData_GetReplaceString 2305 +#define wxFindReplaceData_GetFlags 2306 +#define wxFindReplaceData_SetFlags 2307 +#define wxFindReplaceData_SetFindString 2308 +#define wxFindReplaceData_SetReplaceString 2309 +#define wxFindReplaceData_destroy 2310 +#define wxMultiChoiceDialog_new_0 2311 +#define wxMultiChoiceDialog_new_5 2313 +#define wxMultiChoiceDialog_GetSelections 2314 +#define wxMultiChoiceDialog_SetSelections 2315 +#define wxMultiChoiceDialog_destroy 2316 +#define wxSingleChoiceDialog_new_0 2317 +#define wxSingleChoiceDialog_new_5 2319 +#define wxSingleChoiceDialog_GetSelection 2320 +#define wxSingleChoiceDialog_GetStringSelection 2321 +#define wxSingleChoiceDialog_SetSelection 2322 +#define wxSingleChoiceDialog_destroy 2323 +#define wxTextEntryDialog_new 2324 +#define wxTextEntryDialog_GetValue 2325 +#define wxTextEntryDialog_SetValue 2326 +#define wxTextEntryDialog_destroy 2327 +#define wxPasswordEntryDialog_new 2328 +#define wxPasswordEntryDialog_destroy 2329 +#define wxFontData_new_0 2330 +#define wxFontData_new_1 2331 +#define wxFontData_destruct 2332 +#define wxFontData_EnableEffects 2333 +#define wxFontData_GetAllowSymbols 2334 +#define wxFontData_GetColour 2335 +#define wxFontData_GetChosenFont 2336 +#define wxFontData_GetEnableEffects 2337 +#define wxFontData_GetInitialFont 2338 +#define wxFontData_GetShowHelp 2339 +#define wxFontData_SetAllowSymbols 2340 +#define wxFontData_SetChosenFont 2341 +#define wxFontData_SetColour 2342 +#define wxFontData_SetInitialFont 2343 +#define wxFontData_SetRange 2344 +#define wxFontData_SetShowHelp 2345 +#define wxFontDialog_new_0 2349 +#define wxFontDialog_new_2 2351 +#define wxFontDialog_Create 2353 +#define wxFontDialog_GetFontData 2354 +#define wxFontDialog_destroy 2356 +#define wxProgressDialog_new 2357 +#define wxProgressDialog_destruct 2358 +#define wxProgressDialog_Resume 2359 +#define wxProgressDialog_Update_2 2360 +#define wxProgressDialog_Update_0 2361 +#define wxMessageDialog_new 2362 +#define wxMessageDialog_destruct 2363 +#define wxPageSetupDialog_new 2364 +#define wxPageSetupDialog_destruct 2365 +#define wxPageSetupDialog_GetPageSetupData 2366 +#define wxPageSetupDialog_ShowModal 2367 +#define wxPageSetupDialogData_new_0 2368 +#define wxPageSetupDialogData_new_1_0 2369 +#define wxPageSetupDialogData_new_1_1 2370 +#define wxPageSetupDialogData_destruct 2371 +#define wxPageSetupDialogData_EnableHelp 2372 +#define wxPageSetupDialogData_EnableMargins 2373 +#define wxPageSetupDialogData_EnableOrientation 2374 +#define wxPageSetupDialogData_EnablePaper 2375 +#define wxPageSetupDialogData_EnablePrinter 2376 +#define wxPageSetupDialogData_GetDefaultMinMargins 2377 +#define wxPageSetupDialogData_GetEnableMargins 2378 +#define wxPageSetupDialogData_GetEnableOrientation 2379 +#define wxPageSetupDialogData_GetEnablePaper 2380 +#define wxPageSetupDialogData_GetEnablePrinter 2381 +#define wxPageSetupDialogData_GetEnableHelp 2382 +#define wxPageSetupDialogData_GetDefaultInfo 2383 +#define wxPageSetupDialogData_GetMarginTopLeft 2384 +#define wxPageSetupDialogData_GetMarginBottomRight 2385 +#define wxPageSetupDialogData_GetMinMarginTopLeft 2386 +#define wxPageSetupDialogData_GetMinMarginBottomRight 2387 +#define wxPageSetupDialogData_GetPaperId 2388 +#define wxPageSetupDialogData_GetPaperSize 2389 +#define wxPageSetupDialogData_GetPrintData 2391 +#define wxPageSetupDialogData_IsOk 2392 +#define wxPageSetupDialogData_SetDefaultInfo 2393 +#define wxPageSetupDialogData_SetDefaultMinMargins 2394 +#define wxPageSetupDialogData_SetMarginTopLeft 2395 +#define wxPageSetupDialogData_SetMarginBottomRight 2396 +#define wxPageSetupDialogData_SetMinMarginTopLeft 2397 +#define wxPageSetupDialogData_SetMinMarginBottomRight 2398 +#define wxPageSetupDialogData_SetPaperId 2399 +#define wxPageSetupDialogData_SetPaperSize_1_1 2400 +#define wxPageSetupDialogData_SetPaperSize_1_0 2401 +#define wxPageSetupDialogData_SetPrintData 2402 +#define wxPrintDialog_new_2_0 2403 +#define wxPrintDialog_new_2_1 2404 +#define wxPrintDialog_destruct 2405 +#define wxPrintDialog_GetPrintDialogData 2406 +#define wxPrintDialog_GetPrintDC 2407 +#define wxPrintDialogData_new_0 2408 +#define wxPrintDialogData_new_1_1 2409 +#define wxPrintDialogData_new_1_0 2410 +#define wxPrintDialogData_destruct 2411 +#define wxPrintDialogData_EnableHelp 2412 +#define wxPrintDialogData_EnablePageNumbers 2413 +#define wxPrintDialogData_EnablePrintToFile 2414 +#define wxPrintDialogData_EnableSelection 2415 +#define wxPrintDialogData_GetAllPages 2416 +#define wxPrintDialogData_GetCollate 2417 +#define wxPrintDialogData_GetFromPage 2418 +#define wxPrintDialogData_GetMaxPage 2419 +#define wxPrintDialogData_GetMinPage 2420 +#define wxPrintDialogData_GetNoCopies 2421 +#define wxPrintDialogData_GetPrintData 2422 +#define wxPrintDialogData_GetPrintToFile 2423 +#define wxPrintDialogData_GetSelection 2424 +#define wxPrintDialogData_GetToPage 2425 +#define wxPrintDialogData_IsOk 2426 +#define wxPrintDialogData_SetCollate 2427 +#define wxPrintDialogData_SetFromPage 2428 +#define wxPrintDialogData_SetMaxPage 2429 +#define wxPrintDialogData_SetMinPage 2430 +#define wxPrintDialogData_SetNoCopies 2431 +#define wxPrintDialogData_SetPrintData 2432 +#define wxPrintDialogData_SetPrintToFile 2433 +#define wxPrintDialogData_SetSelection 2434 +#define wxPrintDialogData_SetToPage 2435 +#define wxPrintData_new_0 2436 +#define wxPrintData_new_1 2437 +#define wxPrintData_destruct 2438 +#define wxPrintData_GetCollate 2439 +#define wxPrintData_GetBin 2440 +#define wxPrintData_GetColour 2441 +#define wxPrintData_GetDuplex 2442 +#define wxPrintData_GetNoCopies 2443 +#define wxPrintData_GetOrientation 2444 +#define wxPrintData_GetPaperId 2445 +#define wxPrintData_GetPrinterName 2446 +#define wxPrintData_GetQuality 2447 +#define wxPrintData_IsOk 2448 +#define wxPrintData_SetBin 2449 +#define wxPrintData_SetCollate 2450 +#define wxPrintData_SetColour 2451 +#define wxPrintData_SetDuplex 2452 +#define wxPrintData_SetNoCopies 2453 +#define wxPrintData_SetOrientation 2454 +#define wxPrintData_SetPaperId 2455 +#define wxPrintData_SetPrinterName 2456 +#define wxPrintData_SetQuality 2457 +#define wxPrintPreview_new_2 2460 +#define wxPrintPreview_new_3 2461 +#define wxPrintPreview_destruct 2463 +#define wxPrintPreview_GetCanvas 2464 +#define wxPrintPreview_GetCurrentPage 2465 +#define wxPrintPreview_GetFrame 2466 +#define wxPrintPreview_GetMaxPage 2467 +#define wxPrintPreview_GetMinPage 2468 +#define wxPrintPreview_GetPrintout 2469 +#define wxPrintPreview_GetPrintoutForPrinting 2470 +#define wxPrintPreview_IsOk 2471 +#define wxPrintPreview_PaintPage 2472 +#define wxPrintPreview_Print 2473 +#define wxPrintPreview_RenderPage 2474 +#define wxPrintPreview_SetCanvas 2475 +#define wxPrintPreview_SetCurrentPage 2476 +#define wxPrintPreview_SetFrame 2477 +#define wxPrintPreview_SetPrintout 2478 +#define wxPrintPreview_SetZoom 2479 +#define wxPreviewFrame_new 2480 +#define wxPreviewFrame_destruct 2481 +#define wxPreviewFrame_CreateControlBar 2482 +#define wxPreviewFrame_CreateCanvas 2483 +#define wxPreviewFrame_Initialize 2484 +#define wxPreviewFrame_OnCloseWindow 2485 +#define wxPreviewControlBar_new 2486 +#define wxPreviewControlBar_destruct 2487 +#define wxPreviewControlBar_CreateButtons 2488 +#define wxPreviewControlBar_GetPrintPreview 2489 +#define wxPreviewControlBar_GetZoomControl 2490 +#define wxPreviewControlBar_SetZoomControl 2491 +#define wxPrinter_new 2493 +#define wxPrinter_CreateAbortWindow 2494 +#define wxPrinter_GetAbort 2495 +#define wxPrinter_GetLastError 2496 +#define wxPrinter_GetPrintDialogData 2497 +#define wxPrinter_Print 2498 +#define wxPrinter_PrintDialog 2499 +#define wxPrinter_ReportError 2500 +#define wxPrinter_Setup 2501 +#define wxPrinter_destroy 2502 +#define wxXmlResource_new_1 2503 +#define wxXmlResource_new_2 2504 +#define wxXmlResource_destruct 2505 +#define wxXmlResource_AttachUnknownControl 2506 +#define wxXmlResource_ClearHandlers 2507 +#define wxXmlResource_CompareVersion 2508 +#define wxXmlResource_Get 2509 +#define wxXmlResource_GetFlags 2510 +#define wxXmlResource_GetVersion 2511 +#define wxXmlResource_GetXRCID 2512 +#define wxXmlResource_InitAllHandlers 2513 +#define wxXmlResource_Load 2514 +#define wxXmlResource_LoadBitmap 2515 +#define wxXmlResource_LoadDialog_2 2516 +#define wxXmlResource_LoadDialog_3 2517 +#define wxXmlResource_LoadFrame_2 2518 +#define wxXmlResource_LoadFrame_3 2519 +#define wxXmlResource_LoadIcon 2520 +#define wxXmlResource_LoadMenu 2521 +#define wxXmlResource_LoadMenuBar_2 2522 +#define wxXmlResource_LoadMenuBar_1 2523 +#define wxXmlResource_LoadPanel_2 2524 +#define wxXmlResource_LoadPanel_3 2525 +#define wxXmlResource_LoadToolBar 2526 +#define wxXmlResource_Set 2527 +#define wxXmlResource_SetFlags 2528 +#define wxXmlResource_Unload 2529 +#define wxXmlResource_xrcctrl 2530 +#define wxHtmlEasyPrinting_new 2531 +#define wxHtmlEasyPrinting_destruct 2532 +#define wxHtmlEasyPrinting_GetPrintData 2533 +#define wxHtmlEasyPrinting_GetPageSetupData 2534 +#define wxHtmlEasyPrinting_PreviewFile 2535 +#define wxHtmlEasyPrinting_PreviewText 2536 +#define wxHtmlEasyPrinting_PrintFile 2537 +#define wxHtmlEasyPrinting_PrintText 2538 +#define wxHtmlEasyPrinting_PageSetup 2539 +#define wxHtmlEasyPrinting_SetFonts 2540 +#define wxHtmlEasyPrinting_SetHeader 2541 +#define wxHtmlEasyPrinting_SetFooter 2542 +#define wxGLCanvas_new_2 2544 +#define wxGLCanvas_new_3_1 2545 +#define wxGLCanvas_new_3_0 2546 +#define wxGLCanvas_GetContext 2547 +#define wxGLCanvas_SetCurrent 2549 +#define wxGLCanvas_SwapBuffers 2550 +#define wxGLCanvas_destroy 2551 +#define wxAuiManager_new 2552 +#define wxAuiManager_destruct 2553 +#define wxAuiManager_AddPane_2_1 2554 +#define wxAuiManager_AddPane_3 2555 +#define wxAuiManager_AddPane_2_0 2556 +#define wxAuiManager_DetachPane 2557 +#define wxAuiManager_GetAllPanes 2558 +#define wxAuiManager_GetArtProvider 2559 +#define wxAuiManager_GetDockSizeConstraint 2560 +#define wxAuiManager_GetFlags 2561 +#define wxAuiManager_GetManagedWindow 2562 +#define wxAuiManager_GetManager 2563 +#define wxAuiManager_GetPane_1_1 2564 +#define wxAuiManager_GetPane_1_0 2565 +#define wxAuiManager_HideHint 2566 +#define wxAuiManager_InsertPane 2567 +#define wxAuiManager_LoadPaneInfo 2568 +#define wxAuiManager_LoadPerspective 2569 +#define wxAuiManager_SavePaneInfo 2570 +#define wxAuiManager_SavePerspective 2571 +#define wxAuiManager_SetArtProvider 2572 +#define wxAuiManager_SetDockSizeConstraint 2573 +#define wxAuiManager_SetFlags 2574 +#define wxAuiManager_SetManagedWindow 2575 +#define wxAuiManager_ShowHint 2576 +#define wxAuiManager_UnInit 2577 +#define wxAuiManager_Update 2578 +#define wxAuiPaneInfo_new_0 2579 +#define wxAuiPaneInfo_new_1 2580 +#define wxAuiPaneInfo_destruct 2581 +#define wxAuiPaneInfo_BestSize_1 2582 +#define wxAuiPaneInfo_BestSize_2 2583 +#define wxAuiPaneInfo_Bottom 2584 +#define wxAuiPaneInfo_BottomDockable 2585 +#define wxAuiPaneInfo_Caption 2586 +#define wxAuiPaneInfo_CaptionVisible 2587 +#define wxAuiPaneInfo_Centre 2588 +#define wxAuiPaneInfo_CentrePane 2589 +#define wxAuiPaneInfo_CloseButton 2590 +#define wxAuiPaneInfo_DefaultPane 2591 +#define wxAuiPaneInfo_DestroyOnClose 2592 +#define wxAuiPaneInfo_Direction 2593 +#define wxAuiPaneInfo_Dock 2594 +#define wxAuiPaneInfo_Dockable 2595 +#define wxAuiPaneInfo_Fixed 2596 +#define wxAuiPaneInfo_Float 2597 +#define wxAuiPaneInfo_Floatable 2598 +#define wxAuiPaneInfo_FloatingPosition_1 2599 +#define wxAuiPaneInfo_FloatingPosition_2 2600 +#define wxAuiPaneInfo_FloatingSize_1 2601 +#define wxAuiPaneInfo_FloatingSize_2 2602 +#define wxAuiPaneInfo_Gripper 2603 +#define wxAuiPaneInfo_GripperTop 2604 +#define wxAuiPaneInfo_HasBorder 2605 +#define wxAuiPaneInfo_HasCaption 2606 +#define wxAuiPaneInfo_HasCloseButton 2607 +#define wxAuiPaneInfo_HasFlag 2608 +#define wxAuiPaneInfo_HasGripper 2609 +#define wxAuiPaneInfo_HasGripperTop 2610 +#define wxAuiPaneInfo_HasMaximizeButton 2611 +#define wxAuiPaneInfo_HasMinimizeButton 2612 +#define wxAuiPaneInfo_HasPinButton 2613 +#define wxAuiPaneInfo_Hide 2614 +#define wxAuiPaneInfo_IsBottomDockable 2615 +#define wxAuiPaneInfo_IsDocked 2616 +#define wxAuiPaneInfo_IsFixed 2617 +#define wxAuiPaneInfo_IsFloatable 2618 +#define wxAuiPaneInfo_IsFloating 2619 +#define wxAuiPaneInfo_IsLeftDockable 2620 +#define wxAuiPaneInfo_IsMovable 2621 +#define wxAuiPaneInfo_IsOk 2622 +#define wxAuiPaneInfo_IsResizable 2623 +#define wxAuiPaneInfo_IsRightDockable 2624 +#define wxAuiPaneInfo_IsShown 2625 +#define wxAuiPaneInfo_IsToolbar 2626 +#define wxAuiPaneInfo_IsTopDockable 2627 +#define wxAuiPaneInfo_Layer 2628 +#define wxAuiPaneInfo_Left 2629 +#define wxAuiPaneInfo_LeftDockable 2630 +#define wxAuiPaneInfo_MaxSize_1 2631 +#define wxAuiPaneInfo_MaxSize_2 2632 +#define wxAuiPaneInfo_MaximizeButton 2633 +#define wxAuiPaneInfo_MinSize_1 2634 +#define wxAuiPaneInfo_MinSize_2 2635 +#define wxAuiPaneInfo_MinimizeButton 2636 +#define wxAuiPaneInfo_Movable 2637 +#define wxAuiPaneInfo_Name 2638 +#define wxAuiPaneInfo_PaneBorder 2639 +#define wxAuiPaneInfo_PinButton 2640 +#define wxAuiPaneInfo_Position 2641 +#define wxAuiPaneInfo_Resizable 2642 +#define wxAuiPaneInfo_Right 2643 +#define wxAuiPaneInfo_RightDockable 2644 +#define wxAuiPaneInfo_Row 2645 +#define wxAuiPaneInfo_SafeSet 2646 +#define wxAuiPaneInfo_SetFlag 2647 +#define wxAuiPaneInfo_Show 2648 +#define wxAuiPaneInfo_ToolbarPane 2649 +#define wxAuiPaneInfo_Top 2650 +#define wxAuiPaneInfo_TopDockable 2651 +#define wxAuiPaneInfo_Window 2652 +#define wxAuiNotebook_new_0 2653 +#define wxAuiNotebook_new_2 2654 +#define wxAuiNotebook_AddPage 2655 +#define wxAuiNotebook_Create 2656 +#define wxAuiNotebook_DeletePage 2657 +#define wxAuiNotebook_GetArtProvider 2658 +#define wxAuiNotebook_GetPage 2659 +#define wxAuiNotebook_GetPageBitmap 2660 +#define wxAuiNotebook_GetPageCount 2661 +#define wxAuiNotebook_GetPageIndex 2662 +#define wxAuiNotebook_GetPageText 2663 +#define wxAuiNotebook_GetSelection 2664 +#define wxAuiNotebook_InsertPage 2665 +#define wxAuiNotebook_RemovePage 2666 +#define wxAuiNotebook_SetArtProvider 2667 +#define wxAuiNotebook_SetFont 2668 +#define wxAuiNotebook_SetPageBitmap 2669 +#define wxAuiNotebook_SetPageText 2670 +#define wxAuiNotebook_SetSelection 2671 +#define wxAuiNotebook_SetTabCtrlHeight 2672 +#define wxAuiNotebook_SetUniformBitmapSize 2673 +#define wxAuiNotebook_destroy 2674 +#define wxMDIParentFrame_new_0 2675 +#define wxMDIParentFrame_new_4 2676 +#define wxMDIParentFrame_destruct 2677 +#define wxMDIParentFrame_ActivateNext 2678 +#define wxMDIParentFrame_ActivatePrevious 2679 +#define wxMDIParentFrame_ArrangeIcons 2680 +#define wxMDIParentFrame_Cascade 2681 +#define wxMDIParentFrame_Create 2682 +#define wxMDIParentFrame_GetActiveChild 2683 +#define wxMDIParentFrame_GetClientWindow 2684 +#define wxMDIParentFrame_Tile 2685 +#define wxMDIChildFrame_new_0 2686 +#define wxMDIChildFrame_new_4 2687 +#define wxMDIChildFrame_destruct 2688 +#define wxMDIChildFrame_Activate 2689 +#define wxMDIChildFrame_Create 2690 +#define wxMDIChildFrame_Maximize 2691 +#define wxMDIChildFrame_Restore 2692 +#define wxMDIClientWindow_new_0 2693 +#define wxMDIClientWindow_new_2 2694 +#define wxMDIClientWindow_destruct 2695 +#define wxMDIClientWindow_CreateClient 2696 +#define wxLayoutAlgorithm_new 2697 +#define wxLayoutAlgorithm_LayoutFrame 2698 +#define wxLayoutAlgorithm_LayoutMDIFrame 2699 +#define wxLayoutAlgorithm_LayoutWindow 2700 +#define wxLayoutAlgorithm_destroy 2701 +#define wxEvent_GetId 2702 +#define wxEvent_GetSkipped 2703 +#define wxEvent_GetTimestamp 2704 +#define wxEvent_IsCommandEvent 2705 +#define wxEvent_ResumePropagation 2706 +#define wxEvent_ShouldPropagate 2707 +#define wxEvent_Skip 2708 +#define wxEvent_StopPropagation 2709 +#define wxCommandEvent_getClientData 2710 +#define wxCommandEvent_GetExtraLong 2711 +#define wxCommandEvent_GetInt 2712 +#define wxCommandEvent_GetSelection 2713 +#define wxCommandEvent_GetString 2714 +#define wxCommandEvent_IsChecked 2715 +#define wxCommandEvent_IsSelection 2716 +#define wxCommandEvent_SetInt 2717 +#define wxCommandEvent_SetString 2718 +#define wxScrollEvent_GetOrientation 2719 +#define wxScrollEvent_GetPosition 2720 +#define wxScrollWinEvent_GetOrientation 2721 +#define wxScrollWinEvent_GetPosition 2722 +#define wxMouseEvent_AltDown 2723 +#define wxMouseEvent_Button 2724 +#define wxMouseEvent_ButtonDClick 2725 +#define wxMouseEvent_ButtonDown 2726 +#define wxMouseEvent_ButtonUp 2727 +#define wxMouseEvent_CmdDown 2728 +#define wxMouseEvent_ControlDown 2729 +#define wxMouseEvent_Dragging 2730 +#define wxMouseEvent_Entering 2731 +#define wxMouseEvent_GetButton 2732 +#define wxMouseEvent_GetPosition 2735 +#define wxMouseEvent_GetLogicalPosition 2736 +#define wxMouseEvent_GetLinesPerAction 2737 +#define wxMouseEvent_GetWheelRotation 2738 +#define wxMouseEvent_GetWheelDelta 2739 +#define wxMouseEvent_GetX 2740 +#define wxMouseEvent_GetY 2741 +#define wxMouseEvent_IsButton 2742 +#define wxMouseEvent_IsPageScroll 2743 +#define wxMouseEvent_Leaving 2744 +#define wxMouseEvent_LeftDClick 2745 +#define wxMouseEvent_LeftDown 2746 +#define wxMouseEvent_LeftIsDown 2747 +#define wxMouseEvent_LeftUp 2748 +#define wxMouseEvent_MetaDown 2749 +#define wxMouseEvent_MiddleDClick 2750 +#define wxMouseEvent_MiddleDown 2751 +#define wxMouseEvent_MiddleIsDown 2752 +#define wxMouseEvent_MiddleUp 2753 +#define wxMouseEvent_Moving 2754 +#define wxMouseEvent_RightDClick 2755 +#define wxMouseEvent_RightDown 2756 +#define wxMouseEvent_RightIsDown 2757 +#define wxMouseEvent_RightUp 2758 +#define wxMouseEvent_ShiftDown 2759 +#define wxSetCursorEvent_GetCursor 2760 +#define wxSetCursorEvent_GetX 2761 +#define wxSetCursorEvent_GetY 2762 +#define wxSetCursorEvent_HasCursor 2763 +#define wxSetCursorEvent_SetCursor 2764 +#define wxKeyEvent_AltDown 2765 +#define wxKeyEvent_CmdDown 2766 +#define wxKeyEvent_ControlDown 2767 +#define wxKeyEvent_GetKeyCode 2768 +#define wxKeyEvent_GetModifiers 2769 +#define wxKeyEvent_GetPosition 2772 +#define wxKeyEvent_GetRawKeyCode 2773 +#define wxKeyEvent_GetRawKeyFlags 2774 +#define wxKeyEvent_GetUnicodeKey 2775 +#define wxKeyEvent_GetX 2776 +#define wxKeyEvent_GetY 2777 +#define wxKeyEvent_HasModifiers 2778 +#define wxKeyEvent_MetaDown 2779 +#define wxKeyEvent_ShiftDown 2780 +#define wxSizeEvent_GetSize 2781 +#define wxMoveEvent_GetPosition 2782 +#define wxEraseEvent_GetDC 2783 +#define wxFocusEvent_GetWindow 2784 +#define wxChildFocusEvent_GetWindow 2785 +#define wxMenuEvent_GetMenu 2786 +#define wxMenuEvent_GetMenuId 2787 +#define wxMenuEvent_IsPopup 2788 +#define wxCloseEvent_CanVeto 2789 +#define wxCloseEvent_GetLoggingOff 2790 +#define wxCloseEvent_SetCanVeto 2791 +#define wxCloseEvent_SetLoggingOff 2792 +#define wxCloseEvent_Veto 2793 +#define wxShowEvent_SetShow 2794 +#define wxShowEvent_GetShow 2795 +#define wxIconizeEvent_Iconized 2796 +#define wxJoystickEvent_ButtonDown 2797 +#define wxJoystickEvent_ButtonIsDown 2798 +#define wxJoystickEvent_ButtonUp 2799 +#define wxJoystickEvent_GetButtonChange 2800 +#define wxJoystickEvent_GetButtonState 2801 +#define wxJoystickEvent_GetJoystick 2802 +#define wxJoystickEvent_GetPosition 2803 +#define wxJoystickEvent_GetZPosition 2804 +#define wxJoystickEvent_IsButton 2805 +#define wxJoystickEvent_IsMove 2806 +#define wxJoystickEvent_IsZMove 2807 +#define wxUpdateUIEvent_CanUpdate 2808 +#define wxUpdateUIEvent_Check 2809 +#define wxUpdateUIEvent_Enable 2810 +#define wxUpdateUIEvent_Show 2811 +#define wxUpdateUIEvent_GetChecked 2812 +#define wxUpdateUIEvent_GetEnabled 2813 +#define wxUpdateUIEvent_GetShown 2814 +#define wxUpdateUIEvent_GetSetChecked 2815 +#define wxUpdateUIEvent_GetSetEnabled 2816 +#define wxUpdateUIEvent_GetSetShown 2817 +#define wxUpdateUIEvent_GetSetText 2818 +#define wxUpdateUIEvent_GetText 2819 +#define wxUpdateUIEvent_GetMode 2820 +#define wxUpdateUIEvent_GetUpdateInterval 2821 +#define wxUpdateUIEvent_ResetUpdateTime 2822 +#define wxUpdateUIEvent_SetMode 2823 +#define wxUpdateUIEvent_SetText 2824 +#define wxUpdateUIEvent_SetUpdateInterval 2825 +#define wxMouseCaptureChangedEvent_GetCapturedWindow 2826 +#define wxPaletteChangedEvent_SetChangedWindow 2827 +#define wxPaletteChangedEvent_GetChangedWindow 2828 +#define wxQueryNewPaletteEvent_SetPaletteRealized 2829 +#define wxQueryNewPaletteEvent_GetPaletteRealized 2830 +#define wxNavigationKeyEvent_GetDirection 2831 +#define wxNavigationKeyEvent_SetDirection 2832 +#define wxNavigationKeyEvent_IsWindowChange 2833 +#define wxNavigationKeyEvent_SetWindowChange 2834 +#define wxNavigationKeyEvent_IsFromTab 2835 +#define wxNavigationKeyEvent_SetFromTab 2836 +#define wxNavigationKeyEvent_GetCurrentFocus 2837 +#define wxNavigationKeyEvent_SetCurrentFocus 2838 +#define wxHelpEvent_GetOrigin 2839 +#define wxHelpEvent_GetPosition 2840 +#define wxHelpEvent_SetOrigin 2841 +#define wxHelpEvent_SetPosition 2842 +#define wxContextMenuEvent_GetPosition 2843 +#define wxContextMenuEvent_SetPosition 2844 +#define wxIdleEvent_CanSend 2845 +#define wxIdleEvent_GetMode 2846 +#define wxIdleEvent_RequestMore 2847 +#define wxIdleEvent_MoreRequested 2848 +#define wxIdleEvent_SetMode 2849 +#define wxGridEvent_AltDown 2850 +#define wxGridEvent_ControlDown 2851 +#define wxGridEvent_GetCol 2852 +#define wxGridEvent_GetPosition 2853 +#define wxGridEvent_GetRow 2854 +#define wxGridEvent_MetaDown 2855 +#define wxGridEvent_Selecting 2856 +#define wxGridEvent_ShiftDown 2857 +#define wxNotifyEvent_Allow 2858 +#define wxNotifyEvent_IsAllowed 2859 +#define wxNotifyEvent_Veto 2860 +#define wxSashEvent_GetEdge 2861 +#define wxSashEvent_GetDragRect 2862 +#define wxSashEvent_GetDragStatus 2863 +#define wxListEvent_GetCacheFrom 2864 +#define wxListEvent_GetCacheTo 2865 +#define wxListEvent_GetKeyCode 2866 +#define wxListEvent_GetIndex 2867 +#define wxListEvent_GetColumn 2868 +#define wxListEvent_GetPoint 2869 +#define wxListEvent_GetLabel 2870 +#define wxListEvent_GetText 2871 +#define wxListEvent_GetImage 2872 +#define wxListEvent_GetData 2873 +#define wxListEvent_GetMask 2874 +#define wxListEvent_GetItem 2875 +#define wxListEvent_IsEditCancelled 2876 +#define wxDateEvent_GetDate 2877 +#define wxCalendarEvent_GetWeekDay 2878 +#define wxFileDirPickerEvent_GetPath 2879 +#define wxColourPickerEvent_GetColour 2880 +#define wxFontPickerEvent_GetFont 2881 +#define wxStyledTextEvent_GetPosition 2882 +#define wxStyledTextEvent_GetKey 2883 +#define wxStyledTextEvent_GetModifiers 2884 +#define wxStyledTextEvent_GetModificationType 2885 +#define wxStyledTextEvent_GetText 2886 +#define wxStyledTextEvent_GetLength 2887 +#define wxStyledTextEvent_GetLinesAdded 2888 +#define wxStyledTextEvent_GetLine 2889 +#define wxStyledTextEvent_GetFoldLevelNow 2890 +#define wxStyledTextEvent_GetFoldLevelPrev 2891 +#define wxStyledTextEvent_GetMargin 2892 +#define wxStyledTextEvent_GetMessage 2893 +#define wxStyledTextEvent_GetWParam 2894 +#define wxStyledTextEvent_GetLParam 2895 +#define wxStyledTextEvent_GetListType 2896 +#define wxStyledTextEvent_GetX 2897 +#define wxStyledTextEvent_GetY 2898 +#define wxStyledTextEvent_GetDragText 2899 +#define wxStyledTextEvent_GetDragAllowMove 2900 +#define wxStyledTextEvent_GetDragResult 2901 +#define wxStyledTextEvent_GetShift 2902 +#define wxStyledTextEvent_GetControl 2903 +#define wxStyledTextEvent_GetAlt 2904 +#define utils_wxGetKeyState 2905 +#define utils_wxGetMousePosition 2906 +#define utils_wxGetMouseState 2907 +#define utils_wxSetDetectableAutoRepeat 2908 +#define utils_wxBell 2909 +#define utils_wxFindMenuItemId 2910 +#define utils_wxGenericFindWindowAtPoint 2911 +#define utils_wxFindWindowAtPoint 2912 +#define utils_wxBeginBusyCursor 2913 +#define utils_wxEndBusyCursor 2914 +#define utils_wxIsBusy 2915 +#define utils_wxShutdown 2916 +#define utils_wxShell 2917 +#define utils_wxLaunchDefaultBrowser 2918 +#define utils_wxGetEmailAddress 2919 +#define utils_wxGetUserId 2920 +#define utils_wxGetHomeDir 2921 +#define utils_wxNewId 2922 +#define utils_wxRegisterId 2923 +#define utils_wxGetCurrentId 2924 +#define utils_wxGetOsDescription 2925 +#define utils_wxIsPlatformLittleEndian 2926 +#define utils_wxIsPlatform64Bit 2927 +#define wxPrintout_new 2928 +#define wxPrintout_destruct 2929 +#define wxPrintout_GetDC 2930 +#define wxPrintout_GetPageSizeMM 2931 +#define wxPrintout_GetPageSizePixels 2932 +#define wxPrintout_GetPaperRectPixels 2933 +#define wxPrintout_GetPPIPrinter 2934 +#define wxPrintout_GetPPIScreen 2935 +#define wxPrintout_GetTitle 2936 +#define wxPrintout_IsPreview 2937 +#define wxPrintout_FitThisSizeToPaper 2938 +#define wxPrintout_FitThisSizeToPage 2939 +#define wxPrintout_FitThisSizeToPageMargins 2940 +#define wxPrintout_MapScreenSizeToPaper 2941 +#define wxPrintout_MapScreenSizeToPage 2942 +#define wxPrintout_MapScreenSizeToPageMargins 2943 +#define wxPrintout_MapScreenSizeToDevice 2944 +#define wxPrintout_GetLogicalPaperRect 2945 +#define wxPrintout_GetLogicalPageRect 2946 +#define wxPrintout_GetLogicalPageMarginsRect 2947 +#define wxPrintout_SetLogicalOrigin 2948 +#define wxPrintout_OffsetLogicalOrigin 2949 +#define wxStyledTextCtrl_new_2 2950 +#define wxStyledTextCtrl_new_0 2951 +#define wxStyledTextCtrl_destruct 2952 +#define wxStyledTextCtrl_Create 2953 +#define wxStyledTextCtrl_AddText 2954 +#define wxStyledTextCtrl_AddStyledText 2955 +#define wxStyledTextCtrl_InsertText 2956 +#define wxStyledTextCtrl_ClearAll 2957 +#define wxStyledTextCtrl_ClearDocumentStyle 2958 +#define wxStyledTextCtrl_GetLength 2959 +#define wxStyledTextCtrl_GetCharAt 2960 +#define wxStyledTextCtrl_GetCurrentPos 2961 +#define wxStyledTextCtrl_GetAnchor 2962 +#define wxStyledTextCtrl_GetStyleAt 2963 +#define wxStyledTextCtrl_Redo 2964 +#define wxStyledTextCtrl_SetUndoCollection 2965 +#define wxStyledTextCtrl_SelectAll 2966 +#define wxStyledTextCtrl_SetSavePoint 2967 +#define wxStyledTextCtrl_GetStyledText 2968 +#define wxStyledTextCtrl_CanRedo 2969 +#define wxStyledTextCtrl_MarkerLineFromHandle 2970 +#define wxStyledTextCtrl_MarkerDeleteHandle 2971 +#define wxStyledTextCtrl_GetUndoCollection 2972 +#define wxStyledTextCtrl_GetViewWhiteSpace 2973 +#define wxStyledTextCtrl_SetViewWhiteSpace 2974 +#define wxStyledTextCtrl_PositionFromPoint 2975 +#define wxStyledTextCtrl_PositionFromPointClose 2976 +#define wxStyledTextCtrl_GotoLine 2977 +#define wxStyledTextCtrl_GotoPos 2978 +#define wxStyledTextCtrl_SetAnchor 2979 +#define wxStyledTextCtrl_GetCurLine 2980 +#define wxStyledTextCtrl_GetEndStyled 2981 +#define wxStyledTextCtrl_ConvertEOLs 2982 +#define wxStyledTextCtrl_GetEOLMode 2983 +#define wxStyledTextCtrl_SetEOLMode 2984 +#define wxStyledTextCtrl_StartStyling 2985 +#define wxStyledTextCtrl_SetStyling 2986 +#define wxStyledTextCtrl_GetBufferedDraw 2987 +#define wxStyledTextCtrl_SetBufferedDraw 2988 +#define wxStyledTextCtrl_SetTabWidth 2989 +#define wxStyledTextCtrl_GetTabWidth 2990 +#define wxStyledTextCtrl_SetCodePage 2991 +#define wxStyledTextCtrl_MarkerDefine 2992 +#define wxStyledTextCtrl_MarkerSetForeground 2993 +#define wxStyledTextCtrl_MarkerSetBackground 2994 +#define wxStyledTextCtrl_MarkerAdd 2995 +#define wxStyledTextCtrl_MarkerDelete 2996 +#define wxStyledTextCtrl_MarkerDeleteAll 2997 +#define wxStyledTextCtrl_MarkerGet 2998 +#define wxStyledTextCtrl_MarkerNext 2999 +#define wxStyledTextCtrl_MarkerPrevious 3000 +#define wxStyledTextCtrl_MarkerDefineBitmap 3001 +#define wxStyledTextCtrl_MarkerAddSet 3002 +#define wxStyledTextCtrl_MarkerSetAlpha 3003 +#define wxStyledTextCtrl_SetMarginType 3004 +#define wxStyledTextCtrl_GetMarginType 3005 +#define wxStyledTextCtrl_SetMarginWidth 3006 +#define wxStyledTextCtrl_GetMarginWidth 3007 +#define wxStyledTextCtrl_SetMarginMask 3008 +#define wxStyledTextCtrl_GetMarginMask 3009 +#define wxStyledTextCtrl_SetMarginSensitive 3010 +#define wxStyledTextCtrl_GetMarginSensitive 3011 +#define wxStyledTextCtrl_StyleClearAll 3012 +#define wxStyledTextCtrl_StyleSetForeground 3013 +#define wxStyledTextCtrl_StyleSetBackground 3014 +#define wxStyledTextCtrl_StyleSetBold 3015 +#define wxStyledTextCtrl_StyleSetItalic 3016 +#define wxStyledTextCtrl_StyleSetSize 3017 +#define wxStyledTextCtrl_StyleSetFaceName 3018 +#define wxStyledTextCtrl_StyleSetEOLFilled 3019 +#define wxStyledTextCtrl_StyleResetDefault 3020 +#define wxStyledTextCtrl_StyleSetUnderline 3021 +#define wxStyledTextCtrl_StyleSetCase 3022 +#define wxStyledTextCtrl_StyleSetHotSpot 3023 +#define wxStyledTextCtrl_SetSelForeground 3024 +#define wxStyledTextCtrl_SetSelBackground 3025 +#define wxStyledTextCtrl_GetSelAlpha 3026 +#define wxStyledTextCtrl_SetSelAlpha 3027 +#define wxStyledTextCtrl_SetCaretForeground 3028 +#define wxStyledTextCtrl_CmdKeyAssign 3029 +#define wxStyledTextCtrl_CmdKeyClear 3030 +#define wxStyledTextCtrl_CmdKeyClearAll 3031 +#define wxStyledTextCtrl_SetStyleBytes 3032 +#define wxStyledTextCtrl_StyleSetVisible 3033 +#define wxStyledTextCtrl_GetCaretPeriod 3034 +#define wxStyledTextCtrl_SetCaretPeriod 3035 +#define wxStyledTextCtrl_SetWordChars 3036 +#define wxStyledTextCtrl_BeginUndoAction 3037 +#define wxStyledTextCtrl_EndUndoAction 3038 +#define wxStyledTextCtrl_IndicatorSetStyle 3039 +#define wxStyledTextCtrl_IndicatorGetStyle 3040 +#define wxStyledTextCtrl_IndicatorSetForeground 3041 +#define wxStyledTextCtrl_IndicatorGetForeground 3042 +#define wxStyledTextCtrl_SetWhitespaceForeground 3043 +#define wxStyledTextCtrl_SetWhitespaceBackground 3044 +#define wxStyledTextCtrl_GetStyleBits 3045 +#define wxStyledTextCtrl_SetLineState 3046 +#define wxStyledTextCtrl_GetLineState 3047 +#define wxStyledTextCtrl_GetMaxLineState 3048 +#define wxStyledTextCtrl_GetCaretLineVisible 3049 +#define wxStyledTextCtrl_SetCaretLineVisible 3050 +#define wxStyledTextCtrl_GetCaretLineBackground 3051 +#define wxStyledTextCtrl_SetCaretLineBackground 3052 +#define wxStyledTextCtrl_AutoCompShow 3053 +#define wxStyledTextCtrl_AutoCompCancel 3054 +#define wxStyledTextCtrl_AutoCompActive 3055 +#define wxStyledTextCtrl_AutoCompPosStart 3056 +#define wxStyledTextCtrl_AutoCompComplete 3057 +#define wxStyledTextCtrl_AutoCompStops 3058 +#define wxStyledTextCtrl_AutoCompSetSeparator 3059 +#define wxStyledTextCtrl_AutoCompGetSeparator 3060 +#define wxStyledTextCtrl_AutoCompSelect 3061 +#define wxStyledTextCtrl_AutoCompSetCancelAtStart 3062 +#define wxStyledTextCtrl_AutoCompGetCancelAtStart 3063 +#define wxStyledTextCtrl_AutoCompSetFillUps 3064 +#define wxStyledTextCtrl_AutoCompSetChooseSingle 3065 +#define wxStyledTextCtrl_AutoCompGetChooseSingle 3066 +#define wxStyledTextCtrl_AutoCompSetIgnoreCase 3067 +#define wxStyledTextCtrl_AutoCompGetIgnoreCase 3068 +#define wxStyledTextCtrl_UserListShow 3069 +#define wxStyledTextCtrl_AutoCompSetAutoHide 3070 +#define wxStyledTextCtrl_AutoCompGetAutoHide 3071 +#define wxStyledTextCtrl_AutoCompSetDropRestOfWord 3072 +#define wxStyledTextCtrl_AutoCompGetDropRestOfWord 3073 +#define wxStyledTextCtrl_RegisterImage 3074 +#define wxStyledTextCtrl_ClearRegisteredImages 3075 +#define wxStyledTextCtrl_AutoCompGetTypeSeparator 3076 +#define wxStyledTextCtrl_AutoCompSetTypeSeparator 3077 +#define wxStyledTextCtrl_AutoCompSetMaxWidth 3078 +#define wxStyledTextCtrl_AutoCompGetMaxWidth 3079 +#define wxStyledTextCtrl_AutoCompSetMaxHeight 3080 +#define wxStyledTextCtrl_AutoCompGetMaxHeight 3081 +#define wxStyledTextCtrl_SetIndent 3082 +#define wxStyledTextCtrl_GetIndent 3083 +#define wxStyledTextCtrl_SetUseTabs 3084 +#define wxStyledTextCtrl_GetUseTabs 3085 +#define wxStyledTextCtrl_SetLineIndentation 3086 +#define wxStyledTextCtrl_GetLineIndentation 3087 +#define wxStyledTextCtrl_GetLineIndentPosition 3088 +#define wxStyledTextCtrl_GetColumn 3089 +#define wxStyledTextCtrl_SetUseHorizontalScrollBar 3090 +#define wxStyledTextCtrl_GetUseHorizontalScrollBar 3091 +#define wxStyledTextCtrl_SetIndentationGuides 3092 +#define wxStyledTextCtrl_GetIndentationGuides 3093 +#define wxStyledTextCtrl_SetHighlightGuide 3094 +#define wxStyledTextCtrl_GetHighlightGuide 3095 +#define wxStyledTextCtrl_GetLineEndPosition 3096 +#define wxStyledTextCtrl_GetCodePage 3097 +#define wxStyledTextCtrl_GetCaretForeground 3098 +#define wxStyledTextCtrl_GetReadOnly 3099 +#define wxStyledTextCtrl_SetCurrentPos 3100 +#define wxStyledTextCtrl_SetSelectionStart 3101 +#define wxStyledTextCtrl_GetSelectionStart 3102 +#define wxStyledTextCtrl_SetSelectionEnd 3103 +#define wxStyledTextCtrl_GetSelectionEnd 3104 +#define wxStyledTextCtrl_SetPrintMagnification 3105 +#define wxStyledTextCtrl_GetPrintMagnification 3106 +#define wxStyledTextCtrl_SetPrintColourMode 3107 +#define wxStyledTextCtrl_GetPrintColourMode 3108 +#define wxStyledTextCtrl_FindText 3109 +#define wxStyledTextCtrl_FormatRange 3110 +#define wxStyledTextCtrl_GetFirstVisibleLine 3111 +#define wxStyledTextCtrl_GetLine 3112 +#define wxStyledTextCtrl_GetLineCount 3113 +#define wxStyledTextCtrl_SetMarginLeft 3114 +#define wxStyledTextCtrl_GetMarginLeft 3115 +#define wxStyledTextCtrl_SetMarginRight 3116 +#define wxStyledTextCtrl_GetMarginRight 3117 +#define wxStyledTextCtrl_GetModify 3118 +#define wxStyledTextCtrl_SetSelection 3119 +#define wxStyledTextCtrl_GetSelectedText 3120 +#define wxStyledTextCtrl_GetTextRange 3121 +#define wxStyledTextCtrl_HideSelection 3122 +#define wxStyledTextCtrl_LineFromPosition 3123 +#define wxStyledTextCtrl_PositionFromLine 3124 +#define wxStyledTextCtrl_LineScroll 3125 +#define wxStyledTextCtrl_EnsureCaretVisible 3126 +#define wxStyledTextCtrl_ReplaceSelection 3127 +#define wxStyledTextCtrl_SetReadOnly 3128 +#define wxStyledTextCtrl_CanPaste 3129 +#define wxStyledTextCtrl_CanUndo 3130 +#define wxStyledTextCtrl_EmptyUndoBuffer 3131 +#define wxStyledTextCtrl_Undo 3132 +#define wxStyledTextCtrl_Cut 3133 +#define wxStyledTextCtrl_Copy 3134 +#define wxStyledTextCtrl_Paste 3135 +#define wxStyledTextCtrl_Clear 3136 +#define wxStyledTextCtrl_SetText 3137 +#define wxStyledTextCtrl_GetText 3138 +#define wxStyledTextCtrl_GetTextLength 3139 +#define wxStyledTextCtrl_GetOvertype 3140 +#define wxStyledTextCtrl_SetCaretWidth 3141 +#define wxStyledTextCtrl_GetCaretWidth 3142 +#define wxStyledTextCtrl_SetTargetStart 3143 +#define wxStyledTextCtrl_GetTargetStart 3144 +#define wxStyledTextCtrl_SetTargetEnd 3145 +#define wxStyledTextCtrl_GetTargetEnd 3146 +#define wxStyledTextCtrl_ReplaceTarget 3147 +#define wxStyledTextCtrl_SearchInTarget 3148 +#define wxStyledTextCtrl_SetSearchFlags 3149 +#define wxStyledTextCtrl_GetSearchFlags 3150 +#define wxStyledTextCtrl_CallTipShow 3151 +#define wxStyledTextCtrl_CallTipCancel 3152 +#define wxStyledTextCtrl_CallTipActive 3153 +#define wxStyledTextCtrl_CallTipPosAtStart 3154 +#define wxStyledTextCtrl_CallTipSetHighlight 3155 +#define wxStyledTextCtrl_CallTipSetBackground 3156 +#define wxStyledTextCtrl_CallTipSetForeground 3157 +#define wxStyledTextCtrl_CallTipSetForegroundHighlight 3158 +#define wxStyledTextCtrl_CallTipUseStyle 3159 +#define wxStyledTextCtrl_VisibleFromDocLine 3160 +#define wxStyledTextCtrl_DocLineFromVisible 3161 +#define wxStyledTextCtrl_WrapCount 3162 +#define wxStyledTextCtrl_SetFoldLevel 3163 +#define wxStyledTextCtrl_GetFoldLevel 3164 +#define wxStyledTextCtrl_GetLastChild 3165 +#define wxStyledTextCtrl_GetFoldParent 3166 +#define wxStyledTextCtrl_ShowLines 3167 +#define wxStyledTextCtrl_HideLines 3168 +#define wxStyledTextCtrl_GetLineVisible 3169 +#define wxStyledTextCtrl_SetFoldExpanded 3170 +#define wxStyledTextCtrl_GetFoldExpanded 3171 +#define wxStyledTextCtrl_ToggleFold 3172 +#define wxStyledTextCtrl_EnsureVisible 3173 +#define wxStyledTextCtrl_SetFoldFlags 3174 +#define wxStyledTextCtrl_EnsureVisibleEnforcePolicy 3175 +#define wxStyledTextCtrl_SetTabIndents 3176 +#define wxStyledTextCtrl_GetTabIndents 3177 +#define wxStyledTextCtrl_SetBackSpaceUnIndents 3178 +#define wxStyledTextCtrl_GetBackSpaceUnIndents 3179 +#define wxStyledTextCtrl_SetMouseDwellTime 3180 +#define wxStyledTextCtrl_GetMouseDwellTime 3181 +#define wxStyledTextCtrl_WordStartPosition 3182 +#define wxStyledTextCtrl_WordEndPosition 3183 +#define wxStyledTextCtrl_SetWrapMode 3184 +#define wxStyledTextCtrl_GetWrapMode 3185 +#define wxStyledTextCtrl_SetWrapVisualFlags 3186 +#define wxStyledTextCtrl_GetWrapVisualFlags 3187 +#define wxStyledTextCtrl_SetWrapVisualFlagsLocation 3188 +#define wxStyledTextCtrl_GetWrapVisualFlagsLocation 3189 +#define wxStyledTextCtrl_SetWrapStartIndent 3190 +#define wxStyledTextCtrl_GetWrapStartIndent 3191 +#define wxStyledTextCtrl_SetLayoutCache 3192 +#define wxStyledTextCtrl_GetLayoutCache 3193 +#define wxStyledTextCtrl_SetScrollWidth 3194 +#define wxStyledTextCtrl_GetScrollWidth 3195 +#define wxStyledTextCtrl_TextWidth 3196 +#define wxStyledTextCtrl_GetEndAtLastLine 3197 +#define wxStyledTextCtrl_TextHeight 3198 +#define wxStyledTextCtrl_SetUseVerticalScrollBar 3199 +#define wxStyledTextCtrl_GetUseVerticalScrollBar 3200 +#define wxStyledTextCtrl_AppendText 3201 +#define wxStyledTextCtrl_GetTwoPhaseDraw 3202 +#define wxStyledTextCtrl_SetTwoPhaseDraw 3203 +#define wxStyledTextCtrl_TargetFromSelection 3204 +#define wxStyledTextCtrl_LinesJoin 3205 +#define wxStyledTextCtrl_LinesSplit 3206 +#define wxStyledTextCtrl_SetFoldMarginColour 3207 +#define wxStyledTextCtrl_SetFoldMarginHiColour 3208 +#define wxStyledTextCtrl_LineDown 3209 +#define wxStyledTextCtrl_LineDownExtend 3210 +#define wxStyledTextCtrl_LineUp 3211 +#define wxStyledTextCtrl_LineUpExtend 3212 +#define wxStyledTextCtrl_CharLeft 3213 +#define wxStyledTextCtrl_CharLeftExtend 3214 +#define wxStyledTextCtrl_CharRight 3215 +#define wxStyledTextCtrl_CharRightExtend 3216 +#define wxStyledTextCtrl_WordLeft 3217 +#define wxStyledTextCtrl_WordLeftExtend 3218 +#define wxStyledTextCtrl_WordRight 3219 +#define wxStyledTextCtrl_WordRightExtend 3220 +#define wxStyledTextCtrl_Home 3221 +#define wxStyledTextCtrl_HomeExtend 3222 +#define wxStyledTextCtrl_LineEnd 3223 +#define wxStyledTextCtrl_LineEndExtend 3224 +#define wxStyledTextCtrl_DocumentStart 3225 +#define wxStyledTextCtrl_DocumentStartExtend 3226 +#define wxStyledTextCtrl_DocumentEnd 3227 +#define wxStyledTextCtrl_DocumentEndExtend 3228 +#define wxStyledTextCtrl_PageUp 3229 +#define wxStyledTextCtrl_PageUpExtend 3230 +#define wxStyledTextCtrl_PageDown 3231 +#define wxStyledTextCtrl_PageDownExtend 3232 +#define wxStyledTextCtrl_EditToggleOvertype 3233 +#define wxStyledTextCtrl_Cancel 3234 +#define wxStyledTextCtrl_DeleteBack 3235 +#define wxStyledTextCtrl_Tab 3236 +#define wxStyledTextCtrl_BackTab 3237 +#define wxStyledTextCtrl_NewLine 3238 +#define wxStyledTextCtrl_FormFeed 3239 +#define wxStyledTextCtrl_VCHome 3240 +#define wxStyledTextCtrl_VCHomeExtend 3241 +#define wxStyledTextCtrl_ZoomIn 3242 +#define wxStyledTextCtrl_ZoomOut 3243 +#define wxStyledTextCtrl_DelWordLeft 3244 +#define wxStyledTextCtrl_DelWordRight 3245 +#define wxStyledTextCtrl_LineCut 3246 +#define wxStyledTextCtrl_LineDelete 3247 +#define wxStyledTextCtrl_LineTranspose 3248 +#define wxStyledTextCtrl_LineDuplicate 3249 +#define wxStyledTextCtrl_LowerCase 3250 +#define wxStyledTextCtrl_UpperCase 3251 +#define wxStyledTextCtrl_LineScrollDown 3252 +#define wxStyledTextCtrl_LineScrollUp 3253 +#define wxStyledTextCtrl_DeleteBackNotLine 3254 +#define wxStyledTextCtrl_HomeDisplay 3255 +#define wxStyledTextCtrl_HomeDisplayExtend 3256 +#define wxStyledTextCtrl_LineEndDisplay 3257 +#define wxStyledTextCtrl_LineEndDisplayExtend 3258 +#define wxStyledTextCtrl_HomeWrapExtend 3259 +#define wxStyledTextCtrl_LineEndWrap 3260 +#define wxStyledTextCtrl_LineEndWrapExtend 3261 +#define wxStyledTextCtrl_VCHomeWrap 3262 +#define wxStyledTextCtrl_VCHomeWrapExtend 3263 +#define wxStyledTextCtrl_LineCopy 3264 +#define wxStyledTextCtrl_MoveCaretInsideView 3265 +#define wxStyledTextCtrl_LineLength 3266 +#define wxStyledTextCtrl_BraceHighlight 3267 +#define wxStyledTextCtrl_BraceBadLight 3268 +#define wxStyledTextCtrl_BraceMatch 3269 +#define wxStyledTextCtrl_GetViewEOL 3270 +#define wxStyledTextCtrl_SetViewEOL 3271 +#define wxStyledTextCtrl_SetModEventMask 3272 +#define wxStyledTextCtrl_GetEdgeColumn 3273 +#define wxStyledTextCtrl_SetEdgeColumn 3274 +#define wxStyledTextCtrl_SetEdgeMode 3275 +#define wxStyledTextCtrl_GetEdgeMode 3276 +#define wxStyledTextCtrl_GetEdgeColour 3277 +#define wxStyledTextCtrl_SetEdgeColour 3278 +#define wxStyledTextCtrl_SearchAnchor 3279 +#define wxStyledTextCtrl_SearchNext 3280 +#define wxStyledTextCtrl_SearchPrev 3281 +#define wxStyledTextCtrl_LinesOnScreen 3282 +#define wxStyledTextCtrl_UsePopUp 3283 +#define wxStyledTextCtrl_SelectionIsRectangle 3284 +#define wxStyledTextCtrl_SetZoom 3285 +#define wxStyledTextCtrl_GetZoom 3286 +#define wxStyledTextCtrl_GetModEventMask 3287 +#define wxStyledTextCtrl_SetSTCFocus 3288 +#define wxStyledTextCtrl_GetSTCFocus 3289 +#define wxStyledTextCtrl_SetStatus 3290 +#define wxStyledTextCtrl_GetStatus 3291 +#define wxStyledTextCtrl_SetMouseDownCaptures 3292 +#define wxStyledTextCtrl_GetMouseDownCaptures 3293 +#define wxStyledTextCtrl_SetSTCCursor 3294 +#define wxStyledTextCtrl_GetSTCCursor 3295 +#define wxStyledTextCtrl_SetControlCharSymbol 3296 +#define wxStyledTextCtrl_GetControlCharSymbol 3297 +#define wxStyledTextCtrl_WordPartLeft 3298 +#define wxStyledTextCtrl_WordPartLeftExtend 3299 +#define wxStyledTextCtrl_WordPartRight 3300 +#define wxStyledTextCtrl_WordPartRightExtend 3301 +#define wxStyledTextCtrl_SetVisiblePolicy 3302 +#define wxStyledTextCtrl_DelLineLeft 3303 +#define wxStyledTextCtrl_DelLineRight 3304 +#define wxStyledTextCtrl_GetXOffset 3305 +#define wxStyledTextCtrl_ChooseCaretX 3306 +#define wxStyledTextCtrl_SetXCaretPolicy 3307 +#define wxStyledTextCtrl_SetYCaretPolicy 3308 +#define wxStyledTextCtrl_GetPrintWrapMode 3309 +#define wxStyledTextCtrl_SetHotspotActiveForeground 3310 +#define wxStyledTextCtrl_SetHotspotActiveBackground 3311 +#define wxStyledTextCtrl_SetHotspotActiveUnderline 3312 +#define wxStyledTextCtrl_SetHotspotSingleLine 3313 +#define wxStyledTextCtrl_ParaDownExtend 3314 +#define wxStyledTextCtrl_ParaUp 3315 +#define wxStyledTextCtrl_ParaUpExtend 3316 +#define wxStyledTextCtrl_PositionBefore 3317 +#define wxStyledTextCtrl_PositionAfter 3318 +#define wxStyledTextCtrl_CopyRange 3319 +#define wxStyledTextCtrl_CopyText 3320 +#define wxStyledTextCtrl_SetSelectionMode 3321 +#define wxStyledTextCtrl_GetSelectionMode 3322 +#define wxStyledTextCtrl_LineDownRectExtend 3323 +#define wxStyledTextCtrl_LineUpRectExtend 3324 +#define wxStyledTextCtrl_CharLeftRectExtend 3325 +#define wxStyledTextCtrl_CharRightRectExtend 3326 +#define wxStyledTextCtrl_HomeRectExtend 3327 +#define wxStyledTextCtrl_VCHomeRectExtend 3328 +#define wxStyledTextCtrl_LineEndRectExtend 3329 +#define wxStyledTextCtrl_PageUpRectExtend 3330 +#define wxStyledTextCtrl_PageDownRectExtend 3331 +#define wxStyledTextCtrl_StutteredPageUp 3332 +#define wxStyledTextCtrl_StutteredPageUpExtend 3333 +#define wxStyledTextCtrl_StutteredPageDown 3334 +#define wxStyledTextCtrl_StutteredPageDownExtend 3335 +#define wxStyledTextCtrl_WordLeftEnd 3336 +#define wxStyledTextCtrl_WordLeftEndExtend 3337 +#define wxStyledTextCtrl_WordRightEnd 3338 +#define wxStyledTextCtrl_WordRightEndExtend 3339 +#define wxStyledTextCtrl_SetWhitespaceChars 3340 +#define wxStyledTextCtrl_SetCharsDefault 3341 +#define wxStyledTextCtrl_AutoCompGetCurrent 3342 +#define wxStyledTextCtrl_Allocate 3343 +#define wxStyledTextCtrl_FindColumn 3344 +#define wxStyledTextCtrl_GetCaretSticky 3345 +#define wxStyledTextCtrl_SetCaretSticky 3346 +#define wxStyledTextCtrl_ToggleCaretSticky 3347 +#define wxStyledTextCtrl_SetPasteConvertEndings 3348 +#define wxStyledTextCtrl_GetPasteConvertEndings 3349 +#define wxStyledTextCtrl_SelectionDuplicate 3350 +#define wxStyledTextCtrl_SetCaretLineBackAlpha 3351 +#define wxStyledTextCtrl_GetCaretLineBackAlpha 3352 +#define wxStyledTextCtrl_StartRecord 3353 +#define wxStyledTextCtrl_StopRecord 3354 +#define wxStyledTextCtrl_SetLexer 3355 +#define wxStyledTextCtrl_GetLexer 3356 +#define wxStyledTextCtrl_Colourise 3357 +#define wxStyledTextCtrl_SetProperty 3358 +#define wxStyledTextCtrl_SetKeyWords 3359 +#define wxStyledTextCtrl_SetLexerLanguage 3360 +#define wxStyledTextCtrl_GetProperty 3361 +#define wxStyledTextCtrl_GetStyleBitsNeeded 3362 +#define wxStyledTextCtrl_GetCurrentLine 3363 +#define wxStyledTextCtrl_StyleSetSpec 3364 +#define wxStyledTextCtrl_StyleSetFont 3365 +#define wxStyledTextCtrl_StyleSetFontAttr 3366 +#define wxStyledTextCtrl_StyleSetCharacterSet 3367 +#define wxStyledTextCtrl_StyleSetFontEncoding 3368 +#define wxStyledTextCtrl_CmdKeyExecute 3369 +#define wxStyledTextCtrl_SetMargins 3370 +#define wxStyledTextCtrl_GetSelection 3371 +#define wxStyledTextCtrl_PointFromPosition 3372 +#define wxStyledTextCtrl_ScrollToLine 3373 +#define wxStyledTextCtrl_ScrollToColumn 3374 +#define wxStyledTextCtrl_SetVScrollBar 3375 +#define wxStyledTextCtrl_SetHScrollBar 3376 +#define wxStyledTextCtrl_GetLastKeydownProcessed 3377 +#define wxStyledTextCtrl_SetLastKeydownProcessed 3378 +#define wxStyledTextCtrl_SaveFile 3379 +#define wxStyledTextCtrl_LoadFile 3380 +#define wxStyledTextCtrl_DoDragOver 3381 +#define wxStyledTextCtrl_DoDropText 3382 +#define wxStyledTextCtrl_GetUseAntiAliasing 3383 +#define wxStyledTextCtrl_AddTextRaw 3384 +#define wxStyledTextCtrl_InsertTextRaw 3385 +#define wxStyledTextCtrl_GetCurLineRaw 3386 +#define wxStyledTextCtrl_GetLineRaw 3387 +#define wxStyledTextCtrl_GetSelectedTextRaw 3388 +#define wxStyledTextCtrl_GetTextRangeRaw 3389 +#define wxStyledTextCtrl_SetTextRaw 3390 +#define wxStyledTextCtrl_GetTextRaw 3391 +#define wxStyledTextCtrl_AppendTextRaw 3392 +#define wxArtProvider_GetBitmap 3393 +#define wxArtProvider_GetIcon 3394 +#define wxTreeEvent_GetKeyCode 3395 +#define wxTreeEvent_GetItem 3396 +#define wxTreeEvent_GetKeyEvent 3397 +#define wxTreeEvent_GetLabel 3398 +#define wxTreeEvent_GetOldItem 3399 +#define wxTreeEvent_GetPoint 3400 +#define wxTreeEvent_IsEditCancelled 3401 +#define wxTreeEvent_SetToolTip 3402 +#define wxNotebookEvent_GetOldSelection 3403 +#define wxNotebookEvent_GetSelection 3404 +#define wxNotebookEvent_SetOldSelection 3405 +#define wxNotebookEvent_SetSelection 3406 +#define wxFileDataObject_new 3407 +#define wxFileDataObject_AddFile 3408 +#define wxFileDataObject_GetFilenames 3409 +#define wxFileDataObject_destroy 3410 +#define wxTextDataObject_new 3411 +#define wxTextDataObject_GetTextLength 3412 +#define wxTextDataObject_GetText 3413 +#define wxTextDataObject_SetText 3414 +#define wxTextDataObject_destroy 3415 +#define wxBitmapDataObject_new_1_1 3416 +#define wxBitmapDataObject_new_1_0 3417 +#define wxBitmapDataObject_GetBitmap 3418 +#define wxBitmapDataObject_SetBitmap 3419 +#define wxBitmapDataObject_destroy 3420 +#define wxClipboard_new 3422 +#define wxClipboard_destruct 3423 +#define wxClipboard_AddData 3424 +#define wxClipboard_Clear 3425 +#define wxClipboard_Close 3426 +#define wxClipboard_Flush 3427 +#define wxClipboard_GetData 3428 +#define wxClipboard_IsOpened 3429 +#define wxClipboard_Open 3430 +#define wxClipboard_SetData 3431 +#define wxClipboard_UsePrimarySelection 3433 +#define wxClipboard_IsSupported 3434 +#define wxClipboard_Get 3435 +#define wxSpinEvent_GetPosition 3436 +#define wxSpinEvent_SetPosition 3437 +#define wxSplitterWindow_new_0 3438 +#define wxSplitterWindow_new_2 3439 +#define wxSplitterWindow_destruct 3440 +#define wxSplitterWindow_Create 3441 +#define wxSplitterWindow_GetMinimumPaneSize 3442 +#define wxSplitterWindow_GetSashGravity 3443 +#define wxSplitterWindow_GetSashPosition 3444 +#define wxSplitterWindow_GetSplitMode 3445 +#define wxSplitterWindow_GetWindow1 3446 +#define wxSplitterWindow_GetWindow2 3447 +#define wxSplitterWindow_Initialize 3448 +#define wxSplitterWindow_IsSplit 3449 +#define wxSplitterWindow_ReplaceWindow 3450 +#define wxSplitterWindow_SetSashGravity 3451 +#define wxSplitterWindow_SetSashPosition 3452 +#define wxSplitterWindow_SetSashSize 3453 +#define wxSplitterWindow_SetMinimumPaneSize 3454 +#define wxSplitterWindow_SetSplitMode 3455 +#define wxSplitterWindow_SplitHorizontally 3456 +#define wxSplitterWindow_SplitVertically 3457 +#define wxSplitterWindow_Unsplit 3458 +#define wxSplitterWindow_UpdateSize 3459 +#define wxSplitterEvent_GetSashPosition 3460 +#define wxSplitterEvent_GetX 3461 +#define wxSplitterEvent_GetY 3462 +#define wxSplitterEvent_GetWindowBeingRemoved 3463 +#define wxSplitterEvent_SetSashPosition 3464 +#define wxHtmlWindow_new_0 3465 +#define wxHtmlWindow_new_2 3466 +#define wxHtmlWindow_AppendToPage 3467 +#define wxHtmlWindow_GetOpenedAnchor 3468 +#define wxHtmlWindow_GetOpenedPage 3469 +#define wxHtmlWindow_GetOpenedPageTitle 3470 +#define wxHtmlWindow_GetRelatedFrame 3471 +#define wxHtmlWindow_HistoryBack 3472 +#define wxHtmlWindow_HistoryCanBack 3473 +#define wxHtmlWindow_HistoryCanForward 3474 +#define wxHtmlWindow_HistoryClear 3475 +#define wxHtmlWindow_HistoryForward 3476 +#define wxHtmlWindow_LoadFile 3477 +#define wxHtmlWindow_LoadPage 3478 +#define wxHtmlWindow_SelectAll 3479 +#define wxHtmlWindow_SelectionToText 3480 +#define wxHtmlWindow_SelectLine 3481 +#define wxHtmlWindow_SelectWord 3482 +#define wxHtmlWindow_SetBorders 3483 +#define wxHtmlWindow_SetFonts 3484 +#define wxHtmlWindow_SetPage 3485 +#define wxHtmlWindow_SetRelatedFrame 3486 +#define wxHtmlWindow_SetRelatedStatusBar 3487 +#define wxHtmlWindow_ToText 3488 +#define wxHtmlWindow_destroy 3489 +#define wxHtmlLinkEvent_GetLinkInfo 3490 +#define wxSystemSettings_GetColour 3491 +#define wxSystemSettings_GetFont 3492 +#define wxSystemSettings_GetMetric 3493 +#define wxSystemSettings_GetScreenType 3494 +#define wxSystemOptions_GetOption 3495 +#define wxSystemOptions_GetOptionInt 3496 +#define wxSystemOptions_HasOption 3497 +#define wxSystemOptions_IsFalse 3498 +#define wxSystemOptions_SetOption_2_1 3499 +#define wxSystemOptions_SetOption_2_0 3500 +#define wxAuiNotebookEvent_SetSelection 3501 +#define wxAuiNotebookEvent_GetSelection 3502 +#define wxAuiNotebookEvent_SetOldSelection 3503 +#define wxAuiNotebookEvent_GetOldSelection 3504 +#define wxAuiNotebookEvent_SetDragSource 3505 +#define wxAuiNotebookEvent_GetDragSource 3506 +#define wxAuiManagerEvent_SetManager 3507 +#define wxAuiManagerEvent_GetManager 3508 +#define wxAuiManagerEvent_SetPane 3509 +#define wxAuiManagerEvent_GetPane 3510 +#define wxAuiManagerEvent_SetButton 3511 +#define wxAuiManagerEvent_GetButton 3512 +#define wxAuiManagerEvent_SetDC 3513 +#define wxAuiManagerEvent_GetDC 3514 +#define wxAuiManagerEvent_Veto 3515 +#define wxAuiManagerEvent_GetVeto 3516 +#define wxAuiManagerEvent_SetCanVeto 3517 +#define wxAuiManagerEvent_CanVeto 3518 +#define wxLogNull_new 3519 +#define wxLogNull_destroy 3520 +#define wxTaskBarIcon_new 3521 +#define wxTaskBarIcon_destruct 3522 +#define wxTaskBarIcon_PopupMenu 3523 +#define wxTaskBarIcon_RemoveIcon 3524 +#define wxTaskBarIcon_SetIcon 3525 diff --git a/lib/wx/include/wx.hrl b/lib/wx/include/wx.hrl index a48c756dea..aa1c81ac0f 100644 --- a/lib/wx/include/wx.hrl +++ b/lib/wx/include/wx.hrl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -255,6 +255,10 @@ -type wxMouseEventType() :: left_down | left_up | middle_down | middle_up | right_down | right_up | motion | enter_window | leave_window | left_dclick | middle_dclick | right_dclick | mousewheel. -type wxMouse() :: #wxMouse{}. %% Callback event: {@link wxMouseEvent} +-record(wxClipboardText, {type :: wxClipboardTextEventType()}). %% Callback event: {@link wxClipboardTextEvent} +-type wxClipboardTextEventType() :: command_text_copy | command_text_cut | command_text_paste. +-type wxClipboardText() :: #wxClipboardText{}. %% Callback event: {@link wxClipboardTextEvent} + -record(wxWindowCreate, {type :: wxWindowCreateEventType()}). %% Callback event: {@link wxWindowCreateEvent} -type wxWindowCreateEventType() :: create. -type wxWindowCreate() :: #wxWindowCreate{}. %% Callback event: {@link wxWindowCreateEvent} @@ -308,8 +312,8 @@ -type wxTreeEventType() :: command_tree_begin_drag | command_tree_begin_rdrag | command_tree_begin_label_edit | command_tree_end_label_edit | command_tree_delete_item | command_tree_get_info | command_tree_set_info | command_tree_item_expanded | command_tree_item_expanding | command_tree_item_collapsed | command_tree_item_collapsing | command_tree_sel_changed | command_tree_sel_changing | command_tree_key_down | command_tree_item_activated | command_tree_item_right_click | command_tree_item_middle_click | command_tree_end_drag | command_tree_state_image_click | command_tree_item_gettooltip | command_tree_item_menu. -type wxTree() :: #wxTree{}. %% Callback event: {@link wxTreeEvent} --type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy(). --type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType(). +-type event() :: wxAuiManager() | wxAuiNotebook() | wxCalendar() | wxChildFocus() | wxClipboardText() | wxClose() | wxColourPicker() | wxCommand() | wxContextMenu() | wxDate() | wxDisplayChanged() | wxErase() | wxFileDirPicker() | wxFocus() | wxFontPicker() | wxGrid() | wxHelp() | wxHtmlLink() | wxIconize() | wxIdle() | wxJoystick() | wxKey() | wxList() | wxMaximize() | wxMenu() | wxMouse() | wxMouseCaptureChanged() | wxMove() | wxNavigationKey() | wxNotebook() | wxPaint() | wxPaletteChanged() | wxQueryNewPalette() | wxSash() | wxScroll() | wxScrollWin() | wxSetCursor() | wxShow() | wxSize() | wxSpin() | wxSplitter() | wxStyledText() | wxSysColourChanged() | wxTaskBarIcon() | wxTree() | wxUpdateUI() | wxWindowCreate() | wxWindowDestroy(). +-type wxEventType() :: wxAuiManagerEventType() | wxAuiNotebookEventType() | wxCalendarEventType() | wxChildFocusEventType() | wxClipboardTextEventType() | wxCloseEventType() | wxColourPickerEventType() | wxCommandEventType() | wxContextMenuEventType() | wxDateEventType() | wxDisplayChangedEventType() | wxEraseEventType() | wxFileDirPickerEventType() | wxFocusEventType() | wxFontPickerEventType() | wxGridEventType() | wxHelpEventType() | wxHtmlLinkEventType() | wxIconizeEventType() | wxIdleEventType() | wxJoystickEventType() | wxKeyEventType() | wxListEventType() | wxMaximizeEventType() | wxMenuEventType() | wxMouseCaptureChangedEventType() | wxMouseEventType() | wxMoveEventType() | wxNavigationKeyEventType() | wxNotebookEventType() | wxPaintEventType() | wxPaletteChangedEventType() | wxQueryNewPaletteEventType() | wxSashEventType() | wxScrollEventType() | wxScrollWinEventType() | wxSetCursorEventType() | wxShowEventType() | wxSizeEventType() | wxSpinEventType() | wxSplitterEventType() | wxStyledTextEventType() | wxSysColourChangedEventType() | wxTaskBarIconEventType() | wxTreeEventType() | wxUpdateUIEventType() | wxWindowCreateEventType() | wxWindowDestroyEventType(). %% Hardcoded Records -record(wxMouseState, {x :: integer(), y :: integer(), diff --git a/lib/wx/src/gen/wxClipboardTextEvent.erl b/lib/wx/src/gen/wxClipboardTextEvent.erl new file mode 100644 index 0000000000..ff040ce7fd --- /dev/null +++ b/lib/wx/src/gen/wxClipboardTextEvent.erl @@ -0,0 +1,87 @@ +%% +%% %CopyrightBegin% +%% +%% Copyright Ericsson AB 2008-2013. 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% +%% This file is generated DO NOT EDIT + +%% @doc See external documentation: <a href="http://www.wxwidgets.org/manuals/stable/wx_wxclipboardtextevent.html">wxClipboardTextEvent</a>. +%% <dl><dt>Use {@link wxEvtHandler:connect/3.} with EventType:</dt> +%% <dd><em>command_text_copy</em>, <em>command_text_cut</em>, <em>command_text_paste</em></dd></dl> +%% See also the message variant {@link wxEvtHandler:wxClipboardText(). #wxClipboardText{}} event record type. +%% +%% <p>This class is derived (and can use functions) from: +%% <br />{@link wxCommandEvent} +%% <br />{@link wxEvent} +%% </p> +%% @type wxClipboardTextEvent(). An object reference, The representation is internal +%% and can be changed without notice. It can't be used for comparsion +%% stored on disc or distributed for use on other nodes. + +-module(wxClipboardTextEvent). +-include("wxe.hrl"). +-export([]). + +%% inherited exports +-export([getClientData/1,getExtraLong/1,getId/1,getInt/1,getSelection/1,getSkipped/1, + getString/1,getTimestamp/1,isChecked/1,isCommandEvent/1,isSelection/1, + parent_class/1,resumePropagation/2,setInt/2,setString/2,shouldPropagate/1, + skip/1,skip/2,stopPropagation/1]). + +-export_type([wxClipboardTextEvent/0]). +%% @hidden +parent_class(wxCommandEvent) -> true; +parent_class(wxEvent) -> true; +parent_class(_Class) -> erlang:error({badtype, ?MODULE}). + +-type wxClipboardTextEvent() :: wx:wx_object(). + %% From wxCommandEvent +%% @hidden +setString(This,S) -> wxCommandEvent:setString(This,S). +%% @hidden +setInt(This,I) -> wxCommandEvent:setInt(This,I). +%% @hidden +isSelection(This) -> wxCommandEvent:isSelection(This). +%% @hidden +isChecked(This) -> wxCommandEvent:isChecked(This). +%% @hidden +getString(This) -> wxCommandEvent:getString(This). +%% @hidden +getSelection(This) -> wxCommandEvent:getSelection(This). +%% @hidden +getInt(This) -> wxCommandEvent:getInt(This). +%% @hidden +getExtraLong(This) -> wxCommandEvent:getExtraLong(This). +%% @hidden +getClientData(This) -> wxCommandEvent:getClientData(This). + %% From wxEvent +%% @hidden +stopPropagation(This) -> wxEvent:stopPropagation(This). +%% @hidden +skip(This, Options) -> wxEvent:skip(This, Options). +%% @hidden +skip(This) -> wxEvent:skip(This). +%% @hidden +shouldPropagate(This) -> wxEvent:shouldPropagate(This). +%% @hidden +resumePropagation(This,PropagationLevel) -> wxEvent:resumePropagation(This,PropagationLevel). +%% @hidden +isCommandEvent(This) -> wxEvent:isCommandEvent(This). +%% @hidden +getTimestamp(This) -> wxEvent:getTimestamp(This). +%% @hidden +getSkipped(This) -> wxEvent:getSkipped(This). +%% @hidden +getId(This) -> wxEvent:getId(This). diff --git a/lib/wx/src/gen/wxGrid.erl b/lib/wx/src/gen/wxGrid.erl index 2f4b45b1bc..39cb084e2f 100644 --- a/lib/wx/src/gen/wxGrid.erl +++ b/lib/wx/src/gen/wxGrid.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -112,13 +112,13 @@ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, setClientSize/3,setContainingSizer/2,setCursor/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,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, + 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,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, @@ -2151,6 +2151,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt). %% From wxPanel %% @hidden +setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). +%% @hidden initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden diff --git a/lib/wx/src/gen/wxHtmlWindow.erl b/lib/wx/src/gen/wxHtmlWindow.erl index 4820f7d075..bbe1445463 100644 --- a/lib/wx/src/gen/wxHtmlWindow.erl +++ b/lib/wx/src/gen/wxHtmlWindow.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2009-2012. All Rights Reserved. +%% Copyright Ericsson AB 2009-2013. 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 @@ -66,13 +66,13 @@ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, setClientSize/3,setContainingSizer/2,setCursor/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,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, + 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,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, @@ -364,6 +364,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt). %% From wxPanel %% @hidden +setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). +%% @hidden initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden diff --git a/lib/wx/src/gen/wxPanel.erl b/lib/wx/src/gen/wxPanel.erl index 88c1b119a8..30a0e32ffc 100644 --- a/lib/wx/src/gen/wxPanel.erl +++ b/lib/wx/src/gen/wxPanel.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -28,7 +28,7 @@ -module(wxPanel). -include("wxe.hrl"). --export([destroy/1,initDialog/1,new/0,new/1,new/2,new/5,new/6]). +-export([destroy/1,initDialog/1,new/0,new/1,new/2,new/5,new/6,setFocusIgnoringChildren/1]). %% inherited exports -export([cacheBestSize/2,captureMouse/1,center/1,center/2,centerOnParent/1, @@ -137,6 +137,14 @@ initDialog(#wx_ref{type=ThisT,ref=ThisRef}) -> wxe_util:cast(?wxPanel_InitDialog, <<ThisRef:32/?UI>>). +%% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxpanel.html#wxpanelsetfocusignoringchildren">external documentation</a>. +-spec setFocusIgnoringChildren(This) -> ok when + This::wxPanel(). +setFocusIgnoringChildren(#wx_ref{type=ThisT,ref=ThisRef}) -> + ?CLASS(ThisT,wxPanel), + wxe_util:cast(?wxPanel_SetFocusIgnoringChildren, + <<ThisRef:32/?UI>>). + %% @doc Destroys this object, do not use object again -spec destroy(This::wxPanel()) -> ok. destroy(Obj=#wx_ref{type=Type}) -> diff --git a/lib/wx/src/gen/wxPreviewCanvas.erl b/lib/wx/src/gen/wxPreviewCanvas.erl index cc9f43e5e4..7d25ee4bc4 100644 --- a/lib/wx/src/gen/wxPreviewCanvas.erl +++ b/lib/wx/src/gen/wxPreviewCanvas.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -61,13 +61,13 @@ scrollWindow/3,scrollWindow/4,setAcceleratorTable/2,setAutoLayout/2, setBackgroundColour/2,setBackgroundStyle/2,setCaret/2,setClientSize/2, setClientSize/3,setContainingSizer/2,setCursor/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,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, + 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,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, @@ -114,6 +114,8 @@ calcScrolledPosition(This,X,Y) -> wxScrolledWindow:calcScrolledPosition(This,X,Y calcScrolledPosition(This,Pt) -> wxScrolledWindow:calcScrolledPosition(This,Pt). %% From wxPanel %% @hidden +setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). +%% @hidden initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden diff --git a/lib/wx/src/gen/wxPreviewControlBar.erl b/lib/wx/src/gen/wxPreviewControlBar.erl index dce3feb9ea..a56adf9ebe 100644 --- a/lib/wx/src/gen/wxPreviewControlBar.erl +++ b/lib/wx/src/gen/wxPreviewControlBar.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -58,8 +58,8 @@ 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, - setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2, - setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/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,setScrollbar/5,setScrollbar/6, setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, @@ -145,6 +145,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxPanel %% @hidden +setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). +%% @hidden initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden diff --git a/lib/wx/src/gen/wxScrolledWindow.erl b/lib/wx/src/gen/wxScrolledWindow.erl index 9141487a8c..dbc5eb010e 100644 --- a/lib/wx/src/gen/wxScrolledWindow.erl +++ b/lib/wx/src/gen/wxScrolledWindow.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -60,8 +60,8 @@ 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, - setDropTarget/2,setExtraStyle/2,setFocus/1,setFocusFromKbd/1,setFont/2, - setForegroundColour/2,setHelpText/2,setId/2,setLabel/2,setMaxSize/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,setScrollbar/5,setScrollbar/6, setSize/2,setSize/3,setSize/5,setSize/6,setSizeHints/2,setSizeHints/3, @@ -252,6 +252,8 @@ destroy(Obj=#wx_ref{type=Type}) -> ok. %% From wxPanel %% @hidden +setFocusIgnoringChildren(This) -> wxPanel:setFocusIgnoringChildren(This). +%% @hidden initDialog(This) -> wxPanel:initDialog(This). %% From wxWindow %% @hidden diff --git a/lib/wx/src/gen/wxStatusBar.erl b/lib/wx/src/gen/wxStatusBar.erl index 31dab03b56..5e8a707c22 100644 --- a/lib/wx/src/gen/wxStatusBar.erl +++ b/lib/wx/src/gen/wxStatusBar.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -28,7 +28,7 @@ -module(wxStatusBar). -include("wxe.hrl"). --export([create/2,create/3,destroy/1,getFieldRect/3,getFieldsCount/1,getStatusText/1, +-export([create/2,create/3,destroy/1,getFieldRect/2,getFieldsCount/1,getStatusText/1, getStatusText/2,new/0,new/1,new/2,popStatusText/1,popStatusText/2,pushStatusText/2, pushStatusText/3,setFieldsCount/2,setFieldsCount/3,setMinHeight/2, setStatusStyles/2,setStatusText/2,setStatusText/3,setStatusWidths/2]). @@ -132,13 +132,14 @@ create(#wx_ref{type=ThisT,ref=ThisRef},#wx_ref{type=ParentT,ref=ParentRef}, Opti <<ThisRef:32/?UI,ParentRef:32/?UI, BinOpt/binary>>). %% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxstatusbar.html#wxstatusbargetfieldrect">external documentation</a>. --spec getFieldRect(This, I, Rect) -> boolean() when - This::wxStatusBar(), I::integer(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}. -getFieldRect(#wx_ref{type=ThisT,ref=ThisRef},I,{RectX,RectY,RectW,RectH}) - when is_integer(I),is_integer(RectX),is_integer(RectY),is_integer(RectW),is_integer(RectH) -> +-spec getFieldRect(This, I) -> Result when + Result ::{Res ::boolean(), Rect::{X::integer(), Y::integer(), W::integer(), H::integer()}}, + This::wxStatusBar(), I::integer(). +getFieldRect(#wx_ref{type=ThisT,ref=ThisRef},I) + when is_integer(I) -> ?CLASS(ThisT,wxStatusBar), wxe_util:call(?wxStatusBar_GetFieldRect, - <<ThisRef:32/?UI,I:32/?UI,RectX:32/?UI,RectY:32/?UI,RectW:32/?UI,RectH:32/?UI>>). + <<ThisRef:32/?UI,I:32/?UI>>). %% @doc See <a href="http://www.wxwidgets.org/manuals/stable/wx_wxstatusbar.html#wxstatusbargetfieldscount">external documentation</a>. -spec getFieldsCount(This) -> integer() when diff --git a/lib/wx/src/gen/wxe_debug.hrl b/lib/wx/src/gen/wxe_debug.hrl index 29cb2b05e6..eb1f89b845 100644 --- a/lib/wx/src/gen/wxe_debug.hrl +++ b/lib/wx/src/gen/wxe_debug.hrl @@ -241,3069 +241,3070 @@ wxdebug_table() -> {334, {wxPanel, new_2, 2}}, {335, {wxPanel, destruct, 0}}, {336, {wxPanel, initDialog, 0}}, - {337, {wxScrolledWindow, new_0, 0}}, - {338, {wxScrolledWindow, new_2, 2}}, - {339, {wxScrolledWindow, destruct, 0}}, - {340, {wxScrolledWindow, calcScrolledPosition_4, 4}}, - {341, {wxScrolledWindow, calcScrolledPosition_1, 1}}, - {342, {wxScrolledWindow, calcUnscrolledPosition_4, 4}}, - {343, {wxScrolledWindow, calcUnscrolledPosition_1, 1}}, - {344, {wxScrolledWindow, enableScrolling, 2}}, - {345, {wxScrolledWindow, getScrollPixelsPerUnit, 2}}, - {346, {wxScrolledWindow, getViewStart, 2}}, - {347, {wxScrolledWindow, doPrepareDC, 1}}, - {348, {wxScrolledWindow, prepareDC, 1}}, - {349, {wxScrolledWindow, scroll, 2}}, - {350, {wxScrolledWindow, setScrollbars, 5}}, - {351, {wxScrolledWindow, setScrollRate, 2}}, - {352, {wxScrolledWindow, setTargetWindow, 1}}, - {353, {wxSashWindow, new_0, 0}}, - {354, {wxSashWindow, new_2, 2}}, - {355, {wxSashWindow, destruct, 0}}, - {356, {wxSashWindow, getSashVisible, 1}}, - {357, {wxSashWindow, getMaximumSizeX, 0}}, - {358, {wxSashWindow, getMaximumSizeY, 0}}, - {359, {wxSashWindow, getMinimumSizeX, 0}}, - {360, {wxSashWindow, getMinimumSizeY, 0}}, - {361, {wxSashWindow, setMaximumSizeX, 1}}, - {362, {wxSashWindow, setMaximumSizeY, 1}}, - {363, {wxSashWindow, setMinimumSizeX, 1}}, - {364, {wxSashWindow, setMinimumSizeY, 1}}, - {365, {wxSashWindow, setSashVisible, 2}}, - {366, {wxSashLayoutWindow, new_0, 0}}, - {367, {wxSashLayoutWindow, new_2, 2}}, - {368, {wxSashLayoutWindow, create, 2}}, - {369, {wxSashLayoutWindow, getAlignment, 0}}, - {370, {wxSashLayoutWindow, getOrientation, 0}}, - {371, {wxSashLayoutWindow, setAlignment, 1}}, - {372, {wxSashLayoutWindow, setDefaultSize, 1}}, - {373, {wxSashLayoutWindow, setOrientation, 1}}, - {374, {wxSashLayoutWindow, 'Destroy', undefined}}, - {375, {wxGrid, new_0, 0}}, - {376, {wxGrid, new_3, 3}}, - {377, {wxGrid, new_4, 4}}, - {378, {wxGrid, destruct, 0}}, - {379, {wxGrid, appendCols, 1}}, - {380, {wxGrid, appendRows, 1}}, - {381, {wxGrid, autoSize, 0}}, - {382, {wxGrid, autoSizeColumn, 2}}, - {383, {wxGrid, autoSizeColumns, 1}}, - {384, {wxGrid, autoSizeRow, 2}}, - {385, {wxGrid, autoSizeRows, 1}}, - {386, {wxGrid, beginBatch, 0}}, - {387, {wxGrid, blockToDeviceRect, 2}}, - {388, {wxGrid, canDragColSize, 0}}, - {389, {wxGrid, canDragRowSize, 0}}, - {390, {wxGrid, canDragGridSize, 0}}, - {391, {wxGrid, canEnableCellControl, 0}}, - {392, {wxGrid, cellToRect_2, 2}}, - {393, {wxGrid, cellToRect_1, 1}}, - {394, {wxGrid, clearGrid, 0}}, - {395, {wxGrid, clearSelection, 0}}, - {396, {wxGrid, createGrid, 3}}, - {397, {wxGrid, deleteCols, 1}}, - {398, {wxGrid, deleteRows, 1}}, - {399, {wxGrid, disableCellEditControl, 0}}, - {400, {wxGrid, disableDragColSize, 0}}, - {401, {wxGrid, disableDragGridSize, 0}}, - {402, {wxGrid, disableDragRowSize, 0}}, - {403, {wxGrid, enableCellEditControl, 1}}, - {404, {wxGrid, enableDragColSize, 1}}, - {405, {wxGrid, enableDragGridSize, 1}}, - {406, {wxGrid, enableDragRowSize, 1}}, - {407, {wxGrid, enableEditing, 1}}, - {408, {wxGrid, enableGridLines, 1}}, - {409, {wxGrid, endBatch, 0}}, - {410, {wxGrid, fit, 0}}, - {411, {wxGrid, forceRefresh, 0}}, - {412, {wxGrid, getBatchCount, 0}}, - {413, {wxGrid, getCellAlignment, 4}}, - {414, {wxGrid, getCellBackgroundColour, 2}}, - {415, {wxGrid, getCellEditor, 2}}, - {416, {wxGrid, getCellFont, 2}}, - {417, {wxGrid, getCellRenderer, 2}}, - {418, {wxGrid, getCellTextColour, 2}}, - {419, {wxGrid, getCellValue_2, 2}}, - {420, {wxGrid, getCellValue_1, 1}}, - {421, {wxGrid, getColLabelAlignment, 2}}, - {422, {wxGrid, getColLabelSize, 0}}, - {423, {wxGrid, getColLabelValue, 1}}, - {424, {wxGrid, getColMinimalAcceptableWidth, 0}}, - {425, {wxGrid, getDefaultCellAlignment, 2}}, - {426, {wxGrid, getDefaultCellBackgroundColour, 0}}, - {427, {wxGrid, getDefaultCellFont, 0}}, - {428, {wxGrid, getDefaultCellTextColour, 0}}, - {429, {wxGrid, getDefaultColLabelSize, 0}}, - {430, {wxGrid, getDefaultColSize, 0}}, - {431, {wxGrid, getDefaultEditor, 0}}, - {432, {wxGrid, getDefaultEditorForCell_2, 2}}, - {433, {wxGrid, getDefaultEditorForCell_1, 1}}, - {434, {wxGrid, getDefaultEditorForType, 1}}, - {435, {wxGrid, getDefaultRenderer, 0}}, - {436, {wxGrid, getDefaultRendererForCell, 2}}, - {437, {wxGrid, getDefaultRendererForType, 1}}, - {438, {wxGrid, getDefaultRowLabelSize, 0}}, - {439, {wxGrid, getDefaultRowSize, 0}}, - {440, {wxGrid, getGridCursorCol, 0}}, - {441, {wxGrid, getGridCursorRow, 0}}, - {442, {wxGrid, getGridLineColour, 0}}, - {443, {wxGrid, gridLinesEnabled, 0}}, - {444, {wxGrid, getLabelBackgroundColour, 0}}, - {445, {wxGrid, getLabelFont, 0}}, - {446, {wxGrid, getLabelTextColour, 0}}, - {447, {wxGrid, getNumberCols, 0}}, - {448, {wxGrid, getNumberRows, 0}}, - {449, {wxGrid, getOrCreateCellAttr, 2}}, - {450, {wxGrid, getRowMinimalAcceptableHeight, 0}}, - {451, {wxGrid, getRowLabelAlignment, 2}}, - {452, {wxGrid, getRowLabelSize, 0}}, - {453, {wxGrid, getRowLabelValue, 1}}, - {454, {wxGrid, getRowSize, 1}}, - {455, {wxGrid, getScrollLineX, 0}}, - {456, {wxGrid, getScrollLineY, 0}}, - {457, {wxGrid, getSelectedCells, 0}}, - {458, {wxGrid, getSelectedCols, 0}}, - {459, {wxGrid, getSelectedRows, 0}}, - {460, {wxGrid, getSelectionBackground, 0}}, - {461, {wxGrid, getSelectionBlockTopLeft, 0}}, - {462, {wxGrid, getSelectionBlockBottomRight, 0}}, - {463, {wxGrid, getSelectionForeground, 0}}, - {464, {wxGrid, getViewWidth, 0}}, - {465, {wxGrid, getGridWindow, 0}}, - {466, {wxGrid, getGridRowLabelWindow, 0}}, - {467, {wxGrid, getGridColLabelWindow, 0}}, - {468, {wxGrid, getGridCornerLabelWindow, 0}}, - {469, {wxGrid, hideCellEditControl, 0}}, - {470, {wxGrid, insertCols, 1}}, - {471, {wxGrid, insertRows, 1}}, - {472, {wxGrid, isCellEditControlEnabled, 0}}, - {473, {wxGrid, isCurrentCellReadOnly, 0}}, - {474, {wxGrid, isEditable, 0}}, - {475, {wxGrid, isInSelection_2, 2}}, - {476, {wxGrid, isInSelection_1, 1}}, - {477, {wxGrid, isReadOnly, 2}}, - {478, {wxGrid, isSelection, 0}}, - {479, {wxGrid, isVisible_3, 3}}, - {480, {wxGrid, isVisible_2, 2}}, - {481, {wxGrid, makeCellVisible_2, 2}}, - {482, {wxGrid, makeCellVisible_1, 1}}, - {483, {wxGrid, moveCursorDown, 1}}, - {484, {wxGrid, moveCursorLeft, 1}}, - {485, {wxGrid, moveCursorRight, 1}}, - {486, {wxGrid, moveCursorUp, 1}}, - {487, {wxGrid, moveCursorDownBlock, 1}}, - {488, {wxGrid, moveCursorLeftBlock, 1}}, - {489, {wxGrid, moveCursorRightBlock, 1}}, - {490, {wxGrid, moveCursorUpBlock, 1}}, - {491, {wxGrid, movePageDown, 0}}, - {492, {wxGrid, movePageUp, 0}}, - {493, {wxGrid, registerDataType, 3}}, - {494, {wxGrid, saveEditControlValue, 0}}, - {495, {wxGrid, selectAll, 0}}, - {496, {wxGrid, selectBlock_5, 5}}, - {497, {wxGrid, selectBlock_3, 3}}, - {498, {wxGrid, selectCol, 2}}, - {499, {wxGrid, selectRow, 2}}, - {500, {wxGrid, setCellAlignment_4, 4}}, - {501, {wxGrid, setCellAlignment_3, 3}}, - {502, {wxGrid, setCellAlignment_1, 1}}, - {503, {wxGrid, setCellBackgroundColour_3_0, 3}}, - {504, {wxGrid, setCellBackgroundColour_1, 1}}, - {505, {wxGrid, setCellBackgroundColour_3_1, 3}}, - {506, {wxGrid, setCellEditor, 3}}, - {507, {wxGrid, setCellFont, 3}}, - {508, {wxGrid, setCellRenderer, 3}}, - {509, {wxGrid, setCellTextColour_3_0, 3}}, - {510, {wxGrid, setCellTextColour_3_1, 3}}, - {511, {wxGrid, setCellTextColour_1, 1}}, - {512, {wxGrid, setCellValue_3_0, 3}}, - {513, {wxGrid, setCellValue_2, 2}}, - {514, {wxGrid, setCellValue_3_1, 3}}, - {515, {wxGrid, setColAttr, 2}}, - {516, {wxGrid, setColFormatBool, 1}}, - {517, {wxGrid, setColFormatNumber, 1}}, - {518, {wxGrid, setColFormatFloat, 2}}, - {519, {wxGrid, setColFormatCustom, 2}}, - {520, {wxGrid, setColLabelAlignment, 2}}, - {521, {wxGrid, setColLabelSize, 1}}, - {522, {wxGrid, setColLabelValue, 2}}, - {523, {wxGrid, setColMinimalWidth, 2}}, - {524, {wxGrid, setColMinimalAcceptableWidth, 1}}, - {525, {wxGrid, setColSize, 2}}, - {526, {wxGrid, setDefaultCellAlignment, 2}}, - {527, {wxGrid, setDefaultCellBackgroundColour, 1}}, - {528, {wxGrid, setDefaultCellFont, 1}}, - {529, {wxGrid, setDefaultCellTextColour, 1}}, - {530, {wxGrid, setDefaultEditor, 1}}, - {531, {wxGrid, setDefaultRenderer, 1}}, - {532, {wxGrid, setDefaultColSize, 2}}, - {533, {wxGrid, setDefaultRowSize, 2}}, - {534, {wxGrid, setGridCursor, 2}}, - {535, {wxGrid, setGridLineColour, 1}}, - {536, {wxGrid, setLabelBackgroundColour, 1}}, - {537, {wxGrid, setLabelFont, 1}}, - {538, {wxGrid, setLabelTextColour, 1}}, - {539, {wxGrid, setMargins, 2}}, - {540, {wxGrid, setReadOnly, 3}}, - {541, {wxGrid, setRowAttr, 2}}, - {542, {wxGrid, setRowLabelAlignment, 2}}, - {543, {wxGrid, setRowLabelSize, 1}}, - {544, {wxGrid, setRowLabelValue, 2}}, - {545, {wxGrid, setRowMinimalHeight, 2}}, - {546, {wxGrid, setRowMinimalAcceptableHeight, 1}}, - {547, {wxGrid, setRowSize, 2}}, - {548, {wxGrid, setScrollLineX, 1}}, - {549, {wxGrid, setScrollLineY, 1}}, - {550, {wxGrid, setSelectionBackground, 1}}, - {551, {wxGrid, setSelectionForeground, 1}}, - {552, {wxGrid, setSelectionMode, 1}}, - {553, {wxGrid, showCellEditControl, 0}}, - {554, {wxGrid, xToCol, 2}}, - {555, {wxGrid, xToEdgeOfCol, 1}}, - {556, {wxGrid, yToEdgeOfRow, 1}}, - {557, {wxGrid, yToRow, 1}}, - {558, {wxGridCellRenderer, draw, 7}}, - {559, {wxGridCellRenderer, getBestSize, 5}}, - {560, {wxGridCellEditor, create, 3}}, - {561, {wxGridCellEditor, isCreated, 0}}, - {562, {wxGridCellEditor, setSize, 1}}, - {563, {wxGridCellEditor, show, 2}}, - {564, {wxGridCellEditor, paintBackground, 2}}, - {565, {wxGridCellEditor, beginEdit, 3}}, - {566, {wxGridCellEditor, endEdit, 3}}, - {567, {wxGridCellEditor, reset, 0}}, - {568, {wxGridCellEditor, startingKey, 1}}, - {569, {wxGridCellEditor, startingClick, 0}}, - {570, {wxGridCellEditor, handleReturn, 1}}, - {571, {wxGridCellBoolRenderer, new, 0}}, - {572, {wxGridCellBoolRenderer, 'Destroy', undefined}}, - {573, {wxGridCellBoolEditor, new, 0}}, - {574, {wxGridCellBoolEditor, isTrueValue, 1}}, - {575, {wxGridCellBoolEditor, useStringValues, 1}}, - {576, {wxGridCellBoolEditor, 'Destroy', undefined}}, - {577, {wxGridCellFloatRenderer, new, 1}}, - {578, {wxGridCellFloatRenderer, getPrecision, 0}}, - {579, {wxGridCellFloatRenderer, getWidth, 0}}, - {580, {wxGridCellFloatRenderer, setParameters, 1}}, - {581, {wxGridCellFloatRenderer, setPrecision, 1}}, - {582, {wxGridCellFloatRenderer, setWidth, 1}}, - {583, {wxGridCellFloatRenderer, 'Destroy', undefined}}, - {584, {wxGridCellFloatEditor, new, 1}}, - {585, {wxGridCellFloatEditor, setParameters, 1}}, - {586, {wxGridCellFloatEditor, 'Destroy', undefined}}, - {587, {wxGridCellStringRenderer, new, 0}}, - {588, {wxGridCellStringRenderer, 'Destroy', undefined}}, - {589, {wxGridCellTextEditor, new, 0}}, - {590, {wxGridCellTextEditor, setParameters, 1}}, - {591, {wxGridCellTextEditor, 'Destroy', undefined}}, - {593, {wxGridCellChoiceEditor, new, 2}}, - {594, {wxGridCellChoiceEditor, setParameters, 1}}, - {595, {wxGridCellChoiceEditor, 'Destroy', undefined}}, - {596, {wxGridCellNumberRenderer, new, 0}}, - {597, {wxGridCellNumberRenderer, 'Destroy', undefined}}, - {598, {wxGridCellNumberEditor, new, 1}}, - {599, {wxGridCellNumberEditor, getValue, 0}}, - {600, {wxGridCellNumberEditor, setParameters, 1}}, - {601, {wxGridCellNumberEditor, 'Destroy', undefined}}, - {602, {wxGridCellAttr, setTextColour, 1}}, - {603, {wxGridCellAttr, setBackgroundColour, 1}}, - {604, {wxGridCellAttr, setFont, 1}}, - {605, {wxGridCellAttr, setAlignment, 2}}, - {606, {wxGridCellAttr, setReadOnly, 1}}, - {607, {wxGridCellAttr, setRenderer, 1}}, - {608, {wxGridCellAttr, setEditor, 1}}, - {609, {wxGridCellAttr, hasTextColour, 0}}, - {610, {wxGridCellAttr, hasBackgroundColour, 0}}, - {611, {wxGridCellAttr, hasFont, 0}}, - {612, {wxGridCellAttr, hasAlignment, 0}}, - {613, {wxGridCellAttr, hasRenderer, 0}}, - {614, {wxGridCellAttr, hasEditor, 0}}, - {615, {wxGridCellAttr, getTextColour, 0}}, - {616, {wxGridCellAttr, getBackgroundColour, 0}}, - {617, {wxGridCellAttr, getFont, 0}}, - {618, {wxGridCellAttr, getAlignment, 2}}, - {619, {wxGridCellAttr, getRenderer, 3}}, - {620, {wxGridCellAttr, getEditor, 3}}, - {621, {wxGridCellAttr, isReadOnly, 0}}, - {622, {wxGridCellAttr, setDefAttr, 1}}, - {623, {wxDC, blit, 5}}, - {624, {wxDC, calcBoundingBox, 2}}, - {625, {wxDC, clear, 0}}, - {626, {wxDC, computeScaleAndOrigin, 0}}, - {627, {wxDC, crossHair, 1}}, - {628, {wxDC, destroyClippingRegion, 0}}, - {629, {wxDC, deviceToLogicalX, 1}}, - {630, {wxDC, deviceToLogicalXRel, 1}}, - {631, {wxDC, deviceToLogicalY, 1}}, - {632, {wxDC, deviceToLogicalYRel, 1}}, - {633, {wxDC, drawArc, 3}}, - {634, {wxDC, drawBitmap, 3}}, - {635, {wxDC, drawCheckMark, 1}}, - {636, {wxDC, drawCircle, 2}}, - {638, {wxDC, drawEllipse_2, 2}}, - {639, {wxDC, drawEllipse_1, 1}}, - {640, {wxDC, drawEllipticArc, 4}}, - {641, {wxDC, drawIcon, 2}}, - {642, {wxDC, drawLabel, 3}}, - {643, {wxDC, drawLine, 2}}, - {644, {wxDC, drawLines, 3}}, - {646, {wxDC, drawPolygon, 3}}, - {648, {wxDC, drawPoint, 1}}, - {650, {wxDC, drawRectangle_2, 2}}, - {651, {wxDC, drawRectangle_1, 1}}, - {652, {wxDC, drawRotatedText, 3}}, - {654, {wxDC, drawRoundedRectangle_3, 3}}, - {655, {wxDC, drawRoundedRectangle_2, 2}}, - {656, {wxDC, drawText, 2}}, - {657, {wxDC, endDoc, 0}}, - {658, {wxDC, endPage, 0}}, - {659, {wxDC, floodFill, 3}}, - {660, {wxDC, getBackground, 0}}, - {661, {wxDC, getBackgroundMode, 0}}, - {662, {wxDC, getBrush, 0}}, - {663, {wxDC, getCharHeight, 0}}, - {664, {wxDC, getCharWidth, 0}}, - {665, {wxDC, getClippingBox, 4}}, - {667, {wxDC, getFont, 0}}, - {668, {wxDC, getLayoutDirection, 0}}, - {669, {wxDC, getLogicalFunction, 0}}, - {670, {wxDC, getMapMode, 0}}, - {671, {wxDC, getMultiLineTextExtent_4, 4}}, - {672, {wxDC, getMultiLineTextExtent_1, 1}}, - {673, {wxDC, getPartialTextExtents, 2}}, - {674, {wxDC, getPen, 0}}, - {675, {wxDC, getPixel, 2}}, - {676, {wxDC, getPPI, 0}}, - {678, {wxDC, getSize, 0}}, - {680, {wxDC, getSizeMM, 0}}, - {681, {wxDC, getTextBackground, 0}}, - {682, {wxDC, getTextExtent_4, 4}}, - {683, {wxDC, getTextExtent_1, 1}}, - {685, {wxDC, getTextForeground, 0}}, - {686, {wxDC, getUserScale, 2}}, - {687, {wxDC, gradientFillConcentric_3, 3}}, - {688, {wxDC, gradientFillConcentric_4, 4}}, - {689, {wxDC, gradientFillLinear, 4}}, - {690, {wxDC, logicalToDeviceX, 1}}, - {691, {wxDC, logicalToDeviceXRel, 1}}, - {692, {wxDC, logicalToDeviceY, 1}}, - {693, {wxDC, logicalToDeviceYRel, 1}}, - {694, {wxDC, maxX, 0}}, - {695, {wxDC, maxY, 0}}, - {696, {wxDC, minX, 0}}, - {697, {wxDC, minY, 0}}, - {698, {wxDC, isOk, 0}}, - {699, {wxDC, resetBoundingBox, 0}}, - {700, {wxDC, setAxisOrientation, 2}}, - {701, {wxDC, setBackground, 1}}, - {702, {wxDC, setBackgroundMode, 1}}, - {703, {wxDC, setBrush, 1}}, - {705, {wxDC, setClippingRegion_2, 2}}, - {706, {wxDC, setClippingRegion_1_1, 1}}, - {707, {wxDC, setClippingRegion_1_0, 1}}, - {708, {wxDC, setDeviceOrigin, 2}}, - {709, {wxDC, setFont, 1}}, - {710, {wxDC, setLayoutDirection, 1}}, - {711, {wxDC, setLogicalFunction, 1}}, - {712, {wxDC, setMapMode, 1}}, - {713, {wxDC, setPalette, 1}}, - {714, {wxDC, setPen, 1}}, - {715, {wxDC, setTextBackground, 1}}, - {716, {wxDC, setTextForeground, 1}}, - {717, {wxDC, setUserScale, 2}}, - {718, {wxDC, startDoc, 1}}, - {719, {wxDC, startPage, 0}}, - {720, {wxMirrorDC, new, 2}}, - {721, {wxMirrorDC, 'Destroy', undefined}}, - {722, {wxScreenDC, new, 0}}, - {723, {wxScreenDC, destruct, 0}}, - {724, {wxPostScriptDC, new_0, 0}}, - {725, {wxPostScriptDC, new_1, 1}}, - {726, {wxPostScriptDC, destruct, 0}}, - {727, {wxPostScriptDC, setResolution, 1}}, - {728, {wxPostScriptDC, getResolution, 0}}, - {729, {wxWindowDC, new_0, 0}}, - {730, {wxWindowDC, new_1, 1}}, - {731, {wxWindowDC, destruct, 0}}, - {732, {wxClientDC, new_0, 0}}, - {733, {wxClientDC, new_1, 1}}, - {734, {wxClientDC, 'Destroy', undefined}}, - {735, {wxPaintDC, new_0, 0}}, - {736, {wxPaintDC, new_1, 1}}, - {737, {wxPaintDC, 'Destroy', undefined}}, - {739, {wxMemoryDC, new_1_0, 1}}, - {740, {wxMemoryDC, new_1_1, 1}}, - {741, {wxMemoryDC, new_0, 0}}, - {743, {wxMemoryDC, destruct, 0}}, - {744, {wxMemoryDC, selectObject, 1}}, - {745, {wxMemoryDC, selectObjectAsSource, 1}}, - {746, {wxBufferedDC, new_0, 0}}, - {747, {wxBufferedDC, new_2, 2}}, - {748, {wxBufferedDC, new_3, 3}}, - {749, {wxBufferedDC, destruct, 0}}, - {750, {wxBufferedDC, init_2, 2}}, - {751, {wxBufferedDC, init_3, 3}}, - {752, {wxBufferedPaintDC, new_3, 3}}, - {753, {wxBufferedPaintDC, new_2, 2}}, - {754, {wxBufferedPaintDC, destruct, 0}}, - {755, {wxGraphicsObject, destruct, 0}}, - {756, {wxGraphicsObject, getRenderer, 0}}, - {757, {wxGraphicsObject, isNull, 0}}, - {758, {wxGraphicsContext, destruct, 0}}, - {759, {wxGraphicsContext, create_1_1, 1}}, - {760, {wxGraphicsContext, create_1_0, 1}}, - {761, {wxGraphicsContext, create_0, 0}}, - {762, {wxGraphicsContext, createPen, 1}}, - {763, {wxGraphicsContext, createBrush, 1}}, - {764, {wxGraphicsContext, createRadialGradientBrush, 7}}, - {765, {wxGraphicsContext, createLinearGradientBrush, 6}}, - {766, {wxGraphicsContext, createFont, 2}}, - {767, {wxGraphicsContext, createMatrix, 1}}, - {768, {wxGraphicsContext, createPath, 0}}, - {769, {wxGraphicsContext, clip_1, 1}}, - {770, {wxGraphicsContext, clip_4, 4}}, - {771, {wxGraphicsContext, resetClip, 0}}, - {772, {wxGraphicsContext, drawBitmap, 5}}, - {773, {wxGraphicsContext, drawEllipse, 4}}, - {774, {wxGraphicsContext, drawIcon, 5}}, - {775, {wxGraphicsContext, drawLines, 3}}, - {776, {wxGraphicsContext, drawPath, 2}}, - {777, {wxGraphicsContext, drawRectangle, 4}}, - {778, {wxGraphicsContext, drawRoundedRectangle, 5}}, - {779, {wxGraphicsContext, drawText_3, 3}}, - {780, {wxGraphicsContext, drawText_4_0, 4}}, - {781, {wxGraphicsContext, drawText_4_1, 4}}, - {782, {wxGraphicsContext, drawText_5, 5}}, - {783, {wxGraphicsContext, fillPath, 2}}, - {784, {wxGraphicsContext, strokePath, 1}}, - {785, {wxGraphicsContext, getPartialTextExtents, 2}}, - {786, {wxGraphicsContext, getTextExtent, 5}}, - {787, {wxGraphicsContext, rotate, 1}}, - {788, {wxGraphicsContext, scale, 2}}, - {789, {wxGraphicsContext, translate, 2}}, - {790, {wxGraphicsContext, getTransform, 0}}, - {791, {wxGraphicsContext, setTransform, 1}}, - {792, {wxGraphicsContext, concatTransform, 1}}, - {793, {wxGraphicsContext, setBrush_1_1, 1}}, - {794, {wxGraphicsContext, setBrush_1_0, 1}}, - {795, {wxGraphicsContext, setFont_1, 1}}, - {796, {wxGraphicsContext, setFont_2, 2}}, - {797, {wxGraphicsContext, setPen_1_0, 1}}, - {798, {wxGraphicsContext, setPen_1_1, 1}}, - {799, {wxGraphicsContext, strokeLine, 4}}, - {800, {wxGraphicsContext, strokeLines, 2}}, - {802, {wxGraphicsMatrix, concat, 1}}, - {804, {wxGraphicsMatrix, get, 1}}, - {805, {wxGraphicsMatrix, invert, 0}}, - {806, {wxGraphicsMatrix, isEqual, 1}}, - {808, {wxGraphicsMatrix, isIdentity, 0}}, - {809, {wxGraphicsMatrix, rotate, 1}}, - {810, {wxGraphicsMatrix, scale, 2}}, - {811, {wxGraphicsMatrix, translate, 2}}, - {812, {wxGraphicsMatrix, set, 1}}, - {813, {wxGraphicsMatrix, transformPoint, 2}}, - {814, {wxGraphicsMatrix, transformDistance, 2}}, - {815, {wxGraphicsPath, moveToPoint_2, 2}}, - {816, {wxGraphicsPath, moveToPoint_1, 1}}, - {817, {wxGraphicsPath, addArc_6, 6}}, - {818, {wxGraphicsPath, addArc_5, 5}}, - {819, {wxGraphicsPath, addArcToPoint, 5}}, - {820, {wxGraphicsPath, addCircle, 3}}, - {821, {wxGraphicsPath, addCurveToPoint_6, 6}}, - {822, {wxGraphicsPath, addCurveToPoint_3, 3}}, - {823, {wxGraphicsPath, addEllipse, 4}}, - {824, {wxGraphicsPath, addLineToPoint_2, 2}}, - {825, {wxGraphicsPath, addLineToPoint_1, 1}}, - {826, {wxGraphicsPath, addPath, 1}}, - {827, {wxGraphicsPath, addQuadCurveToPoint, 4}}, - {828, {wxGraphicsPath, addRectangle, 4}}, - {829, {wxGraphicsPath, addRoundedRectangle, 5}}, - {830, {wxGraphicsPath, closeSubpath, 0}}, - {831, {wxGraphicsPath, contains_3, 3}}, - {832, {wxGraphicsPath, contains_2, 2}}, - {834, {wxGraphicsPath, getBox, 0}}, - {836, {wxGraphicsPath, getCurrentPoint, 0}}, - {837, {wxGraphicsPath, transform, 1}}, - {838, {wxGraphicsRenderer, getDefaultRenderer, 0}}, - {839, {wxGraphicsRenderer, createContext_1_1, 1}}, - {840, {wxGraphicsRenderer, createContext_1_0, 1}}, - {841, {wxGraphicsRenderer, createPen, 1}}, - {842, {wxGraphicsRenderer, createBrush, 1}}, - {843, {wxGraphicsRenderer, createLinearGradientBrush, 6}}, - {844, {wxGraphicsRenderer, createRadialGradientBrush, 7}}, - {845, {wxGraphicsRenderer, createFont, 2}}, - {846, {wxGraphicsRenderer, createMatrix, 1}}, - {847, {wxGraphicsRenderer, createPath, 0}}, - {849, {wxMenuBar, new_1, 1}}, - {851, {wxMenuBar, new_0, 0}}, - {853, {wxMenuBar, destruct, 0}}, - {854, {wxMenuBar, append, 2}}, - {855, {wxMenuBar, check, 2}}, - {856, {wxMenuBar, enable_2, 2}}, - {857, {wxMenuBar, enable_1, 1}}, - {858, {wxMenuBar, enableTop, 2}}, - {859, {wxMenuBar, findMenu, 1}}, - {860, {wxMenuBar, findMenuItem, 2}}, - {861, {wxMenuBar, findItem, 2}}, - {862, {wxMenuBar, getHelpString, 1}}, - {863, {wxMenuBar, getLabel_1, 1}}, - {864, {wxMenuBar, getLabel_0, 0}}, - {865, {wxMenuBar, getLabelTop, 1}}, - {866, {wxMenuBar, getMenu, 1}}, - {867, {wxMenuBar, getMenuCount, 0}}, - {868, {wxMenuBar, insert, 3}}, - {869, {wxMenuBar, isChecked, 1}}, - {870, {wxMenuBar, isEnabled_1, 1}}, - {871, {wxMenuBar, isEnabled_0, 0}}, - {872, {wxMenuBar, remove, 1}}, - {873, {wxMenuBar, replace, 3}}, - {874, {wxMenuBar, setHelpString, 2}}, - {875, {wxMenuBar, setLabel_2, 2}}, - {876, {wxMenuBar, setLabel_1, 1}}, - {877, {wxMenuBar, setLabelTop, 2}}, - {878, {wxControl, getLabel, 0}}, - {879, {wxControl, setLabel, 1}}, - {880, {wxControlWithItems, append_1, 1}}, - {881, {wxControlWithItems, append_2, 2}}, - {882, {wxControlWithItems, appendStrings_1, 1}}, - {883, {wxControlWithItems, clear, 0}}, - {884, {wxControlWithItems, delete, 1}}, - {885, {wxControlWithItems, findString, 2}}, - {886, {wxControlWithItems, getClientData, 1}}, - {887, {wxControlWithItems, setClientData, 2}}, - {888, {wxControlWithItems, getCount, 0}}, - {889, {wxControlWithItems, getSelection, 0}}, - {890, {wxControlWithItems, getString, 1}}, - {891, {wxControlWithItems, getStringSelection, 0}}, - {892, {wxControlWithItems, insert_2, 2}}, - {893, {wxControlWithItems, insert_3, 3}}, - {894, {wxControlWithItems, isEmpty, 0}}, - {895, {wxControlWithItems, select, 1}}, - {896, {wxControlWithItems, setSelection, 1}}, - {897, {wxControlWithItems, setString, 2}}, - {898, {wxControlWithItems, setStringSelection, 1}}, - {901, {wxMenu, new_2, 2}}, - {902, {wxMenu, new_1, 1}}, - {904, {wxMenu, destruct, 0}}, - {905, {wxMenu, append_3, 3}}, - {906, {wxMenu, append_1, 1}}, - {907, {wxMenu, append_4_0, 4}}, - {908, {wxMenu, append_4_1, 4}}, - {909, {wxMenu, appendCheckItem, 3}}, - {910, {wxMenu, appendRadioItem, 3}}, - {911, {wxMenu, appendSeparator, 0}}, - {912, {wxMenu, break, 0}}, - {913, {wxMenu, check, 2}}, - {914, {wxMenu, delete_1_0, 1}}, - {915, {wxMenu, delete_1_1, 1}}, - {916, {wxMenu, destroy_1_0, 1}}, - {917, {wxMenu, destroy_1_1, 1}}, - {918, {wxMenu, enable, 2}}, - {919, {wxMenu, findItem_1, 1}}, - {920, {wxMenu, findItem_2, 2}}, - {921, {wxMenu, findItemByPosition, 1}}, - {922, {wxMenu, getHelpString, 1}}, - {923, {wxMenu, getLabel, 1}}, - {924, {wxMenu, getMenuItemCount, 0}}, - {925, {wxMenu, getMenuItems, 0}}, - {927, {wxMenu, getTitle, 0}}, - {928, {wxMenu, insert_2, 2}}, - {929, {wxMenu, insert_3, 3}}, - {930, {wxMenu, insert_5_1, 5}}, - {931, {wxMenu, insert_5_0, 5}}, - {932, {wxMenu, insertCheckItem, 4}}, - {933, {wxMenu, insertRadioItem, 4}}, - {934, {wxMenu, insertSeparator, 1}}, - {935, {wxMenu, isChecked, 1}}, - {936, {wxMenu, isEnabled, 1}}, - {937, {wxMenu, prepend_1, 1}}, - {938, {wxMenu, prepend_2, 2}}, - {939, {wxMenu, prepend_4_1, 4}}, - {940, {wxMenu, prepend_4_0, 4}}, - {941, {wxMenu, prependCheckItem, 3}}, - {942, {wxMenu, prependRadioItem, 3}}, - {943, {wxMenu, prependSeparator, 0}}, - {944, {wxMenu, remove_1_0, 1}}, - {945, {wxMenu, remove_1_1, 1}}, - {946, {wxMenu, setHelpString, 2}}, - {947, {wxMenu, setLabel, 2}}, - {948, {wxMenu, setTitle, 1}}, - {949, {wxMenuItem, new, 1}}, - {951, {wxMenuItem, destruct, 0}}, - {952, {wxMenuItem, check, 1}}, - {953, {wxMenuItem, enable, 1}}, - {954, {wxMenuItem, getBitmap, 0}}, - {955, {wxMenuItem, getHelp, 0}}, - {956, {wxMenuItem, getId, 0}}, - {957, {wxMenuItem, getKind, 0}}, - {958, {wxMenuItem, getLabel, 0}}, - {959, {wxMenuItem, getLabelFromText, 1}}, - {960, {wxMenuItem, getMenu, 0}}, - {961, {wxMenuItem, getText, 0}}, - {962, {wxMenuItem, getSubMenu, 0}}, - {963, {wxMenuItem, isCheckable, 0}}, - {964, {wxMenuItem, isChecked, 0}}, - {965, {wxMenuItem, isEnabled, 0}}, - {966, {wxMenuItem, isSeparator, 0}}, - {967, {wxMenuItem, isSubMenu, 0}}, - {968, {wxMenuItem, setBitmap, 1}}, - {969, {wxMenuItem, setHelp, 1}}, - {970, {wxMenuItem, setMenu, 1}}, - {971, {wxMenuItem, setSubMenu, 1}}, - {972, {wxMenuItem, setText, 1}}, - {973, {wxToolBar, addControl, 1}}, - {974, {wxToolBar, addSeparator, 0}}, - {975, {wxToolBar, addTool_5, 5}}, - {976, {wxToolBar, addTool_4_0, 4}}, - {977, {wxToolBar, addTool_1, 1}}, - {978, {wxToolBar, addTool_4_1, 4}}, - {979, {wxToolBar, addTool_3, 3}}, - {980, {wxToolBar, addTool_6, 6}}, - {981, {wxToolBar, addCheckTool, 4}}, - {982, {wxToolBar, addRadioTool, 4}}, - {983, {wxToolBar, deleteTool, 1}}, - {984, {wxToolBar, deleteToolByPos, 1}}, - {985, {wxToolBar, enableTool, 2}}, - {986, {wxToolBar, findById, 1}}, - {987, {wxToolBar, findControl, 1}}, - {988, {wxToolBar, findToolForPosition, 2}}, - {989, {wxToolBar, getToolSize, 0}}, - {990, {wxToolBar, getToolBitmapSize, 0}}, - {991, {wxToolBar, getMargins, 0}}, - {992, {wxToolBar, getToolEnabled, 1}}, - {993, {wxToolBar, getToolLongHelp, 1}}, - {994, {wxToolBar, getToolPacking, 0}}, - {995, {wxToolBar, getToolPos, 1}}, - {996, {wxToolBar, getToolSeparation, 0}}, - {997, {wxToolBar, getToolShortHelp, 1}}, - {998, {wxToolBar, getToolState, 1}}, - {999, {wxToolBar, insertControl, 2}}, - {1000, {wxToolBar, insertSeparator, 1}}, - {1001, {wxToolBar, insertTool_5, 5}}, - {1002, {wxToolBar, insertTool_2, 2}}, - {1003, {wxToolBar, insertTool_4, 4}}, - {1004, {wxToolBar, realize, 0}}, - {1005, {wxToolBar, removeTool, 1}}, - {1006, {wxToolBar, setMargins, 2}}, - {1007, {wxToolBar, setToolBitmapSize, 1}}, - {1008, {wxToolBar, setToolLongHelp, 2}}, - {1009, {wxToolBar, setToolPacking, 1}}, - {1010, {wxToolBar, setToolShortHelp, 2}}, - {1011, {wxToolBar, setToolSeparation, 1}}, - {1012, {wxToolBar, toggleTool, 2}}, - {1014, {wxStatusBar, new_0, 0}}, - {1015, {wxStatusBar, new_2, 2}}, - {1017, {wxStatusBar, destruct, 0}}, - {1018, {wxStatusBar, create, 2}}, - {1019, {wxStatusBar, getFieldRect, 2}}, - {1020, {wxStatusBar, getFieldsCount, 0}}, - {1021, {wxStatusBar, getStatusText, 1}}, - {1022, {wxStatusBar, popStatusText, 1}}, - {1023, {wxStatusBar, pushStatusText, 2}}, - {1024, {wxStatusBar, setFieldsCount, 2}}, - {1025, {wxStatusBar, setMinHeight, 1}}, - {1026, {wxStatusBar, setStatusText, 2}}, - {1027, {wxStatusBar, setStatusWidths, 2}}, - {1028, {wxStatusBar, setStatusStyles, 2}}, - {1029, {wxBitmap, new_0, 0}}, - {1030, {wxBitmap, new_3, 3}}, - {1031, {wxBitmap, new_4, 4}}, - {1032, {wxBitmap, new_2_0, 2}}, - {1033, {wxBitmap, new_2_1, 2}}, - {1034, {wxBitmap, destruct, 0}}, - {1035, {wxBitmap, convertToImage, 0}}, - {1036, {wxBitmap, copyFromIcon, 1}}, - {1037, {wxBitmap, create, 3}}, - {1038, {wxBitmap, getDepth, 0}}, - {1039, {wxBitmap, getHeight, 0}}, - {1040, {wxBitmap, getPalette, 0}}, - {1041, {wxBitmap, getMask, 0}}, - {1042, {wxBitmap, getWidth, 0}}, - {1043, {wxBitmap, getSubBitmap, 1}}, - {1044, {wxBitmap, loadFile, 2}}, - {1045, {wxBitmap, ok, 0}}, - {1046, {wxBitmap, saveFile, 3}}, - {1047, {wxBitmap, setDepth, 1}}, - {1048, {wxBitmap, setHeight, 1}}, - {1049, {wxBitmap, setMask, 1}}, - {1050, {wxBitmap, setPalette, 1}}, - {1051, {wxBitmap, setWidth, 1}}, - {1052, {wxIcon, new_0, 0}}, - {1053, {wxIcon, new_2, 2}}, - {1054, {wxIcon, new_1, 1}}, - {1055, {wxIcon, copyFromBitmap, 1}}, - {1056, {wxIcon, 'Destroy', undefined}}, - {1057, {wxIconBundle, new_0, 0}}, - {1058, {wxIconBundle, new_2, 2}}, - {1059, {wxIconBundle, new_1_0, 1}}, - {1060, {wxIconBundle, new_1_1, 1}}, - {1061, {wxIconBundle, destruct, 0}}, - {1062, {wxIconBundle, addIcon_2, 2}}, - {1063, {wxIconBundle, addIcon_1, 1}}, - {1064, {wxIconBundle, getIcon_1_1, 1}}, - {1065, {wxIconBundle, getIcon_1_0, 1}}, - {1066, {wxCursor, new_0, 0}}, - {1067, {wxCursor, new_1_0, 1}}, - {1068, {wxCursor, new_1_1, 1}}, - {1069, {wxCursor, new_4, 4}}, - {1070, {wxCursor, destruct, 0}}, - {1071, {wxCursor, ok, 0}}, - {1072, {wxMask, new_0, 0}}, - {1073, {wxMask, new_2_1, 2}}, - {1074, {wxMask, new_2_0, 2}}, - {1075, {wxMask, new_1, 1}}, - {1076, {wxMask, destruct, 0}}, - {1077, {wxMask, create_2_1, 2}}, - {1078, {wxMask, create_2_0, 2}}, - {1079, {wxMask, create_1, 1}}, - {1080, {wxImage, new_0, 0}}, - {1081, {wxImage, new_3_0, 3}}, - {1082, {wxImage, new_4, 4}}, - {1083, {wxImage, new_5, 5}}, - {1084, {wxImage, new_2, 2}}, - {1085, {wxImage, new_3_1, 3}}, - {1086, {wxImage, blur, 1}}, - {1087, {wxImage, blurHorizontal, 1}}, - {1088, {wxImage, blurVertical, 1}}, - {1089, {wxImage, convertAlphaToMask, 1}}, - {1090, {wxImage, convertToGreyscale, 1}}, - {1091, {wxImage, convertToMono, 3}}, - {1092, {wxImage, copy, 0}}, - {1093, {wxImage, create_3, 3}}, - {1094, {wxImage, create_4, 4}}, - {1095, {wxImage, create_5, 5}}, - {1096, {wxImage, 'Destroy', 0}}, - {1097, {wxImage, findFirstUnusedColour, 4}}, - {1098, {wxImage, getImageExtWildcard, 0}}, - {1099, {wxImage, getAlpha_2, 2}}, - {1100, {wxImage, getAlpha_0, 0}}, - {1101, {wxImage, getBlue, 2}}, - {1102, {wxImage, getData, 0}}, - {1103, {wxImage, getGreen, 2}}, - {1104, {wxImage, getImageCount, 2}}, - {1105, {wxImage, getHeight, 0}}, - {1106, {wxImage, getMaskBlue, 0}}, - {1107, {wxImage, getMaskGreen, 0}}, - {1108, {wxImage, getMaskRed, 0}}, - {1109, {wxImage, getOrFindMaskColour, 3}}, - {1110, {wxImage, getPalette, 0}}, - {1111, {wxImage, getRed, 2}}, - {1112, {wxImage, getSubImage, 1}}, - {1113, {wxImage, getWidth, 0}}, - {1114, {wxImage, hasAlpha, 0}}, - {1115, {wxImage, hasMask, 0}}, - {1116, {wxImage, getOption, 1}}, - {1117, {wxImage, getOptionInt, 1}}, - {1118, {wxImage, hasOption, 1}}, - {1119, {wxImage, initAlpha, 0}}, - {1120, {wxImage, initStandardHandlers, 0}}, - {1121, {wxImage, isTransparent, 3}}, - {1122, {wxImage, loadFile_2, 2}}, - {1123, {wxImage, loadFile_3, 3}}, - {1124, {wxImage, ok, 0}}, - {1125, {wxImage, removeHandler, 1}}, - {1126, {wxImage, mirror, 1}}, - {1127, {wxImage, replace, 6}}, - {1128, {wxImage, rescale, 3}}, - {1129, {wxImage, resize, 3}}, - {1130, {wxImage, rotate, 3}}, - {1131, {wxImage, rotateHue, 1}}, - {1132, {wxImage, rotate90, 1}}, - {1133, {wxImage, saveFile_1, 1}}, - {1134, {wxImage, saveFile_2_0, 2}}, - {1135, {wxImage, saveFile_2_1, 2}}, - {1136, {wxImage, scale, 3}}, - {1137, {wxImage, size, 3}}, - {1138, {wxImage, setAlpha_3, 3}}, - {1139, {wxImage, setAlpha_2, 2}}, - {1140, {wxImage, setData_2, 2}}, - {1141, {wxImage, setData_4, 4}}, - {1142, {wxImage, setMask, 1}}, - {1143, {wxImage, setMaskColour, 3}}, - {1144, {wxImage, setMaskFromImage, 4}}, - {1145, {wxImage, setOption_2_1, 2}}, - {1146, {wxImage, setOption_2_0, 2}}, - {1147, {wxImage, setPalette, 1}}, - {1148, {wxImage, setRGB_5, 5}}, - {1149, {wxImage, setRGB_4, 4}}, - {1150, {wxImage, 'Destroy', undefined}}, - {1151, {wxBrush, new_0, 0}}, - {1152, {wxBrush, new_2, 2}}, - {1153, {wxBrush, new_1, 1}}, - {1155, {wxBrush, destruct, 0}}, - {1156, {wxBrush, getColour, 0}}, - {1157, {wxBrush, getStipple, 0}}, - {1158, {wxBrush, getStyle, 0}}, - {1159, {wxBrush, isHatch, 0}}, - {1160, {wxBrush, isOk, 0}}, - {1161, {wxBrush, setColour_1, 1}}, - {1162, {wxBrush, setColour_3, 3}}, - {1163, {wxBrush, setStipple, 1}}, - {1164, {wxBrush, setStyle, 1}}, - {1165, {wxPen, new_0, 0}}, - {1166, {wxPen, new_2, 2}}, - {1167, {wxPen, destruct, 0}}, - {1168, {wxPen, getCap, 0}}, - {1169, {wxPen, getColour, 0}}, - {1170, {wxPen, getJoin, 0}}, - {1171, {wxPen, getStyle, 0}}, - {1172, {wxPen, getWidth, 0}}, - {1173, {wxPen, isOk, 0}}, - {1174, {wxPen, setCap, 1}}, - {1175, {wxPen, setColour_1, 1}}, - {1176, {wxPen, setColour_3, 3}}, - {1177, {wxPen, setJoin, 1}}, - {1178, {wxPen, setStyle, 1}}, - {1179, {wxPen, setWidth, 1}}, - {1180, {wxRegion, new_0, 0}}, - {1181, {wxRegion, new_4, 4}}, - {1182, {wxRegion, new_2, 2}}, - {1183, {wxRegion, new_1_1, 1}}, - {1185, {wxRegion, new_1_0, 1}}, - {1187, {wxRegion, destruct, 0}}, - {1188, {wxRegion, clear, 0}}, - {1189, {wxRegion, contains_2, 2}}, - {1190, {wxRegion, contains_1_0, 1}}, - {1191, {wxRegion, contains_4, 4}}, - {1192, {wxRegion, contains_1_1, 1}}, - {1193, {wxRegion, convertToBitmap, 0}}, - {1194, {wxRegion, getBox, 0}}, - {1195, {wxRegion, intersect_4, 4}}, - {1196, {wxRegion, intersect_1_1, 1}}, - {1197, {wxRegion, intersect_1_0, 1}}, - {1198, {wxRegion, isEmpty, 0}}, - {1199, {wxRegion, subtract_4, 4}}, - {1200, {wxRegion, subtract_1_1, 1}}, - {1201, {wxRegion, subtract_1_0, 1}}, - {1202, {wxRegion, offset_2, 2}}, - {1203, {wxRegion, offset_1, 1}}, - {1204, {wxRegion, union_4, 4}}, - {1205, {wxRegion, union_1_2, 1}}, - {1206, {wxRegion, union_1_1, 1}}, - {1207, {wxRegion, union_1_0, 1}}, - {1208, {wxRegion, union_3, 3}}, - {1209, {wxRegion, xor_4, 4}}, - {1210, {wxRegion, xor_1_1, 1}}, - {1211, {wxRegion, xor_1_0, 1}}, - {1212, {wxAcceleratorTable, new_0, 0}}, - {1213, {wxAcceleratorTable, new_2, 2}}, - {1214, {wxAcceleratorTable, destruct, 0}}, - {1215, {wxAcceleratorTable, ok, 0}}, - {1216, {wxAcceleratorEntry, new_1_0, 1}}, - {1217, {wxAcceleratorEntry, new_1_1, 1}}, - {1218, {wxAcceleratorEntry, getCommand, 0}}, - {1219, {wxAcceleratorEntry, getFlags, 0}}, - {1220, {wxAcceleratorEntry, getKeyCode, 0}}, - {1221, {wxAcceleratorEntry, set, 4}}, - {1222, {wxAcceleratorEntry, 'Destroy', undefined}}, - {1227, {wxCaret, new_3, 3}}, - {1228, {wxCaret, new_2, 2}}, - {1230, {wxCaret, destruct, 0}}, - {1231, {wxCaret, create_3, 3}}, - {1232, {wxCaret, create_2, 2}}, - {1233, {wxCaret, getBlinkTime, 0}}, - {1235, {wxCaret, getPosition, 0}}, - {1237, {wxCaret, getSize, 0}}, - {1238, {wxCaret, getWindow, 0}}, - {1239, {wxCaret, hide, 0}}, - {1240, {wxCaret, isOk, 0}}, - {1241, {wxCaret, isVisible, 0}}, - {1242, {wxCaret, move_2, 2}}, - {1243, {wxCaret, move_1, 1}}, - {1244, {wxCaret, setBlinkTime, 1}}, - {1245, {wxCaret, setSize_2, 2}}, - {1246, {wxCaret, setSize_1, 1}}, - {1247, {wxCaret, show, 1}}, - {1248, {wxSizer, add_2_1, 2}}, - {1249, {wxSizer, add_2_0, 2}}, - {1250, {wxSizer, add_3, 3}}, - {1251, {wxSizer, add_2_3, 2}}, - {1252, {wxSizer, add_2_2, 2}}, - {1253, {wxSizer, addSpacer, 1}}, - {1254, {wxSizer, addStretchSpacer, 1}}, - {1255, {wxSizer, calcMin, 0}}, - {1256, {wxSizer, clear, 1}}, - {1257, {wxSizer, detach_1_2, 1}}, - {1258, {wxSizer, detach_1_1, 1}}, - {1259, {wxSizer, detach_1_0, 1}}, - {1260, {wxSizer, fit, 1}}, - {1261, {wxSizer, fitInside, 1}}, - {1262, {wxSizer, getChildren, 0}}, - {1263, {wxSizer, getItem_2_1, 2}}, - {1264, {wxSizer, getItem_2_0, 2}}, - {1265, {wxSizer, getItem_1, 1}}, - {1266, {wxSizer, getSize, 0}}, - {1267, {wxSizer, getPosition, 0}}, - {1268, {wxSizer, getMinSize, 0}}, - {1269, {wxSizer, hide_2_0, 2}}, - {1270, {wxSizer, hide_2_1, 2}}, - {1271, {wxSizer, hide_1, 1}}, - {1272, {wxSizer, insert_3_1, 3}}, - {1273, {wxSizer, insert_3_0, 3}}, - {1274, {wxSizer, insert_4, 4}}, - {1275, {wxSizer, insert_3_3, 3}}, - {1276, {wxSizer, insert_3_2, 3}}, - {1277, {wxSizer, insert_2, 2}}, - {1278, {wxSizer, insertSpacer, 2}}, - {1279, {wxSizer, insertStretchSpacer, 2}}, - {1280, {wxSizer, isShown_1_2, 1}}, - {1281, {wxSizer, isShown_1_1, 1}}, - {1282, {wxSizer, isShown_1_0, 1}}, - {1283, {wxSizer, layout, 0}}, - {1284, {wxSizer, prepend_2_1, 2}}, - {1285, {wxSizer, prepend_2_0, 2}}, - {1286, {wxSizer, prepend_3, 3}}, - {1287, {wxSizer, prepend_2_3, 2}}, - {1288, {wxSizer, prepend_2_2, 2}}, - {1289, {wxSizer, prepend_1, 1}}, - {1290, {wxSizer, prependSpacer, 1}}, - {1291, {wxSizer, prependStretchSpacer, 1}}, - {1292, {wxSizer, recalcSizes, 0}}, - {1293, {wxSizer, remove_1_1, 1}}, - {1294, {wxSizer, remove_1_0, 1}}, - {1295, {wxSizer, replace_3_1, 3}}, - {1296, {wxSizer, replace_3_0, 3}}, - {1297, {wxSizer, replace_2, 2}}, - {1298, {wxSizer, setDimension, 4}}, - {1299, {wxSizer, setMinSize_2, 2}}, - {1300, {wxSizer, setMinSize_1, 1}}, - {1301, {wxSizer, setItemMinSize_3_2, 3}}, - {1302, {wxSizer, setItemMinSize_2_2, 2}}, - {1303, {wxSizer, setItemMinSize_3_1, 3}}, - {1304, {wxSizer, setItemMinSize_2_1, 2}}, - {1305, {wxSizer, setItemMinSize_3_0, 3}}, - {1306, {wxSizer, setItemMinSize_2_0, 2}}, - {1307, {wxSizer, setSizeHints, 1}}, - {1308, {wxSizer, setVirtualSizeHints, 1}}, - {1309, {wxSizer, show_2_2, 2}}, - {1310, {wxSizer, show_2_1, 2}}, - {1311, {wxSizer, show_2_0, 2}}, - {1312, {wxSizer, show_1, 1}}, - {1313, {wxSizerFlags, new, 1}}, - {1314, {wxSizerFlags, align, 1}}, - {1315, {wxSizerFlags, border_2, 2}}, - {1316, {wxSizerFlags, border_1, 1}}, - {1317, {wxSizerFlags, center, 0}}, - {1318, {wxSizerFlags, centre, 0}}, - {1319, {wxSizerFlags, expand, 0}}, - {1320, {wxSizerFlags, left, 0}}, - {1321, {wxSizerFlags, proportion, 1}}, - {1322, {wxSizerFlags, right, 0}}, - {1323, {wxSizerFlags, 'Destroy', undefined}}, - {1324, {wxSizerItem, new_5_1, 5}}, - {1325, {wxSizerItem, new_2_1, 2}}, - {1326, {wxSizerItem, new_5_0, 5}}, - {1327, {wxSizerItem, new_2_0, 2}}, - {1328, {wxSizerItem, new_6, 6}}, - {1329, {wxSizerItem, new_3, 3}}, - {1330, {wxSizerItem, new_0, 0}}, - {1331, {wxSizerItem, destruct, 0}}, - {1332, {wxSizerItem, calcMin, 0}}, - {1333, {wxSizerItem, deleteWindows, 0}}, - {1334, {wxSizerItem, detachSizer, 0}}, - {1335, {wxSizerItem, getBorder, 0}}, - {1336, {wxSizerItem, getFlag, 0}}, - {1337, {wxSizerItem, getMinSize, 0}}, - {1338, {wxSizerItem, getPosition, 0}}, - {1339, {wxSizerItem, getProportion, 0}}, - {1340, {wxSizerItem, getRatio, 0}}, - {1341, {wxSizerItem, getRect, 0}}, - {1342, {wxSizerItem, getSize, 0}}, - {1343, {wxSizerItem, getSizer, 0}}, - {1344, {wxSizerItem, getSpacer, 0}}, - {1345, {wxSizerItem, getUserData, 0}}, - {1346, {wxSizerItem, getWindow, 0}}, - {1347, {wxSizerItem, isSizer, 0}}, - {1348, {wxSizerItem, isShown, 0}}, - {1349, {wxSizerItem, isSpacer, 0}}, - {1350, {wxSizerItem, isWindow, 0}}, - {1351, {wxSizerItem, setBorder, 1}}, - {1352, {wxSizerItem, setDimension, 2}}, - {1353, {wxSizerItem, setFlag, 1}}, - {1354, {wxSizerItem, setInitSize, 2}}, - {1355, {wxSizerItem, setMinSize_1, 1}}, - {1356, {wxSizerItem, setMinSize_2, 2}}, - {1357, {wxSizerItem, setProportion, 1}}, - {1358, {wxSizerItem, setRatio_2, 2}}, - {1359, {wxSizerItem, setRatio_1_1, 1}}, - {1360, {wxSizerItem, setRatio_1_0, 1}}, - {1361, {wxSizerItem, setSizer, 1}}, - {1362, {wxSizerItem, setSpacer_1, 1}}, - {1363, {wxSizerItem, setSpacer_2, 2}}, - {1364, {wxSizerItem, setWindow, 1}}, - {1365, {wxSizerItem, show, 1}}, - {1366, {wxBoxSizer, new, 1}}, - {1367, {wxBoxSizer, getOrientation, 0}}, - {1368, {wxBoxSizer, 'Destroy', undefined}}, - {1369, {wxStaticBoxSizer, new_2, 2}}, - {1370, {wxStaticBoxSizer, new_3, 3}}, - {1371, {wxStaticBoxSizer, getStaticBox, 0}}, - {1372, {wxStaticBoxSizer, 'Destroy', undefined}}, - {1373, {wxGridSizer, new_4, 4}}, - {1374, {wxGridSizer, new_2, 2}}, - {1375, {wxGridSizer, getCols, 0}}, - {1376, {wxGridSizer, getHGap, 0}}, - {1377, {wxGridSizer, getRows, 0}}, - {1378, {wxGridSizer, getVGap, 0}}, - {1379, {wxGridSizer, setCols, 1}}, - {1380, {wxGridSizer, setHGap, 1}}, - {1381, {wxGridSizer, setRows, 1}}, - {1382, {wxGridSizer, setVGap, 1}}, - {1383, {wxGridSizer, 'Destroy', undefined}}, - {1384, {wxFlexGridSizer, new_4, 4}}, - {1385, {wxFlexGridSizer, new_2, 2}}, - {1386, {wxFlexGridSizer, addGrowableCol, 2}}, - {1387, {wxFlexGridSizer, addGrowableRow, 2}}, - {1388, {wxFlexGridSizer, getFlexibleDirection, 0}}, - {1389, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}}, - {1390, {wxFlexGridSizer, removeGrowableCol, 1}}, - {1391, {wxFlexGridSizer, removeGrowableRow, 1}}, - {1392, {wxFlexGridSizer, setFlexibleDirection, 1}}, - {1393, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}}, - {1394, {wxFlexGridSizer, 'Destroy', undefined}}, - {1395, {wxGridBagSizer, new, 1}}, - {1396, {wxGridBagSizer, add_3_2, 3}}, - {1397, {wxGridBagSizer, add_3_1, 3}}, - {1398, {wxGridBagSizer, add_4, 4}}, - {1399, {wxGridBagSizer, add_1_0, 1}}, - {1400, {wxGridBagSizer, add_2_1, 2}}, - {1401, {wxGridBagSizer, add_2_0, 2}}, - {1402, {wxGridBagSizer, add_3_0, 3}}, - {1403, {wxGridBagSizer, add_1_1, 1}}, - {1404, {wxGridBagSizer, calcMin, 0}}, - {1405, {wxGridBagSizer, checkForIntersection_2, 2}}, - {1406, {wxGridBagSizer, checkForIntersection_3, 3}}, - {1407, {wxGridBagSizer, findItem_1_1, 1}}, - {1408, {wxGridBagSizer, findItem_1_0, 1}}, - {1409, {wxGridBagSizer, findItemAtPoint, 1}}, - {1410, {wxGridBagSizer, findItemAtPosition, 1}}, - {1411, {wxGridBagSizer, findItemWithData, 1}}, - {1412, {wxGridBagSizer, getCellSize, 2}}, - {1413, {wxGridBagSizer, getEmptyCellSize, 0}}, - {1414, {wxGridBagSizer, getItemPosition_1_2, 1}}, - {1415, {wxGridBagSizer, getItemPosition_1_1, 1}}, - {1416, {wxGridBagSizer, getItemPosition_1_0, 1}}, - {1417, {wxGridBagSizer, getItemSpan_1_2, 1}}, - {1418, {wxGridBagSizer, getItemSpan_1_1, 1}}, - {1419, {wxGridBagSizer, getItemSpan_1_0, 1}}, - {1420, {wxGridBagSizer, setEmptyCellSize, 1}}, - {1421, {wxGridBagSizer, setItemPosition_2_2, 2}}, - {1422, {wxGridBagSizer, setItemPosition_2_1, 2}}, - {1423, {wxGridBagSizer, setItemPosition_2_0, 2}}, - {1424, {wxGridBagSizer, setItemSpan_2_2, 2}}, - {1425, {wxGridBagSizer, setItemSpan_2_1, 2}}, - {1426, {wxGridBagSizer, setItemSpan_2_0, 2}}, - {1427, {wxGridBagSizer, 'Destroy', undefined}}, - {1428, {wxStdDialogButtonSizer, new, 0}}, - {1429, {wxStdDialogButtonSizer, addButton, 1}}, - {1430, {wxStdDialogButtonSizer, realize, 0}}, - {1431, {wxStdDialogButtonSizer, setAffirmativeButton, 1}}, - {1432, {wxStdDialogButtonSizer, setCancelButton, 1}}, - {1433, {wxStdDialogButtonSizer, setNegativeButton, 1}}, - {1434, {wxStdDialogButtonSizer, 'Destroy', undefined}}, - {1435, {wxFont, new_0, 0}}, - {1436, {wxFont, new_1, 1}}, - {1437, {wxFont, new_5, 5}}, - {1439, {wxFont, destruct, 0}}, - {1440, {wxFont, isFixedWidth, 0}}, - {1441, {wxFont, getDefaultEncoding, 0}}, - {1442, {wxFont, getFaceName, 0}}, - {1443, {wxFont, getFamily, 0}}, - {1444, {wxFont, getNativeFontInfoDesc, 0}}, - {1445, {wxFont, getNativeFontInfoUserDesc, 0}}, - {1446, {wxFont, getPointSize, 0}}, - {1447, {wxFont, getStyle, 0}}, - {1448, {wxFont, getUnderlined, 0}}, - {1449, {wxFont, getWeight, 0}}, - {1450, {wxFont, ok, 0}}, - {1451, {wxFont, setDefaultEncoding, 1}}, - {1452, {wxFont, setFaceName, 1}}, - {1453, {wxFont, setFamily, 1}}, - {1454, {wxFont, setPointSize, 1}}, - {1455, {wxFont, setStyle, 1}}, - {1456, {wxFont, setUnderlined, 1}}, - {1457, {wxFont, setWeight, 1}}, - {1458, {wxToolTip, enable, 1}}, - {1459, {wxToolTip, setDelay, 1}}, - {1460, {wxToolTip, new, 1}}, - {1461, {wxToolTip, setTip, 1}}, - {1462, {wxToolTip, getTip, 0}}, - {1463, {wxToolTip, getWindow, 0}}, - {1464, {wxToolTip, 'Destroy', undefined}}, - {1466, {wxButton, new_3, 3}}, - {1467, {wxButton, new_0, 0}}, - {1468, {wxButton, destruct, 0}}, - {1469, {wxButton, create, 3}}, - {1470, {wxButton, getDefaultSize, 0}}, - {1471, {wxButton, setDefault, 0}}, - {1472, {wxButton, setLabel, 1}}, - {1474, {wxBitmapButton, new_4, 4}}, - {1475, {wxBitmapButton, new_0, 0}}, - {1476, {wxBitmapButton, create, 4}}, - {1477, {wxBitmapButton, getBitmapDisabled, 0}}, - {1479, {wxBitmapButton, getBitmapFocus, 0}}, - {1481, {wxBitmapButton, getBitmapLabel, 0}}, - {1483, {wxBitmapButton, getBitmapSelected, 0}}, - {1485, {wxBitmapButton, setBitmapDisabled, 1}}, - {1486, {wxBitmapButton, setBitmapFocus, 1}}, - {1487, {wxBitmapButton, setBitmapLabel, 1}}, - {1488, {wxBitmapButton, setBitmapSelected, 1}}, - {1489, {wxBitmapButton, 'Destroy', undefined}}, - {1490, {wxToggleButton, new_0, 0}}, - {1491, {wxToggleButton, new_4, 4}}, - {1492, {wxToggleButton, create, 4}}, - {1493, {wxToggleButton, getValue, 0}}, - {1494, {wxToggleButton, setValue, 1}}, - {1495, {wxToggleButton, 'Destroy', undefined}}, - {1496, {wxCalendarCtrl, new_0, 0}}, - {1497, {wxCalendarCtrl, new_3, 3}}, - {1498, {wxCalendarCtrl, create, 3}}, - {1499, {wxCalendarCtrl, destruct, 0}}, - {1500, {wxCalendarCtrl, setDate, 1}}, - {1501, {wxCalendarCtrl, getDate, 0}}, - {1502, {wxCalendarCtrl, enableYearChange, 1}}, - {1503, {wxCalendarCtrl, enableMonthChange, 1}}, - {1504, {wxCalendarCtrl, enableHolidayDisplay, 1}}, - {1505, {wxCalendarCtrl, setHeaderColours, 2}}, - {1506, {wxCalendarCtrl, getHeaderColourFg, 0}}, - {1507, {wxCalendarCtrl, getHeaderColourBg, 0}}, - {1508, {wxCalendarCtrl, setHighlightColours, 2}}, - {1509, {wxCalendarCtrl, getHighlightColourFg, 0}}, - {1510, {wxCalendarCtrl, getHighlightColourBg, 0}}, - {1511, {wxCalendarCtrl, setHolidayColours, 2}}, - {1512, {wxCalendarCtrl, getHolidayColourFg, 0}}, - {1513, {wxCalendarCtrl, getHolidayColourBg, 0}}, - {1514, {wxCalendarCtrl, getAttr, 1}}, - {1515, {wxCalendarCtrl, setAttr, 2}}, - {1516, {wxCalendarCtrl, setHoliday, 1}}, - {1517, {wxCalendarCtrl, resetAttr, 1}}, - {1518, {wxCalendarCtrl, hitTest, 2}}, - {1519, {wxCalendarDateAttr, new_0, 0}}, - {1520, {wxCalendarDateAttr, new_2_1, 2}}, - {1521, {wxCalendarDateAttr, new_2_0, 2}}, - {1522, {wxCalendarDateAttr, setTextColour, 1}}, - {1523, {wxCalendarDateAttr, setBackgroundColour, 1}}, - {1524, {wxCalendarDateAttr, setBorderColour, 1}}, - {1525, {wxCalendarDateAttr, setFont, 1}}, - {1526, {wxCalendarDateAttr, setBorder, 1}}, - {1527, {wxCalendarDateAttr, setHoliday, 1}}, - {1528, {wxCalendarDateAttr, hasTextColour, 0}}, - {1529, {wxCalendarDateAttr, hasBackgroundColour, 0}}, - {1530, {wxCalendarDateAttr, hasBorderColour, 0}}, - {1531, {wxCalendarDateAttr, hasFont, 0}}, - {1532, {wxCalendarDateAttr, hasBorder, 0}}, - {1533, {wxCalendarDateAttr, isHoliday, 0}}, - {1534, {wxCalendarDateAttr, getTextColour, 0}}, - {1535, {wxCalendarDateAttr, getBackgroundColour, 0}}, - {1536, {wxCalendarDateAttr, getBorderColour, 0}}, - {1537, {wxCalendarDateAttr, getFont, 0}}, - {1538, {wxCalendarDateAttr, getBorder, 0}}, - {1539, {wxCalendarDateAttr, 'Destroy', undefined}}, - {1541, {wxCheckBox, new_4, 4}}, - {1542, {wxCheckBox, new_0, 0}}, - {1543, {wxCheckBox, create, 4}}, - {1544, {wxCheckBox, getValue, 0}}, - {1545, {wxCheckBox, get3StateValue, 0}}, - {1546, {wxCheckBox, is3rdStateAllowedForUser, 0}}, - {1547, {wxCheckBox, is3State, 0}}, - {1548, {wxCheckBox, isChecked, 0}}, - {1549, {wxCheckBox, setValue, 1}}, - {1550, {wxCheckBox, set3StateValue, 1}}, - {1551, {wxCheckBox, 'Destroy', undefined}}, - {1552, {wxCheckListBox, new_0, 0}}, - {1554, {wxCheckListBox, new_3, 3}}, - {1555, {wxCheckListBox, check, 2}}, - {1556, {wxCheckListBox, isChecked, 1}}, - {1557, {wxCheckListBox, 'Destroy', undefined}}, - {1560, {wxChoice, new_3, 3}}, - {1561, {wxChoice, new_0, 0}}, - {1563, {wxChoice, destruct, 0}}, - {1565, {wxChoice, create, 6}}, - {1566, {wxChoice, delete, 1}}, - {1567, {wxChoice, getColumns, 0}}, - {1568, {wxChoice, setColumns, 1}}, - {1569, {wxComboBox, new_0, 0}}, - {1571, {wxComboBox, new_3, 3}}, - {1572, {wxComboBox, destruct, 0}}, - {1574, {wxComboBox, create, 7}}, - {1575, {wxComboBox, canCopy, 0}}, - {1576, {wxComboBox, canCut, 0}}, - {1577, {wxComboBox, canPaste, 0}}, - {1578, {wxComboBox, canRedo, 0}}, - {1579, {wxComboBox, canUndo, 0}}, - {1580, {wxComboBox, copy, 0}}, - {1581, {wxComboBox, cut, 0}}, - {1582, {wxComboBox, getInsertionPoint, 0}}, - {1583, {wxComboBox, getLastPosition, 0}}, - {1584, {wxComboBox, getValue, 0}}, - {1585, {wxComboBox, paste, 0}}, - {1586, {wxComboBox, redo, 0}}, - {1587, {wxComboBox, replace, 3}}, - {1588, {wxComboBox, remove, 2}}, - {1589, {wxComboBox, setInsertionPoint, 1}}, - {1590, {wxComboBox, setInsertionPointEnd, 0}}, - {1591, {wxComboBox, setSelection_1, 1}}, - {1592, {wxComboBox, setSelection_2, 2}}, - {1593, {wxComboBox, setValue, 1}}, - {1594, {wxComboBox, undo, 0}}, - {1595, {wxGauge, new_0, 0}}, - {1596, {wxGauge, new_4, 4}}, - {1597, {wxGauge, create, 4}}, - {1598, {wxGauge, getBezelFace, 0}}, - {1599, {wxGauge, getRange, 0}}, - {1600, {wxGauge, getShadowWidth, 0}}, - {1601, {wxGauge, getValue, 0}}, - {1602, {wxGauge, isVertical, 0}}, - {1603, {wxGauge, setBezelFace, 1}}, - {1604, {wxGauge, setRange, 1}}, - {1605, {wxGauge, setShadowWidth, 1}}, - {1606, {wxGauge, setValue, 1}}, - {1607, {wxGauge, pulse, 0}}, - {1608, {wxGauge, 'Destroy', undefined}}, - {1609, {wxGenericDirCtrl, new_0, 0}}, - {1610, {wxGenericDirCtrl, new_2, 2}}, - {1611, {wxGenericDirCtrl, destruct, 0}}, - {1612, {wxGenericDirCtrl, create, 2}}, - {1613, {wxGenericDirCtrl, init, 0}}, - {1614, {wxGenericDirCtrl, collapseTree, 0}}, - {1615, {wxGenericDirCtrl, expandPath, 1}}, - {1616, {wxGenericDirCtrl, getDefaultPath, 0}}, - {1617, {wxGenericDirCtrl, getPath, 0}}, - {1618, {wxGenericDirCtrl, getFilePath, 0}}, - {1619, {wxGenericDirCtrl, getFilter, 0}}, - {1620, {wxGenericDirCtrl, getFilterIndex, 0}}, - {1621, {wxGenericDirCtrl, getRootId, 0}}, - {1622, {wxGenericDirCtrl, getTreeCtrl, 0}}, - {1623, {wxGenericDirCtrl, reCreateTree, 0}}, - {1624, {wxGenericDirCtrl, setDefaultPath, 1}}, - {1625, {wxGenericDirCtrl, setFilter, 1}}, - {1626, {wxGenericDirCtrl, setFilterIndex, 1}}, - {1627, {wxGenericDirCtrl, setPath, 1}}, - {1629, {wxStaticBox, new_4, 4}}, - {1630, {wxStaticBox, new_0, 0}}, - {1631, {wxStaticBox, create, 4}}, - {1632, {wxStaticBox, 'Destroy', undefined}}, - {1634, {wxStaticLine, new_2, 2}}, - {1635, {wxStaticLine, new_0, 0}}, - {1636, {wxStaticLine, create, 2}}, - {1637, {wxStaticLine, isVertical, 0}}, - {1638, {wxStaticLine, getDefaultSize, 0}}, - {1639, {wxStaticLine, 'Destroy', undefined}}, - {1642, {wxListBox, new_3, 3}}, - {1643, {wxListBox, new_0, 0}}, - {1645, {wxListBox, destruct, 0}}, - {1647, {wxListBox, create, 6}}, - {1648, {wxListBox, deselect, 1}}, - {1649, {wxListBox, getSelections, 1}}, - {1650, {wxListBox, insertItems, 2}}, - {1651, {wxListBox, isSelected, 1}}, - {1653, {wxListBox, set, 2}}, - {1654, {wxListBox, hitTest, 1}}, - {1655, {wxListBox, setFirstItem_1_0, 1}}, - {1656, {wxListBox, setFirstItem_1_1, 1}}, - {1657, {wxListCtrl, new_0, 0}}, - {1658, {wxListCtrl, new_2, 2}}, - {1659, {wxListCtrl, arrange, 1}}, - {1660, {wxListCtrl, assignImageList, 2}}, - {1661, {wxListCtrl, clearAll, 0}}, - {1662, {wxListCtrl, create, 2}}, - {1663, {wxListCtrl, deleteAllItems, 0}}, - {1664, {wxListCtrl, deleteColumn, 1}}, - {1665, {wxListCtrl, deleteItem, 1}}, - {1666, {wxListCtrl, editLabel, 1}}, - {1667, {wxListCtrl, ensureVisible, 1}}, - {1668, {wxListCtrl, findItem_3_0, 3}}, - {1669, {wxListCtrl, findItem_3_1, 3}}, - {1670, {wxListCtrl, getColumn, 2}}, - {1671, {wxListCtrl, getColumnCount, 0}}, - {1672, {wxListCtrl, getColumnWidth, 1}}, - {1673, {wxListCtrl, getCountPerPage, 0}}, - {1674, {wxListCtrl, getEditControl, 0}}, - {1675, {wxListCtrl, getImageList, 1}}, - {1676, {wxListCtrl, getItem, 1}}, - {1677, {wxListCtrl, getItemBackgroundColour, 1}}, - {1678, {wxListCtrl, getItemCount, 0}}, - {1679, {wxListCtrl, getItemData, 1}}, - {1680, {wxListCtrl, getItemFont, 1}}, - {1681, {wxListCtrl, getItemPosition, 2}}, - {1682, {wxListCtrl, getItemRect, 3}}, - {1683, {wxListCtrl, getItemSpacing, 0}}, - {1684, {wxListCtrl, getItemState, 2}}, - {1685, {wxListCtrl, getItemText, 1}}, - {1686, {wxListCtrl, getItemTextColour, 1}}, - {1687, {wxListCtrl, getNextItem, 2}}, - {1688, {wxListCtrl, getSelectedItemCount, 0}}, - {1689, {wxListCtrl, getTextColour, 0}}, - {1690, {wxListCtrl, getTopItem, 0}}, - {1691, {wxListCtrl, getViewRect, 0}}, - {1692, {wxListCtrl, hitTest, 2}}, - {1693, {wxListCtrl, insertColumn_2, 2}}, - {1694, {wxListCtrl, insertColumn_3, 3}}, - {1695, {wxListCtrl, insertItem_1, 1}}, - {1696, {wxListCtrl, insertItem_2_1, 2}}, - {1697, {wxListCtrl, insertItem_2_0, 2}}, - {1698, {wxListCtrl, insertItem_3, 3}}, - {1699, {wxListCtrl, refreshItem, 1}}, - {1700, {wxListCtrl, refreshItems, 2}}, - {1701, {wxListCtrl, scrollList, 2}}, - {1702, {wxListCtrl, setBackgroundColour, 1}}, - {1703, {wxListCtrl, setColumn, 2}}, - {1704, {wxListCtrl, setColumnWidth, 2}}, - {1705, {wxListCtrl, setImageList, 2}}, - {1706, {wxListCtrl, setItem_1, 1}}, - {1707, {wxListCtrl, setItem_4, 4}}, - {1708, {wxListCtrl, setItemBackgroundColour, 2}}, - {1709, {wxListCtrl, setItemCount, 1}}, - {1710, {wxListCtrl, setItemData, 2}}, - {1711, {wxListCtrl, setItemFont, 2}}, - {1712, {wxListCtrl, setItemImage, 3}}, - {1713, {wxListCtrl, setItemColumnImage, 3}}, - {1714, {wxListCtrl, setItemPosition, 2}}, - {1715, {wxListCtrl, setItemState, 3}}, - {1716, {wxListCtrl, setItemText, 2}}, - {1717, {wxListCtrl, setItemTextColour, 2}}, - {1718, {wxListCtrl, setSingleStyle, 2}}, - {1719, {wxListCtrl, setTextColour, 1}}, - {1720, {wxListCtrl, setWindowStyleFlag, 1}}, - {1721, {wxListCtrl, sortItems, 2}}, - {1722, {wxListCtrl, 'Destroy', undefined}}, - {1723, {wxListView, clearColumnImage, 1}}, - {1724, {wxListView, focus, 1}}, - {1725, {wxListView, getFirstSelected, 0}}, - {1726, {wxListView, getFocusedItem, 0}}, - {1727, {wxListView, getNextSelected, 1}}, - {1728, {wxListView, isSelected, 1}}, - {1729, {wxListView, select, 2}}, - {1730, {wxListView, setColumnImage, 2}}, - {1731, {wxListItem, new_0, 0}}, - {1732, {wxListItem, new_1, 1}}, - {1733, {wxListItem, destruct, 0}}, - {1734, {wxListItem, clear, 0}}, - {1735, {wxListItem, getAlign, 0}}, - {1736, {wxListItem, getBackgroundColour, 0}}, - {1737, {wxListItem, getColumn, 0}}, - {1738, {wxListItem, getFont, 0}}, - {1739, {wxListItem, getId, 0}}, - {1740, {wxListItem, getImage, 0}}, - {1741, {wxListItem, getMask, 0}}, - {1742, {wxListItem, getState, 0}}, - {1743, {wxListItem, getText, 0}}, - {1744, {wxListItem, getTextColour, 0}}, - {1745, {wxListItem, getWidth, 0}}, - {1746, {wxListItem, setAlign, 1}}, - {1747, {wxListItem, setBackgroundColour, 1}}, - {1748, {wxListItem, setColumn, 1}}, - {1749, {wxListItem, setFont, 1}}, - {1750, {wxListItem, setId, 1}}, - {1751, {wxListItem, setImage, 1}}, - {1752, {wxListItem, setMask, 1}}, - {1753, {wxListItem, setState, 1}}, - {1754, {wxListItem, setStateMask, 1}}, - {1755, {wxListItem, setText, 1}}, - {1756, {wxListItem, setTextColour, 1}}, - {1757, {wxListItem, setWidth, 1}}, - {1758, {wxListItemAttr, new_0, 0}}, - {1759, {wxListItemAttr, new_3, 3}}, - {1760, {wxListItemAttr, getBackgroundColour, 0}}, - {1761, {wxListItemAttr, getFont, 0}}, - {1762, {wxListItemAttr, getTextColour, 0}}, - {1763, {wxListItemAttr, hasBackgroundColour, 0}}, - {1764, {wxListItemAttr, hasFont, 0}}, - {1765, {wxListItemAttr, hasTextColour, 0}}, - {1766, {wxListItemAttr, setBackgroundColour, 1}}, - {1767, {wxListItemAttr, setFont, 1}}, - {1768, {wxListItemAttr, setTextColour, 1}}, - {1769, {wxListItemAttr, 'Destroy', undefined}}, - {1770, {wxImageList, new_0, 0}}, - {1771, {wxImageList, new_3, 3}}, - {1772, {wxImageList, add_1, 1}}, - {1773, {wxImageList, add_2_0, 2}}, - {1774, {wxImageList, add_2_1, 2}}, - {1775, {wxImageList, create, 3}}, - {1777, {wxImageList, draw, 5}}, - {1778, {wxImageList, getBitmap, 1}}, - {1779, {wxImageList, getIcon, 1}}, - {1780, {wxImageList, getImageCount, 0}}, - {1781, {wxImageList, getSize, 3}}, - {1782, {wxImageList, remove, 1}}, - {1783, {wxImageList, removeAll, 0}}, - {1784, {wxImageList, replace_2, 2}}, - {1785, {wxImageList, replace_3, 3}}, - {1786, {wxImageList, 'Destroy', undefined}}, - {1787, {wxTextAttr, new_0, 0}}, - {1788, {wxTextAttr, new_2, 2}}, - {1789, {wxTextAttr, getAlignment, 0}}, - {1790, {wxTextAttr, getBackgroundColour, 0}}, - {1791, {wxTextAttr, getFont, 0}}, - {1792, {wxTextAttr, getLeftIndent, 0}}, - {1793, {wxTextAttr, getLeftSubIndent, 0}}, - {1794, {wxTextAttr, getRightIndent, 0}}, - {1795, {wxTextAttr, getTabs, 0}}, - {1796, {wxTextAttr, getTextColour, 0}}, - {1797, {wxTextAttr, hasBackgroundColour, 0}}, - {1798, {wxTextAttr, hasFont, 0}}, - {1799, {wxTextAttr, hasTextColour, 0}}, - {1800, {wxTextAttr, getFlags, 0}}, - {1801, {wxTextAttr, isDefault, 0}}, - {1802, {wxTextAttr, setAlignment, 1}}, - {1803, {wxTextAttr, setBackgroundColour, 1}}, - {1804, {wxTextAttr, setFlags, 1}}, - {1805, {wxTextAttr, setFont, 2}}, - {1806, {wxTextAttr, setLeftIndent, 2}}, - {1807, {wxTextAttr, setRightIndent, 1}}, - {1808, {wxTextAttr, setTabs, 1}}, - {1809, {wxTextAttr, setTextColour, 1}}, - {1810, {wxTextAttr, 'Destroy', undefined}}, - {1812, {wxTextCtrl, new_3, 3}}, - {1813, {wxTextCtrl, new_0, 0}}, - {1815, {wxTextCtrl, destruct, 0}}, - {1816, {wxTextCtrl, appendText, 1}}, - {1817, {wxTextCtrl, canCopy, 0}}, - {1818, {wxTextCtrl, canCut, 0}}, - {1819, {wxTextCtrl, canPaste, 0}}, - {1820, {wxTextCtrl, canRedo, 0}}, - {1821, {wxTextCtrl, canUndo, 0}}, - {1822, {wxTextCtrl, clear, 0}}, - {1823, {wxTextCtrl, copy, 0}}, - {1824, {wxTextCtrl, create, 3}}, - {1825, {wxTextCtrl, cut, 0}}, - {1826, {wxTextCtrl, discardEdits, 0}}, - {1827, {wxTextCtrl, emulateKeyPress, 1}}, - {1828, {wxTextCtrl, getDefaultStyle, 0}}, - {1829, {wxTextCtrl, getInsertionPoint, 0}}, - {1830, {wxTextCtrl, getLastPosition, 0}}, - {1831, {wxTextCtrl, getLineLength, 1}}, - {1832, {wxTextCtrl, getLineText, 1}}, - {1833, {wxTextCtrl, getNumberOfLines, 0}}, - {1834, {wxTextCtrl, getRange, 2}}, - {1835, {wxTextCtrl, getSelection, 2}}, - {1836, {wxTextCtrl, getStringSelection, 0}}, - {1837, {wxTextCtrl, getStyle, 2}}, - {1838, {wxTextCtrl, getValue, 0}}, - {1839, {wxTextCtrl, isEditable, 0}}, - {1840, {wxTextCtrl, isModified, 0}}, - {1841, {wxTextCtrl, isMultiLine, 0}}, - {1842, {wxTextCtrl, isSingleLine, 0}}, - {1843, {wxTextCtrl, loadFile, 2}}, - {1844, {wxTextCtrl, markDirty, 0}}, - {1845, {wxTextCtrl, paste, 0}}, - {1846, {wxTextCtrl, positionToXY, 3}}, - {1847, {wxTextCtrl, redo, 0}}, - {1848, {wxTextCtrl, remove, 2}}, - {1849, {wxTextCtrl, replace, 3}}, - {1850, {wxTextCtrl, saveFile, 1}}, - {1851, {wxTextCtrl, setDefaultStyle, 1}}, - {1852, {wxTextCtrl, setEditable, 1}}, - {1853, {wxTextCtrl, setInsertionPoint, 1}}, - {1854, {wxTextCtrl, setInsertionPointEnd, 0}}, - {1856, {wxTextCtrl, setMaxLength, 1}}, - {1857, {wxTextCtrl, setSelection, 2}}, - {1858, {wxTextCtrl, setStyle, 3}}, - {1859, {wxTextCtrl, setValue, 1}}, - {1860, {wxTextCtrl, showPosition, 1}}, - {1861, {wxTextCtrl, undo, 0}}, - {1862, {wxTextCtrl, writeText, 1}}, - {1863, {wxTextCtrl, xYToPosition, 2}}, - {1866, {wxNotebook, new_0, 0}}, - {1867, {wxNotebook, new_3, 3}}, - {1868, {wxNotebook, destruct, 0}}, - {1869, {wxNotebook, addPage, 3}}, - {1870, {wxNotebook, advanceSelection, 1}}, - {1871, {wxNotebook, assignImageList, 1}}, - {1872, {wxNotebook, create, 3}}, - {1873, {wxNotebook, deleteAllPages, 0}}, - {1874, {wxNotebook, deletePage, 1}}, - {1875, {wxNotebook, removePage, 1}}, - {1876, {wxNotebook, getCurrentPage, 0}}, - {1877, {wxNotebook, getImageList, 0}}, - {1879, {wxNotebook, getPage, 1}}, - {1880, {wxNotebook, getPageCount, 0}}, - {1881, {wxNotebook, getPageImage, 1}}, - {1882, {wxNotebook, getPageText, 1}}, - {1883, {wxNotebook, getRowCount, 0}}, - {1884, {wxNotebook, getSelection, 0}}, - {1885, {wxNotebook, getThemeBackgroundColour, 0}}, - {1887, {wxNotebook, hitTest, 2}}, - {1889, {wxNotebook, insertPage, 4}}, - {1890, {wxNotebook, setImageList, 1}}, - {1891, {wxNotebook, setPadding, 1}}, - {1892, {wxNotebook, setPageSize, 1}}, - {1893, {wxNotebook, setPageImage, 2}}, - {1894, {wxNotebook, setPageText, 2}}, - {1895, {wxNotebook, setSelection, 1}}, - {1896, {wxNotebook, changeSelection, 1}}, - {1897, {wxChoicebook, new_0, 0}}, - {1898, {wxChoicebook, new_3, 3}}, - {1899, {wxChoicebook, addPage, 3}}, - {1900, {wxChoicebook, advanceSelection, 1}}, - {1901, {wxChoicebook, assignImageList, 1}}, - {1902, {wxChoicebook, create, 3}}, - {1903, {wxChoicebook, deleteAllPages, 0}}, - {1904, {wxChoicebook, deletePage, 1}}, - {1905, {wxChoicebook, removePage, 1}}, - {1906, {wxChoicebook, getCurrentPage, 0}}, - {1907, {wxChoicebook, getImageList, 0}}, - {1909, {wxChoicebook, getPage, 1}}, - {1910, {wxChoicebook, getPageCount, 0}}, - {1911, {wxChoicebook, getPageImage, 1}}, - {1912, {wxChoicebook, getPageText, 1}}, - {1913, {wxChoicebook, getSelection, 0}}, - {1914, {wxChoicebook, hitTest, 2}}, - {1915, {wxChoicebook, insertPage, 4}}, - {1916, {wxChoicebook, setImageList, 1}}, - {1917, {wxChoicebook, setPageSize, 1}}, - {1918, {wxChoicebook, setPageImage, 2}}, - {1919, {wxChoicebook, setPageText, 2}}, - {1920, {wxChoicebook, setSelection, 1}}, - {1921, {wxChoicebook, changeSelection, 1}}, - {1922, {wxChoicebook, 'Destroy', undefined}}, - {1923, {wxToolbook, new_0, 0}}, - {1924, {wxToolbook, new_3, 3}}, - {1925, {wxToolbook, addPage, 3}}, - {1926, {wxToolbook, advanceSelection, 1}}, - {1927, {wxToolbook, assignImageList, 1}}, - {1928, {wxToolbook, create, 3}}, - {1929, {wxToolbook, deleteAllPages, 0}}, - {1930, {wxToolbook, deletePage, 1}}, - {1931, {wxToolbook, removePage, 1}}, - {1932, {wxToolbook, getCurrentPage, 0}}, - {1933, {wxToolbook, getImageList, 0}}, - {1935, {wxToolbook, getPage, 1}}, - {1936, {wxToolbook, getPageCount, 0}}, - {1937, {wxToolbook, getPageImage, 1}}, - {1938, {wxToolbook, getPageText, 1}}, - {1939, {wxToolbook, getSelection, 0}}, - {1941, {wxToolbook, hitTest, 2}}, - {1942, {wxToolbook, insertPage, 4}}, - {1943, {wxToolbook, setImageList, 1}}, - {1944, {wxToolbook, setPageSize, 1}}, - {1945, {wxToolbook, setPageImage, 2}}, - {1946, {wxToolbook, setPageText, 2}}, - {1947, {wxToolbook, setSelection, 1}}, - {1948, {wxToolbook, changeSelection, 1}}, - {1949, {wxToolbook, 'Destroy', undefined}}, - {1950, {wxListbook, new_0, 0}}, - {1951, {wxListbook, new_3, 3}}, - {1952, {wxListbook, addPage, 3}}, - {1953, {wxListbook, advanceSelection, 1}}, - {1954, {wxListbook, assignImageList, 1}}, - {1955, {wxListbook, create, 3}}, - {1956, {wxListbook, deleteAllPages, 0}}, - {1957, {wxListbook, deletePage, 1}}, - {1958, {wxListbook, removePage, 1}}, - {1959, {wxListbook, getCurrentPage, 0}}, - {1960, {wxListbook, getImageList, 0}}, - {1962, {wxListbook, getPage, 1}}, - {1963, {wxListbook, getPageCount, 0}}, - {1964, {wxListbook, getPageImage, 1}}, - {1965, {wxListbook, getPageText, 1}}, - {1966, {wxListbook, getSelection, 0}}, - {1968, {wxListbook, hitTest, 2}}, - {1969, {wxListbook, insertPage, 4}}, - {1970, {wxListbook, setImageList, 1}}, - {1971, {wxListbook, setPageSize, 1}}, - {1972, {wxListbook, setPageImage, 2}}, - {1973, {wxListbook, setPageText, 2}}, - {1974, {wxListbook, setSelection, 1}}, - {1975, {wxListbook, changeSelection, 1}}, - {1976, {wxListbook, 'Destroy', undefined}}, - {1977, {wxTreebook, new_0, 0}}, - {1978, {wxTreebook, new_3, 3}}, - {1979, {wxTreebook, addPage, 3}}, - {1980, {wxTreebook, advanceSelection, 1}}, - {1981, {wxTreebook, assignImageList, 1}}, - {1982, {wxTreebook, create, 3}}, - {1983, {wxTreebook, deleteAllPages, 0}}, - {1984, {wxTreebook, deletePage, 1}}, - {1985, {wxTreebook, removePage, 1}}, - {1986, {wxTreebook, getCurrentPage, 0}}, - {1987, {wxTreebook, getImageList, 0}}, - {1989, {wxTreebook, getPage, 1}}, - {1990, {wxTreebook, getPageCount, 0}}, - {1991, {wxTreebook, getPageImage, 1}}, - {1992, {wxTreebook, getPageText, 1}}, - {1993, {wxTreebook, getSelection, 0}}, - {1994, {wxTreebook, expandNode, 2}}, - {1995, {wxTreebook, isNodeExpanded, 1}}, - {1997, {wxTreebook, hitTest, 2}}, - {1998, {wxTreebook, insertPage, 4}}, - {1999, {wxTreebook, insertSubPage, 4}}, - {2000, {wxTreebook, setImageList, 1}}, - {2001, {wxTreebook, setPageSize, 1}}, - {2002, {wxTreebook, setPageImage, 2}}, - {2003, {wxTreebook, setPageText, 2}}, - {2004, {wxTreebook, setSelection, 1}}, - {2005, {wxTreebook, changeSelection, 1}}, - {2006, {wxTreebook, 'Destroy', undefined}}, - {2009, {wxTreeCtrl, new_2, 2}}, - {2010, {wxTreeCtrl, new_0, 0}}, - {2012, {wxTreeCtrl, destruct, 0}}, - {2013, {wxTreeCtrl, addRoot, 2}}, - {2014, {wxTreeCtrl, appendItem, 3}}, - {2015, {wxTreeCtrl, assignImageList, 1}}, - {2016, {wxTreeCtrl, assignStateImageList, 1}}, - {2017, {wxTreeCtrl, collapse, 1}}, - {2018, {wxTreeCtrl, collapseAndReset, 1}}, - {2019, {wxTreeCtrl, create, 2}}, - {2020, {wxTreeCtrl, delete, 1}}, - {2021, {wxTreeCtrl, deleteAllItems, 0}}, - {2022, {wxTreeCtrl, deleteChildren, 1}}, - {2023, {wxTreeCtrl, editLabel, 1}}, - {2024, {wxTreeCtrl, ensureVisible, 1}}, - {2025, {wxTreeCtrl, expand, 1}}, - {2026, {wxTreeCtrl, getBoundingRect, 3}}, - {2028, {wxTreeCtrl, getChildrenCount, 2}}, - {2029, {wxTreeCtrl, getCount, 0}}, - {2030, {wxTreeCtrl, getEditControl, 0}}, - {2031, {wxTreeCtrl, getFirstChild, 2}}, - {2032, {wxTreeCtrl, getNextChild, 2}}, - {2033, {wxTreeCtrl, getFirstVisibleItem, 0}}, - {2034, {wxTreeCtrl, getImageList, 0}}, - {2035, {wxTreeCtrl, getIndent, 0}}, - {2036, {wxTreeCtrl, getItemBackgroundColour, 1}}, - {2037, {wxTreeCtrl, getItemData, 1}}, - {2038, {wxTreeCtrl, getItemFont, 1}}, - {2039, {wxTreeCtrl, getItemImage_1, 1}}, - {2040, {wxTreeCtrl, getItemImage_2, 2}}, - {2041, {wxTreeCtrl, getItemText, 1}}, - {2042, {wxTreeCtrl, getItemTextColour, 1}}, - {2043, {wxTreeCtrl, getLastChild, 1}}, - {2044, {wxTreeCtrl, getNextSibling, 1}}, - {2045, {wxTreeCtrl, getNextVisible, 1}}, - {2046, {wxTreeCtrl, getItemParent, 1}}, - {2047, {wxTreeCtrl, getPrevSibling, 1}}, - {2048, {wxTreeCtrl, getPrevVisible, 1}}, - {2049, {wxTreeCtrl, getRootItem, 0}}, - {2050, {wxTreeCtrl, getSelection, 0}}, - {2051, {wxTreeCtrl, getSelections, 1}}, - {2052, {wxTreeCtrl, getStateImageList, 0}}, - {2053, {wxTreeCtrl, hitTest, 2}}, - {2055, {wxTreeCtrl, insertItem, 4}}, - {2056, {wxTreeCtrl, isBold, 1}}, - {2057, {wxTreeCtrl, isExpanded, 1}}, - {2058, {wxTreeCtrl, isSelected, 1}}, - {2059, {wxTreeCtrl, isVisible, 1}}, - {2060, {wxTreeCtrl, itemHasChildren, 1}}, - {2061, {wxTreeCtrl, isTreeItemIdOk, 1}}, - {2062, {wxTreeCtrl, prependItem, 3}}, - {2063, {wxTreeCtrl, scrollTo, 1}}, - {2064, {wxTreeCtrl, selectItem_1, 1}}, - {2065, {wxTreeCtrl, selectItem_2, 2}}, - {2066, {wxTreeCtrl, setIndent, 1}}, - {2067, {wxTreeCtrl, setImageList, 1}}, - {2068, {wxTreeCtrl, setItemBackgroundColour, 2}}, - {2069, {wxTreeCtrl, setItemBold, 2}}, - {2070, {wxTreeCtrl, setItemData, 2}}, - {2071, {wxTreeCtrl, setItemDropHighlight, 2}}, - {2072, {wxTreeCtrl, setItemFont, 2}}, - {2073, {wxTreeCtrl, setItemHasChildren, 2}}, - {2074, {wxTreeCtrl, setItemImage_2, 2}}, - {2075, {wxTreeCtrl, setItemImage_3, 3}}, - {2076, {wxTreeCtrl, setItemText, 2}}, - {2077, {wxTreeCtrl, setItemTextColour, 2}}, - {2078, {wxTreeCtrl, setStateImageList, 1}}, - {2079, {wxTreeCtrl, setWindowStyle, 1}}, - {2080, {wxTreeCtrl, sortChildren, 1}}, - {2081, {wxTreeCtrl, toggle, 1}}, - {2082, {wxTreeCtrl, toggleItemSelection, 1}}, - {2083, {wxTreeCtrl, unselect, 0}}, - {2084, {wxTreeCtrl, unselectAll, 0}}, - {2085, {wxTreeCtrl, unselectItem, 1}}, - {2086, {wxScrollBar, new_0, 0}}, - {2087, {wxScrollBar, new_3, 3}}, - {2088, {wxScrollBar, destruct, 0}}, - {2089, {wxScrollBar, create, 3}}, - {2090, {wxScrollBar, getRange, 0}}, - {2091, {wxScrollBar, getPageSize, 0}}, - {2092, {wxScrollBar, getThumbPosition, 0}}, - {2093, {wxScrollBar, getThumbSize, 0}}, - {2094, {wxScrollBar, setThumbPosition, 1}}, - {2095, {wxScrollBar, setScrollbar, 5}}, - {2097, {wxSpinButton, new_2, 2}}, - {2098, {wxSpinButton, new_0, 0}}, - {2099, {wxSpinButton, create, 2}}, - {2100, {wxSpinButton, getMax, 0}}, - {2101, {wxSpinButton, getMin, 0}}, - {2102, {wxSpinButton, getValue, 0}}, - {2103, {wxSpinButton, setRange, 2}}, - {2104, {wxSpinButton, setValue, 1}}, - {2105, {wxSpinButton, 'Destroy', undefined}}, - {2106, {wxSpinCtrl, new_0, 0}}, - {2107, {wxSpinCtrl, new_2, 2}}, - {2109, {wxSpinCtrl, create, 2}}, - {2112, {wxSpinCtrl, setValue_1_1, 1}}, - {2113, {wxSpinCtrl, setValue_1_0, 1}}, - {2115, {wxSpinCtrl, getValue, 0}}, - {2117, {wxSpinCtrl, setRange, 2}}, - {2118, {wxSpinCtrl, setSelection, 2}}, - {2120, {wxSpinCtrl, getMin, 0}}, - {2122, {wxSpinCtrl, getMax, 0}}, - {2123, {wxSpinCtrl, 'Destroy', undefined}}, - {2124, {wxStaticText, new_0, 0}}, - {2125, {wxStaticText, new_4, 4}}, - {2126, {wxStaticText, create, 4}}, - {2127, {wxStaticText, getLabel, 0}}, - {2128, {wxStaticText, setLabel, 1}}, - {2129, {wxStaticText, wrap, 1}}, - {2130, {wxStaticText, 'Destroy', undefined}}, - {2131, {wxStaticBitmap, new_0, 0}}, - {2132, {wxStaticBitmap, new_4, 4}}, - {2133, {wxStaticBitmap, create, 4}}, - {2134, {wxStaticBitmap, getBitmap, 0}}, - {2135, {wxStaticBitmap, setBitmap, 1}}, - {2136, {wxStaticBitmap, 'Destroy', undefined}}, - {2137, {wxRadioBox, new, 7}}, - {2139, {wxRadioBox, destruct, 0}}, - {2140, {wxRadioBox, create, 7}}, - {2141, {wxRadioBox, enable_2, 2}}, - {2142, {wxRadioBox, enable_1, 1}}, - {2143, {wxRadioBox, getSelection, 0}}, - {2144, {wxRadioBox, getString, 1}}, - {2145, {wxRadioBox, setSelection, 1}}, - {2146, {wxRadioBox, show_2, 2}}, - {2147, {wxRadioBox, show_1, 1}}, - {2148, {wxRadioBox, getColumnCount, 0}}, - {2149, {wxRadioBox, getItemHelpText, 1}}, - {2150, {wxRadioBox, getItemToolTip, 1}}, - {2152, {wxRadioBox, getItemFromPoint, 1}}, - {2153, {wxRadioBox, getRowCount, 0}}, - {2154, {wxRadioBox, isItemEnabled, 1}}, - {2155, {wxRadioBox, isItemShown, 1}}, - {2156, {wxRadioBox, setItemHelpText, 2}}, - {2157, {wxRadioBox, setItemToolTip, 2}}, - {2158, {wxRadioButton, new_0, 0}}, - {2159, {wxRadioButton, new_4, 4}}, - {2160, {wxRadioButton, create, 4}}, - {2161, {wxRadioButton, getValue, 0}}, - {2162, {wxRadioButton, setValue, 1}}, - {2163, {wxRadioButton, 'Destroy', undefined}}, - {2165, {wxSlider, new_6, 6}}, - {2166, {wxSlider, new_0, 0}}, - {2167, {wxSlider, create, 6}}, - {2168, {wxSlider, getLineSize, 0}}, - {2169, {wxSlider, getMax, 0}}, - {2170, {wxSlider, getMin, 0}}, - {2171, {wxSlider, getPageSize, 0}}, - {2172, {wxSlider, getThumbLength, 0}}, - {2173, {wxSlider, getValue, 0}}, - {2174, {wxSlider, setLineSize, 1}}, - {2175, {wxSlider, setPageSize, 1}}, - {2176, {wxSlider, setRange, 2}}, - {2177, {wxSlider, setThumbLength, 1}}, - {2178, {wxSlider, setValue, 1}}, - {2179, {wxSlider, 'Destroy', undefined}}, - {2181, {wxDialog, new_4, 4}}, - {2182, {wxDialog, new_0, 0}}, - {2184, {wxDialog, destruct, 0}}, - {2185, {wxDialog, create, 4}}, - {2186, {wxDialog, createButtonSizer, 1}}, - {2187, {wxDialog, createStdDialogButtonSizer, 1}}, - {2188, {wxDialog, endModal, 1}}, - {2189, {wxDialog, getAffirmativeId, 0}}, - {2190, {wxDialog, getReturnCode, 0}}, - {2191, {wxDialog, isModal, 0}}, - {2192, {wxDialog, setAffirmativeId, 1}}, - {2193, {wxDialog, setReturnCode, 1}}, - {2194, {wxDialog, show, 1}}, - {2195, {wxDialog, showModal, 0}}, - {2196, {wxColourDialog, new_0, 0}}, - {2197, {wxColourDialog, new_2, 2}}, - {2198, {wxColourDialog, destruct, 0}}, - {2199, {wxColourDialog, create, 2}}, - {2200, {wxColourDialog, getColourData, 0}}, - {2201, {wxColourData, new_0, 0}}, - {2202, {wxColourData, new_1, 1}}, - {2203, {wxColourData, destruct, 0}}, - {2204, {wxColourData, getChooseFull, 0}}, - {2205, {wxColourData, getColour, 0}}, - {2207, {wxColourData, getCustomColour, 1}}, - {2208, {wxColourData, setChooseFull, 1}}, - {2209, {wxColourData, setColour, 1}}, - {2210, {wxColourData, setCustomColour, 2}}, - {2211, {wxPalette, new_0, 0}}, - {2212, {wxPalette, new_4, 4}}, - {2214, {wxPalette, destruct, 0}}, - {2215, {wxPalette, create, 4}}, - {2216, {wxPalette, getColoursCount, 0}}, - {2217, {wxPalette, getPixel, 3}}, - {2218, {wxPalette, getRGB, 4}}, - {2219, {wxPalette, isOk, 0}}, - {2223, {wxDirDialog, new, 2}}, - {2224, {wxDirDialog, destruct, 0}}, - {2225, {wxDirDialog, getPath, 0}}, - {2226, {wxDirDialog, getMessage, 0}}, - {2227, {wxDirDialog, setMessage, 1}}, - {2228, {wxDirDialog, setPath, 1}}, - {2232, {wxFileDialog, new, 2}}, - {2233, {wxFileDialog, destruct, 0}}, - {2234, {wxFileDialog, getDirectory, 0}}, - {2235, {wxFileDialog, getFilename, 0}}, - {2236, {wxFileDialog, getFilenames, 1}}, - {2237, {wxFileDialog, getFilterIndex, 0}}, - {2238, {wxFileDialog, getMessage, 0}}, - {2239, {wxFileDialog, getPath, 0}}, - {2240, {wxFileDialog, getPaths, 1}}, - {2241, {wxFileDialog, getWildcard, 0}}, - {2242, {wxFileDialog, setDirectory, 1}}, - {2243, {wxFileDialog, setFilename, 1}}, - {2244, {wxFileDialog, setFilterIndex, 1}}, - {2245, {wxFileDialog, setMessage, 1}}, - {2246, {wxFileDialog, setPath, 1}}, - {2247, {wxFileDialog, setWildcard, 1}}, - {2248, {wxPickerBase, setInternalMargin, 1}}, - {2249, {wxPickerBase, getInternalMargin, 0}}, - {2250, {wxPickerBase, setTextCtrlProportion, 1}}, - {2251, {wxPickerBase, setPickerCtrlProportion, 1}}, - {2252, {wxPickerBase, getTextCtrlProportion, 0}}, - {2253, {wxPickerBase, getPickerCtrlProportion, 0}}, - {2254, {wxPickerBase, hasTextCtrl, 0}}, - {2255, {wxPickerBase, getTextCtrl, 0}}, - {2256, {wxPickerBase, isTextCtrlGrowable, 0}}, - {2257, {wxPickerBase, setPickerCtrlGrowable, 1}}, - {2258, {wxPickerBase, setTextCtrlGrowable, 1}}, - {2259, {wxPickerBase, isPickerCtrlGrowable, 0}}, - {2260, {wxFilePickerCtrl, new_0, 0}}, - {2261, {wxFilePickerCtrl, new_3, 3}}, - {2262, {wxFilePickerCtrl, create, 3}}, - {2263, {wxFilePickerCtrl, getPath, 0}}, - {2264, {wxFilePickerCtrl, setPath, 1}}, - {2265, {wxFilePickerCtrl, 'Destroy', undefined}}, - {2266, {wxDirPickerCtrl, new_0, 0}}, - {2267, {wxDirPickerCtrl, new_3, 3}}, - {2268, {wxDirPickerCtrl, create, 3}}, - {2269, {wxDirPickerCtrl, getPath, 0}}, - {2270, {wxDirPickerCtrl, setPath, 1}}, - {2271, {wxDirPickerCtrl, 'Destroy', undefined}}, - {2272, {wxColourPickerCtrl, new_0, 0}}, - {2273, {wxColourPickerCtrl, new_3, 3}}, - {2274, {wxColourPickerCtrl, create, 3}}, - {2275, {wxColourPickerCtrl, getColour, 0}}, - {2276, {wxColourPickerCtrl, setColour_1_1, 1}}, - {2277, {wxColourPickerCtrl, setColour_1_0, 1}}, - {2278, {wxColourPickerCtrl, 'Destroy', undefined}}, - {2279, {wxDatePickerCtrl, new_0, 0}}, - {2280, {wxDatePickerCtrl, new_3, 3}}, - {2281, {wxDatePickerCtrl, getRange, 2}}, - {2282, {wxDatePickerCtrl, getValue, 0}}, - {2283, {wxDatePickerCtrl, setRange, 2}}, - {2284, {wxDatePickerCtrl, setValue, 1}}, - {2285, {wxDatePickerCtrl, 'Destroy', undefined}}, - {2286, {wxFontPickerCtrl, new_0, 0}}, - {2287, {wxFontPickerCtrl, new_3, 3}}, - {2288, {wxFontPickerCtrl, create, 3}}, - {2289, {wxFontPickerCtrl, getSelectedFont, 0}}, - {2290, {wxFontPickerCtrl, setSelectedFont, 1}}, - {2291, {wxFontPickerCtrl, getMaxPointSize, 0}}, - {2292, {wxFontPickerCtrl, setMaxPointSize, 1}}, - {2293, {wxFontPickerCtrl, 'Destroy', undefined}}, - {2296, {wxFindReplaceDialog, new_0, 0}}, - {2297, {wxFindReplaceDialog, new_4, 4}}, - {2298, {wxFindReplaceDialog, destruct, 0}}, - {2299, {wxFindReplaceDialog, create, 4}}, - {2300, {wxFindReplaceDialog, getData, 0}}, - {2301, {wxFindReplaceData, new_0, 0}}, - {2302, {wxFindReplaceData, new_1, 1}}, - {2303, {wxFindReplaceData, getFindString, 0}}, - {2304, {wxFindReplaceData, getReplaceString, 0}}, - {2305, {wxFindReplaceData, getFlags, 0}}, - {2306, {wxFindReplaceData, setFlags, 1}}, - {2307, {wxFindReplaceData, setFindString, 1}}, - {2308, {wxFindReplaceData, setReplaceString, 1}}, - {2309, {wxFindReplaceData, 'Destroy', undefined}}, - {2310, {wxMultiChoiceDialog, new_0, 0}}, - {2312, {wxMultiChoiceDialog, new_5, 5}}, - {2313, {wxMultiChoiceDialog, getSelections, 0}}, - {2314, {wxMultiChoiceDialog, setSelections, 1}}, - {2315, {wxMultiChoiceDialog, 'Destroy', undefined}}, - {2316, {wxSingleChoiceDialog, new_0, 0}}, - {2318, {wxSingleChoiceDialog, new_5, 5}}, - {2319, {wxSingleChoiceDialog, getSelection, 0}}, - {2320, {wxSingleChoiceDialog, getStringSelection, 0}}, - {2321, {wxSingleChoiceDialog, setSelection, 1}}, - {2322, {wxSingleChoiceDialog, 'Destroy', undefined}}, - {2323, {wxTextEntryDialog, new, 3}}, - {2324, {wxTextEntryDialog, getValue, 0}}, - {2325, {wxTextEntryDialog, setValue, 1}}, - {2326, {wxTextEntryDialog, 'Destroy', undefined}}, - {2327, {wxPasswordEntryDialog, new, 3}}, - {2328, {wxPasswordEntryDialog, 'Destroy', undefined}}, - {2329, {wxFontData, new_0, 0}}, - {2330, {wxFontData, new_1, 1}}, - {2331, {wxFontData, destruct, 0}}, - {2332, {wxFontData, enableEffects, 1}}, - {2333, {wxFontData, getAllowSymbols, 0}}, - {2334, {wxFontData, getColour, 0}}, - {2335, {wxFontData, getChosenFont, 0}}, - {2336, {wxFontData, getEnableEffects, 0}}, - {2337, {wxFontData, getInitialFont, 0}}, - {2338, {wxFontData, getShowHelp, 0}}, - {2339, {wxFontData, setAllowSymbols, 1}}, - {2340, {wxFontData, setChosenFont, 1}}, - {2341, {wxFontData, setColour, 1}}, - {2342, {wxFontData, setInitialFont, 1}}, - {2343, {wxFontData, setRange, 2}}, - {2344, {wxFontData, setShowHelp, 1}}, - {2348, {wxFontDialog, new_0, 0}}, - {2350, {wxFontDialog, new_2, 2}}, - {2352, {wxFontDialog, create, 2}}, - {2353, {wxFontDialog, getFontData, 0}}, - {2355, {wxFontDialog, 'Destroy', undefined}}, - {2356, {wxProgressDialog, new, 3}}, - {2357, {wxProgressDialog, destruct, 0}}, - {2358, {wxProgressDialog, resume, 0}}, - {2359, {wxProgressDialog, update_2, 2}}, - {2360, {wxProgressDialog, update_0, 0}}, - {2361, {wxMessageDialog, new, 3}}, - {2362, {wxMessageDialog, destruct, 0}}, - {2363, {wxPageSetupDialog, new, 2}}, - {2364, {wxPageSetupDialog, destruct, 0}}, - {2365, {wxPageSetupDialog, getPageSetupData, 0}}, - {2366, {wxPageSetupDialog, showModal, 0}}, - {2367, {wxPageSetupDialogData, new_0, 0}}, - {2368, {wxPageSetupDialogData, new_1_0, 1}}, - {2369, {wxPageSetupDialogData, new_1_1, 1}}, - {2370, {wxPageSetupDialogData, destruct, 0}}, - {2371, {wxPageSetupDialogData, enableHelp, 1}}, - {2372, {wxPageSetupDialogData, enableMargins, 1}}, - {2373, {wxPageSetupDialogData, enableOrientation, 1}}, - {2374, {wxPageSetupDialogData, enablePaper, 1}}, - {2375, {wxPageSetupDialogData, enablePrinter, 1}}, - {2376, {wxPageSetupDialogData, getDefaultMinMargins, 0}}, - {2377, {wxPageSetupDialogData, getEnableMargins, 0}}, - {2378, {wxPageSetupDialogData, getEnableOrientation, 0}}, - {2379, {wxPageSetupDialogData, getEnablePaper, 0}}, - {2380, {wxPageSetupDialogData, getEnablePrinter, 0}}, - {2381, {wxPageSetupDialogData, getEnableHelp, 0}}, - {2382, {wxPageSetupDialogData, getDefaultInfo, 0}}, - {2383, {wxPageSetupDialogData, getMarginTopLeft, 0}}, - {2384, {wxPageSetupDialogData, getMarginBottomRight, 0}}, - {2385, {wxPageSetupDialogData, getMinMarginTopLeft, 0}}, - {2386, {wxPageSetupDialogData, getMinMarginBottomRight, 0}}, - {2387, {wxPageSetupDialogData, getPaperId, 0}}, - {2388, {wxPageSetupDialogData, getPaperSize, 0}}, - {2390, {wxPageSetupDialogData, getPrintData, 0}}, - {2391, {wxPageSetupDialogData, isOk, 0}}, - {2392, {wxPageSetupDialogData, setDefaultInfo, 1}}, - {2393, {wxPageSetupDialogData, setDefaultMinMargins, 1}}, - {2394, {wxPageSetupDialogData, setMarginTopLeft, 1}}, - {2395, {wxPageSetupDialogData, setMarginBottomRight, 1}}, - {2396, {wxPageSetupDialogData, setMinMarginTopLeft, 1}}, - {2397, {wxPageSetupDialogData, setMinMarginBottomRight, 1}}, - {2398, {wxPageSetupDialogData, setPaperId, 1}}, - {2399, {wxPageSetupDialogData, setPaperSize_1_1, 1}}, - {2400, {wxPageSetupDialogData, setPaperSize_1_0, 1}}, - {2401, {wxPageSetupDialogData, setPrintData, 1}}, - {2402, {wxPrintDialog, new_2_0, 2}}, - {2403, {wxPrintDialog, new_2_1, 2}}, - {2404, {wxPrintDialog, destruct, 0}}, - {2405, {wxPrintDialog, getPrintDialogData, 0}}, - {2406, {wxPrintDialog, getPrintDC, 0}}, - {2407, {wxPrintDialogData, new_0, 0}}, - {2408, {wxPrintDialogData, new_1_1, 1}}, - {2409, {wxPrintDialogData, new_1_0, 1}}, - {2410, {wxPrintDialogData, destruct, 0}}, - {2411, {wxPrintDialogData, enableHelp, 1}}, - {2412, {wxPrintDialogData, enablePageNumbers, 1}}, - {2413, {wxPrintDialogData, enablePrintToFile, 1}}, - {2414, {wxPrintDialogData, enableSelection, 1}}, - {2415, {wxPrintDialogData, getAllPages, 0}}, - {2416, {wxPrintDialogData, getCollate, 0}}, - {2417, {wxPrintDialogData, getFromPage, 0}}, - {2418, {wxPrintDialogData, getMaxPage, 0}}, - {2419, {wxPrintDialogData, getMinPage, 0}}, - {2420, {wxPrintDialogData, getNoCopies, 0}}, - {2421, {wxPrintDialogData, getPrintData, 0}}, - {2422, {wxPrintDialogData, getPrintToFile, 0}}, - {2423, {wxPrintDialogData, getSelection, 0}}, - {2424, {wxPrintDialogData, getToPage, 0}}, - {2425, {wxPrintDialogData, isOk, 0}}, - {2426, {wxPrintDialogData, setCollate, 1}}, - {2427, {wxPrintDialogData, setFromPage, 1}}, - {2428, {wxPrintDialogData, setMaxPage, 1}}, - {2429, {wxPrintDialogData, setMinPage, 1}}, - {2430, {wxPrintDialogData, setNoCopies, 1}}, - {2431, {wxPrintDialogData, setPrintData, 1}}, - {2432, {wxPrintDialogData, setPrintToFile, 1}}, - {2433, {wxPrintDialogData, setSelection, 1}}, - {2434, {wxPrintDialogData, setToPage, 1}}, - {2435, {wxPrintData, new_0, 0}}, - {2436, {wxPrintData, new_1, 1}}, - {2437, {wxPrintData, destruct, 0}}, - {2438, {wxPrintData, getCollate, 0}}, - {2439, {wxPrintData, getBin, 0}}, - {2440, {wxPrintData, getColour, 0}}, - {2441, {wxPrintData, getDuplex, 0}}, - {2442, {wxPrintData, getNoCopies, 0}}, - {2443, {wxPrintData, getOrientation, 0}}, - {2444, {wxPrintData, getPaperId, 0}}, - {2445, {wxPrintData, getPrinterName, 0}}, - {2446, {wxPrintData, getQuality, 0}}, - {2447, {wxPrintData, isOk, 0}}, - {2448, {wxPrintData, setBin, 1}}, - {2449, {wxPrintData, setCollate, 1}}, - {2450, {wxPrintData, setColour, 1}}, - {2451, {wxPrintData, setDuplex, 1}}, - {2452, {wxPrintData, setNoCopies, 1}}, - {2453, {wxPrintData, setOrientation, 1}}, - {2454, {wxPrintData, setPaperId, 1}}, - {2455, {wxPrintData, setPrinterName, 1}}, - {2456, {wxPrintData, setQuality, 1}}, - {2459, {wxPrintPreview, new_2, 2}}, - {2460, {wxPrintPreview, new_3, 3}}, - {2462, {wxPrintPreview, destruct, 0}}, - {2463, {wxPrintPreview, getCanvas, 0}}, - {2464, {wxPrintPreview, getCurrentPage, 0}}, - {2465, {wxPrintPreview, getFrame, 0}}, - {2466, {wxPrintPreview, getMaxPage, 0}}, - {2467, {wxPrintPreview, getMinPage, 0}}, - {2468, {wxPrintPreview, getPrintout, 0}}, - {2469, {wxPrintPreview, getPrintoutForPrinting, 0}}, - {2470, {wxPrintPreview, isOk, 0}}, - {2471, {wxPrintPreview, paintPage, 2}}, - {2472, {wxPrintPreview, print, 1}}, - {2473, {wxPrintPreview, renderPage, 1}}, - {2474, {wxPrintPreview, setCanvas, 1}}, - {2475, {wxPrintPreview, setCurrentPage, 1}}, - {2476, {wxPrintPreview, setFrame, 1}}, - {2477, {wxPrintPreview, setPrintout, 1}}, - {2478, {wxPrintPreview, setZoom, 1}}, - {2479, {wxPreviewFrame, new, 3}}, - {2480, {wxPreviewFrame, destruct, 0}}, - {2481, {wxPreviewFrame, createControlBar, 0}}, - {2482, {wxPreviewFrame, createCanvas, 0}}, - {2483, {wxPreviewFrame, initialize, 0}}, - {2484, {wxPreviewFrame, onCloseWindow, 1}}, - {2485, {wxPreviewControlBar, new, 4}}, - {2486, {wxPreviewControlBar, destruct, 0}}, - {2487, {wxPreviewControlBar, createButtons, 0}}, - {2488, {wxPreviewControlBar, getPrintPreview, 0}}, - {2489, {wxPreviewControlBar, getZoomControl, 0}}, - {2490, {wxPreviewControlBar, setZoomControl, 1}}, - {2492, {wxPrinter, new, 1}}, - {2493, {wxPrinter, createAbortWindow, 2}}, - {2494, {wxPrinter, getAbort, 0}}, - {2495, {wxPrinter, getLastError, 0}}, - {2496, {wxPrinter, getPrintDialogData, 0}}, - {2497, {wxPrinter, print, 3}}, - {2498, {wxPrinter, printDialog, 1}}, - {2499, {wxPrinter, reportError, 3}}, - {2500, {wxPrinter, setup, 1}}, - {2501, {wxPrinter, 'Destroy', undefined}}, - {2502, {wxXmlResource, new_1, 1}}, - {2503, {wxXmlResource, new_2, 2}}, - {2504, {wxXmlResource, destruct, 0}}, - {2505, {wxXmlResource, attachUnknownControl, 3}}, - {2506, {wxXmlResource, clearHandlers, 0}}, - {2507, {wxXmlResource, compareVersion, 4}}, - {2508, {wxXmlResource, get, 0}}, - {2509, {wxXmlResource, getFlags, 0}}, - {2510, {wxXmlResource, getVersion, 0}}, - {2511, {wxXmlResource, getXRCID, 2}}, - {2512, {wxXmlResource, initAllHandlers, 0}}, - {2513, {wxXmlResource, load, 1}}, - {2514, {wxXmlResource, loadBitmap, 1}}, - {2515, {wxXmlResource, loadDialog_2, 2}}, - {2516, {wxXmlResource, loadDialog_3, 3}}, - {2517, {wxXmlResource, loadFrame_2, 2}}, - {2518, {wxXmlResource, loadFrame_3, 3}}, - {2519, {wxXmlResource, loadIcon, 1}}, - {2520, {wxXmlResource, loadMenu, 1}}, - {2521, {wxXmlResource, loadMenuBar_2, 2}}, - {2522, {wxXmlResource, loadMenuBar_1, 1}}, - {2523, {wxXmlResource, loadPanel_2, 2}}, - {2524, {wxXmlResource, loadPanel_3, 3}}, - {2525, {wxXmlResource, loadToolBar, 2}}, - {2526, {wxXmlResource, set, 1}}, - {2527, {wxXmlResource, setFlags, 1}}, - {2528, {wxXmlResource, unload, 1}}, - {2529, {wxXmlResource, xrcctrl, 3}}, - {2530, {wxHtmlEasyPrinting, new, 1}}, - {2531, {wxHtmlEasyPrinting, destruct, 0}}, - {2532, {wxHtmlEasyPrinting, getPrintData, 0}}, - {2533, {wxHtmlEasyPrinting, getPageSetupData, 0}}, - {2534, {wxHtmlEasyPrinting, previewFile, 1}}, - {2535, {wxHtmlEasyPrinting, previewText, 2}}, - {2536, {wxHtmlEasyPrinting, printFile, 1}}, - {2537, {wxHtmlEasyPrinting, printText, 2}}, - {2538, {wxHtmlEasyPrinting, pageSetup, 0}}, - {2539, {wxHtmlEasyPrinting, setFonts, 3}}, - {2540, {wxHtmlEasyPrinting, setHeader, 2}}, - {2541, {wxHtmlEasyPrinting, setFooter, 2}}, - {2543, {wxGLCanvas, new_2, 2}}, - {2544, {wxGLCanvas, new_3_1, 3}}, - {2545, {wxGLCanvas, new_3_0, 3}}, - {2546, {wxGLCanvas, getContext, 0}}, - {2548, {wxGLCanvas, setCurrent, 0}}, - {2549, {wxGLCanvas, swapBuffers, 0}}, - {2550, {wxGLCanvas, 'Destroy', undefined}}, - {2551, {wxAuiManager, new, 1}}, - {2552, {wxAuiManager, destruct, 0}}, - {2553, {wxAuiManager, addPane_2_1, 2}}, - {2554, {wxAuiManager, addPane_3, 3}}, - {2555, {wxAuiManager, addPane_2_0, 2}}, - {2556, {wxAuiManager, detachPane, 1}}, - {2557, {wxAuiManager, getAllPanes, 0}}, - {2558, {wxAuiManager, getArtProvider, 0}}, - {2559, {wxAuiManager, getDockSizeConstraint, 2}}, - {2560, {wxAuiManager, getFlags, 0}}, - {2561, {wxAuiManager, getManagedWindow, 0}}, - {2562, {wxAuiManager, getManager, 1}}, - {2563, {wxAuiManager, getPane_1_1, 1}}, - {2564, {wxAuiManager, getPane_1_0, 1}}, - {2565, {wxAuiManager, hideHint, 0}}, - {2566, {wxAuiManager, insertPane, 3}}, - {2567, {wxAuiManager, loadPaneInfo, 2}}, - {2568, {wxAuiManager, loadPerspective, 2}}, - {2569, {wxAuiManager, savePaneInfo, 1}}, - {2570, {wxAuiManager, savePerspective, 0}}, - {2571, {wxAuiManager, setArtProvider, 1}}, - {2572, {wxAuiManager, setDockSizeConstraint, 2}}, - {2573, {wxAuiManager, setFlags, 1}}, - {2574, {wxAuiManager, setManagedWindow, 1}}, - {2575, {wxAuiManager, showHint, 1}}, - {2576, {wxAuiManager, unInit, 0}}, - {2577, {wxAuiManager, update, 0}}, - {2578, {wxAuiPaneInfo, new_0, 0}}, - {2579, {wxAuiPaneInfo, new_1, 1}}, - {2580, {wxAuiPaneInfo, destruct, 0}}, - {2581, {wxAuiPaneInfo, bestSize_1, 1}}, - {2582, {wxAuiPaneInfo, bestSize_2, 2}}, - {2583, {wxAuiPaneInfo, bottom, 0}}, - {2584, {wxAuiPaneInfo, bottomDockable, 1}}, - {2585, {wxAuiPaneInfo, caption, 1}}, - {2586, {wxAuiPaneInfo, captionVisible, 1}}, - {2587, {wxAuiPaneInfo, centre, 0}}, - {2588, {wxAuiPaneInfo, centrePane, 0}}, - {2589, {wxAuiPaneInfo, closeButton, 1}}, - {2590, {wxAuiPaneInfo, defaultPane, 0}}, - {2591, {wxAuiPaneInfo, destroyOnClose, 1}}, - {2592, {wxAuiPaneInfo, direction, 1}}, - {2593, {wxAuiPaneInfo, dock, 0}}, - {2594, {wxAuiPaneInfo, dockable, 1}}, - {2595, {wxAuiPaneInfo, fixed, 0}}, - {2596, {wxAuiPaneInfo, float, 0}}, - {2597, {wxAuiPaneInfo, floatable, 1}}, - {2598, {wxAuiPaneInfo, floatingPosition_1, 1}}, - {2599, {wxAuiPaneInfo, floatingPosition_2, 2}}, - {2600, {wxAuiPaneInfo, floatingSize_1, 1}}, - {2601, {wxAuiPaneInfo, floatingSize_2, 2}}, - {2602, {wxAuiPaneInfo, gripper, 1}}, - {2603, {wxAuiPaneInfo, gripperTop, 1}}, - {2604, {wxAuiPaneInfo, hasBorder, 0}}, - {2605, {wxAuiPaneInfo, hasCaption, 0}}, - {2606, {wxAuiPaneInfo, hasCloseButton, 0}}, - {2607, {wxAuiPaneInfo, hasFlag, 1}}, - {2608, {wxAuiPaneInfo, hasGripper, 0}}, - {2609, {wxAuiPaneInfo, hasGripperTop, 0}}, - {2610, {wxAuiPaneInfo, hasMaximizeButton, 0}}, - {2611, {wxAuiPaneInfo, hasMinimizeButton, 0}}, - {2612, {wxAuiPaneInfo, hasPinButton, 0}}, - {2613, {wxAuiPaneInfo, hide, 0}}, - {2614, {wxAuiPaneInfo, isBottomDockable, 0}}, - {2615, {wxAuiPaneInfo, isDocked, 0}}, - {2616, {wxAuiPaneInfo, isFixed, 0}}, - {2617, {wxAuiPaneInfo, isFloatable, 0}}, - {2618, {wxAuiPaneInfo, isFloating, 0}}, - {2619, {wxAuiPaneInfo, isLeftDockable, 0}}, - {2620, {wxAuiPaneInfo, isMovable, 0}}, - {2621, {wxAuiPaneInfo, isOk, 0}}, - {2622, {wxAuiPaneInfo, isResizable, 0}}, - {2623, {wxAuiPaneInfo, isRightDockable, 0}}, - {2624, {wxAuiPaneInfo, isShown, 0}}, - {2625, {wxAuiPaneInfo, isToolbar, 0}}, - {2626, {wxAuiPaneInfo, isTopDockable, 0}}, - {2627, {wxAuiPaneInfo, layer, 1}}, - {2628, {wxAuiPaneInfo, left, 0}}, - {2629, {wxAuiPaneInfo, leftDockable, 1}}, - {2630, {wxAuiPaneInfo, maxSize_1, 1}}, - {2631, {wxAuiPaneInfo, maxSize_2, 2}}, - {2632, {wxAuiPaneInfo, maximizeButton, 1}}, - {2633, {wxAuiPaneInfo, minSize_1, 1}}, - {2634, {wxAuiPaneInfo, minSize_2, 2}}, - {2635, {wxAuiPaneInfo, minimizeButton, 1}}, - {2636, {wxAuiPaneInfo, movable, 1}}, - {2637, {wxAuiPaneInfo, name, 1}}, - {2638, {wxAuiPaneInfo, paneBorder, 1}}, - {2639, {wxAuiPaneInfo, pinButton, 1}}, - {2640, {wxAuiPaneInfo, position, 1}}, - {2641, {wxAuiPaneInfo, resizable, 1}}, - {2642, {wxAuiPaneInfo, right, 0}}, - {2643, {wxAuiPaneInfo, rightDockable, 1}}, - {2644, {wxAuiPaneInfo, row, 1}}, - {2645, {wxAuiPaneInfo, safeSet, 1}}, - {2646, {wxAuiPaneInfo, setFlag, 2}}, - {2647, {wxAuiPaneInfo, show, 1}}, - {2648, {wxAuiPaneInfo, toolbarPane, 0}}, - {2649, {wxAuiPaneInfo, top, 0}}, - {2650, {wxAuiPaneInfo, topDockable, 1}}, - {2651, {wxAuiPaneInfo, window, 1}}, - {2652, {wxAuiNotebook, new_0, 0}}, - {2653, {wxAuiNotebook, new_2, 2}}, - {2654, {wxAuiNotebook, addPage, 3}}, - {2655, {wxAuiNotebook, create, 2}}, - {2656, {wxAuiNotebook, deletePage, 1}}, - {2657, {wxAuiNotebook, getArtProvider, 0}}, - {2658, {wxAuiNotebook, getPage, 1}}, - {2659, {wxAuiNotebook, getPageBitmap, 1}}, - {2660, {wxAuiNotebook, getPageCount, 0}}, - {2661, {wxAuiNotebook, getPageIndex, 1}}, - {2662, {wxAuiNotebook, getPageText, 1}}, - {2663, {wxAuiNotebook, getSelection, 0}}, - {2664, {wxAuiNotebook, insertPage, 4}}, - {2665, {wxAuiNotebook, removePage, 1}}, - {2666, {wxAuiNotebook, setArtProvider, 1}}, - {2667, {wxAuiNotebook, setFont, 1}}, - {2668, {wxAuiNotebook, setPageBitmap, 2}}, - {2669, {wxAuiNotebook, setPageText, 2}}, - {2670, {wxAuiNotebook, setSelection, 1}}, - {2671, {wxAuiNotebook, setTabCtrlHeight, 1}}, - {2672, {wxAuiNotebook, setUniformBitmapSize, 1}}, - {2673, {wxAuiNotebook, 'Destroy', undefined}}, - {2674, {wxMDIParentFrame, new_0, 0}}, - {2675, {wxMDIParentFrame, new_4, 4}}, - {2676, {wxMDIParentFrame, destruct, 0}}, - {2677, {wxMDIParentFrame, activateNext, 0}}, - {2678, {wxMDIParentFrame, activatePrevious, 0}}, - {2679, {wxMDIParentFrame, arrangeIcons, 0}}, - {2680, {wxMDIParentFrame, cascade, 0}}, - {2681, {wxMDIParentFrame, create, 4}}, - {2682, {wxMDIParentFrame, getActiveChild, 0}}, - {2683, {wxMDIParentFrame, getClientWindow, 0}}, - {2684, {wxMDIParentFrame, tile, 1}}, - {2685, {wxMDIChildFrame, new_0, 0}}, - {2686, {wxMDIChildFrame, new_4, 4}}, - {2687, {wxMDIChildFrame, destruct, 0}}, - {2688, {wxMDIChildFrame, activate, 0}}, - {2689, {wxMDIChildFrame, create, 4}}, - {2690, {wxMDIChildFrame, maximize, 1}}, - {2691, {wxMDIChildFrame, restore, 0}}, - {2692, {wxMDIClientWindow, new_0, 0}}, - {2693, {wxMDIClientWindow, new_2, 2}}, - {2694, {wxMDIClientWindow, destruct, 0}}, - {2695, {wxMDIClientWindow, createClient, 2}}, - {2696, {wxLayoutAlgorithm, new, 0}}, - {2697, {wxLayoutAlgorithm, layoutFrame, 2}}, - {2698, {wxLayoutAlgorithm, layoutMDIFrame, 2}}, - {2699, {wxLayoutAlgorithm, layoutWindow, 2}}, - {2700, {wxLayoutAlgorithm, 'Destroy', undefined}}, - {2701, {wxEvent, getId, 0}}, - {2702, {wxEvent, getSkipped, 0}}, - {2703, {wxEvent, getTimestamp, 0}}, - {2704, {wxEvent, isCommandEvent, 0}}, - {2705, {wxEvent, resumePropagation, 1}}, - {2706, {wxEvent, shouldPropagate, 0}}, - {2707, {wxEvent, skip, 1}}, - {2708, {wxEvent, stopPropagation, 0}}, - {2709, {wxCommandEvent, getClientData, 0}}, - {2710, {wxCommandEvent, getExtraLong, 0}}, - {2711, {wxCommandEvent, getInt, 0}}, - {2712, {wxCommandEvent, getSelection, 0}}, - {2713, {wxCommandEvent, getString, 0}}, - {2714, {wxCommandEvent, isChecked, 0}}, - {2715, {wxCommandEvent, isSelection, 0}}, - {2716, {wxCommandEvent, setInt, 1}}, - {2717, {wxCommandEvent, setString, 1}}, - {2718, {wxScrollEvent, getOrientation, 0}}, - {2719, {wxScrollEvent, getPosition, 0}}, - {2720, {wxScrollWinEvent, getOrientation, 0}}, - {2721, {wxScrollWinEvent, getPosition, 0}}, - {2722, {wxMouseEvent, altDown, 0}}, - {2723, {wxMouseEvent, button, 1}}, - {2724, {wxMouseEvent, buttonDClick, 1}}, - {2725, {wxMouseEvent, buttonDown, 1}}, - {2726, {wxMouseEvent, buttonUp, 1}}, - {2727, {wxMouseEvent, cmdDown, 0}}, - {2728, {wxMouseEvent, controlDown, 0}}, - {2729, {wxMouseEvent, dragging, 0}}, - {2730, {wxMouseEvent, entering, 0}}, - {2731, {wxMouseEvent, getButton, 0}}, - {2734, {wxMouseEvent, getPosition, 0}}, - {2735, {wxMouseEvent, getLogicalPosition, 1}}, - {2736, {wxMouseEvent, getLinesPerAction, 0}}, - {2737, {wxMouseEvent, getWheelRotation, 0}}, - {2738, {wxMouseEvent, getWheelDelta, 0}}, - {2739, {wxMouseEvent, getX, 0}}, - {2740, {wxMouseEvent, getY, 0}}, - {2741, {wxMouseEvent, isButton, 0}}, - {2742, {wxMouseEvent, isPageScroll, 0}}, - {2743, {wxMouseEvent, leaving, 0}}, - {2744, {wxMouseEvent, leftDClick, 0}}, - {2745, {wxMouseEvent, leftDown, 0}}, - {2746, {wxMouseEvent, leftIsDown, 0}}, - {2747, {wxMouseEvent, leftUp, 0}}, - {2748, {wxMouseEvent, metaDown, 0}}, - {2749, {wxMouseEvent, middleDClick, 0}}, - {2750, {wxMouseEvent, middleDown, 0}}, - {2751, {wxMouseEvent, middleIsDown, 0}}, - {2752, {wxMouseEvent, middleUp, 0}}, - {2753, {wxMouseEvent, moving, 0}}, - {2754, {wxMouseEvent, rightDClick, 0}}, - {2755, {wxMouseEvent, rightDown, 0}}, - {2756, {wxMouseEvent, rightIsDown, 0}}, - {2757, {wxMouseEvent, rightUp, 0}}, - {2758, {wxMouseEvent, shiftDown, 0}}, - {2759, {wxSetCursorEvent, getCursor, 0}}, - {2760, {wxSetCursorEvent, getX, 0}}, - {2761, {wxSetCursorEvent, getY, 0}}, - {2762, {wxSetCursorEvent, hasCursor, 0}}, - {2763, {wxSetCursorEvent, setCursor, 1}}, - {2764, {wxKeyEvent, altDown, 0}}, - {2765, {wxKeyEvent, cmdDown, 0}}, - {2766, {wxKeyEvent, controlDown, 0}}, - {2767, {wxKeyEvent, getKeyCode, 0}}, - {2768, {wxKeyEvent, getModifiers, 0}}, - {2771, {wxKeyEvent, getPosition, 0}}, - {2772, {wxKeyEvent, getRawKeyCode, 0}}, - {2773, {wxKeyEvent, getRawKeyFlags, 0}}, - {2774, {wxKeyEvent, getUnicodeKey, 0}}, - {2775, {wxKeyEvent, getX, 0}}, - {2776, {wxKeyEvent, getY, 0}}, - {2777, {wxKeyEvent, hasModifiers, 0}}, - {2778, {wxKeyEvent, metaDown, 0}}, - {2779, {wxKeyEvent, shiftDown, 0}}, - {2780, {wxSizeEvent, getSize, 0}}, - {2781, {wxMoveEvent, getPosition, 0}}, - {2782, {wxEraseEvent, getDC, 0}}, - {2783, {wxFocusEvent, getWindow, 0}}, - {2784, {wxChildFocusEvent, getWindow, 0}}, - {2785, {wxMenuEvent, getMenu, 0}}, - {2786, {wxMenuEvent, getMenuId, 0}}, - {2787, {wxMenuEvent, isPopup, 0}}, - {2788, {wxCloseEvent, canVeto, 0}}, - {2789, {wxCloseEvent, getLoggingOff, 0}}, - {2790, {wxCloseEvent, setCanVeto, 1}}, - {2791, {wxCloseEvent, setLoggingOff, 1}}, - {2792, {wxCloseEvent, veto, 1}}, - {2793, {wxShowEvent, setShow, 1}}, - {2794, {wxShowEvent, getShow, 0}}, - {2795, {wxIconizeEvent, iconized, 0}}, - {2796, {wxJoystickEvent, buttonDown, 1}}, - {2797, {wxJoystickEvent, buttonIsDown, 1}}, - {2798, {wxJoystickEvent, buttonUp, 1}}, - {2799, {wxJoystickEvent, getButtonChange, 0}}, - {2800, {wxJoystickEvent, getButtonState, 0}}, - {2801, {wxJoystickEvent, getJoystick, 0}}, - {2802, {wxJoystickEvent, getPosition, 0}}, - {2803, {wxJoystickEvent, getZPosition, 0}}, - {2804, {wxJoystickEvent, isButton, 0}}, - {2805, {wxJoystickEvent, isMove, 0}}, - {2806, {wxJoystickEvent, isZMove, 0}}, - {2807, {wxUpdateUIEvent, canUpdate, 1}}, - {2808, {wxUpdateUIEvent, check, 1}}, - {2809, {wxUpdateUIEvent, enable, 1}}, - {2810, {wxUpdateUIEvent, show, 1}}, - {2811, {wxUpdateUIEvent, getChecked, 0}}, - {2812, {wxUpdateUIEvent, getEnabled, 0}}, - {2813, {wxUpdateUIEvent, getShown, 0}}, - {2814, {wxUpdateUIEvent, getSetChecked, 0}}, - {2815, {wxUpdateUIEvent, getSetEnabled, 0}}, - {2816, {wxUpdateUIEvent, getSetShown, 0}}, - {2817, {wxUpdateUIEvent, getSetText, 0}}, - {2818, {wxUpdateUIEvent, getText, 0}}, - {2819, {wxUpdateUIEvent, getMode, 0}}, - {2820, {wxUpdateUIEvent, getUpdateInterval, 0}}, - {2821, {wxUpdateUIEvent, resetUpdateTime, 0}}, - {2822, {wxUpdateUIEvent, setMode, 1}}, - {2823, {wxUpdateUIEvent, setText, 1}}, - {2824, {wxUpdateUIEvent, setUpdateInterval, 1}}, - {2825, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}}, - {2826, {wxPaletteChangedEvent, setChangedWindow, 1}}, - {2827, {wxPaletteChangedEvent, getChangedWindow, 0}}, - {2828, {wxQueryNewPaletteEvent, setPaletteRealized, 1}}, - {2829, {wxQueryNewPaletteEvent, getPaletteRealized, 0}}, - {2830, {wxNavigationKeyEvent, getDirection, 0}}, - {2831, {wxNavigationKeyEvent, setDirection, 1}}, - {2832, {wxNavigationKeyEvent, isWindowChange, 0}}, - {2833, {wxNavigationKeyEvent, setWindowChange, 1}}, - {2834, {wxNavigationKeyEvent, isFromTab, 0}}, - {2835, {wxNavigationKeyEvent, setFromTab, 1}}, - {2836, {wxNavigationKeyEvent, getCurrentFocus, 0}}, - {2837, {wxNavigationKeyEvent, setCurrentFocus, 1}}, - {2838, {wxHelpEvent, getOrigin, 0}}, - {2839, {wxHelpEvent, getPosition, 0}}, - {2840, {wxHelpEvent, setOrigin, 1}}, - {2841, {wxHelpEvent, setPosition, 1}}, - {2842, {wxContextMenuEvent, getPosition, 0}}, - {2843, {wxContextMenuEvent, setPosition, 1}}, - {2844, {wxIdleEvent, canSend, 1}}, - {2845, {wxIdleEvent, getMode, 0}}, - {2846, {wxIdleEvent, requestMore, 1}}, - {2847, {wxIdleEvent, moreRequested, 0}}, - {2848, {wxIdleEvent, setMode, 1}}, - {2849, {wxGridEvent, altDown, 0}}, - {2850, {wxGridEvent, controlDown, 0}}, - {2851, {wxGridEvent, getCol, 0}}, - {2852, {wxGridEvent, getPosition, 0}}, - {2853, {wxGridEvent, getRow, 0}}, - {2854, {wxGridEvent, metaDown, 0}}, - {2855, {wxGridEvent, selecting, 0}}, - {2856, {wxGridEvent, shiftDown, 0}}, - {2857, {wxNotifyEvent, allow, 0}}, - {2858, {wxNotifyEvent, isAllowed, 0}}, - {2859, {wxNotifyEvent, veto, 0}}, - {2860, {wxSashEvent, getEdge, 0}}, - {2861, {wxSashEvent, getDragRect, 0}}, - {2862, {wxSashEvent, getDragStatus, 0}}, - {2863, {wxListEvent, getCacheFrom, 0}}, - {2864, {wxListEvent, getCacheTo, 0}}, - {2865, {wxListEvent, getKeyCode, 0}}, - {2866, {wxListEvent, getIndex, 0}}, - {2867, {wxListEvent, getColumn, 0}}, - {2868, {wxListEvent, getPoint, 0}}, - {2869, {wxListEvent, getLabel, 0}}, - {2870, {wxListEvent, getText, 0}}, - {2871, {wxListEvent, getImage, 0}}, - {2872, {wxListEvent, getData, 0}}, - {2873, {wxListEvent, getMask, 0}}, - {2874, {wxListEvent, getItem, 0}}, - {2875, {wxListEvent, isEditCancelled, 0}}, - {2876, {wxDateEvent, getDate, 0}}, - {2877, {wxCalendarEvent, getWeekDay, 0}}, - {2878, {wxFileDirPickerEvent, getPath, 0}}, - {2879, {wxColourPickerEvent, getColour, 0}}, - {2880, {wxFontPickerEvent, getFont, 0}}, - {2881, {wxStyledTextEvent, getPosition, 0}}, - {2882, {wxStyledTextEvent, getKey, 0}}, - {2883, {wxStyledTextEvent, getModifiers, 0}}, - {2884, {wxStyledTextEvent, getModificationType, 0}}, - {2885, {wxStyledTextEvent, getText, 0}}, - {2886, {wxStyledTextEvent, getLength, 0}}, - {2887, {wxStyledTextEvent, getLinesAdded, 0}}, - {2888, {wxStyledTextEvent, getLine, 0}}, - {2889, {wxStyledTextEvent, getFoldLevelNow, 0}}, - {2890, {wxStyledTextEvent, getFoldLevelPrev, 0}}, - {2891, {wxStyledTextEvent, getMargin, 0}}, - {2892, {wxStyledTextEvent, getMessage, 0}}, - {2893, {wxStyledTextEvent, getWParam, 0}}, - {2894, {wxStyledTextEvent, getLParam, 0}}, - {2895, {wxStyledTextEvent, getListType, 0}}, - {2896, {wxStyledTextEvent, getX, 0}}, - {2897, {wxStyledTextEvent, getY, 0}}, - {2898, {wxStyledTextEvent, getDragText, 0}}, - {2899, {wxStyledTextEvent, getDragAllowMove, 0}}, - {2900, {wxStyledTextEvent, getDragResult, 0}}, - {2901, {wxStyledTextEvent, getShift, 0}}, - {2902, {wxStyledTextEvent, getControl, 0}}, - {2903, {wxStyledTextEvent, getAlt, 0}}, - {2904, {utils, getKeyState, 1}}, - {2905, {utils, getMousePosition, 2}}, - {2906, {utils, getMouseState, 0}}, - {2907, {utils, setDetectableAutoRepeat, 1}}, - {2908, {utils, bell, 0}}, - {2909, {utils, findMenuItemId, 3}}, - {2910, {utils, genericFindWindowAtPoint, 1}}, - {2911, {utils, findWindowAtPoint, 1}}, - {2912, {utils, beginBusyCursor, 1}}, - {2913, {utils, endBusyCursor, 0}}, - {2914, {utils, isBusy, 0}}, - {2915, {utils, shutdown, 1}}, - {2916, {utils, shell, 1}}, - {2917, {utils, launchDefaultBrowser, 2}}, - {2918, {utils, getEmailAddress, 0}}, - {2919, {utils, getUserId, 0}}, - {2920, {utils, getHomeDir, 0}}, - {2921, {utils, newId, 0}}, - {2922, {utils, registerId, 1}}, - {2923, {utils, getCurrentId, 0}}, - {2924, {utils, getOsDescription, 0}}, - {2925, {utils, isPlatformLittleEndian, 0}}, - {2926, {utils, isPlatform64Bit, 0}}, - {2927, {wxPrintout, new, 1}}, - {2928, {wxPrintout, destruct, 0}}, - {2929, {wxPrintout, getDC, 0}}, - {2930, {wxPrintout, getPageSizeMM, 2}}, - {2931, {wxPrintout, getPageSizePixels, 2}}, - {2932, {wxPrintout, getPaperRectPixels, 0}}, - {2933, {wxPrintout, getPPIPrinter, 2}}, - {2934, {wxPrintout, getPPIScreen, 2}}, - {2935, {wxPrintout, getTitle, 0}}, - {2936, {wxPrintout, isPreview, 0}}, - {2937, {wxPrintout, fitThisSizeToPaper, 1}}, - {2938, {wxPrintout, fitThisSizeToPage, 1}}, - {2939, {wxPrintout, fitThisSizeToPageMargins, 2}}, - {2940, {wxPrintout, mapScreenSizeToPaper, 0}}, - {2941, {wxPrintout, mapScreenSizeToPage, 0}}, - {2942, {wxPrintout, mapScreenSizeToPageMargins, 1}}, - {2943, {wxPrintout, mapScreenSizeToDevice, 0}}, - {2944, {wxPrintout, getLogicalPaperRect, 0}}, - {2945, {wxPrintout, getLogicalPageRect, 0}}, - {2946, {wxPrintout, getLogicalPageMarginsRect, 1}}, - {2947, {wxPrintout, setLogicalOrigin, 2}}, - {2948, {wxPrintout, offsetLogicalOrigin, 2}}, - {2949, {wxStyledTextCtrl, new_2, 2}}, - {2950, {wxStyledTextCtrl, new_0, 0}}, - {2951, {wxStyledTextCtrl, destruct, 0}}, - {2952, {wxStyledTextCtrl, create, 2}}, - {2953, {wxStyledTextCtrl, addText, 1}}, - {2954, {wxStyledTextCtrl, addStyledText, 1}}, - {2955, {wxStyledTextCtrl, insertText, 2}}, - {2956, {wxStyledTextCtrl, clearAll, 0}}, - {2957, {wxStyledTextCtrl, clearDocumentStyle, 0}}, - {2958, {wxStyledTextCtrl, getLength, 0}}, - {2959, {wxStyledTextCtrl, getCharAt, 1}}, - {2960, {wxStyledTextCtrl, getCurrentPos, 0}}, - {2961, {wxStyledTextCtrl, getAnchor, 0}}, - {2962, {wxStyledTextCtrl, getStyleAt, 1}}, - {2963, {wxStyledTextCtrl, redo, 0}}, - {2964, {wxStyledTextCtrl, setUndoCollection, 1}}, - {2965, {wxStyledTextCtrl, selectAll, 0}}, - {2966, {wxStyledTextCtrl, setSavePoint, 0}}, - {2967, {wxStyledTextCtrl, getStyledText, 2}}, - {2968, {wxStyledTextCtrl, canRedo, 0}}, - {2969, {wxStyledTextCtrl, markerLineFromHandle, 1}}, - {2970, {wxStyledTextCtrl, markerDeleteHandle, 1}}, - {2971, {wxStyledTextCtrl, getUndoCollection, 0}}, - {2972, {wxStyledTextCtrl, getViewWhiteSpace, 0}}, - {2973, {wxStyledTextCtrl, setViewWhiteSpace, 1}}, - {2974, {wxStyledTextCtrl, positionFromPoint, 1}}, - {2975, {wxStyledTextCtrl, positionFromPointClose, 2}}, - {2976, {wxStyledTextCtrl, gotoLine, 1}}, - {2977, {wxStyledTextCtrl, gotoPos, 1}}, - {2978, {wxStyledTextCtrl, setAnchor, 1}}, - {2979, {wxStyledTextCtrl, getCurLine, 1}}, - {2980, {wxStyledTextCtrl, getEndStyled, 0}}, - {2981, {wxStyledTextCtrl, convertEOLs, 1}}, - {2982, {wxStyledTextCtrl, getEOLMode, 0}}, - {2983, {wxStyledTextCtrl, setEOLMode, 1}}, - {2984, {wxStyledTextCtrl, startStyling, 2}}, - {2985, {wxStyledTextCtrl, setStyling, 2}}, - {2986, {wxStyledTextCtrl, getBufferedDraw, 0}}, - {2987, {wxStyledTextCtrl, setBufferedDraw, 1}}, - {2988, {wxStyledTextCtrl, setTabWidth, 1}}, - {2989, {wxStyledTextCtrl, getTabWidth, 0}}, - {2990, {wxStyledTextCtrl, setCodePage, 1}}, - {2991, {wxStyledTextCtrl, markerDefine, 3}}, - {2992, {wxStyledTextCtrl, markerSetForeground, 2}}, - {2993, {wxStyledTextCtrl, markerSetBackground, 2}}, - {2994, {wxStyledTextCtrl, markerAdd, 2}}, - {2995, {wxStyledTextCtrl, markerDelete, 2}}, - {2996, {wxStyledTextCtrl, markerDeleteAll, 1}}, - {2997, {wxStyledTextCtrl, markerGet, 1}}, - {2998, {wxStyledTextCtrl, markerNext, 2}}, - {2999, {wxStyledTextCtrl, markerPrevious, 2}}, - {3000, {wxStyledTextCtrl, markerDefineBitmap, 2}}, - {3001, {wxStyledTextCtrl, markerAddSet, 2}}, - {3002, {wxStyledTextCtrl, markerSetAlpha, 2}}, - {3003, {wxStyledTextCtrl, setMarginType, 2}}, - {3004, {wxStyledTextCtrl, getMarginType, 1}}, - {3005, {wxStyledTextCtrl, setMarginWidth, 2}}, - {3006, {wxStyledTextCtrl, getMarginWidth, 1}}, - {3007, {wxStyledTextCtrl, setMarginMask, 2}}, - {3008, {wxStyledTextCtrl, getMarginMask, 1}}, - {3009, {wxStyledTextCtrl, setMarginSensitive, 2}}, - {3010, {wxStyledTextCtrl, getMarginSensitive, 1}}, - {3011, {wxStyledTextCtrl, styleClearAll, 0}}, - {3012, {wxStyledTextCtrl, styleSetForeground, 2}}, - {3013, {wxStyledTextCtrl, styleSetBackground, 2}}, - {3014, {wxStyledTextCtrl, styleSetBold, 2}}, - {3015, {wxStyledTextCtrl, styleSetItalic, 2}}, - {3016, {wxStyledTextCtrl, styleSetSize, 2}}, - {3017, {wxStyledTextCtrl, styleSetFaceName, 2}}, - {3018, {wxStyledTextCtrl, styleSetEOLFilled, 2}}, - {3019, {wxStyledTextCtrl, styleResetDefault, 0}}, - {3020, {wxStyledTextCtrl, styleSetUnderline, 2}}, - {3021, {wxStyledTextCtrl, styleSetCase, 2}}, - {3022, {wxStyledTextCtrl, styleSetHotSpot, 2}}, - {3023, {wxStyledTextCtrl, setSelForeground, 2}}, - {3024, {wxStyledTextCtrl, setSelBackground, 2}}, - {3025, {wxStyledTextCtrl, getSelAlpha, 0}}, - {3026, {wxStyledTextCtrl, setSelAlpha, 1}}, - {3027, {wxStyledTextCtrl, setCaretForeground, 1}}, - {3028, {wxStyledTextCtrl, cmdKeyAssign, 3}}, - {3029, {wxStyledTextCtrl, cmdKeyClear, 2}}, - {3030, {wxStyledTextCtrl, cmdKeyClearAll, 0}}, - {3031, {wxStyledTextCtrl, setStyleBytes, 2}}, - {3032, {wxStyledTextCtrl, styleSetVisible, 2}}, - {3033, {wxStyledTextCtrl, getCaretPeriod, 0}}, - {3034, {wxStyledTextCtrl, setCaretPeriod, 1}}, - {3035, {wxStyledTextCtrl, setWordChars, 1}}, - {3036, {wxStyledTextCtrl, beginUndoAction, 0}}, - {3037, {wxStyledTextCtrl, endUndoAction, 0}}, - {3038, {wxStyledTextCtrl, indicatorSetStyle, 2}}, - {3039, {wxStyledTextCtrl, indicatorGetStyle, 1}}, - {3040, {wxStyledTextCtrl, indicatorSetForeground, 2}}, - {3041, {wxStyledTextCtrl, indicatorGetForeground, 1}}, - {3042, {wxStyledTextCtrl, setWhitespaceForeground, 2}}, - {3043, {wxStyledTextCtrl, setWhitespaceBackground, 2}}, - {3044, {wxStyledTextCtrl, getStyleBits, 0}}, - {3045, {wxStyledTextCtrl, setLineState, 2}}, - {3046, {wxStyledTextCtrl, getLineState, 1}}, - {3047, {wxStyledTextCtrl, getMaxLineState, 0}}, - {3048, {wxStyledTextCtrl, getCaretLineVisible, 0}}, - {3049, {wxStyledTextCtrl, setCaretLineVisible, 1}}, - {3050, {wxStyledTextCtrl, getCaretLineBackground, 0}}, - {3051, {wxStyledTextCtrl, setCaretLineBackground, 1}}, - {3052, {wxStyledTextCtrl, autoCompShow, 2}}, - {3053, {wxStyledTextCtrl, autoCompCancel, 0}}, - {3054, {wxStyledTextCtrl, autoCompActive, 0}}, - {3055, {wxStyledTextCtrl, autoCompPosStart, 0}}, - {3056, {wxStyledTextCtrl, autoCompComplete, 0}}, - {3057, {wxStyledTextCtrl, autoCompStops, 1}}, - {3058, {wxStyledTextCtrl, autoCompSetSeparator, 1}}, - {3059, {wxStyledTextCtrl, autoCompGetSeparator, 0}}, - {3060, {wxStyledTextCtrl, autoCompSelect, 1}}, - {3061, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}}, - {3062, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}}, - {3063, {wxStyledTextCtrl, autoCompSetFillUps, 1}}, - {3064, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}}, - {3065, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}}, - {3066, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}}, - {3067, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}}, - {3068, {wxStyledTextCtrl, userListShow, 2}}, - {3069, {wxStyledTextCtrl, autoCompSetAutoHide, 1}}, - {3070, {wxStyledTextCtrl, autoCompGetAutoHide, 0}}, - {3071, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}}, - {3072, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}}, - {3073, {wxStyledTextCtrl, registerImage, 2}}, - {3074, {wxStyledTextCtrl, clearRegisteredImages, 0}}, - {3075, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}}, - {3076, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}}, - {3077, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}}, - {3078, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}}, - {3079, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}}, - {3080, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}}, - {3081, {wxStyledTextCtrl, setIndent, 1}}, - {3082, {wxStyledTextCtrl, getIndent, 0}}, - {3083, {wxStyledTextCtrl, setUseTabs, 1}}, - {3084, {wxStyledTextCtrl, getUseTabs, 0}}, - {3085, {wxStyledTextCtrl, setLineIndentation, 2}}, - {3086, {wxStyledTextCtrl, getLineIndentation, 1}}, - {3087, {wxStyledTextCtrl, getLineIndentPosition, 1}}, - {3088, {wxStyledTextCtrl, getColumn, 1}}, - {3089, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}}, - {3090, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}}, - {3091, {wxStyledTextCtrl, setIndentationGuides, 1}}, - {3092, {wxStyledTextCtrl, getIndentationGuides, 0}}, - {3093, {wxStyledTextCtrl, setHighlightGuide, 1}}, - {3094, {wxStyledTextCtrl, getHighlightGuide, 0}}, - {3095, {wxStyledTextCtrl, getLineEndPosition, 1}}, - {3096, {wxStyledTextCtrl, getCodePage, 0}}, - {3097, {wxStyledTextCtrl, getCaretForeground, 0}}, - {3098, {wxStyledTextCtrl, getReadOnly, 0}}, - {3099, {wxStyledTextCtrl, setCurrentPos, 1}}, - {3100, {wxStyledTextCtrl, setSelectionStart, 1}}, - {3101, {wxStyledTextCtrl, getSelectionStart, 0}}, - {3102, {wxStyledTextCtrl, setSelectionEnd, 1}}, - {3103, {wxStyledTextCtrl, getSelectionEnd, 0}}, - {3104, {wxStyledTextCtrl, setPrintMagnification, 1}}, - {3105, {wxStyledTextCtrl, getPrintMagnification, 0}}, - {3106, {wxStyledTextCtrl, setPrintColourMode, 1}}, - {3107, {wxStyledTextCtrl, getPrintColourMode, 0}}, - {3108, {wxStyledTextCtrl, findText, 4}}, - {3109, {wxStyledTextCtrl, formatRange, 7}}, - {3110, {wxStyledTextCtrl, getFirstVisibleLine, 0}}, - {3111, {wxStyledTextCtrl, getLine, 1}}, - {3112, {wxStyledTextCtrl, getLineCount, 0}}, - {3113, {wxStyledTextCtrl, setMarginLeft, 1}}, - {3114, {wxStyledTextCtrl, getMarginLeft, 0}}, - {3115, {wxStyledTextCtrl, setMarginRight, 1}}, - {3116, {wxStyledTextCtrl, getMarginRight, 0}}, - {3117, {wxStyledTextCtrl, getModify, 0}}, - {3118, {wxStyledTextCtrl, setSelection, 2}}, - {3119, {wxStyledTextCtrl, getSelectedText, 0}}, - {3120, {wxStyledTextCtrl, getTextRange, 2}}, - {3121, {wxStyledTextCtrl, hideSelection, 1}}, - {3122, {wxStyledTextCtrl, lineFromPosition, 1}}, - {3123, {wxStyledTextCtrl, positionFromLine, 1}}, - {3124, {wxStyledTextCtrl, lineScroll, 2}}, - {3125, {wxStyledTextCtrl, ensureCaretVisible, 0}}, - {3126, {wxStyledTextCtrl, replaceSelection, 1}}, - {3127, {wxStyledTextCtrl, setReadOnly, 1}}, - {3128, {wxStyledTextCtrl, canPaste, 0}}, - {3129, {wxStyledTextCtrl, canUndo, 0}}, - {3130, {wxStyledTextCtrl, emptyUndoBuffer, 0}}, - {3131, {wxStyledTextCtrl, undo, 0}}, - {3132, {wxStyledTextCtrl, cut, 0}}, - {3133, {wxStyledTextCtrl, copy, 0}}, - {3134, {wxStyledTextCtrl, paste, 0}}, - {3135, {wxStyledTextCtrl, clear, 0}}, - {3136, {wxStyledTextCtrl, setText, 1}}, - {3137, {wxStyledTextCtrl, getText, 0}}, - {3138, {wxStyledTextCtrl, getTextLength, 0}}, - {3139, {wxStyledTextCtrl, getOvertype, 0}}, - {3140, {wxStyledTextCtrl, setCaretWidth, 1}}, - {3141, {wxStyledTextCtrl, getCaretWidth, 0}}, - {3142, {wxStyledTextCtrl, setTargetStart, 1}}, - {3143, {wxStyledTextCtrl, getTargetStart, 0}}, - {3144, {wxStyledTextCtrl, setTargetEnd, 1}}, - {3145, {wxStyledTextCtrl, getTargetEnd, 0}}, - {3146, {wxStyledTextCtrl, replaceTarget, 1}}, - {3147, {wxStyledTextCtrl, searchInTarget, 1}}, - {3148, {wxStyledTextCtrl, setSearchFlags, 1}}, - {3149, {wxStyledTextCtrl, getSearchFlags, 0}}, - {3150, {wxStyledTextCtrl, callTipShow, 2}}, - {3151, {wxStyledTextCtrl, callTipCancel, 0}}, - {3152, {wxStyledTextCtrl, callTipActive, 0}}, - {3153, {wxStyledTextCtrl, callTipPosAtStart, 0}}, - {3154, {wxStyledTextCtrl, callTipSetHighlight, 2}}, - {3155, {wxStyledTextCtrl, callTipSetBackground, 1}}, - {3156, {wxStyledTextCtrl, callTipSetForeground, 1}}, - {3157, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}}, - {3158, {wxStyledTextCtrl, callTipUseStyle, 1}}, - {3159, {wxStyledTextCtrl, visibleFromDocLine, 1}}, - {3160, {wxStyledTextCtrl, docLineFromVisible, 1}}, - {3161, {wxStyledTextCtrl, wrapCount, 1}}, - {3162, {wxStyledTextCtrl, setFoldLevel, 2}}, - {3163, {wxStyledTextCtrl, getFoldLevel, 1}}, - {3164, {wxStyledTextCtrl, getLastChild, 2}}, - {3165, {wxStyledTextCtrl, getFoldParent, 1}}, - {3166, {wxStyledTextCtrl, showLines, 2}}, - {3167, {wxStyledTextCtrl, hideLines, 2}}, - {3168, {wxStyledTextCtrl, getLineVisible, 1}}, - {3169, {wxStyledTextCtrl, setFoldExpanded, 2}}, - {3170, {wxStyledTextCtrl, getFoldExpanded, 1}}, - {3171, {wxStyledTextCtrl, toggleFold, 1}}, - {3172, {wxStyledTextCtrl, ensureVisible, 1}}, - {3173, {wxStyledTextCtrl, setFoldFlags, 1}}, - {3174, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}}, - {3175, {wxStyledTextCtrl, setTabIndents, 1}}, - {3176, {wxStyledTextCtrl, getTabIndents, 0}}, - {3177, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}}, - {3178, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}}, - {3179, {wxStyledTextCtrl, setMouseDwellTime, 1}}, - {3180, {wxStyledTextCtrl, getMouseDwellTime, 0}}, - {3181, {wxStyledTextCtrl, wordStartPosition, 2}}, - {3182, {wxStyledTextCtrl, wordEndPosition, 2}}, - {3183, {wxStyledTextCtrl, setWrapMode, 1}}, - {3184, {wxStyledTextCtrl, getWrapMode, 0}}, - {3185, {wxStyledTextCtrl, setWrapVisualFlags, 1}}, - {3186, {wxStyledTextCtrl, getWrapVisualFlags, 0}}, - {3187, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}}, - {3188, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}}, - {3189, {wxStyledTextCtrl, setWrapStartIndent, 1}}, - {3190, {wxStyledTextCtrl, getWrapStartIndent, 0}}, - {3191, {wxStyledTextCtrl, setLayoutCache, 1}}, - {3192, {wxStyledTextCtrl, getLayoutCache, 0}}, - {3193, {wxStyledTextCtrl, setScrollWidth, 1}}, - {3194, {wxStyledTextCtrl, getScrollWidth, 0}}, - {3195, {wxStyledTextCtrl, textWidth, 2}}, - {3196, {wxStyledTextCtrl, getEndAtLastLine, 0}}, - {3197, {wxStyledTextCtrl, textHeight, 1}}, - {3198, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}}, - {3199, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}}, - {3200, {wxStyledTextCtrl, appendText, 1}}, - {3201, {wxStyledTextCtrl, getTwoPhaseDraw, 0}}, - {3202, {wxStyledTextCtrl, setTwoPhaseDraw, 1}}, - {3203, {wxStyledTextCtrl, targetFromSelection, 0}}, - {3204, {wxStyledTextCtrl, linesJoin, 0}}, - {3205, {wxStyledTextCtrl, linesSplit, 1}}, - {3206, {wxStyledTextCtrl, setFoldMarginColour, 2}}, - {3207, {wxStyledTextCtrl, setFoldMarginHiColour, 2}}, - {3208, {wxStyledTextCtrl, lineDown, 0}}, - {3209, {wxStyledTextCtrl, lineDownExtend, 0}}, - {3210, {wxStyledTextCtrl, lineUp, 0}}, - {3211, {wxStyledTextCtrl, lineUpExtend, 0}}, - {3212, {wxStyledTextCtrl, charLeft, 0}}, - {3213, {wxStyledTextCtrl, charLeftExtend, 0}}, - {3214, {wxStyledTextCtrl, charRight, 0}}, - {3215, {wxStyledTextCtrl, charRightExtend, 0}}, - {3216, {wxStyledTextCtrl, wordLeft, 0}}, - {3217, {wxStyledTextCtrl, wordLeftExtend, 0}}, - {3218, {wxStyledTextCtrl, wordRight, 0}}, - {3219, {wxStyledTextCtrl, wordRightExtend, 0}}, - {3220, {wxStyledTextCtrl, home, 0}}, - {3221, {wxStyledTextCtrl, homeExtend, 0}}, - {3222, {wxStyledTextCtrl, lineEnd, 0}}, - {3223, {wxStyledTextCtrl, lineEndExtend, 0}}, - {3224, {wxStyledTextCtrl, documentStart, 0}}, - {3225, {wxStyledTextCtrl, documentStartExtend, 0}}, - {3226, {wxStyledTextCtrl, documentEnd, 0}}, - {3227, {wxStyledTextCtrl, documentEndExtend, 0}}, - {3228, {wxStyledTextCtrl, pageUp, 0}}, - {3229, {wxStyledTextCtrl, pageUpExtend, 0}}, - {3230, {wxStyledTextCtrl, pageDown, 0}}, - {3231, {wxStyledTextCtrl, pageDownExtend, 0}}, - {3232, {wxStyledTextCtrl, editToggleOvertype, 0}}, - {3233, {wxStyledTextCtrl, cancel, 0}}, - {3234, {wxStyledTextCtrl, deleteBack, 0}}, - {3235, {wxStyledTextCtrl, tab, 0}}, - {3236, {wxStyledTextCtrl, backTab, 0}}, - {3237, {wxStyledTextCtrl, newLine, 0}}, - {3238, {wxStyledTextCtrl, formFeed, 0}}, - {3239, {wxStyledTextCtrl, vCHome, 0}}, - {3240, {wxStyledTextCtrl, vCHomeExtend, 0}}, - {3241, {wxStyledTextCtrl, zoomIn, 0}}, - {3242, {wxStyledTextCtrl, zoomOut, 0}}, - {3243, {wxStyledTextCtrl, delWordLeft, 0}}, - {3244, {wxStyledTextCtrl, delWordRight, 0}}, - {3245, {wxStyledTextCtrl, lineCut, 0}}, - {3246, {wxStyledTextCtrl, lineDelete, 0}}, - {3247, {wxStyledTextCtrl, lineTranspose, 0}}, - {3248, {wxStyledTextCtrl, lineDuplicate, 0}}, - {3249, {wxStyledTextCtrl, lowerCase, 0}}, - {3250, {wxStyledTextCtrl, upperCase, 0}}, - {3251, {wxStyledTextCtrl, lineScrollDown, 0}}, - {3252, {wxStyledTextCtrl, lineScrollUp, 0}}, - {3253, {wxStyledTextCtrl, deleteBackNotLine, 0}}, - {3254, {wxStyledTextCtrl, homeDisplay, 0}}, - {3255, {wxStyledTextCtrl, homeDisplayExtend, 0}}, - {3256, {wxStyledTextCtrl, lineEndDisplay, 0}}, - {3257, {wxStyledTextCtrl, lineEndDisplayExtend, 0}}, - {3258, {wxStyledTextCtrl, homeWrapExtend, 0}}, - {3259, {wxStyledTextCtrl, lineEndWrap, 0}}, - {3260, {wxStyledTextCtrl, lineEndWrapExtend, 0}}, - {3261, {wxStyledTextCtrl, vCHomeWrap, 0}}, - {3262, {wxStyledTextCtrl, vCHomeWrapExtend, 0}}, - {3263, {wxStyledTextCtrl, lineCopy, 0}}, - {3264, {wxStyledTextCtrl, moveCaretInsideView, 0}}, - {3265, {wxStyledTextCtrl, lineLength, 1}}, - {3266, {wxStyledTextCtrl, braceHighlight, 2}}, - {3267, {wxStyledTextCtrl, braceBadLight, 1}}, - {3268, {wxStyledTextCtrl, braceMatch, 1}}, - {3269, {wxStyledTextCtrl, getViewEOL, 0}}, - {3270, {wxStyledTextCtrl, setViewEOL, 1}}, - {3271, {wxStyledTextCtrl, setModEventMask, 1}}, - {3272, {wxStyledTextCtrl, getEdgeColumn, 0}}, - {3273, {wxStyledTextCtrl, setEdgeColumn, 1}}, - {3274, {wxStyledTextCtrl, setEdgeMode, 1}}, - {3275, {wxStyledTextCtrl, getEdgeMode, 0}}, - {3276, {wxStyledTextCtrl, getEdgeColour, 0}}, - {3277, {wxStyledTextCtrl, setEdgeColour, 1}}, - {3278, {wxStyledTextCtrl, searchAnchor, 0}}, - {3279, {wxStyledTextCtrl, searchNext, 2}}, - {3280, {wxStyledTextCtrl, searchPrev, 2}}, - {3281, {wxStyledTextCtrl, linesOnScreen, 0}}, - {3282, {wxStyledTextCtrl, usePopUp, 1}}, - {3283, {wxStyledTextCtrl, selectionIsRectangle, 0}}, - {3284, {wxStyledTextCtrl, setZoom, 1}}, - {3285, {wxStyledTextCtrl, getZoom, 0}}, - {3286, {wxStyledTextCtrl, getModEventMask, 0}}, - {3287, {wxStyledTextCtrl, setSTCFocus, 1}}, - {3288, {wxStyledTextCtrl, getSTCFocus, 0}}, - {3289, {wxStyledTextCtrl, setStatus, 1}}, - {3290, {wxStyledTextCtrl, getStatus, 0}}, - {3291, {wxStyledTextCtrl, setMouseDownCaptures, 1}}, - {3292, {wxStyledTextCtrl, getMouseDownCaptures, 0}}, - {3293, {wxStyledTextCtrl, setSTCCursor, 1}}, - {3294, {wxStyledTextCtrl, getSTCCursor, 0}}, - {3295, {wxStyledTextCtrl, setControlCharSymbol, 1}}, - {3296, {wxStyledTextCtrl, getControlCharSymbol, 0}}, - {3297, {wxStyledTextCtrl, wordPartLeft, 0}}, - {3298, {wxStyledTextCtrl, wordPartLeftExtend, 0}}, - {3299, {wxStyledTextCtrl, wordPartRight, 0}}, - {3300, {wxStyledTextCtrl, wordPartRightExtend, 0}}, - {3301, {wxStyledTextCtrl, setVisiblePolicy, 2}}, - {3302, {wxStyledTextCtrl, delLineLeft, 0}}, - {3303, {wxStyledTextCtrl, delLineRight, 0}}, - {3304, {wxStyledTextCtrl, getXOffset, 0}}, - {3305, {wxStyledTextCtrl, chooseCaretX, 0}}, - {3306, {wxStyledTextCtrl, setXCaretPolicy, 2}}, - {3307, {wxStyledTextCtrl, setYCaretPolicy, 2}}, - {3308, {wxStyledTextCtrl, getPrintWrapMode, 0}}, - {3309, {wxStyledTextCtrl, setHotspotActiveForeground, 2}}, - {3310, {wxStyledTextCtrl, setHotspotActiveBackground, 2}}, - {3311, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}}, - {3312, {wxStyledTextCtrl, setHotspotSingleLine, 1}}, - {3313, {wxStyledTextCtrl, paraDownExtend, 0}}, - {3314, {wxStyledTextCtrl, paraUp, 0}}, - {3315, {wxStyledTextCtrl, paraUpExtend, 0}}, - {3316, {wxStyledTextCtrl, positionBefore, 1}}, - {3317, {wxStyledTextCtrl, positionAfter, 1}}, - {3318, {wxStyledTextCtrl, copyRange, 2}}, - {3319, {wxStyledTextCtrl, copyText, 2}}, - {3320, {wxStyledTextCtrl, setSelectionMode, 1}}, - {3321, {wxStyledTextCtrl, getSelectionMode, 0}}, - {3322, {wxStyledTextCtrl, lineDownRectExtend, 0}}, - {3323, {wxStyledTextCtrl, lineUpRectExtend, 0}}, - {3324, {wxStyledTextCtrl, charLeftRectExtend, 0}}, - {3325, {wxStyledTextCtrl, charRightRectExtend, 0}}, - {3326, {wxStyledTextCtrl, homeRectExtend, 0}}, - {3327, {wxStyledTextCtrl, vCHomeRectExtend, 0}}, - {3328, {wxStyledTextCtrl, lineEndRectExtend, 0}}, - {3329, {wxStyledTextCtrl, pageUpRectExtend, 0}}, - {3330, {wxStyledTextCtrl, pageDownRectExtend, 0}}, - {3331, {wxStyledTextCtrl, stutteredPageUp, 0}}, - {3332, {wxStyledTextCtrl, stutteredPageUpExtend, 0}}, - {3333, {wxStyledTextCtrl, stutteredPageDown, 0}}, - {3334, {wxStyledTextCtrl, stutteredPageDownExtend, 0}}, - {3335, {wxStyledTextCtrl, wordLeftEnd, 0}}, - {3336, {wxStyledTextCtrl, wordLeftEndExtend, 0}}, - {3337, {wxStyledTextCtrl, wordRightEnd, 0}}, - {3338, {wxStyledTextCtrl, wordRightEndExtend, 0}}, - {3339, {wxStyledTextCtrl, setWhitespaceChars, 1}}, - {3340, {wxStyledTextCtrl, setCharsDefault, 0}}, - {3341, {wxStyledTextCtrl, autoCompGetCurrent, 0}}, - {3342, {wxStyledTextCtrl, allocate, 1}}, - {3343, {wxStyledTextCtrl, findColumn, 2}}, - {3344, {wxStyledTextCtrl, getCaretSticky, 0}}, - {3345, {wxStyledTextCtrl, setCaretSticky, 1}}, - {3346, {wxStyledTextCtrl, toggleCaretSticky, 0}}, - {3347, {wxStyledTextCtrl, setPasteConvertEndings, 1}}, - {3348, {wxStyledTextCtrl, getPasteConvertEndings, 0}}, - {3349, {wxStyledTextCtrl, selectionDuplicate, 0}}, - {3350, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}}, - {3351, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}}, - {3352, {wxStyledTextCtrl, startRecord, 0}}, - {3353, {wxStyledTextCtrl, stopRecord, 0}}, - {3354, {wxStyledTextCtrl, setLexer, 1}}, - {3355, {wxStyledTextCtrl, getLexer, 0}}, - {3356, {wxStyledTextCtrl, colourise, 2}}, - {3357, {wxStyledTextCtrl, setProperty, 2}}, - {3358, {wxStyledTextCtrl, setKeyWords, 2}}, - {3359, {wxStyledTextCtrl, setLexerLanguage, 1}}, - {3360, {wxStyledTextCtrl, getProperty, 1}}, - {3361, {wxStyledTextCtrl, getStyleBitsNeeded, 0}}, - {3362, {wxStyledTextCtrl, getCurrentLine, 0}}, - {3363, {wxStyledTextCtrl, styleSetSpec, 2}}, - {3364, {wxStyledTextCtrl, styleSetFont, 2}}, - {3365, {wxStyledTextCtrl, styleSetFontAttr, 7}}, - {3366, {wxStyledTextCtrl, styleSetCharacterSet, 2}}, - {3367, {wxStyledTextCtrl, styleSetFontEncoding, 2}}, - {3368, {wxStyledTextCtrl, cmdKeyExecute, 1}}, - {3369, {wxStyledTextCtrl, setMargins, 2}}, - {3370, {wxStyledTextCtrl, getSelection, 2}}, - {3371, {wxStyledTextCtrl, pointFromPosition, 1}}, - {3372, {wxStyledTextCtrl, scrollToLine, 1}}, - {3373, {wxStyledTextCtrl, scrollToColumn, 1}}, - {3374, {wxStyledTextCtrl, setVScrollBar, 1}}, - {3375, {wxStyledTextCtrl, setHScrollBar, 1}}, - {3376, {wxStyledTextCtrl, getLastKeydownProcessed, 0}}, - {3377, {wxStyledTextCtrl, setLastKeydownProcessed, 1}}, - {3378, {wxStyledTextCtrl, saveFile, 1}}, - {3379, {wxStyledTextCtrl, loadFile, 1}}, - {3380, {wxStyledTextCtrl, doDragOver, 3}}, - {3381, {wxStyledTextCtrl, doDropText, 3}}, - {3382, {wxStyledTextCtrl, getUseAntiAliasing, 0}}, - {3383, {wxStyledTextCtrl, addTextRaw, 1}}, - {3384, {wxStyledTextCtrl, insertTextRaw, 2}}, - {3385, {wxStyledTextCtrl, getCurLineRaw, 1}}, - {3386, {wxStyledTextCtrl, getLineRaw, 1}}, - {3387, {wxStyledTextCtrl, getSelectedTextRaw, 0}}, - {3388, {wxStyledTextCtrl, getTextRangeRaw, 2}}, - {3389, {wxStyledTextCtrl, setTextRaw, 1}}, - {3390, {wxStyledTextCtrl, getTextRaw, 0}}, - {3391, {wxStyledTextCtrl, appendTextRaw, 1}}, - {3392, {wxArtProvider, getBitmap, 2}}, - {3393, {wxArtProvider, getIcon, 2}}, - {3394, {wxTreeEvent, getKeyCode, 0}}, - {3395, {wxTreeEvent, getItem, 0}}, - {3396, {wxTreeEvent, getKeyEvent, 0}}, - {3397, {wxTreeEvent, getLabel, 0}}, - {3398, {wxTreeEvent, getOldItem, 0}}, - {3399, {wxTreeEvent, getPoint, 0}}, - {3400, {wxTreeEvent, isEditCancelled, 0}}, - {3401, {wxTreeEvent, setToolTip, 1}}, - {3402, {wxNotebookEvent, getOldSelection, 0}}, - {3403, {wxNotebookEvent, getSelection, 0}}, - {3404, {wxNotebookEvent, setOldSelection, 1}}, - {3405, {wxNotebookEvent, setSelection, 1}}, - {3406, {wxFileDataObject, new, 0}}, - {3407, {wxFileDataObject, addFile, 1}}, - {3408, {wxFileDataObject, getFilenames, 0}}, - {3409, {wxFileDataObject, 'Destroy', undefined}}, - {3410, {wxTextDataObject, new, 1}}, - {3411, {wxTextDataObject, getTextLength, 0}}, - {3412, {wxTextDataObject, getText, 0}}, - {3413, {wxTextDataObject, setText, 1}}, - {3414, {wxTextDataObject, 'Destroy', undefined}}, - {3415, {wxBitmapDataObject, new_1_1, 1}}, - {3416, {wxBitmapDataObject, new_1_0, 1}}, - {3417, {wxBitmapDataObject, getBitmap, 0}}, - {3418, {wxBitmapDataObject, setBitmap, 1}}, - {3419, {wxBitmapDataObject, 'Destroy', undefined}}, - {3421, {wxClipboard, new, 0}}, - {3422, {wxClipboard, destruct, 0}}, - {3423, {wxClipboard, addData, 1}}, - {3424, {wxClipboard, clear, 0}}, - {3425, {wxClipboard, close, 0}}, - {3426, {wxClipboard, flush, 0}}, - {3427, {wxClipboard, getData, 1}}, - {3428, {wxClipboard, isOpened, 0}}, - {3429, {wxClipboard, open, 0}}, - {3430, {wxClipboard, setData, 1}}, - {3432, {wxClipboard, usePrimarySelection, 1}}, - {3433, {wxClipboard, isSupported, 1}}, - {3434, {wxClipboard, get, 0}}, - {3435, {wxSpinEvent, getPosition, 0}}, - {3436, {wxSpinEvent, setPosition, 1}}, - {3437, {wxSplitterWindow, new_0, 0}}, - {3438, {wxSplitterWindow, new_2, 2}}, - {3439, {wxSplitterWindow, destruct, 0}}, - {3440, {wxSplitterWindow, create, 2}}, - {3441, {wxSplitterWindow, getMinimumPaneSize, 0}}, - {3442, {wxSplitterWindow, getSashGravity, 0}}, - {3443, {wxSplitterWindow, getSashPosition, 0}}, - {3444, {wxSplitterWindow, getSplitMode, 0}}, - {3445, {wxSplitterWindow, getWindow1, 0}}, - {3446, {wxSplitterWindow, getWindow2, 0}}, - {3447, {wxSplitterWindow, initialize, 1}}, - {3448, {wxSplitterWindow, isSplit, 0}}, - {3449, {wxSplitterWindow, replaceWindow, 2}}, - {3450, {wxSplitterWindow, setSashGravity, 1}}, - {3451, {wxSplitterWindow, setSashPosition, 2}}, - {3452, {wxSplitterWindow, setSashSize, 1}}, - {3453, {wxSplitterWindow, setMinimumPaneSize, 1}}, - {3454, {wxSplitterWindow, setSplitMode, 1}}, - {3455, {wxSplitterWindow, splitHorizontally, 3}}, - {3456, {wxSplitterWindow, splitVertically, 3}}, - {3457, {wxSplitterWindow, unsplit, 1}}, - {3458, {wxSplitterWindow, updateSize, 0}}, - {3459, {wxSplitterEvent, getSashPosition, 0}}, - {3460, {wxSplitterEvent, getX, 0}}, - {3461, {wxSplitterEvent, getY, 0}}, - {3462, {wxSplitterEvent, getWindowBeingRemoved, 0}}, - {3463, {wxSplitterEvent, setSashPosition, 1}}, - {3464, {wxHtmlWindow, new_0, 0}}, - {3465, {wxHtmlWindow, new_2, 2}}, - {3466, {wxHtmlWindow, appendToPage, 1}}, - {3467, {wxHtmlWindow, getOpenedAnchor, 0}}, - {3468, {wxHtmlWindow, getOpenedPage, 0}}, - {3469, {wxHtmlWindow, getOpenedPageTitle, 0}}, - {3470, {wxHtmlWindow, getRelatedFrame, 0}}, - {3471, {wxHtmlWindow, historyBack, 0}}, - {3472, {wxHtmlWindow, historyCanBack, 0}}, - {3473, {wxHtmlWindow, historyCanForward, 0}}, - {3474, {wxHtmlWindow, historyClear, 0}}, - {3475, {wxHtmlWindow, historyForward, 0}}, - {3476, {wxHtmlWindow, loadFile, 1}}, - {3477, {wxHtmlWindow, loadPage, 1}}, - {3478, {wxHtmlWindow, selectAll, 0}}, - {3479, {wxHtmlWindow, selectionToText, 0}}, - {3480, {wxHtmlWindow, selectLine, 1}}, - {3481, {wxHtmlWindow, selectWord, 1}}, - {3482, {wxHtmlWindow, setBorders, 1}}, - {3483, {wxHtmlWindow, setFonts, 3}}, - {3484, {wxHtmlWindow, setPage, 1}}, - {3485, {wxHtmlWindow, setRelatedFrame, 2}}, - {3486, {wxHtmlWindow, setRelatedStatusBar, 1}}, - {3487, {wxHtmlWindow, toText, 0}}, - {3488, {wxHtmlWindow, 'Destroy', undefined}}, - {3489, {wxHtmlLinkEvent, getLinkInfo, 0}}, - {3490, {wxSystemSettings, getColour, 1}}, - {3491, {wxSystemSettings, getFont, 1}}, - {3492, {wxSystemSettings, getMetric, 2}}, - {3493, {wxSystemSettings, getScreenType, 0}}, - {3494, {wxSystemOptions, getOption, 1}}, - {3495, {wxSystemOptions, getOptionInt, 1}}, - {3496, {wxSystemOptions, hasOption, 1}}, - {3497, {wxSystemOptions, isFalse, 1}}, - {3498, {wxSystemOptions, setOption_2_1, 2}}, - {3499, {wxSystemOptions, setOption_2_0, 2}}, - {3500, {wxAuiNotebookEvent, setSelection, 1}}, - {3501, {wxAuiNotebookEvent, getSelection, 0}}, - {3502, {wxAuiNotebookEvent, setOldSelection, 1}}, - {3503, {wxAuiNotebookEvent, getOldSelection, 0}}, - {3504, {wxAuiNotebookEvent, setDragSource, 1}}, - {3505, {wxAuiNotebookEvent, getDragSource, 0}}, - {3506, {wxAuiManagerEvent, setManager, 1}}, - {3507, {wxAuiManagerEvent, getManager, 0}}, - {3508, {wxAuiManagerEvent, setPane, 1}}, - {3509, {wxAuiManagerEvent, getPane, 0}}, - {3510, {wxAuiManagerEvent, setButton, 1}}, - {3511, {wxAuiManagerEvent, getButton, 0}}, - {3512, {wxAuiManagerEvent, setDC, 1}}, - {3513, {wxAuiManagerEvent, getDC, 0}}, - {3514, {wxAuiManagerEvent, veto, 1}}, - {3515, {wxAuiManagerEvent, getVeto, 0}}, - {3516, {wxAuiManagerEvent, setCanVeto, 1}}, - {3517, {wxAuiManagerEvent, canVeto, 0}}, - {3518, {wxLogNull, new, 0}}, - {3519, {wxLogNull, 'Destroy', undefined}}, - {3520, {wxTaskBarIcon, new, 0}}, - {3521, {wxTaskBarIcon, destruct, 0}}, - {3522, {wxTaskBarIcon, popupMenu, 1}}, - {3523, {wxTaskBarIcon, removeIcon, 0}}, - {3524, {wxTaskBarIcon, setIcon, 2}}, + {337, {wxPanel, setFocusIgnoringChildren, 0}}, + {338, {wxScrolledWindow, new_0, 0}}, + {339, {wxScrolledWindow, new_2, 2}}, + {340, {wxScrolledWindow, destruct, 0}}, + {341, {wxScrolledWindow, calcScrolledPosition_4, 4}}, + {342, {wxScrolledWindow, calcScrolledPosition_1, 1}}, + {343, {wxScrolledWindow, calcUnscrolledPosition_4, 4}}, + {344, {wxScrolledWindow, calcUnscrolledPosition_1, 1}}, + {345, {wxScrolledWindow, enableScrolling, 2}}, + {346, {wxScrolledWindow, getScrollPixelsPerUnit, 2}}, + {347, {wxScrolledWindow, getViewStart, 2}}, + {348, {wxScrolledWindow, doPrepareDC, 1}}, + {349, {wxScrolledWindow, prepareDC, 1}}, + {350, {wxScrolledWindow, scroll, 2}}, + {351, {wxScrolledWindow, setScrollbars, 5}}, + {352, {wxScrolledWindow, setScrollRate, 2}}, + {353, {wxScrolledWindow, setTargetWindow, 1}}, + {354, {wxSashWindow, new_0, 0}}, + {355, {wxSashWindow, new_2, 2}}, + {356, {wxSashWindow, destruct, 0}}, + {357, {wxSashWindow, getSashVisible, 1}}, + {358, {wxSashWindow, getMaximumSizeX, 0}}, + {359, {wxSashWindow, getMaximumSizeY, 0}}, + {360, {wxSashWindow, getMinimumSizeX, 0}}, + {361, {wxSashWindow, getMinimumSizeY, 0}}, + {362, {wxSashWindow, setMaximumSizeX, 1}}, + {363, {wxSashWindow, setMaximumSizeY, 1}}, + {364, {wxSashWindow, setMinimumSizeX, 1}}, + {365, {wxSashWindow, setMinimumSizeY, 1}}, + {366, {wxSashWindow, setSashVisible, 2}}, + {367, {wxSashLayoutWindow, new_0, 0}}, + {368, {wxSashLayoutWindow, new_2, 2}}, + {369, {wxSashLayoutWindow, create, 2}}, + {370, {wxSashLayoutWindow, getAlignment, 0}}, + {371, {wxSashLayoutWindow, getOrientation, 0}}, + {372, {wxSashLayoutWindow, setAlignment, 1}}, + {373, {wxSashLayoutWindow, setDefaultSize, 1}}, + {374, {wxSashLayoutWindow, setOrientation, 1}}, + {375, {wxSashLayoutWindow, 'Destroy', undefined}}, + {376, {wxGrid, new_0, 0}}, + {377, {wxGrid, new_3, 3}}, + {378, {wxGrid, new_4, 4}}, + {379, {wxGrid, destruct, 0}}, + {380, {wxGrid, appendCols, 1}}, + {381, {wxGrid, appendRows, 1}}, + {382, {wxGrid, autoSize, 0}}, + {383, {wxGrid, autoSizeColumn, 2}}, + {384, {wxGrid, autoSizeColumns, 1}}, + {385, {wxGrid, autoSizeRow, 2}}, + {386, {wxGrid, autoSizeRows, 1}}, + {387, {wxGrid, beginBatch, 0}}, + {388, {wxGrid, blockToDeviceRect, 2}}, + {389, {wxGrid, canDragColSize, 0}}, + {390, {wxGrid, canDragRowSize, 0}}, + {391, {wxGrid, canDragGridSize, 0}}, + {392, {wxGrid, canEnableCellControl, 0}}, + {393, {wxGrid, cellToRect_2, 2}}, + {394, {wxGrid, cellToRect_1, 1}}, + {395, {wxGrid, clearGrid, 0}}, + {396, {wxGrid, clearSelection, 0}}, + {397, {wxGrid, createGrid, 3}}, + {398, {wxGrid, deleteCols, 1}}, + {399, {wxGrid, deleteRows, 1}}, + {400, {wxGrid, disableCellEditControl, 0}}, + {401, {wxGrid, disableDragColSize, 0}}, + {402, {wxGrid, disableDragGridSize, 0}}, + {403, {wxGrid, disableDragRowSize, 0}}, + {404, {wxGrid, enableCellEditControl, 1}}, + {405, {wxGrid, enableDragColSize, 1}}, + {406, {wxGrid, enableDragGridSize, 1}}, + {407, {wxGrid, enableDragRowSize, 1}}, + {408, {wxGrid, enableEditing, 1}}, + {409, {wxGrid, enableGridLines, 1}}, + {410, {wxGrid, endBatch, 0}}, + {411, {wxGrid, fit, 0}}, + {412, {wxGrid, forceRefresh, 0}}, + {413, {wxGrid, getBatchCount, 0}}, + {414, {wxGrid, getCellAlignment, 4}}, + {415, {wxGrid, getCellBackgroundColour, 2}}, + {416, {wxGrid, getCellEditor, 2}}, + {417, {wxGrid, getCellFont, 2}}, + {418, {wxGrid, getCellRenderer, 2}}, + {419, {wxGrid, getCellTextColour, 2}}, + {420, {wxGrid, getCellValue_2, 2}}, + {421, {wxGrid, getCellValue_1, 1}}, + {422, {wxGrid, getColLabelAlignment, 2}}, + {423, {wxGrid, getColLabelSize, 0}}, + {424, {wxGrid, getColLabelValue, 1}}, + {425, {wxGrid, getColMinimalAcceptableWidth, 0}}, + {426, {wxGrid, getDefaultCellAlignment, 2}}, + {427, {wxGrid, getDefaultCellBackgroundColour, 0}}, + {428, {wxGrid, getDefaultCellFont, 0}}, + {429, {wxGrid, getDefaultCellTextColour, 0}}, + {430, {wxGrid, getDefaultColLabelSize, 0}}, + {431, {wxGrid, getDefaultColSize, 0}}, + {432, {wxGrid, getDefaultEditor, 0}}, + {433, {wxGrid, getDefaultEditorForCell_2, 2}}, + {434, {wxGrid, getDefaultEditorForCell_1, 1}}, + {435, {wxGrid, getDefaultEditorForType, 1}}, + {436, {wxGrid, getDefaultRenderer, 0}}, + {437, {wxGrid, getDefaultRendererForCell, 2}}, + {438, {wxGrid, getDefaultRendererForType, 1}}, + {439, {wxGrid, getDefaultRowLabelSize, 0}}, + {440, {wxGrid, getDefaultRowSize, 0}}, + {441, {wxGrid, getGridCursorCol, 0}}, + {442, {wxGrid, getGridCursorRow, 0}}, + {443, {wxGrid, getGridLineColour, 0}}, + {444, {wxGrid, gridLinesEnabled, 0}}, + {445, {wxGrid, getLabelBackgroundColour, 0}}, + {446, {wxGrid, getLabelFont, 0}}, + {447, {wxGrid, getLabelTextColour, 0}}, + {448, {wxGrid, getNumberCols, 0}}, + {449, {wxGrid, getNumberRows, 0}}, + {450, {wxGrid, getOrCreateCellAttr, 2}}, + {451, {wxGrid, getRowMinimalAcceptableHeight, 0}}, + {452, {wxGrid, getRowLabelAlignment, 2}}, + {453, {wxGrid, getRowLabelSize, 0}}, + {454, {wxGrid, getRowLabelValue, 1}}, + {455, {wxGrid, getRowSize, 1}}, + {456, {wxGrid, getScrollLineX, 0}}, + {457, {wxGrid, getScrollLineY, 0}}, + {458, {wxGrid, getSelectedCells, 0}}, + {459, {wxGrid, getSelectedCols, 0}}, + {460, {wxGrid, getSelectedRows, 0}}, + {461, {wxGrid, getSelectionBackground, 0}}, + {462, {wxGrid, getSelectionBlockTopLeft, 0}}, + {463, {wxGrid, getSelectionBlockBottomRight, 0}}, + {464, {wxGrid, getSelectionForeground, 0}}, + {465, {wxGrid, getViewWidth, 0}}, + {466, {wxGrid, getGridWindow, 0}}, + {467, {wxGrid, getGridRowLabelWindow, 0}}, + {468, {wxGrid, getGridColLabelWindow, 0}}, + {469, {wxGrid, getGridCornerLabelWindow, 0}}, + {470, {wxGrid, hideCellEditControl, 0}}, + {471, {wxGrid, insertCols, 1}}, + {472, {wxGrid, insertRows, 1}}, + {473, {wxGrid, isCellEditControlEnabled, 0}}, + {474, {wxGrid, isCurrentCellReadOnly, 0}}, + {475, {wxGrid, isEditable, 0}}, + {476, {wxGrid, isInSelection_2, 2}}, + {477, {wxGrid, isInSelection_1, 1}}, + {478, {wxGrid, isReadOnly, 2}}, + {479, {wxGrid, isSelection, 0}}, + {480, {wxGrid, isVisible_3, 3}}, + {481, {wxGrid, isVisible_2, 2}}, + {482, {wxGrid, makeCellVisible_2, 2}}, + {483, {wxGrid, makeCellVisible_1, 1}}, + {484, {wxGrid, moveCursorDown, 1}}, + {485, {wxGrid, moveCursorLeft, 1}}, + {486, {wxGrid, moveCursorRight, 1}}, + {487, {wxGrid, moveCursorUp, 1}}, + {488, {wxGrid, moveCursorDownBlock, 1}}, + {489, {wxGrid, moveCursorLeftBlock, 1}}, + {490, {wxGrid, moveCursorRightBlock, 1}}, + {491, {wxGrid, moveCursorUpBlock, 1}}, + {492, {wxGrid, movePageDown, 0}}, + {493, {wxGrid, movePageUp, 0}}, + {494, {wxGrid, registerDataType, 3}}, + {495, {wxGrid, saveEditControlValue, 0}}, + {496, {wxGrid, selectAll, 0}}, + {497, {wxGrid, selectBlock_5, 5}}, + {498, {wxGrid, selectBlock_3, 3}}, + {499, {wxGrid, selectCol, 2}}, + {500, {wxGrid, selectRow, 2}}, + {501, {wxGrid, setCellAlignment_4, 4}}, + {502, {wxGrid, setCellAlignment_3, 3}}, + {503, {wxGrid, setCellAlignment_1, 1}}, + {504, {wxGrid, setCellBackgroundColour_3_0, 3}}, + {505, {wxGrid, setCellBackgroundColour_1, 1}}, + {506, {wxGrid, setCellBackgroundColour_3_1, 3}}, + {507, {wxGrid, setCellEditor, 3}}, + {508, {wxGrid, setCellFont, 3}}, + {509, {wxGrid, setCellRenderer, 3}}, + {510, {wxGrid, setCellTextColour_3_0, 3}}, + {511, {wxGrid, setCellTextColour_3_1, 3}}, + {512, {wxGrid, setCellTextColour_1, 1}}, + {513, {wxGrid, setCellValue_3_0, 3}}, + {514, {wxGrid, setCellValue_2, 2}}, + {515, {wxGrid, setCellValue_3_1, 3}}, + {516, {wxGrid, setColAttr, 2}}, + {517, {wxGrid, setColFormatBool, 1}}, + {518, {wxGrid, setColFormatNumber, 1}}, + {519, {wxGrid, setColFormatFloat, 2}}, + {520, {wxGrid, setColFormatCustom, 2}}, + {521, {wxGrid, setColLabelAlignment, 2}}, + {522, {wxGrid, setColLabelSize, 1}}, + {523, {wxGrid, setColLabelValue, 2}}, + {524, {wxGrid, setColMinimalWidth, 2}}, + {525, {wxGrid, setColMinimalAcceptableWidth, 1}}, + {526, {wxGrid, setColSize, 2}}, + {527, {wxGrid, setDefaultCellAlignment, 2}}, + {528, {wxGrid, setDefaultCellBackgroundColour, 1}}, + {529, {wxGrid, setDefaultCellFont, 1}}, + {530, {wxGrid, setDefaultCellTextColour, 1}}, + {531, {wxGrid, setDefaultEditor, 1}}, + {532, {wxGrid, setDefaultRenderer, 1}}, + {533, {wxGrid, setDefaultColSize, 2}}, + {534, {wxGrid, setDefaultRowSize, 2}}, + {535, {wxGrid, setGridCursor, 2}}, + {536, {wxGrid, setGridLineColour, 1}}, + {537, {wxGrid, setLabelBackgroundColour, 1}}, + {538, {wxGrid, setLabelFont, 1}}, + {539, {wxGrid, setLabelTextColour, 1}}, + {540, {wxGrid, setMargins, 2}}, + {541, {wxGrid, setReadOnly, 3}}, + {542, {wxGrid, setRowAttr, 2}}, + {543, {wxGrid, setRowLabelAlignment, 2}}, + {544, {wxGrid, setRowLabelSize, 1}}, + {545, {wxGrid, setRowLabelValue, 2}}, + {546, {wxGrid, setRowMinimalHeight, 2}}, + {547, {wxGrid, setRowMinimalAcceptableHeight, 1}}, + {548, {wxGrid, setRowSize, 2}}, + {549, {wxGrid, setScrollLineX, 1}}, + {550, {wxGrid, setScrollLineY, 1}}, + {551, {wxGrid, setSelectionBackground, 1}}, + {552, {wxGrid, setSelectionForeground, 1}}, + {553, {wxGrid, setSelectionMode, 1}}, + {554, {wxGrid, showCellEditControl, 0}}, + {555, {wxGrid, xToCol, 2}}, + {556, {wxGrid, xToEdgeOfCol, 1}}, + {557, {wxGrid, yToEdgeOfRow, 1}}, + {558, {wxGrid, yToRow, 1}}, + {559, {wxGridCellRenderer, draw, 7}}, + {560, {wxGridCellRenderer, getBestSize, 5}}, + {561, {wxGridCellEditor, create, 3}}, + {562, {wxGridCellEditor, isCreated, 0}}, + {563, {wxGridCellEditor, setSize, 1}}, + {564, {wxGridCellEditor, show, 2}}, + {565, {wxGridCellEditor, paintBackground, 2}}, + {566, {wxGridCellEditor, beginEdit, 3}}, + {567, {wxGridCellEditor, endEdit, 3}}, + {568, {wxGridCellEditor, reset, 0}}, + {569, {wxGridCellEditor, startingKey, 1}}, + {570, {wxGridCellEditor, startingClick, 0}}, + {571, {wxGridCellEditor, handleReturn, 1}}, + {572, {wxGridCellBoolRenderer, new, 0}}, + {573, {wxGridCellBoolRenderer, 'Destroy', undefined}}, + {574, {wxGridCellBoolEditor, new, 0}}, + {575, {wxGridCellBoolEditor, isTrueValue, 1}}, + {576, {wxGridCellBoolEditor, useStringValues, 1}}, + {577, {wxGridCellBoolEditor, 'Destroy', undefined}}, + {578, {wxGridCellFloatRenderer, new, 1}}, + {579, {wxGridCellFloatRenderer, getPrecision, 0}}, + {580, {wxGridCellFloatRenderer, getWidth, 0}}, + {581, {wxGridCellFloatRenderer, setParameters, 1}}, + {582, {wxGridCellFloatRenderer, setPrecision, 1}}, + {583, {wxGridCellFloatRenderer, setWidth, 1}}, + {584, {wxGridCellFloatRenderer, 'Destroy', undefined}}, + {585, {wxGridCellFloatEditor, new, 1}}, + {586, {wxGridCellFloatEditor, setParameters, 1}}, + {587, {wxGridCellFloatEditor, 'Destroy', undefined}}, + {588, {wxGridCellStringRenderer, new, 0}}, + {589, {wxGridCellStringRenderer, 'Destroy', undefined}}, + {590, {wxGridCellTextEditor, new, 0}}, + {591, {wxGridCellTextEditor, setParameters, 1}}, + {592, {wxGridCellTextEditor, 'Destroy', undefined}}, + {594, {wxGridCellChoiceEditor, new, 2}}, + {595, {wxGridCellChoiceEditor, setParameters, 1}}, + {596, {wxGridCellChoiceEditor, 'Destroy', undefined}}, + {597, {wxGridCellNumberRenderer, new, 0}}, + {598, {wxGridCellNumberRenderer, 'Destroy', undefined}}, + {599, {wxGridCellNumberEditor, new, 1}}, + {600, {wxGridCellNumberEditor, getValue, 0}}, + {601, {wxGridCellNumberEditor, setParameters, 1}}, + {602, {wxGridCellNumberEditor, 'Destroy', undefined}}, + {603, {wxGridCellAttr, setTextColour, 1}}, + {604, {wxGridCellAttr, setBackgroundColour, 1}}, + {605, {wxGridCellAttr, setFont, 1}}, + {606, {wxGridCellAttr, setAlignment, 2}}, + {607, {wxGridCellAttr, setReadOnly, 1}}, + {608, {wxGridCellAttr, setRenderer, 1}}, + {609, {wxGridCellAttr, setEditor, 1}}, + {610, {wxGridCellAttr, hasTextColour, 0}}, + {611, {wxGridCellAttr, hasBackgroundColour, 0}}, + {612, {wxGridCellAttr, hasFont, 0}}, + {613, {wxGridCellAttr, hasAlignment, 0}}, + {614, {wxGridCellAttr, hasRenderer, 0}}, + {615, {wxGridCellAttr, hasEditor, 0}}, + {616, {wxGridCellAttr, getTextColour, 0}}, + {617, {wxGridCellAttr, getBackgroundColour, 0}}, + {618, {wxGridCellAttr, getFont, 0}}, + {619, {wxGridCellAttr, getAlignment, 2}}, + {620, {wxGridCellAttr, getRenderer, 3}}, + {621, {wxGridCellAttr, getEditor, 3}}, + {622, {wxGridCellAttr, isReadOnly, 0}}, + {623, {wxGridCellAttr, setDefAttr, 1}}, + {624, {wxDC, blit, 5}}, + {625, {wxDC, calcBoundingBox, 2}}, + {626, {wxDC, clear, 0}}, + {627, {wxDC, computeScaleAndOrigin, 0}}, + {628, {wxDC, crossHair, 1}}, + {629, {wxDC, destroyClippingRegion, 0}}, + {630, {wxDC, deviceToLogicalX, 1}}, + {631, {wxDC, deviceToLogicalXRel, 1}}, + {632, {wxDC, deviceToLogicalY, 1}}, + {633, {wxDC, deviceToLogicalYRel, 1}}, + {634, {wxDC, drawArc, 3}}, + {635, {wxDC, drawBitmap, 3}}, + {636, {wxDC, drawCheckMark, 1}}, + {637, {wxDC, drawCircle, 2}}, + {639, {wxDC, drawEllipse_2, 2}}, + {640, {wxDC, drawEllipse_1, 1}}, + {641, {wxDC, drawEllipticArc, 4}}, + {642, {wxDC, drawIcon, 2}}, + {643, {wxDC, drawLabel, 3}}, + {644, {wxDC, drawLine, 2}}, + {645, {wxDC, drawLines, 3}}, + {647, {wxDC, drawPolygon, 3}}, + {649, {wxDC, drawPoint, 1}}, + {651, {wxDC, drawRectangle_2, 2}}, + {652, {wxDC, drawRectangle_1, 1}}, + {653, {wxDC, drawRotatedText, 3}}, + {655, {wxDC, drawRoundedRectangle_3, 3}}, + {656, {wxDC, drawRoundedRectangle_2, 2}}, + {657, {wxDC, drawText, 2}}, + {658, {wxDC, endDoc, 0}}, + {659, {wxDC, endPage, 0}}, + {660, {wxDC, floodFill, 3}}, + {661, {wxDC, getBackground, 0}}, + {662, {wxDC, getBackgroundMode, 0}}, + {663, {wxDC, getBrush, 0}}, + {664, {wxDC, getCharHeight, 0}}, + {665, {wxDC, getCharWidth, 0}}, + {666, {wxDC, getClippingBox, 4}}, + {668, {wxDC, getFont, 0}}, + {669, {wxDC, getLayoutDirection, 0}}, + {670, {wxDC, getLogicalFunction, 0}}, + {671, {wxDC, getMapMode, 0}}, + {672, {wxDC, getMultiLineTextExtent_4, 4}}, + {673, {wxDC, getMultiLineTextExtent_1, 1}}, + {674, {wxDC, getPartialTextExtents, 2}}, + {675, {wxDC, getPen, 0}}, + {676, {wxDC, getPixel, 2}}, + {677, {wxDC, getPPI, 0}}, + {679, {wxDC, getSize, 0}}, + {681, {wxDC, getSizeMM, 0}}, + {682, {wxDC, getTextBackground, 0}}, + {683, {wxDC, getTextExtent_4, 4}}, + {684, {wxDC, getTextExtent_1, 1}}, + {686, {wxDC, getTextForeground, 0}}, + {687, {wxDC, getUserScale, 2}}, + {688, {wxDC, gradientFillConcentric_3, 3}}, + {689, {wxDC, gradientFillConcentric_4, 4}}, + {690, {wxDC, gradientFillLinear, 4}}, + {691, {wxDC, logicalToDeviceX, 1}}, + {692, {wxDC, logicalToDeviceXRel, 1}}, + {693, {wxDC, logicalToDeviceY, 1}}, + {694, {wxDC, logicalToDeviceYRel, 1}}, + {695, {wxDC, maxX, 0}}, + {696, {wxDC, maxY, 0}}, + {697, {wxDC, minX, 0}}, + {698, {wxDC, minY, 0}}, + {699, {wxDC, isOk, 0}}, + {700, {wxDC, resetBoundingBox, 0}}, + {701, {wxDC, setAxisOrientation, 2}}, + {702, {wxDC, setBackground, 1}}, + {703, {wxDC, setBackgroundMode, 1}}, + {704, {wxDC, setBrush, 1}}, + {706, {wxDC, setClippingRegion_2, 2}}, + {707, {wxDC, setClippingRegion_1_1, 1}}, + {708, {wxDC, setClippingRegion_1_0, 1}}, + {709, {wxDC, setDeviceOrigin, 2}}, + {710, {wxDC, setFont, 1}}, + {711, {wxDC, setLayoutDirection, 1}}, + {712, {wxDC, setLogicalFunction, 1}}, + {713, {wxDC, setMapMode, 1}}, + {714, {wxDC, setPalette, 1}}, + {715, {wxDC, setPen, 1}}, + {716, {wxDC, setTextBackground, 1}}, + {717, {wxDC, setTextForeground, 1}}, + {718, {wxDC, setUserScale, 2}}, + {719, {wxDC, startDoc, 1}}, + {720, {wxDC, startPage, 0}}, + {721, {wxMirrorDC, new, 2}}, + {722, {wxMirrorDC, 'Destroy', undefined}}, + {723, {wxScreenDC, new, 0}}, + {724, {wxScreenDC, destruct, 0}}, + {725, {wxPostScriptDC, new_0, 0}}, + {726, {wxPostScriptDC, new_1, 1}}, + {727, {wxPostScriptDC, destruct, 0}}, + {728, {wxPostScriptDC, setResolution, 1}}, + {729, {wxPostScriptDC, getResolution, 0}}, + {730, {wxWindowDC, new_0, 0}}, + {731, {wxWindowDC, new_1, 1}}, + {732, {wxWindowDC, destruct, 0}}, + {733, {wxClientDC, new_0, 0}}, + {734, {wxClientDC, new_1, 1}}, + {735, {wxClientDC, 'Destroy', undefined}}, + {736, {wxPaintDC, new_0, 0}}, + {737, {wxPaintDC, new_1, 1}}, + {738, {wxPaintDC, 'Destroy', undefined}}, + {740, {wxMemoryDC, new_1_0, 1}}, + {741, {wxMemoryDC, new_1_1, 1}}, + {742, {wxMemoryDC, new_0, 0}}, + {744, {wxMemoryDC, destruct, 0}}, + {745, {wxMemoryDC, selectObject, 1}}, + {746, {wxMemoryDC, selectObjectAsSource, 1}}, + {747, {wxBufferedDC, new_0, 0}}, + {748, {wxBufferedDC, new_2, 2}}, + {749, {wxBufferedDC, new_3, 3}}, + {750, {wxBufferedDC, destruct, 0}}, + {751, {wxBufferedDC, init_2, 2}}, + {752, {wxBufferedDC, init_3, 3}}, + {753, {wxBufferedPaintDC, new_3, 3}}, + {754, {wxBufferedPaintDC, new_2, 2}}, + {755, {wxBufferedPaintDC, destruct, 0}}, + {756, {wxGraphicsObject, destruct, 0}}, + {757, {wxGraphicsObject, getRenderer, 0}}, + {758, {wxGraphicsObject, isNull, 0}}, + {759, {wxGraphicsContext, destruct, 0}}, + {760, {wxGraphicsContext, create_1_1, 1}}, + {761, {wxGraphicsContext, create_1_0, 1}}, + {762, {wxGraphicsContext, create_0, 0}}, + {763, {wxGraphicsContext, createPen, 1}}, + {764, {wxGraphicsContext, createBrush, 1}}, + {765, {wxGraphicsContext, createRadialGradientBrush, 7}}, + {766, {wxGraphicsContext, createLinearGradientBrush, 6}}, + {767, {wxGraphicsContext, createFont, 2}}, + {768, {wxGraphicsContext, createMatrix, 1}}, + {769, {wxGraphicsContext, createPath, 0}}, + {770, {wxGraphicsContext, clip_1, 1}}, + {771, {wxGraphicsContext, clip_4, 4}}, + {772, {wxGraphicsContext, resetClip, 0}}, + {773, {wxGraphicsContext, drawBitmap, 5}}, + {774, {wxGraphicsContext, drawEllipse, 4}}, + {775, {wxGraphicsContext, drawIcon, 5}}, + {776, {wxGraphicsContext, drawLines, 3}}, + {777, {wxGraphicsContext, drawPath, 2}}, + {778, {wxGraphicsContext, drawRectangle, 4}}, + {779, {wxGraphicsContext, drawRoundedRectangle, 5}}, + {780, {wxGraphicsContext, drawText_3, 3}}, + {781, {wxGraphicsContext, drawText_4_0, 4}}, + {782, {wxGraphicsContext, drawText_4_1, 4}}, + {783, {wxGraphicsContext, drawText_5, 5}}, + {784, {wxGraphicsContext, fillPath, 2}}, + {785, {wxGraphicsContext, strokePath, 1}}, + {786, {wxGraphicsContext, getPartialTextExtents, 2}}, + {787, {wxGraphicsContext, getTextExtent, 5}}, + {788, {wxGraphicsContext, rotate, 1}}, + {789, {wxGraphicsContext, scale, 2}}, + {790, {wxGraphicsContext, translate, 2}}, + {791, {wxGraphicsContext, getTransform, 0}}, + {792, {wxGraphicsContext, setTransform, 1}}, + {793, {wxGraphicsContext, concatTransform, 1}}, + {794, {wxGraphicsContext, setBrush_1_1, 1}}, + {795, {wxGraphicsContext, setBrush_1_0, 1}}, + {796, {wxGraphicsContext, setFont_1, 1}}, + {797, {wxGraphicsContext, setFont_2, 2}}, + {798, {wxGraphicsContext, setPen_1_0, 1}}, + {799, {wxGraphicsContext, setPen_1_1, 1}}, + {800, {wxGraphicsContext, strokeLine, 4}}, + {801, {wxGraphicsContext, strokeLines, 2}}, + {803, {wxGraphicsMatrix, concat, 1}}, + {805, {wxGraphicsMatrix, get, 1}}, + {806, {wxGraphicsMatrix, invert, 0}}, + {807, {wxGraphicsMatrix, isEqual, 1}}, + {809, {wxGraphicsMatrix, isIdentity, 0}}, + {810, {wxGraphicsMatrix, rotate, 1}}, + {811, {wxGraphicsMatrix, scale, 2}}, + {812, {wxGraphicsMatrix, translate, 2}}, + {813, {wxGraphicsMatrix, set, 1}}, + {814, {wxGraphicsMatrix, transformPoint, 2}}, + {815, {wxGraphicsMatrix, transformDistance, 2}}, + {816, {wxGraphicsPath, moveToPoint_2, 2}}, + {817, {wxGraphicsPath, moveToPoint_1, 1}}, + {818, {wxGraphicsPath, addArc_6, 6}}, + {819, {wxGraphicsPath, addArc_5, 5}}, + {820, {wxGraphicsPath, addArcToPoint, 5}}, + {821, {wxGraphicsPath, addCircle, 3}}, + {822, {wxGraphicsPath, addCurveToPoint_6, 6}}, + {823, {wxGraphicsPath, addCurveToPoint_3, 3}}, + {824, {wxGraphicsPath, addEllipse, 4}}, + {825, {wxGraphicsPath, addLineToPoint_2, 2}}, + {826, {wxGraphicsPath, addLineToPoint_1, 1}}, + {827, {wxGraphicsPath, addPath, 1}}, + {828, {wxGraphicsPath, addQuadCurveToPoint, 4}}, + {829, {wxGraphicsPath, addRectangle, 4}}, + {830, {wxGraphicsPath, addRoundedRectangle, 5}}, + {831, {wxGraphicsPath, closeSubpath, 0}}, + {832, {wxGraphicsPath, contains_3, 3}}, + {833, {wxGraphicsPath, contains_2, 2}}, + {835, {wxGraphicsPath, getBox, 0}}, + {837, {wxGraphicsPath, getCurrentPoint, 0}}, + {838, {wxGraphicsPath, transform, 1}}, + {839, {wxGraphicsRenderer, getDefaultRenderer, 0}}, + {840, {wxGraphicsRenderer, createContext_1_1, 1}}, + {841, {wxGraphicsRenderer, createContext_1_0, 1}}, + {842, {wxGraphicsRenderer, createPen, 1}}, + {843, {wxGraphicsRenderer, createBrush, 1}}, + {844, {wxGraphicsRenderer, createLinearGradientBrush, 6}}, + {845, {wxGraphicsRenderer, createRadialGradientBrush, 7}}, + {846, {wxGraphicsRenderer, createFont, 2}}, + {847, {wxGraphicsRenderer, createMatrix, 1}}, + {848, {wxGraphicsRenderer, createPath, 0}}, + {850, {wxMenuBar, new_1, 1}}, + {852, {wxMenuBar, new_0, 0}}, + {854, {wxMenuBar, destruct, 0}}, + {855, {wxMenuBar, append, 2}}, + {856, {wxMenuBar, check, 2}}, + {857, {wxMenuBar, enable_2, 2}}, + {858, {wxMenuBar, enable_1, 1}}, + {859, {wxMenuBar, enableTop, 2}}, + {860, {wxMenuBar, findMenu, 1}}, + {861, {wxMenuBar, findMenuItem, 2}}, + {862, {wxMenuBar, findItem, 2}}, + {863, {wxMenuBar, getHelpString, 1}}, + {864, {wxMenuBar, getLabel_1, 1}}, + {865, {wxMenuBar, getLabel_0, 0}}, + {866, {wxMenuBar, getLabelTop, 1}}, + {867, {wxMenuBar, getMenu, 1}}, + {868, {wxMenuBar, getMenuCount, 0}}, + {869, {wxMenuBar, insert, 3}}, + {870, {wxMenuBar, isChecked, 1}}, + {871, {wxMenuBar, isEnabled_1, 1}}, + {872, {wxMenuBar, isEnabled_0, 0}}, + {873, {wxMenuBar, remove, 1}}, + {874, {wxMenuBar, replace, 3}}, + {875, {wxMenuBar, setHelpString, 2}}, + {876, {wxMenuBar, setLabel_2, 2}}, + {877, {wxMenuBar, setLabel_1, 1}}, + {878, {wxMenuBar, setLabelTop, 2}}, + {879, {wxControl, getLabel, 0}}, + {880, {wxControl, setLabel, 1}}, + {881, {wxControlWithItems, append_1, 1}}, + {882, {wxControlWithItems, append_2, 2}}, + {883, {wxControlWithItems, appendStrings_1, 1}}, + {884, {wxControlWithItems, clear, 0}}, + {885, {wxControlWithItems, delete, 1}}, + {886, {wxControlWithItems, findString, 2}}, + {887, {wxControlWithItems, getClientData, 1}}, + {888, {wxControlWithItems, setClientData, 2}}, + {889, {wxControlWithItems, getCount, 0}}, + {890, {wxControlWithItems, getSelection, 0}}, + {891, {wxControlWithItems, getString, 1}}, + {892, {wxControlWithItems, getStringSelection, 0}}, + {893, {wxControlWithItems, insert_2, 2}}, + {894, {wxControlWithItems, insert_3, 3}}, + {895, {wxControlWithItems, isEmpty, 0}}, + {896, {wxControlWithItems, select, 1}}, + {897, {wxControlWithItems, setSelection, 1}}, + {898, {wxControlWithItems, setString, 2}}, + {899, {wxControlWithItems, setStringSelection, 1}}, + {902, {wxMenu, new_2, 2}}, + {903, {wxMenu, new_1, 1}}, + {905, {wxMenu, destruct, 0}}, + {906, {wxMenu, append_3, 3}}, + {907, {wxMenu, append_1, 1}}, + {908, {wxMenu, append_4_0, 4}}, + {909, {wxMenu, append_4_1, 4}}, + {910, {wxMenu, appendCheckItem, 3}}, + {911, {wxMenu, appendRadioItem, 3}}, + {912, {wxMenu, appendSeparator, 0}}, + {913, {wxMenu, break, 0}}, + {914, {wxMenu, check, 2}}, + {915, {wxMenu, delete_1_0, 1}}, + {916, {wxMenu, delete_1_1, 1}}, + {917, {wxMenu, destroy_1_0, 1}}, + {918, {wxMenu, destroy_1_1, 1}}, + {919, {wxMenu, enable, 2}}, + {920, {wxMenu, findItem_1, 1}}, + {921, {wxMenu, findItem_2, 2}}, + {922, {wxMenu, findItemByPosition, 1}}, + {923, {wxMenu, getHelpString, 1}}, + {924, {wxMenu, getLabel, 1}}, + {925, {wxMenu, getMenuItemCount, 0}}, + {926, {wxMenu, getMenuItems, 0}}, + {928, {wxMenu, getTitle, 0}}, + {929, {wxMenu, insert_2, 2}}, + {930, {wxMenu, insert_3, 3}}, + {931, {wxMenu, insert_5_1, 5}}, + {932, {wxMenu, insert_5_0, 5}}, + {933, {wxMenu, insertCheckItem, 4}}, + {934, {wxMenu, insertRadioItem, 4}}, + {935, {wxMenu, insertSeparator, 1}}, + {936, {wxMenu, isChecked, 1}}, + {937, {wxMenu, isEnabled, 1}}, + {938, {wxMenu, prepend_1, 1}}, + {939, {wxMenu, prepend_2, 2}}, + {940, {wxMenu, prepend_4_1, 4}}, + {941, {wxMenu, prepend_4_0, 4}}, + {942, {wxMenu, prependCheckItem, 3}}, + {943, {wxMenu, prependRadioItem, 3}}, + {944, {wxMenu, prependSeparator, 0}}, + {945, {wxMenu, remove_1_0, 1}}, + {946, {wxMenu, remove_1_1, 1}}, + {947, {wxMenu, setHelpString, 2}}, + {948, {wxMenu, setLabel, 2}}, + {949, {wxMenu, setTitle, 1}}, + {950, {wxMenuItem, new, 1}}, + {952, {wxMenuItem, destruct, 0}}, + {953, {wxMenuItem, check, 1}}, + {954, {wxMenuItem, enable, 1}}, + {955, {wxMenuItem, getBitmap, 0}}, + {956, {wxMenuItem, getHelp, 0}}, + {957, {wxMenuItem, getId, 0}}, + {958, {wxMenuItem, getKind, 0}}, + {959, {wxMenuItem, getLabel, 0}}, + {960, {wxMenuItem, getLabelFromText, 1}}, + {961, {wxMenuItem, getMenu, 0}}, + {962, {wxMenuItem, getText, 0}}, + {963, {wxMenuItem, getSubMenu, 0}}, + {964, {wxMenuItem, isCheckable, 0}}, + {965, {wxMenuItem, isChecked, 0}}, + {966, {wxMenuItem, isEnabled, 0}}, + {967, {wxMenuItem, isSeparator, 0}}, + {968, {wxMenuItem, isSubMenu, 0}}, + {969, {wxMenuItem, setBitmap, 1}}, + {970, {wxMenuItem, setHelp, 1}}, + {971, {wxMenuItem, setMenu, 1}}, + {972, {wxMenuItem, setSubMenu, 1}}, + {973, {wxMenuItem, setText, 1}}, + {974, {wxToolBar, addControl, 1}}, + {975, {wxToolBar, addSeparator, 0}}, + {976, {wxToolBar, addTool_5, 5}}, + {977, {wxToolBar, addTool_4_0, 4}}, + {978, {wxToolBar, addTool_1, 1}}, + {979, {wxToolBar, addTool_4_1, 4}}, + {980, {wxToolBar, addTool_3, 3}}, + {981, {wxToolBar, addTool_6, 6}}, + {982, {wxToolBar, addCheckTool, 4}}, + {983, {wxToolBar, addRadioTool, 4}}, + {984, {wxToolBar, deleteTool, 1}}, + {985, {wxToolBar, deleteToolByPos, 1}}, + {986, {wxToolBar, enableTool, 2}}, + {987, {wxToolBar, findById, 1}}, + {988, {wxToolBar, findControl, 1}}, + {989, {wxToolBar, findToolForPosition, 2}}, + {990, {wxToolBar, getToolSize, 0}}, + {991, {wxToolBar, getToolBitmapSize, 0}}, + {992, {wxToolBar, getMargins, 0}}, + {993, {wxToolBar, getToolEnabled, 1}}, + {994, {wxToolBar, getToolLongHelp, 1}}, + {995, {wxToolBar, getToolPacking, 0}}, + {996, {wxToolBar, getToolPos, 1}}, + {997, {wxToolBar, getToolSeparation, 0}}, + {998, {wxToolBar, getToolShortHelp, 1}}, + {999, {wxToolBar, getToolState, 1}}, + {1000, {wxToolBar, insertControl, 2}}, + {1001, {wxToolBar, insertSeparator, 1}}, + {1002, {wxToolBar, insertTool_5, 5}}, + {1003, {wxToolBar, insertTool_2, 2}}, + {1004, {wxToolBar, insertTool_4, 4}}, + {1005, {wxToolBar, realize, 0}}, + {1006, {wxToolBar, removeTool, 1}}, + {1007, {wxToolBar, setMargins, 2}}, + {1008, {wxToolBar, setToolBitmapSize, 1}}, + {1009, {wxToolBar, setToolLongHelp, 2}}, + {1010, {wxToolBar, setToolPacking, 1}}, + {1011, {wxToolBar, setToolShortHelp, 2}}, + {1012, {wxToolBar, setToolSeparation, 1}}, + {1013, {wxToolBar, toggleTool, 2}}, + {1015, {wxStatusBar, new_0, 0}}, + {1016, {wxStatusBar, new_2, 2}}, + {1018, {wxStatusBar, destruct, 0}}, + {1019, {wxStatusBar, create, 2}}, + {1020, {wxStatusBar, getFieldRect, 2}}, + {1021, {wxStatusBar, getFieldsCount, 0}}, + {1022, {wxStatusBar, getStatusText, 1}}, + {1023, {wxStatusBar, popStatusText, 1}}, + {1024, {wxStatusBar, pushStatusText, 2}}, + {1025, {wxStatusBar, setFieldsCount, 2}}, + {1026, {wxStatusBar, setMinHeight, 1}}, + {1027, {wxStatusBar, setStatusText, 2}}, + {1028, {wxStatusBar, setStatusWidths, 2}}, + {1029, {wxStatusBar, setStatusStyles, 2}}, + {1030, {wxBitmap, new_0, 0}}, + {1031, {wxBitmap, new_3, 3}}, + {1032, {wxBitmap, new_4, 4}}, + {1033, {wxBitmap, new_2_0, 2}}, + {1034, {wxBitmap, new_2_1, 2}}, + {1035, {wxBitmap, destruct, 0}}, + {1036, {wxBitmap, convertToImage, 0}}, + {1037, {wxBitmap, copyFromIcon, 1}}, + {1038, {wxBitmap, create, 3}}, + {1039, {wxBitmap, getDepth, 0}}, + {1040, {wxBitmap, getHeight, 0}}, + {1041, {wxBitmap, getPalette, 0}}, + {1042, {wxBitmap, getMask, 0}}, + {1043, {wxBitmap, getWidth, 0}}, + {1044, {wxBitmap, getSubBitmap, 1}}, + {1045, {wxBitmap, loadFile, 2}}, + {1046, {wxBitmap, ok, 0}}, + {1047, {wxBitmap, saveFile, 3}}, + {1048, {wxBitmap, setDepth, 1}}, + {1049, {wxBitmap, setHeight, 1}}, + {1050, {wxBitmap, setMask, 1}}, + {1051, {wxBitmap, setPalette, 1}}, + {1052, {wxBitmap, setWidth, 1}}, + {1053, {wxIcon, new_0, 0}}, + {1054, {wxIcon, new_2, 2}}, + {1055, {wxIcon, new_1, 1}}, + {1056, {wxIcon, copyFromBitmap, 1}}, + {1057, {wxIcon, 'Destroy', undefined}}, + {1058, {wxIconBundle, new_0, 0}}, + {1059, {wxIconBundle, new_2, 2}}, + {1060, {wxIconBundle, new_1_0, 1}}, + {1061, {wxIconBundle, new_1_1, 1}}, + {1062, {wxIconBundle, destruct, 0}}, + {1063, {wxIconBundle, addIcon_2, 2}}, + {1064, {wxIconBundle, addIcon_1, 1}}, + {1065, {wxIconBundle, getIcon_1_1, 1}}, + {1066, {wxIconBundle, getIcon_1_0, 1}}, + {1067, {wxCursor, new_0, 0}}, + {1068, {wxCursor, new_1_0, 1}}, + {1069, {wxCursor, new_1_1, 1}}, + {1070, {wxCursor, new_4, 4}}, + {1071, {wxCursor, destruct, 0}}, + {1072, {wxCursor, ok, 0}}, + {1073, {wxMask, new_0, 0}}, + {1074, {wxMask, new_2_1, 2}}, + {1075, {wxMask, new_2_0, 2}}, + {1076, {wxMask, new_1, 1}}, + {1077, {wxMask, destruct, 0}}, + {1078, {wxMask, create_2_1, 2}}, + {1079, {wxMask, create_2_0, 2}}, + {1080, {wxMask, create_1, 1}}, + {1081, {wxImage, new_0, 0}}, + {1082, {wxImage, new_3_0, 3}}, + {1083, {wxImage, new_4, 4}}, + {1084, {wxImage, new_5, 5}}, + {1085, {wxImage, new_2, 2}}, + {1086, {wxImage, new_3_1, 3}}, + {1087, {wxImage, blur, 1}}, + {1088, {wxImage, blurHorizontal, 1}}, + {1089, {wxImage, blurVertical, 1}}, + {1090, {wxImage, convertAlphaToMask, 1}}, + {1091, {wxImage, convertToGreyscale, 1}}, + {1092, {wxImage, convertToMono, 3}}, + {1093, {wxImage, copy, 0}}, + {1094, {wxImage, create_3, 3}}, + {1095, {wxImage, create_4, 4}}, + {1096, {wxImage, create_5, 5}}, + {1097, {wxImage, 'Destroy', 0}}, + {1098, {wxImage, findFirstUnusedColour, 4}}, + {1099, {wxImage, getImageExtWildcard, 0}}, + {1100, {wxImage, getAlpha_2, 2}}, + {1101, {wxImage, getAlpha_0, 0}}, + {1102, {wxImage, getBlue, 2}}, + {1103, {wxImage, getData, 0}}, + {1104, {wxImage, getGreen, 2}}, + {1105, {wxImage, getImageCount, 2}}, + {1106, {wxImage, getHeight, 0}}, + {1107, {wxImage, getMaskBlue, 0}}, + {1108, {wxImage, getMaskGreen, 0}}, + {1109, {wxImage, getMaskRed, 0}}, + {1110, {wxImage, getOrFindMaskColour, 3}}, + {1111, {wxImage, getPalette, 0}}, + {1112, {wxImage, getRed, 2}}, + {1113, {wxImage, getSubImage, 1}}, + {1114, {wxImage, getWidth, 0}}, + {1115, {wxImage, hasAlpha, 0}}, + {1116, {wxImage, hasMask, 0}}, + {1117, {wxImage, getOption, 1}}, + {1118, {wxImage, getOptionInt, 1}}, + {1119, {wxImage, hasOption, 1}}, + {1120, {wxImage, initAlpha, 0}}, + {1121, {wxImage, initStandardHandlers, 0}}, + {1122, {wxImage, isTransparent, 3}}, + {1123, {wxImage, loadFile_2, 2}}, + {1124, {wxImage, loadFile_3, 3}}, + {1125, {wxImage, ok, 0}}, + {1126, {wxImage, removeHandler, 1}}, + {1127, {wxImage, mirror, 1}}, + {1128, {wxImage, replace, 6}}, + {1129, {wxImage, rescale, 3}}, + {1130, {wxImage, resize, 3}}, + {1131, {wxImage, rotate, 3}}, + {1132, {wxImage, rotateHue, 1}}, + {1133, {wxImage, rotate90, 1}}, + {1134, {wxImage, saveFile_1, 1}}, + {1135, {wxImage, saveFile_2_0, 2}}, + {1136, {wxImage, saveFile_2_1, 2}}, + {1137, {wxImage, scale, 3}}, + {1138, {wxImage, size, 3}}, + {1139, {wxImage, setAlpha_3, 3}}, + {1140, {wxImage, setAlpha_2, 2}}, + {1141, {wxImage, setData_2, 2}}, + {1142, {wxImage, setData_4, 4}}, + {1143, {wxImage, setMask, 1}}, + {1144, {wxImage, setMaskColour, 3}}, + {1145, {wxImage, setMaskFromImage, 4}}, + {1146, {wxImage, setOption_2_1, 2}}, + {1147, {wxImage, setOption_2_0, 2}}, + {1148, {wxImage, setPalette, 1}}, + {1149, {wxImage, setRGB_5, 5}}, + {1150, {wxImage, setRGB_4, 4}}, + {1151, {wxImage, 'Destroy', undefined}}, + {1152, {wxBrush, new_0, 0}}, + {1153, {wxBrush, new_2, 2}}, + {1154, {wxBrush, new_1, 1}}, + {1156, {wxBrush, destruct, 0}}, + {1157, {wxBrush, getColour, 0}}, + {1158, {wxBrush, getStipple, 0}}, + {1159, {wxBrush, getStyle, 0}}, + {1160, {wxBrush, isHatch, 0}}, + {1161, {wxBrush, isOk, 0}}, + {1162, {wxBrush, setColour_1, 1}}, + {1163, {wxBrush, setColour_3, 3}}, + {1164, {wxBrush, setStipple, 1}}, + {1165, {wxBrush, setStyle, 1}}, + {1166, {wxPen, new_0, 0}}, + {1167, {wxPen, new_2, 2}}, + {1168, {wxPen, destruct, 0}}, + {1169, {wxPen, getCap, 0}}, + {1170, {wxPen, getColour, 0}}, + {1171, {wxPen, getJoin, 0}}, + {1172, {wxPen, getStyle, 0}}, + {1173, {wxPen, getWidth, 0}}, + {1174, {wxPen, isOk, 0}}, + {1175, {wxPen, setCap, 1}}, + {1176, {wxPen, setColour_1, 1}}, + {1177, {wxPen, setColour_3, 3}}, + {1178, {wxPen, setJoin, 1}}, + {1179, {wxPen, setStyle, 1}}, + {1180, {wxPen, setWidth, 1}}, + {1181, {wxRegion, new_0, 0}}, + {1182, {wxRegion, new_4, 4}}, + {1183, {wxRegion, new_2, 2}}, + {1184, {wxRegion, new_1_1, 1}}, + {1186, {wxRegion, new_1_0, 1}}, + {1188, {wxRegion, destruct, 0}}, + {1189, {wxRegion, clear, 0}}, + {1190, {wxRegion, contains_2, 2}}, + {1191, {wxRegion, contains_1_0, 1}}, + {1192, {wxRegion, contains_4, 4}}, + {1193, {wxRegion, contains_1_1, 1}}, + {1194, {wxRegion, convertToBitmap, 0}}, + {1195, {wxRegion, getBox, 0}}, + {1196, {wxRegion, intersect_4, 4}}, + {1197, {wxRegion, intersect_1_1, 1}}, + {1198, {wxRegion, intersect_1_0, 1}}, + {1199, {wxRegion, isEmpty, 0}}, + {1200, {wxRegion, subtract_4, 4}}, + {1201, {wxRegion, subtract_1_1, 1}}, + {1202, {wxRegion, subtract_1_0, 1}}, + {1203, {wxRegion, offset_2, 2}}, + {1204, {wxRegion, offset_1, 1}}, + {1205, {wxRegion, union_4, 4}}, + {1206, {wxRegion, union_1_2, 1}}, + {1207, {wxRegion, union_1_1, 1}}, + {1208, {wxRegion, union_1_0, 1}}, + {1209, {wxRegion, union_3, 3}}, + {1210, {wxRegion, xor_4, 4}}, + {1211, {wxRegion, xor_1_1, 1}}, + {1212, {wxRegion, xor_1_0, 1}}, + {1213, {wxAcceleratorTable, new_0, 0}}, + {1214, {wxAcceleratorTable, new_2, 2}}, + {1215, {wxAcceleratorTable, destruct, 0}}, + {1216, {wxAcceleratorTable, ok, 0}}, + {1217, {wxAcceleratorEntry, new_1_0, 1}}, + {1218, {wxAcceleratorEntry, new_1_1, 1}}, + {1219, {wxAcceleratorEntry, getCommand, 0}}, + {1220, {wxAcceleratorEntry, getFlags, 0}}, + {1221, {wxAcceleratorEntry, getKeyCode, 0}}, + {1222, {wxAcceleratorEntry, set, 4}}, + {1223, {wxAcceleratorEntry, 'Destroy', undefined}}, + {1228, {wxCaret, new_3, 3}}, + {1229, {wxCaret, new_2, 2}}, + {1231, {wxCaret, destruct, 0}}, + {1232, {wxCaret, create_3, 3}}, + {1233, {wxCaret, create_2, 2}}, + {1234, {wxCaret, getBlinkTime, 0}}, + {1236, {wxCaret, getPosition, 0}}, + {1238, {wxCaret, getSize, 0}}, + {1239, {wxCaret, getWindow, 0}}, + {1240, {wxCaret, hide, 0}}, + {1241, {wxCaret, isOk, 0}}, + {1242, {wxCaret, isVisible, 0}}, + {1243, {wxCaret, move_2, 2}}, + {1244, {wxCaret, move_1, 1}}, + {1245, {wxCaret, setBlinkTime, 1}}, + {1246, {wxCaret, setSize_2, 2}}, + {1247, {wxCaret, setSize_1, 1}}, + {1248, {wxCaret, show, 1}}, + {1249, {wxSizer, add_2_1, 2}}, + {1250, {wxSizer, add_2_0, 2}}, + {1251, {wxSizer, add_3, 3}}, + {1252, {wxSizer, add_2_3, 2}}, + {1253, {wxSizer, add_2_2, 2}}, + {1254, {wxSizer, addSpacer, 1}}, + {1255, {wxSizer, addStretchSpacer, 1}}, + {1256, {wxSizer, calcMin, 0}}, + {1257, {wxSizer, clear, 1}}, + {1258, {wxSizer, detach_1_2, 1}}, + {1259, {wxSizer, detach_1_1, 1}}, + {1260, {wxSizer, detach_1_0, 1}}, + {1261, {wxSizer, fit, 1}}, + {1262, {wxSizer, fitInside, 1}}, + {1263, {wxSizer, getChildren, 0}}, + {1264, {wxSizer, getItem_2_1, 2}}, + {1265, {wxSizer, getItem_2_0, 2}}, + {1266, {wxSizer, getItem_1, 1}}, + {1267, {wxSizer, getSize, 0}}, + {1268, {wxSizer, getPosition, 0}}, + {1269, {wxSizer, getMinSize, 0}}, + {1270, {wxSizer, hide_2_0, 2}}, + {1271, {wxSizer, hide_2_1, 2}}, + {1272, {wxSizer, hide_1, 1}}, + {1273, {wxSizer, insert_3_1, 3}}, + {1274, {wxSizer, insert_3_0, 3}}, + {1275, {wxSizer, insert_4, 4}}, + {1276, {wxSizer, insert_3_3, 3}}, + {1277, {wxSizer, insert_3_2, 3}}, + {1278, {wxSizer, insert_2, 2}}, + {1279, {wxSizer, insertSpacer, 2}}, + {1280, {wxSizer, insertStretchSpacer, 2}}, + {1281, {wxSizer, isShown_1_2, 1}}, + {1282, {wxSizer, isShown_1_1, 1}}, + {1283, {wxSizer, isShown_1_0, 1}}, + {1284, {wxSizer, layout, 0}}, + {1285, {wxSizer, prepend_2_1, 2}}, + {1286, {wxSizer, prepend_2_0, 2}}, + {1287, {wxSizer, prepend_3, 3}}, + {1288, {wxSizer, prepend_2_3, 2}}, + {1289, {wxSizer, prepend_2_2, 2}}, + {1290, {wxSizer, prepend_1, 1}}, + {1291, {wxSizer, prependSpacer, 1}}, + {1292, {wxSizer, prependStretchSpacer, 1}}, + {1293, {wxSizer, recalcSizes, 0}}, + {1294, {wxSizer, remove_1_1, 1}}, + {1295, {wxSizer, remove_1_0, 1}}, + {1296, {wxSizer, replace_3_1, 3}}, + {1297, {wxSizer, replace_3_0, 3}}, + {1298, {wxSizer, replace_2, 2}}, + {1299, {wxSizer, setDimension, 4}}, + {1300, {wxSizer, setMinSize_2, 2}}, + {1301, {wxSizer, setMinSize_1, 1}}, + {1302, {wxSizer, setItemMinSize_3_2, 3}}, + {1303, {wxSizer, setItemMinSize_2_2, 2}}, + {1304, {wxSizer, setItemMinSize_3_1, 3}}, + {1305, {wxSizer, setItemMinSize_2_1, 2}}, + {1306, {wxSizer, setItemMinSize_3_0, 3}}, + {1307, {wxSizer, setItemMinSize_2_0, 2}}, + {1308, {wxSizer, setSizeHints, 1}}, + {1309, {wxSizer, setVirtualSizeHints, 1}}, + {1310, {wxSizer, show_2_2, 2}}, + {1311, {wxSizer, show_2_1, 2}}, + {1312, {wxSizer, show_2_0, 2}}, + {1313, {wxSizer, show_1, 1}}, + {1314, {wxSizerFlags, new, 1}}, + {1315, {wxSizerFlags, align, 1}}, + {1316, {wxSizerFlags, border_2, 2}}, + {1317, {wxSizerFlags, border_1, 1}}, + {1318, {wxSizerFlags, center, 0}}, + {1319, {wxSizerFlags, centre, 0}}, + {1320, {wxSizerFlags, expand, 0}}, + {1321, {wxSizerFlags, left, 0}}, + {1322, {wxSizerFlags, proportion, 1}}, + {1323, {wxSizerFlags, right, 0}}, + {1324, {wxSizerFlags, 'Destroy', undefined}}, + {1325, {wxSizerItem, new_5_1, 5}}, + {1326, {wxSizerItem, new_2_1, 2}}, + {1327, {wxSizerItem, new_5_0, 5}}, + {1328, {wxSizerItem, new_2_0, 2}}, + {1329, {wxSizerItem, new_6, 6}}, + {1330, {wxSizerItem, new_3, 3}}, + {1331, {wxSizerItem, new_0, 0}}, + {1332, {wxSizerItem, destruct, 0}}, + {1333, {wxSizerItem, calcMin, 0}}, + {1334, {wxSizerItem, deleteWindows, 0}}, + {1335, {wxSizerItem, detachSizer, 0}}, + {1336, {wxSizerItem, getBorder, 0}}, + {1337, {wxSizerItem, getFlag, 0}}, + {1338, {wxSizerItem, getMinSize, 0}}, + {1339, {wxSizerItem, getPosition, 0}}, + {1340, {wxSizerItem, getProportion, 0}}, + {1341, {wxSizerItem, getRatio, 0}}, + {1342, {wxSizerItem, getRect, 0}}, + {1343, {wxSizerItem, getSize, 0}}, + {1344, {wxSizerItem, getSizer, 0}}, + {1345, {wxSizerItem, getSpacer, 0}}, + {1346, {wxSizerItem, getUserData, 0}}, + {1347, {wxSizerItem, getWindow, 0}}, + {1348, {wxSizerItem, isSizer, 0}}, + {1349, {wxSizerItem, isShown, 0}}, + {1350, {wxSizerItem, isSpacer, 0}}, + {1351, {wxSizerItem, isWindow, 0}}, + {1352, {wxSizerItem, setBorder, 1}}, + {1353, {wxSizerItem, setDimension, 2}}, + {1354, {wxSizerItem, setFlag, 1}}, + {1355, {wxSizerItem, setInitSize, 2}}, + {1356, {wxSizerItem, setMinSize_1, 1}}, + {1357, {wxSizerItem, setMinSize_2, 2}}, + {1358, {wxSizerItem, setProportion, 1}}, + {1359, {wxSizerItem, setRatio_2, 2}}, + {1360, {wxSizerItem, setRatio_1_1, 1}}, + {1361, {wxSizerItem, setRatio_1_0, 1}}, + {1362, {wxSizerItem, setSizer, 1}}, + {1363, {wxSizerItem, setSpacer_1, 1}}, + {1364, {wxSizerItem, setSpacer_2, 2}}, + {1365, {wxSizerItem, setWindow, 1}}, + {1366, {wxSizerItem, show, 1}}, + {1367, {wxBoxSizer, new, 1}}, + {1368, {wxBoxSizer, getOrientation, 0}}, + {1369, {wxBoxSizer, 'Destroy', undefined}}, + {1370, {wxStaticBoxSizer, new_2, 2}}, + {1371, {wxStaticBoxSizer, new_3, 3}}, + {1372, {wxStaticBoxSizer, getStaticBox, 0}}, + {1373, {wxStaticBoxSizer, 'Destroy', undefined}}, + {1374, {wxGridSizer, new_4, 4}}, + {1375, {wxGridSizer, new_2, 2}}, + {1376, {wxGridSizer, getCols, 0}}, + {1377, {wxGridSizer, getHGap, 0}}, + {1378, {wxGridSizer, getRows, 0}}, + {1379, {wxGridSizer, getVGap, 0}}, + {1380, {wxGridSizer, setCols, 1}}, + {1381, {wxGridSizer, setHGap, 1}}, + {1382, {wxGridSizer, setRows, 1}}, + {1383, {wxGridSizer, setVGap, 1}}, + {1384, {wxGridSizer, 'Destroy', undefined}}, + {1385, {wxFlexGridSizer, new_4, 4}}, + {1386, {wxFlexGridSizer, new_2, 2}}, + {1387, {wxFlexGridSizer, addGrowableCol, 2}}, + {1388, {wxFlexGridSizer, addGrowableRow, 2}}, + {1389, {wxFlexGridSizer, getFlexibleDirection, 0}}, + {1390, {wxFlexGridSizer, getNonFlexibleGrowMode, 0}}, + {1391, {wxFlexGridSizer, removeGrowableCol, 1}}, + {1392, {wxFlexGridSizer, removeGrowableRow, 1}}, + {1393, {wxFlexGridSizer, setFlexibleDirection, 1}}, + {1394, {wxFlexGridSizer, setNonFlexibleGrowMode, 1}}, + {1395, {wxFlexGridSizer, 'Destroy', undefined}}, + {1396, {wxGridBagSizer, new, 1}}, + {1397, {wxGridBagSizer, add_3_2, 3}}, + {1398, {wxGridBagSizer, add_3_1, 3}}, + {1399, {wxGridBagSizer, add_4, 4}}, + {1400, {wxGridBagSizer, add_1_0, 1}}, + {1401, {wxGridBagSizer, add_2_1, 2}}, + {1402, {wxGridBagSizer, add_2_0, 2}}, + {1403, {wxGridBagSizer, add_3_0, 3}}, + {1404, {wxGridBagSizer, add_1_1, 1}}, + {1405, {wxGridBagSizer, calcMin, 0}}, + {1406, {wxGridBagSizer, checkForIntersection_2, 2}}, + {1407, {wxGridBagSizer, checkForIntersection_3, 3}}, + {1408, {wxGridBagSizer, findItem_1_1, 1}}, + {1409, {wxGridBagSizer, findItem_1_0, 1}}, + {1410, {wxGridBagSizer, findItemAtPoint, 1}}, + {1411, {wxGridBagSizer, findItemAtPosition, 1}}, + {1412, {wxGridBagSizer, findItemWithData, 1}}, + {1413, {wxGridBagSizer, getCellSize, 2}}, + {1414, {wxGridBagSizer, getEmptyCellSize, 0}}, + {1415, {wxGridBagSizer, getItemPosition_1_2, 1}}, + {1416, {wxGridBagSizer, getItemPosition_1_1, 1}}, + {1417, {wxGridBagSizer, getItemPosition_1_0, 1}}, + {1418, {wxGridBagSizer, getItemSpan_1_2, 1}}, + {1419, {wxGridBagSizer, getItemSpan_1_1, 1}}, + {1420, {wxGridBagSizer, getItemSpan_1_0, 1}}, + {1421, {wxGridBagSizer, setEmptyCellSize, 1}}, + {1422, {wxGridBagSizer, setItemPosition_2_2, 2}}, + {1423, {wxGridBagSizer, setItemPosition_2_1, 2}}, + {1424, {wxGridBagSizer, setItemPosition_2_0, 2}}, + {1425, {wxGridBagSizer, setItemSpan_2_2, 2}}, + {1426, {wxGridBagSizer, setItemSpan_2_1, 2}}, + {1427, {wxGridBagSizer, setItemSpan_2_0, 2}}, + {1428, {wxGridBagSizer, 'Destroy', undefined}}, + {1429, {wxStdDialogButtonSizer, new, 0}}, + {1430, {wxStdDialogButtonSizer, addButton, 1}}, + {1431, {wxStdDialogButtonSizer, realize, 0}}, + {1432, {wxStdDialogButtonSizer, setAffirmativeButton, 1}}, + {1433, {wxStdDialogButtonSizer, setCancelButton, 1}}, + {1434, {wxStdDialogButtonSizer, setNegativeButton, 1}}, + {1435, {wxStdDialogButtonSizer, 'Destroy', undefined}}, + {1436, {wxFont, new_0, 0}}, + {1437, {wxFont, new_1, 1}}, + {1438, {wxFont, new_5, 5}}, + {1440, {wxFont, destruct, 0}}, + {1441, {wxFont, isFixedWidth, 0}}, + {1442, {wxFont, getDefaultEncoding, 0}}, + {1443, {wxFont, getFaceName, 0}}, + {1444, {wxFont, getFamily, 0}}, + {1445, {wxFont, getNativeFontInfoDesc, 0}}, + {1446, {wxFont, getNativeFontInfoUserDesc, 0}}, + {1447, {wxFont, getPointSize, 0}}, + {1448, {wxFont, getStyle, 0}}, + {1449, {wxFont, getUnderlined, 0}}, + {1450, {wxFont, getWeight, 0}}, + {1451, {wxFont, ok, 0}}, + {1452, {wxFont, setDefaultEncoding, 1}}, + {1453, {wxFont, setFaceName, 1}}, + {1454, {wxFont, setFamily, 1}}, + {1455, {wxFont, setPointSize, 1}}, + {1456, {wxFont, setStyle, 1}}, + {1457, {wxFont, setUnderlined, 1}}, + {1458, {wxFont, setWeight, 1}}, + {1459, {wxToolTip, enable, 1}}, + {1460, {wxToolTip, setDelay, 1}}, + {1461, {wxToolTip, new, 1}}, + {1462, {wxToolTip, setTip, 1}}, + {1463, {wxToolTip, getTip, 0}}, + {1464, {wxToolTip, getWindow, 0}}, + {1465, {wxToolTip, 'Destroy', undefined}}, + {1467, {wxButton, new_3, 3}}, + {1468, {wxButton, new_0, 0}}, + {1469, {wxButton, destruct, 0}}, + {1470, {wxButton, create, 3}}, + {1471, {wxButton, getDefaultSize, 0}}, + {1472, {wxButton, setDefault, 0}}, + {1473, {wxButton, setLabel, 1}}, + {1475, {wxBitmapButton, new_4, 4}}, + {1476, {wxBitmapButton, new_0, 0}}, + {1477, {wxBitmapButton, create, 4}}, + {1478, {wxBitmapButton, getBitmapDisabled, 0}}, + {1480, {wxBitmapButton, getBitmapFocus, 0}}, + {1482, {wxBitmapButton, getBitmapLabel, 0}}, + {1484, {wxBitmapButton, getBitmapSelected, 0}}, + {1486, {wxBitmapButton, setBitmapDisabled, 1}}, + {1487, {wxBitmapButton, setBitmapFocus, 1}}, + {1488, {wxBitmapButton, setBitmapLabel, 1}}, + {1489, {wxBitmapButton, setBitmapSelected, 1}}, + {1490, {wxBitmapButton, 'Destroy', undefined}}, + {1491, {wxToggleButton, new_0, 0}}, + {1492, {wxToggleButton, new_4, 4}}, + {1493, {wxToggleButton, create, 4}}, + {1494, {wxToggleButton, getValue, 0}}, + {1495, {wxToggleButton, setValue, 1}}, + {1496, {wxToggleButton, 'Destroy', undefined}}, + {1497, {wxCalendarCtrl, new_0, 0}}, + {1498, {wxCalendarCtrl, new_3, 3}}, + {1499, {wxCalendarCtrl, create, 3}}, + {1500, {wxCalendarCtrl, destruct, 0}}, + {1501, {wxCalendarCtrl, setDate, 1}}, + {1502, {wxCalendarCtrl, getDate, 0}}, + {1503, {wxCalendarCtrl, enableYearChange, 1}}, + {1504, {wxCalendarCtrl, enableMonthChange, 1}}, + {1505, {wxCalendarCtrl, enableHolidayDisplay, 1}}, + {1506, {wxCalendarCtrl, setHeaderColours, 2}}, + {1507, {wxCalendarCtrl, getHeaderColourFg, 0}}, + {1508, {wxCalendarCtrl, getHeaderColourBg, 0}}, + {1509, {wxCalendarCtrl, setHighlightColours, 2}}, + {1510, {wxCalendarCtrl, getHighlightColourFg, 0}}, + {1511, {wxCalendarCtrl, getHighlightColourBg, 0}}, + {1512, {wxCalendarCtrl, setHolidayColours, 2}}, + {1513, {wxCalendarCtrl, getHolidayColourFg, 0}}, + {1514, {wxCalendarCtrl, getHolidayColourBg, 0}}, + {1515, {wxCalendarCtrl, getAttr, 1}}, + {1516, {wxCalendarCtrl, setAttr, 2}}, + {1517, {wxCalendarCtrl, setHoliday, 1}}, + {1518, {wxCalendarCtrl, resetAttr, 1}}, + {1519, {wxCalendarCtrl, hitTest, 2}}, + {1520, {wxCalendarDateAttr, new_0, 0}}, + {1521, {wxCalendarDateAttr, new_2_1, 2}}, + {1522, {wxCalendarDateAttr, new_2_0, 2}}, + {1523, {wxCalendarDateAttr, setTextColour, 1}}, + {1524, {wxCalendarDateAttr, setBackgroundColour, 1}}, + {1525, {wxCalendarDateAttr, setBorderColour, 1}}, + {1526, {wxCalendarDateAttr, setFont, 1}}, + {1527, {wxCalendarDateAttr, setBorder, 1}}, + {1528, {wxCalendarDateAttr, setHoliday, 1}}, + {1529, {wxCalendarDateAttr, hasTextColour, 0}}, + {1530, {wxCalendarDateAttr, hasBackgroundColour, 0}}, + {1531, {wxCalendarDateAttr, hasBorderColour, 0}}, + {1532, {wxCalendarDateAttr, hasFont, 0}}, + {1533, {wxCalendarDateAttr, hasBorder, 0}}, + {1534, {wxCalendarDateAttr, isHoliday, 0}}, + {1535, {wxCalendarDateAttr, getTextColour, 0}}, + {1536, {wxCalendarDateAttr, getBackgroundColour, 0}}, + {1537, {wxCalendarDateAttr, getBorderColour, 0}}, + {1538, {wxCalendarDateAttr, getFont, 0}}, + {1539, {wxCalendarDateAttr, getBorder, 0}}, + {1540, {wxCalendarDateAttr, 'Destroy', undefined}}, + {1542, {wxCheckBox, new_4, 4}}, + {1543, {wxCheckBox, new_0, 0}}, + {1544, {wxCheckBox, create, 4}}, + {1545, {wxCheckBox, getValue, 0}}, + {1546, {wxCheckBox, get3StateValue, 0}}, + {1547, {wxCheckBox, is3rdStateAllowedForUser, 0}}, + {1548, {wxCheckBox, is3State, 0}}, + {1549, {wxCheckBox, isChecked, 0}}, + {1550, {wxCheckBox, setValue, 1}}, + {1551, {wxCheckBox, set3StateValue, 1}}, + {1552, {wxCheckBox, 'Destroy', undefined}}, + {1553, {wxCheckListBox, new_0, 0}}, + {1555, {wxCheckListBox, new_3, 3}}, + {1556, {wxCheckListBox, check, 2}}, + {1557, {wxCheckListBox, isChecked, 1}}, + {1558, {wxCheckListBox, 'Destroy', undefined}}, + {1561, {wxChoice, new_3, 3}}, + {1562, {wxChoice, new_0, 0}}, + {1564, {wxChoice, destruct, 0}}, + {1566, {wxChoice, create, 6}}, + {1567, {wxChoice, delete, 1}}, + {1568, {wxChoice, getColumns, 0}}, + {1569, {wxChoice, setColumns, 1}}, + {1570, {wxComboBox, new_0, 0}}, + {1572, {wxComboBox, new_3, 3}}, + {1573, {wxComboBox, destruct, 0}}, + {1575, {wxComboBox, create, 7}}, + {1576, {wxComboBox, canCopy, 0}}, + {1577, {wxComboBox, canCut, 0}}, + {1578, {wxComboBox, canPaste, 0}}, + {1579, {wxComboBox, canRedo, 0}}, + {1580, {wxComboBox, canUndo, 0}}, + {1581, {wxComboBox, copy, 0}}, + {1582, {wxComboBox, cut, 0}}, + {1583, {wxComboBox, getInsertionPoint, 0}}, + {1584, {wxComboBox, getLastPosition, 0}}, + {1585, {wxComboBox, getValue, 0}}, + {1586, {wxComboBox, paste, 0}}, + {1587, {wxComboBox, redo, 0}}, + {1588, {wxComboBox, replace, 3}}, + {1589, {wxComboBox, remove, 2}}, + {1590, {wxComboBox, setInsertionPoint, 1}}, + {1591, {wxComboBox, setInsertionPointEnd, 0}}, + {1592, {wxComboBox, setSelection_1, 1}}, + {1593, {wxComboBox, setSelection_2, 2}}, + {1594, {wxComboBox, setValue, 1}}, + {1595, {wxComboBox, undo, 0}}, + {1596, {wxGauge, new_0, 0}}, + {1597, {wxGauge, new_4, 4}}, + {1598, {wxGauge, create, 4}}, + {1599, {wxGauge, getBezelFace, 0}}, + {1600, {wxGauge, getRange, 0}}, + {1601, {wxGauge, getShadowWidth, 0}}, + {1602, {wxGauge, getValue, 0}}, + {1603, {wxGauge, isVertical, 0}}, + {1604, {wxGauge, setBezelFace, 1}}, + {1605, {wxGauge, setRange, 1}}, + {1606, {wxGauge, setShadowWidth, 1}}, + {1607, {wxGauge, setValue, 1}}, + {1608, {wxGauge, pulse, 0}}, + {1609, {wxGauge, 'Destroy', undefined}}, + {1610, {wxGenericDirCtrl, new_0, 0}}, + {1611, {wxGenericDirCtrl, new_2, 2}}, + {1612, {wxGenericDirCtrl, destruct, 0}}, + {1613, {wxGenericDirCtrl, create, 2}}, + {1614, {wxGenericDirCtrl, init, 0}}, + {1615, {wxGenericDirCtrl, collapseTree, 0}}, + {1616, {wxGenericDirCtrl, expandPath, 1}}, + {1617, {wxGenericDirCtrl, getDefaultPath, 0}}, + {1618, {wxGenericDirCtrl, getPath, 0}}, + {1619, {wxGenericDirCtrl, getFilePath, 0}}, + {1620, {wxGenericDirCtrl, getFilter, 0}}, + {1621, {wxGenericDirCtrl, getFilterIndex, 0}}, + {1622, {wxGenericDirCtrl, getRootId, 0}}, + {1623, {wxGenericDirCtrl, getTreeCtrl, 0}}, + {1624, {wxGenericDirCtrl, reCreateTree, 0}}, + {1625, {wxGenericDirCtrl, setDefaultPath, 1}}, + {1626, {wxGenericDirCtrl, setFilter, 1}}, + {1627, {wxGenericDirCtrl, setFilterIndex, 1}}, + {1628, {wxGenericDirCtrl, setPath, 1}}, + {1630, {wxStaticBox, new_4, 4}}, + {1631, {wxStaticBox, new_0, 0}}, + {1632, {wxStaticBox, create, 4}}, + {1633, {wxStaticBox, 'Destroy', undefined}}, + {1635, {wxStaticLine, new_2, 2}}, + {1636, {wxStaticLine, new_0, 0}}, + {1637, {wxStaticLine, create, 2}}, + {1638, {wxStaticLine, isVertical, 0}}, + {1639, {wxStaticLine, getDefaultSize, 0}}, + {1640, {wxStaticLine, 'Destroy', undefined}}, + {1643, {wxListBox, new_3, 3}}, + {1644, {wxListBox, new_0, 0}}, + {1646, {wxListBox, destruct, 0}}, + {1648, {wxListBox, create, 6}}, + {1649, {wxListBox, deselect, 1}}, + {1650, {wxListBox, getSelections, 1}}, + {1651, {wxListBox, insertItems, 2}}, + {1652, {wxListBox, isSelected, 1}}, + {1654, {wxListBox, set, 2}}, + {1655, {wxListBox, hitTest, 1}}, + {1656, {wxListBox, setFirstItem_1_0, 1}}, + {1657, {wxListBox, setFirstItem_1_1, 1}}, + {1658, {wxListCtrl, new_0, 0}}, + {1659, {wxListCtrl, new_2, 2}}, + {1660, {wxListCtrl, arrange, 1}}, + {1661, {wxListCtrl, assignImageList, 2}}, + {1662, {wxListCtrl, clearAll, 0}}, + {1663, {wxListCtrl, create, 2}}, + {1664, {wxListCtrl, deleteAllItems, 0}}, + {1665, {wxListCtrl, deleteColumn, 1}}, + {1666, {wxListCtrl, deleteItem, 1}}, + {1667, {wxListCtrl, editLabel, 1}}, + {1668, {wxListCtrl, ensureVisible, 1}}, + {1669, {wxListCtrl, findItem_3_0, 3}}, + {1670, {wxListCtrl, findItem_3_1, 3}}, + {1671, {wxListCtrl, getColumn, 2}}, + {1672, {wxListCtrl, getColumnCount, 0}}, + {1673, {wxListCtrl, getColumnWidth, 1}}, + {1674, {wxListCtrl, getCountPerPage, 0}}, + {1675, {wxListCtrl, getEditControl, 0}}, + {1676, {wxListCtrl, getImageList, 1}}, + {1677, {wxListCtrl, getItem, 1}}, + {1678, {wxListCtrl, getItemBackgroundColour, 1}}, + {1679, {wxListCtrl, getItemCount, 0}}, + {1680, {wxListCtrl, getItemData, 1}}, + {1681, {wxListCtrl, getItemFont, 1}}, + {1682, {wxListCtrl, getItemPosition, 2}}, + {1683, {wxListCtrl, getItemRect, 3}}, + {1684, {wxListCtrl, getItemSpacing, 0}}, + {1685, {wxListCtrl, getItemState, 2}}, + {1686, {wxListCtrl, getItemText, 1}}, + {1687, {wxListCtrl, getItemTextColour, 1}}, + {1688, {wxListCtrl, getNextItem, 2}}, + {1689, {wxListCtrl, getSelectedItemCount, 0}}, + {1690, {wxListCtrl, getTextColour, 0}}, + {1691, {wxListCtrl, getTopItem, 0}}, + {1692, {wxListCtrl, getViewRect, 0}}, + {1693, {wxListCtrl, hitTest, 2}}, + {1694, {wxListCtrl, insertColumn_2, 2}}, + {1695, {wxListCtrl, insertColumn_3, 3}}, + {1696, {wxListCtrl, insertItem_1, 1}}, + {1697, {wxListCtrl, insertItem_2_1, 2}}, + {1698, {wxListCtrl, insertItem_2_0, 2}}, + {1699, {wxListCtrl, insertItem_3, 3}}, + {1700, {wxListCtrl, refreshItem, 1}}, + {1701, {wxListCtrl, refreshItems, 2}}, + {1702, {wxListCtrl, scrollList, 2}}, + {1703, {wxListCtrl, setBackgroundColour, 1}}, + {1704, {wxListCtrl, setColumn, 2}}, + {1705, {wxListCtrl, setColumnWidth, 2}}, + {1706, {wxListCtrl, setImageList, 2}}, + {1707, {wxListCtrl, setItem_1, 1}}, + {1708, {wxListCtrl, setItem_4, 4}}, + {1709, {wxListCtrl, setItemBackgroundColour, 2}}, + {1710, {wxListCtrl, setItemCount, 1}}, + {1711, {wxListCtrl, setItemData, 2}}, + {1712, {wxListCtrl, setItemFont, 2}}, + {1713, {wxListCtrl, setItemImage, 3}}, + {1714, {wxListCtrl, setItemColumnImage, 3}}, + {1715, {wxListCtrl, setItemPosition, 2}}, + {1716, {wxListCtrl, setItemState, 3}}, + {1717, {wxListCtrl, setItemText, 2}}, + {1718, {wxListCtrl, setItemTextColour, 2}}, + {1719, {wxListCtrl, setSingleStyle, 2}}, + {1720, {wxListCtrl, setTextColour, 1}}, + {1721, {wxListCtrl, setWindowStyleFlag, 1}}, + {1722, {wxListCtrl, sortItems, 2}}, + {1723, {wxListCtrl, 'Destroy', undefined}}, + {1724, {wxListView, clearColumnImage, 1}}, + {1725, {wxListView, focus, 1}}, + {1726, {wxListView, getFirstSelected, 0}}, + {1727, {wxListView, getFocusedItem, 0}}, + {1728, {wxListView, getNextSelected, 1}}, + {1729, {wxListView, isSelected, 1}}, + {1730, {wxListView, select, 2}}, + {1731, {wxListView, setColumnImage, 2}}, + {1732, {wxListItem, new_0, 0}}, + {1733, {wxListItem, new_1, 1}}, + {1734, {wxListItem, destruct, 0}}, + {1735, {wxListItem, clear, 0}}, + {1736, {wxListItem, getAlign, 0}}, + {1737, {wxListItem, getBackgroundColour, 0}}, + {1738, {wxListItem, getColumn, 0}}, + {1739, {wxListItem, getFont, 0}}, + {1740, {wxListItem, getId, 0}}, + {1741, {wxListItem, getImage, 0}}, + {1742, {wxListItem, getMask, 0}}, + {1743, {wxListItem, getState, 0}}, + {1744, {wxListItem, getText, 0}}, + {1745, {wxListItem, getTextColour, 0}}, + {1746, {wxListItem, getWidth, 0}}, + {1747, {wxListItem, setAlign, 1}}, + {1748, {wxListItem, setBackgroundColour, 1}}, + {1749, {wxListItem, setColumn, 1}}, + {1750, {wxListItem, setFont, 1}}, + {1751, {wxListItem, setId, 1}}, + {1752, {wxListItem, setImage, 1}}, + {1753, {wxListItem, setMask, 1}}, + {1754, {wxListItem, setState, 1}}, + {1755, {wxListItem, setStateMask, 1}}, + {1756, {wxListItem, setText, 1}}, + {1757, {wxListItem, setTextColour, 1}}, + {1758, {wxListItem, setWidth, 1}}, + {1759, {wxListItemAttr, new_0, 0}}, + {1760, {wxListItemAttr, new_3, 3}}, + {1761, {wxListItemAttr, getBackgroundColour, 0}}, + {1762, {wxListItemAttr, getFont, 0}}, + {1763, {wxListItemAttr, getTextColour, 0}}, + {1764, {wxListItemAttr, hasBackgroundColour, 0}}, + {1765, {wxListItemAttr, hasFont, 0}}, + {1766, {wxListItemAttr, hasTextColour, 0}}, + {1767, {wxListItemAttr, setBackgroundColour, 1}}, + {1768, {wxListItemAttr, setFont, 1}}, + {1769, {wxListItemAttr, setTextColour, 1}}, + {1770, {wxListItemAttr, 'Destroy', undefined}}, + {1771, {wxImageList, new_0, 0}}, + {1772, {wxImageList, new_3, 3}}, + {1773, {wxImageList, add_1, 1}}, + {1774, {wxImageList, add_2_0, 2}}, + {1775, {wxImageList, add_2_1, 2}}, + {1776, {wxImageList, create, 3}}, + {1778, {wxImageList, draw, 5}}, + {1779, {wxImageList, getBitmap, 1}}, + {1780, {wxImageList, getIcon, 1}}, + {1781, {wxImageList, getImageCount, 0}}, + {1782, {wxImageList, getSize, 3}}, + {1783, {wxImageList, remove, 1}}, + {1784, {wxImageList, removeAll, 0}}, + {1785, {wxImageList, replace_2, 2}}, + {1786, {wxImageList, replace_3, 3}}, + {1787, {wxImageList, 'Destroy', undefined}}, + {1788, {wxTextAttr, new_0, 0}}, + {1789, {wxTextAttr, new_2, 2}}, + {1790, {wxTextAttr, getAlignment, 0}}, + {1791, {wxTextAttr, getBackgroundColour, 0}}, + {1792, {wxTextAttr, getFont, 0}}, + {1793, {wxTextAttr, getLeftIndent, 0}}, + {1794, {wxTextAttr, getLeftSubIndent, 0}}, + {1795, {wxTextAttr, getRightIndent, 0}}, + {1796, {wxTextAttr, getTabs, 0}}, + {1797, {wxTextAttr, getTextColour, 0}}, + {1798, {wxTextAttr, hasBackgroundColour, 0}}, + {1799, {wxTextAttr, hasFont, 0}}, + {1800, {wxTextAttr, hasTextColour, 0}}, + {1801, {wxTextAttr, getFlags, 0}}, + {1802, {wxTextAttr, isDefault, 0}}, + {1803, {wxTextAttr, setAlignment, 1}}, + {1804, {wxTextAttr, setBackgroundColour, 1}}, + {1805, {wxTextAttr, setFlags, 1}}, + {1806, {wxTextAttr, setFont, 2}}, + {1807, {wxTextAttr, setLeftIndent, 2}}, + {1808, {wxTextAttr, setRightIndent, 1}}, + {1809, {wxTextAttr, setTabs, 1}}, + {1810, {wxTextAttr, setTextColour, 1}}, + {1811, {wxTextAttr, 'Destroy', undefined}}, + {1813, {wxTextCtrl, new_3, 3}}, + {1814, {wxTextCtrl, new_0, 0}}, + {1816, {wxTextCtrl, destruct, 0}}, + {1817, {wxTextCtrl, appendText, 1}}, + {1818, {wxTextCtrl, canCopy, 0}}, + {1819, {wxTextCtrl, canCut, 0}}, + {1820, {wxTextCtrl, canPaste, 0}}, + {1821, {wxTextCtrl, canRedo, 0}}, + {1822, {wxTextCtrl, canUndo, 0}}, + {1823, {wxTextCtrl, clear, 0}}, + {1824, {wxTextCtrl, copy, 0}}, + {1825, {wxTextCtrl, create, 3}}, + {1826, {wxTextCtrl, cut, 0}}, + {1827, {wxTextCtrl, discardEdits, 0}}, + {1828, {wxTextCtrl, emulateKeyPress, 1}}, + {1829, {wxTextCtrl, getDefaultStyle, 0}}, + {1830, {wxTextCtrl, getInsertionPoint, 0}}, + {1831, {wxTextCtrl, getLastPosition, 0}}, + {1832, {wxTextCtrl, getLineLength, 1}}, + {1833, {wxTextCtrl, getLineText, 1}}, + {1834, {wxTextCtrl, getNumberOfLines, 0}}, + {1835, {wxTextCtrl, getRange, 2}}, + {1836, {wxTextCtrl, getSelection, 2}}, + {1837, {wxTextCtrl, getStringSelection, 0}}, + {1838, {wxTextCtrl, getStyle, 2}}, + {1839, {wxTextCtrl, getValue, 0}}, + {1840, {wxTextCtrl, isEditable, 0}}, + {1841, {wxTextCtrl, isModified, 0}}, + {1842, {wxTextCtrl, isMultiLine, 0}}, + {1843, {wxTextCtrl, isSingleLine, 0}}, + {1844, {wxTextCtrl, loadFile, 2}}, + {1845, {wxTextCtrl, markDirty, 0}}, + {1846, {wxTextCtrl, paste, 0}}, + {1847, {wxTextCtrl, positionToXY, 3}}, + {1848, {wxTextCtrl, redo, 0}}, + {1849, {wxTextCtrl, remove, 2}}, + {1850, {wxTextCtrl, replace, 3}}, + {1851, {wxTextCtrl, saveFile, 1}}, + {1852, {wxTextCtrl, setDefaultStyle, 1}}, + {1853, {wxTextCtrl, setEditable, 1}}, + {1854, {wxTextCtrl, setInsertionPoint, 1}}, + {1855, {wxTextCtrl, setInsertionPointEnd, 0}}, + {1857, {wxTextCtrl, setMaxLength, 1}}, + {1858, {wxTextCtrl, setSelection, 2}}, + {1859, {wxTextCtrl, setStyle, 3}}, + {1860, {wxTextCtrl, setValue, 1}}, + {1861, {wxTextCtrl, showPosition, 1}}, + {1862, {wxTextCtrl, undo, 0}}, + {1863, {wxTextCtrl, writeText, 1}}, + {1864, {wxTextCtrl, xYToPosition, 2}}, + {1867, {wxNotebook, new_0, 0}}, + {1868, {wxNotebook, new_3, 3}}, + {1869, {wxNotebook, destruct, 0}}, + {1870, {wxNotebook, addPage, 3}}, + {1871, {wxNotebook, advanceSelection, 1}}, + {1872, {wxNotebook, assignImageList, 1}}, + {1873, {wxNotebook, create, 3}}, + {1874, {wxNotebook, deleteAllPages, 0}}, + {1875, {wxNotebook, deletePage, 1}}, + {1876, {wxNotebook, removePage, 1}}, + {1877, {wxNotebook, getCurrentPage, 0}}, + {1878, {wxNotebook, getImageList, 0}}, + {1880, {wxNotebook, getPage, 1}}, + {1881, {wxNotebook, getPageCount, 0}}, + {1882, {wxNotebook, getPageImage, 1}}, + {1883, {wxNotebook, getPageText, 1}}, + {1884, {wxNotebook, getRowCount, 0}}, + {1885, {wxNotebook, getSelection, 0}}, + {1886, {wxNotebook, getThemeBackgroundColour, 0}}, + {1888, {wxNotebook, hitTest, 2}}, + {1890, {wxNotebook, insertPage, 4}}, + {1891, {wxNotebook, setImageList, 1}}, + {1892, {wxNotebook, setPadding, 1}}, + {1893, {wxNotebook, setPageSize, 1}}, + {1894, {wxNotebook, setPageImage, 2}}, + {1895, {wxNotebook, setPageText, 2}}, + {1896, {wxNotebook, setSelection, 1}}, + {1897, {wxNotebook, changeSelection, 1}}, + {1898, {wxChoicebook, new_0, 0}}, + {1899, {wxChoicebook, new_3, 3}}, + {1900, {wxChoicebook, addPage, 3}}, + {1901, {wxChoicebook, advanceSelection, 1}}, + {1902, {wxChoicebook, assignImageList, 1}}, + {1903, {wxChoicebook, create, 3}}, + {1904, {wxChoicebook, deleteAllPages, 0}}, + {1905, {wxChoicebook, deletePage, 1}}, + {1906, {wxChoicebook, removePage, 1}}, + {1907, {wxChoicebook, getCurrentPage, 0}}, + {1908, {wxChoicebook, getImageList, 0}}, + {1910, {wxChoicebook, getPage, 1}}, + {1911, {wxChoicebook, getPageCount, 0}}, + {1912, {wxChoicebook, getPageImage, 1}}, + {1913, {wxChoicebook, getPageText, 1}}, + {1914, {wxChoicebook, getSelection, 0}}, + {1915, {wxChoicebook, hitTest, 2}}, + {1916, {wxChoicebook, insertPage, 4}}, + {1917, {wxChoicebook, setImageList, 1}}, + {1918, {wxChoicebook, setPageSize, 1}}, + {1919, {wxChoicebook, setPageImage, 2}}, + {1920, {wxChoicebook, setPageText, 2}}, + {1921, {wxChoicebook, setSelection, 1}}, + {1922, {wxChoicebook, changeSelection, 1}}, + {1923, {wxChoicebook, 'Destroy', undefined}}, + {1924, {wxToolbook, new_0, 0}}, + {1925, {wxToolbook, new_3, 3}}, + {1926, {wxToolbook, addPage, 3}}, + {1927, {wxToolbook, advanceSelection, 1}}, + {1928, {wxToolbook, assignImageList, 1}}, + {1929, {wxToolbook, create, 3}}, + {1930, {wxToolbook, deleteAllPages, 0}}, + {1931, {wxToolbook, deletePage, 1}}, + {1932, {wxToolbook, removePage, 1}}, + {1933, {wxToolbook, getCurrentPage, 0}}, + {1934, {wxToolbook, getImageList, 0}}, + {1936, {wxToolbook, getPage, 1}}, + {1937, {wxToolbook, getPageCount, 0}}, + {1938, {wxToolbook, getPageImage, 1}}, + {1939, {wxToolbook, getPageText, 1}}, + {1940, {wxToolbook, getSelection, 0}}, + {1942, {wxToolbook, hitTest, 2}}, + {1943, {wxToolbook, insertPage, 4}}, + {1944, {wxToolbook, setImageList, 1}}, + {1945, {wxToolbook, setPageSize, 1}}, + {1946, {wxToolbook, setPageImage, 2}}, + {1947, {wxToolbook, setPageText, 2}}, + {1948, {wxToolbook, setSelection, 1}}, + {1949, {wxToolbook, changeSelection, 1}}, + {1950, {wxToolbook, 'Destroy', undefined}}, + {1951, {wxListbook, new_0, 0}}, + {1952, {wxListbook, new_3, 3}}, + {1953, {wxListbook, addPage, 3}}, + {1954, {wxListbook, advanceSelection, 1}}, + {1955, {wxListbook, assignImageList, 1}}, + {1956, {wxListbook, create, 3}}, + {1957, {wxListbook, deleteAllPages, 0}}, + {1958, {wxListbook, deletePage, 1}}, + {1959, {wxListbook, removePage, 1}}, + {1960, {wxListbook, getCurrentPage, 0}}, + {1961, {wxListbook, getImageList, 0}}, + {1963, {wxListbook, getPage, 1}}, + {1964, {wxListbook, getPageCount, 0}}, + {1965, {wxListbook, getPageImage, 1}}, + {1966, {wxListbook, getPageText, 1}}, + {1967, {wxListbook, getSelection, 0}}, + {1969, {wxListbook, hitTest, 2}}, + {1970, {wxListbook, insertPage, 4}}, + {1971, {wxListbook, setImageList, 1}}, + {1972, {wxListbook, setPageSize, 1}}, + {1973, {wxListbook, setPageImage, 2}}, + {1974, {wxListbook, setPageText, 2}}, + {1975, {wxListbook, setSelection, 1}}, + {1976, {wxListbook, changeSelection, 1}}, + {1977, {wxListbook, 'Destroy', undefined}}, + {1978, {wxTreebook, new_0, 0}}, + {1979, {wxTreebook, new_3, 3}}, + {1980, {wxTreebook, addPage, 3}}, + {1981, {wxTreebook, advanceSelection, 1}}, + {1982, {wxTreebook, assignImageList, 1}}, + {1983, {wxTreebook, create, 3}}, + {1984, {wxTreebook, deleteAllPages, 0}}, + {1985, {wxTreebook, deletePage, 1}}, + {1986, {wxTreebook, removePage, 1}}, + {1987, {wxTreebook, getCurrentPage, 0}}, + {1988, {wxTreebook, getImageList, 0}}, + {1990, {wxTreebook, getPage, 1}}, + {1991, {wxTreebook, getPageCount, 0}}, + {1992, {wxTreebook, getPageImage, 1}}, + {1993, {wxTreebook, getPageText, 1}}, + {1994, {wxTreebook, getSelection, 0}}, + {1995, {wxTreebook, expandNode, 2}}, + {1996, {wxTreebook, isNodeExpanded, 1}}, + {1998, {wxTreebook, hitTest, 2}}, + {1999, {wxTreebook, insertPage, 4}}, + {2000, {wxTreebook, insertSubPage, 4}}, + {2001, {wxTreebook, setImageList, 1}}, + {2002, {wxTreebook, setPageSize, 1}}, + {2003, {wxTreebook, setPageImage, 2}}, + {2004, {wxTreebook, setPageText, 2}}, + {2005, {wxTreebook, setSelection, 1}}, + {2006, {wxTreebook, changeSelection, 1}}, + {2007, {wxTreebook, 'Destroy', undefined}}, + {2010, {wxTreeCtrl, new_2, 2}}, + {2011, {wxTreeCtrl, new_0, 0}}, + {2013, {wxTreeCtrl, destruct, 0}}, + {2014, {wxTreeCtrl, addRoot, 2}}, + {2015, {wxTreeCtrl, appendItem, 3}}, + {2016, {wxTreeCtrl, assignImageList, 1}}, + {2017, {wxTreeCtrl, assignStateImageList, 1}}, + {2018, {wxTreeCtrl, collapse, 1}}, + {2019, {wxTreeCtrl, collapseAndReset, 1}}, + {2020, {wxTreeCtrl, create, 2}}, + {2021, {wxTreeCtrl, delete, 1}}, + {2022, {wxTreeCtrl, deleteAllItems, 0}}, + {2023, {wxTreeCtrl, deleteChildren, 1}}, + {2024, {wxTreeCtrl, editLabel, 1}}, + {2025, {wxTreeCtrl, ensureVisible, 1}}, + {2026, {wxTreeCtrl, expand, 1}}, + {2027, {wxTreeCtrl, getBoundingRect, 3}}, + {2029, {wxTreeCtrl, getChildrenCount, 2}}, + {2030, {wxTreeCtrl, getCount, 0}}, + {2031, {wxTreeCtrl, getEditControl, 0}}, + {2032, {wxTreeCtrl, getFirstChild, 2}}, + {2033, {wxTreeCtrl, getNextChild, 2}}, + {2034, {wxTreeCtrl, getFirstVisibleItem, 0}}, + {2035, {wxTreeCtrl, getImageList, 0}}, + {2036, {wxTreeCtrl, getIndent, 0}}, + {2037, {wxTreeCtrl, getItemBackgroundColour, 1}}, + {2038, {wxTreeCtrl, getItemData, 1}}, + {2039, {wxTreeCtrl, getItemFont, 1}}, + {2040, {wxTreeCtrl, getItemImage_1, 1}}, + {2041, {wxTreeCtrl, getItemImage_2, 2}}, + {2042, {wxTreeCtrl, getItemText, 1}}, + {2043, {wxTreeCtrl, getItemTextColour, 1}}, + {2044, {wxTreeCtrl, getLastChild, 1}}, + {2045, {wxTreeCtrl, getNextSibling, 1}}, + {2046, {wxTreeCtrl, getNextVisible, 1}}, + {2047, {wxTreeCtrl, getItemParent, 1}}, + {2048, {wxTreeCtrl, getPrevSibling, 1}}, + {2049, {wxTreeCtrl, getPrevVisible, 1}}, + {2050, {wxTreeCtrl, getRootItem, 0}}, + {2051, {wxTreeCtrl, getSelection, 0}}, + {2052, {wxTreeCtrl, getSelections, 1}}, + {2053, {wxTreeCtrl, getStateImageList, 0}}, + {2054, {wxTreeCtrl, hitTest, 2}}, + {2056, {wxTreeCtrl, insertItem, 4}}, + {2057, {wxTreeCtrl, isBold, 1}}, + {2058, {wxTreeCtrl, isExpanded, 1}}, + {2059, {wxTreeCtrl, isSelected, 1}}, + {2060, {wxTreeCtrl, isVisible, 1}}, + {2061, {wxTreeCtrl, itemHasChildren, 1}}, + {2062, {wxTreeCtrl, isTreeItemIdOk, 1}}, + {2063, {wxTreeCtrl, prependItem, 3}}, + {2064, {wxTreeCtrl, scrollTo, 1}}, + {2065, {wxTreeCtrl, selectItem_1, 1}}, + {2066, {wxTreeCtrl, selectItem_2, 2}}, + {2067, {wxTreeCtrl, setIndent, 1}}, + {2068, {wxTreeCtrl, setImageList, 1}}, + {2069, {wxTreeCtrl, setItemBackgroundColour, 2}}, + {2070, {wxTreeCtrl, setItemBold, 2}}, + {2071, {wxTreeCtrl, setItemData, 2}}, + {2072, {wxTreeCtrl, setItemDropHighlight, 2}}, + {2073, {wxTreeCtrl, setItemFont, 2}}, + {2074, {wxTreeCtrl, setItemHasChildren, 2}}, + {2075, {wxTreeCtrl, setItemImage_2, 2}}, + {2076, {wxTreeCtrl, setItemImage_3, 3}}, + {2077, {wxTreeCtrl, setItemText, 2}}, + {2078, {wxTreeCtrl, setItemTextColour, 2}}, + {2079, {wxTreeCtrl, setStateImageList, 1}}, + {2080, {wxTreeCtrl, setWindowStyle, 1}}, + {2081, {wxTreeCtrl, sortChildren, 1}}, + {2082, {wxTreeCtrl, toggle, 1}}, + {2083, {wxTreeCtrl, toggleItemSelection, 1}}, + {2084, {wxTreeCtrl, unselect, 0}}, + {2085, {wxTreeCtrl, unselectAll, 0}}, + {2086, {wxTreeCtrl, unselectItem, 1}}, + {2087, {wxScrollBar, new_0, 0}}, + {2088, {wxScrollBar, new_3, 3}}, + {2089, {wxScrollBar, destruct, 0}}, + {2090, {wxScrollBar, create, 3}}, + {2091, {wxScrollBar, getRange, 0}}, + {2092, {wxScrollBar, getPageSize, 0}}, + {2093, {wxScrollBar, getThumbPosition, 0}}, + {2094, {wxScrollBar, getThumbSize, 0}}, + {2095, {wxScrollBar, setThumbPosition, 1}}, + {2096, {wxScrollBar, setScrollbar, 5}}, + {2098, {wxSpinButton, new_2, 2}}, + {2099, {wxSpinButton, new_0, 0}}, + {2100, {wxSpinButton, create, 2}}, + {2101, {wxSpinButton, getMax, 0}}, + {2102, {wxSpinButton, getMin, 0}}, + {2103, {wxSpinButton, getValue, 0}}, + {2104, {wxSpinButton, setRange, 2}}, + {2105, {wxSpinButton, setValue, 1}}, + {2106, {wxSpinButton, 'Destroy', undefined}}, + {2107, {wxSpinCtrl, new_0, 0}}, + {2108, {wxSpinCtrl, new_2, 2}}, + {2110, {wxSpinCtrl, create, 2}}, + {2113, {wxSpinCtrl, setValue_1_1, 1}}, + {2114, {wxSpinCtrl, setValue_1_0, 1}}, + {2116, {wxSpinCtrl, getValue, 0}}, + {2118, {wxSpinCtrl, setRange, 2}}, + {2119, {wxSpinCtrl, setSelection, 2}}, + {2121, {wxSpinCtrl, getMin, 0}}, + {2123, {wxSpinCtrl, getMax, 0}}, + {2124, {wxSpinCtrl, 'Destroy', undefined}}, + {2125, {wxStaticText, new_0, 0}}, + {2126, {wxStaticText, new_4, 4}}, + {2127, {wxStaticText, create, 4}}, + {2128, {wxStaticText, getLabel, 0}}, + {2129, {wxStaticText, setLabel, 1}}, + {2130, {wxStaticText, wrap, 1}}, + {2131, {wxStaticText, 'Destroy', undefined}}, + {2132, {wxStaticBitmap, new_0, 0}}, + {2133, {wxStaticBitmap, new_4, 4}}, + {2134, {wxStaticBitmap, create, 4}}, + {2135, {wxStaticBitmap, getBitmap, 0}}, + {2136, {wxStaticBitmap, setBitmap, 1}}, + {2137, {wxStaticBitmap, 'Destroy', undefined}}, + {2138, {wxRadioBox, new, 7}}, + {2140, {wxRadioBox, destruct, 0}}, + {2141, {wxRadioBox, create, 7}}, + {2142, {wxRadioBox, enable_2, 2}}, + {2143, {wxRadioBox, enable_1, 1}}, + {2144, {wxRadioBox, getSelection, 0}}, + {2145, {wxRadioBox, getString, 1}}, + {2146, {wxRadioBox, setSelection, 1}}, + {2147, {wxRadioBox, show_2, 2}}, + {2148, {wxRadioBox, show_1, 1}}, + {2149, {wxRadioBox, getColumnCount, 0}}, + {2150, {wxRadioBox, getItemHelpText, 1}}, + {2151, {wxRadioBox, getItemToolTip, 1}}, + {2153, {wxRadioBox, getItemFromPoint, 1}}, + {2154, {wxRadioBox, getRowCount, 0}}, + {2155, {wxRadioBox, isItemEnabled, 1}}, + {2156, {wxRadioBox, isItemShown, 1}}, + {2157, {wxRadioBox, setItemHelpText, 2}}, + {2158, {wxRadioBox, setItemToolTip, 2}}, + {2159, {wxRadioButton, new_0, 0}}, + {2160, {wxRadioButton, new_4, 4}}, + {2161, {wxRadioButton, create, 4}}, + {2162, {wxRadioButton, getValue, 0}}, + {2163, {wxRadioButton, setValue, 1}}, + {2164, {wxRadioButton, 'Destroy', undefined}}, + {2166, {wxSlider, new_6, 6}}, + {2167, {wxSlider, new_0, 0}}, + {2168, {wxSlider, create, 6}}, + {2169, {wxSlider, getLineSize, 0}}, + {2170, {wxSlider, getMax, 0}}, + {2171, {wxSlider, getMin, 0}}, + {2172, {wxSlider, getPageSize, 0}}, + {2173, {wxSlider, getThumbLength, 0}}, + {2174, {wxSlider, getValue, 0}}, + {2175, {wxSlider, setLineSize, 1}}, + {2176, {wxSlider, setPageSize, 1}}, + {2177, {wxSlider, setRange, 2}}, + {2178, {wxSlider, setThumbLength, 1}}, + {2179, {wxSlider, setValue, 1}}, + {2180, {wxSlider, 'Destroy', undefined}}, + {2182, {wxDialog, new_4, 4}}, + {2183, {wxDialog, new_0, 0}}, + {2185, {wxDialog, destruct, 0}}, + {2186, {wxDialog, create, 4}}, + {2187, {wxDialog, createButtonSizer, 1}}, + {2188, {wxDialog, createStdDialogButtonSizer, 1}}, + {2189, {wxDialog, endModal, 1}}, + {2190, {wxDialog, getAffirmativeId, 0}}, + {2191, {wxDialog, getReturnCode, 0}}, + {2192, {wxDialog, isModal, 0}}, + {2193, {wxDialog, setAffirmativeId, 1}}, + {2194, {wxDialog, setReturnCode, 1}}, + {2195, {wxDialog, show, 1}}, + {2196, {wxDialog, showModal, 0}}, + {2197, {wxColourDialog, new_0, 0}}, + {2198, {wxColourDialog, new_2, 2}}, + {2199, {wxColourDialog, destruct, 0}}, + {2200, {wxColourDialog, create, 2}}, + {2201, {wxColourDialog, getColourData, 0}}, + {2202, {wxColourData, new_0, 0}}, + {2203, {wxColourData, new_1, 1}}, + {2204, {wxColourData, destruct, 0}}, + {2205, {wxColourData, getChooseFull, 0}}, + {2206, {wxColourData, getColour, 0}}, + {2208, {wxColourData, getCustomColour, 1}}, + {2209, {wxColourData, setChooseFull, 1}}, + {2210, {wxColourData, setColour, 1}}, + {2211, {wxColourData, setCustomColour, 2}}, + {2212, {wxPalette, new_0, 0}}, + {2213, {wxPalette, new_4, 4}}, + {2215, {wxPalette, destruct, 0}}, + {2216, {wxPalette, create, 4}}, + {2217, {wxPalette, getColoursCount, 0}}, + {2218, {wxPalette, getPixel, 3}}, + {2219, {wxPalette, getRGB, 4}}, + {2220, {wxPalette, isOk, 0}}, + {2224, {wxDirDialog, new, 2}}, + {2225, {wxDirDialog, destruct, 0}}, + {2226, {wxDirDialog, getPath, 0}}, + {2227, {wxDirDialog, getMessage, 0}}, + {2228, {wxDirDialog, setMessage, 1}}, + {2229, {wxDirDialog, setPath, 1}}, + {2233, {wxFileDialog, new, 2}}, + {2234, {wxFileDialog, destruct, 0}}, + {2235, {wxFileDialog, getDirectory, 0}}, + {2236, {wxFileDialog, getFilename, 0}}, + {2237, {wxFileDialog, getFilenames, 1}}, + {2238, {wxFileDialog, getFilterIndex, 0}}, + {2239, {wxFileDialog, getMessage, 0}}, + {2240, {wxFileDialog, getPath, 0}}, + {2241, {wxFileDialog, getPaths, 1}}, + {2242, {wxFileDialog, getWildcard, 0}}, + {2243, {wxFileDialog, setDirectory, 1}}, + {2244, {wxFileDialog, setFilename, 1}}, + {2245, {wxFileDialog, setFilterIndex, 1}}, + {2246, {wxFileDialog, setMessage, 1}}, + {2247, {wxFileDialog, setPath, 1}}, + {2248, {wxFileDialog, setWildcard, 1}}, + {2249, {wxPickerBase, setInternalMargin, 1}}, + {2250, {wxPickerBase, getInternalMargin, 0}}, + {2251, {wxPickerBase, setTextCtrlProportion, 1}}, + {2252, {wxPickerBase, setPickerCtrlProportion, 1}}, + {2253, {wxPickerBase, getTextCtrlProportion, 0}}, + {2254, {wxPickerBase, getPickerCtrlProportion, 0}}, + {2255, {wxPickerBase, hasTextCtrl, 0}}, + {2256, {wxPickerBase, getTextCtrl, 0}}, + {2257, {wxPickerBase, isTextCtrlGrowable, 0}}, + {2258, {wxPickerBase, setPickerCtrlGrowable, 1}}, + {2259, {wxPickerBase, setTextCtrlGrowable, 1}}, + {2260, {wxPickerBase, isPickerCtrlGrowable, 0}}, + {2261, {wxFilePickerCtrl, new_0, 0}}, + {2262, {wxFilePickerCtrl, new_3, 3}}, + {2263, {wxFilePickerCtrl, create, 3}}, + {2264, {wxFilePickerCtrl, getPath, 0}}, + {2265, {wxFilePickerCtrl, setPath, 1}}, + {2266, {wxFilePickerCtrl, 'Destroy', undefined}}, + {2267, {wxDirPickerCtrl, new_0, 0}}, + {2268, {wxDirPickerCtrl, new_3, 3}}, + {2269, {wxDirPickerCtrl, create, 3}}, + {2270, {wxDirPickerCtrl, getPath, 0}}, + {2271, {wxDirPickerCtrl, setPath, 1}}, + {2272, {wxDirPickerCtrl, 'Destroy', undefined}}, + {2273, {wxColourPickerCtrl, new_0, 0}}, + {2274, {wxColourPickerCtrl, new_3, 3}}, + {2275, {wxColourPickerCtrl, create, 3}}, + {2276, {wxColourPickerCtrl, getColour, 0}}, + {2277, {wxColourPickerCtrl, setColour_1_1, 1}}, + {2278, {wxColourPickerCtrl, setColour_1_0, 1}}, + {2279, {wxColourPickerCtrl, 'Destroy', undefined}}, + {2280, {wxDatePickerCtrl, new_0, 0}}, + {2281, {wxDatePickerCtrl, new_3, 3}}, + {2282, {wxDatePickerCtrl, getRange, 2}}, + {2283, {wxDatePickerCtrl, getValue, 0}}, + {2284, {wxDatePickerCtrl, setRange, 2}}, + {2285, {wxDatePickerCtrl, setValue, 1}}, + {2286, {wxDatePickerCtrl, 'Destroy', undefined}}, + {2287, {wxFontPickerCtrl, new_0, 0}}, + {2288, {wxFontPickerCtrl, new_3, 3}}, + {2289, {wxFontPickerCtrl, create, 3}}, + {2290, {wxFontPickerCtrl, getSelectedFont, 0}}, + {2291, {wxFontPickerCtrl, setSelectedFont, 1}}, + {2292, {wxFontPickerCtrl, getMaxPointSize, 0}}, + {2293, {wxFontPickerCtrl, setMaxPointSize, 1}}, + {2294, {wxFontPickerCtrl, 'Destroy', undefined}}, + {2297, {wxFindReplaceDialog, new_0, 0}}, + {2298, {wxFindReplaceDialog, new_4, 4}}, + {2299, {wxFindReplaceDialog, destruct, 0}}, + {2300, {wxFindReplaceDialog, create, 4}}, + {2301, {wxFindReplaceDialog, getData, 0}}, + {2302, {wxFindReplaceData, new_0, 0}}, + {2303, {wxFindReplaceData, new_1, 1}}, + {2304, {wxFindReplaceData, getFindString, 0}}, + {2305, {wxFindReplaceData, getReplaceString, 0}}, + {2306, {wxFindReplaceData, getFlags, 0}}, + {2307, {wxFindReplaceData, setFlags, 1}}, + {2308, {wxFindReplaceData, setFindString, 1}}, + {2309, {wxFindReplaceData, setReplaceString, 1}}, + {2310, {wxFindReplaceData, 'Destroy', undefined}}, + {2311, {wxMultiChoiceDialog, new_0, 0}}, + {2313, {wxMultiChoiceDialog, new_5, 5}}, + {2314, {wxMultiChoiceDialog, getSelections, 0}}, + {2315, {wxMultiChoiceDialog, setSelections, 1}}, + {2316, {wxMultiChoiceDialog, 'Destroy', undefined}}, + {2317, {wxSingleChoiceDialog, new_0, 0}}, + {2319, {wxSingleChoiceDialog, new_5, 5}}, + {2320, {wxSingleChoiceDialog, getSelection, 0}}, + {2321, {wxSingleChoiceDialog, getStringSelection, 0}}, + {2322, {wxSingleChoiceDialog, setSelection, 1}}, + {2323, {wxSingleChoiceDialog, 'Destroy', undefined}}, + {2324, {wxTextEntryDialog, new, 3}}, + {2325, {wxTextEntryDialog, getValue, 0}}, + {2326, {wxTextEntryDialog, setValue, 1}}, + {2327, {wxTextEntryDialog, 'Destroy', undefined}}, + {2328, {wxPasswordEntryDialog, new, 3}}, + {2329, {wxPasswordEntryDialog, 'Destroy', undefined}}, + {2330, {wxFontData, new_0, 0}}, + {2331, {wxFontData, new_1, 1}}, + {2332, {wxFontData, destruct, 0}}, + {2333, {wxFontData, enableEffects, 1}}, + {2334, {wxFontData, getAllowSymbols, 0}}, + {2335, {wxFontData, getColour, 0}}, + {2336, {wxFontData, getChosenFont, 0}}, + {2337, {wxFontData, getEnableEffects, 0}}, + {2338, {wxFontData, getInitialFont, 0}}, + {2339, {wxFontData, getShowHelp, 0}}, + {2340, {wxFontData, setAllowSymbols, 1}}, + {2341, {wxFontData, setChosenFont, 1}}, + {2342, {wxFontData, setColour, 1}}, + {2343, {wxFontData, setInitialFont, 1}}, + {2344, {wxFontData, setRange, 2}}, + {2345, {wxFontData, setShowHelp, 1}}, + {2349, {wxFontDialog, new_0, 0}}, + {2351, {wxFontDialog, new_2, 2}}, + {2353, {wxFontDialog, create, 2}}, + {2354, {wxFontDialog, getFontData, 0}}, + {2356, {wxFontDialog, 'Destroy', undefined}}, + {2357, {wxProgressDialog, new, 3}}, + {2358, {wxProgressDialog, destruct, 0}}, + {2359, {wxProgressDialog, resume, 0}}, + {2360, {wxProgressDialog, update_2, 2}}, + {2361, {wxProgressDialog, update_0, 0}}, + {2362, {wxMessageDialog, new, 3}}, + {2363, {wxMessageDialog, destruct, 0}}, + {2364, {wxPageSetupDialog, new, 2}}, + {2365, {wxPageSetupDialog, destruct, 0}}, + {2366, {wxPageSetupDialog, getPageSetupData, 0}}, + {2367, {wxPageSetupDialog, showModal, 0}}, + {2368, {wxPageSetupDialogData, new_0, 0}}, + {2369, {wxPageSetupDialogData, new_1_0, 1}}, + {2370, {wxPageSetupDialogData, new_1_1, 1}}, + {2371, {wxPageSetupDialogData, destruct, 0}}, + {2372, {wxPageSetupDialogData, enableHelp, 1}}, + {2373, {wxPageSetupDialogData, enableMargins, 1}}, + {2374, {wxPageSetupDialogData, enableOrientation, 1}}, + {2375, {wxPageSetupDialogData, enablePaper, 1}}, + {2376, {wxPageSetupDialogData, enablePrinter, 1}}, + {2377, {wxPageSetupDialogData, getDefaultMinMargins, 0}}, + {2378, {wxPageSetupDialogData, getEnableMargins, 0}}, + {2379, {wxPageSetupDialogData, getEnableOrientation, 0}}, + {2380, {wxPageSetupDialogData, getEnablePaper, 0}}, + {2381, {wxPageSetupDialogData, getEnablePrinter, 0}}, + {2382, {wxPageSetupDialogData, getEnableHelp, 0}}, + {2383, {wxPageSetupDialogData, getDefaultInfo, 0}}, + {2384, {wxPageSetupDialogData, getMarginTopLeft, 0}}, + {2385, {wxPageSetupDialogData, getMarginBottomRight, 0}}, + {2386, {wxPageSetupDialogData, getMinMarginTopLeft, 0}}, + {2387, {wxPageSetupDialogData, getMinMarginBottomRight, 0}}, + {2388, {wxPageSetupDialogData, getPaperId, 0}}, + {2389, {wxPageSetupDialogData, getPaperSize, 0}}, + {2391, {wxPageSetupDialogData, getPrintData, 0}}, + {2392, {wxPageSetupDialogData, isOk, 0}}, + {2393, {wxPageSetupDialogData, setDefaultInfo, 1}}, + {2394, {wxPageSetupDialogData, setDefaultMinMargins, 1}}, + {2395, {wxPageSetupDialogData, setMarginTopLeft, 1}}, + {2396, {wxPageSetupDialogData, setMarginBottomRight, 1}}, + {2397, {wxPageSetupDialogData, setMinMarginTopLeft, 1}}, + {2398, {wxPageSetupDialogData, setMinMarginBottomRight, 1}}, + {2399, {wxPageSetupDialogData, setPaperId, 1}}, + {2400, {wxPageSetupDialogData, setPaperSize_1_1, 1}}, + {2401, {wxPageSetupDialogData, setPaperSize_1_0, 1}}, + {2402, {wxPageSetupDialogData, setPrintData, 1}}, + {2403, {wxPrintDialog, new_2_0, 2}}, + {2404, {wxPrintDialog, new_2_1, 2}}, + {2405, {wxPrintDialog, destruct, 0}}, + {2406, {wxPrintDialog, getPrintDialogData, 0}}, + {2407, {wxPrintDialog, getPrintDC, 0}}, + {2408, {wxPrintDialogData, new_0, 0}}, + {2409, {wxPrintDialogData, new_1_1, 1}}, + {2410, {wxPrintDialogData, new_1_0, 1}}, + {2411, {wxPrintDialogData, destruct, 0}}, + {2412, {wxPrintDialogData, enableHelp, 1}}, + {2413, {wxPrintDialogData, enablePageNumbers, 1}}, + {2414, {wxPrintDialogData, enablePrintToFile, 1}}, + {2415, {wxPrintDialogData, enableSelection, 1}}, + {2416, {wxPrintDialogData, getAllPages, 0}}, + {2417, {wxPrintDialogData, getCollate, 0}}, + {2418, {wxPrintDialogData, getFromPage, 0}}, + {2419, {wxPrintDialogData, getMaxPage, 0}}, + {2420, {wxPrintDialogData, getMinPage, 0}}, + {2421, {wxPrintDialogData, getNoCopies, 0}}, + {2422, {wxPrintDialogData, getPrintData, 0}}, + {2423, {wxPrintDialogData, getPrintToFile, 0}}, + {2424, {wxPrintDialogData, getSelection, 0}}, + {2425, {wxPrintDialogData, getToPage, 0}}, + {2426, {wxPrintDialogData, isOk, 0}}, + {2427, {wxPrintDialogData, setCollate, 1}}, + {2428, {wxPrintDialogData, setFromPage, 1}}, + {2429, {wxPrintDialogData, setMaxPage, 1}}, + {2430, {wxPrintDialogData, setMinPage, 1}}, + {2431, {wxPrintDialogData, setNoCopies, 1}}, + {2432, {wxPrintDialogData, setPrintData, 1}}, + {2433, {wxPrintDialogData, setPrintToFile, 1}}, + {2434, {wxPrintDialogData, setSelection, 1}}, + {2435, {wxPrintDialogData, setToPage, 1}}, + {2436, {wxPrintData, new_0, 0}}, + {2437, {wxPrintData, new_1, 1}}, + {2438, {wxPrintData, destruct, 0}}, + {2439, {wxPrintData, getCollate, 0}}, + {2440, {wxPrintData, getBin, 0}}, + {2441, {wxPrintData, getColour, 0}}, + {2442, {wxPrintData, getDuplex, 0}}, + {2443, {wxPrintData, getNoCopies, 0}}, + {2444, {wxPrintData, getOrientation, 0}}, + {2445, {wxPrintData, getPaperId, 0}}, + {2446, {wxPrintData, getPrinterName, 0}}, + {2447, {wxPrintData, getQuality, 0}}, + {2448, {wxPrintData, isOk, 0}}, + {2449, {wxPrintData, setBin, 1}}, + {2450, {wxPrintData, setCollate, 1}}, + {2451, {wxPrintData, setColour, 1}}, + {2452, {wxPrintData, setDuplex, 1}}, + {2453, {wxPrintData, setNoCopies, 1}}, + {2454, {wxPrintData, setOrientation, 1}}, + {2455, {wxPrintData, setPaperId, 1}}, + {2456, {wxPrintData, setPrinterName, 1}}, + {2457, {wxPrintData, setQuality, 1}}, + {2460, {wxPrintPreview, new_2, 2}}, + {2461, {wxPrintPreview, new_3, 3}}, + {2463, {wxPrintPreview, destruct, 0}}, + {2464, {wxPrintPreview, getCanvas, 0}}, + {2465, {wxPrintPreview, getCurrentPage, 0}}, + {2466, {wxPrintPreview, getFrame, 0}}, + {2467, {wxPrintPreview, getMaxPage, 0}}, + {2468, {wxPrintPreview, getMinPage, 0}}, + {2469, {wxPrintPreview, getPrintout, 0}}, + {2470, {wxPrintPreview, getPrintoutForPrinting, 0}}, + {2471, {wxPrintPreview, isOk, 0}}, + {2472, {wxPrintPreview, paintPage, 2}}, + {2473, {wxPrintPreview, print, 1}}, + {2474, {wxPrintPreview, renderPage, 1}}, + {2475, {wxPrintPreview, setCanvas, 1}}, + {2476, {wxPrintPreview, setCurrentPage, 1}}, + {2477, {wxPrintPreview, setFrame, 1}}, + {2478, {wxPrintPreview, setPrintout, 1}}, + {2479, {wxPrintPreview, setZoom, 1}}, + {2480, {wxPreviewFrame, new, 3}}, + {2481, {wxPreviewFrame, destruct, 0}}, + {2482, {wxPreviewFrame, createControlBar, 0}}, + {2483, {wxPreviewFrame, createCanvas, 0}}, + {2484, {wxPreviewFrame, initialize, 0}}, + {2485, {wxPreviewFrame, onCloseWindow, 1}}, + {2486, {wxPreviewControlBar, new, 4}}, + {2487, {wxPreviewControlBar, destruct, 0}}, + {2488, {wxPreviewControlBar, createButtons, 0}}, + {2489, {wxPreviewControlBar, getPrintPreview, 0}}, + {2490, {wxPreviewControlBar, getZoomControl, 0}}, + {2491, {wxPreviewControlBar, setZoomControl, 1}}, + {2493, {wxPrinter, new, 1}}, + {2494, {wxPrinter, createAbortWindow, 2}}, + {2495, {wxPrinter, getAbort, 0}}, + {2496, {wxPrinter, getLastError, 0}}, + {2497, {wxPrinter, getPrintDialogData, 0}}, + {2498, {wxPrinter, print, 3}}, + {2499, {wxPrinter, printDialog, 1}}, + {2500, {wxPrinter, reportError, 3}}, + {2501, {wxPrinter, setup, 1}}, + {2502, {wxPrinter, 'Destroy', undefined}}, + {2503, {wxXmlResource, new_1, 1}}, + {2504, {wxXmlResource, new_2, 2}}, + {2505, {wxXmlResource, destruct, 0}}, + {2506, {wxXmlResource, attachUnknownControl, 3}}, + {2507, {wxXmlResource, clearHandlers, 0}}, + {2508, {wxXmlResource, compareVersion, 4}}, + {2509, {wxXmlResource, get, 0}}, + {2510, {wxXmlResource, getFlags, 0}}, + {2511, {wxXmlResource, getVersion, 0}}, + {2512, {wxXmlResource, getXRCID, 2}}, + {2513, {wxXmlResource, initAllHandlers, 0}}, + {2514, {wxXmlResource, load, 1}}, + {2515, {wxXmlResource, loadBitmap, 1}}, + {2516, {wxXmlResource, loadDialog_2, 2}}, + {2517, {wxXmlResource, loadDialog_3, 3}}, + {2518, {wxXmlResource, loadFrame_2, 2}}, + {2519, {wxXmlResource, loadFrame_3, 3}}, + {2520, {wxXmlResource, loadIcon, 1}}, + {2521, {wxXmlResource, loadMenu, 1}}, + {2522, {wxXmlResource, loadMenuBar_2, 2}}, + {2523, {wxXmlResource, loadMenuBar_1, 1}}, + {2524, {wxXmlResource, loadPanel_2, 2}}, + {2525, {wxXmlResource, loadPanel_3, 3}}, + {2526, {wxXmlResource, loadToolBar, 2}}, + {2527, {wxXmlResource, set, 1}}, + {2528, {wxXmlResource, setFlags, 1}}, + {2529, {wxXmlResource, unload, 1}}, + {2530, {wxXmlResource, xrcctrl, 3}}, + {2531, {wxHtmlEasyPrinting, new, 1}}, + {2532, {wxHtmlEasyPrinting, destruct, 0}}, + {2533, {wxHtmlEasyPrinting, getPrintData, 0}}, + {2534, {wxHtmlEasyPrinting, getPageSetupData, 0}}, + {2535, {wxHtmlEasyPrinting, previewFile, 1}}, + {2536, {wxHtmlEasyPrinting, previewText, 2}}, + {2537, {wxHtmlEasyPrinting, printFile, 1}}, + {2538, {wxHtmlEasyPrinting, printText, 2}}, + {2539, {wxHtmlEasyPrinting, pageSetup, 0}}, + {2540, {wxHtmlEasyPrinting, setFonts, 3}}, + {2541, {wxHtmlEasyPrinting, setHeader, 2}}, + {2542, {wxHtmlEasyPrinting, setFooter, 2}}, + {2544, {wxGLCanvas, new_2, 2}}, + {2545, {wxGLCanvas, new_3_1, 3}}, + {2546, {wxGLCanvas, new_3_0, 3}}, + {2547, {wxGLCanvas, getContext, 0}}, + {2549, {wxGLCanvas, setCurrent, 0}}, + {2550, {wxGLCanvas, swapBuffers, 0}}, + {2551, {wxGLCanvas, 'Destroy', undefined}}, + {2552, {wxAuiManager, new, 1}}, + {2553, {wxAuiManager, destruct, 0}}, + {2554, {wxAuiManager, addPane_2_1, 2}}, + {2555, {wxAuiManager, addPane_3, 3}}, + {2556, {wxAuiManager, addPane_2_0, 2}}, + {2557, {wxAuiManager, detachPane, 1}}, + {2558, {wxAuiManager, getAllPanes, 0}}, + {2559, {wxAuiManager, getArtProvider, 0}}, + {2560, {wxAuiManager, getDockSizeConstraint, 2}}, + {2561, {wxAuiManager, getFlags, 0}}, + {2562, {wxAuiManager, getManagedWindow, 0}}, + {2563, {wxAuiManager, getManager, 1}}, + {2564, {wxAuiManager, getPane_1_1, 1}}, + {2565, {wxAuiManager, getPane_1_0, 1}}, + {2566, {wxAuiManager, hideHint, 0}}, + {2567, {wxAuiManager, insertPane, 3}}, + {2568, {wxAuiManager, loadPaneInfo, 2}}, + {2569, {wxAuiManager, loadPerspective, 2}}, + {2570, {wxAuiManager, savePaneInfo, 1}}, + {2571, {wxAuiManager, savePerspective, 0}}, + {2572, {wxAuiManager, setArtProvider, 1}}, + {2573, {wxAuiManager, setDockSizeConstraint, 2}}, + {2574, {wxAuiManager, setFlags, 1}}, + {2575, {wxAuiManager, setManagedWindow, 1}}, + {2576, {wxAuiManager, showHint, 1}}, + {2577, {wxAuiManager, unInit, 0}}, + {2578, {wxAuiManager, update, 0}}, + {2579, {wxAuiPaneInfo, new_0, 0}}, + {2580, {wxAuiPaneInfo, new_1, 1}}, + {2581, {wxAuiPaneInfo, destruct, 0}}, + {2582, {wxAuiPaneInfo, bestSize_1, 1}}, + {2583, {wxAuiPaneInfo, bestSize_2, 2}}, + {2584, {wxAuiPaneInfo, bottom, 0}}, + {2585, {wxAuiPaneInfo, bottomDockable, 1}}, + {2586, {wxAuiPaneInfo, caption, 1}}, + {2587, {wxAuiPaneInfo, captionVisible, 1}}, + {2588, {wxAuiPaneInfo, centre, 0}}, + {2589, {wxAuiPaneInfo, centrePane, 0}}, + {2590, {wxAuiPaneInfo, closeButton, 1}}, + {2591, {wxAuiPaneInfo, defaultPane, 0}}, + {2592, {wxAuiPaneInfo, destroyOnClose, 1}}, + {2593, {wxAuiPaneInfo, direction, 1}}, + {2594, {wxAuiPaneInfo, dock, 0}}, + {2595, {wxAuiPaneInfo, dockable, 1}}, + {2596, {wxAuiPaneInfo, fixed, 0}}, + {2597, {wxAuiPaneInfo, float, 0}}, + {2598, {wxAuiPaneInfo, floatable, 1}}, + {2599, {wxAuiPaneInfo, floatingPosition_1, 1}}, + {2600, {wxAuiPaneInfo, floatingPosition_2, 2}}, + {2601, {wxAuiPaneInfo, floatingSize_1, 1}}, + {2602, {wxAuiPaneInfo, floatingSize_2, 2}}, + {2603, {wxAuiPaneInfo, gripper, 1}}, + {2604, {wxAuiPaneInfo, gripperTop, 1}}, + {2605, {wxAuiPaneInfo, hasBorder, 0}}, + {2606, {wxAuiPaneInfo, hasCaption, 0}}, + {2607, {wxAuiPaneInfo, hasCloseButton, 0}}, + {2608, {wxAuiPaneInfo, hasFlag, 1}}, + {2609, {wxAuiPaneInfo, hasGripper, 0}}, + {2610, {wxAuiPaneInfo, hasGripperTop, 0}}, + {2611, {wxAuiPaneInfo, hasMaximizeButton, 0}}, + {2612, {wxAuiPaneInfo, hasMinimizeButton, 0}}, + {2613, {wxAuiPaneInfo, hasPinButton, 0}}, + {2614, {wxAuiPaneInfo, hide, 0}}, + {2615, {wxAuiPaneInfo, isBottomDockable, 0}}, + {2616, {wxAuiPaneInfo, isDocked, 0}}, + {2617, {wxAuiPaneInfo, isFixed, 0}}, + {2618, {wxAuiPaneInfo, isFloatable, 0}}, + {2619, {wxAuiPaneInfo, isFloating, 0}}, + {2620, {wxAuiPaneInfo, isLeftDockable, 0}}, + {2621, {wxAuiPaneInfo, isMovable, 0}}, + {2622, {wxAuiPaneInfo, isOk, 0}}, + {2623, {wxAuiPaneInfo, isResizable, 0}}, + {2624, {wxAuiPaneInfo, isRightDockable, 0}}, + {2625, {wxAuiPaneInfo, isShown, 0}}, + {2626, {wxAuiPaneInfo, isToolbar, 0}}, + {2627, {wxAuiPaneInfo, isTopDockable, 0}}, + {2628, {wxAuiPaneInfo, layer, 1}}, + {2629, {wxAuiPaneInfo, left, 0}}, + {2630, {wxAuiPaneInfo, leftDockable, 1}}, + {2631, {wxAuiPaneInfo, maxSize_1, 1}}, + {2632, {wxAuiPaneInfo, maxSize_2, 2}}, + {2633, {wxAuiPaneInfo, maximizeButton, 1}}, + {2634, {wxAuiPaneInfo, minSize_1, 1}}, + {2635, {wxAuiPaneInfo, minSize_2, 2}}, + {2636, {wxAuiPaneInfo, minimizeButton, 1}}, + {2637, {wxAuiPaneInfo, movable, 1}}, + {2638, {wxAuiPaneInfo, name, 1}}, + {2639, {wxAuiPaneInfo, paneBorder, 1}}, + {2640, {wxAuiPaneInfo, pinButton, 1}}, + {2641, {wxAuiPaneInfo, position, 1}}, + {2642, {wxAuiPaneInfo, resizable, 1}}, + {2643, {wxAuiPaneInfo, right, 0}}, + {2644, {wxAuiPaneInfo, rightDockable, 1}}, + {2645, {wxAuiPaneInfo, row, 1}}, + {2646, {wxAuiPaneInfo, safeSet, 1}}, + {2647, {wxAuiPaneInfo, setFlag, 2}}, + {2648, {wxAuiPaneInfo, show, 1}}, + {2649, {wxAuiPaneInfo, toolbarPane, 0}}, + {2650, {wxAuiPaneInfo, top, 0}}, + {2651, {wxAuiPaneInfo, topDockable, 1}}, + {2652, {wxAuiPaneInfo, window, 1}}, + {2653, {wxAuiNotebook, new_0, 0}}, + {2654, {wxAuiNotebook, new_2, 2}}, + {2655, {wxAuiNotebook, addPage, 3}}, + {2656, {wxAuiNotebook, create, 2}}, + {2657, {wxAuiNotebook, deletePage, 1}}, + {2658, {wxAuiNotebook, getArtProvider, 0}}, + {2659, {wxAuiNotebook, getPage, 1}}, + {2660, {wxAuiNotebook, getPageBitmap, 1}}, + {2661, {wxAuiNotebook, getPageCount, 0}}, + {2662, {wxAuiNotebook, getPageIndex, 1}}, + {2663, {wxAuiNotebook, getPageText, 1}}, + {2664, {wxAuiNotebook, getSelection, 0}}, + {2665, {wxAuiNotebook, insertPage, 4}}, + {2666, {wxAuiNotebook, removePage, 1}}, + {2667, {wxAuiNotebook, setArtProvider, 1}}, + {2668, {wxAuiNotebook, setFont, 1}}, + {2669, {wxAuiNotebook, setPageBitmap, 2}}, + {2670, {wxAuiNotebook, setPageText, 2}}, + {2671, {wxAuiNotebook, setSelection, 1}}, + {2672, {wxAuiNotebook, setTabCtrlHeight, 1}}, + {2673, {wxAuiNotebook, setUniformBitmapSize, 1}}, + {2674, {wxAuiNotebook, 'Destroy', undefined}}, + {2675, {wxMDIParentFrame, new_0, 0}}, + {2676, {wxMDIParentFrame, new_4, 4}}, + {2677, {wxMDIParentFrame, destruct, 0}}, + {2678, {wxMDIParentFrame, activateNext, 0}}, + {2679, {wxMDIParentFrame, activatePrevious, 0}}, + {2680, {wxMDIParentFrame, arrangeIcons, 0}}, + {2681, {wxMDIParentFrame, cascade, 0}}, + {2682, {wxMDIParentFrame, create, 4}}, + {2683, {wxMDIParentFrame, getActiveChild, 0}}, + {2684, {wxMDIParentFrame, getClientWindow, 0}}, + {2685, {wxMDIParentFrame, tile, 1}}, + {2686, {wxMDIChildFrame, new_0, 0}}, + {2687, {wxMDIChildFrame, new_4, 4}}, + {2688, {wxMDIChildFrame, destruct, 0}}, + {2689, {wxMDIChildFrame, activate, 0}}, + {2690, {wxMDIChildFrame, create, 4}}, + {2691, {wxMDIChildFrame, maximize, 1}}, + {2692, {wxMDIChildFrame, restore, 0}}, + {2693, {wxMDIClientWindow, new_0, 0}}, + {2694, {wxMDIClientWindow, new_2, 2}}, + {2695, {wxMDIClientWindow, destruct, 0}}, + {2696, {wxMDIClientWindow, createClient, 2}}, + {2697, {wxLayoutAlgorithm, new, 0}}, + {2698, {wxLayoutAlgorithm, layoutFrame, 2}}, + {2699, {wxLayoutAlgorithm, layoutMDIFrame, 2}}, + {2700, {wxLayoutAlgorithm, layoutWindow, 2}}, + {2701, {wxLayoutAlgorithm, 'Destroy', undefined}}, + {2702, {wxEvent, getId, 0}}, + {2703, {wxEvent, getSkipped, 0}}, + {2704, {wxEvent, getTimestamp, 0}}, + {2705, {wxEvent, isCommandEvent, 0}}, + {2706, {wxEvent, resumePropagation, 1}}, + {2707, {wxEvent, shouldPropagate, 0}}, + {2708, {wxEvent, skip, 1}}, + {2709, {wxEvent, stopPropagation, 0}}, + {2710, {wxCommandEvent, getClientData, 0}}, + {2711, {wxCommandEvent, getExtraLong, 0}}, + {2712, {wxCommandEvent, getInt, 0}}, + {2713, {wxCommandEvent, getSelection, 0}}, + {2714, {wxCommandEvent, getString, 0}}, + {2715, {wxCommandEvent, isChecked, 0}}, + {2716, {wxCommandEvent, isSelection, 0}}, + {2717, {wxCommandEvent, setInt, 1}}, + {2718, {wxCommandEvent, setString, 1}}, + {2719, {wxScrollEvent, getOrientation, 0}}, + {2720, {wxScrollEvent, getPosition, 0}}, + {2721, {wxScrollWinEvent, getOrientation, 0}}, + {2722, {wxScrollWinEvent, getPosition, 0}}, + {2723, {wxMouseEvent, altDown, 0}}, + {2724, {wxMouseEvent, button, 1}}, + {2725, {wxMouseEvent, buttonDClick, 1}}, + {2726, {wxMouseEvent, buttonDown, 1}}, + {2727, {wxMouseEvent, buttonUp, 1}}, + {2728, {wxMouseEvent, cmdDown, 0}}, + {2729, {wxMouseEvent, controlDown, 0}}, + {2730, {wxMouseEvent, dragging, 0}}, + {2731, {wxMouseEvent, entering, 0}}, + {2732, {wxMouseEvent, getButton, 0}}, + {2735, {wxMouseEvent, getPosition, 0}}, + {2736, {wxMouseEvent, getLogicalPosition, 1}}, + {2737, {wxMouseEvent, getLinesPerAction, 0}}, + {2738, {wxMouseEvent, getWheelRotation, 0}}, + {2739, {wxMouseEvent, getWheelDelta, 0}}, + {2740, {wxMouseEvent, getX, 0}}, + {2741, {wxMouseEvent, getY, 0}}, + {2742, {wxMouseEvent, isButton, 0}}, + {2743, {wxMouseEvent, isPageScroll, 0}}, + {2744, {wxMouseEvent, leaving, 0}}, + {2745, {wxMouseEvent, leftDClick, 0}}, + {2746, {wxMouseEvent, leftDown, 0}}, + {2747, {wxMouseEvent, leftIsDown, 0}}, + {2748, {wxMouseEvent, leftUp, 0}}, + {2749, {wxMouseEvent, metaDown, 0}}, + {2750, {wxMouseEvent, middleDClick, 0}}, + {2751, {wxMouseEvent, middleDown, 0}}, + {2752, {wxMouseEvent, middleIsDown, 0}}, + {2753, {wxMouseEvent, middleUp, 0}}, + {2754, {wxMouseEvent, moving, 0}}, + {2755, {wxMouseEvent, rightDClick, 0}}, + {2756, {wxMouseEvent, rightDown, 0}}, + {2757, {wxMouseEvent, rightIsDown, 0}}, + {2758, {wxMouseEvent, rightUp, 0}}, + {2759, {wxMouseEvent, shiftDown, 0}}, + {2760, {wxSetCursorEvent, getCursor, 0}}, + {2761, {wxSetCursorEvent, getX, 0}}, + {2762, {wxSetCursorEvent, getY, 0}}, + {2763, {wxSetCursorEvent, hasCursor, 0}}, + {2764, {wxSetCursorEvent, setCursor, 1}}, + {2765, {wxKeyEvent, altDown, 0}}, + {2766, {wxKeyEvent, cmdDown, 0}}, + {2767, {wxKeyEvent, controlDown, 0}}, + {2768, {wxKeyEvent, getKeyCode, 0}}, + {2769, {wxKeyEvent, getModifiers, 0}}, + {2772, {wxKeyEvent, getPosition, 0}}, + {2773, {wxKeyEvent, getRawKeyCode, 0}}, + {2774, {wxKeyEvent, getRawKeyFlags, 0}}, + {2775, {wxKeyEvent, getUnicodeKey, 0}}, + {2776, {wxKeyEvent, getX, 0}}, + {2777, {wxKeyEvent, getY, 0}}, + {2778, {wxKeyEvent, hasModifiers, 0}}, + {2779, {wxKeyEvent, metaDown, 0}}, + {2780, {wxKeyEvent, shiftDown, 0}}, + {2781, {wxSizeEvent, getSize, 0}}, + {2782, {wxMoveEvent, getPosition, 0}}, + {2783, {wxEraseEvent, getDC, 0}}, + {2784, {wxFocusEvent, getWindow, 0}}, + {2785, {wxChildFocusEvent, getWindow, 0}}, + {2786, {wxMenuEvent, getMenu, 0}}, + {2787, {wxMenuEvent, getMenuId, 0}}, + {2788, {wxMenuEvent, isPopup, 0}}, + {2789, {wxCloseEvent, canVeto, 0}}, + {2790, {wxCloseEvent, getLoggingOff, 0}}, + {2791, {wxCloseEvent, setCanVeto, 1}}, + {2792, {wxCloseEvent, setLoggingOff, 1}}, + {2793, {wxCloseEvent, veto, 1}}, + {2794, {wxShowEvent, setShow, 1}}, + {2795, {wxShowEvent, getShow, 0}}, + {2796, {wxIconizeEvent, iconized, 0}}, + {2797, {wxJoystickEvent, buttonDown, 1}}, + {2798, {wxJoystickEvent, buttonIsDown, 1}}, + {2799, {wxJoystickEvent, buttonUp, 1}}, + {2800, {wxJoystickEvent, getButtonChange, 0}}, + {2801, {wxJoystickEvent, getButtonState, 0}}, + {2802, {wxJoystickEvent, getJoystick, 0}}, + {2803, {wxJoystickEvent, getPosition, 0}}, + {2804, {wxJoystickEvent, getZPosition, 0}}, + {2805, {wxJoystickEvent, isButton, 0}}, + {2806, {wxJoystickEvent, isMove, 0}}, + {2807, {wxJoystickEvent, isZMove, 0}}, + {2808, {wxUpdateUIEvent, canUpdate, 1}}, + {2809, {wxUpdateUIEvent, check, 1}}, + {2810, {wxUpdateUIEvent, enable, 1}}, + {2811, {wxUpdateUIEvent, show, 1}}, + {2812, {wxUpdateUIEvent, getChecked, 0}}, + {2813, {wxUpdateUIEvent, getEnabled, 0}}, + {2814, {wxUpdateUIEvent, getShown, 0}}, + {2815, {wxUpdateUIEvent, getSetChecked, 0}}, + {2816, {wxUpdateUIEvent, getSetEnabled, 0}}, + {2817, {wxUpdateUIEvent, getSetShown, 0}}, + {2818, {wxUpdateUIEvent, getSetText, 0}}, + {2819, {wxUpdateUIEvent, getText, 0}}, + {2820, {wxUpdateUIEvent, getMode, 0}}, + {2821, {wxUpdateUIEvent, getUpdateInterval, 0}}, + {2822, {wxUpdateUIEvent, resetUpdateTime, 0}}, + {2823, {wxUpdateUIEvent, setMode, 1}}, + {2824, {wxUpdateUIEvent, setText, 1}}, + {2825, {wxUpdateUIEvent, setUpdateInterval, 1}}, + {2826, {wxMouseCaptureChangedEvent, getCapturedWindow, 0}}, + {2827, {wxPaletteChangedEvent, setChangedWindow, 1}}, + {2828, {wxPaletteChangedEvent, getChangedWindow, 0}}, + {2829, {wxQueryNewPaletteEvent, setPaletteRealized, 1}}, + {2830, {wxQueryNewPaletteEvent, getPaletteRealized, 0}}, + {2831, {wxNavigationKeyEvent, getDirection, 0}}, + {2832, {wxNavigationKeyEvent, setDirection, 1}}, + {2833, {wxNavigationKeyEvent, isWindowChange, 0}}, + {2834, {wxNavigationKeyEvent, setWindowChange, 1}}, + {2835, {wxNavigationKeyEvent, isFromTab, 0}}, + {2836, {wxNavigationKeyEvent, setFromTab, 1}}, + {2837, {wxNavigationKeyEvent, getCurrentFocus, 0}}, + {2838, {wxNavigationKeyEvent, setCurrentFocus, 1}}, + {2839, {wxHelpEvent, getOrigin, 0}}, + {2840, {wxHelpEvent, getPosition, 0}}, + {2841, {wxHelpEvent, setOrigin, 1}}, + {2842, {wxHelpEvent, setPosition, 1}}, + {2843, {wxContextMenuEvent, getPosition, 0}}, + {2844, {wxContextMenuEvent, setPosition, 1}}, + {2845, {wxIdleEvent, canSend, 1}}, + {2846, {wxIdleEvent, getMode, 0}}, + {2847, {wxIdleEvent, requestMore, 1}}, + {2848, {wxIdleEvent, moreRequested, 0}}, + {2849, {wxIdleEvent, setMode, 1}}, + {2850, {wxGridEvent, altDown, 0}}, + {2851, {wxGridEvent, controlDown, 0}}, + {2852, {wxGridEvent, getCol, 0}}, + {2853, {wxGridEvent, getPosition, 0}}, + {2854, {wxGridEvent, getRow, 0}}, + {2855, {wxGridEvent, metaDown, 0}}, + {2856, {wxGridEvent, selecting, 0}}, + {2857, {wxGridEvent, shiftDown, 0}}, + {2858, {wxNotifyEvent, allow, 0}}, + {2859, {wxNotifyEvent, isAllowed, 0}}, + {2860, {wxNotifyEvent, veto, 0}}, + {2861, {wxSashEvent, getEdge, 0}}, + {2862, {wxSashEvent, getDragRect, 0}}, + {2863, {wxSashEvent, getDragStatus, 0}}, + {2864, {wxListEvent, getCacheFrom, 0}}, + {2865, {wxListEvent, getCacheTo, 0}}, + {2866, {wxListEvent, getKeyCode, 0}}, + {2867, {wxListEvent, getIndex, 0}}, + {2868, {wxListEvent, getColumn, 0}}, + {2869, {wxListEvent, getPoint, 0}}, + {2870, {wxListEvent, getLabel, 0}}, + {2871, {wxListEvent, getText, 0}}, + {2872, {wxListEvent, getImage, 0}}, + {2873, {wxListEvent, getData, 0}}, + {2874, {wxListEvent, getMask, 0}}, + {2875, {wxListEvent, getItem, 0}}, + {2876, {wxListEvent, isEditCancelled, 0}}, + {2877, {wxDateEvent, getDate, 0}}, + {2878, {wxCalendarEvent, getWeekDay, 0}}, + {2879, {wxFileDirPickerEvent, getPath, 0}}, + {2880, {wxColourPickerEvent, getColour, 0}}, + {2881, {wxFontPickerEvent, getFont, 0}}, + {2882, {wxStyledTextEvent, getPosition, 0}}, + {2883, {wxStyledTextEvent, getKey, 0}}, + {2884, {wxStyledTextEvent, getModifiers, 0}}, + {2885, {wxStyledTextEvent, getModificationType, 0}}, + {2886, {wxStyledTextEvent, getText, 0}}, + {2887, {wxStyledTextEvent, getLength, 0}}, + {2888, {wxStyledTextEvent, getLinesAdded, 0}}, + {2889, {wxStyledTextEvent, getLine, 0}}, + {2890, {wxStyledTextEvent, getFoldLevelNow, 0}}, + {2891, {wxStyledTextEvent, getFoldLevelPrev, 0}}, + {2892, {wxStyledTextEvent, getMargin, 0}}, + {2893, {wxStyledTextEvent, getMessage, 0}}, + {2894, {wxStyledTextEvent, getWParam, 0}}, + {2895, {wxStyledTextEvent, getLParam, 0}}, + {2896, {wxStyledTextEvent, getListType, 0}}, + {2897, {wxStyledTextEvent, getX, 0}}, + {2898, {wxStyledTextEvent, getY, 0}}, + {2899, {wxStyledTextEvent, getDragText, 0}}, + {2900, {wxStyledTextEvent, getDragAllowMove, 0}}, + {2901, {wxStyledTextEvent, getDragResult, 0}}, + {2902, {wxStyledTextEvent, getShift, 0}}, + {2903, {wxStyledTextEvent, getControl, 0}}, + {2904, {wxStyledTextEvent, getAlt, 0}}, + {2905, {utils, getKeyState, 1}}, + {2906, {utils, getMousePosition, 2}}, + {2907, {utils, getMouseState, 0}}, + {2908, {utils, setDetectableAutoRepeat, 1}}, + {2909, {utils, bell, 0}}, + {2910, {utils, findMenuItemId, 3}}, + {2911, {utils, genericFindWindowAtPoint, 1}}, + {2912, {utils, findWindowAtPoint, 1}}, + {2913, {utils, beginBusyCursor, 1}}, + {2914, {utils, endBusyCursor, 0}}, + {2915, {utils, isBusy, 0}}, + {2916, {utils, shutdown, 1}}, + {2917, {utils, shell, 1}}, + {2918, {utils, launchDefaultBrowser, 2}}, + {2919, {utils, getEmailAddress, 0}}, + {2920, {utils, getUserId, 0}}, + {2921, {utils, getHomeDir, 0}}, + {2922, {utils, newId, 0}}, + {2923, {utils, registerId, 1}}, + {2924, {utils, getCurrentId, 0}}, + {2925, {utils, getOsDescription, 0}}, + {2926, {utils, isPlatformLittleEndian, 0}}, + {2927, {utils, isPlatform64Bit, 0}}, + {2928, {wxPrintout, new, 1}}, + {2929, {wxPrintout, destruct, 0}}, + {2930, {wxPrintout, getDC, 0}}, + {2931, {wxPrintout, getPageSizeMM, 2}}, + {2932, {wxPrintout, getPageSizePixels, 2}}, + {2933, {wxPrintout, getPaperRectPixels, 0}}, + {2934, {wxPrintout, getPPIPrinter, 2}}, + {2935, {wxPrintout, getPPIScreen, 2}}, + {2936, {wxPrintout, getTitle, 0}}, + {2937, {wxPrintout, isPreview, 0}}, + {2938, {wxPrintout, fitThisSizeToPaper, 1}}, + {2939, {wxPrintout, fitThisSizeToPage, 1}}, + {2940, {wxPrintout, fitThisSizeToPageMargins, 2}}, + {2941, {wxPrintout, mapScreenSizeToPaper, 0}}, + {2942, {wxPrintout, mapScreenSizeToPage, 0}}, + {2943, {wxPrintout, mapScreenSizeToPageMargins, 1}}, + {2944, {wxPrintout, mapScreenSizeToDevice, 0}}, + {2945, {wxPrintout, getLogicalPaperRect, 0}}, + {2946, {wxPrintout, getLogicalPageRect, 0}}, + {2947, {wxPrintout, getLogicalPageMarginsRect, 1}}, + {2948, {wxPrintout, setLogicalOrigin, 2}}, + {2949, {wxPrintout, offsetLogicalOrigin, 2}}, + {2950, {wxStyledTextCtrl, new_2, 2}}, + {2951, {wxStyledTextCtrl, new_0, 0}}, + {2952, {wxStyledTextCtrl, destruct, 0}}, + {2953, {wxStyledTextCtrl, create, 2}}, + {2954, {wxStyledTextCtrl, addText, 1}}, + {2955, {wxStyledTextCtrl, addStyledText, 1}}, + {2956, {wxStyledTextCtrl, insertText, 2}}, + {2957, {wxStyledTextCtrl, clearAll, 0}}, + {2958, {wxStyledTextCtrl, clearDocumentStyle, 0}}, + {2959, {wxStyledTextCtrl, getLength, 0}}, + {2960, {wxStyledTextCtrl, getCharAt, 1}}, + {2961, {wxStyledTextCtrl, getCurrentPos, 0}}, + {2962, {wxStyledTextCtrl, getAnchor, 0}}, + {2963, {wxStyledTextCtrl, getStyleAt, 1}}, + {2964, {wxStyledTextCtrl, redo, 0}}, + {2965, {wxStyledTextCtrl, setUndoCollection, 1}}, + {2966, {wxStyledTextCtrl, selectAll, 0}}, + {2967, {wxStyledTextCtrl, setSavePoint, 0}}, + {2968, {wxStyledTextCtrl, getStyledText, 2}}, + {2969, {wxStyledTextCtrl, canRedo, 0}}, + {2970, {wxStyledTextCtrl, markerLineFromHandle, 1}}, + {2971, {wxStyledTextCtrl, markerDeleteHandle, 1}}, + {2972, {wxStyledTextCtrl, getUndoCollection, 0}}, + {2973, {wxStyledTextCtrl, getViewWhiteSpace, 0}}, + {2974, {wxStyledTextCtrl, setViewWhiteSpace, 1}}, + {2975, {wxStyledTextCtrl, positionFromPoint, 1}}, + {2976, {wxStyledTextCtrl, positionFromPointClose, 2}}, + {2977, {wxStyledTextCtrl, gotoLine, 1}}, + {2978, {wxStyledTextCtrl, gotoPos, 1}}, + {2979, {wxStyledTextCtrl, setAnchor, 1}}, + {2980, {wxStyledTextCtrl, getCurLine, 1}}, + {2981, {wxStyledTextCtrl, getEndStyled, 0}}, + {2982, {wxStyledTextCtrl, convertEOLs, 1}}, + {2983, {wxStyledTextCtrl, getEOLMode, 0}}, + {2984, {wxStyledTextCtrl, setEOLMode, 1}}, + {2985, {wxStyledTextCtrl, startStyling, 2}}, + {2986, {wxStyledTextCtrl, setStyling, 2}}, + {2987, {wxStyledTextCtrl, getBufferedDraw, 0}}, + {2988, {wxStyledTextCtrl, setBufferedDraw, 1}}, + {2989, {wxStyledTextCtrl, setTabWidth, 1}}, + {2990, {wxStyledTextCtrl, getTabWidth, 0}}, + {2991, {wxStyledTextCtrl, setCodePage, 1}}, + {2992, {wxStyledTextCtrl, markerDefine, 3}}, + {2993, {wxStyledTextCtrl, markerSetForeground, 2}}, + {2994, {wxStyledTextCtrl, markerSetBackground, 2}}, + {2995, {wxStyledTextCtrl, markerAdd, 2}}, + {2996, {wxStyledTextCtrl, markerDelete, 2}}, + {2997, {wxStyledTextCtrl, markerDeleteAll, 1}}, + {2998, {wxStyledTextCtrl, markerGet, 1}}, + {2999, {wxStyledTextCtrl, markerNext, 2}}, + {3000, {wxStyledTextCtrl, markerPrevious, 2}}, + {3001, {wxStyledTextCtrl, markerDefineBitmap, 2}}, + {3002, {wxStyledTextCtrl, markerAddSet, 2}}, + {3003, {wxStyledTextCtrl, markerSetAlpha, 2}}, + {3004, {wxStyledTextCtrl, setMarginType, 2}}, + {3005, {wxStyledTextCtrl, getMarginType, 1}}, + {3006, {wxStyledTextCtrl, setMarginWidth, 2}}, + {3007, {wxStyledTextCtrl, getMarginWidth, 1}}, + {3008, {wxStyledTextCtrl, setMarginMask, 2}}, + {3009, {wxStyledTextCtrl, getMarginMask, 1}}, + {3010, {wxStyledTextCtrl, setMarginSensitive, 2}}, + {3011, {wxStyledTextCtrl, getMarginSensitive, 1}}, + {3012, {wxStyledTextCtrl, styleClearAll, 0}}, + {3013, {wxStyledTextCtrl, styleSetForeground, 2}}, + {3014, {wxStyledTextCtrl, styleSetBackground, 2}}, + {3015, {wxStyledTextCtrl, styleSetBold, 2}}, + {3016, {wxStyledTextCtrl, styleSetItalic, 2}}, + {3017, {wxStyledTextCtrl, styleSetSize, 2}}, + {3018, {wxStyledTextCtrl, styleSetFaceName, 2}}, + {3019, {wxStyledTextCtrl, styleSetEOLFilled, 2}}, + {3020, {wxStyledTextCtrl, styleResetDefault, 0}}, + {3021, {wxStyledTextCtrl, styleSetUnderline, 2}}, + {3022, {wxStyledTextCtrl, styleSetCase, 2}}, + {3023, {wxStyledTextCtrl, styleSetHotSpot, 2}}, + {3024, {wxStyledTextCtrl, setSelForeground, 2}}, + {3025, {wxStyledTextCtrl, setSelBackground, 2}}, + {3026, {wxStyledTextCtrl, getSelAlpha, 0}}, + {3027, {wxStyledTextCtrl, setSelAlpha, 1}}, + {3028, {wxStyledTextCtrl, setCaretForeground, 1}}, + {3029, {wxStyledTextCtrl, cmdKeyAssign, 3}}, + {3030, {wxStyledTextCtrl, cmdKeyClear, 2}}, + {3031, {wxStyledTextCtrl, cmdKeyClearAll, 0}}, + {3032, {wxStyledTextCtrl, setStyleBytes, 2}}, + {3033, {wxStyledTextCtrl, styleSetVisible, 2}}, + {3034, {wxStyledTextCtrl, getCaretPeriod, 0}}, + {3035, {wxStyledTextCtrl, setCaretPeriod, 1}}, + {3036, {wxStyledTextCtrl, setWordChars, 1}}, + {3037, {wxStyledTextCtrl, beginUndoAction, 0}}, + {3038, {wxStyledTextCtrl, endUndoAction, 0}}, + {3039, {wxStyledTextCtrl, indicatorSetStyle, 2}}, + {3040, {wxStyledTextCtrl, indicatorGetStyle, 1}}, + {3041, {wxStyledTextCtrl, indicatorSetForeground, 2}}, + {3042, {wxStyledTextCtrl, indicatorGetForeground, 1}}, + {3043, {wxStyledTextCtrl, setWhitespaceForeground, 2}}, + {3044, {wxStyledTextCtrl, setWhitespaceBackground, 2}}, + {3045, {wxStyledTextCtrl, getStyleBits, 0}}, + {3046, {wxStyledTextCtrl, setLineState, 2}}, + {3047, {wxStyledTextCtrl, getLineState, 1}}, + {3048, {wxStyledTextCtrl, getMaxLineState, 0}}, + {3049, {wxStyledTextCtrl, getCaretLineVisible, 0}}, + {3050, {wxStyledTextCtrl, setCaretLineVisible, 1}}, + {3051, {wxStyledTextCtrl, getCaretLineBackground, 0}}, + {3052, {wxStyledTextCtrl, setCaretLineBackground, 1}}, + {3053, {wxStyledTextCtrl, autoCompShow, 2}}, + {3054, {wxStyledTextCtrl, autoCompCancel, 0}}, + {3055, {wxStyledTextCtrl, autoCompActive, 0}}, + {3056, {wxStyledTextCtrl, autoCompPosStart, 0}}, + {3057, {wxStyledTextCtrl, autoCompComplete, 0}}, + {3058, {wxStyledTextCtrl, autoCompStops, 1}}, + {3059, {wxStyledTextCtrl, autoCompSetSeparator, 1}}, + {3060, {wxStyledTextCtrl, autoCompGetSeparator, 0}}, + {3061, {wxStyledTextCtrl, autoCompSelect, 1}}, + {3062, {wxStyledTextCtrl, autoCompSetCancelAtStart, 1}}, + {3063, {wxStyledTextCtrl, autoCompGetCancelAtStart, 0}}, + {3064, {wxStyledTextCtrl, autoCompSetFillUps, 1}}, + {3065, {wxStyledTextCtrl, autoCompSetChooseSingle, 1}}, + {3066, {wxStyledTextCtrl, autoCompGetChooseSingle, 0}}, + {3067, {wxStyledTextCtrl, autoCompSetIgnoreCase, 1}}, + {3068, {wxStyledTextCtrl, autoCompGetIgnoreCase, 0}}, + {3069, {wxStyledTextCtrl, userListShow, 2}}, + {3070, {wxStyledTextCtrl, autoCompSetAutoHide, 1}}, + {3071, {wxStyledTextCtrl, autoCompGetAutoHide, 0}}, + {3072, {wxStyledTextCtrl, autoCompSetDropRestOfWord, 1}}, + {3073, {wxStyledTextCtrl, autoCompGetDropRestOfWord, 0}}, + {3074, {wxStyledTextCtrl, registerImage, 2}}, + {3075, {wxStyledTextCtrl, clearRegisteredImages, 0}}, + {3076, {wxStyledTextCtrl, autoCompGetTypeSeparator, 0}}, + {3077, {wxStyledTextCtrl, autoCompSetTypeSeparator, 1}}, + {3078, {wxStyledTextCtrl, autoCompSetMaxWidth, 1}}, + {3079, {wxStyledTextCtrl, autoCompGetMaxWidth, 0}}, + {3080, {wxStyledTextCtrl, autoCompSetMaxHeight, 1}}, + {3081, {wxStyledTextCtrl, autoCompGetMaxHeight, 0}}, + {3082, {wxStyledTextCtrl, setIndent, 1}}, + {3083, {wxStyledTextCtrl, getIndent, 0}}, + {3084, {wxStyledTextCtrl, setUseTabs, 1}}, + {3085, {wxStyledTextCtrl, getUseTabs, 0}}, + {3086, {wxStyledTextCtrl, setLineIndentation, 2}}, + {3087, {wxStyledTextCtrl, getLineIndentation, 1}}, + {3088, {wxStyledTextCtrl, getLineIndentPosition, 1}}, + {3089, {wxStyledTextCtrl, getColumn, 1}}, + {3090, {wxStyledTextCtrl, setUseHorizontalScrollBar, 1}}, + {3091, {wxStyledTextCtrl, getUseHorizontalScrollBar, 0}}, + {3092, {wxStyledTextCtrl, setIndentationGuides, 1}}, + {3093, {wxStyledTextCtrl, getIndentationGuides, 0}}, + {3094, {wxStyledTextCtrl, setHighlightGuide, 1}}, + {3095, {wxStyledTextCtrl, getHighlightGuide, 0}}, + {3096, {wxStyledTextCtrl, getLineEndPosition, 1}}, + {3097, {wxStyledTextCtrl, getCodePage, 0}}, + {3098, {wxStyledTextCtrl, getCaretForeground, 0}}, + {3099, {wxStyledTextCtrl, getReadOnly, 0}}, + {3100, {wxStyledTextCtrl, setCurrentPos, 1}}, + {3101, {wxStyledTextCtrl, setSelectionStart, 1}}, + {3102, {wxStyledTextCtrl, getSelectionStart, 0}}, + {3103, {wxStyledTextCtrl, setSelectionEnd, 1}}, + {3104, {wxStyledTextCtrl, getSelectionEnd, 0}}, + {3105, {wxStyledTextCtrl, setPrintMagnification, 1}}, + {3106, {wxStyledTextCtrl, getPrintMagnification, 0}}, + {3107, {wxStyledTextCtrl, setPrintColourMode, 1}}, + {3108, {wxStyledTextCtrl, getPrintColourMode, 0}}, + {3109, {wxStyledTextCtrl, findText, 4}}, + {3110, {wxStyledTextCtrl, formatRange, 7}}, + {3111, {wxStyledTextCtrl, getFirstVisibleLine, 0}}, + {3112, {wxStyledTextCtrl, getLine, 1}}, + {3113, {wxStyledTextCtrl, getLineCount, 0}}, + {3114, {wxStyledTextCtrl, setMarginLeft, 1}}, + {3115, {wxStyledTextCtrl, getMarginLeft, 0}}, + {3116, {wxStyledTextCtrl, setMarginRight, 1}}, + {3117, {wxStyledTextCtrl, getMarginRight, 0}}, + {3118, {wxStyledTextCtrl, getModify, 0}}, + {3119, {wxStyledTextCtrl, setSelection, 2}}, + {3120, {wxStyledTextCtrl, getSelectedText, 0}}, + {3121, {wxStyledTextCtrl, getTextRange, 2}}, + {3122, {wxStyledTextCtrl, hideSelection, 1}}, + {3123, {wxStyledTextCtrl, lineFromPosition, 1}}, + {3124, {wxStyledTextCtrl, positionFromLine, 1}}, + {3125, {wxStyledTextCtrl, lineScroll, 2}}, + {3126, {wxStyledTextCtrl, ensureCaretVisible, 0}}, + {3127, {wxStyledTextCtrl, replaceSelection, 1}}, + {3128, {wxStyledTextCtrl, setReadOnly, 1}}, + {3129, {wxStyledTextCtrl, canPaste, 0}}, + {3130, {wxStyledTextCtrl, canUndo, 0}}, + {3131, {wxStyledTextCtrl, emptyUndoBuffer, 0}}, + {3132, {wxStyledTextCtrl, undo, 0}}, + {3133, {wxStyledTextCtrl, cut, 0}}, + {3134, {wxStyledTextCtrl, copy, 0}}, + {3135, {wxStyledTextCtrl, paste, 0}}, + {3136, {wxStyledTextCtrl, clear, 0}}, + {3137, {wxStyledTextCtrl, setText, 1}}, + {3138, {wxStyledTextCtrl, getText, 0}}, + {3139, {wxStyledTextCtrl, getTextLength, 0}}, + {3140, {wxStyledTextCtrl, getOvertype, 0}}, + {3141, {wxStyledTextCtrl, setCaretWidth, 1}}, + {3142, {wxStyledTextCtrl, getCaretWidth, 0}}, + {3143, {wxStyledTextCtrl, setTargetStart, 1}}, + {3144, {wxStyledTextCtrl, getTargetStart, 0}}, + {3145, {wxStyledTextCtrl, setTargetEnd, 1}}, + {3146, {wxStyledTextCtrl, getTargetEnd, 0}}, + {3147, {wxStyledTextCtrl, replaceTarget, 1}}, + {3148, {wxStyledTextCtrl, searchInTarget, 1}}, + {3149, {wxStyledTextCtrl, setSearchFlags, 1}}, + {3150, {wxStyledTextCtrl, getSearchFlags, 0}}, + {3151, {wxStyledTextCtrl, callTipShow, 2}}, + {3152, {wxStyledTextCtrl, callTipCancel, 0}}, + {3153, {wxStyledTextCtrl, callTipActive, 0}}, + {3154, {wxStyledTextCtrl, callTipPosAtStart, 0}}, + {3155, {wxStyledTextCtrl, callTipSetHighlight, 2}}, + {3156, {wxStyledTextCtrl, callTipSetBackground, 1}}, + {3157, {wxStyledTextCtrl, callTipSetForeground, 1}}, + {3158, {wxStyledTextCtrl, callTipSetForegroundHighlight, 1}}, + {3159, {wxStyledTextCtrl, callTipUseStyle, 1}}, + {3160, {wxStyledTextCtrl, visibleFromDocLine, 1}}, + {3161, {wxStyledTextCtrl, docLineFromVisible, 1}}, + {3162, {wxStyledTextCtrl, wrapCount, 1}}, + {3163, {wxStyledTextCtrl, setFoldLevel, 2}}, + {3164, {wxStyledTextCtrl, getFoldLevel, 1}}, + {3165, {wxStyledTextCtrl, getLastChild, 2}}, + {3166, {wxStyledTextCtrl, getFoldParent, 1}}, + {3167, {wxStyledTextCtrl, showLines, 2}}, + {3168, {wxStyledTextCtrl, hideLines, 2}}, + {3169, {wxStyledTextCtrl, getLineVisible, 1}}, + {3170, {wxStyledTextCtrl, setFoldExpanded, 2}}, + {3171, {wxStyledTextCtrl, getFoldExpanded, 1}}, + {3172, {wxStyledTextCtrl, toggleFold, 1}}, + {3173, {wxStyledTextCtrl, ensureVisible, 1}}, + {3174, {wxStyledTextCtrl, setFoldFlags, 1}}, + {3175, {wxStyledTextCtrl, ensureVisibleEnforcePolicy, 1}}, + {3176, {wxStyledTextCtrl, setTabIndents, 1}}, + {3177, {wxStyledTextCtrl, getTabIndents, 0}}, + {3178, {wxStyledTextCtrl, setBackSpaceUnIndents, 1}}, + {3179, {wxStyledTextCtrl, getBackSpaceUnIndents, 0}}, + {3180, {wxStyledTextCtrl, setMouseDwellTime, 1}}, + {3181, {wxStyledTextCtrl, getMouseDwellTime, 0}}, + {3182, {wxStyledTextCtrl, wordStartPosition, 2}}, + {3183, {wxStyledTextCtrl, wordEndPosition, 2}}, + {3184, {wxStyledTextCtrl, setWrapMode, 1}}, + {3185, {wxStyledTextCtrl, getWrapMode, 0}}, + {3186, {wxStyledTextCtrl, setWrapVisualFlags, 1}}, + {3187, {wxStyledTextCtrl, getWrapVisualFlags, 0}}, + {3188, {wxStyledTextCtrl, setWrapVisualFlagsLocation, 1}}, + {3189, {wxStyledTextCtrl, getWrapVisualFlagsLocation, 0}}, + {3190, {wxStyledTextCtrl, setWrapStartIndent, 1}}, + {3191, {wxStyledTextCtrl, getWrapStartIndent, 0}}, + {3192, {wxStyledTextCtrl, setLayoutCache, 1}}, + {3193, {wxStyledTextCtrl, getLayoutCache, 0}}, + {3194, {wxStyledTextCtrl, setScrollWidth, 1}}, + {3195, {wxStyledTextCtrl, getScrollWidth, 0}}, + {3196, {wxStyledTextCtrl, textWidth, 2}}, + {3197, {wxStyledTextCtrl, getEndAtLastLine, 0}}, + {3198, {wxStyledTextCtrl, textHeight, 1}}, + {3199, {wxStyledTextCtrl, setUseVerticalScrollBar, 1}}, + {3200, {wxStyledTextCtrl, getUseVerticalScrollBar, 0}}, + {3201, {wxStyledTextCtrl, appendText, 1}}, + {3202, {wxStyledTextCtrl, getTwoPhaseDraw, 0}}, + {3203, {wxStyledTextCtrl, setTwoPhaseDraw, 1}}, + {3204, {wxStyledTextCtrl, targetFromSelection, 0}}, + {3205, {wxStyledTextCtrl, linesJoin, 0}}, + {3206, {wxStyledTextCtrl, linesSplit, 1}}, + {3207, {wxStyledTextCtrl, setFoldMarginColour, 2}}, + {3208, {wxStyledTextCtrl, setFoldMarginHiColour, 2}}, + {3209, {wxStyledTextCtrl, lineDown, 0}}, + {3210, {wxStyledTextCtrl, lineDownExtend, 0}}, + {3211, {wxStyledTextCtrl, lineUp, 0}}, + {3212, {wxStyledTextCtrl, lineUpExtend, 0}}, + {3213, {wxStyledTextCtrl, charLeft, 0}}, + {3214, {wxStyledTextCtrl, charLeftExtend, 0}}, + {3215, {wxStyledTextCtrl, charRight, 0}}, + {3216, {wxStyledTextCtrl, charRightExtend, 0}}, + {3217, {wxStyledTextCtrl, wordLeft, 0}}, + {3218, {wxStyledTextCtrl, wordLeftExtend, 0}}, + {3219, {wxStyledTextCtrl, wordRight, 0}}, + {3220, {wxStyledTextCtrl, wordRightExtend, 0}}, + {3221, {wxStyledTextCtrl, home, 0}}, + {3222, {wxStyledTextCtrl, homeExtend, 0}}, + {3223, {wxStyledTextCtrl, lineEnd, 0}}, + {3224, {wxStyledTextCtrl, lineEndExtend, 0}}, + {3225, {wxStyledTextCtrl, documentStart, 0}}, + {3226, {wxStyledTextCtrl, documentStartExtend, 0}}, + {3227, {wxStyledTextCtrl, documentEnd, 0}}, + {3228, {wxStyledTextCtrl, documentEndExtend, 0}}, + {3229, {wxStyledTextCtrl, pageUp, 0}}, + {3230, {wxStyledTextCtrl, pageUpExtend, 0}}, + {3231, {wxStyledTextCtrl, pageDown, 0}}, + {3232, {wxStyledTextCtrl, pageDownExtend, 0}}, + {3233, {wxStyledTextCtrl, editToggleOvertype, 0}}, + {3234, {wxStyledTextCtrl, cancel, 0}}, + {3235, {wxStyledTextCtrl, deleteBack, 0}}, + {3236, {wxStyledTextCtrl, tab, 0}}, + {3237, {wxStyledTextCtrl, backTab, 0}}, + {3238, {wxStyledTextCtrl, newLine, 0}}, + {3239, {wxStyledTextCtrl, formFeed, 0}}, + {3240, {wxStyledTextCtrl, vCHome, 0}}, + {3241, {wxStyledTextCtrl, vCHomeExtend, 0}}, + {3242, {wxStyledTextCtrl, zoomIn, 0}}, + {3243, {wxStyledTextCtrl, zoomOut, 0}}, + {3244, {wxStyledTextCtrl, delWordLeft, 0}}, + {3245, {wxStyledTextCtrl, delWordRight, 0}}, + {3246, {wxStyledTextCtrl, lineCut, 0}}, + {3247, {wxStyledTextCtrl, lineDelete, 0}}, + {3248, {wxStyledTextCtrl, lineTranspose, 0}}, + {3249, {wxStyledTextCtrl, lineDuplicate, 0}}, + {3250, {wxStyledTextCtrl, lowerCase, 0}}, + {3251, {wxStyledTextCtrl, upperCase, 0}}, + {3252, {wxStyledTextCtrl, lineScrollDown, 0}}, + {3253, {wxStyledTextCtrl, lineScrollUp, 0}}, + {3254, {wxStyledTextCtrl, deleteBackNotLine, 0}}, + {3255, {wxStyledTextCtrl, homeDisplay, 0}}, + {3256, {wxStyledTextCtrl, homeDisplayExtend, 0}}, + {3257, {wxStyledTextCtrl, lineEndDisplay, 0}}, + {3258, {wxStyledTextCtrl, lineEndDisplayExtend, 0}}, + {3259, {wxStyledTextCtrl, homeWrapExtend, 0}}, + {3260, {wxStyledTextCtrl, lineEndWrap, 0}}, + {3261, {wxStyledTextCtrl, lineEndWrapExtend, 0}}, + {3262, {wxStyledTextCtrl, vCHomeWrap, 0}}, + {3263, {wxStyledTextCtrl, vCHomeWrapExtend, 0}}, + {3264, {wxStyledTextCtrl, lineCopy, 0}}, + {3265, {wxStyledTextCtrl, moveCaretInsideView, 0}}, + {3266, {wxStyledTextCtrl, lineLength, 1}}, + {3267, {wxStyledTextCtrl, braceHighlight, 2}}, + {3268, {wxStyledTextCtrl, braceBadLight, 1}}, + {3269, {wxStyledTextCtrl, braceMatch, 1}}, + {3270, {wxStyledTextCtrl, getViewEOL, 0}}, + {3271, {wxStyledTextCtrl, setViewEOL, 1}}, + {3272, {wxStyledTextCtrl, setModEventMask, 1}}, + {3273, {wxStyledTextCtrl, getEdgeColumn, 0}}, + {3274, {wxStyledTextCtrl, setEdgeColumn, 1}}, + {3275, {wxStyledTextCtrl, setEdgeMode, 1}}, + {3276, {wxStyledTextCtrl, getEdgeMode, 0}}, + {3277, {wxStyledTextCtrl, getEdgeColour, 0}}, + {3278, {wxStyledTextCtrl, setEdgeColour, 1}}, + {3279, {wxStyledTextCtrl, searchAnchor, 0}}, + {3280, {wxStyledTextCtrl, searchNext, 2}}, + {3281, {wxStyledTextCtrl, searchPrev, 2}}, + {3282, {wxStyledTextCtrl, linesOnScreen, 0}}, + {3283, {wxStyledTextCtrl, usePopUp, 1}}, + {3284, {wxStyledTextCtrl, selectionIsRectangle, 0}}, + {3285, {wxStyledTextCtrl, setZoom, 1}}, + {3286, {wxStyledTextCtrl, getZoom, 0}}, + {3287, {wxStyledTextCtrl, getModEventMask, 0}}, + {3288, {wxStyledTextCtrl, setSTCFocus, 1}}, + {3289, {wxStyledTextCtrl, getSTCFocus, 0}}, + {3290, {wxStyledTextCtrl, setStatus, 1}}, + {3291, {wxStyledTextCtrl, getStatus, 0}}, + {3292, {wxStyledTextCtrl, setMouseDownCaptures, 1}}, + {3293, {wxStyledTextCtrl, getMouseDownCaptures, 0}}, + {3294, {wxStyledTextCtrl, setSTCCursor, 1}}, + {3295, {wxStyledTextCtrl, getSTCCursor, 0}}, + {3296, {wxStyledTextCtrl, setControlCharSymbol, 1}}, + {3297, {wxStyledTextCtrl, getControlCharSymbol, 0}}, + {3298, {wxStyledTextCtrl, wordPartLeft, 0}}, + {3299, {wxStyledTextCtrl, wordPartLeftExtend, 0}}, + {3300, {wxStyledTextCtrl, wordPartRight, 0}}, + {3301, {wxStyledTextCtrl, wordPartRightExtend, 0}}, + {3302, {wxStyledTextCtrl, setVisiblePolicy, 2}}, + {3303, {wxStyledTextCtrl, delLineLeft, 0}}, + {3304, {wxStyledTextCtrl, delLineRight, 0}}, + {3305, {wxStyledTextCtrl, getXOffset, 0}}, + {3306, {wxStyledTextCtrl, chooseCaretX, 0}}, + {3307, {wxStyledTextCtrl, setXCaretPolicy, 2}}, + {3308, {wxStyledTextCtrl, setYCaretPolicy, 2}}, + {3309, {wxStyledTextCtrl, getPrintWrapMode, 0}}, + {3310, {wxStyledTextCtrl, setHotspotActiveForeground, 2}}, + {3311, {wxStyledTextCtrl, setHotspotActiveBackground, 2}}, + {3312, {wxStyledTextCtrl, setHotspotActiveUnderline, 1}}, + {3313, {wxStyledTextCtrl, setHotspotSingleLine, 1}}, + {3314, {wxStyledTextCtrl, paraDownExtend, 0}}, + {3315, {wxStyledTextCtrl, paraUp, 0}}, + {3316, {wxStyledTextCtrl, paraUpExtend, 0}}, + {3317, {wxStyledTextCtrl, positionBefore, 1}}, + {3318, {wxStyledTextCtrl, positionAfter, 1}}, + {3319, {wxStyledTextCtrl, copyRange, 2}}, + {3320, {wxStyledTextCtrl, copyText, 2}}, + {3321, {wxStyledTextCtrl, setSelectionMode, 1}}, + {3322, {wxStyledTextCtrl, getSelectionMode, 0}}, + {3323, {wxStyledTextCtrl, lineDownRectExtend, 0}}, + {3324, {wxStyledTextCtrl, lineUpRectExtend, 0}}, + {3325, {wxStyledTextCtrl, charLeftRectExtend, 0}}, + {3326, {wxStyledTextCtrl, charRightRectExtend, 0}}, + {3327, {wxStyledTextCtrl, homeRectExtend, 0}}, + {3328, {wxStyledTextCtrl, vCHomeRectExtend, 0}}, + {3329, {wxStyledTextCtrl, lineEndRectExtend, 0}}, + {3330, {wxStyledTextCtrl, pageUpRectExtend, 0}}, + {3331, {wxStyledTextCtrl, pageDownRectExtend, 0}}, + {3332, {wxStyledTextCtrl, stutteredPageUp, 0}}, + {3333, {wxStyledTextCtrl, stutteredPageUpExtend, 0}}, + {3334, {wxStyledTextCtrl, stutteredPageDown, 0}}, + {3335, {wxStyledTextCtrl, stutteredPageDownExtend, 0}}, + {3336, {wxStyledTextCtrl, wordLeftEnd, 0}}, + {3337, {wxStyledTextCtrl, wordLeftEndExtend, 0}}, + {3338, {wxStyledTextCtrl, wordRightEnd, 0}}, + {3339, {wxStyledTextCtrl, wordRightEndExtend, 0}}, + {3340, {wxStyledTextCtrl, setWhitespaceChars, 1}}, + {3341, {wxStyledTextCtrl, setCharsDefault, 0}}, + {3342, {wxStyledTextCtrl, autoCompGetCurrent, 0}}, + {3343, {wxStyledTextCtrl, allocate, 1}}, + {3344, {wxStyledTextCtrl, findColumn, 2}}, + {3345, {wxStyledTextCtrl, getCaretSticky, 0}}, + {3346, {wxStyledTextCtrl, setCaretSticky, 1}}, + {3347, {wxStyledTextCtrl, toggleCaretSticky, 0}}, + {3348, {wxStyledTextCtrl, setPasteConvertEndings, 1}}, + {3349, {wxStyledTextCtrl, getPasteConvertEndings, 0}}, + {3350, {wxStyledTextCtrl, selectionDuplicate, 0}}, + {3351, {wxStyledTextCtrl, setCaretLineBackAlpha, 1}}, + {3352, {wxStyledTextCtrl, getCaretLineBackAlpha, 0}}, + {3353, {wxStyledTextCtrl, startRecord, 0}}, + {3354, {wxStyledTextCtrl, stopRecord, 0}}, + {3355, {wxStyledTextCtrl, setLexer, 1}}, + {3356, {wxStyledTextCtrl, getLexer, 0}}, + {3357, {wxStyledTextCtrl, colourise, 2}}, + {3358, {wxStyledTextCtrl, setProperty, 2}}, + {3359, {wxStyledTextCtrl, setKeyWords, 2}}, + {3360, {wxStyledTextCtrl, setLexerLanguage, 1}}, + {3361, {wxStyledTextCtrl, getProperty, 1}}, + {3362, {wxStyledTextCtrl, getStyleBitsNeeded, 0}}, + {3363, {wxStyledTextCtrl, getCurrentLine, 0}}, + {3364, {wxStyledTextCtrl, styleSetSpec, 2}}, + {3365, {wxStyledTextCtrl, styleSetFont, 2}}, + {3366, {wxStyledTextCtrl, styleSetFontAttr, 7}}, + {3367, {wxStyledTextCtrl, styleSetCharacterSet, 2}}, + {3368, {wxStyledTextCtrl, styleSetFontEncoding, 2}}, + {3369, {wxStyledTextCtrl, cmdKeyExecute, 1}}, + {3370, {wxStyledTextCtrl, setMargins, 2}}, + {3371, {wxStyledTextCtrl, getSelection, 2}}, + {3372, {wxStyledTextCtrl, pointFromPosition, 1}}, + {3373, {wxStyledTextCtrl, scrollToLine, 1}}, + {3374, {wxStyledTextCtrl, scrollToColumn, 1}}, + {3375, {wxStyledTextCtrl, setVScrollBar, 1}}, + {3376, {wxStyledTextCtrl, setHScrollBar, 1}}, + {3377, {wxStyledTextCtrl, getLastKeydownProcessed, 0}}, + {3378, {wxStyledTextCtrl, setLastKeydownProcessed, 1}}, + {3379, {wxStyledTextCtrl, saveFile, 1}}, + {3380, {wxStyledTextCtrl, loadFile, 1}}, + {3381, {wxStyledTextCtrl, doDragOver, 3}}, + {3382, {wxStyledTextCtrl, doDropText, 3}}, + {3383, {wxStyledTextCtrl, getUseAntiAliasing, 0}}, + {3384, {wxStyledTextCtrl, addTextRaw, 1}}, + {3385, {wxStyledTextCtrl, insertTextRaw, 2}}, + {3386, {wxStyledTextCtrl, getCurLineRaw, 1}}, + {3387, {wxStyledTextCtrl, getLineRaw, 1}}, + {3388, {wxStyledTextCtrl, getSelectedTextRaw, 0}}, + {3389, {wxStyledTextCtrl, getTextRangeRaw, 2}}, + {3390, {wxStyledTextCtrl, setTextRaw, 1}}, + {3391, {wxStyledTextCtrl, getTextRaw, 0}}, + {3392, {wxStyledTextCtrl, appendTextRaw, 1}}, + {3393, {wxArtProvider, getBitmap, 2}}, + {3394, {wxArtProvider, getIcon, 2}}, + {3395, {wxTreeEvent, getKeyCode, 0}}, + {3396, {wxTreeEvent, getItem, 0}}, + {3397, {wxTreeEvent, getKeyEvent, 0}}, + {3398, {wxTreeEvent, getLabel, 0}}, + {3399, {wxTreeEvent, getOldItem, 0}}, + {3400, {wxTreeEvent, getPoint, 0}}, + {3401, {wxTreeEvent, isEditCancelled, 0}}, + {3402, {wxTreeEvent, setToolTip, 1}}, + {3403, {wxNotebookEvent, getOldSelection, 0}}, + {3404, {wxNotebookEvent, getSelection, 0}}, + {3405, {wxNotebookEvent, setOldSelection, 1}}, + {3406, {wxNotebookEvent, setSelection, 1}}, + {3407, {wxFileDataObject, new, 0}}, + {3408, {wxFileDataObject, addFile, 1}}, + {3409, {wxFileDataObject, getFilenames, 0}}, + {3410, {wxFileDataObject, 'Destroy', undefined}}, + {3411, {wxTextDataObject, new, 1}}, + {3412, {wxTextDataObject, getTextLength, 0}}, + {3413, {wxTextDataObject, getText, 0}}, + {3414, {wxTextDataObject, setText, 1}}, + {3415, {wxTextDataObject, 'Destroy', undefined}}, + {3416, {wxBitmapDataObject, new_1_1, 1}}, + {3417, {wxBitmapDataObject, new_1_0, 1}}, + {3418, {wxBitmapDataObject, getBitmap, 0}}, + {3419, {wxBitmapDataObject, setBitmap, 1}}, + {3420, {wxBitmapDataObject, 'Destroy', undefined}}, + {3422, {wxClipboard, new, 0}}, + {3423, {wxClipboard, destruct, 0}}, + {3424, {wxClipboard, addData, 1}}, + {3425, {wxClipboard, clear, 0}}, + {3426, {wxClipboard, close, 0}}, + {3427, {wxClipboard, flush, 0}}, + {3428, {wxClipboard, getData, 1}}, + {3429, {wxClipboard, isOpened, 0}}, + {3430, {wxClipboard, open, 0}}, + {3431, {wxClipboard, setData, 1}}, + {3433, {wxClipboard, usePrimarySelection, 1}}, + {3434, {wxClipboard, isSupported, 1}}, + {3435, {wxClipboard, get, 0}}, + {3436, {wxSpinEvent, getPosition, 0}}, + {3437, {wxSpinEvent, setPosition, 1}}, + {3438, {wxSplitterWindow, new_0, 0}}, + {3439, {wxSplitterWindow, new_2, 2}}, + {3440, {wxSplitterWindow, destruct, 0}}, + {3441, {wxSplitterWindow, create, 2}}, + {3442, {wxSplitterWindow, getMinimumPaneSize, 0}}, + {3443, {wxSplitterWindow, getSashGravity, 0}}, + {3444, {wxSplitterWindow, getSashPosition, 0}}, + {3445, {wxSplitterWindow, getSplitMode, 0}}, + {3446, {wxSplitterWindow, getWindow1, 0}}, + {3447, {wxSplitterWindow, getWindow2, 0}}, + {3448, {wxSplitterWindow, initialize, 1}}, + {3449, {wxSplitterWindow, isSplit, 0}}, + {3450, {wxSplitterWindow, replaceWindow, 2}}, + {3451, {wxSplitterWindow, setSashGravity, 1}}, + {3452, {wxSplitterWindow, setSashPosition, 2}}, + {3453, {wxSplitterWindow, setSashSize, 1}}, + {3454, {wxSplitterWindow, setMinimumPaneSize, 1}}, + {3455, {wxSplitterWindow, setSplitMode, 1}}, + {3456, {wxSplitterWindow, splitHorizontally, 3}}, + {3457, {wxSplitterWindow, splitVertically, 3}}, + {3458, {wxSplitterWindow, unsplit, 1}}, + {3459, {wxSplitterWindow, updateSize, 0}}, + {3460, {wxSplitterEvent, getSashPosition, 0}}, + {3461, {wxSplitterEvent, getX, 0}}, + {3462, {wxSplitterEvent, getY, 0}}, + {3463, {wxSplitterEvent, getWindowBeingRemoved, 0}}, + {3464, {wxSplitterEvent, setSashPosition, 1}}, + {3465, {wxHtmlWindow, new_0, 0}}, + {3466, {wxHtmlWindow, new_2, 2}}, + {3467, {wxHtmlWindow, appendToPage, 1}}, + {3468, {wxHtmlWindow, getOpenedAnchor, 0}}, + {3469, {wxHtmlWindow, getOpenedPage, 0}}, + {3470, {wxHtmlWindow, getOpenedPageTitle, 0}}, + {3471, {wxHtmlWindow, getRelatedFrame, 0}}, + {3472, {wxHtmlWindow, historyBack, 0}}, + {3473, {wxHtmlWindow, historyCanBack, 0}}, + {3474, {wxHtmlWindow, historyCanForward, 0}}, + {3475, {wxHtmlWindow, historyClear, 0}}, + {3476, {wxHtmlWindow, historyForward, 0}}, + {3477, {wxHtmlWindow, loadFile, 1}}, + {3478, {wxHtmlWindow, loadPage, 1}}, + {3479, {wxHtmlWindow, selectAll, 0}}, + {3480, {wxHtmlWindow, selectionToText, 0}}, + {3481, {wxHtmlWindow, selectLine, 1}}, + {3482, {wxHtmlWindow, selectWord, 1}}, + {3483, {wxHtmlWindow, setBorders, 1}}, + {3484, {wxHtmlWindow, setFonts, 3}}, + {3485, {wxHtmlWindow, setPage, 1}}, + {3486, {wxHtmlWindow, setRelatedFrame, 2}}, + {3487, {wxHtmlWindow, setRelatedStatusBar, 1}}, + {3488, {wxHtmlWindow, toText, 0}}, + {3489, {wxHtmlWindow, 'Destroy', undefined}}, + {3490, {wxHtmlLinkEvent, getLinkInfo, 0}}, + {3491, {wxSystemSettings, getColour, 1}}, + {3492, {wxSystemSettings, getFont, 1}}, + {3493, {wxSystemSettings, getMetric, 2}}, + {3494, {wxSystemSettings, getScreenType, 0}}, + {3495, {wxSystemOptions, getOption, 1}}, + {3496, {wxSystemOptions, getOptionInt, 1}}, + {3497, {wxSystemOptions, hasOption, 1}}, + {3498, {wxSystemOptions, isFalse, 1}}, + {3499, {wxSystemOptions, setOption_2_1, 2}}, + {3500, {wxSystemOptions, setOption_2_0, 2}}, + {3501, {wxAuiNotebookEvent, setSelection, 1}}, + {3502, {wxAuiNotebookEvent, getSelection, 0}}, + {3503, {wxAuiNotebookEvent, setOldSelection, 1}}, + {3504, {wxAuiNotebookEvent, getOldSelection, 0}}, + {3505, {wxAuiNotebookEvent, setDragSource, 1}}, + {3506, {wxAuiNotebookEvent, getDragSource, 0}}, + {3507, {wxAuiManagerEvent, setManager, 1}}, + {3508, {wxAuiManagerEvent, getManager, 0}}, + {3509, {wxAuiManagerEvent, setPane, 1}}, + {3510, {wxAuiManagerEvent, getPane, 0}}, + {3511, {wxAuiManagerEvent, setButton, 1}}, + {3512, {wxAuiManagerEvent, getButton, 0}}, + {3513, {wxAuiManagerEvent, setDC, 1}}, + {3514, {wxAuiManagerEvent, getDC, 0}}, + {3515, {wxAuiManagerEvent, veto, 1}}, + {3516, {wxAuiManagerEvent, getVeto, 0}}, + {3517, {wxAuiManagerEvent, setCanVeto, 1}}, + {3518, {wxAuiManagerEvent, canVeto, 0}}, + {3519, {wxLogNull, new, 0}}, + {3520, {wxLogNull, 'Destroy', undefined}}, + {3521, {wxTaskBarIcon, new, 0}}, + {3522, {wxTaskBarIcon, destruct, 0}}, + {3523, {wxTaskBarIcon, popupMenu, 1}}, + {3524, {wxTaskBarIcon, removeIcon, 0}}, + {3525, {wxTaskBarIcon, setIcon, 2}}, {-1, {mod, func, -1}} ]. diff --git a/lib/wx/src/gen/wxe_funcs.hrl b/lib/wx/src/gen/wxe_funcs.hrl index b6e507b11d..213a2e5be1 100644 --- a/lib/wx/src/gen/wxe_funcs.hrl +++ b/lib/wx/src/gen/wxe_funcs.hrl @@ -238,3066 +238,3067 @@ -define(wxPanel_new_2, 334). -define(wxPanel_destruct, 335). -define(wxPanel_InitDialog, 336). --define(wxScrolledWindow_new_0, 337). --define(wxScrolledWindow_new_2, 338). --define(wxScrolledWindow_destruct, 339). --define(wxScrolledWindow_CalcScrolledPosition_4, 340). --define(wxScrolledWindow_CalcScrolledPosition_1, 341). --define(wxScrolledWindow_CalcUnscrolledPosition_4, 342). --define(wxScrolledWindow_CalcUnscrolledPosition_1, 343). --define(wxScrolledWindow_EnableScrolling, 344). --define(wxScrolledWindow_GetScrollPixelsPerUnit, 345). --define(wxScrolledWindow_GetViewStart, 346). --define(wxScrolledWindow_DoPrepareDC, 347). --define(wxScrolledWindow_PrepareDC, 348). --define(wxScrolledWindow_Scroll, 349). --define(wxScrolledWindow_SetScrollbars, 350). --define(wxScrolledWindow_SetScrollRate, 351). --define(wxScrolledWindow_SetTargetWindow, 352). --define(wxSashWindow_new_0, 353). --define(wxSashWindow_new_2, 354). --define(wxSashWindow_destruct, 355). --define(wxSashWindow_GetSashVisible, 356). --define(wxSashWindow_GetMaximumSizeX, 357). --define(wxSashWindow_GetMaximumSizeY, 358). --define(wxSashWindow_GetMinimumSizeX, 359). --define(wxSashWindow_GetMinimumSizeY, 360). --define(wxSashWindow_SetMaximumSizeX, 361). --define(wxSashWindow_SetMaximumSizeY, 362). --define(wxSashWindow_SetMinimumSizeX, 363). --define(wxSashWindow_SetMinimumSizeY, 364). --define(wxSashWindow_SetSashVisible, 365). --define(wxSashLayoutWindow_new_0, 366). --define(wxSashLayoutWindow_new_2, 367). --define(wxSashLayoutWindow_Create, 368). --define(wxSashLayoutWindow_GetAlignment, 369). --define(wxSashLayoutWindow_GetOrientation, 370). --define(wxSashLayoutWindow_SetAlignment, 371). --define(wxSashLayoutWindow_SetDefaultSize, 372). --define(wxSashLayoutWindow_SetOrientation, 373). --define(wxSashLayoutWindow_destroy, 374). --define(wxGrid_new_0, 375). --define(wxGrid_new_3, 376). --define(wxGrid_new_4, 377). --define(wxGrid_destruct, 378). --define(wxGrid_AppendCols, 379). --define(wxGrid_AppendRows, 380). --define(wxGrid_AutoSize, 381). --define(wxGrid_AutoSizeColumn, 382). --define(wxGrid_AutoSizeColumns, 383). --define(wxGrid_AutoSizeRow, 384). --define(wxGrid_AutoSizeRows, 385). --define(wxGrid_BeginBatch, 386). --define(wxGrid_BlockToDeviceRect, 387). --define(wxGrid_CanDragColSize, 388). --define(wxGrid_CanDragRowSize, 389). --define(wxGrid_CanDragGridSize, 390). --define(wxGrid_CanEnableCellControl, 391). --define(wxGrid_CellToRect_2, 392). --define(wxGrid_CellToRect_1, 393). --define(wxGrid_ClearGrid, 394). --define(wxGrid_ClearSelection, 395). --define(wxGrid_CreateGrid, 396). --define(wxGrid_DeleteCols, 397). --define(wxGrid_DeleteRows, 398). --define(wxGrid_DisableCellEditControl, 399). --define(wxGrid_DisableDragColSize, 400). --define(wxGrid_DisableDragGridSize, 401). --define(wxGrid_DisableDragRowSize, 402). --define(wxGrid_EnableCellEditControl, 403). --define(wxGrid_EnableDragColSize, 404). --define(wxGrid_EnableDragGridSize, 405). --define(wxGrid_EnableDragRowSize, 406). --define(wxGrid_EnableEditing, 407). --define(wxGrid_EnableGridLines, 408). --define(wxGrid_EndBatch, 409). --define(wxGrid_Fit, 410). --define(wxGrid_ForceRefresh, 411). --define(wxGrid_GetBatchCount, 412). --define(wxGrid_GetCellAlignment, 413). --define(wxGrid_GetCellBackgroundColour, 414). --define(wxGrid_GetCellEditor, 415). --define(wxGrid_GetCellFont, 416). --define(wxGrid_GetCellRenderer, 417). --define(wxGrid_GetCellTextColour, 418). --define(wxGrid_GetCellValue_2, 419). --define(wxGrid_GetCellValue_1, 420). --define(wxGrid_GetColLabelAlignment, 421). --define(wxGrid_GetColLabelSize, 422). --define(wxGrid_GetColLabelValue, 423). --define(wxGrid_GetColMinimalAcceptableWidth, 424). --define(wxGrid_GetDefaultCellAlignment, 425). --define(wxGrid_GetDefaultCellBackgroundColour, 426). --define(wxGrid_GetDefaultCellFont, 427). --define(wxGrid_GetDefaultCellTextColour, 428). --define(wxGrid_GetDefaultColLabelSize, 429). --define(wxGrid_GetDefaultColSize, 430). --define(wxGrid_GetDefaultEditor, 431). --define(wxGrid_GetDefaultEditorForCell_2, 432). --define(wxGrid_GetDefaultEditorForCell_1, 433). --define(wxGrid_GetDefaultEditorForType, 434). --define(wxGrid_GetDefaultRenderer, 435). --define(wxGrid_GetDefaultRendererForCell, 436). --define(wxGrid_GetDefaultRendererForType, 437). --define(wxGrid_GetDefaultRowLabelSize, 438). --define(wxGrid_GetDefaultRowSize, 439). --define(wxGrid_GetGridCursorCol, 440). --define(wxGrid_GetGridCursorRow, 441). --define(wxGrid_GetGridLineColour, 442). --define(wxGrid_GridLinesEnabled, 443). --define(wxGrid_GetLabelBackgroundColour, 444). --define(wxGrid_GetLabelFont, 445). --define(wxGrid_GetLabelTextColour, 446). --define(wxGrid_GetNumberCols, 447). --define(wxGrid_GetNumberRows, 448). --define(wxGrid_GetOrCreateCellAttr, 449). --define(wxGrid_GetRowMinimalAcceptableHeight, 450). --define(wxGrid_GetRowLabelAlignment, 451). --define(wxGrid_GetRowLabelSize, 452). --define(wxGrid_GetRowLabelValue, 453). --define(wxGrid_GetRowSize, 454). --define(wxGrid_GetScrollLineX, 455). --define(wxGrid_GetScrollLineY, 456). --define(wxGrid_GetSelectedCells, 457). --define(wxGrid_GetSelectedCols, 458). --define(wxGrid_GetSelectedRows, 459). --define(wxGrid_GetSelectionBackground, 460). --define(wxGrid_GetSelectionBlockTopLeft, 461). --define(wxGrid_GetSelectionBlockBottomRight, 462). --define(wxGrid_GetSelectionForeground, 463). --define(wxGrid_GetViewWidth, 464). --define(wxGrid_GetGridWindow, 465). --define(wxGrid_GetGridRowLabelWindow, 466). --define(wxGrid_GetGridColLabelWindow, 467). --define(wxGrid_GetGridCornerLabelWindow, 468). --define(wxGrid_HideCellEditControl, 469). --define(wxGrid_InsertCols, 470). --define(wxGrid_InsertRows, 471). --define(wxGrid_IsCellEditControlEnabled, 472). --define(wxGrid_IsCurrentCellReadOnly, 473). --define(wxGrid_IsEditable, 474). --define(wxGrid_IsInSelection_2, 475). --define(wxGrid_IsInSelection_1, 476). --define(wxGrid_IsReadOnly, 477). --define(wxGrid_IsSelection, 478). --define(wxGrid_IsVisible_3, 479). --define(wxGrid_IsVisible_2, 480). --define(wxGrid_MakeCellVisible_2, 481). --define(wxGrid_MakeCellVisible_1, 482). --define(wxGrid_MoveCursorDown, 483). --define(wxGrid_MoveCursorLeft, 484). --define(wxGrid_MoveCursorRight, 485). --define(wxGrid_MoveCursorUp, 486). --define(wxGrid_MoveCursorDownBlock, 487). --define(wxGrid_MoveCursorLeftBlock, 488). --define(wxGrid_MoveCursorRightBlock, 489). --define(wxGrid_MoveCursorUpBlock, 490). --define(wxGrid_MovePageDown, 491). --define(wxGrid_MovePageUp, 492). --define(wxGrid_RegisterDataType, 493). --define(wxGrid_SaveEditControlValue, 494). --define(wxGrid_SelectAll, 495). --define(wxGrid_SelectBlock_5, 496). --define(wxGrid_SelectBlock_3, 497). --define(wxGrid_SelectCol, 498). --define(wxGrid_SelectRow, 499). --define(wxGrid_SetCellAlignment_4, 500). --define(wxGrid_SetCellAlignment_3, 501). --define(wxGrid_SetCellAlignment_1, 502). --define(wxGrid_SetCellBackgroundColour_3_0, 503). --define(wxGrid_SetCellBackgroundColour_1, 504). --define(wxGrid_SetCellBackgroundColour_3_1, 505). --define(wxGrid_SetCellEditor, 506). --define(wxGrid_SetCellFont, 507). --define(wxGrid_SetCellRenderer, 508). --define(wxGrid_SetCellTextColour_3_0, 509). --define(wxGrid_SetCellTextColour_3_1, 510). --define(wxGrid_SetCellTextColour_1, 511). --define(wxGrid_SetCellValue_3_0, 512). --define(wxGrid_SetCellValue_2, 513). --define(wxGrid_SetCellValue_3_1, 514). --define(wxGrid_SetColAttr, 515). --define(wxGrid_SetColFormatBool, 516). --define(wxGrid_SetColFormatNumber, 517). --define(wxGrid_SetColFormatFloat, 518). --define(wxGrid_SetColFormatCustom, 519). --define(wxGrid_SetColLabelAlignment, 520). --define(wxGrid_SetColLabelSize, 521). --define(wxGrid_SetColLabelValue, 522). --define(wxGrid_SetColMinimalWidth, 523). --define(wxGrid_SetColMinimalAcceptableWidth, 524). --define(wxGrid_SetColSize, 525). --define(wxGrid_SetDefaultCellAlignment, 526). --define(wxGrid_SetDefaultCellBackgroundColour, 527). --define(wxGrid_SetDefaultCellFont, 528). --define(wxGrid_SetDefaultCellTextColour, 529). --define(wxGrid_SetDefaultEditor, 530). --define(wxGrid_SetDefaultRenderer, 531). --define(wxGrid_SetDefaultColSize, 532). --define(wxGrid_SetDefaultRowSize, 533). --define(wxGrid_SetGridCursor, 534). --define(wxGrid_SetGridLineColour, 535). --define(wxGrid_SetLabelBackgroundColour, 536). --define(wxGrid_SetLabelFont, 537). --define(wxGrid_SetLabelTextColour, 538). --define(wxGrid_SetMargins, 539). --define(wxGrid_SetReadOnly, 540). --define(wxGrid_SetRowAttr, 541). --define(wxGrid_SetRowLabelAlignment, 542). --define(wxGrid_SetRowLabelSize, 543). --define(wxGrid_SetRowLabelValue, 544). --define(wxGrid_SetRowMinimalHeight, 545). --define(wxGrid_SetRowMinimalAcceptableHeight, 546). --define(wxGrid_SetRowSize, 547). --define(wxGrid_SetScrollLineX, 548). --define(wxGrid_SetScrollLineY, 549). --define(wxGrid_SetSelectionBackground, 550). --define(wxGrid_SetSelectionForeground, 551). --define(wxGrid_SetSelectionMode, 552). --define(wxGrid_ShowCellEditControl, 553). --define(wxGrid_XToCol, 554). --define(wxGrid_XToEdgeOfCol, 555). --define(wxGrid_YToEdgeOfRow, 556). --define(wxGrid_YToRow, 557). --define(wxGridCellRenderer_Draw, 558). --define(wxGridCellRenderer_GetBestSize, 559). --define(wxGridCellEditor_Create, 560). --define(wxGridCellEditor_IsCreated, 561). --define(wxGridCellEditor_SetSize, 562). --define(wxGridCellEditor_Show, 563). --define(wxGridCellEditor_PaintBackground, 564). --define(wxGridCellEditor_BeginEdit, 565). --define(wxGridCellEditor_EndEdit, 566). --define(wxGridCellEditor_Reset, 567). --define(wxGridCellEditor_StartingKey, 568). --define(wxGridCellEditor_StartingClick, 569). --define(wxGridCellEditor_HandleReturn, 570). --define(wxGridCellBoolRenderer_new, 571). --define(wxGridCellBoolRenderer_destroy, 572). --define(wxGridCellBoolEditor_new, 573). --define(wxGridCellBoolEditor_IsTrueValue, 574). --define(wxGridCellBoolEditor_UseStringValues, 575). --define(wxGridCellBoolEditor_destroy, 576). --define(wxGridCellFloatRenderer_new, 577). --define(wxGridCellFloatRenderer_GetPrecision, 578). --define(wxGridCellFloatRenderer_GetWidth, 579). --define(wxGridCellFloatRenderer_SetParameters, 580). --define(wxGridCellFloatRenderer_SetPrecision, 581). --define(wxGridCellFloatRenderer_SetWidth, 582). --define(wxGridCellFloatRenderer_destroy, 583). --define(wxGridCellFloatEditor_new, 584). --define(wxGridCellFloatEditor_SetParameters, 585). --define(wxGridCellFloatEditor_destroy, 586). --define(wxGridCellStringRenderer_new, 587). --define(wxGridCellStringRenderer_destroy, 588). --define(wxGridCellTextEditor_new, 589). --define(wxGridCellTextEditor_SetParameters, 590). --define(wxGridCellTextEditor_destroy, 591). --define(wxGridCellChoiceEditor_new, 593). --define(wxGridCellChoiceEditor_SetParameters, 594). --define(wxGridCellChoiceEditor_destroy, 595). --define(wxGridCellNumberRenderer_new, 596). --define(wxGridCellNumberRenderer_destroy, 597). --define(wxGridCellNumberEditor_new, 598). --define(wxGridCellNumberEditor_GetValue, 599). --define(wxGridCellNumberEditor_SetParameters, 600). --define(wxGridCellNumberEditor_destroy, 601). --define(wxGridCellAttr_SetTextColour, 602). --define(wxGridCellAttr_SetBackgroundColour, 603). --define(wxGridCellAttr_SetFont, 604). --define(wxGridCellAttr_SetAlignment, 605). --define(wxGridCellAttr_SetReadOnly, 606). --define(wxGridCellAttr_SetRenderer, 607). --define(wxGridCellAttr_SetEditor, 608). --define(wxGridCellAttr_HasTextColour, 609). --define(wxGridCellAttr_HasBackgroundColour, 610). --define(wxGridCellAttr_HasFont, 611). --define(wxGridCellAttr_HasAlignment, 612). --define(wxGridCellAttr_HasRenderer, 613). --define(wxGridCellAttr_HasEditor, 614). --define(wxGridCellAttr_GetTextColour, 615). --define(wxGridCellAttr_GetBackgroundColour, 616). --define(wxGridCellAttr_GetFont, 617). --define(wxGridCellAttr_GetAlignment, 618). --define(wxGridCellAttr_GetRenderer, 619). --define(wxGridCellAttr_GetEditor, 620). --define(wxGridCellAttr_IsReadOnly, 621). --define(wxGridCellAttr_SetDefAttr, 622). --define(wxDC_Blit, 623). --define(wxDC_CalcBoundingBox, 624). --define(wxDC_Clear, 625). --define(wxDC_ComputeScaleAndOrigin, 626). --define(wxDC_CrossHair, 627). --define(wxDC_DestroyClippingRegion, 628). --define(wxDC_DeviceToLogicalX, 629). --define(wxDC_DeviceToLogicalXRel, 630). --define(wxDC_DeviceToLogicalY, 631). --define(wxDC_DeviceToLogicalYRel, 632). --define(wxDC_DrawArc, 633). --define(wxDC_DrawBitmap, 634). --define(wxDC_DrawCheckMark, 635). --define(wxDC_DrawCircle, 636). --define(wxDC_DrawEllipse_2, 638). --define(wxDC_DrawEllipse_1, 639). --define(wxDC_DrawEllipticArc, 640). --define(wxDC_DrawIcon, 641). --define(wxDC_DrawLabel, 642). --define(wxDC_DrawLine, 643). --define(wxDC_DrawLines, 644). --define(wxDC_DrawPolygon, 646). --define(wxDC_DrawPoint, 648). --define(wxDC_DrawRectangle_2, 650). --define(wxDC_DrawRectangle_1, 651). --define(wxDC_DrawRotatedText, 652). --define(wxDC_DrawRoundedRectangle_3, 654). --define(wxDC_DrawRoundedRectangle_2, 655). --define(wxDC_DrawText, 656). --define(wxDC_EndDoc, 657). --define(wxDC_EndPage, 658). --define(wxDC_FloodFill, 659). --define(wxDC_GetBackground, 660). --define(wxDC_GetBackgroundMode, 661). --define(wxDC_GetBrush, 662). --define(wxDC_GetCharHeight, 663). --define(wxDC_GetCharWidth, 664). --define(wxDC_GetClippingBox, 665). --define(wxDC_GetFont, 667). --define(wxDC_GetLayoutDirection, 668). --define(wxDC_GetLogicalFunction, 669). --define(wxDC_GetMapMode, 670). --define(wxDC_GetMultiLineTextExtent_4, 671). --define(wxDC_GetMultiLineTextExtent_1, 672). --define(wxDC_GetPartialTextExtents, 673). --define(wxDC_GetPen, 674). --define(wxDC_GetPixel, 675). --define(wxDC_GetPPI, 676). --define(wxDC_GetSize, 678). --define(wxDC_GetSizeMM, 680). --define(wxDC_GetTextBackground, 681). --define(wxDC_GetTextExtent_4, 682). --define(wxDC_GetTextExtent_1, 683). --define(wxDC_GetTextForeground, 685). --define(wxDC_GetUserScale, 686). --define(wxDC_GradientFillConcentric_3, 687). --define(wxDC_GradientFillConcentric_4, 688). --define(wxDC_GradientFillLinear, 689). --define(wxDC_LogicalToDeviceX, 690). --define(wxDC_LogicalToDeviceXRel, 691). --define(wxDC_LogicalToDeviceY, 692). --define(wxDC_LogicalToDeviceYRel, 693). --define(wxDC_MaxX, 694). --define(wxDC_MaxY, 695). --define(wxDC_MinX, 696). --define(wxDC_MinY, 697). --define(wxDC_IsOk, 698). --define(wxDC_ResetBoundingBox, 699). --define(wxDC_SetAxisOrientation, 700). --define(wxDC_SetBackground, 701). --define(wxDC_SetBackgroundMode, 702). --define(wxDC_SetBrush, 703). --define(wxDC_SetClippingRegion_2, 705). --define(wxDC_SetClippingRegion_1_1, 706). --define(wxDC_SetClippingRegion_1_0, 707). --define(wxDC_SetDeviceOrigin, 708). --define(wxDC_SetFont, 709). --define(wxDC_SetLayoutDirection, 710). --define(wxDC_SetLogicalFunction, 711). --define(wxDC_SetMapMode, 712). --define(wxDC_SetPalette, 713). --define(wxDC_SetPen, 714). --define(wxDC_SetTextBackground, 715). --define(wxDC_SetTextForeground, 716). --define(wxDC_SetUserScale, 717). --define(wxDC_StartDoc, 718). --define(wxDC_StartPage, 719). --define(wxMirrorDC_new, 720). --define(wxMirrorDC_destroy, 721). --define(wxScreenDC_new, 722). --define(wxScreenDC_destruct, 723). --define(wxPostScriptDC_new_0, 724). --define(wxPostScriptDC_new_1, 725). --define(wxPostScriptDC_destruct, 726). --define(wxPostScriptDC_SetResolution, 727). --define(wxPostScriptDC_GetResolution, 728). --define(wxWindowDC_new_0, 729). --define(wxWindowDC_new_1, 730). --define(wxWindowDC_destruct, 731). --define(wxClientDC_new_0, 732). --define(wxClientDC_new_1, 733). --define(wxClientDC_destroy, 734). --define(wxPaintDC_new_0, 735). --define(wxPaintDC_new_1, 736). --define(wxPaintDC_destroy, 737). --define(wxMemoryDC_new_1_0, 739). --define(wxMemoryDC_new_1_1, 740). --define(wxMemoryDC_new_0, 741). --define(wxMemoryDC_destruct, 743). --define(wxMemoryDC_SelectObject, 744). --define(wxMemoryDC_SelectObjectAsSource, 745). --define(wxBufferedDC_new_0, 746). --define(wxBufferedDC_new_2, 747). --define(wxBufferedDC_new_3, 748). --define(wxBufferedDC_destruct, 749). --define(wxBufferedDC_Init_2, 750). --define(wxBufferedDC_Init_3, 751). --define(wxBufferedPaintDC_new_3, 752). --define(wxBufferedPaintDC_new_2, 753). --define(wxBufferedPaintDC_destruct, 754). --define(wxGraphicsObject_destruct, 755). --define(wxGraphicsObject_GetRenderer, 756). --define(wxGraphicsObject_IsNull, 757). --define(wxGraphicsContext_destruct, 758). --define(wxGraphicsContext_Create_1_1, 759). --define(wxGraphicsContext_Create_1_0, 760). --define(wxGraphicsContext_Create_0, 761). --define(wxGraphicsContext_CreatePen, 762). --define(wxGraphicsContext_CreateBrush, 763). --define(wxGraphicsContext_CreateRadialGradientBrush, 764). --define(wxGraphicsContext_CreateLinearGradientBrush, 765). --define(wxGraphicsContext_CreateFont, 766). --define(wxGraphicsContext_CreateMatrix, 767). --define(wxGraphicsContext_CreatePath, 768). --define(wxGraphicsContext_Clip_1, 769). --define(wxGraphicsContext_Clip_4, 770). --define(wxGraphicsContext_ResetClip, 771). --define(wxGraphicsContext_DrawBitmap, 772). --define(wxGraphicsContext_DrawEllipse, 773). --define(wxGraphicsContext_DrawIcon, 774). --define(wxGraphicsContext_DrawLines, 775). --define(wxGraphicsContext_DrawPath, 776). --define(wxGraphicsContext_DrawRectangle, 777). --define(wxGraphicsContext_DrawRoundedRectangle, 778). --define(wxGraphicsContext_DrawText_3, 779). --define(wxGraphicsContext_DrawText_4_0, 780). --define(wxGraphicsContext_DrawText_4_1, 781). --define(wxGraphicsContext_DrawText_5, 782). --define(wxGraphicsContext_FillPath, 783). --define(wxGraphicsContext_StrokePath, 784). --define(wxGraphicsContext_GetPartialTextExtents, 785). --define(wxGraphicsContext_GetTextExtent, 786). --define(wxGraphicsContext_Rotate, 787). --define(wxGraphicsContext_Scale, 788). --define(wxGraphicsContext_Translate, 789). --define(wxGraphicsContext_GetTransform, 790). --define(wxGraphicsContext_SetTransform, 791). --define(wxGraphicsContext_ConcatTransform, 792). --define(wxGraphicsContext_SetBrush_1_1, 793). --define(wxGraphicsContext_SetBrush_1_0, 794). --define(wxGraphicsContext_SetFont_1, 795). --define(wxGraphicsContext_SetFont_2, 796). --define(wxGraphicsContext_SetPen_1_0, 797). --define(wxGraphicsContext_SetPen_1_1, 798). --define(wxGraphicsContext_StrokeLine, 799). --define(wxGraphicsContext_StrokeLines, 800). --define(wxGraphicsMatrix_Concat, 802). --define(wxGraphicsMatrix_Get, 804). --define(wxGraphicsMatrix_Invert, 805). --define(wxGraphicsMatrix_IsEqual, 806). --define(wxGraphicsMatrix_IsIdentity, 808). --define(wxGraphicsMatrix_Rotate, 809). --define(wxGraphicsMatrix_Scale, 810). --define(wxGraphicsMatrix_Translate, 811). --define(wxGraphicsMatrix_Set, 812). --define(wxGraphicsMatrix_TransformPoint, 813). --define(wxGraphicsMatrix_TransformDistance, 814). --define(wxGraphicsPath_MoveToPoint_2, 815). --define(wxGraphicsPath_MoveToPoint_1, 816). --define(wxGraphicsPath_AddArc_6, 817). --define(wxGraphicsPath_AddArc_5, 818). --define(wxGraphicsPath_AddArcToPoint, 819). --define(wxGraphicsPath_AddCircle, 820). --define(wxGraphicsPath_AddCurveToPoint_6, 821). --define(wxGraphicsPath_AddCurveToPoint_3, 822). --define(wxGraphicsPath_AddEllipse, 823). --define(wxGraphicsPath_AddLineToPoint_2, 824). --define(wxGraphicsPath_AddLineToPoint_1, 825). --define(wxGraphicsPath_AddPath, 826). --define(wxGraphicsPath_AddQuadCurveToPoint, 827). --define(wxGraphicsPath_AddRectangle, 828). --define(wxGraphicsPath_AddRoundedRectangle, 829). --define(wxGraphicsPath_CloseSubpath, 830). --define(wxGraphicsPath_Contains_3, 831). --define(wxGraphicsPath_Contains_2, 832). --define(wxGraphicsPath_GetBox, 834). --define(wxGraphicsPath_GetCurrentPoint, 836). --define(wxGraphicsPath_Transform, 837). --define(wxGraphicsRenderer_GetDefaultRenderer, 838). --define(wxGraphicsRenderer_CreateContext_1_1, 839). --define(wxGraphicsRenderer_CreateContext_1_0, 840). --define(wxGraphicsRenderer_CreatePen, 841). --define(wxGraphicsRenderer_CreateBrush, 842). --define(wxGraphicsRenderer_CreateLinearGradientBrush, 843). --define(wxGraphicsRenderer_CreateRadialGradientBrush, 844). --define(wxGraphicsRenderer_CreateFont, 845). --define(wxGraphicsRenderer_CreateMatrix, 846). --define(wxGraphicsRenderer_CreatePath, 847). --define(wxMenuBar_new_1, 849). --define(wxMenuBar_new_0, 851). --define(wxMenuBar_destruct, 853). --define(wxMenuBar_Append, 854). --define(wxMenuBar_Check, 855). --define(wxMenuBar_Enable_2, 856). --define(wxMenuBar_Enable_1, 857). --define(wxMenuBar_EnableTop, 858). --define(wxMenuBar_FindMenu, 859). --define(wxMenuBar_FindMenuItem, 860). --define(wxMenuBar_FindItem, 861). --define(wxMenuBar_GetHelpString, 862). --define(wxMenuBar_GetLabel_1, 863). --define(wxMenuBar_GetLabel_0, 864). --define(wxMenuBar_GetLabelTop, 865). --define(wxMenuBar_GetMenu, 866). --define(wxMenuBar_GetMenuCount, 867). --define(wxMenuBar_Insert, 868). --define(wxMenuBar_IsChecked, 869). --define(wxMenuBar_IsEnabled_1, 870). --define(wxMenuBar_IsEnabled_0, 871). --define(wxMenuBar_Remove, 872). --define(wxMenuBar_Replace, 873). --define(wxMenuBar_SetHelpString, 874). --define(wxMenuBar_SetLabel_2, 875). --define(wxMenuBar_SetLabel_1, 876). --define(wxMenuBar_SetLabelTop, 877). --define(wxControl_GetLabel, 878). --define(wxControl_SetLabel, 879). --define(wxControlWithItems_Append_1, 880). --define(wxControlWithItems_Append_2, 881). --define(wxControlWithItems_appendStrings_1, 882). --define(wxControlWithItems_Clear, 883). --define(wxControlWithItems_Delete, 884). --define(wxControlWithItems_FindString, 885). --define(wxControlWithItems_getClientData, 886). --define(wxControlWithItems_setClientData, 887). --define(wxControlWithItems_GetCount, 888). --define(wxControlWithItems_GetSelection, 889). --define(wxControlWithItems_GetString, 890). --define(wxControlWithItems_GetStringSelection, 891). --define(wxControlWithItems_Insert_2, 892). --define(wxControlWithItems_Insert_3, 893). --define(wxControlWithItems_IsEmpty, 894). --define(wxControlWithItems_Select, 895). --define(wxControlWithItems_SetSelection, 896). --define(wxControlWithItems_SetString, 897). --define(wxControlWithItems_SetStringSelection, 898). --define(wxMenu_new_2, 901). --define(wxMenu_new_1, 902). --define(wxMenu_destruct, 904). --define(wxMenu_Append_3, 905). --define(wxMenu_Append_1, 906). --define(wxMenu_Append_4_0, 907). --define(wxMenu_Append_4_1, 908). --define(wxMenu_AppendCheckItem, 909). --define(wxMenu_AppendRadioItem, 910). --define(wxMenu_AppendSeparator, 911). --define(wxMenu_Break, 912). --define(wxMenu_Check, 913). --define(wxMenu_Delete_1_0, 914). --define(wxMenu_Delete_1_1, 915). --define(wxMenu_Destroy_1_0, 916). --define(wxMenu_Destroy_1_1, 917). --define(wxMenu_Enable, 918). --define(wxMenu_FindItem_1, 919). --define(wxMenu_FindItem_2, 920). --define(wxMenu_FindItemByPosition, 921). --define(wxMenu_GetHelpString, 922). --define(wxMenu_GetLabel, 923). --define(wxMenu_GetMenuItemCount, 924). --define(wxMenu_GetMenuItems, 925). --define(wxMenu_GetTitle, 927). --define(wxMenu_Insert_2, 928). --define(wxMenu_Insert_3, 929). --define(wxMenu_Insert_5_1, 930). --define(wxMenu_Insert_5_0, 931). --define(wxMenu_InsertCheckItem, 932). --define(wxMenu_InsertRadioItem, 933). --define(wxMenu_InsertSeparator, 934). --define(wxMenu_IsChecked, 935). --define(wxMenu_IsEnabled, 936). --define(wxMenu_Prepend_1, 937). --define(wxMenu_Prepend_2, 938). --define(wxMenu_Prepend_4_1, 939). --define(wxMenu_Prepend_4_0, 940). --define(wxMenu_PrependCheckItem, 941). --define(wxMenu_PrependRadioItem, 942). --define(wxMenu_PrependSeparator, 943). --define(wxMenu_Remove_1_0, 944). --define(wxMenu_Remove_1_1, 945). --define(wxMenu_SetHelpString, 946). --define(wxMenu_SetLabel, 947). --define(wxMenu_SetTitle, 948). --define(wxMenuItem_new, 949). --define(wxMenuItem_destruct, 951). --define(wxMenuItem_Check, 952). --define(wxMenuItem_Enable, 953). --define(wxMenuItem_GetBitmap, 954). --define(wxMenuItem_GetHelp, 955). --define(wxMenuItem_GetId, 956). --define(wxMenuItem_GetKind, 957). --define(wxMenuItem_GetLabel, 958). --define(wxMenuItem_GetLabelFromText, 959). --define(wxMenuItem_GetMenu, 960). --define(wxMenuItem_GetText, 961). --define(wxMenuItem_GetSubMenu, 962). --define(wxMenuItem_IsCheckable, 963). --define(wxMenuItem_IsChecked, 964). --define(wxMenuItem_IsEnabled, 965). --define(wxMenuItem_IsSeparator, 966). --define(wxMenuItem_IsSubMenu, 967). --define(wxMenuItem_SetBitmap, 968). --define(wxMenuItem_SetHelp, 969). --define(wxMenuItem_SetMenu, 970). --define(wxMenuItem_SetSubMenu, 971). --define(wxMenuItem_SetText, 972). --define(wxToolBar_AddControl, 973). --define(wxToolBar_AddSeparator, 974). --define(wxToolBar_AddTool_5, 975). --define(wxToolBar_AddTool_4_0, 976). --define(wxToolBar_AddTool_1, 977). --define(wxToolBar_AddTool_4_1, 978). --define(wxToolBar_AddTool_3, 979). --define(wxToolBar_AddTool_6, 980). --define(wxToolBar_AddCheckTool, 981). --define(wxToolBar_AddRadioTool, 982). --define(wxToolBar_DeleteTool, 983). --define(wxToolBar_DeleteToolByPos, 984). --define(wxToolBar_EnableTool, 985). --define(wxToolBar_FindById, 986). --define(wxToolBar_FindControl, 987). --define(wxToolBar_FindToolForPosition, 988). --define(wxToolBar_GetToolSize, 989). --define(wxToolBar_GetToolBitmapSize, 990). --define(wxToolBar_GetMargins, 991). --define(wxToolBar_GetToolEnabled, 992). --define(wxToolBar_GetToolLongHelp, 993). --define(wxToolBar_GetToolPacking, 994). --define(wxToolBar_GetToolPos, 995). --define(wxToolBar_GetToolSeparation, 996). --define(wxToolBar_GetToolShortHelp, 997). --define(wxToolBar_GetToolState, 998). --define(wxToolBar_InsertControl, 999). --define(wxToolBar_InsertSeparator, 1000). --define(wxToolBar_InsertTool_5, 1001). --define(wxToolBar_InsertTool_2, 1002). --define(wxToolBar_InsertTool_4, 1003). --define(wxToolBar_Realize, 1004). --define(wxToolBar_RemoveTool, 1005). --define(wxToolBar_SetMargins, 1006). --define(wxToolBar_SetToolBitmapSize, 1007). --define(wxToolBar_SetToolLongHelp, 1008). --define(wxToolBar_SetToolPacking, 1009). --define(wxToolBar_SetToolShortHelp, 1010). --define(wxToolBar_SetToolSeparation, 1011). --define(wxToolBar_ToggleTool, 1012). --define(wxStatusBar_new_0, 1014). --define(wxStatusBar_new_2, 1015). --define(wxStatusBar_destruct, 1017). --define(wxStatusBar_Create, 1018). --define(wxStatusBar_GetFieldRect, 1019). --define(wxStatusBar_GetFieldsCount, 1020). --define(wxStatusBar_GetStatusText, 1021). --define(wxStatusBar_PopStatusText, 1022). --define(wxStatusBar_PushStatusText, 1023). --define(wxStatusBar_SetFieldsCount, 1024). --define(wxStatusBar_SetMinHeight, 1025). --define(wxStatusBar_SetStatusText, 1026). --define(wxStatusBar_SetStatusWidths, 1027). --define(wxStatusBar_SetStatusStyles, 1028). --define(wxBitmap_new_0, 1029). --define(wxBitmap_new_3, 1030). --define(wxBitmap_new_4, 1031). --define(wxBitmap_new_2_0, 1032). --define(wxBitmap_new_2_1, 1033). --define(wxBitmap_destruct, 1034). --define(wxBitmap_ConvertToImage, 1035). --define(wxBitmap_CopyFromIcon, 1036). --define(wxBitmap_Create, 1037). --define(wxBitmap_GetDepth, 1038). --define(wxBitmap_GetHeight, 1039). --define(wxBitmap_GetPalette, 1040). --define(wxBitmap_GetMask, 1041). --define(wxBitmap_GetWidth, 1042). --define(wxBitmap_GetSubBitmap, 1043). --define(wxBitmap_LoadFile, 1044). --define(wxBitmap_Ok, 1045). --define(wxBitmap_SaveFile, 1046). --define(wxBitmap_SetDepth, 1047). --define(wxBitmap_SetHeight, 1048). --define(wxBitmap_SetMask, 1049). --define(wxBitmap_SetPalette, 1050). --define(wxBitmap_SetWidth, 1051). --define(wxIcon_new_0, 1052). --define(wxIcon_new_2, 1053). --define(wxIcon_new_1, 1054). --define(wxIcon_CopyFromBitmap, 1055). --define(wxIcon_destroy, 1056). --define(wxIconBundle_new_0, 1057). --define(wxIconBundle_new_2, 1058). --define(wxIconBundle_new_1_0, 1059). --define(wxIconBundle_new_1_1, 1060). --define(wxIconBundle_destruct, 1061). --define(wxIconBundle_AddIcon_2, 1062). --define(wxIconBundle_AddIcon_1, 1063). --define(wxIconBundle_GetIcon_1_1, 1064). --define(wxIconBundle_GetIcon_1_0, 1065). --define(wxCursor_new_0, 1066). --define(wxCursor_new_1_0, 1067). --define(wxCursor_new_1_1, 1068). --define(wxCursor_new_4, 1069). --define(wxCursor_destruct, 1070). --define(wxCursor_Ok, 1071). --define(wxMask_new_0, 1072). --define(wxMask_new_2_1, 1073). --define(wxMask_new_2_0, 1074). --define(wxMask_new_1, 1075). --define(wxMask_destruct, 1076). --define(wxMask_Create_2_1, 1077). --define(wxMask_Create_2_0, 1078). --define(wxMask_Create_1, 1079). --define(wxImage_new_0, 1080). --define(wxImage_new_3_0, 1081). --define(wxImage_new_4, 1082). --define(wxImage_new_5, 1083). --define(wxImage_new_2, 1084). --define(wxImage_new_3_1, 1085). --define(wxImage_Blur, 1086). --define(wxImage_BlurHorizontal, 1087). --define(wxImage_BlurVertical, 1088). --define(wxImage_ConvertAlphaToMask, 1089). --define(wxImage_ConvertToGreyscale, 1090). --define(wxImage_ConvertToMono, 1091). --define(wxImage_Copy, 1092). --define(wxImage_Create_3, 1093). --define(wxImage_Create_4, 1094). --define(wxImage_Create_5, 1095). --define(wxImage_Destroy, 1096). --define(wxImage_FindFirstUnusedColour, 1097). --define(wxImage_GetImageExtWildcard, 1098). --define(wxImage_GetAlpha_2, 1099). --define(wxImage_GetAlpha_0, 1100). --define(wxImage_GetBlue, 1101). --define(wxImage_GetData, 1102). --define(wxImage_GetGreen, 1103). --define(wxImage_GetImageCount, 1104). --define(wxImage_GetHeight, 1105). --define(wxImage_GetMaskBlue, 1106). --define(wxImage_GetMaskGreen, 1107). --define(wxImage_GetMaskRed, 1108). --define(wxImage_GetOrFindMaskColour, 1109). --define(wxImage_GetPalette, 1110). --define(wxImage_GetRed, 1111). --define(wxImage_GetSubImage, 1112). --define(wxImage_GetWidth, 1113). --define(wxImage_HasAlpha, 1114). --define(wxImage_HasMask, 1115). --define(wxImage_GetOption, 1116). --define(wxImage_GetOptionInt, 1117). --define(wxImage_HasOption, 1118). --define(wxImage_InitAlpha, 1119). --define(wxImage_InitStandardHandlers, 1120). --define(wxImage_IsTransparent, 1121). --define(wxImage_LoadFile_2, 1122). --define(wxImage_LoadFile_3, 1123). --define(wxImage_Ok, 1124). --define(wxImage_RemoveHandler, 1125). --define(wxImage_Mirror, 1126). --define(wxImage_Replace, 1127). --define(wxImage_Rescale, 1128). --define(wxImage_Resize, 1129). --define(wxImage_Rotate, 1130). --define(wxImage_RotateHue, 1131). --define(wxImage_Rotate90, 1132). --define(wxImage_SaveFile_1, 1133). --define(wxImage_SaveFile_2_0, 1134). --define(wxImage_SaveFile_2_1, 1135). --define(wxImage_Scale, 1136). --define(wxImage_Size, 1137). --define(wxImage_SetAlpha_3, 1138). --define(wxImage_SetAlpha_2, 1139). --define(wxImage_SetData_2, 1140). --define(wxImage_SetData_4, 1141). --define(wxImage_SetMask, 1142). --define(wxImage_SetMaskColour, 1143). --define(wxImage_SetMaskFromImage, 1144). --define(wxImage_SetOption_2_1, 1145). --define(wxImage_SetOption_2_0, 1146). --define(wxImage_SetPalette, 1147). --define(wxImage_SetRGB_5, 1148). --define(wxImage_SetRGB_4, 1149). --define(wxImage_destroy, 1150). --define(wxBrush_new_0, 1151). --define(wxBrush_new_2, 1152). --define(wxBrush_new_1, 1153). --define(wxBrush_destruct, 1155). --define(wxBrush_GetColour, 1156). --define(wxBrush_GetStipple, 1157). --define(wxBrush_GetStyle, 1158). --define(wxBrush_IsHatch, 1159). --define(wxBrush_IsOk, 1160). --define(wxBrush_SetColour_1, 1161). --define(wxBrush_SetColour_3, 1162). --define(wxBrush_SetStipple, 1163). --define(wxBrush_SetStyle, 1164). --define(wxPen_new_0, 1165). --define(wxPen_new_2, 1166). --define(wxPen_destruct, 1167). --define(wxPen_GetCap, 1168). --define(wxPen_GetColour, 1169). --define(wxPen_GetJoin, 1170). --define(wxPen_GetStyle, 1171). --define(wxPen_GetWidth, 1172). --define(wxPen_IsOk, 1173). --define(wxPen_SetCap, 1174). --define(wxPen_SetColour_1, 1175). --define(wxPen_SetColour_3, 1176). --define(wxPen_SetJoin, 1177). --define(wxPen_SetStyle, 1178). --define(wxPen_SetWidth, 1179). --define(wxRegion_new_0, 1180). --define(wxRegion_new_4, 1181). --define(wxRegion_new_2, 1182). --define(wxRegion_new_1_1, 1183). --define(wxRegion_new_1_0, 1185). --define(wxRegion_destruct, 1187). --define(wxRegion_Clear, 1188). --define(wxRegion_Contains_2, 1189). --define(wxRegion_Contains_1_0, 1190). --define(wxRegion_Contains_4, 1191). --define(wxRegion_Contains_1_1, 1192). --define(wxRegion_ConvertToBitmap, 1193). --define(wxRegion_GetBox, 1194). --define(wxRegion_Intersect_4, 1195). --define(wxRegion_Intersect_1_1, 1196). --define(wxRegion_Intersect_1_0, 1197). --define(wxRegion_IsEmpty, 1198). --define(wxRegion_Subtract_4, 1199). --define(wxRegion_Subtract_1_1, 1200). --define(wxRegion_Subtract_1_0, 1201). --define(wxRegion_Offset_2, 1202). --define(wxRegion_Offset_1, 1203). --define(wxRegion_Union_4, 1204). --define(wxRegion_Union_1_2, 1205). --define(wxRegion_Union_1_1, 1206). --define(wxRegion_Union_1_0, 1207). --define(wxRegion_Union_3, 1208). --define(wxRegion_Xor_4, 1209). --define(wxRegion_Xor_1_1, 1210). --define(wxRegion_Xor_1_0, 1211). --define(wxAcceleratorTable_new_0, 1212). --define(wxAcceleratorTable_new_2, 1213). --define(wxAcceleratorTable_destruct, 1214). --define(wxAcceleratorTable_Ok, 1215). --define(wxAcceleratorEntry_new_1_0, 1216). --define(wxAcceleratorEntry_new_1_1, 1217). --define(wxAcceleratorEntry_GetCommand, 1218). --define(wxAcceleratorEntry_GetFlags, 1219). --define(wxAcceleratorEntry_GetKeyCode, 1220). --define(wxAcceleratorEntry_Set, 1221). --define(wxAcceleratorEntry_destroy, 1222). --define(wxCaret_new_3, 1227). --define(wxCaret_new_2, 1228). --define(wxCaret_destruct, 1230). --define(wxCaret_Create_3, 1231). --define(wxCaret_Create_2, 1232). --define(wxCaret_GetBlinkTime, 1233). --define(wxCaret_GetPosition, 1235). --define(wxCaret_GetSize, 1237). --define(wxCaret_GetWindow, 1238). --define(wxCaret_Hide, 1239). --define(wxCaret_IsOk, 1240). --define(wxCaret_IsVisible, 1241). --define(wxCaret_Move_2, 1242). --define(wxCaret_Move_1, 1243). --define(wxCaret_SetBlinkTime, 1244). --define(wxCaret_SetSize_2, 1245). --define(wxCaret_SetSize_1, 1246). --define(wxCaret_Show, 1247). --define(wxSizer_Add_2_1, 1248). --define(wxSizer_Add_2_0, 1249). --define(wxSizer_Add_3, 1250). --define(wxSizer_Add_2_3, 1251). --define(wxSizer_Add_2_2, 1252). --define(wxSizer_AddSpacer, 1253). --define(wxSizer_AddStretchSpacer, 1254). --define(wxSizer_CalcMin, 1255). --define(wxSizer_Clear, 1256). --define(wxSizer_Detach_1_2, 1257). --define(wxSizer_Detach_1_1, 1258). --define(wxSizer_Detach_1_0, 1259). --define(wxSizer_Fit, 1260). --define(wxSizer_FitInside, 1261). --define(wxSizer_GetChildren, 1262). --define(wxSizer_GetItem_2_1, 1263). --define(wxSizer_GetItem_2_0, 1264). --define(wxSizer_GetItem_1, 1265). --define(wxSizer_GetSize, 1266). --define(wxSizer_GetPosition, 1267). --define(wxSizer_GetMinSize, 1268). --define(wxSizer_Hide_2_0, 1269). --define(wxSizer_Hide_2_1, 1270). --define(wxSizer_Hide_1, 1271). --define(wxSizer_Insert_3_1, 1272). --define(wxSizer_Insert_3_0, 1273). --define(wxSizer_Insert_4, 1274). --define(wxSizer_Insert_3_3, 1275). --define(wxSizer_Insert_3_2, 1276). --define(wxSizer_Insert_2, 1277). --define(wxSizer_InsertSpacer, 1278). --define(wxSizer_InsertStretchSpacer, 1279). --define(wxSizer_IsShown_1_2, 1280). --define(wxSizer_IsShown_1_1, 1281). --define(wxSizer_IsShown_1_0, 1282). --define(wxSizer_Layout, 1283). --define(wxSizer_Prepend_2_1, 1284). --define(wxSizer_Prepend_2_0, 1285). --define(wxSizer_Prepend_3, 1286). --define(wxSizer_Prepend_2_3, 1287). --define(wxSizer_Prepend_2_2, 1288). --define(wxSizer_Prepend_1, 1289). --define(wxSizer_PrependSpacer, 1290). --define(wxSizer_PrependStretchSpacer, 1291). --define(wxSizer_RecalcSizes, 1292). --define(wxSizer_Remove_1_1, 1293). --define(wxSizer_Remove_1_0, 1294). --define(wxSizer_Replace_3_1, 1295). --define(wxSizer_Replace_3_0, 1296). --define(wxSizer_Replace_2, 1297). --define(wxSizer_SetDimension, 1298). --define(wxSizer_SetMinSize_2, 1299). --define(wxSizer_SetMinSize_1, 1300). --define(wxSizer_SetItemMinSize_3_2, 1301). --define(wxSizer_SetItemMinSize_2_2, 1302). --define(wxSizer_SetItemMinSize_3_1, 1303). --define(wxSizer_SetItemMinSize_2_1, 1304). --define(wxSizer_SetItemMinSize_3_0, 1305). --define(wxSizer_SetItemMinSize_2_0, 1306). --define(wxSizer_SetSizeHints, 1307). --define(wxSizer_SetVirtualSizeHints, 1308). --define(wxSizer_Show_2_2, 1309). --define(wxSizer_Show_2_1, 1310). --define(wxSizer_Show_2_0, 1311). --define(wxSizer_Show_1, 1312). --define(wxSizerFlags_new, 1313). --define(wxSizerFlags_Align, 1314). --define(wxSizerFlags_Border_2, 1315). --define(wxSizerFlags_Border_1, 1316). --define(wxSizerFlags_Center, 1317). --define(wxSizerFlags_Centre, 1318). --define(wxSizerFlags_Expand, 1319). --define(wxSizerFlags_Left, 1320). --define(wxSizerFlags_Proportion, 1321). --define(wxSizerFlags_Right, 1322). --define(wxSizerFlags_destroy, 1323). --define(wxSizerItem_new_5_1, 1324). --define(wxSizerItem_new_2_1, 1325). --define(wxSizerItem_new_5_0, 1326). --define(wxSizerItem_new_2_0, 1327). --define(wxSizerItem_new_6, 1328). --define(wxSizerItem_new_3, 1329). --define(wxSizerItem_new_0, 1330). --define(wxSizerItem_destruct, 1331). --define(wxSizerItem_CalcMin, 1332). --define(wxSizerItem_DeleteWindows, 1333). --define(wxSizerItem_DetachSizer, 1334). --define(wxSizerItem_GetBorder, 1335). --define(wxSizerItem_GetFlag, 1336). --define(wxSizerItem_GetMinSize, 1337). --define(wxSizerItem_GetPosition, 1338). --define(wxSizerItem_GetProportion, 1339). --define(wxSizerItem_GetRatio, 1340). --define(wxSizerItem_GetRect, 1341). --define(wxSizerItem_GetSize, 1342). --define(wxSizerItem_GetSizer, 1343). --define(wxSizerItem_GetSpacer, 1344). --define(wxSizerItem_GetUserData, 1345). --define(wxSizerItem_GetWindow, 1346). --define(wxSizerItem_IsSizer, 1347). --define(wxSizerItem_IsShown, 1348). --define(wxSizerItem_IsSpacer, 1349). --define(wxSizerItem_IsWindow, 1350). --define(wxSizerItem_SetBorder, 1351). --define(wxSizerItem_SetDimension, 1352). --define(wxSizerItem_SetFlag, 1353). --define(wxSizerItem_SetInitSize, 1354). --define(wxSizerItem_SetMinSize_1, 1355). --define(wxSizerItem_SetMinSize_2, 1356). --define(wxSizerItem_SetProportion, 1357). --define(wxSizerItem_SetRatio_2, 1358). --define(wxSizerItem_SetRatio_1_1, 1359). --define(wxSizerItem_SetRatio_1_0, 1360). --define(wxSizerItem_SetSizer, 1361). --define(wxSizerItem_SetSpacer_1, 1362). --define(wxSizerItem_SetSpacer_2, 1363). --define(wxSizerItem_SetWindow, 1364). --define(wxSizerItem_Show, 1365). --define(wxBoxSizer_new, 1366). --define(wxBoxSizer_GetOrientation, 1367). --define(wxBoxSizer_destroy, 1368). --define(wxStaticBoxSizer_new_2, 1369). --define(wxStaticBoxSizer_new_3, 1370). --define(wxStaticBoxSizer_GetStaticBox, 1371). --define(wxStaticBoxSizer_destroy, 1372). --define(wxGridSizer_new_4, 1373). --define(wxGridSizer_new_2, 1374). --define(wxGridSizer_GetCols, 1375). --define(wxGridSizer_GetHGap, 1376). --define(wxGridSizer_GetRows, 1377). --define(wxGridSizer_GetVGap, 1378). --define(wxGridSizer_SetCols, 1379). --define(wxGridSizer_SetHGap, 1380). --define(wxGridSizer_SetRows, 1381). --define(wxGridSizer_SetVGap, 1382). --define(wxGridSizer_destroy, 1383). --define(wxFlexGridSizer_new_4, 1384). --define(wxFlexGridSizer_new_2, 1385). --define(wxFlexGridSizer_AddGrowableCol, 1386). --define(wxFlexGridSizer_AddGrowableRow, 1387). --define(wxFlexGridSizer_GetFlexibleDirection, 1388). --define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1389). --define(wxFlexGridSizer_RemoveGrowableCol, 1390). --define(wxFlexGridSizer_RemoveGrowableRow, 1391). --define(wxFlexGridSizer_SetFlexibleDirection, 1392). --define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1393). --define(wxFlexGridSizer_destroy, 1394). --define(wxGridBagSizer_new, 1395). --define(wxGridBagSizer_Add_3_2, 1396). --define(wxGridBagSizer_Add_3_1, 1397). --define(wxGridBagSizer_Add_4, 1398). --define(wxGridBagSizer_Add_1_0, 1399). --define(wxGridBagSizer_Add_2_1, 1400). --define(wxGridBagSizer_Add_2_0, 1401). --define(wxGridBagSizer_Add_3_0, 1402). --define(wxGridBagSizer_Add_1_1, 1403). --define(wxGridBagSizer_CalcMin, 1404). --define(wxGridBagSizer_CheckForIntersection_2, 1405). --define(wxGridBagSizer_CheckForIntersection_3, 1406). --define(wxGridBagSizer_FindItem_1_1, 1407). --define(wxGridBagSizer_FindItem_1_0, 1408). --define(wxGridBagSizer_FindItemAtPoint, 1409). --define(wxGridBagSizer_FindItemAtPosition, 1410). --define(wxGridBagSizer_FindItemWithData, 1411). --define(wxGridBagSizer_GetCellSize, 1412). --define(wxGridBagSizer_GetEmptyCellSize, 1413). --define(wxGridBagSizer_GetItemPosition_1_2, 1414). --define(wxGridBagSizer_GetItemPosition_1_1, 1415). --define(wxGridBagSizer_GetItemPosition_1_0, 1416). --define(wxGridBagSizer_GetItemSpan_1_2, 1417). --define(wxGridBagSizer_GetItemSpan_1_1, 1418). --define(wxGridBagSizer_GetItemSpan_1_0, 1419). --define(wxGridBagSizer_SetEmptyCellSize, 1420). --define(wxGridBagSizer_SetItemPosition_2_2, 1421). --define(wxGridBagSizer_SetItemPosition_2_1, 1422). --define(wxGridBagSizer_SetItemPosition_2_0, 1423). --define(wxGridBagSizer_SetItemSpan_2_2, 1424). --define(wxGridBagSizer_SetItemSpan_2_1, 1425). --define(wxGridBagSizer_SetItemSpan_2_0, 1426). --define(wxGridBagSizer_destroy, 1427). --define(wxStdDialogButtonSizer_new, 1428). --define(wxStdDialogButtonSizer_AddButton, 1429). --define(wxStdDialogButtonSizer_Realize, 1430). --define(wxStdDialogButtonSizer_SetAffirmativeButton, 1431). --define(wxStdDialogButtonSizer_SetCancelButton, 1432). --define(wxStdDialogButtonSizer_SetNegativeButton, 1433). --define(wxStdDialogButtonSizer_destroy, 1434). --define(wxFont_new_0, 1435). --define(wxFont_new_1, 1436). --define(wxFont_new_5, 1437). --define(wxFont_destruct, 1439). --define(wxFont_IsFixedWidth, 1440). --define(wxFont_GetDefaultEncoding, 1441). --define(wxFont_GetFaceName, 1442). --define(wxFont_GetFamily, 1443). --define(wxFont_GetNativeFontInfoDesc, 1444). --define(wxFont_GetNativeFontInfoUserDesc, 1445). --define(wxFont_GetPointSize, 1446). --define(wxFont_GetStyle, 1447). --define(wxFont_GetUnderlined, 1448). --define(wxFont_GetWeight, 1449). --define(wxFont_Ok, 1450). --define(wxFont_SetDefaultEncoding, 1451). --define(wxFont_SetFaceName, 1452). --define(wxFont_SetFamily, 1453). --define(wxFont_SetPointSize, 1454). --define(wxFont_SetStyle, 1455). --define(wxFont_SetUnderlined, 1456). --define(wxFont_SetWeight, 1457). --define(wxToolTip_Enable, 1458). --define(wxToolTip_SetDelay, 1459). --define(wxToolTip_new, 1460). --define(wxToolTip_SetTip, 1461). --define(wxToolTip_GetTip, 1462). --define(wxToolTip_GetWindow, 1463). --define(wxToolTip_destroy, 1464). --define(wxButton_new_3, 1466). --define(wxButton_new_0, 1467). --define(wxButton_destruct, 1468). --define(wxButton_Create, 1469). --define(wxButton_GetDefaultSize, 1470). --define(wxButton_SetDefault, 1471). --define(wxButton_SetLabel, 1472). --define(wxBitmapButton_new_4, 1474). --define(wxBitmapButton_new_0, 1475). --define(wxBitmapButton_Create, 1476). --define(wxBitmapButton_GetBitmapDisabled, 1477). --define(wxBitmapButton_GetBitmapFocus, 1479). --define(wxBitmapButton_GetBitmapLabel, 1481). --define(wxBitmapButton_GetBitmapSelected, 1483). --define(wxBitmapButton_SetBitmapDisabled, 1485). --define(wxBitmapButton_SetBitmapFocus, 1486). --define(wxBitmapButton_SetBitmapLabel, 1487). --define(wxBitmapButton_SetBitmapSelected, 1488). --define(wxBitmapButton_destroy, 1489). --define(wxToggleButton_new_0, 1490). --define(wxToggleButton_new_4, 1491). --define(wxToggleButton_Create, 1492). --define(wxToggleButton_GetValue, 1493). --define(wxToggleButton_SetValue, 1494). --define(wxToggleButton_destroy, 1495). --define(wxCalendarCtrl_new_0, 1496). --define(wxCalendarCtrl_new_3, 1497). --define(wxCalendarCtrl_Create, 1498). --define(wxCalendarCtrl_destruct, 1499). --define(wxCalendarCtrl_SetDate, 1500). --define(wxCalendarCtrl_GetDate, 1501). --define(wxCalendarCtrl_EnableYearChange, 1502). --define(wxCalendarCtrl_EnableMonthChange, 1503). --define(wxCalendarCtrl_EnableHolidayDisplay, 1504). --define(wxCalendarCtrl_SetHeaderColours, 1505). --define(wxCalendarCtrl_GetHeaderColourFg, 1506). --define(wxCalendarCtrl_GetHeaderColourBg, 1507). --define(wxCalendarCtrl_SetHighlightColours, 1508). --define(wxCalendarCtrl_GetHighlightColourFg, 1509). --define(wxCalendarCtrl_GetHighlightColourBg, 1510). --define(wxCalendarCtrl_SetHolidayColours, 1511). --define(wxCalendarCtrl_GetHolidayColourFg, 1512). --define(wxCalendarCtrl_GetHolidayColourBg, 1513). --define(wxCalendarCtrl_GetAttr, 1514). --define(wxCalendarCtrl_SetAttr, 1515). --define(wxCalendarCtrl_SetHoliday, 1516). --define(wxCalendarCtrl_ResetAttr, 1517). --define(wxCalendarCtrl_HitTest, 1518). --define(wxCalendarDateAttr_new_0, 1519). --define(wxCalendarDateAttr_new_2_1, 1520). --define(wxCalendarDateAttr_new_2_0, 1521). --define(wxCalendarDateAttr_SetTextColour, 1522). --define(wxCalendarDateAttr_SetBackgroundColour, 1523). --define(wxCalendarDateAttr_SetBorderColour, 1524). --define(wxCalendarDateAttr_SetFont, 1525). --define(wxCalendarDateAttr_SetBorder, 1526). --define(wxCalendarDateAttr_SetHoliday, 1527). --define(wxCalendarDateAttr_HasTextColour, 1528). --define(wxCalendarDateAttr_HasBackgroundColour, 1529). --define(wxCalendarDateAttr_HasBorderColour, 1530). --define(wxCalendarDateAttr_HasFont, 1531). --define(wxCalendarDateAttr_HasBorder, 1532). --define(wxCalendarDateAttr_IsHoliday, 1533). --define(wxCalendarDateAttr_GetTextColour, 1534). --define(wxCalendarDateAttr_GetBackgroundColour, 1535). --define(wxCalendarDateAttr_GetBorderColour, 1536). --define(wxCalendarDateAttr_GetFont, 1537). --define(wxCalendarDateAttr_GetBorder, 1538). --define(wxCalendarDateAttr_destroy, 1539). --define(wxCheckBox_new_4, 1541). --define(wxCheckBox_new_0, 1542). --define(wxCheckBox_Create, 1543). --define(wxCheckBox_GetValue, 1544). --define(wxCheckBox_Get3StateValue, 1545). --define(wxCheckBox_Is3rdStateAllowedForUser, 1546). --define(wxCheckBox_Is3State, 1547). --define(wxCheckBox_IsChecked, 1548). --define(wxCheckBox_SetValue, 1549). --define(wxCheckBox_Set3StateValue, 1550). --define(wxCheckBox_destroy, 1551). --define(wxCheckListBox_new_0, 1552). --define(wxCheckListBox_new_3, 1554). --define(wxCheckListBox_Check, 1555). --define(wxCheckListBox_IsChecked, 1556). --define(wxCheckListBox_destroy, 1557). --define(wxChoice_new_3, 1560). --define(wxChoice_new_0, 1561). --define(wxChoice_destruct, 1563). --define(wxChoice_Create, 1565). --define(wxChoice_Delete, 1566). --define(wxChoice_GetColumns, 1567). --define(wxChoice_SetColumns, 1568). --define(wxComboBox_new_0, 1569). --define(wxComboBox_new_3, 1571). --define(wxComboBox_destruct, 1572). --define(wxComboBox_Create, 1574). --define(wxComboBox_CanCopy, 1575). --define(wxComboBox_CanCut, 1576). --define(wxComboBox_CanPaste, 1577). --define(wxComboBox_CanRedo, 1578). --define(wxComboBox_CanUndo, 1579). --define(wxComboBox_Copy, 1580). --define(wxComboBox_Cut, 1581). --define(wxComboBox_GetInsertionPoint, 1582). --define(wxComboBox_GetLastPosition, 1583). --define(wxComboBox_GetValue, 1584). --define(wxComboBox_Paste, 1585). --define(wxComboBox_Redo, 1586). --define(wxComboBox_Replace, 1587). --define(wxComboBox_Remove, 1588). --define(wxComboBox_SetInsertionPoint, 1589). --define(wxComboBox_SetInsertionPointEnd, 1590). --define(wxComboBox_SetSelection_1, 1591). --define(wxComboBox_SetSelection_2, 1592). --define(wxComboBox_SetValue, 1593). --define(wxComboBox_Undo, 1594). --define(wxGauge_new_0, 1595). --define(wxGauge_new_4, 1596). --define(wxGauge_Create, 1597). --define(wxGauge_GetBezelFace, 1598). --define(wxGauge_GetRange, 1599). --define(wxGauge_GetShadowWidth, 1600). --define(wxGauge_GetValue, 1601). --define(wxGauge_IsVertical, 1602). --define(wxGauge_SetBezelFace, 1603). --define(wxGauge_SetRange, 1604). --define(wxGauge_SetShadowWidth, 1605). --define(wxGauge_SetValue, 1606). --define(wxGauge_Pulse, 1607). --define(wxGauge_destroy, 1608). --define(wxGenericDirCtrl_new_0, 1609). --define(wxGenericDirCtrl_new_2, 1610). --define(wxGenericDirCtrl_destruct, 1611). --define(wxGenericDirCtrl_Create, 1612). --define(wxGenericDirCtrl_Init, 1613). --define(wxGenericDirCtrl_CollapseTree, 1614). --define(wxGenericDirCtrl_ExpandPath, 1615). --define(wxGenericDirCtrl_GetDefaultPath, 1616). --define(wxGenericDirCtrl_GetPath, 1617). --define(wxGenericDirCtrl_GetFilePath, 1618). --define(wxGenericDirCtrl_GetFilter, 1619). --define(wxGenericDirCtrl_GetFilterIndex, 1620). --define(wxGenericDirCtrl_GetRootId, 1621). --define(wxGenericDirCtrl_GetTreeCtrl, 1622). --define(wxGenericDirCtrl_ReCreateTree, 1623). --define(wxGenericDirCtrl_SetDefaultPath, 1624). --define(wxGenericDirCtrl_SetFilter, 1625). --define(wxGenericDirCtrl_SetFilterIndex, 1626). --define(wxGenericDirCtrl_SetPath, 1627). --define(wxStaticBox_new_4, 1629). --define(wxStaticBox_new_0, 1630). --define(wxStaticBox_Create, 1631). --define(wxStaticBox_destroy, 1632). --define(wxStaticLine_new_2, 1634). --define(wxStaticLine_new_0, 1635). --define(wxStaticLine_Create, 1636). --define(wxStaticLine_IsVertical, 1637). --define(wxStaticLine_GetDefaultSize, 1638). --define(wxStaticLine_destroy, 1639). --define(wxListBox_new_3, 1642). --define(wxListBox_new_0, 1643). --define(wxListBox_destruct, 1645). --define(wxListBox_Create, 1647). --define(wxListBox_Deselect, 1648). --define(wxListBox_GetSelections, 1649). --define(wxListBox_InsertItems, 1650). --define(wxListBox_IsSelected, 1651). --define(wxListBox_Set, 1653). --define(wxListBox_HitTest, 1654). --define(wxListBox_SetFirstItem_1_0, 1655). --define(wxListBox_SetFirstItem_1_1, 1656). --define(wxListCtrl_new_0, 1657). --define(wxListCtrl_new_2, 1658). --define(wxListCtrl_Arrange, 1659). --define(wxListCtrl_AssignImageList, 1660). --define(wxListCtrl_ClearAll, 1661). --define(wxListCtrl_Create, 1662). --define(wxListCtrl_DeleteAllItems, 1663). --define(wxListCtrl_DeleteColumn, 1664). --define(wxListCtrl_DeleteItem, 1665). --define(wxListCtrl_EditLabel, 1666). --define(wxListCtrl_EnsureVisible, 1667). --define(wxListCtrl_FindItem_3_0, 1668). --define(wxListCtrl_FindItem_3_1, 1669). --define(wxListCtrl_GetColumn, 1670). --define(wxListCtrl_GetColumnCount, 1671). --define(wxListCtrl_GetColumnWidth, 1672). --define(wxListCtrl_GetCountPerPage, 1673). --define(wxListCtrl_GetEditControl, 1674). --define(wxListCtrl_GetImageList, 1675). --define(wxListCtrl_GetItem, 1676). --define(wxListCtrl_GetItemBackgroundColour, 1677). --define(wxListCtrl_GetItemCount, 1678). --define(wxListCtrl_GetItemData, 1679). --define(wxListCtrl_GetItemFont, 1680). --define(wxListCtrl_GetItemPosition, 1681). --define(wxListCtrl_GetItemRect, 1682). --define(wxListCtrl_GetItemSpacing, 1683). --define(wxListCtrl_GetItemState, 1684). --define(wxListCtrl_GetItemText, 1685). --define(wxListCtrl_GetItemTextColour, 1686). --define(wxListCtrl_GetNextItem, 1687). --define(wxListCtrl_GetSelectedItemCount, 1688). --define(wxListCtrl_GetTextColour, 1689). --define(wxListCtrl_GetTopItem, 1690). --define(wxListCtrl_GetViewRect, 1691). --define(wxListCtrl_HitTest, 1692). --define(wxListCtrl_InsertColumn_2, 1693). --define(wxListCtrl_InsertColumn_3, 1694). --define(wxListCtrl_InsertItem_1, 1695). --define(wxListCtrl_InsertItem_2_1, 1696). --define(wxListCtrl_InsertItem_2_0, 1697). --define(wxListCtrl_InsertItem_3, 1698). --define(wxListCtrl_RefreshItem, 1699). --define(wxListCtrl_RefreshItems, 1700). --define(wxListCtrl_ScrollList, 1701). --define(wxListCtrl_SetBackgroundColour, 1702). --define(wxListCtrl_SetColumn, 1703). --define(wxListCtrl_SetColumnWidth, 1704). --define(wxListCtrl_SetImageList, 1705). --define(wxListCtrl_SetItem_1, 1706). --define(wxListCtrl_SetItem_4, 1707). --define(wxListCtrl_SetItemBackgroundColour, 1708). --define(wxListCtrl_SetItemCount, 1709). --define(wxListCtrl_SetItemData, 1710). --define(wxListCtrl_SetItemFont, 1711). --define(wxListCtrl_SetItemImage, 1712). --define(wxListCtrl_SetItemColumnImage, 1713). --define(wxListCtrl_SetItemPosition, 1714). --define(wxListCtrl_SetItemState, 1715). --define(wxListCtrl_SetItemText, 1716). --define(wxListCtrl_SetItemTextColour, 1717). --define(wxListCtrl_SetSingleStyle, 1718). --define(wxListCtrl_SetTextColour, 1719). --define(wxListCtrl_SetWindowStyleFlag, 1720). --define(wxListCtrl_SortItems, 1721). --define(wxListCtrl_destroy, 1722). --define(wxListView_ClearColumnImage, 1723). --define(wxListView_Focus, 1724). --define(wxListView_GetFirstSelected, 1725). --define(wxListView_GetFocusedItem, 1726). --define(wxListView_GetNextSelected, 1727). --define(wxListView_IsSelected, 1728). --define(wxListView_Select, 1729). --define(wxListView_SetColumnImage, 1730). --define(wxListItem_new_0, 1731). --define(wxListItem_new_1, 1732). --define(wxListItem_destruct, 1733). --define(wxListItem_Clear, 1734). --define(wxListItem_GetAlign, 1735). --define(wxListItem_GetBackgroundColour, 1736). --define(wxListItem_GetColumn, 1737). --define(wxListItem_GetFont, 1738). --define(wxListItem_GetId, 1739). --define(wxListItem_GetImage, 1740). --define(wxListItem_GetMask, 1741). --define(wxListItem_GetState, 1742). --define(wxListItem_GetText, 1743). --define(wxListItem_GetTextColour, 1744). --define(wxListItem_GetWidth, 1745). --define(wxListItem_SetAlign, 1746). --define(wxListItem_SetBackgroundColour, 1747). --define(wxListItem_SetColumn, 1748). --define(wxListItem_SetFont, 1749). --define(wxListItem_SetId, 1750). --define(wxListItem_SetImage, 1751). --define(wxListItem_SetMask, 1752). --define(wxListItem_SetState, 1753). --define(wxListItem_SetStateMask, 1754). --define(wxListItem_SetText, 1755). --define(wxListItem_SetTextColour, 1756). --define(wxListItem_SetWidth, 1757). --define(wxListItemAttr_new_0, 1758). --define(wxListItemAttr_new_3, 1759). --define(wxListItemAttr_GetBackgroundColour, 1760). --define(wxListItemAttr_GetFont, 1761). --define(wxListItemAttr_GetTextColour, 1762). --define(wxListItemAttr_HasBackgroundColour, 1763). --define(wxListItemAttr_HasFont, 1764). --define(wxListItemAttr_HasTextColour, 1765). --define(wxListItemAttr_SetBackgroundColour, 1766). --define(wxListItemAttr_SetFont, 1767). --define(wxListItemAttr_SetTextColour, 1768). --define(wxListItemAttr_destroy, 1769). --define(wxImageList_new_0, 1770). --define(wxImageList_new_3, 1771). --define(wxImageList_Add_1, 1772). --define(wxImageList_Add_2_0, 1773). --define(wxImageList_Add_2_1, 1774). --define(wxImageList_Create, 1775). --define(wxImageList_Draw, 1777). --define(wxImageList_GetBitmap, 1778). --define(wxImageList_GetIcon, 1779). --define(wxImageList_GetImageCount, 1780). --define(wxImageList_GetSize, 1781). --define(wxImageList_Remove, 1782). --define(wxImageList_RemoveAll, 1783). --define(wxImageList_Replace_2, 1784). --define(wxImageList_Replace_3, 1785). --define(wxImageList_destroy, 1786). --define(wxTextAttr_new_0, 1787). --define(wxTextAttr_new_2, 1788). --define(wxTextAttr_GetAlignment, 1789). --define(wxTextAttr_GetBackgroundColour, 1790). --define(wxTextAttr_GetFont, 1791). --define(wxTextAttr_GetLeftIndent, 1792). --define(wxTextAttr_GetLeftSubIndent, 1793). --define(wxTextAttr_GetRightIndent, 1794). --define(wxTextAttr_GetTabs, 1795). --define(wxTextAttr_GetTextColour, 1796). --define(wxTextAttr_HasBackgroundColour, 1797). --define(wxTextAttr_HasFont, 1798). --define(wxTextAttr_HasTextColour, 1799). --define(wxTextAttr_GetFlags, 1800). --define(wxTextAttr_IsDefault, 1801). --define(wxTextAttr_SetAlignment, 1802). --define(wxTextAttr_SetBackgroundColour, 1803). --define(wxTextAttr_SetFlags, 1804). --define(wxTextAttr_SetFont, 1805). --define(wxTextAttr_SetLeftIndent, 1806). --define(wxTextAttr_SetRightIndent, 1807). --define(wxTextAttr_SetTabs, 1808). --define(wxTextAttr_SetTextColour, 1809). --define(wxTextAttr_destroy, 1810). --define(wxTextCtrl_new_3, 1812). --define(wxTextCtrl_new_0, 1813). --define(wxTextCtrl_destruct, 1815). --define(wxTextCtrl_AppendText, 1816). --define(wxTextCtrl_CanCopy, 1817). --define(wxTextCtrl_CanCut, 1818). --define(wxTextCtrl_CanPaste, 1819). --define(wxTextCtrl_CanRedo, 1820). --define(wxTextCtrl_CanUndo, 1821). --define(wxTextCtrl_Clear, 1822). --define(wxTextCtrl_Copy, 1823). --define(wxTextCtrl_Create, 1824). --define(wxTextCtrl_Cut, 1825). --define(wxTextCtrl_DiscardEdits, 1826). --define(wxTextCtrl_EmulateKeyPress, 1827). --define(wxTextCtrl_GetDefaultStyle, 1828). --define(wxTextCtrl_GetInsertionPoint, 1829). --define(wxTextCtrl_GetLastPosition, 1830). --define(wxTextCtrl_GetLineLength, 1831). --define(wxTextCtrl_GetLineText, 1832). --define(wxTextCtrl_GetNumberOfLines, 1833). --define(wxTextCtrl_GetRange, 1834). --define(wxTextCtrl_GetSelection, 1835). --define(wxTextCtrl_GetStringSelection, 1836). --define(wxTextCtrl_GetStyle, 1837). --define(wxTextCtrl_GetValue, 1838). --define(wxTextCtrl_IsEditable, 1839). --define(wxTextCtrl_IsModified, 1840). --define(wxTextCtrl_IsMultiLine, 1841). --define(wxTextCtrl_IsSingleLine, 1842). --define(wxTextCtrl_LoadFile, 1843). --define(wxTextCtrl_MarkDirty, 1844). --define(wxTextCtrl_Paste, 1845). --define(wxTextCtrl_PositionToXY, 1846). --define(wxTextCtrl_Redo, 1847). --define(wxTextCtrl_Remove, 1848). --define(wxTextCtrl_Replace, 1849). --define(wxTextCtrl_SaveFile, 1850). --define(wxTextCtrl_SetDefaultStyle, 1851). --define(wxTextCtrl_SetEditable, 1852). --define(wxTextCtrl_SetInsertionPoint, 1853). --define(wxTextCtrl_SetInsertionPointEnd, 1854). --define(wxTextCtrl_SetMaxLength, 1856). --define(wxTextCtrl_SetSelection, 1857). --define(wxTextCtrl_SetStyle, 1858). --define(wxTextCtrl_SetValue, 1859). --define(wxTextCtrl_ShowPosition, 1860). --define(wxTextCtrl_Undo, 1861). --define(wxTextCtrl_WriteText, 1862). --define(wxTextCtrl_XYToPosition, 1863). --define(wxNotebook_new_0, 1866). --define(wxNotebook_new_3, 1867). --define(wxNotebook_destruct, 1868). --define(wxNotebook_AddPage, 1869). --define(wxNotebook_AdvanceSelection, 1870). --define(wxNotebook_AssignImageList, 1871). --define(wxNotebook_Create, 1872). --define(wxNotebook_DeleteAllPages, 1873). --define(wxNotebook_DeletePage, 1874). --define(wxNotebook_RemovePage, 1875). --define(wxNotebook_GetCurrentPage, 1876). --define(wxNotebook_GetImageList, 1877). --define(wxNotebook_GetPage, 1879). --define(wxNotebook_GetPageCount, 1880). --define(wxNotebook_GetPageImage, 1881). --define(wxNotebook_GetPageText, 1882). --define(wxNotebook_GetRowCount, 1883). --define(wxNotebook_GetSelection, 1884). --define(wxNotebook_GetThemeBackgroundColour, 1885). --define(wxNotebook_HitTest, 1887). --define(wxNotebook_InsertPage, 1889). --define(wxNotebook_SetImageList, 1890). --define(wxNotebook_SetPadding, 1891). --define(wxNotebook_SetPageSize, 1892). --define(wxNotebook_SetPageImage, 1893). --define(wxNotebook_SetPageText, 1894). --define(wxNotebook_SetSelection, 1895). --define(wxNotebook_ChangeSelection, 1896). --define(wxChoicebook_new_0, 1897). --define(wxChoicebook_new_3, 1898). --define(wxChoicebook_AddPage, 1899). --define(wxChoicebook_AdvanceSelection, 1900). --define(wxChoicebook_AssignImageList, 1901). --define(wxChoicebook_Create, 1902). --define(wxChoicebook_DeleteAllPages, 1903). --define(wxChoicebook_DeletePage, 1904). --define(wxChoicebook_RemovePage, 1905). --define(wxChoicebook_GetCurrentPage, 1906). --define(wxChoicebook_GetImageList, 1907). --define(wxChoicebook_GetPage, 1909). --define(wxChoicebook_GetPageCount, 1910). --define(wxChoicebook_GetPageImage, 1911). --define(wxChoicebook_GetPageText, 1912). --define(wxChoicebook_GetSelection, 1913). --define(wxChoicebook_HitTest, 1914). --define(wxChoicebook_InsertPage, 1915). --define(wxChoicebook_SetImageList, 1916). --define(wxChoicebook_SetPageSize, 1917). --define(wxChoicebook_SetPageImage, 1918). --define(wxChoicebook_SetPageText, 1919). --define(wxChoicebook_SetSelection, 1920). --define(wxChoicebook_ChangeSelection, 1921). --define(wxChoicebook_destroy, 1922). --define(wxToolbook_new_0, 1923). --define(wxToolbook_new_3, 1924). --define(wxToolbook_AddPage, 1925). --define(wxToolbook_AdvanceSelection, 1926). --define(wxToolbook_AssignImageList, 1927). --define(wxToolbook_Create, 1928). --define(wxToolbook_DeleteAllPages, 1929). --define(wxToolbook_DeletePage, 1930). --define(wxToolbook_RemovePage, 1931). --define(wxToolbook_GetCurrentPage, 1932). --define(wxToolbook_GetImageList, 1933). --define(wxToolbook_GetPage, 1935). --define(wxToolbook_GetPageCount, 1936). --define(wxToolbook_GetPageImage, 1937). --define(wxToolbook_GetPageText, 1938). --define(wxToolbook_GetSelection, 1939). --define(wxToolbook_HitTest, 1941). --define(wxToolbook_InsertPage, 1942). --define(wxToolbook_SetImageList, 1943). --define(wxToolbook_SetPageSize, 1944). --define(wxToolbook_SetPageImage, 1945). --define(wxToolbook_SetPageText, 1946). --define(wxToolbook_SetSelection, 1947). --define(wxToolbook_ChangeSelection, 1948). --define(wxToolbook_destroy, 1949). --define(wxListbook_new_0, 1950). --define(wxListbook_new_3, 1951). --define(wxListbook_AddPage, 1952). --define(wxListbook_AdvanceSelection, 1953). --define(wxListbook_AssignImageList, 1954). --define(wxListbook_Create, 1955). --define(wxListbook_DeleteAllPages, 1956). --define(wxListbook_DeletePage, 1957). --define(wxListbook_RemovePage, 1958). --define(wxListbook_GetCurrentPage, 1959). --define(wxListbook_GetImageList, 1960). --define(wxListbook_GetPage, 1962). --define(wxListbook_GetPageCount, 1963). --define(wxListbook_GetPageImage, 1964). --define(wxListbook_GetPageText, 1965). --define(wxListbook_GetSelection, 1966). --define(wxListbook_HitTest, 1968). --define(wxListbook_InsertPage, 1969). --define(wxListbook_SetImageList, 1970). --define(wxListbook_SetPageSize, 1971). --define(wxListbook_SetPageImage, 1972). --define(wxListbook_SetPageText, 1973). --define(wxListbook_SetSelection, 1974). --define(wxListbook_ChangeSelection, 1975). --define(wxListbook_destroy, 1976). --define(wxTreebook_new_0, 1977). --define(wxTreebook_new_3, 1978). --define(wxTreebook_AddPage, 1979). --define(wxTreebook_AdvanceSelection, 1980). --define(wxTreebook_AssignImageList, 1981). --define(wxTreebook_Create, 1982). --define(wxTreebook_DeleteAllPages, 1983). --define(wxTreebook_DeletePage, 1984). --define(wxTreebook_RemovePage, 1985). --define(wxTreebook_GetCurrentPage, 1986). --define(wxTreebook_GetImageList, 1987). --define(wxTreebook_GetPage, 1989). --define(wxTreebook_GetPageCount, 1990). --define(wxTreebook_GetPageImage, 1991). --define(wxTreebook_GetPageText, 1992). --define(wxTreebook_GetSelection, 1993). --define(wxTreebook_ExpandNode, 1994). --define(wxTreebook_IsNodeExpanded, 1995). --define(wxTreebook_HitTest, 1997). --define(wxTreebook_InsertPage, 1998). --define(wxTreebook_InsertSubPage, 1999). --define(wxTreebook_SetImageList, 2000). --define(wxTreebook_SetPageSize, 2001). --define(wxTreebook_SetPageImage, 2002). --define(wxTreebook_SetPageText, 2003). --define(wxTreebook_SetSelection, 2004). --define(wxTreebook_ChangeSelection, 2005). --define(wxTreebook_destroy, 2006). --define(wxTreeCtrl_new_2, 2009). --define(wxTreeCtrl_new_0, 2010). --define(wxTreeCtrl_destruct, 2012). --define(wxTreeCtrl_AddRoot, 2013). --define(wxTreeCtrl_AppendItem, 2014). --define(wxTreeCtrl_AssignImageList, 2015). --define(wxTreeCtrl_AssignStateImageList, 2016). --define(wxTreeCtrl_Collapse, 2017). --define(wxTreeCtrl_CollapseAndReset, 2018). --define(wxTreeCtrl_Create, 2019). --define(wxTreeCtrl_Delete, 2020). --define(wxTreeCtrl_DeleteAllItems, 2021). --define(wxTreeCtrl_DeleteChildren, 2022). --define(wxTreeCtrl_EditLabel, 2023). --define(wxTreeCtrl_EnsureVisible, 2024). --define(wxTreeCtrl_Expand, 2025). --define(wxTreeCtrl_GetBoundingRect, 2026). --define(wxTreeCtrl_GetChildrenCount, 2028). --define(wxTreeCtrl_GetCount, 2029). --define(wxTreeCtrl_GetEditControl, 2030). --define(wxTreeCtrl_GetFirstChild, 2031). --define(wxTreeCtrl_GetNextChild, 2032). --define(wxTreeCtrl_GetFirstVisibleItem, 2033). --define(wxTreeCtrl_GetImageList, 2034). --define(wxTreeCtrl_GetIndent, 2035). --define(wxTreeCtrl_GetItemBackgroundColour, 2036). --define(wxTreeCtrl_GetItemData, 2037). --define(wxTreeCtrl_GetItemFont, 2038). --define(wxTreeCtrl_GetItemImage_1, 2039). --define(wxTreeCtrl_GetItemImage_2, 2040). --define(wxTreeCtrl_GetItemText, 2041). --define(wxTreeCtrl_GetItemTextColour, 2042). --define(wxTreeCtrl_GetLastChild, 2043). --define(wxTreeCtrl_GetNextSibling, 2044). --define(wxTreeCtrl_GetNextVisible, 2045). --define(wxTreeCtrl_GetItemParent, 2046). --define(wxTreeCtrl_GetPrevSibling, 2047). --define(wxTreeCtrl_GetPrevVisible, 2048). --define(wxTreeCtrl_GetRootItem, 2049). --define(wxTreeCtrl_GetSelection, 2050). --define(wxTreeCtrl_GetSelections, 2051). --define(wxTreeCtrl_GetStateImageList, 2052). --define(wxTreeCtrl_HitTest, 2053). --define(wxTreeCtrl_InsertItem, 2055). --define(wxTreeCtrl_IsBold, 2056). --define(wxTreeCtrl_IsExpanded, 2057). --define(wxTreeCtrl_IsSelected, 2058). --define(wxTreeCtrl_IsVisible, 2059). --define(wxTreeCtrl_ItemHasChildren, 2060). --define(wxTreeCtrl_IsTreeItemIdOk, 2061). --define(wxTreeCtrl_PrependItem, 2062). --define(wxTreeCtrl_ScrollTo, 2063). --define(wxTreeCtrl_SelectItem_1, 2064). --define(wxTreeCtrl_SelectItem_2, 2065). --define(wxTreeCtrl_SetIndent, 2066). --define(wxTreeCtrl_SetImageList, 2067). --define(wxTreeCtrl_SetItemBackgroundColour, 2068). --define(wxTreeCtrl_SetItemBold, 2069). --define(wxTreeCtrl_SetItemData, 2070). --define(wxTreeCtrl_SetItemDropHighlight, 2071). --define(wxTreeCtrl_SetItemFont, 2072). --define(wxTreeCtrl_SetItemHasChildren, 2073). --define(wxTreeCtrl_SetItemImage_2, 2074). --define(wxTreeCtrl_SetItemImage_3, 2075). --define(wxTreeCtrl_SetItemText, 2076). --define(wxTreeCtrl_SetItemTextColour, 2077). --define(wxTreeCtrl_SetStateImageList, 2078). --define(wxTreeCtrl_SetWindowStyle, 2079). --define(wxTreeCtrl_SortChildren, 2080). --define(wxTreeCtrl_Toggle, 2081). --define(wxTreeCtrl_ToggleItemSelection, 2082). --define(wxTreeCtrl_Unselect, 2083). --define(wxTreeCtrl_UnselectAll, 2084). --define(wxTreeCtrl_UnselectItem, 2085). --define(wxScrollBar_new_0, 2086). --define(wxScrollBar_new_3, 2087). --define(wxScrollBar_destruct, 2088). --define(wxScrollBar_Create, 2089). --define(wxScrollBar_GetRange, 2090). --define(wxScrollBar_GetPageSize, 2091). --define(wxScrollBar_GetThumbPosition, 2092). --define(wxScrollBar_GetThumbSize, 2093). --define(wxScrollBar_SetThumbPosition, 2094). --define(wxScrollBar_SetScrollbar, 2095). --define(wxSpinButton_new_2, 2097). --define(wxSpinButton_new_0, 2098). --define(wxSpinButton_Create, 2099). --define(wxSpinButton_GetMax, 2100). --define(wxSpinButton_GetMin, 2101). --define(wxSpinButton_GetValue, 2102). --define(wxSpinButton_SetRange, 2103). --define(wxSpinButton_SetValue, 2104). --define(wxSpinButton_destroy, 2105). --define(wxSpinCtrl_new_0, 2106). --define(wxSpinCtrl_new_2, 2107). --define(wxSpinCtrl_Create, 2109). --define(wxSpinCtrl_SetValue_1_1, 2112). --define(wxSpinCtrl_SetValue_1_0, 2113). --define(wxSpinCtrl_GetValue, 2115). --define(wxSpinCtrl_SetRange, 2117). --define(wxSpinCtrl_SetSelection, 2118). --define(wxSpinCtrl_GetMin, 2120). --define(wxSpinCtrl_GetMax, 2122). --define(wxSpinCtrl_destroy, 2123). --define(wxStaticText_new_0, 2124). --define(wxStaticText_new_4, 2125). --define(wxStaticText_Create, 2126). --define(wxStaticText_GetLabel, 2127). --define(wxStaticText_SetLabel, 2128). --define(wxStaticText_Wrap, 2129). --define(wxStaticText_destroy, 2130). --define(wxStaticBitmap_new_0, 2131). --define(wxStaticBitmap_new_4, 2132). --define(wxStaticBitmap_Create, 2133). --define(wxStaticBitmap_GetBitmap, 2134). --define(wxStaticBitmap_SetBitmap, 2135). --define(wxStaticBitmap_destroy, 2136). --define(wxRadioBox_new, 2137). --define(wxRadioBox_destruct, 2139). --define(wxRadioBox_Create, 2140). --define(wxRadioBox_Enable_2, 2141). --define(wxRadioBox_Enable_1, 2142). --define(wxRadioBox_GetSelection, 2143). --define(wxRadioBox_GetString, 2144). --define(wxRadioBox_SetSelection, 2145). --define(wxRadioBox_Show_2, 2146). --define(wxRadioBox_Show_1, 2147). --define(wxRadioBox_GetColumnCount, 2148). --define(wxRadioBox_GetItemHelpText, 2149). --define(wxRadioBox_GetItemToolTip, 2150). --define(wxRadioBox_GetItemFromPoint, 2152). --define(wxRadioBox_GetRowCount, 2153). --define(wxRadioBox_IsItemEnabled, 2154). --define(wxRadioBox_IsItemShown, 2155). --define(wxRadioBox_SetItemHelpText, 2156). --define(wxRadioBox_SetItemToolTip, 2157). --define(wxRadioButton_new_0, 2158). --define(wxRadioButton_new_4, 2159). --define(wxRadioButton_Create, 2160). --define(wxRadioButton_GetValue, 2161). --define(wxRadioButton_SetValue, 2162). --define(wxRadioButton_destroy, 2163). --define(wxSlider_new_6, 2165). --define(wxSlider_new_0, 2166). --define(wxSlider_Create, 2167). --define(wxSlider_GetLineSize, 2168). --define(wxSlider_GetMax, 2169). --define(wxSlider_GetMin, 2170). --define(wxSlider_GetPageSize, 2171). --define(wxSlider_GetThumbLength, 2172). --define(wxSlider_GetValue, 2173). --define(wxSlider_SetLineSize, 2174). --define(wxSlider_SetPageSize, 2175). --define(wxSlider_SetRange, 2176). --define(wxSlider_SetThumbLength, 2177). --define(wxSlider_SetValue, 2178). --define(wxSlider_destroy, 2179). --define(wxDialog_new_4, 2181). --define(wxDialog_new_0, 2182). --define(wxDialog_destruct, 2184). --define(wxDialog_Create, 2185). --define(wxDialog_CreateButtonSizer, 2186). --define(wxDialog_CreateStdDialogButtonSizer, 2187). --define(wxDialog_EndModal, 2188). --define(wxDialog_GetAffirmativeId, 2189). --define(wxDialog_GetReturnCode, 2190). --define(wxDialog_IsModal, 2191). --define(wxDialog_SetAffirmativeId, 2192). --define(wxDialog_SetReturnCode, 2193). --define(wxDialog_Show, 2194). --define(wxDialog_ShowModal, 2195). --define(wxColourDialog_new_0, 2196). --define(wxColourDialog_new_2, 2197). --define(wxColourDialog_destruct, 2198). --define(wxColourDialog_Create, 2199). --define(wxColourDialog_GetColourData, 2200). --define(wxColourData_new_0, 2201). --define(wxColourData_new_1, 2202). --define(wxColourData_destruct, 2203). --define(wxColourData_GetChooseFull, 2204). --define(wxColourData_GetColour, 2205). --define(wxColourData_GetCustomColour, 2207). --define(wxColourData_SetChooseFull, 2208). --define(wxColourData_SetColour, 2209). --define(wxColourData_SetCustomColour, 2210). --define(wxPalette_new_0, 2211). --define(wxPalette_new_4, 2212). --define(wxPalette_destruct, 2214). --define(wxPalette_Create, 2215). --define(wxPalette_GetColoursCount, 2216). --define(wxPalette_GetPixel, 2217). --define(wxPalette_GetRGB, 2218). --define(wxPalette_IsOk, 2219). --define(wxDirDialog_new, 2223). --define(wxDirDialog_destruct, 2224). --define(wxDirDialog_GetPath, 2225). --define(wxDirDialog_GetMessage, 2226). --define(wxDirDialog_SetMessage, 2227). --define(wxDirDialog_SetPath, 2228). --define(wxFileDialog_new, 2232). --define(wxFileDialog_destruct, 2233). --define(wxFileDialog_GetDirectory, 2234). --define(wxFileDialog_GetFilename, 2235). --define(wxFileDialog_GetFilenames, 2236). --define(wxFileDialog_GetFilterIndex, 2237). --define(wxFileDialog_GetMessage, 2238). --define(wxFileDialog_GetPath, 2239). --define(wxFileDialog_GetPaths, 2240). --define(wxFileDialog_GetWildcard, 2241). --define(wxFileDialog_SetDirectory, 2242). --define(wxFileDialog_SetFilename, 2243). --define(wxFileDialog_SetFilterIndex, 2244). --define(wxFileDialog_SetMessage, 2245). --define(wxFileDialog_SetPath, 2246). --define(wxFileDialog_SetWildcard, 2247). --define(wxPickerBase_SetInternalMargin, 2248). --define(wxPickerBase_GetInternalMargin, 2249). --define(wxPickerBase_SetTextCtrlProportion, 2250). --define(wxPickerBase_SetPickerCtrlProportion, 2251). --define(wxPickerBase_GetTextCtrlProportion, 2252). --define(wxPickerBase_GetPickerCtrlProportion, 2253). --define(wxPickerBase_HasTextCtrl, 2254). --define(wxPickerBase_GetTextCtrl, 2255). --define(wxPickerBase_IsTextCtrlGrowable, 2256). --define(wxPickerBase_SetPickerCtrlGrowable, 2257). --define(wxPickerBase_SetTextCtrlGrowable, 2258). --define(wxPickerBase_IsPickerCtrlGrowable, 2259). --define(wxFilePickerCtrl_new_0, 2260). --define(wxFilePickerCtrl_new_3, 2261). --define(wxFilePickerCtrl_Create, 2262). --define(wxFilePickerCtrl_GetPath, 2263). --define(wxFilePickerCtrl_SetPath, 2264). --define(wxFilePickerCtrl_destroy, 2265). --define(wxDirPickerCtrl_new_0, 2266). --define(wxDirPickerCtrl_new_3, 2267). --define(wxDirPickerCtrl_Create, 2268). --define(wxDirPickerCtrl_GetPath, 2269). --define(wxDirPickerCtrl_SetPath, 2270). --define(wxDirPickerCtrl_destroy, 2271). --define(wxColourPickerCtrl_new_0, 2272). --define(wxColourPickerCtrl_new_3, 2273). --define(wxColourPickerCtrl_Create, 2274). --define(wxColourPickerCtrl_GetColour, 2275). --define(wxColourPickerCtrl_SetColour_1_1, 2276). --define(wxColourPickerCtrl_SetColour_1_0, 2277). --define(wxColourPickerCtrl_destroy, 2278). --define(wxDatePickerCtrl_new_0, 2279). --define(wxDatePickerCtrl_new_3, 2280). --define(wxDatePickerCtrl_GetRange, 2281). --define(wxDatePickerCtrl_GetValue, 2282). --define(wxDatePickerCtrl_SetRange, 2283). --define(wxDatePickerCtrl_SetValue, 2284). --define(wxDatePickerCtrl_destroy, 2285). --define(wxFontPickerCtrl_new_0, 2286). --define(wxFontPickerCtrl_new_3, 2287). --define(wxFontPickerCtrl_Create, 2288). --define(wxFontPickerCtrl_GetSelectedFont, 2289). --define(wxFontPickerCtrl_SetSelectedFont, 2290). --define(wxFontPickerCtrl_GetMaxPointSize, 2291). --define(wxFontPickerCtrl_SetMaxPointSize, 2292). --define(wxFontPickerCtrl_destroy, 2293). --define(wxFindReplaceDialog_new_0, 2296). --define(wxFindReplaceDialog_new_4, 2297). --define(wxFindReplaceDialog_destruct, 2298). --define(wxFindReplaceDialog_Create, 2299). --define(wxFindReplaceDialog_GetData, 2300). --define(wxFindReplaceData_new_0, 2301). --define(wxFindReplaceData_new_1, 2302). --define(wxFindReplaceData_GetFindString, 2303). --define(wxFindReplaceData_GetReplaceString, 2304). --define(wxFindReplaceData_GetFlags, 2305). --define(wxFindReplaceData_SetFlags, 2306). --define(wxFindReplaceData_SetFindString, 2307). --define(wxFindReplaceData_SetReplaceString, 2308). --define(wxFindReplaceData_destroy, 2309). --define(wxMultiChoiceDialog_new_0, 2310). --define(wxMultiChoiceDialog_new_5, 2312). --define(wxMultiChoiceDialog_GetSelections, 2313). --define(wxMultiChoiceDialog_SetSelections, 2314). --define(wxMultiChoiceDialog_destroy, 2315). --define(wxSingleChoiceDialog_new_0, 2316). --define(wxSingleChoiceDialog_new_5, 2318). --define(wxSingleChoiceDialog_GetSelection, 2319). --define(wxSingleChoiceDialog_GetStringSelection, 2320). --define(wxSingleChoiceDialog_SetSelection, 2321). --define(wxSingleChoiceDialog_destroy, 2322). --define(wxTextEntryDialog_new, 2323). --define(wxTextEntryDialog_GetValue, 2324). --define(wxTextEntryDialog_SetValue, 2325). --define(wxTextEntryDialog_destroy, 2326). --define(wxPasswordEntryDialog_new, 2327). --define(wxPasswordEntryDialog_destroy, 2328). --define(wxFontData_new_0, 2329). --define(wxFontData_new_1, 2330). --define(wxFontData_destruct, 2331). --define(wxFontData_EnableEffects, 2332). --define(wxFontData_GetAllowSymbols, 2333). --define(wxFontData_GetColour, 2334). --define(wxFontData_GetChosenFont, 2335). --define(wxFontData_GetEnableEffects, 2336). --define(wxFontData_GetInitialFont, 2337). --define(wxFontData_GetShowHelp, 2338). --define(wxFontData_SetAllowSymbols, 2339). --define(wxFontData_SetChosenFont, 2340). --define(wxFontData_SetColour, 2341). --define(wxFontData_SetInitialFont, 2342). --define(wxFontData_SetRange, 2343). --define(wxFontData_SetShowHelp, 2344). --define(wxFontDialog_new_0, 2348). --define(wxFontDialog_new_2, 2350). --define(wxFontDialog_Create, 2352). --define(wxFontDialog_GetFontData, 2353). --define(wxFontDialog_destroy, 2355). --define(wxProgressDialog_new, 2356). --define(wxProgressDialog_destruct, 2357). --define(wxProgressDialog_Resume, 2358). --define(wxProgressDialog_Update_2, 2359). --define(wxProgressDialog_Update_0, 2360). --define(wxMessageDialog_new, 2361). --define(wxMessageDialog_destruct, 2362). --define(wxPageSetupDialog_new, 2363). --define(wxPageSetupDialog_destruct, 2364). --define(wxPageSetupDialog_GetPageSetupData, 2365). --define(wxPageSetupDialog_ShowModal, 2366). --define(wxPageSetupDialogData_new_0, 2367). --define(wxPageSetupDialogData_new_1_0, 2368). --define(wxPageSetupDialogData_new_1_1, 2369). --define(wxPageSetupDialogData_destruct, 2370). --define(wxPageSetupDialogData_EnableHelp, 2371). --define(wxPageSetupDialogData_EnableMargins, 2372). --define(wxPageSetupDialogData_EnableOrientation, 2373). --define(wxPageSetupDialogData_EnablePaper, 2374). --define(wxPageSetupDialogData_EnablePrinter, 2375). --define(wxPageSetupDialogData_GetDefaultMinMargins, 2376). --define(wxPageSetupDialogData_GetEnableMargins, 2377). --define(wxPageSetupDialogData_GetEnableOrientation, 2378). --define(wxPageSetupDialogData_GetEnablePaper, 2379). --define(wxPageSetupDialogData_GetEnablePrinter, 2380). --define(wxPageSetupDialogData_GetEnableHelp, 2381). --define(wxPageSetupDialogData_GetDefaultInfo, 2382). --define(wxPageSetupDialogData_GetMarginTopLeft, 2383). --define(wxPageSetupDialogData_GetMarginBottomRight, 2384). --define(wxPageSetupDialogData_GetMinMarginTopLeft, 2385). --define(wxPageSetupDialogData_GetMinMarginBottomRight, 2386). --define(wxPageSetupDialogData_GetPaperId, 2387). --define(wxPageSetupDialogData_GetPaperSize, 2388). --define(wxPageSetupDialogData_GetPrintData, 2390). --define(wxPageSetupDialogData_IsOk, 2391). --define(wxPageSetupDialogData_SetDefaultInfo, 2392). --define(wxPageSetupDialogData_SetDefaultMinMargins, 2393). --define(wxPageSetupDialogData_SetMarginTopLeft, 2394). --define(wxPageSetupDialogData_SetMarginBottomRight, 2395). --define(wxPageSetupDialogData_SetMinMarginTopLeft, 2396). --define(wxPageSetupDialogData_SetMinMarginBottomRight, 2397). --define(wxPageSetupDialogData_SetPaperId, 2398). --define(wxPageSetupDialogData_SetPaperSize_1_1, 2399). --define(wxPageSetupDialogData_SetPaperSize_1_0, 2400). --define(wxPageSetupDialogData_SetPrintData, 2401). --define(wxPrintDialog_new_2_0, 2402). --define(wxPrintDialog_new_2_1, 2403). --define(wxPrintDialog_destruct, 2404). --define(wxPrintDialog_GetPrintDialogData, 2405). --define(wxPrintDialog_GetPrintDC, 2406). --define(wxPrintDialogData_new_0, 2407). --define(wxPrintDialogData_new_1_1, 2408). --define(wxPrintDialogData_new_1_0, 2409). --define(wxPrintDialogData_destruct, 2410). --define(wxPrintDialogData_EnableHelp, 2411). --define(wxPrintDialogData_EnablePageNumbers, 2412). --define(wxPrintDialogData_EnablePrintToFile, 2413). --define(wxPrintDialogData_EnableSelection, 2414). --define(wxPrintDialogData_GetAllPages, 2415). --define(wxPrintDialogData_GetCollate, 2416). --define(wxPrintDialogData_GetFromPage, 2417). --define(wxPrintDialogData_GetMaxPage, 2418). --define(wxPrintDialogData_GetMinPage, 2419). --define(wxPrintDialogData_GetNoCopies, 2420). --define(wxPrintDialogData_GetPrintData, 2421). --define(wxPrintDialogData_GetPrintToFile, 2422). --define(wxPrintDialogData_GetSelection, 2423). --define(wxPrintDialogData_GetToPage, 2424). --define(wxPrintDialogData_IsOk, 2425). --define(wxPrintDialogData_SetCollate, 2426). --define(wxPrintDialogData_SetFromPage, 2427). --define(wxPrintDialogData_SetMaxPage, 2428). --define(wxPrintDialogData_SetMinPage, 2429). --define(wxPrintDialogData_SetNoCopies, 2430). --define(wxPrintDialogData_SetPrintData, 2431). --define(wxPrintDialogData_SetPrintToFile, 2432). --define(wxPrintDialogData_SetSelection, 2433). --define(wxPrintDialogData_SetToPage, 2434). --define(wxPrintData_new_0, 2435). --define(wxPrintData_new_1, 2436). --define(wxPrintData_destruct, 2437). --define(wxPrintData_GetCollate, 2438). --define(wxPrintData_GetBin, 2439). --define(wxPrintData_GetColour, 2440). --define(wxPrintData_GetDuplex, 2441). --define(wxPrintData_GetNoCopies, 2442). --define(wxPrintData_GetOrientation, 2443). --define(wxPrintData_GetPaperId, 2444). --define(wxPrintData_GetPrinterName, 2445). --define(wxPrintData_GetQuality, 2446). --define(wxPrintData_IsOk, 2447). --define(wxPrintData_SetBin, 2448). --define(wxPrintData_SetCollate, 2449). --define(wxPrintData_SetColour, 2450). --define(wxPrintData_SetDuplex, 2451). --define(wxPrintData_SetNoCopies, 2452). --define(wxPrintData_SetOrientation, 2453). --define(wxPrintData_SetPaperId, 2454). --define(wxPrintData_SetPrinterName, 2455). --define(wxPrintData_SetQuality, 2456). --define(wxPrintPreview_new_2, 2459). --define(wxPrintPreview_new_3, 2460). --define(wxPrintPreview_destruct, 2462). --define(wxPrintPreview_GetCanvas, 2463). --define(wxPrintPreview_GetCurrentPage, 2464). --define(wxPrintPreview_GetFrame, 2465). --define(wxPrintPreview_GetMaxPage, 2466). --define(wxPrintPreview_GetMinPage, 2467). --define(wxPrintPreview_GetPrintout, 2468). --define(wxPrintPreview_GetPrintoutForPrinting, 2469). --define(wxPrintPreview_IsOk, 2470). --define(wxPrintPreview_PaintPage, 2471). --define(wxPrintPreview_Print, 2472). --define(wxPrintPreview_RenderPage, 2473). --define(wxPrintPreview_SetCanvas, 2474). --define(wxPrintPreview_SetCurrentPage, 2475). --define(wxPrintPreview_SetFrame, 2476). --define(wxPrintPreview_SetPrintout, 2477). --define(wxPrintPreview_SetZoom, 2478). --define(wxPreviewFrame_new, 2479). --define(wxPreviewFrame_destruct, 2480). --define(wxPreviewFrame_CreateControlBar, 2481). --define(wxPreviewFrame_CreateCanvas, 2482). --define(wxPreviewFrame_Initialize, 2483). --define(wxPreviewFrame_OnCloseWindow, 2484). --define(wxPreviewControlBar_new, 2485). --define(wxPreviewControlBar_destruct, 2486). --define(wxPreviewControlBar_CreateButtons, 2487). --define(wxPreviewControlBar_GetPrintPreview, 2488). --define(wxPreviewControlBar_GetZoomControl, 2489). --define(wxPreviewControlBar_SetZoomControl, 2490). --define(wxPrinter_new, 2492). --define(wxPrinter_CreateAbortWindow, 2493). --define(wxPrinter_GetAbort, 2494). --define(wxPrinter_GetLastError, 2495). --define(wxPrinter_GetPrintDialogData, 2496). --define(wxPrinter_Print, 2497). --define(wxPrinter_PrintDialog, 2498). --define(wxPrinter_ReportError, 2499). --define(wxPrinter_Setup, 2500). --define(wxPrinter_destroy, 2501). --define(wxXmlResource_new_1, 2502). --define(wxXmlResource_new_2, 2503). --define(wxXmlResource_destruct, 2504). --define(wxXmlResource_AttachUnknownControl, 2505). --define(wxXmlResource_ClearHandlers, 2506). --define(wxXmlResource_CompareVersion, 2507). --define(wxXmlResource_Get, 2508). --define(wxXmlResource_GetFlags, 2509). --define(wxXmlResource_GetVersion, 2510). --define(wxXmlResource_GetXRCID, 2511). --define(wxXmlResource_InitAllHandlers, 2512). --define(wxXmlResource_Load, 2513). --define(wxXmlResource_LoadBitmap, 2514). --define(wxXmlResource_LoadDialog_2, 2515). --define(wxXmlResource_LoadDialog_3, 2516). --define(wxXmlResource_LoadFrame_2, 2517). --define(wxXmlResource_LoadFrame_3, 2518). --define(wxXmlResource_LoadIcon, 2519). --define(wxXmlResource_LoadMenu, 2520). --define(wxXmlResource_LoadMenuBar_2, 2521). --define(wxXmlResource_LoadMenuBar_1, 2522). --define(wxXmlResource_LoadPanel_2, 2523). --define(wxXmlResource_LoadPanel_3, 2524). --define(wxXmlResource_LoadToolBar, 2525). --define(wxXmlResource_Set, 2526). --define(wxXmlResource_SetFlags, 2527). --define(wxXmlResource_Unload, 2528). --define(wxXmlResource_xrcctrl, 2529). --define(wxHtmlEasyPrinting_new, 2530). --define(wxHtmlEasyPrinting_destruct, 2531). --define(wxHtmlEasyPrinting_GetPrintData, 2532). --define(wxHtmlEasyPrinting_GetPageSetupData, 2533). --define(wxHtmlEasyPrinting_PreviewFile, 2534). --define(wxHtmlEasyPrinting_PreviewText, 2535). --define(wxHtmlEasyPrinting_PrintFile, 2536). --define(wxHtmlEasyPrinting_PrintText, 2537). --define(wxHtmlEasyPrinting_PageSetup, 2538). --define(wxHtmlEasyPrinting_SetFonts, 2539). --define(wxHtmlEasyPrinting_SetHeader, 2540). --define(wxHtmlEasyPrinting_SetFooter, 2541). --define(wxGLCanvas_new_2, 2543). --define(wxGLCanvas_new_3_1, 2544). --define(wxGLCanvas_new_3_0, 2545). --define(wxGLCanvas_GetContext, 2546). --define(wxGLCanvas_SetCurrent, 2548). --define(wxGLCanvas_SwapBuffers, 2549). --define(wxGLCanvas_destroy, 2550). --define(wxAuiManager_new, 2551). --define(wxAuiManager_destruct, 2552). --define(wxAuiManager_AddPane_2_1, 2553). --define(wxAuiManager_AddPane_3, 2554). --define(wxAuiManager_AddPane_2_0, 2555). --define(wxAuiManager_DetachPane, 2556). --define(wxAuiManager_GetAllPanes, 2557). --define(wxAuiManager_GetArtProvider, 2558). --define(wxAuiManager_GetDockSizeConstraint, 2559). --define(wxAuiManager_GetFlags, 2560). --define(wxAuiManager_GetManagedWindow, 2561). --define(wxAuiManager_GetManager, 2562). --define(wxAuiManager_GetPane_1_1, 2563). --define(wxAuiManager_GetPane_1_0, 2564). --define(wxAuiManager_HideHint, 2565). --define(wxAuiManager_InsertPane, 2566). --define(wxAuiManager_LoadPaneInfo, 2567). --define(wxAuiManager_LoadPerspective, 2568). --define(wxAuiManager_SavePaneInfo, 2569). --define(wxAuiManager_SavePerspective, 2570). --define(wxAuiManager_SetArtProvider, 2571). --define(wxAuiManager_SetDockSizeConstraint, 2572). --define(wxAuiManager_SetFlags, 2573). --define(wxAuiManager_SetManagedWindow, 2574). --define(wxAuiManager_ShowHint, 2575). --define(wxAuiManager_UnInit, 2576). --define(wxAuiManager_Update, 2577). --define(wxAuiPaneInfo_new_0, 2578). --define(wxAuiPaneInfo_new_1, 2579). --define(wxAuiPaneInfo_destruct, 2580). --define(wxAuiPaneInfo_BestSize_1, 2581). --define(wxAuiPaneInfo_BestSize_2, 2582). --define(wxAuiPaneInfo_Bottom, 2583). --define(wxAuiPaneInfo_BottomDockable, 2584). --define(wxAuiPaneInfo_Caption, 2585). --define(wxAuiPaneInfo_CaptionVisible, 2586). --define(wxAuiPaneInfo_Centre, 2587). --define(wxAuiPaneInfo_CentrePane, 2588). --define(wxAuiPaneInfo_CloseButton, 2589). --define(wxAuiPaneInfo_DefaultPane, 2590). --define(wxAuiPaneInfo_DestroyOnClose, 2591). --define(wxAuiPaneInfo_Direction, 2592). --define(wxAuiPaneInfo_Dock, 2593). --define(wxAuiPaneInfo_Dockable, 2594). --define(wxAuiPaneInfo_Fixed, 2595). --define(wxAuiPaneInfo_Float, 2596). --define(wxAuiPaneInfo_Floatable, 2597). --define(wxAuiPaneInfo_FloatingPosition_1, 2598). --define(wxAuiPaneInfo_FloatingPosition_2, 2599). --define(wxAuiPaneInfo_FloatingSize_1, 2600). --define(wxAuiPaneInfo_FloatingSize_2, 2601). --define(wxAuiPaneInfo_Gripper, 2602). --define(wxAuiPaneInfo_GripperTop, 2603). --define(wxAuiPaneInfo_HasBorder, 2604). --define(wxAuiPaneInfo_HasCaption, 2605). --define(wxAuiPaneInfo_HasCloseButton, 2606). --define(wxAuiPaneInfo_HasFlag, 2607). --define(wxAuiPaneInfo_HasGripper, 2608). --define(wxAuiPaneInfo_HasGripperTop, 2609). --define(wxAuiPaneInfo_HasMaximizeButton, 2610). --define(wxAuiPaneInfo_HasMinimizeButton, 2611). --define(wxAuiPaneInfo_HasPinButton, 2612). --define(wxAuiPaneInfo_Hide, 2613). --define(wxAuiPaneInfo_IsBottomDockable, 2614). --define(wxAuiPaneInfo_IsDocked, 2615). --define(wxAuiPaneInfo_IsFixed, 2616). --define(wxAuiPaneInfo_IsFloatable, 2617). --define(wxAuiPaneInfo_IsFloating, 2618). --define(wxAuiPaneInfo_IsLeftDockable, 2619). --define(wxAuiPaneInfo_IsMovable, 2620). --define(wxAuiPaneInfo_IsOk, 2621). --define(wxAuiPaneInfo_IsResizable, 2622). --define(wxAuiPaneInfo_IsRightDockable, 2623). --define(wxAuiPaneInfo_IsShown, 2624). --define(wxAuiPaneInfo_IsToolbar, 2625). --define(wxAuiPaneInfo_IsTopDockable, 2626). --define(wxAuiPaneInfo_Layer, 2627). --define(wxAuiPaneInfo_Left, 2628). --define(wxAuiPaneInfo_LeftDockable, 2629). --define(wxAuiPaneInfo_MaxSize_1, 2630). --define(wxAuiPaneInfo_MaxSize_2, 2631). --define(wxAuiPaneInfo_MaximizeButton, 2632). --define(wxAuiPaneInfo_MinSize_1, 2633). --define(wxAuiPaneInfo_MinSize_2, 2634). --define(wxAuiPaneInfo_MinimizeButton, 2635). --define(wxAuiPaneInfo_Movable, 2636). --define(wxAuiPaneInfo_Name, 2637). --define(wxAuiPaneInfo_PaneBorder, 2638). --define(wxAuiPaneInfo_PinButton, 2639). --define(wxAuiPaneInfo_Position, 2640). --define(wxAuiPaneInfo_Resizable, 2641). --define(wxAuiPaneInfo_Right, 2642). --define(wxAuiPaneInfo_RightDockable, 2643). --define(wxAuiPaneInfo_Row, 2644). --define(wxAuiPaneInfo_SafeSet, 2645). --define(wxAuiPaneInfo_SetFlag, 2646). --define(wxAuiPaneInfo_Show, 2647). --define(wxAuiPaneInfo_ToolbarPane, 2648). --define(wxAuiPaneInfo_Top, 2649). --define(wxAuiPaneInfo_TopDockable, 2650). --define(wxAuiPaneInfo_Window, 2651). --define(wxAuiNotebook_new_0, 2652). --define(wxAuiNotebook_new_2, 2653). --define(wxAuiNotebook_AddPage, 2654). --define(wxAuiNotebook_Create, 2655). --define(wxAuiNotebook_DeletePage, 2656). --define(wxAuiNotebook_GetArtProvider, 2657). --define(wxAuiNotebook_GetPage, 2658). --define(wxAuiNotebook_GetPageBitmap, 2659). --define(wxAuiNotebook_GetPageCount, 2660). --define(wxAuiNotebook_GetPageIndex, 2661). --define(wxAuiNotebook_GetPageText, 2662). --define(wxAuiNotebook_GetSelection, 2663). --define(wxAuiNotebook_InsertPage, 2664). --define(wxAuiNotebook_RemovePage, 2665). --define(wxAuiNotebook_SetArtProvider, 2666). --define(wxAuiNotebook_SetFont, 2667). --define(wxAuiNotebook_SetPageBitmap, 2668). --define(wxAuiNotebook_SetPageText, 2669). --define(wxAuiNotebook_SetSelection, 2670). --define(wxAuiNotebook_SetTabCtrlHeight, 2671). --define(wxAuiNotebook_SetUniformBitmapSize, 2672). --define(wxAuiNotebook_destroy, 2673). --define(wxMDIParentFrame_new_0, 2674). --define(wxMDIParentFrame_new_4, 2675). --define(wxMDIParentFrame_destruct, 2676). --define(wxMDIParentFrame_ActivateNext, 2677). --define(wxMDIParentFrame_ActivatePrevious, 2678). --define(wxMDIParentFrame_ArrangeIcons, 2679). --define(wxMDIParentFrame_Cascade, 2680). --define(wxMDIParentFrame_Create, 2681). --define(wxMDIParentFrame_GetActiveChild, 2682). --define(wxMDIParentFrame_GetClientWindow, 2683). --define(wxMDIParentFrame_Tile, 2684). --define(wxMDIChildFrame_new_0, 2685). --define(wxMDIChildFrame_new_4, 2686). --define(wxMDIChildFrame_destruct, 2687). --define(wxMDIChildFrame_Activate, 2688). --define(wxMDIChildFrame_Create, 2689). --define(wxMDIChildFrame_Maximize, 2690). --define(wxMDIChildFrame_Restore, 2691). --define(wxMDIClientWindow_new_0, 2692). --define(wxMDIClientWindow_new_2, 2693). --define(wxMDIClientWindow_destruct, 2694). --define(wxMDIClientWindow_CreateClient, 2695). --define(wxLayoutAlgorithm_new, 2696). --define(wxLayoutAlgorithm_LayoutFrame, 2697). --define(wxLayoutAlgorithm_LayoutMDIFrame, 2698). --define(wxLayoutAlgorithm_LayoutWindow, 2699). --define(wxLayoutAlgorithm_destroy, 2700). --define(wxEvent_GetId, 2701). --define(wxEvent_GetSkipped, 2702). --define(wxEvent_GetTimestamp, 2703). --define(wxEvent_IsCommandEvent, 2704). --define(wxEvent_ResumePropagation, 2705). --define(wxEvent_ShouldPropagate, 2706). --define(wxEvent_Skip, 2707). --define(wxEvent_StopPropagation, 2708). --define(wxCommandEvent_getClientData, 2709). --define(wxCommandEvent_GetExtraLong, 2710). --define(wxCommandEvent_GetInt, 2711). --define(wxCommandEvent_GetSelection, 2712). --define(wxCommandEvent_GetString, 2713). --define(wxCommandEvent_IsChecked, 2714). --define(wxCommandEvent_IsSelection, 2715). --define(wxCommandEvent_SetInt, 2716). --define(wxCommandEvent_SetString, 2717). --define(wxScrollEvent_GetOrientation, 2718). --define(wxScrollEvent_GetPosition, 2719). --define(wxScrollWinEvent_GetOrientation, 2720). --define(wxScrollWinEvent_GetPosition, 2721). --define(wxMouseEvent_AltDown, 2722). --define(wxMouseEvent_Button, 2723). --define(wxMouseEvent_ButtonDClick, 2724). --define(wxMouseEvent_ButtonDown, 2725). --define(wxMouseEvent_ButtonUp, 2726). --define(wxMouseEvent_CmdDown, 2727). --define(wxMouseEvent_ControlDown, 2728). --define(wxMouseEvent_Dragging, 2729). --define(wxMouseEvent_Entering, 2730). --define(wxMouseEvent_GetButton, 2731). --define(wxMouseEvent_GetPosition, 2734). --define(wxMouseEvent_GetLogicalPosition, 2735). --define(wxMouseEvent_GetLinesPerAction, 2736). --define(wxMouseEvent_GetWheelRotation, 2737). --define(wxMouseEvent_GetWheelDelta, 2738). --define(wxMouseEvent_GetX, 2739). --define(wxMouseEvent_GetY, 2740). --define(wxMouseEvent_IsButton, 2741). --define(wxMouseEvent_IsPageScroll, 2742). --define(wxMouseEvent_Leaving, 2743). --define(wxMouseEvent_LeftDClick, 2744). --define(wxMouseEvent_LeftDown, 2745). --define(wxMouseEvent_LeftIsDown, 2746). --define(wxMouseEvent_LeftUp, 2747). --define(wxMouseEvent_MetaDown, 2748). --define(wxMouseEvent_MiddleDClick, 2749). --define(wxMouseEvent_MiddleDown, 2750). --define(wxMouseEvent_MiddleIsDown, 2751). --define(wxMouseEvent_MiddleUp, 2752). --define(wxMouseEvent_Moving, 2753). --define(wxMouseEvent_RightDClick, 2754). --define(wxMouseEvent_RightDown, 2755). --define(wxMouseEvent_RightIsDown, 2756). --define(wxMouseEvent_RightUp, 2757). --define(wxMouseEvent_ShiftDown, 2758). --define(wxSetCursorEvent_GetCursor, 2759). --define(wxSetCursorEvent_GetX, 2760). --define(wxSetCursorEvent_GetY, 2761). --define(wxSetCursorEvent_HasCursor, 2762). --define(wxSetCursorEvent_SetCursor, 2763). --define(wxKeyEvent_AltDown, 2764). --define(wxKeyEvent_CmdDown, 2765). --define(wxKeyEvent_ControlDown, 2766). --define(wxKeyEvent_GetKeyCode, 2767). --define(wxKeyEvent_GetModifiers, 2768). --define(wxKeyEvent_GetPosition, 2771). --define(wxKeyEvent_GetRawKeyCode, 2772). --define(wxKeyEvent_GetRawKeyFlags, 2773). --define(wxKeyEvent_GetUnicodeKey, 2774). --define(wxKeyEvent_GetX, 2775). --define(wxKeyEvent_GetY, 2776). --define(wxKeyEvent_HasModifiers, 2777). --define(wxKeyEvent_MetaDown, 2778). --define(wxKeyEvent_ShiftDown, 2779). --define(wxSizeEvent_GetSize, 2780). --define(wxMoveEvent_GetPosition, 2781). --define(wxEraseEvent_GetDC, 2782). --define(wxFocusEvent_GetWindow, 2783). --define(wxChildFocusEvent_GetWindow, 2784). --define(wxMenuEvent_GetMenu, 2785). --define(wxMenuEvent_GetMenuId, 2786). --define(wxMenuEvent_IsPopup, 2787). --define(wxCloseEvent_CanVeto, 2788). --define(wxCloseEvent_GetLoggingOff, 2789). --define(wxCloseEvent_SetCanVeto, 2790). --define(wxCloseEvent_SetLoggingOff, 2791). --define(wxCloseEvent_Veto, 2792). --define(wxShowEvent_SetShow, 2793). --define(wxShowEvent_GetShow, 2794). --define(wxIconizeEvent_Iconized, 2795). --define(wxJoystickEvent_ButtonDown, 2796). --define(wxJoystickEvent_ButtonIsDown, 2797). --define(wxJoystickEvent_ButtonUp, 2798). --define(wxJoystickEvent_GetButtonChange, 2799). --define(wxJoystickEvent_GetButtonState, 2800). --define(wxJoystickEvent_GetJoystick, 2801). --define(wxJoystickEvent_GetPosition, 2802). --define(wxJoystickEvent_GetZPosition, 2803). --define(wxJoystickEvent_IsButton, 2804). --define(wxJoystickEvent_IsMove, 2805). --define(wxJoystickEvent_IsZMove, 2806). --define(wxUpdateUIEvent_CanUpdate, 2807). --define(wxUpdateUIEvent_Check, 2808). --define(wxUpdateUIEvent_Enable, 2809). --define(wxUpdateUIEvent_Show, 2810). --define(wxUpdateUIEvent_GetChecked, 2811). --define(wxUpdateUIEvent_GetEnabled, 2812). --define(wxUpdateUIEvent_GetShown, 2813). --define(wxUpdateUIEvent_GetSetChecked, 2814). --define(wxUpdateUIEvent_GetSetEnabled, 2815). --define(wxUpdateUIEvent_GetSetShown, 2816). --define(wxUpdateUIEvent_GetSetText, 2817). --define(wxUpdateUIEvent_GetText, 2818). --define(wxUpdateUIEvent_GetMode, 2819). --define(wxUpdateUIEvent_GetUpdateInterval, 2820). --define(wxUpdateUIEvent_ResetUpdateTime, 2821). --define(wxUpdateUIEvent_SetMode, 2822). --define(wxUpdateUIEvent_SetText, 2823). --define(wxUpdateUIEvent_SetUpdateInterval, 2824). --define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2825). --define(wxPaletteChangedEvent_SetChangedWindow, 2826). --define(wxPaletteChangedEvent_GetChangedWindow, 2827). --define(wxQueryNewPaletteEvent_SetPaletteRealized, 2828). --define(wxQueryNewPaletteEvent_GetPaletteRealized, 2829). --define(wxNavigationKeyEvent_GetDirection, 2830). --define(wxNavigationKeyEvent_SetDirection, 2831). --define(wxNavigationKeyEvent_IsWindowChange, 2832). --define(wxNavigationKeyEvent_SetWindowChange, 2833). --define(wxNavigationKeyEvent_IsFromTab, 2834). --define(wxNavigationKeyEvent_SetFromTab, 2835). --define(wxNavigationKeyEvent_GetCurrentFocus, 2836). --define(wxNavigationKeyEvent_SetCurrentFocus, 2837). --define(wxHelpEvent_GetOrigin, 2838). --define(wxHelpEvent_GetPosition, 2839). --define(wxHelpEvent_SetOrigin, 2840). --define(wxHelpEvent_SetPosition, 2841). --define(wxContextMenuEvent_GetPosition, 2842). --define(wxContextMenuEvent_SetPosition, 2843). --define(wxIdleEvent_CanSend, 2844). --define(wxIdleEvent_GetMode, 2845). --define(wxIdleEvent_RequestMore, 2846). --define(wxIdleEvent_MoreRequested, 2847). --define(wxIdleEvent_SetMode, 2848). --define(wxGridEvent_AltDown, 2849). --define(wxGridEvent_ControlDown, 2850). --define(wxGridEvent_GetCol, 2851). --define(wxGridEvent_GetPosition, 2852). --define(wxGridEvent_GetRow, 2853). --define(wxGridEvent_MetaDown, 2854). --define(wxGridEvent_Selecting, 2855). --define(wxGridEvent_ShiftDown, 2856). --define(wxNotifyEvent_Allow, 2857). --define(wxNotifyEvent_IsAllowed, 2858). --define(wxNotifyEvent_Veto, 2859). --define(wxSashEvent_GetEdge, 2860). --define(wxSashEvent_GetDragRect, 2861). --define(wxSashEvent_GetDragStatus, 2862). --define(wxListEvent_GetCacheFrom, 2863). --define(wxListEvent_GetCacheTo, 2864). --define(wxListEvent_GetKeyCode, 2865). --define(wxListEvent_GetIndex, 2866). --define(wxListEvent_GetColumn, 2867). --define(wxListEvent_GetPoint, 2868). --define(wxListEvent_GetLabel, 2869). --define(wxListEvent_GetText, 2870). --define(wxListEvent_GetImage, 2871). --define(wxListEvent_GetData, 2872). --define(wxListEvent_GetMask, 2873). --define(wxListEvent_GetItem, 2874). --define(wxListEvent_IsEditCancelled, 2875). --define(wxDateEvent_GetDate, 2876). --define(wxCalendarEvent_GetWeekDay, 2877). --define(wxFileDirPickerEvent_GetPath, 2878). --define(wxColourPickerEvent_GetColour, 2879). --define(wxFontPickerEvent_GetFont, 2880). --define(wxStyledTextEvent_GetPosition, 2881). --define(wxStyledTextEvent_GetKey, 2882). --define(wxStyledTextEvent_GetModifiers, 2883). --define(wxStyledTextEvent_GetModificationType, 2884). --define(wxStyledTextEvent_GetText, 2885). --define(wxStyledTextEvent_GetLength, 2886). --define(wxStyledTextEvent_GetLinesAdded, 2887). --define(wxStyledTextEvent_GetLine, 2888). --define(wxStyledTextEvent_GetFoldLevelNow, 2889). --define(wxStyledTextEvent_GetFoldLevelPrev, 2890). --define(wxStyledTextEvent_GetMargin, 2891). --define(wxStyledTextEvent_GetMessage, 2892). --define(wxStyledTextEvent_GetWParam, 2893). --define(wxStyledTextEvent_GetLParam, 2894). --define(wxStyledTextEvent_GetListType, 2895). --define(wxStyledTextEvent_GetX, 2896). --define(wxStyledTextEvent_GetY, 2897). --define(wxStyledTextEvent_GetDragText, 2898). --define(wxStyledTextEvent_GetDragAllowMove, 2899). --define(wxStyledTextEvent_GetDragResult, 2900). --define(wxStyledTextEvent_GetShift, 2901). --define(wxStyledTextEvent_GetControl, 2902). --define(wxStyledTextEvent_GetAlt, 2903). --define(utils_wxGetKeyState, 2904). --define(utils_wxGetMousePosition, 2905). --define(utils_wxGetMouseState, 2906). --define(utils_wxSetDetectableAutoRepeat, 2907). --define(utils_wxBell, 2908). --define(utils_wxFindMenuItemId, 2909). --define(utils_wxGenericFindWindowAtPoint, 2910). --define(utils_wxFindWindowAtPoint, 2911). --define(utils_wxBeginBusyCursor, 2912). --define(utils_wxEndBusyCursor, 2913). --define(utils_wxIsBusy, 2914). --define(utils_wxShutdown, 2915). --define(utils_wxShell, 2916). --define(utils_wxLaunchDefaultBrowser, 2917). --define(utils_wxGetEmailAddress, 2918). --define(utils_wxGetUserId, 2919). --define(utils_wxGetHomeDir, 2920). --define(utils_wxNewId, 2921). --define(utils_wxRegisterId, 2922). --define(utils_wxGetCurrentId, 2923). --define(utils_wxGetOsDescription, 2924). --define(utils_wxIsPlatformLittleEndian, 2925). --define(utils_wxIsPlatform64Bit, 2926). --define(wxPrintout_new, 2927). --define(wxPrintout_destruct, 2928). --define(wxPrintout_GetDC, 2929). --define(wxPrintout_GetPageSizeMM, 2930). --define(wxPrintout_GetPageSizePixels, 2931). --define(wxPrintout_GetPaperRectPixels, 2932). --define(wxPrintout_GetPPIPrinter, 2933). --define(wxPrintout_GetPPIScreen, 2934). --define(wxPrintout_GetTitle, 2935). --define(wxPrintout_IsPreview, 2936). --define(wxPrintout_FitThisSizeToPaper, 2937). --define(wxPrintout_FitThisSizeToPage, 2938). --define(wxPrintout_FitThisSizeToPageMargins, 2939). --define(wxPrintout_MapScreenSizeToPaper, 2940). --define(wxPrintout_MapScreenSizeToPage, 2941). --define(wxPrintout_MapScreenSizeToPageMargins, 2942). --define(wxPrintout_MapScreenSizeToDevice, 2943). --define(wxPrintout_GetLogicalPaperRect, 2944). --define(wxPrintout_GetLogicalPageRect, 2945). --define(wxPrintout_GetLogicalPageMarginsRect, 2946). --define(wxPrintout_SetLogicalOrigin, 2947). --define(wxPrintout_OffsetLogicalOrigin, 2948). --define(wxStyledTextCtrl_new_2, 2949). --define(wxStyledTextCtrl_new_0, 2950). --define(wxStyledTextCtrl_destruct, 2951). --define(wxStyledTextCtrl_Create, 2952). --define(wxStyledTextCtrl_AddText, 2953). --define(wxStyledTextCtrl_AddStyledText, 2954). --define(wxStyledTextCtrl_InsertText, 2955). --define(wxStyledTextCtrl_ClearAll, 2956). --define(wxStyledTextCtrl_ClearDocumentStyle, 2957). --define(wxStyledTextCtrl_GetLength, 2958). --define(wxStyledTextCtrl_GetCharAt, 2959). --define(wxStyledTextCtrl_GetCurrentPos, 2960). --define(wxStyledTextCtrl_GetAnchor, 2961). --define(wxStyledTextCtrl_GetStyleAt, 2962). --define(wxStyledTextCtrl_Redo, 2963). --define(wxStyledTextCtrl_SetUndoCollection, 2964). --define(wxStyledTextCtrl_SelectAll, 2965). --define(wxStyledTextCtrl_SetSavePoint, 2966). --define(wxStyledTextCtrl_GetStyledText, 2967). --define(wxStyledTextCtrl_CanRedo, 2968). --define(wxStyledTextCtrl_MarkerLineFromHandle, 2969). --define(wxStyledTextCtrl_MarkerDeleteHandle, 2970). --define(wxStyledTextCtrl_GetUndoCollection, 2971). --define(wxStyledTextCtrl_GetViewWhiteSpace, 2972). --define(wxStyledTextCtrl_SetViewWhiteSpace, 2973). --define(wxStyledTextCtrl_PositionFromPoint, 2974). --define(wxStyledTextCtrl_PositionFromPointClose, 2975). --define(wxStyledTextCtrl_GotoLine, 2976). --define(wxStyledTextCtrl_GotoPos, 2977). --define(wxStyledTextCtrl_SetAnchor, 2978). --define(wxStyledTextCtrl_GetCurLine, 2979). --define(wxStyledTextCtrl_GetEndStyled, 2980). --define(wxStyledTextCtrl_ConvertEOLs, 2981). --define(wxStyledTextCtrl_GetEOLMode, 2982). --define(wxStyledTextCtrl_SetEOLMode, 2983). --define(wxStyledTextCtrl_StartStyling, 2984). --define(wxStyledTextCtrl_SetStyling, 2985). --define(wxStyledTextCtrl_GetBufferedDraw, 2986). --define(wxStyledTextCtrl_SetBufferedDraw, 2987). --define(wxStyledTextCtrl_SetTabWidth, 2988). --define(wxStyledTextCtrl_GetTabWidth, 2989). --define(wxStyledTextCtrl_SetCodePage, 2990). --define(wxStyledTextCtrl_MarkerDefine, 2991). --define(wxStyledTextCtrl_MarkerSetForeground, 2992). --define(wxStyledTextCtrl_MarkerSetBackground, 2993). --define(wxStyledTextCtrl_MarkerAdd, 2994). --define(wxStyledTextCtrl_MarkerDelete, 2995). --define(wxStyledTextCtrl_MarkerDeleteAll, 2996). --define(wxStyledTextCtrl_MarkerGet, 2997). --define(wxStyledTextCtrl_MarkerNext, 2998). --define(wxStyledTextCtrl_MarkerPrevious, 2999). --define(wxStyledTextCtrl_MarkerDefineBitmap, 3000). --define(wxStyledTextCtrl_MarkerAddSet, 3001). --define(wxStyledTextCtrl_MarkerSetAlpha, 3002). --define(wxStyledTextCtrl_SetMarginType, 3003). --define(wxStyledTextCtrl_GetMarginType, 3004). --define(wxStyledTextCtrl_SetMarginWidth, 3005). --define(wxStyledTextCtrl_GetMarginWidth, 3006). --define(wxStyledTextCtrl_SetMarginMask, 3007). --define(wxStyledTextCtrl_GetMarginMask, 3008). --define(wxStyledTextCtrl_SetMarginSensitive, 3009). --define(wxStyledTextCtrl_GetMarginSensitive, 3010). --define(wxStyledTextCtrl_StyleClearAll, 3011). --define(wxStyledTextCtrl_StyleSetForeground, 3012). --define(wxStyledTextCtrl_StyleSetBackground, 3013). --define(wxStyledTextCtrl_StyleSetBold, 3014). --define(wxStyledTextCtrl_StyleSetItalic, 3015). --define(wxStyledTextCtrl_StyleSetSize, 3016). --define(wxStyledTextCtrl_StyleSetFaceName, 3017). --define(wxStyledTextCtrl_StyleSetEOLFilled, 3018). --define(wxStyledTextCtrl_StyleResetDefault, 3019). --define(wxStyledTextCtrl_StyleSetUnderline, 3020). --define(wxStyledTextCtrl_StyleSetCase, 3021). --define(wxStyledTextCtrl_StyleSetHotSpot, 3022). --define(wxStyledTextCtrl_SetSelForeground, 3023). --define(wxStyledTextCtrl_SetSelBackground, 3024). --define(wxStyledTextCtrl_GetSelAlpha, 3025). --define(wxStyledTextCtrl_SetSelAlpha, 3026). --define(wxStyledTextCtrl_SetCaretForeground, 3027). --define(wxStyledTextCtrl_CmdKeyAssign, 3028). --define(wxStyledTextCtrl_CmdKeyClear, 3029). --define(wxStyledTextCtrl_CmdKeyClearAll, 3030). --define(wxStyledTextCtrl_SetStyleBytes, 3031). --define(wxStyledTextCtrl_StyleSetVisible, 3032). --define(wxStyledTextCtrl_GetCaretPeriod, 3033). --define(wxStyledTextCtrl_SetCaretPeriod, 3034). --define(wxStyledTextCtrl_SetWordChars, 3035). --define(wxStyledTextCtrl_BeginUndoAction, 3036). --define(wxStyledTextCtrl_EndUndoAction, 3037). --define(wxStyledTextCtrl_IndicatorSetStyle, 3038). --define(wxStyledTextCtrl_IndicatorGetStyle, 3039). --define(wxStyledTextCtrl_IndicatorSetForeground, 3040). --define(wxStyledTextCtrl_IndicatorGetForeground, 3041). --define(wxStyledTextCtrl_SetWhitespaceForeground, 3042). --define(wxStyledTextCtrl_SetWhitespaceBackground, 3043). --define(wxStyledTextCtrl_GetStyleBits, 3044). --define(wxStyledTextCtrl_SetLineState, 3045). --define(wxStyledTextCtrl_GetLineState, 3046). --define(wxStyledTextCtrl_GetMaxLineState, 3047). --define(wxStyledTextCtrl_GetCaretLineVisible, 3048). --define(wxStyledTextCtrl_SetCaretLineVisible, 3049). --define(wxStyledTextCtrl_GetCaretLineBackground, 3050). --define(wxStyledTextCtrl_SetCaretLineBackground, 3051). --define(wxStyledTextCtrl_AutoCompShow, 3052). --define(wxStyledTextCtrl_AutoCompCancel, 3053). --define(wxStyledTextCtrl_AutoCompActive, 3054). --define(wxStyledTextCtrl_AutoCompPosStart, 3055). --define(wxStyledTextCtrl_AutoCompComplete, 3056). --define(wxStyledTextCtrl_AutoCompStops, 3057). --define(wxStyledTextCtrl_AutoCompSetSeparator, 3058). --define(wxStyledTextCtrl_AutoCompGetSeparator, 3059). --define(wxStyledTextCtrl_AutoCompSelect, 3060). --define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3061). --define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3062). --define(wxStyledTextCtrl_AutoCompSetFillUps, 3063). --define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3064). --define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3065). --define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3066). --define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3067). --define(wxStyledTextCtrl_UserListShow, 3068). --define(wxStyledTextCtrl_AutoCompSetAutoHide, 3069). --define(wxStyledTextCtrl_AutoCompGetAutoHide, 3070). --define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3071). --define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3072). --define(wxStyledTextCtrl_RegisterImage, 3073). --define(wxStyledTextCtrl_ClearRegisteredImages, 3074). --define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3075). --define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3076). --define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3077). --define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3078). --define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3079). --define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3080). --define(wxStyledTextCtrl_SetIndent, 3081). --define(wxStyledTextCtrl_GetIndent, 3082). --define(wxStyledTextCtrl_SetUseTabs, 3083). --define(wxStyledTextCtrl_GetUseTabs, 3084). --define(wxStyledTextCtrl_SetLineIndentation, 3085). --define(wxStyledTextCtrl_GetLineIndentation, 3086). --define(wxStyledTextCtrl_GetLineIndentPosition, 3087). --define(wxStyledTextCtrl_GetColumn, 3088). --define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3089). --define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3090). --define(wxStyledTextCtrl_SetIndentationGuides, 3091). --define(wxStyledTextCtrl_GetIndentationGuides, 3092). --define(wxStyledTextCtrl_SetHighlightGuide, 3093). --define(wxStyledTextCtrl_GetHighlightGuide, 3094). --define(wxStyledTextCtrl_GetLineEndPosition, 3095). --define(wxStyledTextCtrl_GetCodePage, 3096). --define(wxStyledTextCtrl_GetCaretForeground, 3097). --define(wxStyledTextCtrl_GetReadOnly, 3098). --define(wxStyledTextCtrl_SetCurrentPos, 3099). --define(wxStyledTextCtrl_SetSelectionStart, 3100). --define(wxStyledTextCtrl_GetSelectionStart, 3101). --define(wxStyledTextCtrl_SetSelectionEnd, 3102). --define(wxStyledTextCtrl_GetSelectionEnd, 3103). --define(wxStyledTextCtrl_SetPrintMagnification, 3104). --define(wxStyledTextCtrl_GetPrintMagnification, 3105). --define(wxStyledTextCtrl_SetPrintColourMode, 3106). --define(wxStyledTextCtrl_GetPrintColourMode, 3107). --define(wxStyledTextCtrl_FindText, 3108). --define(wxStyledTextCtrl_FormatRange, 3109). --define(wxStyledTextCtrl_GetFirstVisibleLine, 3110). --define(wxStyledTextCtrl_GetLine, 3111). --define(wxStyledTextCtrl_GetLineCount, 3112). --define(wxStyledTextCtrl_SetMarginLeft, 3113). --define(wxStyledTextCtrl_GetMarginLeft, 3114). --define(wxStyledTextCtrl_SetMarginRight, 3115). --define(wxStyledTextCtrl_GetMarginRight, 3116). --define(wxStyledTextCtrl_GetModify, 3117). --define(wxStyledTextCtrl_SetSelection, 3118). --define(wxStyledTextCtrl_GetSelectedText, 3119). --define(wxStyledTextCtrl_GetTextRange, 3120). --define(wxStyledTextCtrl_HideSelection, 3121). --define(wxStyledTextCtrl_LineFromPosition, 3122). --define(wxStyledTextCtrl_PositionFromLine, 3123). --define(wxStyledTextCtrl_LineScroll, 3124). --define(wxStyledTextCtrl_EnsureCaretVisible, 3125). --define(wxStyledTextCtrl_ReplaceSelection, 3126). --define(wxStyledTextCtrl_SetReadOnly, 3127). --define(wxStyledTextCtrl_CanPaste, 3128). --define(wxStyledTextCtrl_CanUndo, 3129). --define(wxStyledTextCtrl_EmptyUndoBuffer, 3130). --define(wxStyledTextCtrl_Undo, 3131). --define(wxStyledTextCtrl_Cut, 3132). --define(wxStyledTextCtrl_Copy, 3133). --define(wxStyledTextCtrl_Paste, 3134). --define(wxStyledTextCtrl_Clear, 3135). --define(wxStyledTextCtrl_SetText, 3136). --define(wxStyledTextCtrl_GetText, 3137). --define(wxStyledTextCtrl_GetTextLength, 3138). --define(wxStyledTextCtrl_GetOvertype, 3139). --define(wxStyledTextCtrl_SetCaretWidth, 3140). --define(wxStyledTextCtrl_GetCaretWidth, 3141). --define(wxStyledTextCtrl_SetTargetStart, 3142). --define(wxStyledTextCtrl_GetTargetStart, 3143). --define(wxStyledTextCtrl_SetTargetEnd, 3144). --define(wxStyledTextCtrl_GetTargetEnd, 3145). --define(wxStyledTextCtrl_ReplaceTarget, 3146). --define(wxStyledTextCtrl_SearchInTarget, 3147). --define(wxStyledTextCtrl_SetSearchFlags, 3148). --define(wxStyledTextCtrl_GetSearchFlags, 3149). --define(wxStyledTextCtrl_CallTipShow, 3150). --define(wxStyledTextCtrl_CallTipCancel, 3151). --define(wxStyledTextCtrl_CallTipActive, 3152). --define(wxStyledTextCtrl_CallTipPosAtStart, 3153). --define(wxStyledTextCtrl_CallTipSetHighlight, 3154). --define(wxStyledTextCtrl_CallTipSetBackground, 3155). --define(wxStyledTextCtrl_CallTipSetForeground, 3156). --define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3157). --define(wxStyledTextCtrl_CallTipUseStyle, 3158). --define(wxStyledTextCtrl_VisibleFromDocLine, 3159). --define(wxStyledTextCtrl_DocLineFromVisible, 3160). --define(wxStyledTextCtrl_WrapCount, 3161). --define(wxStyledTextCtrl_SetFoldLevel, 3162). --define(wxStyledTextCtrl_GetFoldLevel, 3163). --define(wxStyledTextCtrl_GetLastChild, 3164). --define(wxStyledTextCtrl_GetFoldParent, 3165). --define(wxStyledTextCtrl_ShowLines, 3166). --define(wxStyledTextCtrl_HideLines, 3167). --define(wxStyledTextCtrl_GetLineVisible, 3168). --define(wxStyledTextCtrl_SetFoldExpanded, 3169). --define(wxStyledTextCtrl_GetFoldExpanded, 3170). --define(wxStyledTextCtrl_ToggleFold, 3171). --define(wxStyledTextCtrl_EnsureVisible, 3172). --define(wxStyledTextCtrl_SetFoldFlags, 3173). --define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3174). --define(wxStyledTextCtrl_SetTabIndents, 3175). --define(wxStyledTextCtrl_GetTabIndents, 3176). --define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3177). --define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3178). --define(wxStyledTextCtrl_SetMouseDwellTime, 3179). --define(wxStyledTextCtrl_GetMouseDwellTime, 3180). --define(wxStyledTextCtrl_WordStartPosition, 3181). --define(wxStyledTextCtrl_WordEndPosition, 3182). --define(wxStyledTextCtrl_SetWrapMode, 3183). --define(wxStyledTextCtrl_GetWrapMode, 3184). --define(wxStyledTextCtrl_SetWrapVisualFlags, 3185). --define(wxStyledTextCtrl_GetWrapVisualFlags, 3186). --define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3187). --define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3188). --define(wxStyledTextCtrl_SetWrapStartIndent, 3189). --define(wxStyledTextCtrl_GetWrapStartIndent, 3190). --define(wxStyledTextCtrl_SetLayoutCache, 3191). --define(wxStyledTextCtrl_GetLayoutCache, 3192). --define(wxStyledTextCtrl_SetScrollWidth, 3193). --define(wxStyledTextCtrl_GetScrollWidth, 3194). --define(wxStyledTextCtrl_TextWidth, 3195). --define(wxStyledTextCtrl_GetEndAtLastLine, 3196). --define(wxStyledTextCtrl_TextHeight, 3197). --define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3198). --define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3199). --define(wxStyledTextCtrl_AppendText, 3200). --define(wxStyledTextCtrl_GetTwoPhaseDraw, 3201). --define(wxStyledTextCtrl_SetTwoPhaseDraw, 3202). --define(wxStyledTextCtrl_TargetFromSelection, 3203). --define(wxStyledTextCtrl_LinesJoin, 3204). --define(wxStyledTextCtrl_LinesSplit, 3205). --define(wxStyledTextCtrl_SetFoldMarginColour, 3206). --define(wxStyledTextCtrl_SetFoldMarginHiColour, 3207). --define(wxStyledTextCtrl_LineDown, 3208). --define(wxStyledTextCtrl_LineDownExtend, 3209). --define(wxStyledTextCtrl_LineUp, 3210). --define(wxStyledTextCtrl_LineUpExtend, 3211). --define(wxStyledTextCtrl_CharLeft, 3212). --define(wxStyledTextCtrl_CharLeftExtend, 3213). --define(wxStyledTextCtrl_CharRight, 3214). --define(wxStyledTextCtrl_CharRightExtend, 3215). --define(wxStyledTextCtrl_WordLeft, 3216). --define(wxStyledTextCtrl_WordLeftExtend, 3217). --define(wxStyledTextCtrl_WordRight, 3218). --define(wxStyledTextCtrl_WordRightExtend, 3219). --define(wxStyledTextCtrl_Home, 3220). --define(wxStyledTextCtrl_HomeExtend, 3221). --define(wxStyledTextCtrl_LineEnd, 3222). --define(wxStyledTextCtrl_LineEndExtend, 3223). --define(wxStyledTextCtrl_DocumentStart, 3224). --define(wxStyledTextCtrl_DocumentStartExtend, 3225). --define(wxStyledTextCtrl_DocumentEnd, 3226). --define(wxStyledTextCtrl_DocumentEndExtend, 3227). --define(wxStyledTextCtrl_PageUp, 3228). --define(wxStyledTextCtrl_PageUpExtend, 3229). --define(wxStyledTextCtrl_PageDown, 3230). --define(wxStyledTextCtrl_PageDownExtend, 3231). --define(wxStyledTextCtrl_EditToggleOvertype, 3232). --define(wxStyledTextCtrl_Cancel, 3233). --define(wxStyledTextCtrl_DeleteBack, 3234). --define(wxStyledTextCtrl_Tab, 3235). --define(wxStyledTextCtrl_BackTab, 3236). --define(wxStyledTextCtrl_NewLine, 3237). --define(wxStyledTextCtrl_FormFeed, 3238). --define(wxStyledTextCtrl_VCHome, 3239). --define(wxStyledTextCtrl_VCHomeExtend, 3240). --define(wxStyledTextCtrl_ZoomIn, 3241). --define(wxStyledTextCtrl_ZoomOut, 3242). --define(wxStyledTextCtrl_DelWordLeft, 3243). --define(wxStyledTextCtrl_DelWordRight, 3244). --define(wxStyledTextCtrl_LineCut, 3245). --define(wxStyledTextCtrl_LineDelete, 3246). --define(wxStyledTextCtrl_LineTranspose, 3247). --define(wxStyledTextCtrl_LineDuplicate, 3248). --define(wxStyledTextCtrl_LowerCase, 3249). --define(wxStyledTextCtrl_UpperCase, 3250). --define(wxStyledTextCtrl_LineScrollDown, 3251). --define(wxStyledTextCtrl_LineScrollUp, 3252). --define(wxStyledTextCtrl_DeleteBackNotLine, 3253). --define(wxStyledTextCtrl_HomeDisplay, 3254). --define(wxStyledTextCtrl_HomeDisplayExtend, 3255). --define(wxStyledTextCtrl_LineEndDisplay, 3256). --define(wxStyledTextCtrl_LineEndDisplayExtend, 3257). --define(wxStyledTextCtrl_HomeWrapExtend, 3258). --define(wxStyledTextCtrl_LineEndWrap, 3259). --define(wxStyledTextCtrl_LineEndWrapExtend, 3260). --define(wxStyledTextCtrl_VCHomeWrap, 3261). --define(wxStyledTextCtrl_VCHomeWrapExtend, 3262). --define(wxStyledTextCtrl_LineCopy, 3263). --define(wxStyledTextCtrl_MoveCaretInsideView, 3264). --define(wxStyledTextCtrl_LineLength, 3265). --define(wxStyledTextCtrl_BraceHighlight, 3266). --define(wxStyledTextCtrl_BraceBadLight, 3267). --define(wxStyledTextCtrl_BraceMatch, 3268). --define(wxStyledTextCtrl_GetViewEOL, 3269). --define(wxStyledTextCtrl_SetViewEOL, 3270). --define(wxStyledTextCtrl_SetModEventMask, 3271). --define(wxStyledTextCtrl_GetEdgeColumn, 3272). --define(wxStyledTextCtrl_SetEdgeColumn, 3273). --define(wxStyledTextCtrl_SetEdgeMode, 3274). --define(wxStyledTextCtrl_GetEdgeMode, 3275). --define(wxStyledTextCtrl_GetEdgeColour, 3276). --define(wxStyledTextCtrl_SetEdgeColour, 3277). --define(wxStyledTextCtrl_SearchAnchor, 3278). --define(wxStyledTextCtrl_SearchNext, 3279). --define(wxStyledTextCtrl_SearchPrev, 3280). --define(wxStyledTextCtrl_LinesOnScreen, 3281). --define(wxStyledTextCtrl_UsePopUp, 3282). --define(wxStyledTextCtrl_SelectionIsRectangle, 3283). --define(wxStyledTextCtrl_SetZoom, 3284). --define(wxStyledTextCtrl_GetZoom, 3285). --define(wxStyledTextCtrl_GetModEventMask, 3286). --define(wxStyledTextCtrl_SetSTCFocus, 3287). --define(wxStyledTextCtrl_GetSTCFocus, 3288). --define(wxStyledTextCtrl_SetStatus, 3289). --define(wxStyledTextCtrl_GetStatus, 3290). --define(wxStyledTextCtrl_SetMouseDownCaptures, 3291). --define(wxStyledTextCtrl_GetMouseDownCaptures, 3292). --define(wxStyledTextCtrl_SetSTCCursor, 3293). --define(wxStyledTextCtrl_GetSTCCursor, 3294). --define(wxStyledTextCtrl_SetControlCharSymbol, 3295). --define(wxStyledTextCtrl_GetControlCharSymbol, 3296). --define(wxStyledTextCtrl_WordPartLeft, 3297). --define(wxStyledTextCtrl_WordPartLeftExtend, 3298). --define(wxStyledTextCtrl_WordPartRight, 3299). --define(wxStyledTextCtrl_WordPartRightExtend, 3300). --define(wxStyledTextCtrl_SetVisiblePolicy, 3301). --define(wxStyledTextCtrl_DelLineLeft, 3302). --define(wxStyledTextCtrl_DelLineRight, 3303). --define(wxStyledTextCtrl_GetXOffset, 3304). --define(wxStyledTextCtrl_ChooseCaretX, 3305). --define(wxStyledTextCtrl_SetXCaretPolicy, 3306). --define(wxStyledTextCtrl_SetYCaretPolicy, 3307). --define(wxStyledTextCtrl_GetPrintWrapMode, 3308). --define(wxStyledTextCtrl_SetHotspotActiveForeground, 3309). --define(wxStyledTextCtrl_SetHotspotActiveBackground, 3310). --define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3311). --define(wxStyledTextCtrl_SetHotspotSingleLine, 3312). --define(wxStyledTextCtrl_ParaDownExtend, 3313). --define(wxStyledTextCtrl_ParaUp, 3314). --define(wxStyledTextCtrl_ParaUpExtend, 3315). --define(wxStyledTextCtrl_PositionBefore, 3316). --define(wxStyledTextCtrl_PositionAfter, 3317). --define(wxStyledTextCtrl_CopyRange, 3318). --define(wxStyledTextCtrl_CopyText, 3319). --define(wxStyledTextCtrl_SetSelectionMode, 3320). --define(wxStyledTextCtrl_GetSelectionMode, 3321). --define(wxStyledTextCtrl_LineDownRectExtend, 3322). --define(wxStyledTextCtrl_LineUpRectExtend, 3323). --define(wxStyledTextCtrl_CharLeftRectExtend, 3324). --define(wxStyledTextCtrl_CharRightRectExtend, 3325). --define(wxStyledTextCtrl_HomeRectExtend, 3326). --define(wxStyledTextCtrl_VCHomeRectExtend, 3327). --define(wxStyledTextCtrl_LineEndRectExtend, 3328). --define(wxStyledTextCtrl_PageUpRectExtend, 3329). --define(wxStyledTextCtrl_PageDownRectExtend, 3330). --define(wxStyledTextCtrl_StutteredPageUp, 3331). --define(wxStyledTextCtrl_StutteredPageUpExtend, 3332). --define(wxStyledTextCtrl_StutteredPageDown, 3333). --define(wxStyledTextCtrl_StutteredPageDownExtend, 3334). --define(wxStyledTextCtrl_WordLeftEnd, 3335). --define(wxStyledTextCtrl_WordLeftEndExtend, 3336). --define(wxStyledTextCtrl_WordRightEnd, 3337). --define(wxStyledTextCtrl_WordRightEndExtend, 3338). --define(wxStyledTextCtrl_SetWhitespaceChars, 3339). --define(wxStyledTextCtrl_SetCharsDefault, 3340). --define(wxStyledTextCtrl_AutoCompGetCurrent, 3341). --define(wxStyledTextCtrl_Allocate, 3342). --define(wxStyledTextCtrl_FindColumn, 3343). --define(wxStyledTextCtrl_GetCaretSticky, 3344). --define(wxStyledTextCtrl_SetCaretSticky, 3345). --define(wxStyledTextCtrl_ToggleCaretSticky, 3346). --define(wxStyledTextCtrl_SetPasteConvertEndings, 3347). --define(wxStyledTextCtrl_GetPasteConvertEndings, 3348). --define(wxStyledTextCtrl_SelectionDuplicate, 3349). --define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3350). --define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3351). --define(wxStyledTextCtrl_StartRecord, 3352). --define(wxStyledTextCtrl_StopRecord, 3353). --define(wxStyledTextCtrl_SetLexer, 3354). --define(wxStyledTextCtrl_GetLexer, 3355). --define(wxStyledTextCtrl_Colourise, 3356). --define(wxStyledTextCtrl_SetProperty, 3357). --define(wxStyledTextCtrl_SetKeyWords, 3358). --define(wxStyledTextCtrl_SetLexerLanguage, 3359). --define(wxStyledTextCtrl_GetProperty, 3360). --define(wxStyledTextCtrl_GetStyleBitsNeeded, 3361). --define(wxStyledTextCtrl_GetCurrentLine, 3362). --define(wxStyledTextCtrl_StyleSetSpec, 3363). --define(wxStyledTextCtrl_StyleSetFont, 3364). --define(wxStyledTextCtrl_StyleSetFontAttr, 3365). --define(wxStyledTextCtrl_StyleSetCharacterSet, 3366). --define(wxStyledTextCtrl_StyleSetFontEncoding, 3367). --define(wxStyledTextCtrl_CmdKeyExecute, 3368). --define(wxStyledTextCtrl_SetMargins, 3369). --define(wxStyledTextCtrl_GetSelection, 3370). --define(wxStyledTextCtrl_PointFromPosition, 3371). --define(wxStyledTextCtrl_ScrollToLine, 3372). --define(wxStyledTextCtrl_ScrollToColumn, 3373). --define(wxStyledTextCtrl_SetVScrollBar, 3374). --define(wxStyledTextCtrl_SetHScrollBar, 3375). --define(wxStyledTextCtrl_GetLastKeydownProcessed, 3376). --define(wxStyledTextCtrl_SetLastKeydownProcessed, 3377). --define(wxStyledTextCtrl_SaveFile, 3378). --define(wxStyledTextCtrl_LoadFile, 3379). --define(wxStyledTextCtrl_DoDragOver, 3380). --define(wxStyledTextCtrl_DoDropText, 3381). --define(wxStyledTextCtrl_GetUseAntiAliasing, 3382). --define(wxStyledTextCtrl_AddTextRaw, 3383). --define(wxStyledTextCtrl_InsertTextRaw, 3384). --define(wxStyledTextCtrl_GetCurLineRaw, 3385). --define(wxStyledTextCtrl_GetLineRaw, 3386). --define(wxStyledTextCtrl_GetSelectedTextRaw, 3387). --define(wxStyledTextCtrl_GetTextRangeRaw, 3388). --define(wxStyledTextCtrl_SetTextRaw, 3389). --define(wxStyledTextCtrl_GetTextRaw, 3390). --define(wxStyledTextCtrl_AppendTextRaw, 3391). --define(wxArtProvider_GetBitmap, 3392). --define(wxArtProvider_GetIcon, 3393). --define(wxTreeEvent_GetKeyCode, 3394). --define(wxTreeEvent_GetItem, 3395). --define(wxTreeEvent_GetKeyEvent, 3396). --define(wxTreeEvent_GetLabel, 3397). --define(wxTreeEvent_GetOldItem, 3398). --define(wxTreeEvent_GetPoint, 3399). --define(wxTreeEvent_IsEditCancelled, 3400). --define(wxTreeEvent_SetToolTip, 3401). --define(wxNotebookEvent_GetOldSelection, 3402). --define(wxNotebookEvent_GetSelection, 3403). --define(wxNotebookEvent_SetOldSelection, 3404). --define(wxNotebookEvent_SetSelection, 3405). --define(wxFileDataObject_new, 3406). --define(wxFileDataObject_AddFile, 3407). --define(wxFileDataObject_GetFilenames, 3408). --define(wxFileDataObject_destroy, 3409). --define(wxTextDataObject_new, 3410). --define(wxTextDataObject_GetTextLength, 3411). --define(wxTextDataObject_GetText, 3412). --define(wxTextDataObject_SetText, 3413). --define(wxTextDataObject_destroy, 3414). --define(wxBitmapDataObject_new_1_1, 3415). --define(wxBitmapDataObject_new_1_0, 3416). --define(wxBitmapDataObject_GetBitmap, 3417). --define(wxBitmapDataObject_SetBitmap, 3418). --define(wxBitmapDataObject_destroy, 3419). --define(wxClipboard_new, 3421). --define(wxClipboard_destruct, 3422). --define(wxClipboard_AddData, 3423). --define(wxClipboard_Clear, 3424). --define(wxClipboard_Close, 3425). --define(wxClipboard_Flush, 3426). --define(wxClipboard_GetData, 3427). --define(wxClipboard_IsOpened, 3428). --define(wxClipboard_Open, 3429). --define(wxClipboard_SetData, 3430). --define(wxClipboard_UsePrimarySelection, 3432). --define(wxClipboard_IsSupported, 3433). --define(wxClipboard_Get, 3434). --define(wxSpinEvent_GetPosition, 3435). --define(wxSpinEvent_SetPosition, 3436). --define(wxSplitterWindow_new_0, 3437). --define(wxSplitterWindow_new_2, 3438). --define(wxSplitterWindow_destruct, 3439). --define(wxSplitterWindow_Create, 3440). --define(wxSplitterWindow_GetMinimumPaneSize, 3441). --define(wxSplitterWindow_GetSashGravity, 3442). --define(wxSplitterWindow_GetSashPosition, 3443). --define(wxSplitterWindow_GetSplitMode, 3444). --define(wxSplitterWindow_GetWindow1, 3445). --define(wxSplitterWindow_GetWindow2, 3446). --define(wxSplitterWindow_Initialize, 3447). --define(wxSplitterWindow_IsSplit, 3448). --define(wxSplitterWindow_ReplaceWindow, 3449). --define(wxSplitterWindow_SetSashGravity, 3450). --define(wxSplitterWindow_SetSashPosition, 3451). --define(wxSplitterWindow_SetSashSize, 3452). --define(wxSplitterWindow_SetMinimumPaneSize, 3453). --define(wxSplitterWindow_SetSplitMode, 3454). --define(wxSplitterWindow_SplitHorizontally, 3455). --define(wxSplitterWindow_SplitVertically, 3456). --define(wxSplitterWindow_Unsplit, 3457). --define(wxSplitterWindow_UpdateSize, 3458). --define(wxSplitterEvent_GetSashPosition, 3459). --define(wxSplitterEvent_GetX, 3460). --define(wxSplitterEvent_GetY, 3461). --define(wxSplitterEvent_GetWindowBeingRemoved, 3462). --define(wxSplitterEvent_SetSashPosition, 3463). --define(wxHtmlWindow_new_0, 3464). --define(wxHtmlWindow_new_2, 3465). --define(wxHtmlWindow_AppendToPage, 3466). --define(wxHtmlWindow_GetOpenedAnchor, 3467). --define(wxHtmlWindow_GetOpenedPage, 3468). --define(wxHtmlWindow_GetOpenedPageTitle, 3469). --define(wxHtmlWindow_GetRelatedFrame, 3470). --define(wxHtmlWindow_HistoryBack, 3471). --define(wxHtmlWindow_HistoryCanBack, 3472). --define(wxHtmlWindow_HistoryCanForward, 3473). --define(wxHtmlWindow_HistoryClear, 3474). --define(wxHtmlWindow_HistoryForward, 3475). --define(wxHtmlWindow_LoadFile, 3476). --define(wxHtmlWindow_LoadPage, 3477). --define(wxHtmlWindow_SelectAll, 3478). --define(wxHtmlWindow_SelectionToText, 3479). --define(wxHtmlWindow_SelectLine, 3480). --define(wxHtmlWindow_SelectWord, 3481). --define(wxHtmlWindow_SetBorders, 3482). --define(wxHtmlWindow_SetFonts, 3483). --define(wxHtmlWindow_SetPage, 3484). --define(wxHtmlWindow_SetRelatedFrame, 3485). --define(wxHtmlWindow_SetRelatedStatusBar, 3486). --define(wxHtmlWindow_ToText, 3487). --define(wxHtmlWindow_destroy, 3488). --define(wxHtmlLinkEvent_GetLinkInfo, 3489). --define(wxSystemSettings_GetColour, 3490). --define(wxSystemSettings_GetFont, 3491). --define(wxSystemSettings_GetMetric, 3492). --define(wxSystemSettings_GetScreenType, 3493). --define(wxSystemOptions_GetOption, 3494). --define(wxSystemOptions_GetOptionInt, 3495). --define(wxSystemOptions_HasOption, 3496). --define(wxSystemOptions_IsFalse, 3497). --define(wxSystemOptions_SetOption_2_1, 3498). --define(wxSystemOptions_SetOption_2_0, 3499). --define(wxAuiNotebookEvent_SetSelection, 3500). --define(wxAuiNotebookEvent_GetSelection, 3501). --define(wxAuiNotebookEvent_SetOldSelection, 3502). --define(wxAuiNotebookEvent_GetOldSelection, 3503). --define(wxAuiNotebookEvent_SetDragSource, 3504). --define(wxAuiNotebookEvent_GetDragSource, 3505). --define(wxAuiManagerEvent_SetManager, 3506). --define(wxAuiManagerEvent_GetManager, 3507). --define(wxAuiManagerEvent_SetPane, 3508). --define(wxAuiManagerEvent_GetPane, 3509). --define(wxAuiManagerEvent_SetButton, 3510). --define(wxAuiManagerEvent_GetButton, 3511). --define(wxAuiManagerEvent_SetDC, 3512). --define(wxAuiManagerEvent_GetDC, 3513). --define(wxAuiManagerEvent_Veto, 3514). --define(wxAuiManagerEvent_GetVeto, 3515). --define(wxAuiManagerEvent_SetCanVeto, 3516). --define(wxAuiManagerEvent_CanVeto, 3517). --define(wxLogNull_new, 3518). --define(wxLogNull_destroy, 3519). --define(wxTaskBarIcon_new, 3520). --define(wxTaskBarIcon_destruct, 3521). --define(wxTaskBarIcon_PopupMenu, 3522). --define(wxTaskBarIcon_RemoveIcon, 3523). --define(wxTaskBarIcon_SetIcon, 3524). +-define(wxPanel_SetFocusIgnoringChildren, 337). +-define(wxScrolledWindow_new_0, 338). +-define(wxScrolledWindow_new_2, 339). +-define(wxScrolledWindow_destruct, 340). +-define(wxScrolledWindow_CalcScrolledPosition_4, 341). +-define(wxScrolledWindow_CalcScrolledPosition_1, 342). +-define(wxScrolledWindow_CalcUnscrolledPosition_4, 343). +-define(wxScrolledWindow_CalcUnscrolledPosition_1, 344). +-define(wxScrolledWindow_EnableScrolling, 345). +-define(wxScrolledWindow_GetScrollPixelsPerUnit, 346). +-define(wxScrolledWindow_GetViewStart, 347). +-define(wxScrolledWindow_DoPrepareDC, 348). +-define(wxScrolledWindow_PrepareDC, 349). +-define(wxScrolledWindow_Scroll, 350). +-define(wxScrolledWindow_SetScrollbars, 351). +-define(wxScrolledWindow_SetScrollRate, 352). +-define(wxScrolledWindow_SetTargetWindow, 353). +-define(wxSashWindow_new_0, 354). +-define(wxSashWindow_new_2, 355). +-define(wxSashWindow_destruct, 356). +-define(wxSashWindow_GetSashVisible, 357). +-define(wxSashWindow_GetMaximumSizeX, 358). +-define(wxSashWindow_GetMaximumSizeY, 359). +-define(wxSashWindow_GetMinimumSizeX, 360). +-define(wxSashWindow_GetMinimumSizeY, 361). +-define(wxSashWindow_SetMaximumSizeX, 362). +-define(wxSashWindow_SetMaximumSizeY, 363). +-define(wxSashWindow_SetMinimumSizeX, 364). +-define(wxSashWindow_SetMinimumSizeY, 365). +-define(wxSashWindow_SetSashVisible, 366). +-define(wxSashLayoutWindow_new_0, 367). +-define(wxSashLayoutWindow_new_2, 368). +-define(wxSashLayoutWindow_Create, 369). +-define(wxSashLayoutWindow_GetAlignment, 370). +-define(wxSashLayoutWindow_GetOrientation, 371). +-define(wxSashLayoutWindow_SetAlignment, 372). +-define(wxSashLayoutWindow_SetDefaultSize, 373). +-define(wxSashLayoutWindow_SetOrientation, 374). +-define(wxSashLayoutWindow_destroy, 375). +-define(wxGrid_new_0, 376). +-define(wxGrid_new_3, 377). +-define(wxGrid_new_4, 378). +-define(wxGrid_destruct, 379). +-define(wxGrid_AppendCols, 380). +-define(wxGrid_AppendRows, 381). +-define(wxGrid_AutoSize, 382). +-define(wxGrid_AutoSizeColumn, 383). +-define(wxGrid_AutoSizeColumns, 384). +-define(wxGrid_AutoSizeRow, 385). +-define(wxGrid_AutoSizeRows, 386). +-define(wxGrid_BeginBatch, 387). +-define(wxGrid_BlockToDeviceRect, 388). +-define(wxGrid_CanDragColSize, 389). +-define(wxGrid_CanDragRowSize, 390). +-define(wxGrid_CanDragGridSize, 391). +-define(wxGrid_CanEnableCellControl, 392). +-define(wxGrid_CellToRect_2, 393). +-define(wxGrid_CellToRect_1, 394). +-define(wxGrid_ClearGrid, 395). +-define(wxGrid_ClearSelection, 396). +-define(wxGrid_CreateGrid, 397). +-define(wxGrid_DeleteCols, 398). +-define(wxGrid_DeleteRows, 399). +-define(wxGrid_DisableCellEditControl, 400). +-define(wxGrid_DisableDragColSize, 401). +-define(wxGrid_DisableDragGridSize, 402). +-define(wxGrid_DisableDragRowSize, 403). +-define(wxGrid_EnableCellEditControl, 404). +-define(wxGrid_EnableDragColSize, 405). +-define(wxGrid_EnableDragGridSize, 406). +-define(wxGrid_EnableDragRowSize, 407). +-define(wxGrid_EnableEditing, 408). +-define(wxGrid_EnableGridLines, 409). +-define(wxGrid_EndBatch, 410). +-define(wxGrid_Fit, 411). +-define(wxGrid_ForceRefresh, 412). +-define(wxGrid_GetBatchCount, 413). +-define(wxGrid_GetCellAlignment, 414). +-define(wxGrid_GetCellBackgroundColour, 415). +-define(wxGrid_GetCellEditor, 416). +-define(wxGrid_GetCellFont, 417). +-define(wxGrid_GetCellRenderer, 418). +-define(wxGrid_GetCellTextColour, 419). +-define(wxGrid_GetCellValue_2, 420). +-define(wxGrid_GetCellValue_1, 421). +-define(wxGrid_GetColLabelAlignment, 422). +-define(wxGrid_GetColLabelSize, 423). +-define(wxGrid_GetColLabelValue, 424). +-define(wxGrid_GetColMinimalAcceptableWidth, 425). +-define(wxGrid_GetDefaultCellAlignment, 426). +-define(wxGrid_GetDefaultCellBackgroundColour, 427). +-define(wxGrid_GetDefaultCellFont, 428). +-define(wxGrid_GetDefaultCellTextColour, 429). +-define(wxGrid_GetDefaultColLabelSize, 430). +-define(wxGrid_GetDefaultColSize, 431). +-define(wxGrid_GetDefaultEditor, 432). +-define(wxGrid_GetDefaultEditorForCell_2, 433). +-define(wxGrid_GetDefaultEditorForCell_1, 434). +-define(wxGrid_GetDefaultEditorForType, 435). +-define(wxGrid_GetDefaultRenderer, 436). +-define(wxGrid_GetDefaultRendererForCell, 437). +-define(wxGrid_GetDefaultRendererForType, 438). +-define(wxGrid_GetDefaultRowLabelSize, 439). +-define(wxGrid_GetDefaultRowSize, 440). +-define(wxGrid_GetGridCursorCol, 441). +-define(wxGrid_GetGridCursorRow, 442). +-define(wxGrid_GetGridLineColour, 443). +-define(wxGrid_GridLinesEnabled, 444). +-define(wxGrid_GetLabelBackgroundColour, 445). +-define(wxGrid_GetLabelFont, 446). +-define(wxGrid_GetLabelTextColour, 447). +-define(wxGrid_GetNumberCols, 448). +-define(wxGrid_GetNumberRows, 449). +-define(wxGrid_GetOrCreateCellAttr, 450). +-define(wxGrid_GetRowMinimalAcceptableHeight, 451). +-define(wxGrid_GetRowLabelAlignment, 452). +-define(wxGrid_GetRowLabelSize, 453). +-define(wxGrid_GetRowLabelValue, 454). +-define(wxGrid_GetRowSize, 455). +-define(wxGrid_GetScrollLineX, 456). +-define(wxGrid_GetScrollLineY, 457). +-define(wxGrid_GetSelectedCells, 458). +-define(wxGrid_GetSelectedCols, 459). +-define(wxGrid_GetSelectedRows, 460). +-define(wxGrid_GetSelectionBackground, 461). +-define(wxGrid_GetSelectionBlockTopLeft, 462). +-define(wxGrid_GetSelectionBlockBottomRight, 463). +-define(wxGrid_GetSelectionForeground, 464). +-define(wxGrid_GetViewWidth, 465). +-define(wxGrid_GetGridWindow, 466). +-define(wxGrid_GetGridRowLabelWindow, 467). +-define(wxGrid_GetGridColLabelWindow, 468). +-define(wxGrid_GetGridCornerLabelWindow, 469). +-define(wxGrid_HideCellEditControl, 470). +-define(wxGrid_InsertCols, 471). +-define(wxGrid_InsertRows, 472). +-define(wxGrid_IsCellEditControlEnabled, 473). +-define(wxGrid_IsCurrentCellReadOnly, 474). +-define(wxGrid_IsEditable, 475). +-define(wxGrid_IsInSelection_2, 476). +-define(wxGrid_IsInSelection_1, 477). +-define(wxGrid_IsReadOnly, 478). +-define(wxGrid_IsSelection, 479). +-define(wxGrid_IsVisible_3, 480). +-define(wxGrid_IsVisible_2, 481). +-define(wxGrid_MakeCellVisible_2, 482). +-define(wxGrid_MakeCellVisible_1, 483). +-define(wxGrid_MoveCursorDown, 484). +-define(wxGrid_MoveCursorLeft, 485). +-define(wxGrid_MoveCursorRight, 486). +-define(wxGrid_MoveCursorUp, 487). +-define(wxGrid_MoveCursorDownBlock, 488). +-define(wxGrid_MoveCursorLeftBlock, 489). +-define(wxGrid_MoveCursorRightBlock, 490). +-define(wxGrid_MoveCursorUpBlock, 491). +-define(wxGrid_MovePageDown, 492). +-define(wxGrid_MovePageUp, 493). +-define(wxGrid_RegisterDataType, 494). +-define(wxGrid_SaveEditControlValue, 495). +-define(wxGrid_SelectAll, 496). +-define(wxGrid_SelectBlock_5, 497). +-define(wxGrid_SelectBlock_3, 498). +-define(wxGrid_SelectCol, 499). +-define(wxGrid_SelectRow, 500). +-define(wxGrid_SetCellAlignment_4, 501). +-define(wxGrid_SetCellAlignment_3, 502). +-define(wxGrid_SetCellAlignment_1, 503). +-define(wxGrid_SetCellBackgroundColour_3_0, 504). +-define(wxGrid_SetCellBackgroundColour_1, 505). +-define(wxGrid_SetCellBackgroundColour_3_1, 506). +-define(wxGrid_SetCellEditor, 507). +-define(wxGrid_SetCellFont, 508). +-define(wxGrid_SetCellRenderer, 509). +-define(wxGrid_SetCellTextColour_3_0, 510). +-define(wxGrid_SetCellTextColour_3_1, 511). +-define(wxGrid_SetCellTextColour_1, 512). +-define(wxGrid_SetCellValue_3_0, 513). +-define(wxGrid_SetCellValue_2, 514). +-define(wxGrid_SetCellValue_3_1, 515). +-define(wxGrid_SetColAttr, 516). +-define(wxGrid_SetColFormatBool, 517). +-define(wxGrid_SetColFormatNumber, 518). +-define(wxGrid_SetColFormatFloat, 519). +-define(wxGrid_SetColFormatCustom, 520). +-define(wxGrid_SetColLabelAlignment, 521). +-define(wxGrid_SetColLabelSize, 522). +-define(wxGrid_SetColLabelValue, 523). +-define(wxGrid_SetColMinimalWidth, 524). +-define(wxGrid_SetColMinimalAcceptableWidth, 525). +-define(wxGrid_SetColSize, 526). +-define(wxGrid_SetDefaultCellAlignment, 527). +-define(wxGrid_SetDefaultCellBackgroundColour, 528). +-define(wxGrid_SetDefaultCellFont, 529). +-define(wxGrid_SetDefaultCellTextColour, 530). +-define(wxGrid_SetDefaultEditor, 531). +-define(wxGrid_SetDefaultRenderer, 532). +-define(wxGrid_SetDefaultColSize, 533). +-define(wxGrid_SetDefaultRowSize, 534). +-define(wxGrid_SetGridCursor, 535). +-define(wxGrid_SetGridLineColour, 536). +-define(wxGrid_SetLabelBackgroundColour, 537). +-define(wxGrid_SetLabelFont, 538). +-define(wxGrid_SetLabelTextColour, 539). +-define(wxGrid_SetMargins, 540). +-define(wxGrid_SetReadOnly, 541). +-define(wxGrid_SetRowAttr, 542). +-define(wxGrid_SetRowLabelAlignment, 543). +-define(wxGrid_SetRowLabelSize, 544). +-define(wxGrid_SetRowLabelValue, 545). +-define(wxGrid_SetRowMinimalHeight, 546). +-define(wxGrid_SetRowMinimalAcceptableHeight, 547). +-define(wxGrid_SetRowSize, 548). +-define(wxGrid_SetScrollLineX, 549). +-define(wxGrid_SetScrollLineY, 550). +-define(wxGrid_SetSelectionBackground, 551). +-define(wxGrid_SetSelectionForeground, 552). +-define(wxGrid_SetSelectionMode, 553). +-define(wxGrid_ShowCellEditControl, 554). +-define(wxGrid_XToCol, 555). +-define(wxGrid_XToEdgeOfCol, 556). +-define(wxGrid_YToEdgeOfRow, 557). +-define(wxGrid_YToRow, 558). +-define(wxGridCellRenderer_Draw, 559). +-define(wxGridCellRenderer_GetBestSize, 560). +-define(wxGridCellEditor_Create, 561). +-define(wxGridCellEditor_IsCreated, 562). +-define(wxGridCellEditor_SetSize, 563). +-define(wxGridCellEditor_Show, 564). +-define(wxGridCellEditor_PaintBackground, 565). +-define(wxGridCellEditor_BeginEdit, 566). +-define(wxGridCellEditor_EndEdit, 567). +-define(wxGridCellEditor_Reset, 568). +-define(wxGridCellEditor_StartingKey, 569). +-define(wxGridCellEditor_StartingClick, 570). +-define(wxGridCellEditor_HandleReturn, 571). +-define(wxGridCellBoolRenderer_new, 572). +-define(wxGridCellBoolRenderer_destroy, 573). +-define(wxGridCellBoolEditor_new, 574). +-define(wxGridCellBoolEditor_IsTrueValue, 575). +-define(wxGridCellBoolEditor_UseStringValues, 576). +-define(wxGridCellBoolEditor_destroy, 577). +-define(wxGridCellFloatRenderer_new, 578). +-define(wxGridCellFloatRenderer_GetPrecision, 579). +-define(wxGridCellFloatRenderer_GetWidth, 580). +-define(wxGridCellFloatRenderer_SetParameters, 581). +-define(wxGridCellFloatRenderer_SetPrecision, 582). +-define(wxGridCellFloatRenderer_SetWidth, 583). +-define(wxGridCellFloatRenderer_destroy, 584). +-define(wxGridCellFloatEditor_new, 585). +-define(wxGridCellFloatEditor_SetParameters, 586). +-define(wxGridCellFloatEditor_destroy, 587). +-define(wxGridCellStringRenderer_new, 588). +-define(wxGridCellStringRenderer_destroy, 589). +-define(wxGridCellTextEditor_new, 590). +-define(wxGridCellTextEditor_SetParameters, 591). +-define(wxGridCellTextEditor_destroy, 592). +-define(wxGridCellChoiceEditor_new, 594). +-define(wxGridCellChoiceEditor_SetParameters, 595). +-define(wxGridCellChoiceEditor_destroy, 596). +-define(wxGridCellNumberRenderer_new, 597). +-define(wxGridCellNumberRenderer_destroy, 598). +-define(wxGridCellNumberEditor_new, 599). +-define(wxGridCellNumberEditor_GetValue, 600). +-define(wxGridCellNumberEditor_SetParameters, 601). +-define(wxGridCellNumberEditor_destroy, 602). +-define(wxGridCellAttr_SetTextColour, 603). +-define(wxGridCellAttr_SetBackgroundColour, 604). +-define(wxGridCellAttr_SetFont, 605). +-define(wxGridCellAttr_SetAlignment, 606). +-define(wxGridCellAttr_SetReadOnly, 607). +-define(wxGridCellAttr_SetRenderer, 608). +-define(wxGridCellAttr_SetEditor, 609). +-define(wxGridCellAttr_HasTextColour, 610). +-define(wxGridCellAttr_HasBackgroundColour, 611). +-define(wxGridCellAttr_HasFont, 612). +-define(wxGridCellAttr_HasAlignment, 613). +-define(wxGridCellAttr_HasRenderer, 614). +-define(wxGridCellAttr_HasEditor, 615). +-define(wxGridCellAttr_GetTextColour, 616). +-define(wxGridCellAttr_GetBackgroundColour, 617). +-define(wxGridCellAttr_GetFont, 618). +-define(wxGridCellAttr_GetAlignment, 619). +-define(wxGridCellAttr_GetRenderer, 620). +-define(wxGridCellAttr_GetEditor, 621). +-define(wxGridCellAttr_IsReadOnly, 622). +-define(wxGridCellAttr_SetDefAttr, 623). +-define(wxDC_Blit, 624). +-define(wxDC_CalcBoundingBox, 625). +-define(wxDC_Clear, 626). +-define(wxDC_ComputeScaleAndOrigin, 627). +-define(wxDC_CrossHair, 628). +-define(wxDC_DestroyClippingRegion, 629). +-define(wxDC_DeviceToLogicalX, 630). +-define(wxDC_DeviceToLogicalXRel, 631). +-define(wxDC_DeviceToLogicalY, 632). +-define(wxDC_DeviceToLogicalYRel, 633). +-define(wxDC_DrawArc, 634). +-define(wxDC_DrawBitmap, 635). +-define(wxDC_DrawCheckMark, 636). +-define(wxDC_DrawCircle, 637). +-define(wxDC_DrawEllipse_2, 639). +-define(wxDC_DrawEllipse_1, 640). +-define(wxDC_DrawEllipticArc, 641). +-define(wxDC_DrawIcon, 642). +-define(wxDC_DrawLabel, 643). +-define(wxDC_DrawLine, 644). +-define(wxDC_DrawLines, 645). +-define(wxDC_DrawPolygon, 647). +-define(wxDC_DrawPoint, 649). +-define(wxDC_DrawRectangle_2, 651). +-define(wxDC_DrawRectangle_1, 652). +-define(wxDC_DrawRotatedText, 653). +-define(wxDC_DrawRoundedRectangle_3, 655). +-define(wxDC_DrawRoundedRectangle_2, 656). +-define(wxDC_DrawText, 657). +-define(wxDC_EndDoc, 658). +-define(wxDC_EndPage, 659). +-define(wxDC_FloodFill, 660). +-define(wxDC_GetBackground, 661). +-define(wxDC_GetBackgroundMode, 662). +-define(wxDC_GetBrush, 663). +-define(wxDC_GetCharHeight, 664). +-define(wxDC_GetCharWidth, 665). +-define(wxDC_GetClippingBox, 666). +-define(wxDC_GetFont, 668). +-define(wxDC_GetLayoutDirection, 669). +-define(wxDC_GetLogicalFunction, 670). +-define(wxDC_GetMapMode, 671). +-define(wxDC_GetMultiLineTextExtent_4, 672). +-define(wxDC_GetMultiLineTextExtent_1, 673). +-define(wxDC_GetPartialTextExtents, 674). +-define(wxDC_GetPen, 675). +-define(wxDC_GetPixel, 676). +-define(wxDC_GetPPI, 677). +-define(wxDC_GetSize, 679). +-define(wxDC_GetSizeMM, 681). +-define(wxDC_GetTextBackground, 682). +-define(wxDC_GetTextExtent_4, 683). +-define(wxDC_GetTextExtent_1, 684). +-define(wxDC_GetTextForeground, 686). +-define(wxDC_GetUserScale, 687). +-define(wxDC_GradientFillConcentric_3, 688). +-define(wxDC_GradientFillConcentric_4, 689). +-define(wxDC_GradientFillLinear, 690). +-define(wxDC_LogicalToDeviceX, 691). +-define(wxDC_LogicalToDeviceXRel, 692). +-define(wxDC_LogicalToDeviceY, 693). +-define(wxDC_LogicalToDeviceYRel, 694). +-define(wxDC_MaxX, 695). +-define(wxDC_MaxY, 696). +-define(wxDC_MinX, 697). +-define(wxDC_MinY, 698). +-define(wxDC_IsOk, 699). +-define(wxDC_ResetBoundingBox, 700). +-define(wxDC_SetAxisOrientation, 701). +-define(wxDC_SetBackground, 702). +-define(wxDC_SetBackgroundMode, 703). +-define(wxDC_SetBrush, 704). +-define(wxDC_SetClippingRegion_2, 706). +-define(wxDC_SetClippingRegion_1_1, 707). +-define(wxDC_SetClippingRegion_1_0, 708). +-define(wxDC_SetDeviceOrigin, 709). +-define(wxDC_SetFont, 710). +-define(wxDC_SetLayoutDirection, 711). +-define(wxDC_SetLogicalFunction, 712). +-define(wxDC_SetMapMode, 713). +-define(wxDC_SetPalette, 714). +-define(wxDC_SetPen, 715). +-define(wxDC_SetTextBackground, 716). +-define(wxDC_SetTextForeground, 717). +-define(wxDC_SetUserScale, 718). +-define(wxDC_StartDoc, 719). +-define(wxDC_StartPage, 720). +-define(wxMirrorDC_new, 721). +-define(wxMirrorDC_destroy, 722). +-define(wxScreenDC_new, 723). +-define(wxScreenDC_destruct, 724). +-define(wxPostScriptDC_new_0, 725). +-define(wxPostScriptDC_new_1, 726). +-define(wxPostScriptDC_destruct, 727). +-define(wxPostScriptDC_SetResolution, 728). +-define(wxPostScriptDC_GetResolution, 729). +-define(wxWindowDC_new_0, 730). +-define(wxWindowDC_new_1, 731). +-define(wxWindowDC_destruct, 732). +-define(wxClientDC_new_0, 733). +-define(wxClientDC_new_1, 734). +-define(wxClientDC_destroy, 735). +-define(wxPaintDC_new_0, 736). +-define(wxPaintDC_new_1, 737). +-define(wxPaintDC_destroy, 738). +-define(wxMemoryDC_new_1_0, 740). +-define(wxMemoryDC_new_1_1, 741). +-define(wxMemoryDC_new_0, 742). +-define(wxMemoryDC_destruct, 744). +-define(wxMemoryDC_SelectObject, 745). +-define(wxMemoryDC_SelectObjectAsSource, 746). +-define(wxBufferedDC_new_0, 747). +-define(wxBufferedDC_new_2, 748). +-define(wxBufferedDC_new_3, 749). +-define(wxBufferedDC_destruct, 750). +-define(wxBufferedDC_Init_2, 751). +-define(wxBufferedDC_Init_3, 752). +-define(wxBufferedPaintDC_new_3, 753). +-define(wxBufferedPaintDC_new_2, 754). +-define(wxBufferedPaintDC_destruct, 755). +-define(wxGraphicsObject_destruct, 756). +-define(wxGraphicsObject_GetRenderer, 757). +-define(wxGraphicsObject_IsNull, 758). +-define(wxGraphicsContext_destruct, 759). +-define(wxGraphicsContext_Create_1_1, 760). +-define(wxGraphicsContext_Create_1_0, 761). +-define(wxGraphicsContext_Create_0, 762). +-define(wxGraphicsContext_CreatePen, 763). +-define(wxGraphicsContext_CreateBrush, 764). +-define(wxGraphicsContext_CreateRadialGradientBrush, 765). +-define(wxGraphicsContext_CreateLinearGradientBrush, 766). +-define(wxGraphicsContext_CreateFont, 767). +-define(wxGraphicsContext_CreateMatrix, 768). +-define(wxGraphicsContext_CreatePath, 769). +-define(wxGraphicsContext_Clip_1, 770). +-define(wxGraphicsContext_Clip_4, 771). +-define(wxGraphicsContext_ResetClip, 772). +-define(wxGraphicsContext_DrawBitmap, 773). +-define(wxGraphicsContext_DrawEllipse, 774). +-define(wxGraphicsContext_DrawIcon, 775). +-define(wxGraphicsContext_DrawLines, 776). +-define(wxGraphicsContext_DrawPath, 777). +-define(wxGraphicsContext_DrawRectangle, 778). +-define(wxGraphicsContext_DrawRoundedRectangle, 779). +-define(wxGraphicsContext_DrawText_3, 780). +-define(wxGraphicsContext_DrawText_4_0, 781). +-define(wxGraphicsContext_DrawText_4_1, 782). +-define(wxGraphicsContext_DrawText_5, 783). +-define(wxGraphicsContext_FillPath, 784). +-define(wxGraphicsContext_StrokePath, 785). +-define(wxGraphicsContext_GetPartialTextExtents, 786). +-define(wxGraphicsContext_GetTextExtent, 787). +-define(wxGraphicsContext_Rotate, 788). +-define(wxGraphicsContext_Scale, 789). +-define(wxGraphicsContext_Translate, 790). +-define(wxGraphicsContext_GetTransform, 791). +-define(wxGraphicsContext_SetTransform, 792). +-define(wxGraphicsContext_ConcatTransform, 793). +-define(wxGraphicsContext_SetBrush_1_1, 794). +-define(wxGraphicsContext_SetBrush_1_0, 795). +-define(wxGraphicsContext_SetFont_1, 796). +-define(wxGraphicsContext_SetFont_2, 797). +-define(wxGraphicsContext_SetPen_1_0, 798). +-define(wxGraphicsContext_SetPen_1_1, 799). +-define(wxGraphicsContext_StrokeLine, 800). +-define(wxGraphicsContext_StrokeLines, 801). +-define(wxGraphicsMatrix_Concat, 803). +-define(wxGraphicsMatrix_Get, 805). +-define(wxGraphicsMatrix_Invert, 806). +-define(wxGraphicsMatrix_IsEqual, 807). +-define(wxGraphicsMatrix_IsIdentity, 809). +-define(wxGraphicsMatrix_Rotate, 810). +-define(wxGraphicsMatrix_Scale, 811). +-define(wxGraphicsMatrix_Translate, 812). +-define(wxGraphicsMatrix_Set, 813). +-define(wxGraphicsMatrix_TransformPoint, 814). +-define(wxGraphicsMatrix_TransformDistance, 815). +-define(wxGraphicsPath_MoveToPoint_2, 816). +-define(wxGraphicsPath_MoveToPoint_1, 817). +-define(wxGraphicsPath_AddArc_6, 818). +-define(wxGraphicsPath_AddArc_5, 819). +-define(wxGraphicsPath_AddArcToPoint, 820). +-define(wxGraphicsPath_AddCircle, 821). +-define(wxGraphicsPath_AddCurveToPoint_6, 822). +-define(wxGraphicsPath_AddCurveToPoint_3, 823). +-define(wxGraphicsPath_AddEllipse, 824). +-define(wxGraphicsPath_AddLineToPoint_2, 825). +-define(wxGraphicsPath_AddLineToPoint_1, 826). +-define(wxGraphicsPath_AddPath, 827). +-define(wxGraphicsPath_AddQuadCurveToPoint, 828). +-define(wxGraphicsPath_AddRectangle, 829). +-define(wxGraphicsPath_AddRoundedRectangle, 830). +-define(wxGraphicsPath_CloseSubpath, 831). +-define(wxGraphicsPath_Contains_3, 832). +-define(wxGraphicsPath_Contains_2, 833). +-define(wxGraphicsPath_GetBox, 835). +-define(wxGraphicsPath_GetCurrentPoint, 837). +-define(wxGraphicsPath_Transform, 838). +-define(wxGraphicsRenderer_GetDefaultRenderer, 839). +-define(wxGraphicsRenderer_CreateContext_1_1, 840). +-define(wxGraphicsRenderer_CreateContext_1_0, 841). +-define(wxGraphicsRenderer_CreatePen, 842). +-define(wxGraphicsRenderer_CreateBrush, 843). +-define(wxGraphicsRenderer_CreateLinearGradientBrush, 844). +-define(wxGraphicsRenderer_CreateRadialGradientBrush, 845). +-define(wxGraphicsRenderer_CreateFont, 846). +-define(wxGraphicsRenderer_CreateMatrix, 847). +-define(wxGraphicsRenderer_CreatePath, 848). +-define(wxMenuBar_new_1, 850). +-define(wxMenuBar_new_0, 852). +-define(wxMenuBar_destruct, 854). +-define(wxMenuBar_Append, 855). +-define(wxMenuBar_Check, 856). +-define(wxMenuBar_Enable_2, 857). +-define(wxMenuBar_Enable_1, 858). +-define(wxMenuBar_EnableTop, 859). +-define(wxMenuBar_FindMenu, 860). +-define(wxMenuBar_FindMenuItem, 861). +-define(wxMenuBar_FindItem, 862). +-define(wxMenuBar_GetHelpString, 863). +-define(wxMenuBar_GetLabel_1, 864). +-define(wxMenuBar_GetLabel_0, 865). +-define(wxMenuBar_GetLabelTop, 866). +-define(wxMenuBar_GetMenu, 867). +-define(wxMenuBar_GetMenuCount, 868). +-define(wxMenuBar_Insert, 869). +-define(wxMenuBar_IsChecked, 870). +-define(wxMenuBar_IsEnabled_1, 871). +-define(wxMenuBar_IsEnabled_0, 872). +-define(wxMenuBar_Remove, 873). +-define(wxMenuBar_Replace, 874). +-define(wxMenuBar_SetHelpString, 875). +-define(wxMenuBar_SetLabel_2, 876). +-define(wxMenuBar_SetLabel_1, 877). +-define(wxMenuBar_SetLabelTop, 878). +-define(wxControl_GetLabel, 879). +-define(wxControl_SetLabel, 880). +-define(wxControlWithItems_Append_1, 881). +-define(wxControlWithItems_Append_2, 882). +-define(wxControlWithItems_appendStrings_1, 883). +-define(wxControlWithItems_Clear, 884). +-define(wxControlWithItems_Delete, 885). +-define(wxControlWithItems_FindString, 886). +-define(wxControlWithItems_getClientData, 887). +-define(wxControlWithItems_setClientData, 888). +-define(wxControlWithItems_GetCount, 889). +-define(wxControlWithItems_GetSelection, 890). +-define(wxControlWithItems_GetString, 891). +-define(wxControlWithItems_GetStringSelection, 892). +-define(wxControlWithItems_Insert_2, 893). +-define(wxControlWithItems_Insert_3, 894). +-define(wxControlWithItems_IsEmpty, 895). +-define(wxControlWithItems_Select, 896). +-define(wxControlWithItems_SetSelection, 897). +-define(wxControlWithItems_SetString, 898). +-define(wxControlWithItems_SetStringSelection, 899). +-define(wxMenu_new_2, 902). +-define(wxMenu_new_1, 903). +-define(wxMenu_destruct, 905). +-define(wxMenu_Append_3, 906). +-define(wxMenu_Append_1, 907). +-define(wxMenu_Append_4_0, 908). +-define(wxMenu_Append_4_1, 909). +-define(wxMenu_AppendCheckItem, 910). +-define(wxMenu_AppendRadioItem, 911). +-define(wxMenu_AppendSeparator, 912). +-define(wxMenu_Break, 913). +-define(wxMenu_Check, 914). +-define(wxMenu_Delete_1_0, 915). +-define(wxMenu_Delete_1_1, 916). +-define(wxMenu_Destroy_1_0, 917). +-define(wxMenu_Destroy_1_1, 918). +-define(wxMenu_Enable, 919). +-define(wxMenu_FindItem_1, 920). +-define(wxMenu_FindItem_2, 921). +-define(wxMenu_FindItemByPosition, 922). +-define(wxMenu_GetHelpString, 923). +-define(wxMenu_GetLabel, 924). +-define(wxMenu_GetMenuItemCount, 925). +-define(wxMenu_GetMenuItems, 926). +-define(wxMenu_GetTitle, 928). +-define(wxMenu_Insert_2, 929). +-define(wxMenu_Insert_3, 930). +-define(wxMenu_Insert_5_1, 931). +-define(wxMenu_Insert_5_0, 932). +-define(wxMenu_InsertCheckItem, 933). +-define(wxMenu_InsertRadioItem, 934). +-define(wxMenu_InsertSeparator, 935). +-define(wxMenu_IsChecked, 936). +-define(wxMenu_IsEnabled, 937). +-define(wxMenu_Prepend_1, 938). +-define(wxMenu_Prepend_2, 939). +-define(wxMenu_Prepend_4_1, 940). +-define(wxMenu_Prepend_4_0, 941). +-define(wxMenu_PrependCheckItem, 942). +-define(wxMenu_PrependRadioItem, 943). +-define(wxMenu_PrependSeparator, 944). +-define(wxMenu_Remove_1_0, 945). +-define(wxMenu_Remove_1_1, 946). +-define(wxMenu_SetHelpString, 947). +-define(wxMenu_SetLabel, 948). +-define(wxMenu_SetTitle, 949). +-define(wxMenuItem_new, 950). +-define(wxMenuItem_destruct, 952). +-define(wxMenuItem_Check, 953). +-define(wxMenuItem_Enable, 954). +-define(wxMenuItem_GetBitmap, 955). +-define(wxMenuItem_GetHelp, 956). +-define(wxMenuItem_GetId, 957). +-define(wxMenuItem_GetKind, 958). +-define(wxMenuItem_GetLabel, 959). +-define(wxMenuItem_GetLabelFromText, 960). +-define(wxMenuItem_GetMenu, 961). +-define(wxMenuItem_GetText, 962). +-define(wxMenuItem_GetSubMenu, 963). +-define(wxMenuItem_IsCheckable, 964). +-define(wxMenuItem_IsChecked, 965). +-define(wxMenuItem_IsEnabled, 966). +-define(wxMenuItem_IsSeparator, 967). +-define(wxMenuItem_IsSubMenu, 968). +-define(wxMenuItem_SetBitmap, 969). +-define(wxMenuItem_SetHelp, 970). +-define(wxMenuItem_SetMenu, 971). +-define(wxMenuItem_SetSubMenu, 972). +-define(wxMenuItem_SetText, 973). +-define(wxToolBar_AddControl, 974). +-define(wxToolBar_AddSeparator, 975). +-define(wxToolBar_AddTool_5, 976). +-define(wxToolBar_AddTool_4_0, 977). +-define(wxToolBar_AddTool_1, 978). +-define(wxToolBar_AddTool_4_1, 979). +-define(wxToolBar_AddTool_3, 980). +-define(wxToolBar_AddTool_6, 981). +-define(wxToolBar_AddCheckTool, 982). +-define(wxToolBar_AddRadioTool, 983). +-define(wxToolBar_DeleteTool, 984). +-define(wxToolBar_DeleteToolByPos, 985). +-define(wxToolBar_EnableTool, 986). +-define(wxToolBar_FindById, 987). +-define(wxToolBar_FindControl, 988). +-define(wxToolBar_FindToolForPosition, 989). +-define(wxToolBar_GetToolSize, 990). +-define(wxToolBar_GetToolBitmapSize, 991). +-define(wxToolBar_GetMargins, 992). +-define(wxToolBar_GetToolEnabled, 993). +-define(wxToolBar_GetToolLongHelp, 994). +-define(wxToolBar_GetToolPacking, 995). +-define(wxToolBar_GetToolPos, 996). +-define(wxToolBar_GetToolSeparation, 997). +-define(wxToolBar_GetToolShortHelp, 998). +-define(wxToolBar_GetToolState, 999). +-define(wxToolBar_InsertControl, 1000). +-define(wxToolBar_InsertSeparator, 1001). +-define(wxToolBar_InsertTool_5, 1002). +-define(wxToolBar_InsertTool_2, 1003). +-define(wxToolBar_InsertTool_4, 1004). +-define(wxToolBar_Realize, 1005). +-define(wxToolBar_RemoveTool, 1006). +-define(wxToolBar_SetMargins, 1007). +-define(wxToolBar_SetToolBitmapSize, 1008). +-define(wxToolBar_SetToolLongHelp, 1009). +-define(wxToolBar_SetToolPacking, 1010). +-define(wxToolBar_SetToolShortHelp, 1011). +-define(wxToolBar_SetToolSeparation, 1012). +-define(wxToolBar_ToggleTool, 1013). +-define(wxStatusBar_new_0, 1015). +-define(wxStatusBar_new_2, 1016). +-define(wxStatusBar_destruct, 1018). +-define(wxStatusBar_Create, 1019). +-define(wxStatusBar_GetFieldRect, 1020). +-define(wxStatusBar_GetFieldsCount, 1021). +-define(wxStatusBar_GetStatusText, 1022). +-define(wxStatusBar_PopStatusText, 1023). +-define(wxStatusBar_PushStatusText, 1024). +-define(wxStatusBar_SetFieldsCount, 1025). +-define(wxStatusBar_SetMinHeight, 1026). +-define(wxStatusBar_SetStatusText, 1027). +-define(wxStatusBar_SetStatusWidths, 1028). +-define(wxStatusBar_SetStatusStyles, 1029). +-define(wxBitmap_new_0, 1030). +-define(wxBitmap_new_3, 1031). +-define(wxBitmap_new_4, 1032). +-define(wxBitmap_new_2_0, 1033). +-define(wxBitmap_new_2_1, 1034). +-define(wxBitmap_destruct, 1035). +-define(wxBitmap_ConvertToImage, 1036). +-define(wxBitmap_CopyFromIcon, 1037). +-define(wxBitmap_Create, 1038). +-define(wxBitmap_GetDepth, 1039). +-define(wxBitmap_GetHeight, 1040). +-define(wxBitmap_GetPalette, 1041). +-define(wxBitmap_GetMask, 1042). +-define(wxBitmap_GetWidth, 1043). +-define(wxBitmap_GetSubBitmap, 1044). +-define(wxBitmap_LoadFile, 1045). +-define(wxBitmap_Ok, 1046). +-define(wxBitmap_SaveFile, 1047). +-define(wxBitmap_SetDepth, 1048). +-define(wxBitmap_SetHeight, 1049). +-define(wxBitmap_SetMask, 1050). +-define(wxBitmap_SetPalette, 1051). +-define(wxBitmap_SetWidth, 1052). +-define(wxIcon_new_0, 1053). +-define(wxIcon_new_2, 1054). +-define(wxIcon_new_1, 1055). +-define(wxIcon_CopyFromBitmap, 1056). +-define(wxIcon_destroy, 1057). +-define(wxIconBundle_new_0, 1058). +-define(wxIconBundle_new_2, 1059). +-define(wxIconBundle_new_1_0, 1060). +-define(wxIconBundle_new_1_1, 1061). +-define(wxIconBundle_destruct, 1062). +-define(wxIconBundle_AddIcon_2, 1063). +-define(wxIconBundle_AddIcon_1, 1064). +-define(wxIconBundle_GetIcon_1_1, 1065). +-define(wxIconBundle_GetIcon_1_0, 1066). +-define(wxCursor_new_0, 1067). +-define(wxCursor_new_1_0, 1068). +-define(wxCursor_new_1_1, 1069). +-define(wxCursor_new_4, 1070). +-define(wxCursor_destruct, 1071). +-define(wxCursor_Ok, 1072). +-define(wxMask_new_0, 1073). +-define(wxMask_new_2_1, 1074). +-define(wxMask_new_2_0, 1075). +-define(wxMask_new_1, 1076). +-define(wxMask_destruct, 1077). +-define(wxMask_Create_2_1, 1078). +-define(wxMask_Create_2_0, 1079). +-define(wxMask_Create_1, 1080). +-define(wxImage_new_0, 1081). +-define(wxImage_new_3_0, 1082). +-define(wxImage_new_4, 1083). +-define(wxImage_new_5, 1084). +-define(wxImage_new_2, 1085). +-define(wxImage_new_3_1, 1086). +-define(wxImage_Blur, 1087). +-define(wxImage_BlurHorizontal, 1088). +-define(wxImage_BlurVertical, 1089). +-define(wxImage_ConvertAlphaToMask, 1090). +-define(wxImage_ConvertToGreyscale, 1091). +-define(wxImage_ConvertToMono, 1092). +-define(wxImage_Copy, 1093). +-define(wxImage_Create_3, 1094). +-define(wxImage_Create_4, 1095). +-define(wxImage_Create_5, 1096). +-define(wxImage_Destroy, 1097). +-define(wxImage_FindFirstUnusedColour, 1098). +-define(wxImage_GetImageExtWildcard, 1099). +-define(wxImage_GetAlpha_2, 1100). +-define(wxImage_GetAlpha_0, 1101). +-define(wxImage_GetBlue, 1102). +-define(wxImage_GetData, 1103). +-define(wxImage_GetGreen, 1104). +-define(wxImage_GetImageCount, 1105). +-define(wxImage_GetHeight, 1106). +-define(wxImage_GetMaskBlue, 1107). +-define(wxImage_GetMaskGreen, 1108). +-define(wxImage_GetMaskRed, 1109). +-define(wxImage_GetOrFindMaskColour, 1110). +-define(wxImage_GetPalette, 1111). +-define(wxImage_GetRed, 1112). +-define(wxImage_GetSubImage, 1113). +-define(wxImage_GetWidth, 1114). +-define(wxImage_HasAlpha, 1115). +-define(wxImage_HasMask, 1116). +-define(wxImage_GetOption, 1117). +-define(wxImage_GetOptionInt, 1118). +-define(wxImage_HasOption, 1119). +-define(wxImage_InitAlpha, 1120). +-define(wxImage_InitStandardHandlers, 1121). +-define(wxImage_IsTransparent, 1122). +-define(wxImage_LoadFile_2, 1123). +-define(wxImage_LoadFile_3, 1124). +-define(wxImage_Ok, 1125). +-define(wxImage_RemoveHandler, 1126). +-define(wxImage_Mirror, 1127). +-define(wxImage_Replace, 1128). +-define(wxImage_Rescale, 1129). +-define(wxImage_Resize, 1130). +-define(wxImage_Rotate, 1131). +-define(wxImage_RotateHue, 1132). +-define(wxImage_Rotate90, 1133). +-define(wxImage_SaveFile_1, 1134). +-define(wxImage_SaveFile_2_0, 1135). +-define(wxImage_SaveFile_2_1, 1136). +-define(wxImage_Scale, 1137). +-define(wxImage_Size, 1138). +-define(wxImage_SetAlpha_3, 1139). +-define(wxImage_SetAlpha_2, 1140). +-define(wxImage_SetData_2, 1141). +-define(wxImage_SetData_4, 1142). +-define(wxImage_SetMask, 1143). +-define(wxImage_SetMaskColour, 1144). +-define(wxImage_SetMaskFromImage, 1145). +-define(wxImage_SetOption_2_1, 1146). +-define(wxImage_SetOption_2_0, 1147). +-define(wxImage_SetPalette, 1148). +-define(wxImage_SetRGB_5, 1149). +-define(wxImage_SetRGB_4, 1150). +-define(wxImage_destroy, 1151). +-define(wxBrush_new_0, 1152). +-define(wxBrush_new_2, 1153). +-define(wxBrush_new_1, 1154). +-define(wxBrush_destruct, 1156). +-define(wxBrush_GetColour, 1157). +-define(wxBrush_GetStipple, 1158). +-define(wxBrush_GetStyle, 1159). +-define(wxBrush_IsHatch, 1160). +-define(wxBrush_IsOk, 1161). +-define(wxBrush_SetColour_1, 1162). +-define(wxBrush_SetColour_3, 1163). +-define(wxBrush_SetStipple, 1164). +-define(wxBrush_SetStyle, 1165). +-define(wxPen_new_0, 1166). +-define(wxPen_new_2, 1167). +-define(wxPen_destruct, 1168). +-define(wxPen_GetCap, 1169). +-define(wxPen_GetColour, 1170). +-define(wxPen_GetJoin, 1171). +-define(wxPen_GetStyle, 1172). +-define(wxPen_GetWidth, 1173). +-define(wxPen_IsOk, 1174). +-define(wxPen_SetCap, 1175). +-define(wxPen_SetColour_1, 1176). +-define(wxPen_SetColour_3, 1177). +-define(wxPen_SetJoin, 1178). +-define(wxPen_SetStyle, 1179). +-define(wxPen_SetWidth, 1180). +-define(wxRegion_new_0, 1181). +-define(wxRegion_new_4, 1182). +-define(wxRegion_new_2, 1183). +-define(wxRegion_new_1_1, 1184). +-define(wxRegion_new_1_0, 1186). +-define(wxRegion_destruct, 1188). +-define(wxRegion_Clear, 1189). +-define(wxRegion_Contains_2, 1190). +-define(wxRegion_Contains_1_0, 1191). +-define(wxRegion_Contains_4, 1192). +-define(wxRegion_Contains_1_1, 1193). +-define(wxRegion_ConvertToBitmap, 1194). +-define(wxRegion_GetBox, 1195). +-define(wxRegion_Intersect_4, 1196). +-define(wxRegion_Intersect_1_1, 1197). +-define(wxRegion_Intersect_1_0, 1198). +-define(wxRegion_IsEmpty, 1199). +-define(wxRegion_Subtract_4, 1200). +-define(wxRegion_Subtract_1_1, 1201). +-define(wxRegion_Subtract_1_0, 1202). +-define(wxRegion_Offset_2, 1203). +-define(wxRegion_Offset_1, 1204). +-define(wxRegion_Union_4, 1205). +-define(wxRegion_Union_1_2, 1206). +-define(wxRegion_Union_1_1, 1207). +-define(wxRegion_Union_1_0, 1208). +-define(wxRegion_Union_3, 1209). +-define(wxRegion_Xor_4, 1210). +-define(wxRegion_Xor_1_1, 1211). +-define(wxRegion_Xor_1_0, 1212). +-define(wxAcceleratorTable_new_0, 1213). +-define(wxAcceleratorTable_new_2, 1214). +-define(wxAcceleratorTable_destruct, 1215). +-define(wxAcceleratorTable_Ok, 1216). +-define(wxAcceleratorEntry_new_1_0, 1217). +-define(wxAcceleratorEntry_new_1_1, 1218). +-define(wxAcceleratorEntry_GetCommand, 1219). +-define(wxAcceleratorEntry_GetFlags, 1220). +-define(wxAcceleratorEntry_GetKeyCode, 1221). +-define(wxAcceleratorEntry_Set, 1222). +-define(wxAcceleratorEntry_destroy, 1223). +-define(wxCaret_new_3, 1228). +-define(wxCaret_new_2, 1229). +-define(wxCaret_destruct, 1231). +-define(wxCaret_Create_3, 1232). +-define(wxCaret_Create_2, 1233). +-define(wxCaret_GetBlinkTime, 1234). +-define(wxCaret_GetPosition, 1236). +-define(wxCaret_GetSize, 1238). +-define(wxCaret_GetWindow, 1239). +-define(wxCaret_Hide, 1240). +-define(wxCaret_IsOk, 1241). +-define(wxCaret_IsVisible, 1242). +-define(wxCaret_Move_2, 1243). +-define(wxCaret_Move_1, 1244). +-define(wxCaret_SetBlinkTime, 1245). +-define(wxCaret_SetSize_2, 1246). +-define(wxCaret_SetSize_1, 1247). +-define(wxCaret_Show, 1248). +-define(wxSizer_Add_2_1, 1249). +-define(wxSizer_Add_2_0, 1250). +-define(wxSizer_Add_3, 1251). +-define(wxSizer_Add_2_3, 1252). +-define(wxSizer_Add_2_2, 1253). +-define(wxSizer_AddSpacer, 1254). +-define(wxSizer_AddStretchSpacer, 1255). +-define(wxSizer_CalcMin, 1256). +-define(wxSizer_Clear, 1257). +-define(wxSizer_Detach_1_2, 1258). +-define(wxSizer_Detach_1_1, 1259). +-define(wxSizer_Detach_1_0, 1260). +-define(wxSizer_Fit, 1261). +-define(wxSizer_FitInside, 1262). +-define(wxSizer_GetChildren, 1263). +-define(wxSizer_GetItem_2_1, 1264). +-define(wxSizer_GetItem_2_0, 1265). +-define(wxSizer_GetItem_1, 1266). +-define(wxSizer_GetSize, 1267). +-define(wxSizer_GetPosition, 1268). +-define(wxSizer_GetMinSize, 1269). +-define(wxSizer_Hide_2_0, 1270). +-define(wxSizer_Hide_2_1, 1271). +-define(wxSizer_Hide_1, 1272). +-define(wxSizer_Insert_3_1, 1273). +-define(wxSizer_Insert_3_0, 1274). +-define(wxSizer_Insert_4, 1275). +-define(wxSizer_Insert_3_3, 1276). +-define(wxSizer_Insert_3_2, 1277). +-define(wxSizer_Insert_2, 1278). +-define(wxSizer_InsertSpacer, 1279). +-define(wxSizer_InsertStretchSpacer, 1280). +-define(wxSizer_IsShown_1_2, 1281). +-define(wxSizer_IsShown_1_1, 1282). +-define(wxSizer_IsShown_1_0, 1283). +-define(wxSizer_Layout, 1284). +-define(wxSizer_Prepend_2_1, 1285). +-define(wxSizer_Prepend_2_0, 1286). +-define(wxSizer_Prepend_3, 1287). +-define(wxSizer_Prepend_2_3, 1288). +-define(wxSizer_Prepend_2_2, 1289). +-define(wxSizer_Prepend_1, 1290). +-define(wxSizer_PrependSpacer, 1291). +-define(wxSizer_PrependStretchSpacer, 1292). +-define(wxSizer_RecalcSizes, 1293). +-define(wxSizer_Remove_1_1, 1294). +-define(wxSizer_Remove_1_0, 1295). +-define(wxSizer_Replace_3_1, 1296). +-define(wxSizer_Replace_3_0, 1297). +-define(wxSizer_Replace_2, 1298). +-define(wxSizer_SetDimension, 1299). +-define(wxSizer_SetMinSize_2, 1300). +-define(wxSizer_SetMinSize_1, 1301). +-define(wxSizer_SetItemMinSize_3_2, 1302). +-define(wxSizer_SetItemMinSize_2_2, 1303). +-define(wxSizer_SetItemMinSize_3_1, 1304). +-define(wxSizer_SetItemMinSize_2_1, 1305). +-define(wxSizer_SetItemMinSize_3_0, 1306). +-define(wxSizer_SetItemMinSize_2_0, 1307). +-define(wxSizer_SetSizeHints, 1308). +-define(wxSizer_SetVirtualSizeHints, 1309). +-define(wxSizer_Show_2_2, 1310). +-define(wxSizer_Show_2_1, 1311). +-define(wxSizer_Show_2_0, 1312). +-define(wxSizer_Show_1, 1313). +-define(wxSizerFlags_new, 1314). +-define(wxSizerFlags_Align, 1315). +-define(wxSizerFlags_Border_2, 1316). +-define(wxSizerFlags_Border_1, 1317). +-define(wxSizerFlags_Center, 1318). +-define(wxSizerFlags_Centre, 1319). +-define(wxSizerFlags_Expand, 1320). +-define(wxSizerFlags_Left, 1321). +-define(wxSizerFlags_Proportion, 1322). +-define(wxSizerFlags_Right, 1323). +-define(wxSizerFlags_destroy, 1324). +-define(wxSizerItem_new_5_1, 1325). +-define(wxSizerItem_new_2_1, 1326). +-define(wxSizerItem_new_5_0, 1327). +-define(wxSizerItem_new_2_0, 1328). +-define(wxSizerItem_new_6, 1329). +-define(wxSizerItem_new_3, 1330). +-define(wxSizerItem_new_0, 1331). +-define(wxSizerItem_destruct, 1332). +-define(wxSizerItem_CalcMin, 1333). +-define(wxSizerItem_DeleteWindows, 1334). +-define(wxSizerItem_DetachSizer, 1335). +-define(wxSizerItem_GetBorder, 1336). +-define(wxSizerItem_GetFlag, 1337). +-define(wxSizerItem_GetMinSize, 1338). +-define(wxSizerItem_GetPosition, 1339). +-define(wxSizerItem_GetProportion, 1340). +-define(wxSizerItem_GetRatio, 1341). +-define(wxSizerItem_GetRect, 1342). +-define(wxSizerItem_GetSize, 1343). +-define(wxSizerItem_GetSizer, 1344). +-define(wxSizerItem_GetSpacer, 1345). +-define(wxSizerItem_GetUserData, 1346). +-define(wxSizerItem_GetWindow, 1347). +-define(wxSizerItem_IsSizer, 1348). +-define(wxSizerItem_IsShown, 1349). +-define(wxSizerItem_IsSpacer, 1350). +-define(wxSizerItem_IsWindow, 1351). +-define(wxSizerItem_SetBorder, 1352). +-define(wxSizerItem_SetDimension, 1353). +-define(wxSizerItem_SetFlag, 1354). +-define(wxSizerItem_SetInitSize, 1355). +-define(wxSizerItem_SetMinSize_1, 1356). +-define(wxSizerItem_SetMinSize_2, 1357). +-define(wxSizerItem_SetProportion, 1358). +-define(wxSizerItem_SetRatio_2, 1359). +-define(wxSizerItem_SetRatio_1_1, 1360). +-define(wxSizerItem_SetRatio_1_0, 1361). +-define(wxSizerItem_SetSizer, 1362). +-define(wxSizerItem_SetSpacer_1, 1363). +-define(wxSizerItem_SetSpacer_2, 1364). +-define(wxSizerItem_SetWindow, 1365). +-define(wxSizerItem_Show, 1366). +-define(wxBoxSizer_new, 1367). +-define(wxBoxSizer_GetOrientation, 1368). +-define(wxBoxSizer_destroy, 1369). +-define(wxStaticBoxSizer_new_2, 1370). +-define(wxStaticBoxSizer_new_3, 1371). +-define(wxStaticBoxSizer_GetStaticBox, 1372). +-define(wxStaticBoxSizer_destroy, 1373). +-define(wxGridSizer_new_4, 1374). +-define(wxGridSizer_new_2, 1375). +-define(wxGridSizer_GetCols, 1376). +-define(wxGridSizer_GetHGap, 1377). +-define(wxGridSizer_GetRows, 1378). +-define(wxGridSizer_GetVGap, 1379). +-define(wxGridSizer_SetCols, 1380). +-define(wxGridSizer_SetHGap, 1381). +-define(wxGridSizer_SetRows, 1382). +-define(wxGridSizer_SetVGap, 1383). +-define(wxGridSizer_destroy, 1384). +-define(wxFlexGridSizer_new_4, 1385). +-define(wxFlexGridSizer_new_2, 1386). +-define(wxFlexGridSizer_AddGrowableCol, 1387). +-define(wxFlexGridSizer_AddGrowableRow, 1388). +-define(wxFlexGridSizer_GetFlexibleDirection, 1389). +-define(wxFlexGridSizer_GetNonFlexibleGrowMode, 1390). +-define(wxFlexGridSizer_RemoveGrowableCol, 1391). +-define(wxFlexGridSizer_RemoveGrowableRow, 1392). +-define(wxFlexGridSizer_SetFlexibleDirection, 1393). +-define(wxFlexGridSizer_SetNonFlexibleGrowMode, 1394). +-define(wxFlexGridSizer_destroy, 1395). +-define(wxGridBagSizer_new, 1396). +-define(wxGridBagSizer_Add_3_2, 1397). +-define(wxGridBagSizer_Add_3_1, 1398). +-define(wxGridBagSizer_Add_4, 1399). +-define(wxGridBagSizer_Add_1_0, 1400). +-define(wxGridBagSizer_Add_2_1, 1401). +-define(wxGridBagSizer_Add_2_0, 1402). +-define(wxGridBagSizer_Add_3_0, 1403). +-define(wxGridBagSizer_Add_1_1, 1404). +-define(wxGridBagSizer_CalcMin, 1405). +-define(wxGridBagSizer_CheckForIntersection_2, 1406). +-define(wxGridBagSizer_CheckForIntersection_3, 1407). +-define(wxGridBagSizer_FindItem_1_1, 1408). +-define(wxGridBagSizer_FindItem_1_0, 1409). +-define(wxGridBagSizer_FindItemAtPoint, 1410). +-define(wxGridBagSizer_FindItemAtPosition, 1411). +-define(wxGridBagSizer_FindItemWithData, 1412). +-define(wxGridBagSizer_GetCellSize, 1413). +-define(wxGridBagSizer_GetEmptyCellSize, 1414). +-define(wxGridBagSizer_GetItemPosition_1_2, 1415). +-define(wxGridBagSizer_GetItemPosition_1_1, 1416). +-define(wxGridBagSizer_GetItemPosition_1_0, 1417). +-define(wxGridBagSizer_GetItemSpan_1_2, 1418). +-define(wxGridBagSizer_GetItemSpan_1_1, 1419). +-define(wxGridBagSizer_GetItemSpan_1_0, 1420). +-define(wxGridBagSizer_SetEmptyCellSize, 1421). +-define(wxGridBagSizer_SetItemPosition_2_2, 1422). +-define(wxGridBagSizer_SetItemPosition_2_1, 1423). +-define(wxGridBagSizer_SetItemPosition_2_0, 1424). +-define(wxGridBagSizer_SetItemSpan_2_2, 1425). +-define(wxGridBagSizer_SetItemSpan_2_1, 1426). +-define(wxGridBagSizer_SetItemSpan_2_0, 1427). +-define(wxGridBagSizer_destroy, 1428). +-define(wxStdDialogButtonSizer_new, 1429). +-define(wxStdDialogButtonSizer_AddButton, 1430). +-define(wxStdDialogButtonSizer_Realize, 1431). +-define(wxStdDialogButtonSizer_SetAffirmativeButton, 1432). +-define(wxStdDialogButtonSizer_SetCancelButton, 1433). +-define(wxStdDialogButtonSizer_SetNegativeButton, 1434). +-define(wxStdDialogButtonSizer_destroy, 1435). +-define(wxFont_new_0, 1436). +-define(wxFont_new_1, 1437). +-define(wxFont_new_5, 1438). +-define(wxFont_destruct, 1440). +-define(wxFont_IsFixedWidth, 1441). +-define(wxFont_GetDefaultEncoding, 1442). +-define(wxFont_GetFaceName, 1443). +-define(wxFont_GetFamily, 1444). +-define(wxFont_GetNativeFontInfoDesc, 1445). +-define(wxFont_GetNativeFontInfoUserDesc, 1446). +-define(wxFont_GetPointSize, 1447). +-define(wxFont_GetStyle, 1448). +-define(wxFont_GetUnderlined, 1449). +-define(wxFont_GetWeight, 1450). +-define(wxFont_Ok, 1451). +-define(wxFont_SetDefaultEncoding, 1452). +-define(wxFont_SetFaceName, 1453). +-define(wxFont_SetFamily, 1454). +-define(wxFont_SetPointSize, 1455). +-define(wxFont_SetStyle, 1456). +-define(wxFont_SetUnderlined, 1457). +-define(wxFont_SetWeight, 1458). +-define(wxToolTip_Enable, 1459). +-define(wxToolTip_SetDelay, 1460). +-define(wxToolTip_new, 1461). +-define(wxToolTip_SetTip, 1462). +-define(wxToolTip_GetTip, 1463). +-define(wxToolTip_GetWindow, 1464). +-define(wxToolTip_destroy, 1465). +-define(wxButton_new_3, 1467). +-define(wxButton_new_0, 1468). +-define(wxButton_destruct, 1469). +-define(wxButton_Create, 1470). +-define(wxButton_GetDefaultSize, 1471). +-define(wxButton_SetDefault, 1472). +-define(wxButton_SetLabel, 1473). +-define(wxBitmapButton_new_4, 1475). +-define(wxBitmapButton_new_0, 1476). +-define(wxBitmapButton_Create, 1477). +-define(wxBitmapButton_GetBitmapDisabled, 1478). +-define(wxBitmapButton_GetBitmapFocus, 1480). +-define(wxBitmapButton_GetBitmapLabel, 1482). +-define(wxBitmapButton_GetBitmapSelected, 1484). +-define(wxBitmapButton_SetBitmapDisabled, 1486). +-define(wxBitmapButton_SetBitmapFocus, 1487). +-define(wxBitmapButton_SetBitmapLabel, 1488). +-define(wxBitmapButton_SetBitmapSelected, 1489). +-define(wxBitmapButton_destroy, 1490). +-define(wxToggleButton_new_0, 1491). +-define(wxToggleButton_new_4, 1492). +-define(wxToggleButton_Create, 1493). +-define(wxToggleButton_GetValue, 1494). +-define(wxToggleButton_SetValue, 1495). +-define(wxToggleButton_destroy, 1496). +-define(wxCalendarCtrl_new_0, 1497). +-define(wxCalendarCtrl_new_3, 1498). +-define(wxCalendarCtrl_Create, 1499). +-define(wxCalendarCtrl_destruct, 1500). +-define(wxCalendarCtrl_SetDate, 1501). +-define(wxCalendarCtrl_GetDate, 1502). +-define(wxCalendarCtrl_EnableYearChange, 1503). +-define(wxCalendarCtrl_EnableMonthChange, 1504). +-define(wxCalendarCtrl_EnableHolidayDisplay, 1505). +-define(wxCalendarCtrl_SetHeaderColours, 1506). +-define(wxCalendarCtrl_GetHeaderColourFg, 1507). +-define(wxCalendarCtrl_GetHeaderColourBg, 1508). +-define(wxCalendarCtrl_SetHighlightColours, 1509). +-define(wxCalendarCtrl_GetHighlightColourFg, 1510). +-define(wxCalendarCtrl_GetHighlightColourBg, 1511). +-define(wxCalendarCtrl_SetHolidayColours, 1512). +-define(wxCalendarCtrl_GetHolidayColourFg, 1513). +-define(wxCalendarCtrl_GetHolidayColourBg, 1514). +-define(wxCalendarCtrl_GetAttr, 1515). +-define(wxCalendarCtrl_SetAttr, 1516). +-define(wxCalendarCtrl_SetHoliday, 1517). +-define(wxCalendarCtrl_ResetAttr, 1518). +-define(wxCalendarCtrl_HitTest, 1519). +-define(wxCalendarDateAttr_new_0, 1520). +-define(wxCalendarDateAttr_new_2_1, 1521). +-define(wxCalendarDateAttr_new_2_0, 1522). +-define(wxCalendarDateAttr_SetTextColour, 1523). +-define(wxCalendarDateAttr_SetBackgroundColour, 1524). +-define(wxCalendarDateAttr_SetBorderColour, 1525). +-define(wxCalendarDateAttr_SetFont, 1526). +-define(wxCalendarDateAttr_SetBorder, 1527). +-define(wxCalendarDateAttr_SetHoliday, 1528). +-define(wxCalendarDateAttr_HasTextColour, 1529). +-define(wxCalendarDateAttr_HasBackgroundColour, 1530). +-define(wxCalendarDateAttr_HasBorderColour, 1531). +-define(wxCalendarDateAttr_HasFont, 1532). +-define(wxCalendarDateAttr_HasBorder, 1533). +-define(wxCalendarDateAttr_IsHoliday, 1534). +-define(wxCalendarDateAttr_GetTextColour, 1535). +-define(wxCalendarDateAttr_GetBackgroundColour, 1536). +-define(wxCalendarDateAttr_GetBorderColour, 1537). +-define(wxCalendarDateAttr_GetFont, 1538). +-define(wxCalendarDateAttr_GetBorder, 1539). +-define(wxCalendarDateAttr_destroy, 1540). +-define(wxCheckBox_new_4, 1542). +-define(wxCheckBox_new_0, 1543). +-define(wxCheckBox_Create, 1544). +-define(wxCheckBox_GetValue, 1545). +-define(wxCheckBox_Get3StateValue, 1546). +-define(wxCheckBox_Is3rdStateAllowedForUser, 1547). +-define(wxCheckBox_Is3State, 1548). +-define(wxCheckBox_IsChecked, 1549). +-define(wxCheckBox_SetValue, 1550). +-define(wxCheckBox_Set3StateValue, 1551). +-define(wxCheckBox_destroy, 1552). +-define(wxCheckListBox_new_0, 1553). +-define(wxCheckListBox_new_3, 1555). +-define(wxCheckListBox_Check, 1556). +-define(wxCheckListBox_IsChecked, 1557). +-define(wxCheckListBox_destroy, 1558). +-define(wxChoice_new_3, 1561). +-define(wxChoice_new_0, 1562). +-define(wxChoice_destruct, 1564). +-define(wxChoice_Create, 1566). +-define(wxChoice_Delete, 1567). +-define(wxChoice_GetColumns, 1568). +-define(wxChoice_SetColumns, 1569). +-define(wxComboBox_new_0, 1570). +-define(wxComboBox_new_3, 1572). +-define(wxComboBox_destruct, 1573). +-define(wxComboBox_Create, 1575). +-define(wxComboBox_CanCopy, 1576). +-define(wxComboBox_CanCut, 1577). +-define(wxComboBox_CanPaste, 1578). +-define(wxComboBox_CanRedo, 1579). +-define(wxComboBox_CanUndo, 1580). +-define(wxComboBox_Copy, 1581). +-define(wxComboBox_Cut, 1582). +-define(wxComboBox_GetInsertionPoint, 1583). +-define(wxComboBox_GetLastPosition, 1584). +-define(wxComboBox_GetValue, 1585). +-define(wxComboBox_Paste, 1586). +-define(wxComboBox_Redo, 1587). +-define(wxComboBox_Replace, 1588). +-define(wxComboBox_Remove, 1589). +-define(wxComboBox_SetInsertionPoint, 1590). +-define(wxComboBox_SetInsertionPointEnd, 1591). +-define(wxComboBox_SetSelection_1, 1592). +-define(wxComboBox_SetSelection_2, 1593). +-define(wxComboBox_SetValue, 1594). +-define(wxComboBox_Undo, 1595). +-define(wxGauge_new_0, 1596). +-define(wxGauge_new_4, 1597). +-define(wxGauge_Create, 1598). +-define(wxGauge_GetBezelFace, 1599). +-define(wxGauge_GetRange, 1600). +-define(wxGauge_GetShadowWidth, 1601). +-define(wxGauge_GetValue, 1602). +-define(wxGauge_IsVertical, 1603). +-define(wxGauge_SetBezelFace, 1604). +-define(wxGauge_SetRange, 1605). +-define(wxGauge_SetShadowWidth, 1606). +-define(wxGauge_SetValue, 1607). +-define(wxGauge_Pulse, 1608). +-define(wxGauge_destroy, 1609). +-define(wxGenericDirCtrl_new_0, 1610). +-define(wxGenericDirCtrl_new_2, 1611). +-define(wxGenericDirCtrl_destruct, 1612). +-define(wxGenericDirCtrl_Create, 1613). +-define(wxGenericDirCtrl_Init, 1614). +-define(wxGenericDirCtrl_CollapseTree, 1615). +-define(wxGenericDirCtrl_ExpandPath, 1616). +-define(wxGenericDirCtrl_GetDefaultPath, 1617). +-define(wxGenericDirCtrl_GetPath, 1618). +-define(wxGenericDirCtrl_GetFilePath, 1619). +-define(wxGenericDirCtrl_GetFilter, 1620). +-define(wxGenericDirCtrl_GetFilterIndex, 1621). +-define(wxGenericDirCtrl_GetRootId, 1622). +-define(wxGenericDirCtrl_GetTreeCtrl, 1623). +-define(wxGenericDirCtrl_ReCreateTree, 1624). +-define(wxGenericDirCtrl_SetDefaultPath, 1625). +-define(wxGenericDirCtrl_SetFilter, 1626). +-define(wxGenericDirCtrl_SetFilterIndex, 1627). +-define(wxGenericDirCtrl_SetPath, 1628). +-define(wxStaticBox_new_4, 1630). +-define(wxStaticBox_new_0, 1631). +-define(wxStaticBox_Create, 1632). +-define(wxStaticBox_destroy, 1633). +-define(wxStaticLine_new_2, 1635). +-define(wxStaticLine_new_0, 1636). +-define(wxStaticLine_Create, 1637). +-define(wxStaticLine_IsVertical, 1638). +-define(wxStaticLine_GetDefaultSize, 1639). +-define(wxStaticLine_destroy, 1640). +-define(wxListBox_new_3, 1643). +-define(wxListBox_new_0, 1644). +-define(wxListBox_destruct, 1646). +-define(wxListBox_Create, 1648). +-define(wxListBox_Deselect, 1649). +-define(wxListBox_GetSelections, 1650). +-define(wxListBox_InsertItems, 1651). +-define(wxListBox_IsSelected, 1652). +-define(wxListBox_Set, 1654). +-define(wxListBox_HitTest, 1655). +-define(wxListBox_SetFirstItem_1_0, 1656). +-define(wxListBox_SetFirstItem_1_1, 1657). +-define(wxListCtrl_new_0, 1658). +-define(wxListCtrl_new_2, 1659). +-define(wxListCtrl_Arrange, 1660). +-define(wxListCtrl_AssignImageList, 1661). +-define(wxListCtrl_ClearAll, 1662). +-define(wxListCtrl_Create, 1663). +-define(wxListCtrl_DeleteAllItems, 1664). +-define(wxListCtrl_DeleteColumn, 1665). +-define(wxListCtrl_DeleteItem, 1666). +-define(wxListCtrl_EditLabel, 1667). +-define(wxListCtrl_EnsureVisible, 1668). +-define(wxListCtrl_FindItem_3_0, 1669). +-define(wxListCtrl_FindItem_3_1, 1670). +-define(wxListCtrl_GetColumn, 1671). +-define(wxListCtrl_GetColumnCount, 1672). +-define(wxListCtrl_GetColumnWidth, 1673). +-define(wxListCtrl_GetCountPerPage, 1674). +-define(wxListCtrl_GetEditControl, 1675). +-define(wxListCtrl_GetImageList, 1676). +-define(wxListCtrl_GetItem, 1677). +-define(wxListCtrl_GetItemBackgroundColour, 1678). +-define(wxListCtrl_GetItemCount, 1679). +-define(wxListCtrl_GetItemData, 1680). +-define(wxListCtrl_GetItemFont, 1681). +-define(wxListCtrl_GetItemPosition, 1682). +-define(wxListCtrl_GetItemRect, 1683). +-define(wxListCtrl_GetItemSpacing, 1684). +-define(wxListCtrl_GetItemState, 1685). +-define(wxListCtrl_GetItemText, 1686). +-define(wxListCtrl_GetItemTextColour, 1687). +-define(wxListCtrl_GetNextItem, 1688). +-define(wxListCtrl_GetSelectedItemCount, 1689). +-define(wxListCtrl_GetTextColour, 1690). +-define(wxListCtrl_GetTopItem, 1691). +-define(wxListCtrl_GetViewRect, 1692). +-define(wxListCtrl_HitTest, 1693). +-define(wxListCtrl_InsertColumn_2, 1694). +-define(wxListCtrl_InsertColumn_3, 1695). +-define(wxListCtrl_InsertItem_1, 1696). +-define(wxListCtrl_InsertItem_2_1, 1697). +-define(wxListCtrl_InsertItem_2_0, 1698). +-define(wxListCtrl_InsertItem_3, 1699). +-define(wxListCtrl_RefreshItem, 1700). +-define(wxListCtrl_RefreshItems, 1701). +-define(wxListCtrl_ScrollList, 1702). +-define(wxListCtrl_SetBackgroundColour, 1703). +-define(wxListCtrl_SetColumn, 1704). +-define(wxListCtrl_SetColumnWidth, 1705). +-define(wxListCtrl_SetImageList, 1706). +-define(wxListCtrl_SetItem_1, 1707). +-define(wxListCtrl_SetItem_4, 1708). +-define(wxListCtrl_SetItemBackgroundColour, 1709). +-define(wxListCtrl_SetItemCount, 1710). +-define(wxListCtrl_SetItemData, 1711). +-define(wxListCtrl_SetItemFont, 1712). +-define(wxListCtrl_SetItemImage, 1713). +-define(wxListCtrl_SetItemColumnImage, 1714). +-define(wxListCtrl_SetItemPosition, 1715). +-define(wxListCtrl_SetItemState, 1716). +-define(wxListCtrl_SetItemText, 1717). +-define(wxListCtrl_SetItemTextColour, 1718). +-define(wxListCtrl_SetSingleStyle, 1719). +-define(wxListCtrl_SetTextColour, 1720). +-define(wxListCtrl_SetWindowStyleFlag, 1721). +-define(wxListCtrl_SortItems, 1722). +-define(wxListCtrl_destroy, 1723). +-define(wxListView_ClearColumnImage, 1724). +-define(wxListView_Focus, 1725). +-define(wxListView_GetFirstSelected, 1726). +-define(wxListView_GetFocusedItem, 1727). +-define(wxListView_GetNextSelected, 1728). +-define(wxListView_IsSelected, 1729). +-define(wxListView_Select, 1730). +-define(wxListView_SetColumnImage, 1731). +-define(wxListItem_new_0, 1732). +-define(wxListItem_new_1, 1733). +-define(wxListItem_destruct, 1734). +-define(wxListItem_Clear, 1735). +-define(wxListItem_GetAlign, 1736). +-define(wxListItem_GetBackgroundColour, 1737). +-define(wxListItem_GetColumn, 1738). +-define(wxListItem_GetFont, 1739). +-define(wxListItem_GetId, 1740). +-define(wxListItem_GetImage, 1741). +-define(wxListItem_GetMask, 1742). +-define(wxListItem_GetState, 1743). +-define(wxListItem_GetText, 1744). +-define(wxListItem_GetTextColour, 1745). +-define(wxListItem_GetWidth, 1746). +-define(wxListItem_SetAlign, 1747). +-define(wxListItem_SetBackgroundColour, 1748). +-define(wxListItem_SetColumn, 1749). +-define(wxListItem_SetFont, 1750). +-define(wxListItem_SetId, 1751). +-define(wxListItem_SetImage, 1752). +-define(wxListItem_SetMask, 1753). +-define(wxListItem_SetState, 1754). +-define(wxListItem_SetStateMask, 1755). +-define(wxListItem_SetText, 1756). +-define(wxListItem_SetTextColour, 1757). +-define(wxListItem_SetWidth, 1758). +-define(wxListItemAttr_new_0, 1759). +-define(wxListItemAttr_new_3, 1760). +-define(wxListItemAttr_GetBackgroundColour, 1761). +-define(wxListItemAttr_GetFont, 1762). +-define(wxListItemAttr_GetTextColour, 1763). +-define(wxListItemAttr_HasBackgroundColour, 1764). +-define(wxListItemAttr_HasFont, 1765). +-define(wxListItemAttr_HasTextColour, 1766). +-define(wxListItemAttr_SetBackgroundColour, 1767). +-define(wxListItemAttr_SetFont, 1768). +-define(wxListItemAttr_SetTextColour, 1769). +-define(wxListItemAttr_destroy, 1770). +-define(wxImageList_new_0, 1771). +-define(wxImageList_new_3, 1772). +-define(wxImageList_Add_1, 1773). +-define(wxImageList_Add_2_0, 1774). +-define(wxImageList_Add_2_1, 1775). +-define(wxImageList_Create, 1776). +-define(wxImageList_Draw, 1778). +-define(wxImageList_GetBitmap, 1779). +-define(wxImageList_GetIcon, 1780). +-define(wxImageList_GetImageCount, 1781). +-define(wxImageList_GetSize, 1782). +-define(wxImageList_Remove, 1783). +-define(wxImageList_RemoveAll, 1784). +-define(wxImageList_Replace_2, 1785). +-define(wxImageList_Replace_3, 1786). +-define(wxImageList_destroy, 1787). +-define(wxTextAttr_new_0, 1788). +-define(wxTextAttr_new_2, 1789). +-define(wxTextAttr_GetAlignment, 1790). +-define(wxTextAttr_GetBackgroundColour, 1791). +-define(wxTextAttr_GetFont, 1792). +-define(wxTextAttr_GetLeftIndent, 1793). +-define(wxTextAttr_GetLeftSubIndent, 1794). +-define(wxTextAttr_GetRightIndent, 1795). +-define(wxTextAttr_GetTabs, 1796). +-define(wxTextAttr_GetTextColour, 1797). +-define(wxTextAttr_HasBackgroundColour, 1798). +-define(wxTextAttr_HasFont, 1799). +-define(wxTextAttr_HasTextColour, 1800). +-define(wxTextAttr_GetFlags, 1801). +-define(wxTextAttr_IsDefault, 1802). +-define(wxTextAttr_SetAlignment, 1803). +-define(wxTextAttr_SetBackgroundColour, 1804). +-define(wxTextAttr_SetFlags, 1805). +-define(wxTextAttr_SetFont, 1806). +-define(wxTextAttr_SetLeftIndent, 1807). +-define(wxTextAttr_SetRightIndent, 1808). +-define(wxTextAttr_SetTabs, 1809). +-define(wxTextAttr_SetTextColour, 1810). +-define(wxTextAttr_destroy, 1811). +-define(wxTextCtrl_new_3, 1813). +-define(wxTextCtrl_new_0, 1814). +-define(wxTextCtrl_destruct, 1816). +-define(wxTextCtrl_AppendText, 1817). +-define(wxTextCtrl_CanCopy, 1818). +-define(wxTextCtrl_CanCut, 1819). +-define(wxTextCtrl_CanPaste, 1820). +-define(wxTextCtrl_CanRedo, 1821). +-define(wxTextCtrl_CanUndo, 1822). +-define(wxTextCtrl_Clear, 1823). +-define(wxTextCtrl_Copy, 1824). +-define(wxTextCtrl_Create, 1825). +-define(wxTextCtrl_Cut, 1826). +-define(wxTextCtrl_DiscardEdits, 1827). +-define(wxTextCtrl_EmulateKeyPress, 1828). +-define(wxTextCtrl_GetDefaultStyle, 1829). +-define(wxTextCtrl_GetInsertionPoint, 1830). +-define(wxTextCtrl_GetLastPosition, 1831). +-define(wxTextCtrl_GetLineLength, 1832). +-define(wxTextCtrl_GetLineText, 1833). +-define(wxTextCtrl_GetNumberOfLines, 1834). +-define(wxTextCtrl_GetRange, 1835). +-define(wxTextCtrl_GetSelection, 1836). +-define(wxTextCtrl_GetStringSelection, 1837). +-define(wxTextCtrl_GetStyle, 1838). +-define(wxTextCtrl_GetValue, 1839). +-define(wxTextCtrl_IsEditable, 1840). +-define(wxTextCtrl_IsModified, 1841). +-define(wxTextCtrl_IsMultiLine, 1842). +-define(wxTextCtrl_IsSingleLine, 1843). +-define(wxTextCtrl_LoadFile, 1844). +-define(wxTextCtrl_MarkDirty, 1845). +-define(wxTextCtrl_Paste, 1846). +-define(wxTextCtrl_PositionToXY, 1847). +-define(wxTextCtrl_Redo, 1848). +-define(wxTextCtrl_Remove, 1849). +-define(wxTextCtrl_Replace, 1850). +-define(wxTextCtrl_SaveFile, 1851). +-define(wxTextCtrl_SetDefaultStyle, 1852). +-define(wxTextCtrl_SetEditable, 1853). +-define(wxTextCtrl_SetInsertionPoint, 1854). +-define(wxTextCtrl_SetInsertionPointEnd, 1855). +-define(wxTextCtrl_SetMaxLength, 1857). +-define(wxTextCtrl_SetSelection, 1858). +-define(wxTextCtrl_SetStyle, 1859). +-define(wxTextCtrl_SetValue, 1860). +-define(wxTextCtrl_ShowPosition, 1861). +-define(wxTextCtrl_Undo, 1862). +-define(wxTextCtrl_WriteText, 1863). +-define(wxTextCtrl_XYToPosition, 1864). +-define(wxNotebook_new_0, 1867). +-define(wxNotebook_new_3, 1868). +-define(wxNotebook_destruct, 1869). +-define(wxNotebook_AddPage, 1870). +-define(wxNotebook_AdvanceSelection, 1871). +-define(wxNotebook_AssignImageList, 1872). +-define(wxNotebook_Create, 1873). +-define(wxNotebook_DeleteAllPages, 1874). +-define(wxNotebook_DeletePage, 1875). +-define(wxNotebook_RemovePage, 1876). +-define(wxNotebook_GetCurrentPage, 1877). +-define(wxNotebook_GetImageList, 1878). +-define(wxNotebook_GetPage, 1880). +-define(wxNotebook_GetPageCount, 1881). +-define(wxNotebook_GetPageImage, 1882). +-define(wxNotebook_GetPageText, 1883). +-define(wxNotebook_GetRowCount, 1884). +-define(wxNotebook_GetSelection, 1885). +-define(wxNotebook_GetThemeBackgroundColour, 1886). +-define(wxNotebook_HitTest, 1888). +-define(wxNotebook_InsertPage, 1890). +-define(wxNotebook_SetImageList, 1891). +-define(wxNotebook_SetPadding, 1892). +-define(wxNotebook_SetPageSize, 1893). +-define(wxNotebook_SetPageImage, 1894). +-define(wxNotebook_SetPageText, 1895). +-define(wxNotebook_SetSelection, 1896). +-define(wxNotebook_ChangeSelection, 1897). +-define(wxChoicebook_new_0, 1898). +-define(wxChoicebook_new_3, 1899). +-define(wxChoicebook_AddPage, 1900). +-define(wxChoicebook_AdvanceSelection, 1901). +-define(wxChoicebook_AssignImageList, 1902). +-define(wxChoicebook_Create, 1903). +-define(wxChoicebook_DeleteAllPages, 1904). +-define(wxChoicebook_DeletePage, 1905). +-define(wxChoicebook_RemovePage, 1906). +-define(wxChoicebook_GetCurrentPage, 1907). +-define(wxChoicebook_GetImageList, 1908). +-define(wxChoicebook_GetPage, 1910). +-define(wxChoicebook_GetPageCount, 1911). +-define(wxChoicebook_GetPageImage, 1912). +-define(wxChoicebook_GetPageText, 1913). +-define(wxChoicebook_GetSelection, 1914). +-define(wxChoicebook_HitTest, 1915). +-define(wxChoicebook_InsertPage, 1916). +-define(wxChoicebook_SetImageList, 1917). +-define(wxChoicebook_SetPageSize, 1918). +-define(wxChoicebook_SetPageImage, 1919). +-define(wxChoicebook_SetPageText, 1920). +-define(wxChoicebook_SetSelection, 1921). +-define(wxChoicebook_ChangeSelection, 1922). +-define(wxChoicebook_destroy, 1923). +-define(wxToolbook_new_0, 1924). +-define(wxToolbook_new_3, 1925). +-define(wxToolbook_AddPage, 1926). +-define(wxToolbook_AdvanceSelection, 1927). +-define(wxToolbook_AssignImageList, 1928). +-define(wxToolbook_Create, 1929). +-define(wxToolbook_DeleteAllPages, 1930). +-define(wxToolbook_DeletePage, 1931). +-define(wxToolbook_RemovePage, 1932). +-define(wxToolbook_GetCurrentPage, 1933). +-define(wxToolbook_GetImageList, 1934). +-define(wxToolbook_GetPage, 1936). +-define(wxToolbook_GetPageCount, 1937). +-define(wxToolbook_GetPageImage, 1938). +-define(wxToolbook_GetPageText, 1939). +-define(wxToolbook_GetSelection, 1940). +-define(wxToolbook_HitTest, 1942). +-define(wxToolbook_InsertPage, 1943). +-define(wxToolbook_SetImageList, 1944). +-define(wxToolbook_SetPageSize, 1945). +-define(wxToolbook_SetPageImage, 1946). +-define(wxToolbook_SetPageText, 1947). +-define(wxToolbook_SetSelection, 1948). +-define(wxToolbook_ChangeSelection, 1949). +-define(wxToolbook_destroy, 1950). +-define(wxListbook_new_0, 1951). +-define(wxListbook_new_3, 1952). +-define(wxListbook_AddPage, 1953). +-define(wxListbook_AdvanceSelection, 1954). +-define(wxListbook_AssignImageList, 1955). +-define(wxListbook_Create, 1956). +-define(wxListbook_DeleteAllPages, 1957). +-define(wxListbook_DeletePage, 1958). +-define(wxListbook_RemovePage, 1959). +-define(wxListbook_GetCurrentPage, 1960). +-define(wxListbook_GetImageList, 1961). +-define(wxListbook_GetPage, 1963). +-define(wxListbook_GetPageCount, 1964). +-define(wxListbook_GetPageImage, 1965). +-define(wxListbook_GetPageText, 1966). +-define(wxListbook_GetSelection, 1967). +-define(wxListbook_HitTest, 1969). +-define(wxListbook_InsertPage, 1970). +-define(wxListbook_SetImageList, 1971). +-define(wxListbook_SetPageSize, 1972). +-define(wxListbook_SetPageImage, 1973). +-define(wxListbook_SetPageText, 1974). +-define(wxListbook_SetSelection, 1975). +-define(wxListbook_ChangeSelection, 1976). +-define(wxListbook_destroy, 1977). +-define(wxTreebook_new_0, 1978). +-define(wxTreebook_new_3, 1979). +-define(wxTreebook_AddPage, 1980). +-define(wxTreebook_AdvanceSelection, 1981). +-define(wxTreebook_AssignImageList, 1982). +-define(wxTreebook_Create, 1983). +-define(wxTreebook_DeleteAllPages, 1984). +-define(wxTreebook_DeletePage, 1985). +-define(wxTreebook_RemovePage, 1986). +-define(wxTreebook_GetCurrentPage, 1987). +-define(wxTreebook_GetImageList, 1988). +-define(wxTreebook_GetPage, 1990). +-define(wxTreebook_GetPageCount, 1991). +-define(wxTreebook_GetPageImage, 1992). +-define(wxTreebook_GetPageText, 1993). +-define(wxTreebook_GetSelection, 1994). +-define(wxTreebook_ExpandNode, 1995). +-define(wxTreebook_IsNodeExpanded, 1996). +-define(wxTreebook_HitTest, 1998). +-define(wxTreebook_InsertPage, 1999). +-define(wxTreebook_InsertSubPage, 2000). +-define(wxTreebook_SetImageList, 2001). +-define(wxTreebook_SetPageSize, 2002). +-define(wxTreebook_SetPageImage, 2003). +-define(wxTreebook_SetPageText, 2004). +-define(wxTreebook_SetSelection, 2005). +-define(wxTreebook_ChangeSelection, 2006). +-define(wxTreebook_destroy, 2007). +-define(wxTreeCtrl_new_2, 2010). +-define(wxTreeCtrl_new_0, 2011). +-define(wxTreeCtrl_destruct, 2013). +-define(wxTreeCtrl_AddRoot, 2014). +-define(wxTreeCtrl_AppendItem, 2015). +-define(wxTreeCtrl_AssignImageList, 2016). +-define(wxTreeCtrl_AssignStateImageList, 2017). +-define(wxTreeCtrl_Collapse, 2018). +-define(wxTreeCtrl_CollapseAndReset, 2019). +-define(wxTreeCtrl_Create, 2020). +-define(wxTreeCtrl_Delete, 2021). +-define(wxTreeCtrl_DeleteAllItems, 2022). +-define(wxTreeCtrl_DeleteChildren, 2023). +-define(wxTreeCtrl_EditLabel, 2024). +-define(wxTreeCtrl_EnsureVisible, 2025). +-define(wxTreeCtrl_Expand, 2026). +-define(wxTreeCtrl_GetBoundingRect, 2027). +-define(wxTreeCtrl_GetChildrenCount, 2029). +-define(wxTreeCtrl_GetCount, 2030). +-define(wxTreeCtrl_GetEditControl, 2031). +-define(wxTreeCtrl_GetFirstChild, 2032). +-define(wxTreeCtrl_GetNextChild, 2033). +-define(wxTreeCtrl_GetFirstVisibleItem, 2034). +-define(wxTreeCtrl_GetImageList, 2035). +-define(wxTreeCtrl_GetIndent, 2036). +-define(wxTreeCtrl_GetItemBackgroundColour, 2037). +-define(wxTreeCtrl_GetItemData, 2038). +-define(wxTreeCtrl_GetItemFont, 2039). +-define(wxTreeCtrl_GetItemImage_1, 2040). +-define(wxTreeCtrl_GetItemImage_2, 2041). +-define(wxTreeCtrl_GetItemText, 2042). +-define(wxTreeCtrl_GetItemTextColour, 2043). +-define(wxTreeCtrl_GetLastChild, 2044). +-define(wxTreeCtrl_GetNextSibling, 2045). +-define(wxTreeCtrl_GetNextVisible, 2046). +-define(wxTreeCtrl_GetItemParent, 2047). +-define(wxTreeCtrl_GetPrevSibling, 2048). +-define(wxTreeCtrl_GetPrevVisible, 2049). +-define(wxTreeCtrl_GetRootItem, 2050). +-define(wxTreeCtrl_GetSelection, 2051). +-define(wxTreeCtrl_GetSelections, 2052). +-define(wxTreeCtrl_GetStateImageList, 2053). +-define(wxTreeCtrl_HitTest, 2054). +-define(wxTreeCtrl_InsertItem, 2056). +-define(wxTreeCtrl_IsBold, 2057). +-define(wxTreeCtrl_IsExpanded, 2058). +-define(wxTreeCtrl_IsSelected, 2059). +-define(wxTreeCtrl_IsVisible, 2060). +-define(wxTreeCtrl_ItemHasChildren, 2061). +-define(wxTreeCtrl_IsTreeItemIdOk, 2062). +-define(wxTreeCtrl_PrependItem, 2063). +-define(wxTreeCtrl_ScrollTo, 2064). +-define(wxTreeCtrl_SelectItem_1, 2065). +-define(wxTreeCtrl_SelectItem_2, 2066). +-define(wxTreeCtrl_SetIndent, 2067). +-define(wxTreeCtrl_SetImageList, 2068). +-define(wxTreeCtrl_SetItemBackgroundColour, 2069). +-define(wxTreeCtrl_SetItemBold, 2070). +-define(wxTreeCtrl_SetItemData, 2071). +-define(wxTreeCtrl_SetItemDropHighlight, 2072). +-define(wxTreeCtrl_SetItemFont, 2073). +-define(wxTreeCtrl_SetItemHasChildren, 2074). +-define(wxTreeCtrl_SetItemImage_2, 2075). +-define(wxTreeCtrl_SetItemImage_3, 2076). +-define(wxTreeCtrl_SetItemText, 2077). +-define(wxTreeCtrl_SetItemTextColour, 2078). +-define(wxTreeCtrl_SetStateImageList, 2079). +-define(wxTreeCtrl_SetWindowStyle, 2080). +-define(wxTreeCtrl_SortChildren, 2081). +-define(wxTreeCtrl_Toggle, 2082). +-define(wxTreeCtrl_ToggleItemSelection, 2083). +-define(wxTreeCtrl_Unselect, 2084). +-define(wxTreeCtrl_UnselectAll, 2085). +-define(wxTreeCtrl_UnselectItem, 2086). +-define(wxScrollBar_new_0, 2087). +-define(wxScrollBar_new_3, 2088). +-define(wxScrollBar_destruct, 2089). +-define(wxScrollBar_Create, 2090). +-define(wxScrollBar_GetRange, 2091). +-define(wxScrollBar_GetPageSize, 2092). +-define(wxScrollBar_GetThumbPosition, 2093). +-define(wxScrollBar_GetThumbSize, 2094). +-define(wxScrollBar_SetThumbPosition, 2095). +-define(wxScrollBar_SetScrollbar, 2096). +-define(wxSpinButton_new_2, 2098). +-define(wxSpinButton_new_0, 2099). +-define(wxSpinButton_Create, 2100). +-define(wxSpinButton_GetMax, 2101). +-define(wxSpinButton_GetMin, 2102). +-define(wxSpinButton_GetValue, 2103). +-define(wxSpinButton_SetRange, 2104). +-define(wxSpinButton_SetValue, 2105). +-define(wxSpinButton_destroy, 2106). +-define(wxSpinCtrl_new_0, 2107). +-define(wxSpinCtrl_new_2, 2108). +-define(wxSpinCtrl_Create, 2110). +-define(wxSpinCtrl_SetValue_1_1, 2113). +-define(wxSpinCtrl_SetValue_1_0, 2114). +-define(wxSpinCtrl_GetValue, 2116). +-define(wxSpinCtrl_SetRange, 2118). +-define(wxSpinCtrl_SetSelection, 2119). +-define(wxSpinCtrl_GetMin, 2121). +-define(wxSpinCtrl_GetMax, 2123). +-define(wxSpinCtrl_destroy, 2124). +-define(wxStaticText_new_0, 2125). +-define(wxStaticText_new_4, 2126). +-define(wxStaticText_Create, 2127). +-define(wxStaticText_GetLabel, 2128). +-define(wxStaticText_SetLabel, 2129). +-define(wxStaticText_Wrap, 2130). +-define(wxStaticText_destroy, 2131). +-define(wxStaticBitmap_new_0, 2132). +-define(wxStaticBitmap_new_4, 2133). +-define(wxStaticBitmap_Create, 2134). +-define(wxStaticBitmap_GetBitmap, 2135). +-define(wxStaticBitmap_SetBitmap, 2136). +-define(wxStaticBitmap_destroy, 2137). +-define(wxRadioBox_new, 2138). +-define(wxRadioBox_destruct, 2140). +-define(wxRadioBox_Create, 2141). +-define(wxRadioBox_Enable_2, 2142). +-define(wxRadioBox_Enable_1, 2143). +-define(wxRadioBox_GetSelection, 2144). +-define(wxRadioBox_GetString, 2145). +-define(wxRadioBox_SetSelection, 2146). +-define(wxRadioBox_Show_2, 2147). +-define(wxRadioBox_Show_1, 2148). +-define(wxRadioBox_GetColumnCount, 2149). +-define(wxRadioBox_GetItemHelpText, 2150). +-define(wxRadioBox_GetItemToolTip, 2151). +-define(wxRadioBox_GetItemFromPoint, 2153). +-define(wxRadioBox_GetRowCount, 2154). +-define(wxRadioBox_IsItemEnabled, 2155). +-define(wxRadioBox_IsItemShown, 2156). +-define(wxRadioBox_SetItemHelpText, 2157). +-define(wxRadioBox_SetItemToolTip, 2158). +-define(wxRadioButton_new_0, 2159). +-define(wxRadioButton_new_4, 2160). +-define(wxRadioButton_Create, 2161). +-define(wxRadioButton_GetValue, 2162). +-define(wxRadioButton_SetValue, 2163). +-define(wxRadioButton_destroy, 2164). +-define(wxSlider_new_6, 2166). +-define(wxSlider_new_0, 2167). +-define(wxSlider_Create, 2168). +-define(wxSlider_GetLineSize, 2169). +-define(wxSlider_GetMax, 2170). +-define(wxSlider_GetMin, 2171). +-define(wxSlider_GetPageSize, 2172). +-define(wxSlider_GetThumbLength, 2173). +-define(wxSlider_GetValue, 2174). +-define(wxSlider_SetLineSize, 2175). +-define(wxSlider_SetPageSize, 2176). +-define(wxSlider_SetRange, 2177). +-define(wxSlider_SetThumbLength, 2178). +-define(wxSlider_SetValue, 2179). +-define(wxSlider_destroy, 2180). +-define(wxDialog_new_4, 2182). +-define(wxDialog_new_0, 2183). +-define(wxDialog_destruct, 2185). +-define(wxDialog_Create, 2186). +-define(wxDialog_CreateButtonSizer, 2187). +-define(wxDialog_CreateStdDialogButtonSizer, 2188). +-define(wxDialog_EndModal, 2189). +-define(wxDialog_GetAffirmativeId, 2190). +-define(wxDialog_GetReturnCode, 2191). +-define(wxDialog_IsModal, 2192). +-define(wxDialog_SetAffirmativeId, 2193). +-define(wxDialog_SetReturnCode, 2194). +-define(wxDialog_Show, 2195). +-define(wxDialog_ShowModal, 2196). +-define(wxColourDialog_new_0, 2197). +-define(wxColourDialog_new_2, 2198). +-define(wxColourDialog_destruct, 2199). +-define(wxColourDialog_Create, 2200). +-define(wxColourDialog_GetColourData, 2201). +-define(wxColourData_new_0, 2202). +-define(wxColourData_new_1, 2203). +-define(wxColourData_destruct, 2204). +-define(wxColourData_GetChooseFull, 2205). +-define(wxColourData_GetColour, 2206). +-define(wxColourData_GetCustomColour, 2208). +-define(wxColourData_SetChooseFull, 2209). +-define(wxColourData_SetColour, 2210). +-define(wxColourData_SetCustomColour, 2211). +-define(wxPalette_new_0, 2212). +-define(wxPalette_new_4, 2213). +-define(wxPalette_destruct, 2215). +-define(wxPalette_Create, 2216). +-define(wxPalette_GetColoursCount, 2217). +-define(wxPalette_GetPixel, 2218). +-define(wxPalette_GetRGB, 2219). +-define(wxPalette_IsOk, 2220). +-define(wxDirDialog_new, 2224). +-define(wxDirDialog_destruct, 2225). +-define(wxDirDialog_GetPath, 2226). +-define(wxDirDialog_GetMessage, 2227). +-define(wxDirDialog_SetMessage, 2228). +-define(wxDirDialog_SetPath, 2229). +-define(wxFileDialog_new, 2233). +-define(wxFileDialog_destruct, 2234). +-define(wxFileDialog_GetDirectory, 2235). +-define(wxFileDialog_GetFilename, 2236). +-define(wxFileDialog_GetFilenames, 2237). +-define(wxFileDialog_GetFilterIndex, 2238). +-define(wxFileDialog_GetMessage, 2239). +-define(wxFileDialog_GetPath, 2240). +-define(wxFileDialog_GetPaths, 2241). +-define(wxFileDialog_GetWildcard, 2242). +-define(wxFileDialog_SetDirectory, 2243). +-define(wxFileDialog_SetFilename, 2244). +-define(wxFileDialog_SetFilterIndex, 2245). +-define(wxFileDialog_SetMessage, 2246). +-define(wxFileDialog_SetPath, 2247). +-define(wxFileDialog_SetWildcard, 2248). +-define(wxPickerBase_SetInternalMargin, 2249). +-define(wxPickerBase_GetInternalMargin, 2250). +-define(wxPickerBase_SetTextCtrlProportion, 2251). +-define(wxPickerBase_SetPickerCtrlProportion, 2252). +-define(wxPickerBase_GetTextCtrlProportion, 2253). +-define(wxPickerBase_GetPickerCtrlProportion, 2254). +-define(wxPickerBase_HasTextCtrl, 2255). +-define(wxPickerBase_GetTextCtrl, 2256). +-define(wxPickerBase_IsTextCtrlGrowable, 2257). +-define(wxPickerBase_SetPickerCtrlGrowable, 2258). +-define(wxPickerBase_SetTextCtrlGrowable, 2259). +-define(wxPickerBase_IsPickerCtrlGrowable, 2260). +-define(wxFilePickerCtrl_new_0, 2261). +-define(wxFilePickerCtrl_new_3, 2262). +-define(wxFilePickerCtrl_Create, 2263). +-define(wxFilePickerCtrl_GetPath, 2264). +-define(wxFilePickerCtrl_SetPath, 2265). +-define(wxFilePickerCtrl_destroy, 2266). +-define(wxDirPickerCtrl_new_0, 2267). +-define(wxDirPickerCtrl_new_3, 2268). +-define(wxDirPickerCtrl_Create, 2269). +-define(wxDirPickerCtrl_GetPath, 2270). +-define(wxDirPickerCtrl_SetPath, 2271). +-define(wxDirPickerCtrl_destroy, 2272). +-define(wxColourPickerCtrl_new_0, 2273). +-define(wxColourPickerCtrl_new_3, 2274). +-define(wxColourPickerCtrl_Create, 2275). +-define(wxColourPickerCtrl_GetColour, 2276). +-define(wxColourPickerCtrl_SetColour_1_1, 2277). +-define(wxColourPickerCtrl_SetColour_1_0, 2278). +-define(wxColourPickerCtrl_destroy, 2279). +-define(wxDatePickerCtrl_new_0, 2280). +-define(wxDatePickerCtrl_new_3, 2281). +-define(wxDatePickerCtrl_GetRange, 2282). +-define(wxDatePickerCtrl_GetValue, 2283). +-define(wxDatePickerCtrl_SetRange, 2284). +-define(wxDatePickerCtrl_SetValue, 2285). +-define(wxDatePickerCtrl_destroy, 2286). +-define(wxFontPickerCtrl_new_0, 2287). +-define(wxFontPickerCtrl_new_3, 2288). +-define(wxFontPickerCtrl_Create, 2289). +-define(wxFontPickerCtrl_GetSelectedFont, 2290). +-define(wxFontPickerCtrl_SetSelectedFont, 2291). +-define(wxFontPickerCtrl_GetMaxPointSize, 2292). +-define(wxFontPickerCtrl_SetMaxPointSize, 2293). +-define(wxFontPickerCtrl_destroy, 2294). +-define(wxFindReplaceDialog_new_0, 2297). +-define(wxFindReplaceDialog_new_4, 2298). +-define(wxFindReplaceDialog_destruct, 2299). +-define(wxFindReplaceDialog_Create, 2300). +-define(wxFindReplaceDialog_GetData, 2301). +-define(wxFindReplaceData_new_0, 2302). +-define(wxFindReplaceData_new_1, 2303). +-define(wxFindReplaceData_GetFindString, 2304). +-define(wxFindReplaceData_GetReplaceString, 2305). +-define(wxFindReplaceData_GetFlags, 2306). +-define(wxFindReplaceData_SetFlags, 2307). +-define(wxFindReplaceData_SetFindString, 2308). +-define(wxFindReplaceData_SetReplaceString, 2309). +-define(wxFindReplaceData_destroy, 2310). +-define(wxMultiChoiceDialog_new_0, 2311). +-define(wxMultiChoiceDialog_new_5, 2313). +-define(wxMultiChoiceDialog_GetSelections, 2314). +-define(wxMultiChoiceDialog_SetSelections, 2315). +-define(wxMultiChoiceDialog_destroy, 2316). +-define(wxSingleChoiceDialog_new_0, 2317). +-define(wxSingleChoiceDialog_new_5, 2319). +-define(wxSingleChoiceDialog_GetSelection, 2320). +-define(wxSingleChoiceDialog_GetStringSelection, 2321). +-define(wxSingleChoiceDialog_SetSelection, 2322). +-define(wxSingleChoiceDialog_destroy, 2323). +-define(wxTextEntryDialog_new, 2324). +-define(wxTextEntryDialog_GetValue, 2325). +-define(wxTextEntryDialog_SetValue, 2326). +-define(wxTextEntryDialog_destroy, 2327). +-define(wxPasswordEntryDialog_new, 2328). +-define(wxPasswordEntryDialog_destroy, 2329). +-define(wxFontData_new_0, 2330). +-define(wxFontData_new_1, 2331). +-define(wxFontData_destruct, 2332). +-define(wxFontData_EnableEffects, 2333). +-define(wxFontData_GetAllowSymbols, 2334). +-define(wxFontData_GetColour, 2335). +-define(wxFontData_GetChosenFont, 2336). +-define(wxFontData_GetEnableEffects, 2337). +-define(wxFontData_GetInitialFont, 2338). +-define(wxFontData_GetShowHelp, 2339). +-define(wxFontData_SetAllowSymbols, 2340). +-define(wxFontData_SetChosenFont, 2341). +-define(wxFontData_SetColour, 2342). +-define(wxFontData_SetInitialFont, 2343). +-define(wxFontData_SetRange, 2344). +-define(wxFontData_SetShowHelp, 2345). +-define(wxFontDialog_new_0, 2349). +-define(wxFontDialog_new_2, 2351). +-define(wxFontDialog_Create, 2353). +-define(wxFontDialog_GetFontData, 2354). +-define(wxFontDialog_destroy, 2356). +-define(wxProgressDialog_new, 2357). +-define(wxProgressDialog_destruct, 2358). +-define(wxProgressDialog_Resume, 2359). +-define(wxProgressDialog_Update_2, 2360). +-define(wxProgressDialog_Update_0, 2361). +-define(wxMessageDialog_new, 2362). +-define(wxMessageDialog_destruct, 2363). +-define(wxPageSetupDialog_new, 2364). +-define(wxPageSetupDialog_destruct, 2365). +-define(wxPageSetupDialog_GetPageSetupData, 2366). +-define(wxPageSetupDialog_ShowModal, 2367). +-define(wxPageSetupDialogData_new_0, 2368). +-define(wxPageSetupDialogData_new_1_0, 2369). +-define(wxPageSetupDialogData_new_1_1, 2370). +-define(wxPageSetupDialogData_destruct, 2371). +-define(wxPageSetupDialogData_EnableHelp, 2372). +-define(wxPageSetupDialogData_EnableMargins, 2373). +-define(wxPageSetupDialogData_EnableOrientation, 2374). +-define(wxPageSetupDialogData_EnablePaper, 2375). +-define(wxPageSetupDialogData_EnablePrinter, 2376). +-define(wxPageSetupDialogData_GetDefaultMinMargins, 2377). +-define(wxPageSetupDialogData_GetEnableMargins, 2378). +-define(wxPageSetupDialogData_GetEnableOrientation, 2379). +-define(wxPageSetupDialogData_GetEnablePaper, 2380). +-define(wxPageSetupDialogData_GetEnablePrinter, 2381). +-define(wxPageSetupDialogData_GetEnableHelp, 2382). +-define(wxPageSetupDialogData_GetDefaultInfo, 2383). +-define(wxPageSetupDialogData_GetMarginTopLeft, 2384). +-define(wxPageSetupDialogData_GetMarginBottomRight, 2385). +-define(wxPageSetupDialogData_GetMinMarginTopLeft, 2386). +-define(wxPageSetupDialogData_GetMinMarginBottomRight, 2387). +-define(wxPageSetupDialogData_GetPaperId, 2388). +-define(wxPageSetupDialogData_GetPaperSize, 2389). +-define(wxPageSetupDialogData_GetPrintData, 2391). +-define(wxPageSetupDialogData_IsOk, 2392). +-define(wxPageSetupDialogData_SetDefaultInfo, 2393). +-define(wxPageSetupDialogData_SetDefaultMinMargins, 2394). +-define(wxPageSetupDialogData_SetMarginTopLeft, 2395). +-define(wxPageSetupDialogData_SetMarginBottomRight, 2396). +-define(wxPageSetupDialogData_SetMinMarginTopLeft, 2397). +-define(wxPageSetupDialogData_SetMinMarginBottomRight, 2398). +-define(wxPageSetupDialogData_SetPaperId, 2399). +-define(wxPageSetupDialogData_SetPaperSize_1_1, 2400). +-define(wxPageSetupDialogData_SetPaperSize_1_0, 2401). +-define(wxPageSetupDialogData_SetPrintData, 2402). +-define(wxPrintDialog_new_2_0, 2403). +-define(wxPrintDialog_new_2_1, 2404). +-define(wxPrintDialog_destruct, 2405). +-define(wxPrintDialog_GetPrintDialogData, 2406). +-define(wxPrintDialog_GetPrintDC, 2407). +-define(wxPrintDialogData_new_0, 2408). +-define(wxPrintDialogData_new_1_1, 2409). +-define(wxPrintDialogData_new_1_0, 2410). +-define(wxPrintDialogData_destruct, 2411). +-define(wxPrintDialogData_EnableHelp, 2412). +-define(wxPrintDialogData_EnablePageNumbers, 2413). +-define(wxPrintDialogData_EnablePrintToFile, 2414). +-define(wxPrintDialogData_EnableSelection, 2415). +-define(wxPrintDialogData_GetAllPages, 2416). +-define(wxPrintDialogData_GetCollate, 2417). +-define(wxPrintDialogData_GetFromPage, 2418). +-define(wxPrintDialogData_GetMaxPage, 2419). +-define(wxPrintDialogData_GetMinPage, 2420). +-define(wxPrintDialogData_GetNoCopies, 2421). +-define(wxPrintDialogData_GetPrintData, 2422). +-define(wxPrintDialogData_GetPrintToFile, 2423). +-define(wxPrintDialogData_GetSelection, 2424). +-define(wxPrintDialogData_GetToPage, 2425). +-define(wxPrintDialogData_IsOk, 2426). +-define(wxPrintDialogData_SetCollate, 2427). +-define(wxPrintDialogData_SetFromPage, 2428). +-define(wxPrintDialogData_SetMaxPage, 2429). +-define(wxPrintDialogData_SetMinPage, 2430). +-define(wxPrintDialogData_SetNoCopies, 2431). +-define(wxPrintDialogData_SetPrintData, 2432). +-define(wxPrintDialogData_SetPrintToFile, 2433). +-define(wxPrintDialogData_SetSelection, 2434). +-define(wxPrintDialogData_SetToPage, 2435). +-define(wxPrintData_new_0, 2436). +-define(wxPrintData_new_1, 2437). +-define(wxPrintData_destruct, 2438). +-define(wxPrintData_GetCollate, 2439). +-define(wxPrintData_GetBin, 2440). +-define(wxPrintData_GetColour, 2441). +-define(wxPrintData_GetDuplex, 2442). +-define(wxPrintData_GetNoCopies, 2443). +-define(wxPrintData_GetOrientation, 2444). +-define(wxPrintData_GetPaperId, 2445). +-define(wxPrintData_GetPrinterName, 2446). +-define(wxPrintData_GetQuality, 2447). +-define(wxPrintData_IsOk, 2448). +-define(wxPrintData_SetBin, 2449). +-define(wxPrintData_SetCollate, 2450). +-define(wxPrintData_SetColour, 2451). +-define(wxPrintData_SetDuplex, 2452). +-define(wxPrintData_SetNoCopies, 2453). +-define(wxPrintData_SetOrientation, 2454). +-define(wxPrintData_SetPaperId, 2455). +-define(wxPrintData_SetPrinterName, 2456). +-define(wxPrintData_SetQuality, 2457). +-define(wxPrintPreview_new_2, 2460). +-define(wxPrintPreview_new_3, 2461). +-define(wxPrintPreview_destruct, 2463). +-define(wxPrintPreview_GetCanvas, 2464). +-define(wxPrintPreview_GetCurrentPage, 2465). +-define(wxPrintPreview_GetFrame, 2466). +-define(wxPrintPreview_GetMaxPage, 2467). +-define(wxPrintPreview_GetMinPage, 2468). +-define(wxPrintPreview_GetPrintout, 2469). +-define(wxPrintPreview_GetPrintoutForPrinting, 2470). +-define(wxPrintPreview_IsOk, 2471). +-define(wxPrintPreview_PaintPage, 2472). +-define(wxPrintPreview_Print, 2473). +-define(wxPrintPreview_RenderPage, 2474). +-define(wxPrintPreview_SetCanvas, 2475). +-define(wxPrintPreview_SetCurrentPage, 2476). +-define(wxPrintPreview_SetFrame, 2477). +-define(wxPrintPreview_SetPrintout, 2478). +-define(wxPrintPreview_SetZoom, 2479). +-define(wxPreviewFrame_new, 2480). +-define(wxPreviewFrame_destruct, 2481). +-define(wxPreviewFrame_CreateControlBar, 2482). +-define(wxPreviewFrame_CreateCanvas, 2483). +-define(wxPreviewFrame_Initialize, 2484). +-define(wxPreviewFrame_OnCloseWindow, 2485). +-define(wxPreviewControlBar_new, 2486). +-define(wxPreviewControlBar_destruct, 2487). +-define(wxPreviewControlBar_CreateButtons, 2488). +-define(wxPreviewControlBar_GetPrintPreview, 2489). +-define(wxPreviewControlBar_GetZoomControl, 2490). +-define(wxPreviewControlBar_SetZoomControl, 2491). +-define(wxPrinter_new, 2493). +-define(wxPrinter_CreateAbortWindow, 2494). +-define(wxPrinter_GetAbort, 2495). +-define(wxPrinter_GetLastError, 2496). +-define(wxPrinter_GetPrintDialogData, 2497). +-define(wxPrinter_Print, 2498). +-define(wxPrinter_PrintDialog, 2499). +-define(wxPrinter_ReportError, 2500). +-define(wxPrinter_Setup, 2501). +-define(wxPrinter_destroy, 2502). +-define(wxXmlResource_new_1, 2503). +-define(wxXmlResource_new_2, 2504). +-define(wxXmlResource_destruct, 2505). +-define(wxXmlResource_AttachUnknownControl, 2506). +-define(wxXmlResource_ClearHandlers, 2507). +-define(wxXmlResource_CompareVersion, 2508). +-define(wxXmlResource_Get, 2509). +-define(wxXmlResource_GetFlags, 2510). +-define(wxXmlResource_GetVersion, 2511). +-define(wxXmlResource_GetXRCID, 2512). +-define(wxXmlResource_InitAllHandlers, 2513). +-define(wxXmlResource_Load, 2514). +-define(wxXmlResource_LoadBitmap, 2515). +-define(wxXmlResource_LoadDialog_2, 2516). +-define(wxXmlResource_LoadDialog_3, 2517). +-define(wxXmlResource_LoadFrame_2, 2518). +-define(wxXmlResource_LoadFrame_3, 2519). +-define(wxXmlResource_LoadIcon, 2520). +-define(wxXmlResource_LoadMenu, 2521). +-define(wxXmlResource_LoadMenuBar_2, 2522). +-define(wxXmlResource_LoadMenuBar_1, 2523). +-define(wxXmlResource_LoadPanel_2, 2524). +-define(wxXmlResource_LoadPanel_3, 2525). +-define(wxXmlResource_LoadToolBar, 2526). +-define(wxXmlResource_Set, 2527). +-define(wxXmlResource_SetFlags, 2528). +-define(wxXmlResource_Unload, 2529). +-define(wxXmlResource_xrcctrl, 2530). +-define(wxHtmlEasyPrinting_new, 2531). +-define(wxHtmlEasyPrinting_destruct, 2532). +-define(wxHtmlEasyPrinting_GetPrintData, 2533). +-define(wxHtmlEasyPrinting_GetPageSetupData, 2534). +-define(wxHtmlEasyPrinting_PreviewFile, 2535). +-define(wxHtmlEasyPrinting_PreviewText, 2536). +-define(wxHtmlEasyPrinting_PrintFile, 2537). +-define(wxHtmlEasyPrinting_PrintText, 2538). +-define(wxHtmlEasyPrinting_PageSetup, 2539). +-define(wxHtmlEasyPrinting_SetFonts, 2540). +-define(wxHtmlEasyPrinting_SetHeader, 2541). +-define(wxHtmlEasyPrinting_SetFooter, 2542). +-define(wxGLCanvas_new_2, 2544). +-define(wxGLCanvas_new_3_1, 2545). +-define(wxGLCanvas_new_3_0, 2546). +-define(wxGLCanvas_GetContext, 2547). +-define(wxGLCanvas_SetCurrent, 2549). +-define(wxGLCanvas_SwapBuffers, 2550). +-define(wxGLCanvas_destroy, 2551). +-define(wxAuiManager_new, 2552). +-define(wxAuiManager_destruct, 2553). +-define(wxAuiManager_AddPane_2_1, 2554). +-define(wxAuiManager_AddPane_3, 2555). +-define(wxAuiManager_AddPane_2_0, 2556). +-define(wxAuiManager_DetachPane, 2557). +-define(wxAuiManager_GetAllPanes, 2558). +-define(wxAuiManager_GetArtProvider, 2559). +-define(wxAuiManager_GetDockSizeConstraint, 2560). +-define(wxAuiManager_GetFlags, 2561). +-define(wxAuiManager_GetManagedWindow, 2562). +-define(wxAuiManager_GetManager, 2563). +-define(wxAuiManager_GetPane_1_1, 2564). +-define(wxAuiManager_GetPane_1_0, 2565). +-define(wxAuiManager_HideHint, 2566). +-define(wxAuiManager_InsertPane, 2567). +-define(wxAuiManager_LoadPaneInfo, 2568). +-define(wxAuiManager_LoadPerspective, 2569). +-define(wxAuiManager_SavePaneInfo, 2570). +-define(wxAuiManager_SavePerspective, 2571). +-define(wxAuiManager_SetArtProvider, 2572). +-define(wxAuiManager_SetDockSizeConstraint, 2573). +-define(wxAuiManager_SetFlags, 2574). +-define(wxAuiManager_SetManagedWindow, 2575). +-define(wxAuiManager_ShowHint, 2576). +-define(wxAuiManager_UnInit, 2577). +-define(wxAuiManager_Update, 2578). +-define(wxAuiPaneInfo_new_0, 2579). +-define(wxAuiPaneInfo_new_1, 2580). +-define(wxAuiPaneInfo_destruct, 2581). +-define(wxAuiPaneInfo_BestSize_1, 2582). +-define(wxAuiPaneInfo_BestSize_2, 2583). +-define(wxAuiPaneInfo_Bottom, 2584). +-define(wxAuiPaneInfo_BottomDockable, 2585). +-define(wxAuiPaneInfo_Caption, 2586). +-define(wxAuiPaneInfo_CaptionVisible, 2587). +-define(wxAuiPaneInfo_Centre, 2588). +-define(wxAuiPaneInfo_CentrePane, 2589). +-define(wxAuiPaneInfo_CloseButton, 2590). +-define(wxAuiPaneInfo_DefaultPane, 2591). +-define(wxAuiPaneInfo_DestroyOnClose, 2592). +-define(wxAuiPaneInfo_Direction, 2593). +-define(wxAuiPaneInfo_Dock, 2594). +-define(wxAuiPaneInfo_Dockable, 2595). +-define(wxAuiPaneInfo_Fixed, 2596). +-define(wxAuiPaneInfo_Float, 2597). +-define(wxAuiPaneInfo_Floatable, 2598). +-define(wxAuiPaneInfo_FloatingPosition_1, 2599). +-define(wxAuiPaneInfo_FloatingPosition_2, 2600). +-define(wxAuiPaneInfo_FloatingSize_1, 2601). +-define(wxAuiPaneInfo_FloatingSize_2, 2602). +-define(wxAuiPaneInfo_Gripper, 2603). +-define(wxAuiPaneInfo_GripperTop, 2604). +-define(wxAuiPaneInfo_HasBorder, 2605). +-define(wxAuiPaneInfo_HasCaption, 2606). +-define(wxAuiPaneInfo_HasCloseButton, 2607). +-define(wxAuiPaneInfo_HasFlag, 2608). +-define(wxAuiPaneInfo_HasGripper, 2609). +-define(wxAuiPaneInfo_HasGripperTop, 2610). +-define(wxAuiPaneInfo_HasMaximizeButton, 2611). +-define(wxAuiPaneInfo_HasMinimizeButton, 2612). +-define(wxAuiPaneInfo_HasPinButton, 2613). +-define(wxAuiPaneInfo_Hide, 2614). +-define(wxAuiPaneInfo_IsBottomDockable, 2615). +-define(wxAuiPaneInfo_IsDocked, 2616). +-define(wxAuiPaneInfo_IsFixed, 2617). +-define(wxAuiPaneInfo_IsFloatable, 2618). +-define(wxAuiPaneInfo_IsFloating, 2619). +-define(wxAuiPaneInfo_IsLeftDockable, 2620). +-define(wxAuiPaneInfo_IsMovable, 2621). +-define(wxAuiPaneInfo_IsOk, 2622). +-define(wxAuiPaneInfo_IsResizable, 2623). +-define(wxAuiPaneInfo_IsRightDockable, 2624). +-define(wxAuiPaneInfo_IsShown, 2625). +-define(wxAuiPaneInfo_IsToolbar, 2626). +-define(wxAuiPaneInfo_IsTopDockable, 2627). +-define(wxAuiPaneInfo_Layer, 2628). +-define(wxAuiPaneInfo_Left, 2629). +-define(wxAuiPaneInfo_LeftDockable, 2630). +-define(wxAuiPaneInfo_MaxSize_1, 2631). +-define(wxAuiPaneInfo_MaxSize_2, 2632). +-define(wxAuiPaneInfo_MaximizeButton, 2633). +-define(wxAuiPaneInfo_MinSize_1, 2634). +-define(wxAuiPaneInfo_MinSize_2, 2635). +-define(wxAuiPaneInfo_MinimizeButton, 2636). +-define(wxAuiPaneInfo_Movable, 2637). +-define(wxAuiPaneInfo_Name, 2638). +-define(wxAuiPaneInfo_PaneBorder, 2639). +-define(wxAuiPaneInfo_PinButton, 2640). +-define(wxAuiPaneInfo_Position, 2641). +-define(wxAuiPaneInfo_Resizable, 2642). +-define(wxAuiPaneInfo_Right, 2643). +-define(wxAuiPaneInfo_RightDockable, 2644). +-define(wxAuiPaneInfo_Row, 2645). +-define(wxAuiPaneInfo_SafeSet, 2646). +-define(wxAuiPaneInfo_SetFlag, 2647). +-define(wxAuiPaneInfo_Show, 2648). +-define(wxAuiPaneInfo_ToolbarPane, 2649). +-define(wxAuiPaneInfo_Top, 2650). +-define(wxAuiPaneInfo_TopDockable, 2651). +-define(wxAuiPaneInfo_Window, 2652). +-define(wxAuiNotebook_new_0, 2653). +-define(wxAuiNotebook_new_2, 2654). +-define(wxAuiNotebook_AddPage, 2655). +-define(wxAuiNotebook_Create, 2656). +-define(wxAuiNotebook_DeletePage, 2657). +-define(wxAuiNotebook_GetArtProvider, 2658). +-define(wxAuiNotebook_GetPage, 2659). +-define(wxAuiNotebook_GetPageBitmap, 2660). +-define(wxAuiNotebook_GetPageCount, 2661). +-define(wxAuiNotebook_GetPageIndex, 2662). +-define(wxAuiNotebook_GetPageText, 2663). +-define(wxAuiNotebook_GetSelection, 2664). +-define(wxAuiNotebook_InsertPage, 2665). +-define(wxAuiNotebook_RemovePage, 2666). +-define(wxAuiNotebook_SetArtProvider, 2667). +-define(wxAuiNotebook_SetFont, 2668). +-define(wxAuiNotebook_SetPageBitmap, 2669). +-define(wxAuiNotebook_SetPageText, 2670). +-define(wxAuiNotebook_SetSelection, 2671). +-define(wxAuiNotebook_SetTabCtrlHeight, 2672). +-define(wxAuiNotebook_SetUniformBitmapSize, 2673). +-define(wxAuiNotebook_destroy, 2674). +-define(wxMDIParentFrame_new_0, 2675). +-define(wxMDIParentFrame_new_4, 2676). +-define(wxMDIParentFrame_destruct, 2677). +-define(wxMDIParentFrame_ActivateNext, 2678). +-define(wxMDIParentFrame_ActivatePrevious, 2679). +-define(wxMDIParentFrame_ArrangeIcons, 2680). +-define(wxMDIParentFrame_Cascade, 2681). +-define(wxMDIParentFrame_Create, 2682). +-define(wxMDIParentFrame_GetActiveChild, 2683). +-define(wxMDIParentFrame_GetClientWindow, 2684). +-define(wxMDIParentFrame_Tile, 2685). +-define(wxMDIChildFrame_new_0, 2686). +-define(wxMDIChildFrame_new_4, 2687). +-define(wxMDIChildFrame_destruct, 2688). +-define(wxMDIChildFrame_Activate, 2689). +-define(wxMDIChildFrame_Create, 2690). +-define(wxMDIChildFrame_Maximize, 2691). +-define(wxMDIChildFrame_Restore, 2692). +-define(wxMDIClientWindow_new_0, 2693). +-define(wxMDIClientWindow_new_2, 2694). +-define(wxMDIClientWindow_destruct, 2695). +-define(wxMDIClientWindow_CreateClient, 2696). +-define(wxLayoutAlgorithm_new, 2697). +-define(wxLayoutAlgorithm_LayoutFrame, 2698). +-define(wxLayoutAlgorithm_LayoutMDIFrame, 2699). +-define(wxLayoutAlgorithm_LayoutWindow, 2700). +-define(wxLayoutAlgorithm_destroy, 2701). +-define(wxEvent_GetId, 2702). +-define(wxEvent_GetSkipped, 2703). +-define(wxEvent_GetTimestamp, 2704). +-define(wxEvent_IsCommandEvent, 2705). +-define(wxEvent_ResumePropagation, 2706). +-define(wxEvent_ShouldPropagate, 2707). +-define(wxEvent_Skip, 2708). +-define(wxEvent_StopPropagation, 2709). +-define(wxCommandEvent_getClientData, 2710). +-define(wxCommandEvent_GetExtraLong, 2711). +-define(wxCommandEvent_GetInt, 2712). +-define(wxCommandEvent_GetSelection, 2713). +-define(wxCommandEvent_GetString, 2714). +-define(wxCommandEvent_IsChecked, 2715). +-define(wxCommandEvent_IsSelection, 2716). +-define(wxCommandEvent_SetInt, 2717). +-define(wxCommandEvent_SetString, 2718). +-define(wxScrollEvent_GetOrientation, 2719). +-define(wxScrollEvent_GetPosition, 2720). +-define(wxScrollWinEvent_GetOrientation, 2721). +-define(wxScrollWinEvent_GetPosition, 2722). +-define(wxMouseEvent_AltDown, 2723). +-define(wxMouseEvent_Button, 2724). +-define(wxMouseEvent_ButtonDClick, 2725). +-define(wxMouseEvent_ButtonDown, 2726). +-define(wxMouseEvent_ButtonUp, 2727). +-define(wxMouseEvent_CmdDown, 2728). +-define(wxMouseEvent_ControlDown, 2729). +-define(wxMouseEvent_Dragging, 2730). +-define(wxMouseEvent_Entering, 2731). +-define(wxMouseEvent_GetButton, 2732). +-define(wxMouseEvent_GetPosition, 2735). +-define(wxMouseEvent_GetLogicalPosition, 2736). +-define(wxMouseEvent_GetLinesPerAction, 2737). +-define(wxMouseEvent_GetWheelRotation, 2738). +-define(wxMouseEvent_GetWheelDelta, 2739). +-define(wxMouseEvent_GetX, 2740). +-define(wxMouseEvent_GetY, 2741). +-define(wxMouseEvent_IsButton, 2742). +-define(wxMouseEvent_IsPageScroll, 2743). +-define(wxMouseEvent_Leaving, 2744). +-define(wxMouseEvent_LeftDClick, 2745). +-define(wxMouseEvent_LeftDown, 2746). +-define(wxMouseEvent_LeftIsDown, 2747). +-define(wxMouseEvent_LeftUp, 2748). +-define(wxMouseEvent_MetaDown, 2749). +-define(wxMouseEvent_MiddleDClick, 2750). +-define(wxMouseEvent_MiddleDown, 2751). +-define(wxMouseEvent_MiddleIsDown, 2752). +-define(wxMouseEvent_MiddleUp, 2753). +-define(wxMouseEvent_Moving, 2754). +-define(wxMouseEvent_RightDClick, 2755). +-define(wxMouseEvent_RightDown, 2756). +-define(wxMouseEvent_RightIsDown, 2757). +-define(wxMouseEvent_RightUp, 2758). +-define(wxMouseEvent_ShiftDown, 2759). +-define(wxSetCursorEvent_GetCursor, 2760). +-define(wxSetCursorEvent_GetX, 2761). +-define(wxSetCursorEvent_GetY, 2762). +-define(wxSetCursorEvent_HasCursor, 2763). +-define(wxSetCursorEvent_SetCursor, 2764). +-define(wxKeyEvent_AltDown, 2765). +-define(wxKeyEvent_CmdDown, 2766). +-define(wxKeyEvent_ControlDown, 2767). +-define(wxKeyEvent_GetKeyCode, 2768). +-define(wxKeyEvent_GetModifiers, 2769). +-define(wxKeyEvent_GetPosition, 2772). +-define(wxKeyEvent_GetRawKeyCode, 2773). +-define(wxKeyEvent_GetRawKeyFlags, 2774). +-define(wxKeyEvent_GetUnicodeKey, 2775). +-define(wxKeyEvent_GetX, 2776). +-define(wxKeyEvent_GetY, 2777). +-define(wxKeyEvent_HasModifiers, 2778). +-define(wxKeyEvent_MetaDown, 2779). +-define(wxKeyEvent_ShiftDown, 2780). +-define(wxSizeEvent_GetSize, 2781). +-define(wxMoveEvent_GetPosition, 2782). +-define(wxEraseEvent_GetDC, 2783). +-define(wxFocusEvent_GetWindow, 2784). +-define(wxChildFocusEvent_GetWindow, 2785). +-define(wxMenuEvent_GetMenu, 2786). +-define(wxMenuEvent_GetMenuId, 2787). +-define(wxMenuEvent_IsPopup, 2788). +-define(wxCloseEvent_CanVeto, 2789). +-define(wxCloseEvent_GetLoggingOff, 2790). +-define(wxCloseEvent_SetCanVeto, 2791). +-define(wxCloseEvent_SetLoggingOff, 2792). +-define(wxCloseEvent_Veto, 2793). +-define(wxShowEvent_SetShow, 2794). +-define(wxShowEvent_GetShow, 2795). +-define(wxIconizeEvent_Iconized, 2796). +-define(wxJoystickEvent_ButtonDown, 2797). +-define(wxJoystickEvent_ButtonIsDown, 2798). +-define(wxJoystickEvent_ButtonUp, 2799). +-define(wxJoystickEvent_GetButtonChange, 2800). +-define(wxJoystickEvent_GetButtonState, 2801). +-define(wxJoystickEvent_GetJoystick, 2802). +-define(wxJoystickEvent_GetPosition, 2803). +-define(wxJoystickEvent_GetZPosition, 2804). +-define(wxJoystickEvent_IsButton, 2805). +-define(wxJoystickEvent_IsMove, 2806). +-define(wxJoystickEvent_IsZMove, 2807). +-define(wxUpdateUIEvent_CanUpdate, 2808). +-define(wxUpdateUIEvent_Check, 2809). +-define(wxUpdateUIEvent_Enable, 2810). +-define(wxUpdateUIEvent_Show, 2811). +-define(wxUpdateUIEvent_GetChecked, 2812). +-define(wxUpdateUIEvent_GetEnabled, 2813). +-define(wxUpdateUIEvent_GetShown, 2814). +-define(wxUpdateUIEvent_GetSetChecked, 2815). +-define(wxUpdateUIEvent_GetSetEnabled, 2816). +-define(wxUpdateUIEvent_GetSetShown, 2817). +-define(wxUpdateUIEvent_GetSetText, 2818). +-define(wxUpdateUIEvent_GetText, 2819). +-define(wxUpdateUIEvent_GetMode, 2820). +-define(wxUpdateUIEvent_GetUpdateInterval, 2821). +-define(wxUpdateUIEvent_ResetUpdateTime, 2822). +-define(wxUpdateUIEvent_SetMode, 2823). +-define(wxUpdateUIEvent_SetText, 2824). +-define(wxUpdateUIEvent_SetUpdateInterval, 2825). +-define(wxMouseCaptureChangedEvent_GetCapturedWindow, 2826). +-define(wxPaletteChangedEvent_SetChangedWindow, 2827). +-define(wxPaletteChangedEvent_GetChangedWindow, 2828). +-define(wxQueryNewPaletteEvent_SetPaletteRealized, 2829). +-define(wxQueryNewPaletteEvent_GetPaletteRealized, 2830). +-define(wxNavigationKeyEvent_GetDirection, 2831). +-define(wxNavigationKeyEvent_SetDirection, 2832). +-define(wxNavigationKeyEvent_IsWindowChange, 2833). +-define(wxNavigationKeyEvent_SetWindowChange, 2834). +-define(wxNavigationKeyEvent_IsFromTab, 2835). +-define(wxNavigationKeyEvent_SetFromTab, 2836). +-define(wxNavigationKeyEvent_GetCurrentFocus, 2837). +-define(wxNavigationKeyEvent_SetCurrentFocus, 2838). +-define(wxHelpEvent_GetOrigin, 2839). +-define(wxHelpEvent_GetPosition, 2840). +-define(wxHelpEvent_SetOrigin, 2841). +-define(wxHelpEvent_SetPosition, 2842). +-define(wxContextMenuEvent_GetPosition, 2843). +-define(wxContextMenuEvent_SetPosition, 2844). +-define(wxIdleEvent_CanSend, 2845). +-define(wxIdleEvent_GetMode, 2846). +-define(wxIdleEvent_RequestMore, 2847). +-define(wxIdleEvent_MoreRequested, 2848). +-define(wxIdleEvent_SetMode, 2849). +-define(wxGridEvent_AltDown, 2850). +-define(wxGridEvent_ControlDown, 2851). +-define(wxGridEvent_GetCol, 2852). +-define(wxGridEvent_GetPosition, 2853). +-define(wxGridEvent_GetRow, 2854). +-define(wxGridEvent_MetaDown, 2855). +-define(wxGridEvent_Selecting, 2856). +-define(wxGridEvent_ShiftDown, 2857). +-define(wxNotifyEvent_Allow, 2858). +-define(wxNotifyEvent_IsAllowed, 2859). +-define(wxNotifyEvent_Veto, 2860). +-define(wxSashEvent_GetEdge, 2861). +-define(wxSashEvent_GetDragRect, 2862). +-define(wxSashEvent_GetDragStatus, 2863). +-define(wxListEvent_GetCacheFrom, 2864). +-define(wxListEvent_GetCacheTo, 2865). +-define(wxListEvent_GetKeyCode, 2866). +-define(wxListEvent_GetIndex, 2867). +-define(wxListEvent_GetColumn, 2868). +-define(wxListEvent_GetPoint, 2869). +-define(wxListEvent_GetLabel, 2870). +-define(wxListEvent_GetText, 2871). +-define(wxListEvent_GetImage, 2872). +-define(wxListEvent_GetData, 2873). +-define(wxListEvent_GetMask, 2874). +-define(wxListEvent_GetItem, 2875). +-define(wxListEvent_IsEditCancelled, 2876). +-define(wxDateEvent_GetDate, 2877). +-define(wxCalendarEvent_GetWeekDay, 2878). +-define(wxFileDirPickerEvent_GetPath, 2879). +-define(wxColourPickerEvent_GetColour, 2880). +-define(wxFontPickerEvent_GetFont, 2881). +-define(wxStyledTextEvent_GetPosition, 2882). +-define(wxStyledTextEvent_GetKey, 2883). +-define(wxStyledTextEvent_GetModifiers, 2884). +-define(wxStyledTextEvent_GetModificationType, 2885). +-define(wxStyledTextEvent_GetText, 2886). +-define(wxStyledTextEvent_GetLength, 2887). +-define(wxStyledTextEvent_GetLinesAdded, 2888). +-define(wxStyledTextEvent_GetLine, 2889). +-define(wxStyledTextEvent_GetFoldLevelNow, 2890). +-define(wxStyledTextEvent_GetFoldLevelPrev, 2891). +-define(wxStyledTextEvent_GetMargin, 2892). +-define(wxStyledTextEvent_GetMessage, 2893). +-define(wxStyledTextEvent_GetWParam, 2894). +-define(wxStyledTextEvent_GetLParam, 2895). +-define(wxStyledTextEvent_GetListType, 2896). +-define(wxStyledTextEvent_GetX, 2897). +-define(wxStyledTextEvent_GetY, 2898). +-define(wxStyledTextEvent_GetDragText, 2899). +-define(wxStyledTextEvent_GetDragAllowMove, 2900). +-define(wxStyledTextEvent_GetDragResult, 2901). +-define(wxStyledTextEvent_GetShift, 2902). +-define(wxStyledTextEvent_GetControl, 2903). +-define(wxStyledTextEvent_GetAlt, 2904). +-define(utils_wxGetKeyState, 2905). +-define(utils_wxGetMousePosition, 2906). +-define(utils_wxGetMouseState, 2907). +-define(utils_wxSetDetectableAutoRepeat, 2908). +-define(utils_wxBell, 2909). +-define(utils_wxFindMenuItemId, 2910). +-define(utils_wxGenericFindWindowAtPoint, 2911). +-define(utils_wxFindWindowAtPoint, 2912). +-define(utils_wxBeginBusyCursor, 2913). +-define(utils_wxEndBusyCursor, 2914). +-define(utils_wxIsBusy, 2915). +-define(utils_wxShutdown, 2916). +-define(utils_wxShell, 2917). +-define(utils_wxLaunchDefaultBrowser, 2918). +-define(utils_wxGetEmailAddress, 2919). +-define(utils_wxGetUserId, 2920). +-define(utils_wxGetHomeDir, 2921). +-define(utils_wxNewId, 2922). +-define(utils_wxRegisterId, 2923). +-define(utils_wxGetCurrentId, 2924). +-define(utils_wxGetOsDescription, 2925). +-define(utils_wxIsPlatformLittleEndian, 2926). +-define(utils_wxIsPlatform64Bit, 2927). +-define(wxPrintout_new, 2928). +-define(wxPrintout_destruct, 2929). +-define(wxPrintout_GetDC, 2930). +-define(wxPrintout_GetPageSizeMM, 2931). +-define(wxPrintout_GetPageSizePixels, 2932). +-define(wxPrintout_GetPaperRectPixels, 2933). +-define(wxPrintout_GetPPIPrinter, 2934). +-define(wxPrintout_GetPPIScreen, 2935). +-define(wxPrintout_GetTitle, 2936). +-define(wxPrintout_IsPreview, 2937). +-define(wxPrintout_FitThisSizeToPaper, 2938). +-define(wxPrintout_FitThisSizeToPage, 2939). +-define(wxPrintout_FitThisSizeToPageMargins, 2940). +-define(wxPrintout_MapScreenSizeToPaper, 2941). +-define(wxPrintout_MapScreenSizeToPage, 2942). +-define(wxPrintout_MapScreenSizeToPageMargins, 2943). +-define(wxPrintout_MapScreenSizeToDevice, 2944). +-define(wxPrintout_GetLogicalPaperRect, 2945). +-define(wxPrintout_GetLogicalPageRect, 2946). +-define(wxPrintout_GetLogicalPageMarginsRect, 2947). +-define(wxPrintout_SetLogicalOrigin, 2948). +-define(wxPrintout_OffsetLogicalOrigin, 2949). +-define(wxStyledTextCtrl_new_2, 2950). +-define(wxStyledTextCtrl_new_0, 2951). +-define(wxStyledTextCtrl_destruct, 2952). +-define(wxStyledTextCtrl_Create, 2953). +-define(wxStyledTextCtrl_AddText, 2954). +-define(wxStyledTextCtrl_AddStyledText, 2955). +-define(wxStyledTextCtrl_InsertText, 2956). +-define(wxStyledTextCtrl_ClearAll, 2957). +-define(wxStyledTextCtrl_ClearDocumentStyle, 2958). +-define(wxStyledTextCtrl_GetLength, 2959). +-define(wxStyledTextCtrl_GetCharAt, 2960). +-define(wxStyledTextCtrl_GetCurrentPos, 2961). +-define(wxStyledTextCtrl_GetAnchor, 2962). +-define(wxStyledTextCtrl_GetStyleAt, 2963). +-define(wxStyledTextCtrl_Redo, 2964). +-define(wxStyledTextCtrl_SetUndoCollection, 2965). +-define(wxStyledTextCtrl_SelectAll, 2966). +-define(wxStyledTextCtrl_SetSavePoint, 2967). +-define(wxStyledTextCtrl_GetStyledText, 2968). +-define(wxStyledTextCtrl_CanRedo, 2969). +-define(wxStyledTextCtrl_MarkerLineFromHandle, 2970). +-define(wxStyledTextCtrl_MarkerDeleteHandle, 2971). +-define(wxStyledTextCtrl_GetUndoCollection, 2972). +-define(wxStyledTextCtrl_GetViewWhiteSpace, 2973). +-define(wxStyledTextCtrl_SetViewWhiteSpace, 2974). +-define(wxStyledTextCtrl_PositionFromPoint, 2975). +-define(wxStyledTextCtrl_PositionFromPointClose, 2976). +-define(wxStyledTextCtrl_GotoLine, 2977). +-define(wxStyledTextCtrl_GotoPos, 2978). +-define(wxStyledTextCtrl_SetAnchor, 2979). +-define(wxStyledTextCtrl_GetCurLine, 2980). +-define(wxStyledTextCtrl_GetEndStyled, 2981). +-define(wxStyledTextCtrl_ConvertEOLs, 2982). +-define(wxStyledTextCtrl_GetEOLMode, 2983). +-define(wxStyledTextCtrl_SetEOLMode, 2984). +-define(wxStyledTextCtrl_StartStyling, 2985). +-define(wxStyledTextCtrl_SetStyling, 2986). +-define(wxStyledTextCtrl_GetBufferedDraw, 2987). +-define(wxStyledTextCtrl_SetBufferedDraw, 2988). +-define(wxStyledTextCtrl_SetTabWidth, 2989). +-define(wxStyledTextCtrl_GetTabWidth, 2990). +-define(wxStyledTextCtrl_SetCodePage, 2991). +-define(wxStyledTextCtrl_MarkerDefine, 2992). +-define(wxStyledTextCtrl_MarkerSetForeground, 2993). +-define(wxStyledTextCtrl_MarkerSetBackground, 2994). +-define(wxStyledTextCtrl_MarkerAdd, 2995). +-define(wxStyledTextCtrl_MarkerDelete, 2996). +-define(wxStyledTextCtrl_MarkerDeleteAll, 2997). +-define(wxStyledTextCtrl_MarkerGet, 2998). +-define(wxStyledTextCtrl_MarkerNext, 2999). +-define(wxStyledTextCtrl_MarkerPrevious, 3000). +-define(wxStyledTextCtrl_MarkerDefineBitmap, 3001). +-define(wxStyledTextCtrl_MarkerAddSet, 3002). +-define(wxStyledTextCtrl_MarkerSetAlpha, 3003). +-define(wxStyledTextCtrl_SetMarginType, 3004). +-define(wxStyledTextCtrl_GetMarginType, 3005). +-define(wxStyledTextCtrl_SetMarginWidth, 3006). +-define(wxStyledTextCtrl_GetMarginWidth, 3007). +-define(wxStyledTextCtrl_SetMarginMask, 3008). +-define(wxStyledTextCtrl_GetMarginMask, 3009). +-define(wxStyledTextCtrl_SetMarginSensitive, 3010). +-define(wxStyledTextCtrl_GetMarginSensitive, 3011). +-define(wxStyledTextCtrl_StyleClearAll, 3012). +-define(wxStyledTextCtrl_StyleSetForeground, 3013). +-define(wxStyledTextCtrl_StyleSetBackground, 3014). +-define(wxStyledTextCtrl_StyleSetBold, 3015). +-define(wxStyledTextCtrl_StyleSetItalic, 3016). +-define(wxStyledTextCtrl_StyleSetSize, 3017). +-define(wxStyledTextCtrl_StyleSetFaceName, 3018). +-define(wxStyledTextCtrl_StyleSetEOLFilled, 3019). +-define(wxStyledTextCtrl_StyleResetDefault, 3020). +-define(wxStyledTextCtrl_StyleSetUnderline, 3021). +-define(wxStyledTextCtrl_StyleSetCase, 3022). +-define(wxStyledTextCtrl_StyleSetHotSpot, 3023). +-define(wxStyledTextCtrl_SetSelForeground, 3024). +-define(wxStyledTextCtrl_SetSelBackground, 3025). +-define(wxStyledTextCtrl_GetSelAlpha, 3026). +-define(wxStyledTextCtrl_SetSelAlpha, 3027). +-define(wxStyledTextCtrl_SetCaretForeground, 3028). +-define(wxStyledTextCtrl_CmdKeyAssign, 3029). +-define(wxStyledTextCtrl_CmdKeyClear, 3030). +-define(wxStyledTextCtrl_CmdKeyClearAll, 3031). +-define(wxStyledTextCtrl_SetStyleBytes, 3032). +-define(wxStyledTextCtrl_StyleSetVisible, 3033). +-define(wxStyledTextCtrl_GetCaretPeriod, 3034). +-define(wxStyledTextCtrl_SetCaretPeriod, 3035). +-define(wxStyledTextCtrl_SetWordChars, 3036). +-define(wxStyledTextCtrl_BeginUndoAction, 3037). +-define(wxStyledTextCtrl_EndUndoAction, 3038). +-define(wxStyledTextCtrl_IndicatorSetStyle, 3039). +-define(wxStyledTextCtrl_IndicatorGetStyle, 3040). +-define(wxStyledTextCtrl_IndicatorSetForeground, 3041). +-define(wxStyledTextCtrl_IndicatorGetForeground, 3042). +-define(wxStyledTextCtrl_SetWhitespaceForeground, 3043). +-define(wxStyledTextCtrl_SetWhitespaceBackground, 3044). +-define(wxStyledTextCtrl_GetStyleBits, 3045). +-define(wxStyledTextCtrl_SetLineState, 3046). +-define(wxStyledTextCtrl_GetLineState, 3047). +-define(wxStyledTextCtrl_GetMaxLineState, 3048). +-define(wxStyledTextCtrl_GetCaretLineVisible, 3049). +-define(wxStyledTextCtrl_SetCaretLineVisible, 3050). +-define(wxStyledTextCtrl_GetCaretLineBackground, 3051). +-define(wxStyledTextCtrl_SetCaretLineBackground, 3052). +-define(wxStyledTextCtrl_AutoCompShow, 3053). +-define(wxStyledTextCtrl_AutoCompCancel, 3054). +-define(wxStyledTextCtrl_AutoCompActive, 3055). +-define(wxStyledTextCtrl_AutoCompPosStart, 3056). +-define(wxStyledTextCtrl_AutoCompComplete, 3057). +-define(wxStyledTextCtrl_AutoCompStops, 3058). +-define(wxStyledTextCtrl_AutoCompSetSeparator, 3059). +-define(wxStyledTextCtrl_AutoCompGetSeparator, 3060). +-define(wxStyledTextCtrl_AutoCompSelect, 3061). +-define(wxStyledTextCtrl_AutoCompSetCancelAtStart, 3062). +-define(wxStyledTextCtrl_AutoCompGetCancelAtStart, 3063). +-define(wxStyledTextCtrl_AutoCompSetFillUps, 3064). +-define(wxStyledTextCtrl_AutoCompSetChooseSingle, 3065). +-define(wxStyledTextCtrl_AutoCompGetChooseSingle, 3066). +-define(wxStyledTextCtrl_AutoCompSetIgnoreCase, 3067). +-define(wxStyledTextCtrl_AutoCompGetIgnoreCase, 3068). +-define(wxStyledTextCtrl_UserListShow, 3069). +-define(wxStyledTextCtrl_AutoCompSetAutoHide, 3070). +-define(wxStyledTextCtrl_AutoCompGetAutoHide, 3071). +-define(wxStyledTextCtrl_AutoCompSetDropRestOfWord, 3072). +-define(wxStyledTextCtrl_AutoCompGetDropRestOfWord, 3073). +-define(wxStyledTextCtrl_RegisterImage, 3074). +-define(wxStyledTextCtrl_ClearRegisteredImages, 3075). +-define(wxStyledTextCtrl_AutoCompGetTypeSeparator, 3076). +-define(wxStyledTextCtrl_AutoCompSetTypeSeparator, 3077). +-define(wxStyledTextCtrl_AutoCompSetMaxWidth, 3078). +-define(wxStyledTextCtrl_AutoCompGetMaxWidth, 3079). +-define(wxStyledTextCtrl_AutoCompSetMaxHeight, 3080). +-define(wxStyledTextCtrl_AutoCompGetMaxHeight, 3081). +-define(wxStyledTextCtrl_SetIndent, 3082). +-define(wxStyledTextCtrl_GetIndent, 3083). +-define(wxStyledTextCtrl_SetUseTabs, 3084). +-define(wxStyledTextCtrl_GetUseTabs, 3085). +-define(wxStyledTextCtrl_SetLineIndentation, 3086). +-define(wxStyledTextCtrl_GetLineIndentation, 3087). +-define(wxStyledTextCtrl_GetLineIndentPosition, 3088). +-define(wxStyledTextCtrl_GetColumn, 3089). +-define(wxStyledTextCtrl_SetUseHorizontalScrollBar, 3090). +-define(wxStyledTextCtrl_GetUseHorizontalScrollBar, 3091). +-define(wxStyledTextCtrl_SetIndentationGuides, 3092). +-define(wxStyledTextCtrl_GetIndentationGuides, 3093). +-define(wxStyledTextCtrl_SetHighlightGuide, 3094). +-define(wxStyledTextCtrl_GetHighlightGuide, 3095). +-define(wxStyledTextCtrl_GetLineEndPosition, 3096). +-define(wxStyledTextCtrl_GetCodePage, 3097). +-define(wxStyledTextCtrl_GetCaretForeground, 3098). +-define(wxStyledTextCtrl_GetReadOnly, 3099). +-define(wxStyledTextCtrl_SetCurrentPos, 3100). +-define(wxStyledTextCtrl_SetSelectionStart, 3101). +-define(wxStyledTextCtrl_GetSelectionStart, 3102). +-define(wxStyledTextCtrl_SetSelectionEnd, 3103). +-define(wxStyledTextCtrl_GetSelectionEnd, 3104). +-define(wxStyledTextCtrl_SetPrintMagnification, 3105). +-define(wxStyledTextCtrl_GetPrintMagnification, 3106). +-define(wxStyledTextCtrl_SetPrintColourMode, 3107). +-define(wxStyledTextCtrl_GetPrintColourMode, 3108). +-define(wxStyledTextCtrl_FindText, 3109). +-define(wxStyledTextCtrl_FormatRange, 3110). +-define(wxStyledTextCtrl_GetFirstVisibleLine, 3111). +-define(wxStyledTextCtrl_GetLine, 3112). +-define(wxStyledTextCtrl_GetLineCount, 3113). +-define(wxStyledTextCtrl_SetMarginLeft, 3114). +-define(wxStyledTextCtrl_GetMarginLeft, 3115). +-define(wxStyledTextCtrl_SetMarginRight, 3116). +-define(wxStyledTextCtrl_GetMarginRight, 3117). +-define(wxStyledTextCtrl_GetModify, 3118). +-define(wxStyledTextCtrl_SetSelection, 3119). +-define(wxStyledTextCtrl_GetSelectedText, 3120). +-define(wxStyledTextCtrl_GetTextRange, 3121). +-define(wxStyledTextCtrl_HideSelection, 3122). +-define(wxStyledTextCtrl_LineFromPosition, 3123). +-define(wxStyledTextCtrl_PositionFromLine, 3124). +-define(wxStyledTextCtrl_LineScroll, 3125). +-define(wxStyledTextCtrl_EnsureCaretVisible, 3126). +-define(wxStyledTextCtrl_ReplaceSelection, 3127). +-define(wxStyledTextCtrl_SetReadOnly, 3128). +-define(wxStyledTextCtrl_CanPaste, 3129). +-define(wxStyledTextCtrl_CanUndo, 3130). +-define(wxStyledTextCtrl_EmptyUndoBuffer, 3131). +-define(wxStyledTextCtrl_Undo, 3132). +-define(wxStyledTextCtrl_Cut, 3133). +-define(wxStyledTextCtrl_Copy, 3134). +-define(wxStyledTextCtrl_Paste, 3135). +-define(wxStyledTextCtrl_Clear, 3136). +-define(wxStyledTextCtrl_SetText, 3137). +-define(wxStyledTextCtrl_GetText, 3138). +-define(wxStyledTextCtrl_GetTextLength, 3139). +-define(wxStyledTextCtrl_GetOvertype, 3140). +-define(wxStyledTextCtrl_SetCaretWidth, 3141). +-define(wxStyledTextCtrl_GetCaretWidth, 3142). +-define(wxStyledTextCtrl_SetTargetStart, 3143). +-define(wxStyledTextCtrl_GetTargetStart, 3144). +-define(wxStyledTextCtrl_SetTargetEnd, 3145). +-define(wxStyledTextCtrl_GetTargetEnd, 3146). +-define(wxStyledTextCtrl_ReplaceTarget, 3147). +-define(wxStyledTextCtrl_SearchInTarget, 3148). +-define(wxStyledTextCtrl_SetSearchFlags, 3149). +-define(wxStyledTextCtrl_GetSearchFlags, 3150). +-define(wxStyledTextCtrl_CallTipShow, 3151). +-define(wxStyledTextCtrl_CallTipCancel, 3152). +-define(wxStyledTextCtrl_CallTipActive, 3153). +-define(wxStyledTextCtrl_CallTipPosAtStart, 3154). +-define(wxStyledTextCtrl_CallTipSetHighlight, 3155). +-define(wxStyledTextCtrl_CallTipSetBackground, 3156). +-define(wxStyledTextCtrl_CallTipSetForeground, 3157). +-define(wxStyledTextCtrl_CallTipSetForegroundHighlight, 3158). +-define(wxStyledTextCtrl_CallTipUseStyle, 3159). +-define(wxStyledTextCtrl_VisibleFromDocLine, 3160). +-define(wxStyledTextCtrl_DocLineFromVisible, 3161). +-define(wxStyledTextCtrl_WrapCount, 3162). +-define(wxStyledTextCtrl_SetFoldLevel, 3163). +-define(wxStyledTextCtrl_GetFoldLevel, 3164). +-define(wxStyledTextCtrl_GetLastChild, 3165). +-define(wxStyledTextCtrl_GetFoldParent, 3166). +-define(wxStyledTextCtrl_ShowLines, 3167). +-define(wxStyledTextCtrl_HideLines, 3168). +-define(wxStyledTextCtrl_GetLineVisible, 3169). +-define(wxStyledTextCtrl_SetFoldExpanded, 3170). +-define(wxStyledTextCtrl_GetFoldExpanded, 3171). +-define(wxStyledTextCtrl_ToggleFold, 3172). +-define(wxStyledTextCtrl_EnsureVisible, 3173). +-define(wxStyledTextCtrl_SetFoldFlags, 3174). +-define(wxStyledTextCtrl_EnsureVisibleEnforcePolicy, 3175). +-define(wxStyledTextCtrl_SetTabIndents, 3176). +-define(wxStyledTextCtrl_GetTabIndents, 3177). +-define(wxStyledTextCtrl_SetBackSpaceUnIndents, 3178). +-define(wxStyledTextCtrl_GetBackSpaceUnIndents, 3179). +-define(wxStyledTextCtrl_SetMouseDwellTime, 3180). +-define(wxStyledTextCtrl_GetMouseDwellTime, 3181). +-define(wxStyledTextCtrl_WordStartPosition, 3182). +-define(wxStyledTextCtrl_WordEndPosition, 3183). +-define(wxStyledTextCtrl_SetWrapMode, 3184). +-define(wxStyledTextCtrl_GetWrapMode, 3185). +-define(wxStyledTextCtrl_SetWrapVisualFlags, 3186). +-define(wxStyledTextCtrl_GetWrapVisualFlags, 3187). +-define(wxStyledTextCtrl_SetWrapVisualFlagsLocation, 3188). +-define(wxStyledTextCtrl_GetWrapVisualFlagsLocation, 3189). +-define(wxStyledTextCtrl_SetWrapStartIndent, 3190). +-define(wxStyledTextCtrl_GetWrapStartIndent, 3191). +-define(wxStyledTextCtrl_SetLayoutCache, 3192). +-define(wxStyledTextCtrl_GetLayoutCache, 3193). +-define(wxStyledTextCtrl_SetScrollWidth, 3194). +-define(wxStyledTextCtrl_GetScrollWidth, 3195). +-define(wxStyledTextCtrl_TextWidth, 3196). +-define(wxStyledTextCtrl_GetEndAtLastLine, 3197). +-define(wxStyledTextCtrl_TextHeight, 3198). +-define(wxStyledTextCtrl_SetUseVerticalScrollBar, 3199). +-define(wxStyledTextCtrl_GetUseVerticalScrollBar, 3200). +-define(wxStyledTextCtrl_AppendText, 3201). +-define(wxStyledTextCtrl_GetTwoPhaseDraw, 3202). +-define(wxStyledTextCtrl_SetTwoPhaseDraw, 3203). +-define(wxStyledTextCtrl_TargetFromSelection, 3204). +-define(wxStyledTextCtrl_LinesJoin, 3205). +-define(wxStyledTextCtrl_LinesSplit, 3206). +-define(wxStyledTextCtrl_SetFoldMarginColour, 3207). +-define(wxStyledTextCtrl_SetFoldMarginHiColour, 3208). +-define(wxStyledTextCtrl_LineDown, 3209). +-define(wxStyledTextCtrl_LineDownExtend, 3210). +-define(wxStyledTextCtrl_LineUp, 3211). +-define(wxStyledTextCtrl_LineUpExtend, 3212). +-define(wxStyledTextCtrl_CharLeft, 3213). +-define(wxStyledTextCtrl_CharLeftExtend, 3214). +-define(wxStyledTextCtrl_CharRight, 3215). +-define(wxStyledTextCtrl_CharRightExtend, 3216). +-define(wxStyledTextCtrl_WordLeft, 3217). +-define(wxStyledTextCtrl_WordLeftExtend, 3218). +-define(wxStyledTextCtrl_WordRight, 3219). +-define(wxStyledTextCtrl_WordRightExtend, 3220). +-define(wxStyledTextCtrl_Home, 3221). +-define(wxStyledTextCtrl_HomeExtend, 3222). +-define(wxStyledTextCtrl_LineEnd, 3223). +-define(wxStyledTextCtrl_LineEndExtend, 3224). +-define(wxStyledTextCtrl_DocumentStart, 3225). +-define(wxStyledTextCtrl_DocumentStartExtend, 3226). +-define(wxStyledTextCtrl_DocumentEnd, 3227). +-define(wxStyledTextCtrl_DocumentEndExtend, 3228). +-define(wxStyledTextCtrl_PageUp, 3229). +-define(wxStyledTextCtrl_PageUpExtend, 3230). +-define(wxStyledTextCtrl_PageDown, 3231). +-define(wxStyledTextCtrl_PageDownExtend, 3232). +-define(wxStyledTextCtrl_EditToggleOvertype, 3233). +-define(wxStyledTextCtrl_Cancel, 3234). +-define(wxStyledTextCtrl_DeleteBack, 3235). +-define(wxStyledTextCtrl_Tab, 3236). +-define(wxStyledTextCtrl_BackTab, 3237). +-define(wxStyledTextCtrl_NewLine, 3238). +-define(wxStyledTextCtrl_FormFeed, 3239). +-define(wxStyledTextCtrl_VCHome, 3240). +-define(wxStyledTextCtrl_VCHomeExtend, 3241). +-define(wxStyledTextCtrl_ZoomIn, 3242). +-define(wxStyledTextCtrl_ZoomOut, 3243). +-define(wxStyledTextCtrl_DelWordLeft, 3244). +-define(wxStyledTextCtrl_DelWordRight, 3245). +-define(wxStyledTextCtrl_LineCut, 3246). +-define(wxStyledTextCtrl_LineDelete, 3247). +-define(wxStyledTextCtrl_LineTranspose, 3248). +-define(wxStyledTextCtrl_LineDuplicate, 3249). +-define(wxStyledTextCtrl_LowerCase, 3250). +-define(wxStyledTextCtrl_UpperCase, 3251). +-define(wxStyledTextCtrl_LineScrollDown, 3252). +-define(wxStyledTextCtrl_LineScrollUp, 3253). +-define(wxStyledTextCtrl_DeleteBackNotLine, 3254). +-define(wxStyledTextCtrl_HomeDisplay, 3255). +-define(wxStyledTextCtrl_HomeDisplayExtend, 3256). +-define(wxStyledTextCtrl_LineEndDisplay, 3257). +-define(wxStyledTextCtrl_LineEndDisplayExtend, 3258). +-define(wxStyledTextCtrl_HomeWrapExtend, 3259). +-define(wxStyledTextCtrl_LineEndWrap, 3260). +-define(wxStyledTextCtrl_LineEndWrapExtend, 3261). +-define(wxStyledTextCtrl_VCHomeWrap, 3262). +-define(wxStyledTextCtrl_VCHomeWrapExtend, 3263). +-define(wxStyledTextCtrl_LineCopy, 3264). +-define(wxStyledTextCtrl_MoveCaretInsideView, 3265). +-define(wxStyledTextCtrl_LineLength, 3266). +-define(wxStyledTextCtrl_BraceHighlight, 3267). +-define(wxStyledTextCtrl_BraceBadLight, 3268). +-define(wxStyledTextCtrl_BraceMatch, 3269). +-define(wxStyledTextCtrl_GetViewEOL, 3270). +-define(wxStyledTextCtrl_SetViewEOL, 3271). +-define(wxStyledTextCtrl_SetModEventMask, 3272). +-define(wxStyledTextCtrl_GetEdgeColumn, 3273). +-define(wxStyledTextCtrl_SetEdgeColumn, 3274). +-define(wxStyledTextCtrl_SetEdgeMode, 3275). +-define(wxStyledTextCtrl_GetEdgeMode, 3276). +-define(wxStyledTextCtrl_GetEdgeColour, 3277). +-define(wxStyledTextCtrl_SetEdgeColour, 3278). +-define(wxStyledTextCtrl_SearchAnchor, 3279). +-define(wxStyledTextCtrl_SearchNext, 3280). +-define(wxStyledTextCtrl_SearchPrev, 3281). +-define(wxStyledTextCtrl_LinesOnScreen, 3282). +-define(wxStyledTextCtrl_UsePopUp, 3283). +-define(wxStyledTextCtrl_SelectionIsRectangle, 3284). +-define(wxStyledTextCtrl_SetZoom, 3285). +-define(wxStyledTextCtrl_GetZoom, 3286). +-define(wxStyledTextCtrl_GetModEventMask, 3287). +-define(wxStyledTextCtrl_SetSTCFocus, 3288). +-define(wxStyledTextCtrl_GetSTCFocus, 3289). +-define(wxStyledTextCtrl_SetStatus, 3290). +-define(wxStyledTextCtrl_GetStatus, 3291). +-define(wxStyledTextCtrl_SetMouseDownCaptures, 3292). +-define(wxStyledTextCtrl_GetMouseDownCaptures, 3293). +-define(wxStyledTextCtrl_SetSTCCursor, 3294). +-define(wxStyledTextCtrl_GetSTCCursor, 3295). +-define(wxStyledTextCtrl_SetControlCharSymbol, 3296). +-define(wxStyledTextCtrl_GetControlCharSymbol, 3297). +-define(wxStyledTextCtrl_WordPartLeft, 3298). +-define(wxStyledTextCtrl_WordPartLeftExtend, 3299). +-define(wxStyledTextCtrl_WordPartRight, 3300). +-define(wxStyledTextCtrl_WordPartRightExtend, 3301). +-define(wxStyledTextCtrl_SetVisiblePolicy, 3302). +-define(wxStyledTextCtrl_DelLineLeft, 3303). +-define(wxStyledTextCtrl_DelLineRight, 3304). +-define(wxStyledTextCtrl_GetXOffset, 3305). +-define(wxStyledTextCtrl_ChooseCaretX, 3306). +-define(wxStyledTextCtrl_SetXCaretPolicy, 3307). +-define(wxStyledTextCtrl_SetYCaretPolicy, 3308). +-define(wxStyledTextCtrl_GetPrintWrapMode, 3309). +-define(wxStyledTextCtrl_SetHotspotActiveForeground, 3310). +-define(wxStyledTextCtrl_SetHotspotActiveBackground, 3311). +-define(wxStyledTextCtrl_SetHotspotActiveUnderline, 3312). +-define(wxStyledTextCtrl_SetHotspotSingleLine, 3313). +-define(wxStyledTextCtrl_ParaDownExtend, 3314). +-define(wxStyledTextCtrl_ParaUp, 3315). +-define(wxStyledTextCtrl_ParaUpExtend, 3316). +-define(wxStyledTextCtrl_PositionBefore, 3317). +-define(wxStyledTextCtrl_PositionAfter, 3318). +-define(wxStyledTextCtrl_CopyRange, 3319). +-define(wxStyledTextCtrl_CopyText, 3320). +-define(wxStyledTextCtrl_SetSelectionMode, 3321). +-define(wxStyledTextCtrl_GetSelectionMode, 3322). +-define(wxStyledTextCtrl_LineDownRectExtend, 3323). +-define(wxStyledTextCtrl_LineUpRectExtend, 3324). +-define(wxStyledTextCtrl_CharLeftRectExtend, 3325). +-define(wxStyledTextCtrl_CharRightRectExtend, 3326). +-define(wxStyledTextCtrl_HomeRectExtend, 3327). +-define(wxStyledTextCtrl_VCHomeRectExtend, 3328). +-define(wxStyledTextCtrl_LineEndRectExtend, 3329). +-define(wxStyledTextCtrl_PageUpRectExtend, 3330). +-define(wxStyledTextCtrl_PageDownRectExtend, 3331). +-define(wxStyledTextCtrl_StutteredPageUp, 3332). +-define(wxStyledTextCtrl_StutteredPageUpExtend, 3333). +-define(wxStyledTextCtrl_StutteredPageDown, 3334). +-define(wxStyledTextCtrl_StutteredPageDownExtend, 3335). +-define(wxStyledTextCtrl_WordLeftEnd, 3336). +-define(wxStyledTextCtrl_WordLeftEndExtend, 3337). +-define(wxStyledTextCtrl_WordRightEnd, 3338). +-define(wxStyledTextCtrl_WordRightEndExtend, 3339). +-define(wxStyledTextCtrl_SetWhitespaceChars, 3340). +-define(wxStyledTextCtrl_SetCharsDefault, 3341). +-define(wxStyledTextCtrl_AutoCompGetCurrent, 3342). +-define(wxStyledTextCtrl_Allocate, 3343). +-define(wxStyledTextCtrl_FindColumn, 3344). +-define(wxStyledTextCtrl_GetCaretSticky, 3345). +-define(wxStyledTextCtrl_SetCaretSticky, 3346). +-define(wxStyledTextCtrl_ToggleCaretSticky, 3347). +-define(wxStyledTextCtrl_SetPasteConvertEndings, 3348). +-define(wxStyledTextCtrl_GetPasteConvertEndings, 3349). +-define(wxStyledTextCtrl_SelectionDuplicate, 3350). +-define(wxStyledTextCtrl_SetCaretLineBackAlpha, 3351). +-define(wxStyledTextCtrl_GetCaretLineBackAlpha, 3352). +-define(wxStyledTextCtrl_StartRecord, 3353). +-define(wxStyledTextCtrl_StopRecord, 3354). +-define(wxStyledTextCtrl_SetLexer, 3355). +-define(wxStyledTextCtrl_GetLexer, 3356). +-define(wxStyledTextCtrl_Colourise, 3357). +-define(wxStyledTextCtrl_SetProperty, 3358). +-define(wxStyledTextCtrl_SetKeyWords, 3359). +-define(wxStyledTextCtrl_SetLexerLanguage, 3360). +-define(wxStyledTextCtrl_GetProperty, 3361). +-define(wxStyledTextCtrl_GetStyleBitsNeeded, 3362). +-define(wxStyledTextCtrl_GetCurrentLine, 3363). +-define(wxStyledTextCtrl_StyleSetSpec, 3364). +-define(wxStyledTextCtrl_StyleSetFont, 3365). +-define(wxStyledTextCtrl_StyleSetFontAttr, 3366). +-define(wxStyledTextCtrl_StyleSetCharacterSet, 3367). +-define(wxStyledTextCtrl_StyleSetFontEncoding, 3368). +-define(wxStyledTextCtrl_CmdKeyExecute, 3369). +-define(wxStyledTextCtrl_SetMargins, 3370). +-define(wxStyledTextCtrl_GetSelection, 3371). +-define(wxStyledTextCtrl_PointFromPosition, 3372). +-define(wxStyledTextCtrl_ScrollToLine, 3373). +-define(wxStyledTextCtrl_ScrollToColumn, 3374). +-define(wxStyledTextCtrl_SetVScrollBar, 3375). +-define(wxStyledTextCtrl_SetHScrollBar, 3376). +-define(wxStyledTextCtrl_GetLastKeydownProcessed, 3377). +-define(wxStyledTextCtrl_SetLastKeydownProcessed, 3378). +-define(wxStyledTextCtrl_SaveFile, 3379). +-define(wxStyledTextCtrl_LoadFile, 3380). +-define(wxStyledTextCtrl_DoDragOver, 3381). +-define(wxStyledTextCtrl_DoDropText, 3382). +-define(wxStyledTextCtrl_GetUseAntiAliasing, 3383). +-define(wxStyledTextCtrl_AddTextRaw, 3384). +-define(wxStyledTextCtrl_InsertTextRaw, 3385). +-define(wxStyledTextCtrl_GetCurLineRaw, 3386). +-define(wxStyledTextCtrl_GetLineRaw, 3387). +-define(wxStyledTextCtrl_GetSelectedTextRaw, 3388). +-define(wxStyledTextCtrl_GetTextRangeRaw, 3389). +-define(wxStyledTextCtrl_SetTextRaw, 3390). +-define(wxStyledTextCtrl_GetTextRaw, 3391). +-define(wxStyledTextCtrl_AppendTextRaw, 3392). +-define(wxArtProvider_GetBitmap, 3393). +-define(wxArtProvider_GetIcon, 3394). +-define(wxTreeEvent_GetKeyCode, 3395). +-define(wxTreeEvent_GetItem, 3396). +-define(wxTreeEvent_GetKeyEvent, 3397). +-define(wxTreeEvent_GetLabel, 3398). +-define(wxTreeEvent_GetOldItem, 3399). +-define(wxTreeEvent_GetPoint, 3400). +-define(wxTreeEvent_IsEditCancelled, 3401). +-define(wxTreeEvent_SetToolTip, 3402). +-define(wxNotebookEvent_GetOldSelection, 3403). +-define(wxNotebookEvent_GetSelection, 3404). +-define(wxNotebookEvent_SetOldSelection, 3405). +-define(wxNotebookEvent_SetSelection, 3406). +-define(wxFileDataObject_new, 3407). +-define(wxFileDataObject_AddFile, 3408). +-define(wxFileDataObject_GetFilenames, 3409). +-define(wxFileDataObject_destroy, 3410). +-define(wxTextDataObject_new, 3411). +-define(wxTextDataObject_GetTextLength, 3412). +-define(wxTextDataObject_GetText, 3413). +-define(wxTextDataObject_SetText, 3414). +-define(wxTextDataObject_destroy, 3415). +-define(wxBitmapDataObject_new_1_1, 3416). +-define(wxBitmapDataObject_new_1_0, 3417). +-define(wxBitmapDataObject_GetBitmap, 3418). +-define(wxBitmapDataObject_SetBitmap, 3419). +-define(wxBitmapDataObject_destroy, 3420). +-define(wxClipboard_new, 3422). +-define(wxClipboard_destruct, 3423). +-define(wxClipboard_AddData, 3424). +-define(wxClipboard_Clear, 3425). +-define(wxClipboard_Close, 3426). +-define(wxClipboard_Flush, 3427). +-define(wxClipboard_GetData, 3428). +-define(wxClipboard_IsOpened, 3429). +-define(wxClipboard_Open, 3430). +-define(wxClipboard_SetData, 3431). +-define(wxClipboard_UsePrimarySelection, 3433). +-define(wxClipboard_IsSupported, 3434). +-define(wxClipboard_Get, 3435). +-define(wxSpinEvent_GetPosition, 3436). +-define(wxSpinEvent_SetPosition, 3437). +-define(wxSplitterWindow_new_0, 3438). +-define(wxSplitterWindow_new_2, 3439). +-define(wxSplitterWindow_destruct, 3440). +-define(wxSplitterWindow_Create, 3441). +-define(wxSplitterWindow_GetMinimumPaneSize, 3442). +-define(wxSplitterWindow_GetSashGravity, 3443). +-define(wxSplitterWindow_GetSashPosition, 3444). +-define(wxSplitterWindow_GetSplitMode, 3445). +-define(wxSplitterWindow_GetWindow1, 3446). +-define(wxSplitterWindow_GetWindow2, 3447). +-define(wxSplitterWindow_Initialize, 3448). +-define(wxSplitterWindow_IsSplit, 3449). +-define(wxSplitterWindow_ReplaceWindow, 3450). +-define(wxSplitterWindow_SetSashGravity, 3451). +-define(wxSplitterWindow_SetSashPosition, 3452). +-define(wxSplitterWindow_SetSashSize, 3453). +-define(wxSplitterWindow_SetMinimumPaneSize, 3454). +-define(wxSplitterWindow_SetSplitMode, 3455). +-define(wxSplitterWindow_SplitHorizontally, 3456). +-define(wxSplitterWindow_SplitVertically, 3457). +-define(wxSplitterWindow_Unsplit, 3458). +-define(wxSplitterWindow_UpdateSize, 3459). +-define(wxSplitterEvent_GetSashPosition, 3460). +-define(wxSplitterEvent_GetX, 3461). +-define(wxSplitterEvent_GetY, 3462). +-define(wxSplitterEvent_GetWindowBeingRemoved, 3463). +-define(wxSplitterEvent_SetSashPosition, 3464). +-define(wxHtmlWindow_new_0, 3465). +-define(wxHtmlWindow_new_2, 3466). +-define(wxHtmlWindow_AppendToPage, 3467). +-define(wxHtmlWindow_GetOpenedAnchor, 3468). +-define(wxHtmlWindow_GetOpenedPage, 3469). +-define(wxHtmlWindow_GetOpenedPageTitle, 3470). +-define(wxHtmlWindow_GetRelatedFrame, 3471). +-define(wxHtmlWindow_HistoryBack, 3472). +-define(wxHtmlWindow_HistoryCanBack, 3473). +-define(wxHtmlWindow_HistoryCanForward, 3474). +-define(wxHtmlWindow_HistoryClear, 3475). +-define(wxHtmlWindow_HistoryForward, 3476). +-define(wxHtmlWindow_LoadFile, 3477). +-define(wxHtmlWindow_LoadPage, 3478). +-define(wxHtmlWindow_SelectAll, 3479). +-define(wxHtmlWindow_SelectionToText, 3480). +-define(wxHtmlWindow_SelectLine, 3481). +-define(wxHtmlWindow_SelectWord, 3482). +-define(wxHtmlWindow_SetBorders, 3483). +-define(wxHtmlWindow_SetFonts, 3484). +-define(wxHtmlWindow_SetPage, 3485). +-define(wxHtmlWindow_SetRelatedFrame, 3486). +-define(wxHtmlWindow_SetRelatedStatusBar, 3487). +-define(wxHtmlWindow_ToText, 3488). +-define(wxHtmlWindow_destroy, 3489). +-define(wxHtmlLinkEvent_GetLinkInfo, 3490). +-define(wxSystemSettings_GetColour, 3491). +-define(wxSystemSettings_GetFont, 3492). +-define(wxSystemSettings_GetMetric, 3493). +-define(wxSystemSettings_GetScreenType, 3494). +-define(wxSystemOptions_GetOption, 3495). +-define(wxSystemOptions_GetOptionInt, 3496). +-define(wxSystemOptions_HasOption, 3497). +-define(wxSystemOptions_IsFalse, 3498). +-define(wxSystemOptions_SetOption_2_1, 3499). +-define(wxSystemOptions_SetOption_2_0, 3500). +-define(wxAuiNotebookEvent_SetSelection, 3501). +-define(wxAuiNotebookEvent_GetSelection, 3502). +-define(wxAuiNotebookEvent_SetOldSelection, 3503). +-define(wxAuiNotebookEvent_GetOldSelection, 3504). +-define(wxAuiNotebookEvent_SetDragSource, 3505). +-define(wxAuiNotebookEvent_GetDragSource, 3506). +-define(wxAuiManagerEvent_SetManager, 3507). +-define(wxAuiManagerEvent_GetManager, 3508). +-define(wxAuiManagerEvent_SetPane, 3509). +-define(wxAuiManagerEvent_GetPane, 3510). +-define(wxAuiManagerEvent_SetButton, 3511). +-define(wxAuiManagerEvent_GetButton, 3512). +-define(wxAuiManagerEvent_SetDC, 3513). +-define(wxAuiManagerEvent_GetDC, 3514). +-define(wxAuiManagerEvent_Veto, 3515). +-define(wxAuiManagerEvent_GetVeto, 3516). +-define(wxAuiManagerEvent_SetCanVeto, 3517). +-define(wxAuiManagerEvent_CanVeto, 3518). +-define(wxLogNull_new, 3519). +-define(wxLogNull_destroy, 3520). +-define(wxTaskBarIcon_new, 3521). +-define(wxTaskBarIcon_destruct, 3522). +-define(wxTaskBarIcon_PopupMenu, 3523). +-define(wxTaskBarIcon_RemoveIcon, 3524). +-define(wxTaskBarIcon_SetIcon, 3525). diff --git a/lib/wx/test/wx_class_SUITE.erl b/lib/wx/test/wx_class_SUITE.erl index 7c3eda0be1..0e151ccc9b 100644 --- a/lib/wx/test/wx_class_SUITE.erl +++ b/lib/wx/test/wx_class_SUITE.erl @@ -50,7 +50,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [calendarCtrl, treeCtrl, notebook, staticBoxSizer, clipboard, helpFrame, htmlWindow, listCtrlSort, listCtrlVirtual, - radioBox, systemSettings, taskBarIcon]. + radioBox, systemSettings, taskBarIcon, toolbar]. groups() -> []. @@ -493,3 +493,20 @@ taskBarIcon(Config) -> wxTaskBarIcon:connect(TBI, taskbar_left_down, [{callback, fun(Ev,_) -> io:format("Left clicked: ~p~n",[Ev]) end}]), wxTaskBarIcon:connect(TBI, taskbar_right_down, [{callback,fun(Ev,_) -> io:format("Right clicked: ~p~n",[Ev]) end}]), wx_test_lib:wx_destroy(Frame,Config). + +toolbar(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo); +toolbar(Config) -> + Wx = wx:new(), + Frame = wxFrame:new(Wx, ?wxID_ANY, "Frame"), + TB = wxFrame:createToolBar(Frame), + wxToolBar:addTool(TB, 747, "PressMe", wxArtProvider:getBitmap("wxART_COPY", [{size, {16,16}}]), + [{shortHelp, "Press Me"}]), + + Add = fun(#wx{}, _) -> + wxToolBar:addTool(TB, -1, "Added", wxArtProvider:getBitmap("wxART_TICK_MARK", [{size, {16,16}}]), + [{shortHelp, "Test 2 popup text"}]) + end, + + wxFrame:connect(Frame, command_menu_selected, [{callback, Add}, {id, 747}]), + wxFrame:show(Frame), + wx_test_lib:wx_destroy(Frame,Config). diff --git a/lib/wx/test/wx_event_SUITE.erl b/lib/wx/test/wx_event_SUITE.erl index 53a2ee7d7b..f19adb430d 100644 --- a/lib/wx/test/wx_event_SUITE.erl +++ b/lib/wx/test/wx_event_SUITE.erl @@ -1,7 +1,7 @@ %% %% %CopyrightBegin% %% -%% Copyright Ericsson AB 2008-2012. All Rights Reserved. +%% Copyright Ericsson AB 2008-2013. 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 @@ -47,7 +47,9 @@ suite() -> [{ct_hooks,[ts_install_cth]}]. all() -> [connect, disconnect, connect_msg_20, connect_cb_20, - mouse_on_grid, spin_event, connect_in_callback, recursive]. + mouse_on_grid, spin_event, connect_in_callback, recursive, + char_events + ]. groups() -> []. @@ -398,3 +400,23 @@ recursive(Config) -> wx_test_lib:flush(), wx_test_lib:wx_destroy(Frame, Config). + + +char_events(TestInfo) when is_atom(TestInfo) -> wx_test_lib:tc_info(TestInfo); +char_events(Config) -> + Wx = wx:new(), + Frame = wxFrame:new(Wx, ?wxID_ANY, "Press any key"), + Panel = wxPanel:new(Frame, []), + wxFrame:connect(Frame, enter_window, [{callback, fun(_,_) -> + io:format("Set focus~n"), + wxWindow:setFocus(Panel) + end}]), + KeyEvent = fun(Ev,Obj) -> io:format("Got ~p~n",[Ev]), wxEvent:skip(Obj) end, + [wxWindow:connect(Panel, Types, [{callback,KeyEvent}]) + || Types <- [key_down, key_up, char]], + wxWindow:connect(Frame, char_hook, [{callback,KeyEvent}]), + + wxFrame:show(Frame), + wx_test_lib:flush(), + + wx_test_lib:wx_destroy(Frame, Config). diff --git a/lib/xmerl/doc/src/xmerl_ug.xmlsrc b/lib/xmerl/doc/src/xmerl_ug.xmlsrc index 8a0805020e..10c770c400 100644 --- a/lib/xmerl/doc/src/xmerl_ug.xmlsrc +++ b/lib/xmerl/doc/src/xmerl_ug.xmlsrc @@ -409,9 +409,9 @@ Data = specification but the basic functionality. For all details see the <seealso marker="xmerl_xs">reference manual</seealso></p> <p>First, some words about the xmerl_xs functionality:</p> - <p>You need to wright template functions to be able to control + <p>You need to write template functions to be able to control what kind of output you want. Thus if you want to encapsulate a - <c>bike</c> element in <p> tags you simply wright a + <c>bike</c> element in <p> tags you simply write a function:</p> <pre> template(E = #xmlElement{name='bike'}) -> |