diff --git a/plugins/makefile.mak b/plugins/makefile.mak index b692c41f..6a44e34d 100644 --- a/plugins/makefile.mak +++ b/plugins/makefile.mak @@ -13,6 +13,8 @@ all: @-$(MAKE) /nologo /s /f makefile.mak $@ @cd ..\mpcinfo @-$(MAKE) /nologo /s /f makefile.mak $@ + @cd ..\nonbmp + @-$(MAKE) /nologo /s /f makefile.mak $@ @cd ..\python @-$(MAKE) /nologo /s /f makefile.mak $@ @cd ..\tcl @@ -45,6 +47,8 @@ clean: @-$(MAKE) /nologo /s /f makefile.mak clean $@ @cd ..\mpcinfo @-$(MAKE) /nologo /s /f makefile.mak clean $@ + @cd ..\nonbmp + @-$(MAKE) /nologo /s /f makefile.mak clean $@ @cd ..\python @-$(MAKE) /nologo /s /f makefile.mak clean $@ @cd ..\tcl diff --git a/plugins/nonbmp/makefile.mak b/plugins/nonbmp/makefile.mak new file mode 100644 index 00000000..1c28610d --- /dev/null +++ b/plugins/nonbmp/makefile.mak @@ -0,0 +1,18 @@ +include "..\..\src\makeinc.mak" + +all: nonbmp.obj nonbmp.def + link $(LDFLAGS) $(LIBS) /dll /out:xcnonbmp.dll /def:nonbmp.def nonbmp.obj + +nonbmp.def: + echo EXPORTS > nonbmp.def + echo xchat_plugin_init >> nonbmp.def + echo xchat_plugin_deinit >> nonbmp.def + +nonbmp.obj: nonbmp.c makefile.mak + cl $(CFLAGS) $(GLIB) /I.. nonbmp.c + +clean: + del *.obj + del *.dll + del *.exp + del *.lib diff --git a/plugins/nonbmp/nonbmp.c b/plugins/nonbmp/nonbmp.c new file mode 100644 index 00000000..fe9571b7 --- /dev/null +++ b/plugins/nonbmp/nonbmp.c @@ -0,0 +1,87 @@ +#include +#include +#include + +#include "xchat-plugin.h" + +static xchat_plugin *ph; +static const char name[] = "Non-BMP"; +static const char desc[] = "Replace non-BMP characters with replacment characters"; +static const char version[] = "1.0000"; +static int recursing = 0; + +static int filter( + char *word[], + char *word_eol[], + void *unused +) { + gunichar *line; + gchar *utf8_line; + glong length; + glong index; + + if( recursing ) { + return XCHAT_EAT_NONE; + } + + /* the input has already been checked so we can use the _fast version */ + line = g_utf8_to_ucs4_fast( + (char *)word_eol[1], + -1, /* NUL terminated input */ + &length + ); + + for( index = 0; index < length; index++ ) { + if( line[ index ] > 0xFFFF ) { + line[ index ] = 0xFFFD; /* replacement character */ + } + } + + utf8_line = g_ucs4_to_utf8( + line, + -1, /* NUL terminated input */ + NULL, /* items read */ + NULL, /* items written */ + NULL /* ignore conversion error */ + ); + + if( utf8_line == NULL ) { + /* conversion failed ... I guess we are screwed? */ + g_free( line ); + return XCHAT_EAT_NONE; + } + + recursing = 1; + xchat_commandf( ph, "RECV %s", utf8_line ); + recursing = 0; + + g_free( line ); + g_free( utf8_line ); + return XCHAT_EAT_ALL; +} + +int xchat_plugin_init( + xchat_plugin *plugin_handle, + char **plugin_name, + char **plugin_desc, + char **plugin_version, + char *arg +) { +/* int index = 0;*/ + + ph = plugin_handle; + *plugin_name = name; + *plugin_desc = desc; + *plugin_version = version; + + xchat_hook_server( ph, "RAW LINE", XCHAT_PRI_HIGHEST, filter, (void *)NULL ); + xchat_printf (ph, "%s plugin loaded\n", name); + return 1; +} + +int +xchat_plugin_deinit (void) +{ + xchat_printf (ph, "%s plugin unloaded\n", name); + return 1; +} \ No newline at end of file diff --git a/win32/release-x64.bat b/win32/release-x64.bat index 9e092a2b..9cf634a5 100644 --- a/win32/release-x64.bat +++ b/win32/release-x64.bat @@ -62,6 +62,7 @@ copy ..\plugins\fishlim\xcfishlim.dll %XCHAT_DEST%\plugins copy ..\plugins\lua\xclua.dll %XCHAT_DEST%\plugins ::obs copy ..\plugins\gtkpref\xcgtkpref.dll %XCHAT_DEST%\plugins copy ..\plugins\mpcinfo\xcmpcinfo.dll %XCHAT_DEST%\plugins +copy ..\plugins\nonbmp\xcnonbmp.dll %XCHAT_DEST%\plugins copy ..\plugins\perl\xcperl-512.dll %XCHAT_DEST%\plugins copy ..\plugins\perl\xcperl-514.dll %XCHAT_DEST%\plugins copy ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins diff --git a/win32/release-x86.bat b/win32/release-x86.bat index bf0a8db6..05419beb 100644 --- a/win32/release-x86.bat +++ b/win32/release-x86.bat @@ -64,6 +64,7 @@ copy ..\plugins\fishlim\xcfishlim.dll %XCHAT_DEST%\plugins copy ..\plugins\lua\xclua.dll %XCHAT_DEST%\plugins ::obs copy ..\plugins\gtkpref\xcgtkpref.dll %XCHAT_DEST%\plugins copy ..\plugins\mpcinfo\xcmpcinfo.dll %XCHAT_DEST%\plugins +copy ..\plugins\nonbmp\xcnonbmp.dll %XCHAT_DEST%\plugins copy ..\plugins\perl\xcperl-512.dll %XCHAT_DEST%\plugins copy ..\plugins\perl\xcperl-514.dll %XCHAT_DEST%\plugins copy ..\plugins\python\xcpython.dll %XCHAT_DEST%\plugins diff --git a/win32/xchat-wdk-x64.skel.iss b/win32/xchat-wdk-x64.skel.iss index 815bdd48..12fa3667 100644 --- a/win32/xchat-wdk-x64.skel.iss +++ b/win32/xchat-wdk-x64.skel.iss @@ -39,6 +39,7 @@ Name: "plugins\doat"; Description: "Do At"; Types: full custom; Flags: disableno Name: "plugins\exec"; Description: "Exec"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: full custom; Flags: disablenouninstallwarning +Name: "plugins\nonbmp"; Description: "Non-BMP"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\upd"; Description: "Update Checker"; Types: normal full custom; Flags: disablenouninstallwarning Name: "plugins\winamp"; Description: "Winamp"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\winsys"; Description: "WinSys"; Types: full custom; Flags: disablenouninstallwarning @@ -154,6 +155,7 @@ Source: "plugins\xcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Co Source: "plugins\xcfishlim.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\fishlim Source: "etc\music.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\winamp or plugins\mpcinfo Source: "plugins\xcmpcinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\mpcinfo +Source: "plugins\xcnonbmp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\nonbmp Source: "etc\download.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\upd Source: "plugins\xcupd.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\upd Source: "plugins\xcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\winamp diff --git a/win32/xchat-wdk-x86.skel.iss b/win32/xchat-wdk-x86.skel.iss index 2bc7969f..2bef323f 100644 --- a/win32/xchat-wdk-x86.skel.iss +++ b/win32/xchat-wdk-x86.skel.iss @@ -38,6 +38,7 @@ Name: "plugins\doat"; Description: "Do At"; Types: full custom; Flags: disableno Name: "plugins\exec"; Description: "Exec"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\fishlim"; Description: "FiSHLiM"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\mpcinfo"; Description: "mpcInfo"; Types: full custom; Flags: disablenouninstallwarning +Name: "plugins\nonbmp"; Description: "Non-BMP"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\upd"; Description: "Update Checker"; Types: normal full custom; Flags: disablenouninstallwarning Name: "plugins\winamp"; Description: "Winamp"; Types: full custom; Flags: disablenouninstallwarning Name: "plugins\winsys"; Description: "WinSys"; Types: full custom; Flags: disablenouninstallwarning @@ -155,6 +156,7 @@ Source: "plugins\xcexec.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Co Source: "plugins\xcfishlim.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\fishlim Source: "etc\music.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\winamp or plugins\mpcinfo Source: "plugins\xcmpcinfo.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\mpcinfo +Source: "plugins\xcnonbmp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\nonbmp Source: "etc\download.png"; DestDir: "{app}\etc"; Flags: ignoreversion; Components: plugins\upd Source: "plugins\xcupd.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\upd Source: "plugins\xcwinamp.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: plugins\winamp