aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/system/libkvisystem.cpp
diff options
context:
space:
mode:
authorGravatar Szymon Tomasz Stefanek2012-12-22 01:53:14 +0000
committerGravatar Szymon Tomasz Stefanek2012-12-22 01:53:14 +0000
commita7572583e8a7f0ed963da2238870170bc3bf12ed (patch)
tree3e82d3b87f446fedd7a01924d8d4f281bdf5b140 /src/modules/system/libkvisystem.cpp
parentFixed compilation with qt5rc1 (diff)
downloadKVIrc-a7572583e8a7f0ed963da2238870170bc3bf12ed.tar.gz
KVIrc-a7572583e8a7f0ed963da2238870170bc3bf12ed.tar.bz2
KVIrc-a7572583e8a7f0ed963da2238870170bc3bf12ed.zip
Compile and run with Qt5.0. Also add a couple of KVS functions for byte order conversion.
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@6297 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/system/libkvisystem.cpp')
-rw-r--r--src/modules/system/libkvisystem.cpp114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/modules/system/libkvisystem.cpp b/src/modules/system/libkvisystem.cpp
index b11755554..a4869dca0 100644
--- a/src/modules/system/libkvisystem.cpp
+++ b/src/modules/system/libkvisystem.cpp
@@ -34,6 +34,7 @@
#include "KviEnvironment.h"
#include "KviOsInfo.h"
#include "KviModuleManager.h"
+#include "KviByteOrder.h"
#include <QClipboard>
#include <QByteArray>
@@ -804,6 +805,117 @@ static bool system_kvs_cmd_runcmd(KviKvsModuleCommandCall *c)
return c->error(__tr2qs("Failed to start the terminal program"));
}
+/*
+ @doc: system.ntohi
+ @type:
+ function
+ @title:
+ $system.ntohi
+ @short:
+ Convert an integer from network to host byte order.
+ @syntax:
+ <integer> $system.ntohi(<value:integer>)
+ <integer> $system.ntohi(<value:integer>,<bytecount:integer>)
+ @description:
+ Converts the integer value in network byte order
+ to it's host byte order counterpart.
+ Since the conversion is carried at binary rappresentation
+ level you must specify the number of bytes you want
+ the binary rappresentation to have. Valid values are
+ 1 (no conversion), 2 (short), 4 (32 bit int) and 8 (64 bit int).
+ If omitted, bytecount is assumed to be 4.
+*/
+static bool system_kvs_fnc_ntohi(KviKvsModuleFunctionCall * c)
+{
+ kvs_int_t iValue;
+ kvs_uint_t uBytes;
+
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("value",KVS_PT_INT,0,iValue)
+ KVSM_PARAMETER("bytecount",KVS_PT_UINT,KVS_PF_OPTIONAL,uBytes)
+ KVSM_PARAMETERS_END(c)
+
+ switch(uBytes)
+ {
+ case 0:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::networkByteOrderToLocalCpu32((kvi_u32_t)iValue));
+ break;
+ case 1:
+ c->returnValue()->setInteger((kvs_int_t)((kvi_u8_t)iValue));
+ break;
+ case 2:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::networkByteOrderToLocalCpu16((kvi_u16_t)iValue));
+ break;
+ case 4:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::networkByteOrderToLocalCpu32((kvi_u32_t)iValue));
+ break;
+ case 8:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::networkByteOrderToLocalCpu64((kvi_u64_t)iValue));
+ break;
+ default:
+ return c->error(__tr2qs("Bad bytecount specification: 1, 2, 4 and 8 are allowed"));
+ break;
+ }
+
+ return true;
+}
+
+
+/*
+ @doc: system.htoni
+ @type:
+ function
+ @title:
+ $system.htoni
+ @short:
+ Convert an integer from host to network byte order.
+ @syntax:
+ <integer> $system.htoni(<value:integer>)
+ <integer> $system.htoni(<value:integer>,<bytecount:integer>)
+ @description:
+ Converts the integer value in host byte order
+ to it's network byte order counterpart.
+ Since the conversion is carried at binary rappresentation
+ level you must specify the number of bytes you want
+ the binary rappresentation to have. Valid values are
+ 1 (no conversion), 2 (short), 4 (32 bit int) and 8 (64 bit int).
+ If omitted, bytecount is assumed to be 4.
+*/
+static bool system_kvs_fnc_htoni(KviKvsModuleFunctionCall * c)
+{
+ kvs_int_t iValue;
+ kvs_uint_t uBytes;
+
+ KVSM_PARAMETERS_BEGIN(c)
+ KVSM_PARAMETER("value",KVS_PT_INT,0,iValue)
+ KVSM_PARAMETER("bytecount",KVS_PT_UINT,KVS_PF_OPTIONAL,uBytes)
+ KVSM_PARAMETERS_END(c)
+
+ switch(uBytes)
+ {
+ case 0:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::localCpuToNetworkByteOrder32((kvi_u32_t)iValue));
+ break;
+ case 1:
+ c->returnValue()->setInteger((kvs_int_t)((kvi_u8_t)iValue));
+ break;
+ case 2:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::localCpuToNetworkByteOrder16((kvi_u16_t)iValue));
+ break;
+ case 4:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::localCpuToNetworkByteOrder32((kvi_u32_t)iValue));
+ break;
+ case 8:
+ c->returnValue()->setInteger((kvs_int_t)KviByteOrder::localCpuToNetworkByteOrder64((kvi_u64_t)iValue));
+ break;
+ default:
+ return c->error(__tr2qs("Bad bytecount specification: 1, 2, 4 and 8 are allowed"));
+ break;
+ }
+
+ return true;
+}
+
static bool system_module_init(KviModule * m)
{
KVSM_REGISTER_FUNCTION(m,"ostype",system_kvs_fnc_ostype);
@@ -815,6 +927,8 @@ static bool system_module_init(KviModule * m)
KVSM_REGISTER_FUNCTION(m,"getenv",system_kvs_fnc_getenv);
KVSM_REGISTER_FUNCTION(m,"hostname",system_kvs_fnc_hostname);
KVSM_REGISTER_FUNCTION(m,"dbus",system_kvs_fnc_dbus);
+ KVSM_REGISTER_FUNCTION(m,"htoni",system_kvs_fnc_htoni);
+ KVSM_REGISTER_FUNCTION(m,"ntohi",system_kvs_fnc_ntohi);
KVSM_REGISTER_FUNCTION(m,"clipboard",system_kvs_fnc_clipboard);
KVSM_REGISTER_FUNCTION(m,"selection",system_kvs_fnc_selection);
KVSM_REGISTER_FUNCTION(m,"checkModule",system_kvs_fnc_checkModule);