Re: Challenge: Build a Color-Coded Log Viewer for Phix/Euphoria (Inspired by chat.exw)
- Posted by Icy_Viking in June
- 783 views
Here is the Euphoria wrapper, based of the Pascal Win wrapper.
You can get the Euphoria FFI from here: [https://github.com/ghaberek/libffi-euphoria]
--Bzlogger Euphoria Wrapper --Written by Andy P. --Using FFI Euphoria wrapper --Using Euphoria 4.1.0 Beta 2 --Note: FFI.e gives us C_STRING which wraps 'allocate_string' for us --Euphoria Wrapper based off of xecronix's Pascal bzlogger_win_wrap.pas --Note 2: DLL file must be in same folder/directory as bzlogger.e for it to load correctly include std/ffi.e include std/machine.e include std/os.e --Global vars public atom bzlog --Constants public constant LOG_SILENT = 0, LOG_ERROR = 1, LOG_WARN = 2, LOG_INFO = 3, LOG_DEBUG = 4, LOG_VERBOSE = 5 --Load DLL/Shared library for various OS's ifdef WINDOWS then bzlog = open_dll("bzlogger_32.dll") elsifdef LINUX or FREEBSD then bzlog = open_dll("libbzlogger_32.so") elsifdef OSX then bzlog = open_dll("libbzlogger_32.dylib") end ifdef --If can't load DLL, display error if bzlog = 0 then puts(1,"Failed to load bzlogger_32!\n") abort(0) end if --Wrap Functions public constant xInitLogger = define_c_proc(bzlog,"+init_logger",{C_STRING}), xCloseLogger = define_c_proc(bzlog,"+close_logger",{}), xLogger = define_c_proc(bzlog,"+logger",{C_INT,C_STRING}) public procedure InitLogger(sequence configFile) c_proc(xInitLogger,{configFile}) end procedure public procedure CloseLogger() c_proc(xCloseLogger,{}) end procedure public procedure Logger(atom alevel,sequence msg) c_proc(xLogger,{alevel,msg}) end procedure public constant xSetLogLevel = define_c_proc(bzlog,"+set_log_level",{C_INT}), xSetLogFileName = define_c_proc(bzlog,"+set_log_file_name",{C_STRING}), xSetViewerIP = define_c_proc(bzlog,"+set_viewer_ip",{C_STRING}), xSetViewerPort = define_c_proc(bzlog,"+set_viewer_port",{C_WORD}) public procedure SetLogLevel(atom alevel) c_proc(xSetLogLevel,{alevel}) end procedure public procedure SetLogFileName(sequence aFileName) c_proc(xSetLogFileName,{aFileName}) end procedure public procedure SetViewerIP(sequence AIP) c_proc(xSetViewerIP,{AIP}) end procedure public procedure SetViewerPort(atom aPort) c_proc(xSetViewerPort,{aPort}) end procedure public constant xGetLogFileName = define_c_func(bzlog,"+get_log_file_name",{},C_STRING), xGetLogLevel = define_c_func(bzlog,"+get_log_level",{},C_INT), xGetViewerIP = define_c_func(bzlog,"+get_viewer_ip",{},C_STRING), xGetViewerPort = define_c_func(bzlog,"+get_viewer_port",{},C_WORD), xIsConfigLoaded = define_c_func(bzlog,"+is_config_loaded",{},C_BOOL) public function GetLogFileName() return c_func(xGetLogFileName,{}) end function public function GetLogLevel() return c_func(xGetLogLevel,{}) end function public function GetViewerIP() return c_func(xGetViewerIP,{}) end function public function GetViewerPort() return c_func(xGetViewerPort,{}) end function public function IsConfigLoaded() return c_func(xIsConfigLoaded,{}) end function

