#!/usr/bin/env escript %% -*- erlang -*- %% -record(state, { version = %VSN%, mib_file, outdir = "./", db = volatile, include_dirs = ["./"], include_lib_dirs = [], deprecated = true, group_check = true, description = false, reference = false, imports = false, module_identity = false, module, no_defs = false, relaxed_row_name_assigne_check, verbosity }). %% --o Dir [defaults to "./"] %% --i Dir [defaults to "./"] %% --il Dir %% --gc %% --db DB [defaults to volatile] %% --dep %% --desc %% --ref %% --imp %% --mi %% --mod Mod %% --nd %% --rrnac %% --version %% --verbosity V main(Args) when is_list(Args) -> case (catch process_args(Args)) of ok -> usage(); {ok, State} when is_record(State, state) -> io:format("snmpc: ~p~n", [State]); {ok, Str} when is_list(Str) -> io:format("~s~n~n", [Str]), halt(1); {error, ReasonStr} -> usage(ReasonStr) end; main(_) -> usage(). process_args([]) -> {error, lists:flatten(io_lib:format("No MIB-file", []))}; process_args(Args) -> %% CWD = "./", process_args(Args, #state{}). process_args([], State) -> {ok, State}; process_args(["--help"|_Args], _State) -> ok; process_args(["--version"|_Args], State) -> {ok, lists:flatten(io_lib:format("snmpc ~s", [State#state.version]))}; process_args(["--verbosity", Verbosity0|Args], #state{verbosity = V} = State) when (V =:= undefined) -> Verbosity = list_to_atom(Verbosity0), case lists:member(Verbosity, [trace,debug,log,info,silence]) of true -> process_args(Args, State#state{verbosity = Verbosity}); false -> e(lists:flatten(io_lib:format("Unknown verbosity: ~s", [Verbosity0]))) end; process_args(["--verbosity"|_Args], #state{verbosity = V}) when (V =/= undefined) -> e(lists:flatten(io_lib:format("Verbosity already set to ~w", [V]))); process_args([Arg|Args], State) -> io:format("Arg: ~p~n", [Arg]), process_args(Args, State). usage(ReasonStr) -> io:format("ERROR: ~s~n", [ReasonStr]), usage(). usage() -> io:format("Usage: snmpc [options] MIB.mib" "~nOptions:" "~n --help - Prints this info." "~n --version - Prints compiler version." "~n --verbosity - Print debug info." "~n verbosity = trace | debug | log | info | silence" "~n Defaults to silence." "~n --warnings - Print warning messages." "~n --i - Add this dir to the list of dirs that will be" "~n searched for imported (compiled) MIB files." "~n The current workin dir will always be included. " "~n --il - Add this dir to the list of dirs that will be" "~n searched for imported (compiled) MIB files." "~n It assumes that the first element in the dir name" "~n correspond to an OTP application. For example snmp/mibs/" "~n The current workin dir and the /priv/mibs " "~n are always listed last the includ path. " "~n --db - Database ro used for the defaul instrumentation." "~n Defaults to volatile." "~n --deprecated - Keep deprecated definition(s)." "~n If not specified the compiler will ignore" "~n deprecated definitions." "~n --description - The DESCRIPTION field will be included." "~n --reference - The REFERENCE field will be included." "~n --imports - The IMPORTS field will be included." "~n --module_id - The MODULE-IDENTITY field will be included." "~n --module throw({error, Reason}).