Re: Challenge: Build a Color-Coded Log Viewer for Phix/Euphoria (Inspired by chat.exw)

new topic     » goto parent     » topic index » view thread      » older message » newer message

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 
new topic     » goto parent     » topic index » view thread      » older message » newer message

Search



Quick Links

User menu

Not signed in.

Misc Menu