-module(netcdf_nif). -on_load(init/0). -export([nc_type/1]). -export([nc_create/1]). -export([nc_close/1]). -export([nc_def_dim/3]). -export([nc_def_var/5]). -export([nc_put_att_text/4]). -export([nc_enddef/1]). -export([nc_put_var_double_single/3]). -export([nc_put_var_double/3]). -define(APPNAME, netcdf_nif). -define(LIBNAME, netcdf_nif). %% Types %% Types for variables %% https://docs.unidata.ucar.edu/netcdf-c/current/netcdf_8h.html#afe40bef4fdf46f2820e9cd64c64a11b5 nc_type(nat) -> 0; nc_type(byte) -> 1; nc_type(char) -> 2; nc_type(short) -> 3; nc_type(int) -> 4; nc_type(long) -> nc_type(int); nc_type(float) -> 5; nc_type(double) -> 6; nc_type(ubyte) -> 7; nc_type(ushort) -> 8; nc_type(uint) -> 9; nc_type(int64) -> 10; nc_type(uint64) -> 11; nc_type(string) -> 12. %%==================================================================== %% API functions %%==================================================================== nc_create(_) -> nif_not_loaded. nc_close(_) -> nif_not_loaded. nc_def_dim(_, _, _) -> nif_not_loaded. nc_def_var(_, _, _, _, _) -> nif_not_loaded. nc_put_att_text(_, _, _, _) -> nif_not_loaded. nc_enddef(_) -> nif_not_loaded. nc_put_var_double_single(_, _, _) -> nif_not_loaded. nc_put_var_double(_, _, _) -> nif_not_loaded. %%==================================================================== %% Internal functions %%==================================================================== init() -> SoName = case code:priv_dir(?APPNAME) of {error, bad_name} -> case filelib:is_dir(filename:join(["..", priv])) of true -> filename:join(["..", priv, ?LIBNAME]); _ -> filename:join([priv, ?LIBNAME]) end; Dir -> filename:join(Dir, ?LIBNAME) end, erlang:load_nif(SoName, 0).