Commit 488118752d64776145d1dc0150147a4a8b34edce

Authored by Perry Werneck
1 parent 0f190dc5
Exists in master and in 1 other branch develop

Reorganizing linux sources.

.gitignore 0 → 100644
... ... @@ -0,0 +1,10 @@
  1 +aclocal.m4
  2 +autom4te.cache
  3 +*.log
  4 +*.status
  5 +configure
  6 +Makefile
  7 +scripts
  8 +config.h
  9 +stamp-h1
  10 +
... ...
Makefile.in 0 → 100644
... ... @@ -0,0 +1,315 @@
  1 +#
  2 +# "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 +# (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 +# aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 +#
  6 +# Copyright (C) <2008> <Banco do Brasil S.A.>
  7 +#
  8 +# Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 +# os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 +# Free Software Foundation.
  11 +#
  12 +# Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 +# GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 +# A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 +# obter mais detalhes.
  16 +#
  17 +# Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 +# programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 +# Place, Suite 330, Boston, MA, 02111-1307, USA
  20 +#
  21 +# Contatos:
  22 +#
  23 +# perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  24 +# erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
  25 +#
  26 +
  27 +#---[ Library configuration ]------------------------------------------------------------
  28 +
  29 +MODULE_NAME=ipc3270c
  30 +PACKAGE_NAME=@PACKAGE_NAME@
  31 +
  32 +PLUGIN_SOURCES= \
  33 + $(wildcard src/plugin/*.c) \
  34 + $(wildcard src/plugin/@OSNAME@/*.rc)
  35 +
  36 +TEST_SOURCES= \
  37 + $(wildcard src/testprogram/*.c)
  38 +
  39 +#---[ Tools ]----------------------------------------------------------------------------
  40 +
  41 +CC=@CC@
  42 +LD=@CC@
  43 +LN_S=@LN_S@
  44 +MKDIR=@MKDIR_P@
  45 +INSTALL=@INSTALL@
  46 +INSTALL_DATA=@INSTALL_DATA@
  47 +INSTALL_PROGRAM=@INSTALL_PROGRAM@
  48 +XGETTEXT=@XGETTEXT@
  49 +MSGCAT=@MSGCAT@
  50 +WINDRES=@WINDRES@
  51 +AR=@AR@
  52 +
  53 +#---[ Paths ]----------------------------------------------------------------------------
  54 +
  55 +prefix=@prefix@
  56 +exec_prefix=@exec_prefix@
  57 +bindir=@bindir@
  58 +sbindir=@sbindir@
  59 +libdir=@libdir@
  60 +includedir=@includedir@
  61 +datarootdir=@datarootdir@
  62 +localedir=@localedir@
  63 +docdir=@docdir@
  64 +sysconfdir=@sysconfdir@
  65 +
  66 +BASEDIR=@BASEDIR@
  67 +
  68 +POTDIR=$(BASEDIR)/.pot
  69 +
  70 +OBJDIR=$(BASEDIR)/.obj/$(MODULE_NAME)
  71 +OBJDBG=$(OBJDIR)/Debug
  72 +OBJRLS=$(OBJDIR)/Release
  73 +
  74 +BINDIR=$(BASEDIR)/.bin
  75 +BINDBG=$(BINDIR)/Debug
  76 +BINRLS=$(BINDIR)/Release
  77 +
  78 +#---[ Rules ]----------------------------------------------------------------------------
  79 +
  80 +DEPENDS= \
  81 + Makefile \
  82 + src/include/*.h \
  83 + src/include/lib3270/*.h
  84 +
  85 +CFLAGS= \
  86 + @CFLAGS@ \
  87 + -g \
  88 + -Isrc/include \
  89 + -DBUILD_DATE=`date +%Y%m%d` \
  90 + @LIB3270_CFLAGS@ \
  91 + @V3270_CFLAGS@ \
  92 + @GTK_CFLAGS@ \
  93 + @GLIB_CFLAGS@
  94 +
  95 +GTK_LIBS=@GTK_LIBS@
  96 +V3270_LIBS=@V3270_LIBS@
  97 +GLIB_LIBS=@GLIB_LIBS@
  98 +
  99 +LIBS= \
  100 + @LIBS@ \
  101 + @LIBICONV@ \
  102 + @INTL_LIBS@ \
  103 + @LIB3270_LIBS@
  104 +
  105 +#---[ Debug Rules ]----------------------------------------------------------------------
  106 +
  107 +$(OBJDBG)/%.o: \
  108 + %.c \
  109 + $(DEPENDS)
  110 +
  111 + @echo $< ...
  112 + @$(MKDIR) $(@D)
  113 +
  114 + @$(CC) \
  115 + $(CFLAGS) \
  116 + -Wall -Wextra -fstack-check \
  117 + -DDEBUG=1 \
  118 + -o $@ -c $<
  119 +
  120 +$(OBJDBG)/%.o: \
  121 + %.rc
  122 +
  123 + @echo $< ...
  124 + @$(MKDIR) $(@D)
  125 + @$(WINDRES) $< -O coff -o $@
  126 +
  127 +#---[ Release Rules ]--------------------------------------------------------------------
  128 +
  129 +$(OBJRLS)/%.o: \
  130 + %.c \
  131 + $(DEPENDS)
  132 +
  133 + @echo $< ...
  134 + @$(MKDIR) $(@D)
  135 + @$(CC) \
  136 + $(CFLAGS) \
  137 + -DNDEBUG=1 \
  138 + -o $@ -c $<
  139 +
  140 +$(OBJRLS)/%.o: \
  141 + %.rc
  142 +
  143 + @echo $< ...
  144 + @$(MKDIR) $(@D)
  145 + @$(WINDRES) $< -O coff -o $@
  146 +
  147 +#---[ Misc Rules ]-----------------------------------------------------------------------
  148 +
  149 +$(POTDIR)/$(MODULE_NAME)/%.pot: \
  150 + %.c
  151 +
  152 + @echo $(notdir $@) ...
  153 + @$(MKDIR) $(@D)
  154 + @$(XGETTEXT) \
  155 + --language=C \
  156 + --keyword=_ \
  157 + --keyword=N_ \
  158 + --keyword=MSG_:2 \
  159 + --output=$@ \
  160 + $<
  161 + @touch $@
  162 +
  163 +$(POTDIR)/$(MODULE_NAME)/%.pot: \
  164 + %.rc
  165 +
  166 + @echo $< ...
  167 + @$(MKDIR) $(@D)
  168 + @touch $@
  169 +
  170 +
  171 +#---[ Release Targets ]------------------------------------------------------------------
  172 +
  173 +all: \
  174 + $(BINRLS)/$(MODULE_NAME)@DLLEXT@ \
  175 + $(POTDIR)/$(MODULE_NAME).pot
  176 +
  177 +Release: \
  178 + $(BINRLS)/$(MODULE_NAME)@DLLEXT@ \
  179 + $(BINRLS)/$(PACKAGE_NAME)d@EXEEXT@
  180 +
  181 +$(BINRLS)/$(MODULE_NAME)@DLLEXT@: \
  182 + $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJRLS)/$(SRC).o) \
  183 + $(BINRLS)/lib$(MODULE_NAME).a
  184 +
  185 + @$(MKDIR) $(@D)
  186 + @echo $< ...
  187 + @$(LD) \
  188 + -shared -Wl,-soname,$(@F) \
  189 + -o $@ \
  190 + $(LDFLAGS) \
  191 + $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJRLS)/$(SRC).o) \
  192 + -L$(BINRLS) -l$(MODULE_NAME) \
  193 + $(V3270_LIBS) \
  194 + $(LIBS) \
  195 + $(GTK_LIBS)
  196 +
  197 +$(BINRLS)/lib$(MODULE_NAME).a: \
  198 + $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJRLS)/$(SRC).o)
  199 +
  200 + @$(MKDIR) $(@D)
  201 + @echo $< ...
  202 +
  203 + @$(AR) rcs $@ $^
  204 +
  205 +
  206 +#---[ Install Targets ]------------------------------------------------------------------
  207 +
  208 +install: \
  209 + install-plugin
  210 +
  211 +install-plugin: \
  212 + $(BINRLS)/$(MODULE_NAME)@DLLEXT@
  213 +
  214 + @$(MKDIR) $(DESTDIR)$(libdir)/pw3270-plugins
  215 +
  216 + @$(INSTALL_PROGRAM) \
  217 + $(BINRLS)/$(MODULE_NAME)@DLLEXT@ \
  218 + $(DESTDIR)$(libdir)/pw3270-plugins
  219 +
  220 +#---[ Misc Targets ]---------------------------------------------------------------------
  221 +
  222 +$(POTDIR)/$(MODULE_NAME).pot: \
  223 + $(foreach SRC, $(basename $(SOURCES)), $(POTDIR)/$(MODULE_NAME)/$(SRC).pot)
  224 +
  225 + @rm -f $@
  226 + @mkdir -p `dirname $@`
  227 + @$(MSGCAT) --sort-output $^ > $@
  228 +
  229 +locale: \
  230 + $(POTDIR)/$(MODULE_NAME).pot
  231 +
  232 +
  233 +#---[ Debug Targets ]--------------------------------------------------------------------
  234 +
  235 +Debug: \
  236 + $(BINDBG)/$(MODULE_NAME)@DLLEXT@
  237 +
  238 +$(BINDBG)/lib$(MODULE_NAME).a: \
  239 + $(foreach SRC, $(basename $(CORE_SOURCES)), $(OBJDBG)/$(SRC).o)
  240 +
  241 + @$(MKDIR) $(@D)
  242 + @echo $< ...
  243 +
  244 + @$(AR) rcs $@ $^
  245 +
  246 +
  247 +$(BINDBG)/$(MODULE_NAME)@EXEEXT@: \
  248 + $(foreach SRC, $(basename $(TEST_SOURCES)), $(OBJDBG)/$(SRC).o)
  249 +
  250 + @$(MKDIR) $(@D)
  251 + @echo $< ...
  252 + @$(LD) \
  253 + -o $@ \
  254 + $^ \
  255 + -L$(BINDBG) \
  256 + -Wl,-rpath,$(BINDBG) \
  257 + $(LDFLAGS) \
  258 + $(LIBS) \
  259 + $(V3270_LIBS) \
  260 + $(GTK_LIBS) \
  261 + $(GLIB_LIBS)
  262 +
  263 +$(BINDBG)/$(PACKAGE_NAME)d@EXEEXT@: \
  264 + $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJDBG)/$(SRC).o) \
  265 + $(BINDBG)/lib$(MODULE_NAME).a
  266 +
  267 + @$(MKDIR) $(@D)
  268 + @echo $< ...
  269 + @$(LD) \
  270 + -o $@ \
  271 + $(foreach SRC, $(basename $(SERVICE_SOURCES)), $(OBJDBG)/$(SRC).o) \
  272 + -L$(BINDBG) \
  273 + -Wl,-rpath,$(BINDBG) \
  274 + $(LDFLAGS) \
  275 + $(LIBS) \
  276 + -l$(MODULE_NAME) \
  277 + $(GLIB_LIBS)
  278 +
  279 +$(BINDBG)/$(MODULE_NAME)@DLLEXT@: \
  280 + $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJDBG)/$(SRC).o) \
  281 + $(BINDBG)/lib$(MODULE_NAME).a
  282 +
  283 + @$(MKDIR) $(@D)
  284 + @echo $< ...
  285 + @$(LD) \
  286 + -shared -Wl,-soname,$(@F) \
  287 + -o $@ \
  288 + $(LDFLAGS) \
  289 + $(foreach SRC, $(basename $(PLUGIN_SOURCES)), $(OBJDBG)/$(SRC).o) \
  290 + -L$(BINDBG) -l$(MODULE_NAME) \
  291 + $(V3270_LIBS) \
  292 + $(LIBS) \
  293 + $(GTK_LIBS)
  294 +
  295 +
  296 +#---[ Clean Targets ]--------------------------------------------------------------------
  297 +
  298 +clean: \
  299 + cleanDebug \
  300 + cleanRelease
  301 +
  302 + @rm -fr $(BASEDIR)/.tmp/$(MODULE_NAME)
  303 + @rm -fr $(POTDIR)/$(MODULE_NAME)
  304 +
  305 +cleanDebug:
  306 +
  307 + @rm -fr $(OBJDBG)
  308 + @rm -fr $(BINDBG)
  309 + @rm -fr $(OBJDIR)/marshal
  310 +
  311 +clean: \
  312 + cleanDebug \
  313 + cleanRelease
  314 +
  315 +
... ...
autogen.sh 0 → 100755
... ... @@ -0,0 +1,29 @@
  1 +#!/bin/bash
  2 +
  3 +test -n "$srcdir" || srcdir=`dirname "$0"`
  4 +test -n "$srcdir" || srcdir=.
  5 +
  6 +olddir=`pwd`
  7 +cd "$srcdir"
  8 +
  9 +aclocal
  10 +if test $? != 0 ; then
  11 + echo "aclocal failed."
  12 + exit -1
  13 +fi
  14 +
  15 +autoconf
  16 +if test $? != 0 ; then
  17 + echo "autoconf failed."
  18 + exit -1
  19 +fi
  20 +
  21 +mkdir -p scripts
  22 +automake --add-missing 2> /dev/null | true
  23 +
  24 +cd "$olddir"
  25 +test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
  26 +
  27 +
  28 +
  29 +
... ...
configure.ac 0 → 100644
... ... @@ -0,0 +1,250 @@
  1 +dnl
  2 +dnl Software pw3270, desenvolvido com base nos códigos fontes do C3270 e X3270
  3 +dnl (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 +dnl aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 +dnl
  6 +dnl Copyright (C) <2008> <Banco do Brasil S.A.>
  7 +dnl
  8 +dnl Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 +dnl os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 +dnl Free Software Foundation.
  11 +dnl
  12 +dnl Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 +dnl GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 +dnl A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 +dnl obter mais detalhes.
  16 +dnl
  17 +dnl Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 +dnl programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple
  19 +dnl Place, Suite 330, Boston, MA, 02111-1307, USA
  20 +dnl
  21 +dnl Contatos:
  22 +dnl
  23 +dnl perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  24 +dnl erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
  25 +dnl
  26 +
  27 +dnl Process this file with autoconf to produce a configure script.
  28 +
  29 +dnl The minimum version of autoconf required.
  30 +AC_PREREQ(2.61)
  31 +
  32 +dnl Initialise automake with the package name, version and
  33 +dnl bug-reporting address.
  34 +AC_INIT([pw3270], [5.2], [perry.werneck@gmail.com])
  35 +
  36 +dnl Place auxilliary scripts here.
  37 +AC_CONFIG_AUX_DIR([scripts])
  38 +
  39 +dnl Compute the canonical host-system type
  40 +AC_CANONICAL_HOST
  41 +
  42 +dnl Put macro definitions here (though they aren't used).
  43 +AC_CONFIG_HEADER([src/include/config.h])
  44 +
  45 +dnl Initialise automake stuff.
  46 +AM_INIT_AUTOMAKE
  47 +
  48 +dnl Check for iconv
  49 +AM_ICONV
  50 +
  51 +dnl Checks for programs.
  52 +AC_PROG_CC
  53 +AC_PROG_SED
  54 +AC_PROG_LN_S
  55 +
  56 +AC_LANG([C])
  57 +
  58 +dnl ---------------------------------------------------------------------------
  59 +dnl Initialize defaults
  60 +dnl ---------------------------------------------------------------------------
  61 +
  62 +DBG_CFLAGS="-g -fstack-check -DDEBUG=1"
  63 +RLS_CFLAGS="-DNDEBUG=1"
  64 +PLUGINS=""
  65 +APP_RESOURCES=""
  66 +APP_LDFLAGS=""
  67 +DLL_LDFLAGS="-shared"
  68 +STATIC_LDFLAGS=""
  69 +
  70 +dnl ---------------------------------------------------------------------------
  71 +dnl Check for OS specifics
  72 +dnl ---------------------------------------------------------------------------
  73 +
  74 +DLLPREFIX="lib"
  75 +
  76 +case "$host" in
  77 + *-mingw32|*-pc-msys)
  78 + app_cv_osname="windows"
  79 + CFLAGS="$CFLAGS -pthread -D_WIN32_WINNT=0x0600"
  80 + LIBS="$LIBS -lws2_32 -lwtsapi32 -lcomdlg32"
  81 + LDFLAGS="$LDFLAGS -pthread"
  82 + DLLEXT=".dll"
  83 + DLLPREFIX=""
  84 +
  85 + app_win32_revision=$(date +%y.%m.%d.%H)
  86 + AC_SUBST(WIN32_VERSION,$app_win32_revision)
  87 + AC_CONFIG_FILES(src/plugin/windows/resources.rc)
  88 + ;;
  89 +
  90 + *)
  91 + CFLAGS="$CFLAGS -pthread"
  92 + LDFLAGS="$LDFLAGS -pthread"
  93 + app_cv_datadir="/usr/share"
  94 + app_cv_confdir="/etc"
  95 + app_cv_osname="linux"
  96 + LOGDIR="/var/log"
  97 + DLLEXT=".so"
  98 +
  99 +esac
  100 +
  101 +AC_SUBST(DATADIR,$app_cv_datadir)
  102 +AC_SUBST(CONFDIR,$app_cv_confdir)
  103 +AC_SUBST(OSNAME,$app_cv_osname)
  104 +AC_SUBST(LIBS)
  105 +AC_SUBST(LOGDIR)
  106 +AC_SUBST(DLLEXT)
  107 +AC_SUBST(DLLPREFIX)
  108 +
  109 +dnl ---------------------------------------------------------------------------
  110 +dnl Check for other programs
  111 +dnl ---------------------------------------------------------------------------
  112 +
  113 +AC_PATH_TOOL([AR], [ar], [ar])
  114 +AC_PATH_TOOL([WINDRES], [windres], [no])
  115 +
  116 +PKG_CHECK_EXISTS
  117 +
  118 +dnl ---------------------------------------------------------------------------
  119 +dnl Version info
  120 +dnl ---------------------------------------------------------------------------
  121 +
  122 +AC_SUBST(PACKAGE_DESCRIPTION,"PW3270 IPC Compatible Module")
  123 +
  124 +app_vrs_major=$(echo $VERSION | cut -d. -f1)
  125 +app_vrs_minor=$(echo $VERSION | cut -d. -f2)
  126 +
  127 +AC_DEFINE_UNQUOTED(PACKAGE_MAJOR_VERSION, $app_vrs_major)
  128 +AC_DEFINE_UNQUOTED(PACKAGE_MINOR_VERSION, $app_vrs_minor)
  129 +
  130 +AC_SUBST(PACKAGE_MAJOR_VERSION,$app_vrs_major)
  131 +AC_SUBST(PACKAGE_MINOR_VERSION,$app_vrs_minor)
  132 +
  133 +AC_ARG_WITH([release], [AS_HELP_STRING([--with-release], [Set release])], [ app_cv_release="$withval" ],[ app_cv_release="`date +%y`.`date +%m`.`date +%d`" ])
  134 +
  135 +app_rls_major=$(echo $app_cv_release.0.0 | cut -d. -f1)
  136 +app_rls_minor=$(echo $app_cv_release.0.0 | cut -d. -f2)
  137 +
  138 +AC_DEFINE_UNQUOTED(PACKAGE_RELEASE, $app_cv_release)
  139 +AC_DEFINE_UNQUOTED(PACKAGE_MAJOR_RELEASE, $app_rls_major)
  140 +AC_DEFINE_UNQUOTED(PACKAGE_MINOR_RELEASE, $app_rls_minor)
  141 +
  142 +AC_SUBST(PACKAGE_RELEASE,$app_cv_release)
  143 +AC_SUBST(PACKAGE_MAJOR_RELEASE,$app_rls_major)
  144 +AC_SUBST(PACKAGE_MINOR_RELEASE,$app_rls_minor)
  145 +
  146 +dnl ---------------------------------------------------------------------------
  147 +dnl Check for libintl
  148 +dnl ---------------------------------------------------------------------------
  149 +
  150 +INTL_LIBS=""
  151 +
  152 +AC_PATH_TOOL([XGETTEXT], [xgettext], [no])
  153 +AC_PATH_TOOL([MSGCAT], [msgcat], [no])
  154 +AC_PATH_TOOL([MSGINIT], [msginit], [no])
  155 +AC_PATH_TOOL([MSGMERGE], [msgmerge], [no])
  156 +AC_PATH_TOOL([MSGFMT], [msgfmt], [no])
  157 +
  158 +AC_SUBST(INTL_LIBS)
  159 +
  160 +dnl ---------------------------------------------------------------------------
  161 +dnl Check for LIB3270
  162 +dnl ---------------------------------------------------------------------------
  163 +
  164 +PKG_CHECK_MODULES( [LIB3270], [lib3270], AC_DEFINE(HAVE_LIB3270), AC_MSG_ERROR([LIB3270 not present.]))
  165 +
  166 +AC_SUBST(LIB3270_LIBS)
  167 +AC_SUBST(LIB3270_CFLAGS)
  168 +
  169 +dnl ---------------------------------------------------------------------------
  170 +dnl Check for LIBV3270
  171 +dnl ---------------------------------------------------------------------------
  172 +
  173 +PKG_CHECK_MODULES( [V3270], [libv3270], AC_DEFINE(HAVE_V3270), AC_MSG_ERROR([V3270 not present.]))
  174 +
  175 +AC_SUBST(V3270_LIBS)
  176 +AC_SUBST(V3270_CFLAGS)
  177 +
  178 +dnl ---------------------------------------------------------------------------
  179 +dnl Check for GTK
  180 +dnl ---------------------------------------------------------------------------
  181 +
  182 +PKG_CHECK_MODULES( [GTK], [gtk+-3.0], AC_DEFINE(HAVE_GTK), AC_MSG_ERROR([GTK not present.]))
  183 +
  184 +AC_SUBST(GTK_LIBS)
  185 +AC_SUBST(GTK_CFLAGS)
  186 +
  187 +dnl ---------------------------------------------------------------------------
  188 +dnl Check for GLIB
  189 +dnl ---------------------------------------------------------------------------
  190 +
  191 +PKG_CHECK_MODULES( [GLIB], [glib-2.0 gobject-2.0 gmodule-2.0 gio-2.0], AC_DEFINE(HAVE_GLIB), AC_MSG_ERROR([GLIB not present.] ))
  192 +AC_SUBST(GLIB_LIBS)
  193 +AC_SUBST(GLIB_CFLAGS)
  194 +
  195 +dnl ---------------------------------------------------------------------------
  196 +dnl Check for D-Bus
  197 +dnl ---------------------------------------------------------------------------
  198 +
  199 +PKG_CHECK_MODULES( [DBUS], [dbus-1], app_cv_libdbus=yes, AC_MSG_NOTICE([ No DBUS support.]) )
  200 +AC_SUBST(DBUS_LIBS)
  201 +AC_SUBST(DBUS_CFLAGS)
  202 +
  203 +PKG_CHECK_MODULES( [GDBUS], [dbus-glib-1], app_cv_dbus=yes, AC_MSG_NOTICE([No GDBUS support.]) )
  204 +AC_SUBST(GDBUS_LIBS)
  205 +AC_SUBST(GDBUS_CFLAGS)
  206 +
  207 +dnl ---------------------------------------------------------------------------
  208 +dnl Check for pic
  209 +dnl ---------------------------------------------------------------------------
  210 +
  211 +AC_ARG_ENABLE([pic],
  212 + [AS_HELP_STRING([--disable-pic], [disable support for PIC libraries (required to compile on 64bits)])],
  213 +[
  214 + app_cv_pic="$enableval"
  215 +],[
  216 +
  217 + case "$host_cpu" in
  218 + x86_64)
  219 + app_cv_pic="yes"
  220 + ;;
  221 +
  222 + aarch64)
  223 + app_cv_pic="yes"
  224 + ;;
  225 +
  226 + *)
  227 + app_cv_pic="no"
  228 + esac
  229 +
  230 +])
  231 +
  232 +if test "$app_cv_pic" == "yes"; then
  233 + CFLAGS="$CFLAGS -fPIC"
  234 + CXXFLAGS="$CXXFLAGS -fPIC"
  235 +fi
  236 +
  237 +dnl ---------------------------------------------------------------------------
  238 +dnl Configure which files to generate.
  239 +dnl ---------------------------------------------------------------------------
  240 +
  241 +AC_CONFIG_FILES(Makefile)
  242 +
  243 +dnl ---------------------------------------------------------------------------
  244 +dnl Output the generated config.status script.
  245 +dnl ---------------------------------------------------------------------------
  246 +AC_SUBST(BASEDIR,$ac_pwd)
  247 +
  248 +AC_OUTPUT
  249 +
  250 +
... ...
src/dbus3270/daemon.c
... ... @@ -1,122 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como daemon.c e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - * Referencias:
31   - *
32   - * https://live.gnome.org/DBusGlibBindings
33   - *
34   - */
35   -
36   -#include <glib.h>
37   -#include <dbus/dbus.h>
38   -#include <dbus/dbus-glib-lowlevel.h>
39   -#include <dbus/dbus-glib.h>
40   -
41   -#include "daemon.h"
42   -#include "dbus-glue.h"
43   -
44   -#define PW3270_DBUS_SERVICE_PATH "/br/com/bb/pw3270"
45   -#define PW3270_DBUS_SERVICE "br.com.bb.pw3270"
46   -
47   -
48   -/*---[ Globals ]---------------------------------------------------------------------------------*/
49   -
50   - static DBusGConnection * connection = NULL;
51   - static DBusGProxy * proxy = NULL;
52   - static H3270 * hSession = NULL;
53   -
54   - GMainLoop * main_loop = NULL;
55   -
56   -
57   -/*---[ Implement ]-------------------------------------------------------------------------------*/
58   -
59   -static int initialize(void)
60   -{
61   - GError * error = NULL;
62   - guint result;
63   -
64   - connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
65   - if(error)
66   - {
67   - g_message("Error \"%s\" getting session dbus",error->message);
68   - g_error_free(error);
69   - return -1;
70   - }
71   -
72   - proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
73   -
74   - org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
75   -
76   - pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);
77   -
78   - return 0;
79   -}
80   -
81   -static void loghandler(H3270 *session, const char *module, int rc, const char *fmt, va_list args)
82   -{
83   - g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args);
84   -}
85   -
86   -int main(int numpar, char *param[])
87   -{
88   - g_type_init ();
89   -
90   - if (!g_thread_supported ())
91   - g_thread_init (NULL);
92   -
93   - dbus_g_thread_init ();
94   -
95   - lib3270_set_log_handler(loghandler);
96   - pw3270_dbus_register_io_handlers();
97   -
98   - hSession = lib3270_session_new("");
99   -
100   - main_loop = g_main_loop_new (NULL, FALSE);
101   -
102   - if(initialize())
103   - return -1;
104   -
105   - g_main_loop_run(main_loop);
106   -
107   - lib3270_session_free(hSession);
108   -
109   - return 0;
110   -}
111   -
112   -void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)
113   -{
114   - g_main_loop_quit(main_loop);
115   - dbus_g_method_return(context,0);
116   -}
117   -
118   -H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
119   -{
120   - return hSession;
121   -}
122   -
src/dbus3270/daemon.h
... ... @@ -1,46 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como daemon.c e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - * Referencias:
31   - *
32   - * https://live.gnome.org/DBusGlibBindings
33   - *
34   - */
35   -
36   - #include "service.h"
37   -
38   -/*---[ Globals ]---------------------------------------------------------------------------------*/
39   -
40   - G_GNUC_INTERNAL GMainLoop * main_loop;
41   -
42   -
43   -/*---[ Prototipes ]------------------------------------------------------------------------------*/
44   -
45   - G_GNUC_INTERNAL void pw3270_dbus_register_io_handlers(void);
46   -
src/dbus3270/globals.h
... ... @@ -1,59 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como globals.h e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - */
31   -
32   -#ifndef PW3270_DBUS_GLOBALS_H_INCLUDED
33   -
34   - #define PW3270_DBUS_GLOBALS_H_INCLUDED 1
35   -
36   - #include <libintl.h>
37   - #include <glib/gi18n.h>
38   -
39   - #include <errno.h>
40   - #include <lib3270.h>
41   - #include <lib3270/log.h>
42   - #include <glib.h>
43   -
44   - //
45   - // Disabling warning on unused-function defined in dbus-glib-bindings.h
46   - // warning: 'org_freedesktop_DBus_reload_config' defined but not used [-Wunused-function] ...
47   - //
48   - #pragma GCC diagnostic ignored "-Wunused-function"
49   -
50   - #include <dbus/dbus-glib.h>
51   - #include <dbus/dbus-glib-bindings.h>
52   - #include <dbus/dbus-glib-lowlevel.h>
53   -
54   - #define ERROR_DOMAIN g_quark_from_static_string("pw3270DBUS")
55   -
56   - G_GNUC_INTERNAL gpointer pw3270_dbus_register_object (DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path);
57   -
58   -
59   -#endif // PW3270_DBUS_GLOBALS_H_INCLUDED
src/dbus3270/gobject.c
... ... @@ -1,622 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como gobject.c e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - * Referencias:
31   - *
32   - * https://live.gnome.org/DBusGlibBindings
33   - *
34   - */
35   -
36   -#include <glib.h>
37   -#include <gtk/gtk.h>
38   -#include <dbus/dbus.h>
39   -#include <dbus/dbus-glib-lowlevel.h>
40   -#include <dbus/dbus-glib.h>
41   -
42   -#include <config.h>
43   -#include <lib3270.h>
44   -#include <pw3270.h>
45   -#include <v3270.h>
46   -#include <lib3270/actions.h>
47   -#include <lib3270/charset.h>
48   -
49   -#include "service.h"
50   -
51   -/*---[ Globals ]---------------------------------------------------------------------------------*/
52   -
53   -
54   -/*---[ Implement ]-------------------------------------------------------------------------------*/
55   -
56   -G_DEFINE_TYPE(PW3270Dbus, pw3270_dbus, G_TYPE_OBJECT)
57   -
58   -static void pw3270_dbus_finalize(GObject *object)
59   -{
60   - G_OBJECT_CLASS(pw3270_dbus_parent_class)->finalize (object);
61   -}
62   -
63   -
64   -static void pw3270_dbus_class_init(PW3270DbusClass *klass)
65   -{
66   - GObjectClass *object_class;
67   - object_class = G_OBJECT_CLASS (klass);
68   - object_class->finalize = pw3270_dbus_finalize;
69   -}
70   -
71   -static void pw3270_dbus_init(PW3270Dbus *object)
72   -{
73   -
74   -}
75   -
76   -PW3270Dbus * pw3270_dbus_new(void)
77   -{
78   - return g_object_new(PW3270_TYPE_DBUS, NULL);
79   -}
80   -
81   -void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context)
82   -{
83   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
84   -#ifdef PACKAGE_REVISION
85   - dbus_g_method_return(context,PACKAGE_REVISION);
86   -#else
87   - dbus_g_method_return(context,BUILD_DATE);
88   -#endif
89   -}
90   -
91   -void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)
92   -{
93   - H3270 *hSession = pw3270_dbus_get_session_handle(PW3270_DBUS(object));
94   -
95   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
96   -
97   - if(uri && *uri)
98   - {
99   - lib3270_set_url(hSession,uri);
100   - g_message("Connecting to \"%s\" by remote request",lib3270_get_url(hSession));
101   - }
102   - else
103   - {
104   - g_message("%s","Connecting by remote request");
105   - }
106   -
107   - dbus_g_method_return(context,lib3270_reconnect(hSession,0));
108   -}
109   -
110   -void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)
111   -{
112   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
113   -
114   - g_message("Changing host to \"%s\" by remote request",uri);
115   -
116   - dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) != 0);
117   -}
118   -
119   -void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context)
120   -{
121   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
122   - dbus_g_method_return(context,lib3270_get_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object))));
123   -}
124   -
125   -
126   -void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context)
127   -{
128   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
129   -
130   - g_message("Disconnecting by remote request");
131   - lib3270_disconnect(pw3270_dbus_get_session_handle(object));
132   - dbus_g_method_return(context,0);
133   -}
134   -
135   -void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context)
136   -{
137   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
138   - dbus_g_method_return(context,lib3270_get_program_message(pw3270_dbus_get_session_handle(object)));
139   -}
140   -
141   -void pw3270_dbus_get_connection_state(PW3270Dbus *object, DBusGMethodInvocation *context)
142   -{
143   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
144   - dbus_g_method_return(context,lib3270_get_connection_state(pw3270_dbus_get_session_handle(object)));
145   -}
146   -
147   -void pw3270_dbus_get_secure_state(PW3270Dbus *object, DBusGMethodInvocation *context)
148   -{
149   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
150   - dbus_g_method_return(context,lib3270_get_secure(pw3270_dbus_get_session_handle(object)));
151   -}
152   -
153   -GError * pw3270_dbus_get_error_from_errno(int code)
154   -{
155   - return g_error_new(ERROR_DOMAIN,code,"%s",g_strerror(code));
156   -}
157   -
158   -int pw3270_dbus_check_valid_state(PW3270Dbus *object, DBusGMethodInvocation *context)
159   -{
160   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
161   - GError * error = NULL;
162   -
163   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
164   -
165   - if(!lib3270_is_connected(hSession))
166   - {
167   - error = pw3270_dbus_get_error_from_errno(ENOTCONN);
168   - }
169   - else
170   - {
171   - LIB3270_MESSAGE state = lib3270_get_program_message(hSession);
172   -
173   - switch(state)
174   - {
175   - case LIB3270_MESSAGE_NONE:
176   - return 0;
177   -
178   - case LIB3270_MESSAGE_DISCONNECTED:
179   - error = pw3270_dbus_get_error_from_errno(ENOTCONN);
180   - break;
181   -
182   - case LIB3270_MESSAGE_MINUS:
183   - case LIB3270_MESSAGE_PROTECTED:
184   - case LIB3270_MESSAGE_NUMERIC:
185   - case LIB3270_MESSAGE_OVERFLOW:
186   - case LIB3270_MESSAGE_INHIBIT:
187   - case LIB3270_MESSAGE_KYBDLOCK:
188   - case LIB3270_MESSAGE_X:
189   - error = g_error_new(ERROR_DOMAIN,-1,_( "State %04d can't accept requests" ),state);
190   - break;
191   -
192   - case LIB3270_MESSAGE_SYSWAIT:
193   - case LIB3270_MESSAGE_TWAIT:
194   - case LIB3270_MESSAGE_CONNECTED:
195   - case LIB3270_MESSAGE_AWAITING_FIRST:
196   - error = pw3270_dbus_get_error_from_errno(EBUSY);
197   - break;
198   -
199   - case LIB3270_MESSAGE_RESOLVING:
200   - case LIB3270_MESSAGE_CONNECTING:
201   - error = g_error_new(ERROR_DOMAIN,EINPROGRESS,_( "Connecting to host" ));
202   -
203   - case LIB3270_MESSAGE_USER:
204   - error = g_error_new(ERROR_DOMAIN,-1,_( "Unexpected state %04d" ),state);
205   - }
206   - }
207   -
208   - if(error)
209   - {
210   - dbus_g_method_return_error(context,error);
211   - g_error_free(error);
212   - return -1;
213   - }
214   -
215   - return 0;
216   -}
217   -
218   -void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context)
219   -{
220   - char * text;
221   - gchar * utftext;
222   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
223   -
224   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
225   -
226   - if(pw3270_dbus_check_valid_state(object,context))
227   - return;
228   -
229   - text = lib3270_get_string_at_address(hSession,0,-1,'\n');
230   -
231   - utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
232   -
233   - lib3270_free(text);
234   -
235   - dbus_g_method_return(context,utftext);
236   -
237   - g_free(utftext);
238   -
239   -}
240   -
241   -void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context)
242   -{
243   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
244   - if(pw3270_dbus_check_valid_state(object,context))
245   - return;
246   - dbus_g_method_return(context,lib3270_enter(pw3270_dbus_get_session_handle(object)));
247   -}
248   -
249   -void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, DBusGMethodInvocation *context)
250   -{
251   - gchar * text;
252   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
253   -
254   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
255   - if(pw3270_dbus_check_valid_state(object,context))
256   - return;
257   -
258   - text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
259   -
260   - int sz = lib3270_set_string_at(hSession,row,col,(const unsigned char *) text);
261   -
262   - trace("%s returns %d",__FUNCTION__,sz);
263   - dbus_g_method_return(context,sz);
264   -
265   - g_free(text);
266   -}
267   -
268   -void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context)
269   -{
270   - gchar * text;
271   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
272   -
273   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
274   - if(pw3270_dbus_check_valid_state(object,context))
275   - return;
276   -
277   - text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
278   -
279   - dbus_g_method_return(context,lib3270_emulate_input(hSession,(const char *) text,-1,1));
280   -
281   - g_free(text);
282   -}
283   -
284   -
285   -void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context)
286   -{
287   - gchar * text;
288   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
289   -
290   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
291   - if(pw3270_dbus_check_valid_state(object,context))
292   - return;
293   -
294   - text = lib3270_get_string_at(hSession, row, col, len, lf);
295   - if(!text)
296   - {
297   - GError *error = pw3270_dbus_get_error_from_errno(errno);
298   - dbus_g_method_return_error(context,error);
299   - g_error_free(error);
300   - }
301   - else
302   - {
303   - gchar * utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
304   -
305   - lib3270_free(text);
306   -
307   - dbus_g_method_return(context,utftext);
308   -
309   - g_free(utftext);
310   - }
311   - }
312   -
313   - void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, char lf, DBusGMethodInvocation *context)
314   - {
315   - gchar * text;
316   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
317   -
318   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
319   - if(pw3270_dbus_check_valid_state(object,context))
320   - return;
321   -
322   - if(len < 0) {
323   - len = lib3270_get_length(hSession);
324   - }
325   -
326   - text = lib3270_get_string_at_address(hSession,offset,len,lf);
327   - if(!text)
328   - {
329   - GError *error = pw3270_dbus_get_error_from_errno(errno);
330   - dbus_g_method_return_error(context,error);
331   - g_error_free(error);
332   - }
333   - else
334   - {
335   - gchar * utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
336   -
337   - lib3270_free(text);
338   -
339   - debug("\n%s\n",utftext);
340   -
341   - dbus_g_method_return(context,utftext);
342   -
343   - g_free(utftext);
344   - }
345   -
346   - }
347   -
348   - void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context)
349   - {
350   - trace("%s object=%p context=%p connected=%s",__FUNCTION__,object,context, lib3270_is_connected(pw3270_dbus_get_session_handle(object)) ? "Yes" : "No");
351   - dbus_g_method_return(context,lib3270_is_connected(pw3270_dbus_get_session_handle(object)));
352   - }
353   -
354   - void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context)
355   - {
356   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
357   - dbus_g_method_return(context,lib3270_is_ready(pw3270_dbus_get_session_handle(object)));
358   - }
359   -
360   - void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context)
361   - {
362   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
363   - dbus_g_method_return(context,lib3270_in_tn3270e(pw3270_dbus_get_session_handle(object)));
364   - }
365   -
366   - void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context)
367   - {
368   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
369   - dbus_g_method_return(context,lib3270_wait_for_ready(pw3270_dbus_get_session_handle(object),timeout));
370   - }
371   -
372   - void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context)
373   - {
374   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
375   - dbus_g_method_return(context,lib3270_set_cursor_position(pw3270_dbus_get_session_handle(object),row,col));
376   - }
377   -
378   - void pw3270_dbus_set_cursor_address(PW3270Dbus *object, int addr, DBusGMethodInvocation *context)
379   - {
380   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
381   - dbus_g_method_return(context,lib3270_set_cursor_address(pw3270_dbus_get_session_handle(object),addr));
382   - }
383   -
384   - void pw3270_dbus_get_cursor_address(PW3270Dbus *object, DBusGMethodInvocation *context)
385   - {
386   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
387   - dbus_g_method_return(context,lib3270_get_cursor_address(pw3270_dbus_get_session_handle(object)));
388   - }
389   -
390   - void pw3270_dbus_get_screen_width(PW3270Dbus *object, DBusGMethodInvocation *context)
391   - {
392   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
393   - dbus_g_method_return(context,lib3270_get_width(pw3270_dbus_get_session_handle(object)));
394   - }
395   -
396   - void pw3270_dbus_get_screen_height(PW3270Dbus *object, DBusGMethodInvocation *context)
397   - {
398   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
399   - dbus_g_method_return(context,lib3270_get_height(pw3270_dbus_get_session_handle(object)));
400   - }
401   -
402   - void pw3270_dbus_get_screen_length(PW3270Dbus *object, DBusGMethodInvocation *context)
403   - {
404   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
405   - dbus_g_method_return(context,lib3270_get_width(pw3270_dbus_get_session_handle(object)));
406   - }
407   -
408   - void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context)
409   - {
410   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
411   - dbus_g_method_return(context,lib3270_set_toggle(pw3270_dbus_get_session_handle(object),id,value));
412   - }
413   -
414   -void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, char lf, DBusGMethodInvocation *context)
415   -{
416   - gchar * text;
417   - H3270 * hSession = pw3270_dbus_get_session_handle(object);
418   -
419   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
420   - if(pw3270_dbus_check_valid_state(object,context))
421   - return;
422   -
423   - text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
424   -
425   - dbus_g_method_return(context,lib3270_cmp_text_at(hSession,row,col,text,lf));
426   -
427   - g_free(text);
428   -}
429   -
430   -void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
431   -{
432   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
433   - if(pw3270_dbus_check_valid_state(object,context))
434   - return;
435   - dbus_g_method_return(context,lib3270_pfkey(pw3270_dbus_get_session_handle(object),key));
436   -}
437   -
438   -void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
439   -{
440   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
441   - if(pw3270_dbus_check_valid_state(object,context))
442   - return;
443   - dbus_g_method_return(context,lib3270_pakey(pw3270_dbus_get_session_handle(object),key));
444   -}
445   -
446   - void pw3270_dbus_get_field_start(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
447   - {
448   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
449   - dbus_g_method_return(context,lib3270_get_field_start(pw3270_dbus_get_session_handle(object),baddr));
450   - }
451   -
452   - void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
453   - {
454   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
455   - dbus_g_method_return(context,lib3270_get_field_len(pw3270_dbus_get_session_handle(object),baddr));
456   - }
457   -
458   - void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
459   - {
460   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
461   - dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr));
462   - }
463   -
464   - void pw3270_dbus_get_is_protected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
465   - {
466   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
467   - dbus_g_method_return(context,lib3270_get_is_protected(pw3270_dbus_get_session_handle(object),baddr));
468   - }
469   -
470   - void pw3270_dbus_get_is_protected_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context)
471   - {
472   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
473   - dbus_g_method_return(context,lib3270_get_is_protected_at(pw3270_dbus_get_session_handle(object),row,col));
474   - }
475   -
476   - void pw3270_dbus_action(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context)
477   - {
478   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
479   - dbus_g_method_return(context,lib3270_action(pw3270_dbus_get_session_handle(object),text));
480   - }
481   -
482   - void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context)
483   - {
484   - gchar *text;
485   -
486   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
487   -
488   - if(pw3270_dbus_check_valid_state(object,context))
489   - return;
490   -
491   - text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD));
492   -
493   - trace("Clipboard:\n%s\n",text);
494   -
495   - if(!text)
496   - {
497   - GError *error = pw3270_dbus_get_error_from_errno(ENOENT);
498   - dbus_g_method_return_error(context,error);
499   - g_error_free(error);
500   - }
501   - else
502   - {
503   - dbus_g_method_return(context,text);
504   - g_free(text);
505   - }
506   -}
507   -
508   -void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context)
509   -{
510   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
511   - gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1);
512   - dbus_g_method_return(context,0);
513   -}
514   -
515   -void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context)
516   -{
517   - GtkWidget *widget = pw3270_get_terminal_widget(NULL);
518   -
519   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
520   -
521   - if(!widget)
522   - {
523   - GError *error = pw3270_dbus_get_error_from_errno(EINVAL);
524   - dbus_g_method_return_error(context,error);
525   - g_error_free(error);
526   - return;
527   - }
528   -
529   - dbus_g_method_return(context,v3270_set_script(widget,mode == 0 ? 0 : 'S'));
530   -}
531   -
532   -void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context)
533   -{
534   - lib3270_popup_dialog(pw3270_dbus_get_session_handle(object), (LIB3270_NOTIFY) id , title, msg, "%s", text);
535   - dbus_g_method_return(context,0);
536   -}
537   -
538   -void pw3270_dbus_get_host_charset(PW3270Dbus *object, DBusGMethodInvocation *context)
539   -{
540   - dbus_g_method_return(context,lib3270_get_host_charset(pw3270_dbus_get_session_handle(object)));
541   -}
542   -
543   -void pw3270_dbus_get_display_charset(PW3270Dbus *object, DBusGMethodInvocation *context)
544   -{
545   - // Allways return UTF-8 to avoid double conversion
546   - dbus_g_method_return(context,"UTF-8");
547   -}
548   -
549   -void pw3270_dbus_set_host_charset(PW3270Dbus *object, const gchar *charset, DBusGMethodInvocation *context)
550   -{
551   - dbus_g_method_return(context,lib3270_set_host_charset(pw3270_dbus_get_session_handle(object),charset));
552   -}
553   -
554   -void pw3270_dbus_erase_eof(PW3270Dbus *object, DBusGMethodInvocation *context)
555   -{
556   - trace("%s object=%p context=%p",__FUNCTION__,object,context);
557   - dbus_g_method_return(context,lib3270_eraseeof(pw3270_dbus_get_session_handle(object)));
558   -}
559   -
560   -void pw3270_dbus_print(PW3270Dbus *object, DBusGMethodInvocation *context)
561   -{
562   - dbus_g_method_return(context,lib3270_print_all(pw3270_dbus_get_session_handle(object)));
563   -}
564   -
565   -void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context)
566   -{
567   - lib3270_set_unlock_delay(pw3270_dbus_get_session_handle(object),(unsigned short) value);
568   - dbus_g_method_return(context,0);
569   -}
570   -
571   -
572   -void pw3270_dbus_ebc2asc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context)
573   -{
574   - int sz = strlen(from);
575   -
576   - if(sz > 0)
577   - {
578   - unsigned char buffer[sz+1];
579   - memcpy(buffer,from,sz);
580   - dbus_g_method_return(context,lib3270_ebc2asc(pw3270_dbus_get_session_handle(object),buffer,sz));
581   - return;
582   - }
583   -
584   - dbus_g_method_return(context,"");
585   -
586   -}
587   -
588   -void pw3270_dbus_asc2ebc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context)
589   -{
590   - int sz = strlen(from);
591   -
592   - if(sz > 0)
593   - {
594   - unsigned char buffer[sz+1];
595   - memcpy(buffer,from,sz);
596   - dbus_g_method_return(context,lib3270_asc2ebc(pw3270_dbus_get_session_handle(object),buffer,sz));
597   - return;
598   - }
599   -
600   - dbus_g_method_return(context,"");
601   -
602   -}
603   -
604   -void pw3270_dbus_filetransfer(PW3270Dbus *object, const gchar *local, const gchar *remote, int flags, int lrecl, int blksize, int primspace, int secspace, int dft, DBusGMethodInvocation *context)
605   -{
606   - /*
607   - dbus_g_method_return(context,
608   - v3270_transfer_file(
609   - v3270_get_default_widget(),
610   - (LIB3270_FT_OPTION) flags,
611   - local,
612   - remote,
613   - lrecl,
614   - blksize,
615   - primspace,
616   - secspace,
617   - dft
618   - ));
619   - */
620   - return;
621   -}
622   -
src/dbus3270/iocallback.c
... ... @@ -1,361 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como iocallback.c e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - */
31   -
32   -#if defined(_WIN32) /*[*/
33   - #include <windows.h>
34   -#elif defined(__APPLE__)
35   - #include <poll.h>
36   - #include <string.h>
37   -#else
38   - #include <poll.h>
39   - #include <string.h>
40   -#endif /*]*/
41   -
42   -#include <stdio.h>
43   -#include <glib.h>
44   -#include "daemon.h"
45   -
46   -static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm);
47   -static void static_RemoveSource(void *id);
48   -
49   -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session));
50   -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session));
51   -
52   -static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session));
53   -static void static_RemoveTimeOut(void * timer);
54   -static int static_Sleep(H3270 *hSession, int seconds);
55   -static int static_RunPendingEvents(H3270 *hSession, int wait);
56   -
57   -static gboolean IO_prepare(GSource *source, gint *timeout);
58   -static gboolean IO_check(GSource *source);
59   -static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data);
60   -static void IO_finalize(GSource *source); /* Can be NULL */
61   -static gboolean IO_closure(gpointer data);
62   -
63   -/*---[ Structs ]-------------------------------------------------------------------------------------------*/
64   -
65   - typedef struct _IO_Source
66   - {
67   - GSource gsrc;
68   - GPollFD poll;
69   -#if defined(_WIN32)
70   - HANDLE source;
71   -#else
72   - int source;
73   -#endif // _WIN32
74   - void (*fn)(H3270 *session);
75   - H3270 *session;
76   - } IO_Source;
77   -
78   - typedef struct _timer
79   - {
80   - unsigned char remove;
81   - void (*fn)(H3270 *session);
82   - H3270 *session;
83   - } TIMER;
84   -
85   - static GSourceFuncs IOSources =
86   - {
87   - IO_prepare,
88   - IO_check,
89   - IO_dispatch,
90   - IO_finalize,
91   - IO_closure,
92   - NULL
93   - };
94   -
95   -/*---[ Implement ]-----------------------------------------------------------------------------------------*/
96   -
97   -#ifdef _WIN32
98   -static void * AddSource(HANDLE source, H3270 *session, gushort events, void (*fn)(H3270 *session))
99   -#else
100   -static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session))
101   -#endif // _WIN32
102   -{
103   - IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source));
104   -
105   - src->source = source;
106   - src->fn = fn;
107   - src->poll.fd = (int) source;
108   - src->poll.events = events;
109   - src->session = session;
110   -
111   - g_source_attach((GSource *) src,NULL);
112   - g_source_add_poll((GSource *) src,&src->poll);
113   -
114   - return src;
115   -}
116   -
117   -#ifdef _WIN32
118   -static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
119   -#else
120   -static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session))
121   -#endif // _WIN32
122   -{
123   - return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn);
124   -}
125   -
126   -static void static_RemoveSource(void *id)
127   -{
128   - if(id)
129   - g_source_destroy((GSource *) id);
130   -}
131   -
132   -#if defined(_WIN32)
133   -static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
134   -{
135   - return 0;
136   -}
137   -#else
138   -static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session))
139   -{
140   - return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn);
141   -}
142   -#endif // _WIN32
143   -
144   -static gboolean do_timer(TIMER *t)
145   -{
146   - if(!t->remove)
147   - t->fn(t->session);
148   - return FALSE;
149   -}
150   -
151   -static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session))
152   -{
153   - TIMER *t = g_malloc0(sizeof(TIMER));
154   -
155   - t->fn = proc;
156   - t->session = session;
157   -
158   - g_timeout_add_full(G_PRIORITY_DEFAULT, (guint) interval, (GSourceFunc) do_timer, t, g_free);
159   -
160   - return t;
161   -}
162   -
163   -static void static_RemoveTimeOut(void * timer)
164   -{
165   - ((TIMER *) timer)->remove++;
166   -}
167   -
168   -static gboolean IO_prepare(GSource *source, gint *timeout)
169   -{
170   - /*
171   - * Called before all the file descriptors are polled.
172   - * If the source can determine that it is ready here
173   - * (without waiting for the results of the poll() call)
174   - * it should return TRUE.
175   - *
176   - * It can also return a timeout_ value which should be the maximum
177   - * timeout (in milliseconds) which should be passed to the poll() call.
178   - * The actual timeout used will be -1 if all sources returned -1,
179   - * or it will be the minimum of all the timeout_ values
180   - * returned which were >= 0.
181   - *
182   - */
183   - return 0;
184   -}
185   -
186   -static gboolean IO_check(GSource *source)
187   -{
188   - /*
189   - * Called after all the file descriptors are polled.
190   - * The source should return TRUE if it is ready to be dispatched.
191   - * Note that some time may have passed since the previous prepare
192   - * function was called, so the source should be checked again here.
193   - *
194   - */
195   -#if defined(_WIN32) /*[*/
196   -
197   - if(WaitForSingleObject(((IO_Source *) source)->source,0) == WAIT_OBJECT_0)
198   - return TRUE;
199   -
200   -#else /*][*/
201   -
202   - struct pollfd fds;
203   -
204   - memset(&fds,0,sizeof(fds));
205   -
206   - fds.fd = ((IO_Source *) source)->poll.fd;
207   - fds.events = ((IO_Source *) source)->poll.events;
208   -
209   - if(poll(&fds,1,0) > 0)
210   - return TRUE;
211   -
212   -#endif /*]*/
213   -
214   - return FALSE;
215   -}
216   -
217   -static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data)
218   -{
219   - /*
220   - * Called to dispatch the event source,
221   - * after it has returned TRUE in either its prepare or its check function.
222   - * The dispatch function is passed in a callback function and data.
223   - * The callback function may be NULL if the source was never connected
224   - * to a callback using g_source_set_callback(). The dispatch function
225   - * should call the callback function with user_data and whatever additional
226   - * parameters are needed for this type of event source.
227   - */
228   - ((IO_Source *) source)->fn(((IO_Source *) source)->session);
229   - return TRUE;
230   -}
231   -
232   -static void IO_finalize(GSource *source)
233   -{
234   -
235   -}
236   -
237   -static gboolean IO_closure(gpointer data)
238   -{
239   - return 0;
240   -}
241   -
242   -struct bgParameter
243   -{
244   - gboolean running;
245   - gboolean timer;
246   - H3270 *session;
247   - int rc;
248   - int(*callback)(H3270 *session, void *);
249   - void *parm;
250   -
251   -};
252   -
253   -gpointer BgCall(struct bgParameter *p)
254   -{
255   -// trace("%s starts",__FUNCTION__);
256   - p->rc = p->callback(p->session, p->parm);
257   - p->running = FALSE;
258   -// trace("%s ends",__FUNCTION__);
259   - return 0;
260   -}
261   -
262   -static gboolean wait_for_thread(struct bgParameter *p)
263   -{
264   - if(!p->running)
265   - {
266   - p->timer = 0;
267   - return FALSE;
268   - }
269   - return TRUE;
270   -}
271   -
272   -static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm)
273   -{
274   - struct bgParameter p = { TRUE, TRUE, session, -1, callback, parm };
275   - GThread * thread;
276   -
277   -// trace("Starting auxiliary thread for callback %p",callback);
278   -
279   - p.running = TRUE;
280   - p.timer = TRUE;
281   -
282   - thread = g_thread_create( (GThreadFunc) BgCall, &p, 0, NULL);
283   -
284   - if(!thread)
285   - {
286   - g_error("Can't start background thread");
287   - return -1;
288   - }
289   -
290   - g_timeout_add(50,(GSourceFunc) wait_for_thread,(gpointer) &p);
291   -
292   - while(p.timer)
293   - g_main_context_iteration(g_main_loop_get_context(main_loop),TRUE);
294   -
295   - return p.rc;
296   -}
297   -
298   -static int static_Sleep(H3270 *hSession, int seconds)
299   -{
300   - time_t end = time(0) + seconds;
301   -
302   - while(time(0) < end)
303   - g_main_iteration(TRUE);
304   -
305   - return 0;
306   -}
307   -
308   -static int static_RunPendingEvents(H3270 *hSession, int wait)
309   -{
310   - GMainContext *context = g_main_loop_get_context(main_loop);
311   - int rc = 0;
312   - while(g_main_context_pending(context))
313   - {
314   - rc = 1;
315   - g_main_context_iteration(context,FALSE);
316   - }
317   -
318   - if(wait)
319   - g_main_context_iteration(context,TRUE);
320   -
321   - return rc;
322   -}
323   -
324   -static void beep(H3270 *session)
325   -{
326   -}
327   -
328   -void pw3270_dbus_register_io_handlers(void)
329   -{
330   - static const struct lib3270_callbacks hdl =
331   - {
332   - sizeof(struct lib3270_callbacks),
333   -
334   - static_AddTimeOut,
335   - static_RemoveTimeOut,
336   -
337   - static_AddInput,
338   - static_RemoveSource,
339   -
340   - static_AddExcept,
341   -
342   -#ifdef G_THREADS_ENABLED
343   - static_CallAndWait,
344   -#else
345   - NULL,
346   -#endif
347   -
348   - static_Sleep,
349   - static_RunPendingEvents,
350   - beep
351   -
352   - };
353   -
354   - #error Need rewrite
355   -
356   - if(lib3270_register_handlers(&hdl))
357   - {
358   - g_error("%s","Can't set lib3270 I/O handlers");
359   - }
360   -
361   -}
src/dbus3270/main.c
... ... @@ -1,172 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como main.c e possui - linhas de código.
22   - *
23   - * Referências:
24   - *
25   - * https://github.com/fbuihuu/samples-dbus/blob/master/dbus-server.c
26   - *
27   - * Contatos:
28   - *
29   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
30   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
31   - *
32   - */
33   -
34   -#include <glib.h>
35   -#include <dbus/dbus.h>
36   -#include <dbus/dbus-glib-lowlevel.h>
37   -#include <dbus/dbus-glib.h>
38   -
39   -#include <pw3270.h>
40   -#include <pw3270/plugin.h>
41   -
42   -#include "service.h"
43   -#include "dbus-glue.h"
44   -
45   -#include <gtk/gtk.h>
46   -
47   -/*---[ Globals ]---------------------------------------------------------------------------------*/
48   -
49   - static DBusGConnection * connection = NULL;
50   - static DBusGProxy * proxy = NULL;
51   - static gchar * service_name = NULL;
52   -
53   -
54   -/*---[ Implement ]-------------------------------------------------------------------------------*/
55   -
56   - LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal)
57   - {
58   -
59   - GError * error = NULL;
60   - guint result;
61   - char session_id = 0;
62   - char id = 'a';
63   -
64   - connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
65   - if(error)
66   - {
67   - GtkWidget *dialog = gtk_message_dialog_new(
68   - GTK_WINDOW(window),
69   - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
70   - GTK_MESSAGE_ERROR,
71   - GTK_BUTTONS_OK,
72   - _( "Can't connect to DBUS server" ));
73   -
74   - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
75   -
76   - g_message("Error \"%s\" getting session dbus",error->message);
77   -
78   - g_error_free(error);
79   -
80   - gtk_dialog_run(GTK_DIALOG(dialog));
81   - gtk_widget_destroy(dialog);
82   -
83   - return -1;
84   - }
85   -
86   - proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
87   -
88   - for(id='a'; id < 'z' && !error && !service_name; id++)
89   - {
90   - gboolean has_owner = FALSE;
91   -
92   - service_name = g_strdup_printf("br.com.bb.%s.%c",pw3270_get_session_name(window),(int) id);
93   -
94   - org_freedesktop_DBus_name_has_owner(proxy, service_name, &has_owner, NULL);
95   -
96   - if(has_owner)
97   - {
98   - trace("Service \"%s\" has owner",service_name)
99   - g_free(service_name);
100   - service_name = NULL;
101   - }
102   - else
103   - {
104   - session_id = id;
105   - g_message("DBUS service name is %s",service_name);
106   - org_freedesktop_DBus_request_name(proxy, service_name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
107   - }
108   - }
109   -
110   - if(error)
111   - {
112   - GtkWidget *dialog = gtk_message_dialog_new(
113   - GTK_WINDOW(window),
114   - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
115   - GTK_MESSAGE_ERROR,
116   - GTK_BUTTONS_OK,
117   - _( "Can't get DBUS object name" ));
118   -
119   - gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
120   -
121   - g_message("Error \"%s\" requesting DBUS name",error->message);
122   -
123   - g_error_free(error);
124   -
125   - gtk_dialog_run(GTK_DIALOG(dialog));
126   - gtk_widget_destroy(dialog);
127   -
128   - return -1;
129   - }
130   -
131   - if(session_id)
132   - {
133   - gchar * path = g_strdup_printf("/br/com/bb/%s",pw3270_get_session_name(window));
134   - gchar * session = g_strdup_printf("%s:%c",pw3270_get_session_name(window),g_ascii_toupper(session_id));
135   - pw3270_set_session_name(window,session);
136   - g_free(session);
137   -
138   - g_message("DBUS service path is %s",path);
139   -
140   - pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,path);
141   -
142   - g_free(path);
143   - }
144   -
145   - return 0;
146   - }
147   -
148   - LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal)
149   - {
150   - if(service_name)
151   - {
152   - // org_freedesktop_DBus_release_name
153   -
154   - g_free(service_name);
155   - service_name = NULL;
156   - }
157   - return 0;
158   - }
159   -
160   - void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)
161   - {
162   - gtk_main_quit();
163   - dbus_g_method_return(context,0);
164   - }
165   -
166   - H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
167   - {
168   - return lib3270_get_default_session_handle();
169   - }
170   -
171   -
172   -
src/dbus3270/misc.c
... ... @@ -1,47 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como misc.c e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - * Referencias:
31   - *
32   - * https://live.gnome.org/DBusGlibBindings
33   - *
34   - */
35   -
36   -#include "globals.h"
37   -
38   -/*---[ Implement ]-------------------------------------------------------------------------------*/
39   -
40   -gpointer pw3270_dbus_register_object(DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path)
41   -{
42   - GObject *object = g_object_new (object_type, NULL);
43   - dbus_g_object_type_install_info (object_type, info);
44   - dbus_g_connection_register_g_object (connection, path, object);
45   - return object;
46   -}
47   -
src/dbus3270/service.h
... ... @@ -1,138 +0,0 @@
1   -/*
2   - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
3   - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
4   - * aplicativos mainframe. Registro no INPI sob o nome G3270.
5   - *
6   - * Copyright (C) <2008> <Banco do Brasil S.A.>
7   - *
8   - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
9   - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
10   - * Free Software Foundation.
11   - *
12   - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
13   - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
14   - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
15   - * obter mais detalhes.
16   - *
17   - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
18   - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
19   - * St, Fifth Floor, Boston, MA 02110-1301 USA
20   - *
21   - * Este programa está nomeado como service.h e possui - linhas de código.
22   - *
23   - * Contatos:
24   - *
25   - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
26   - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
27   - * licinio@bb.com.br (Licínio Luis Branco)
28   - * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
29   - *
30   - */
31   -
32   -#ifndef _PW3270_DBUS_SERVICE_H
33   -
34   - #define _PW3270_DBUS_SERVICE_H 1
35   -
36   - #define ENABLE_NLS
37   - #define GETTEXT_PACKAGE PACKAGE_NAME
38   -
39   - #include "globals.h"
40   -
41   - #define PW3270_TYPE_DBUS (pw3270_dbus_get_type ())
42   - #define PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PW3270_TYPE_DBUS, PW3270Dbus))
43   - #define PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_DBUS, PW3270DbusClass))
44   - #define IS_PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PW3270_TYPE_DBUS))
45   - #define IS_PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_DBUS))
46   - #define PW3270_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_DBUS, PW3270DbusClass))
47   -
48   - G_BEGIN_DECLS
49   -
50   - typedef struct _PW3270Dbus PW3270Dbus;
51   - typedef struct _PW3270DbusClass PW3270DbusClass;
52   -
53   - struct _PW3270Dbus
54   - {
55   - GObject parent;
56   - };
57   -
58   - struct _PW3270DbusClass
59   - {
60   - GObjectClass parent;
61   - };
62   -
63   - PW3270Dbus * pw3270_dbus_new (void);
64   - GType pw3270_dbus_get_type (void);
65   -
66   - void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context);
67   - void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context);
68   - void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);
69   - void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context);
70   - void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);
71   - void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context);
72   -
73   - void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context);
74   - void pw3270_dbus_get_connection_state(PW3270Dbus *object, DBusGMethodInvocation *context);
75   - void pw3270_dbus_get_secure_state(PW3270Dbus *object, DBusGMethodInvocation *context);
76   -
77   - void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context);
78   - H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object);
79   - GError * pw3270_dbus_get_error_from_errno(int code);
80   -
81   - void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context);
82   - void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context);
83   - void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context);
84   -
85   - void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context);
86   - void pw3270_dbus_set_cursor_address(PW3270Dbus *object, int addr, DBusGMethodInvocation *context);
87   - void pw3270_dbus_get_cursor_address(PW3270Dbus *object, DBusGMethodInvocation *context);
88   -
89   - void pw3270_dbus_get_screen_width(PW3270Dbus *object, DBusGMethodInvocation *context);
90   - void pw3270_dbus_get_screen_height(PW3270Dbus *object, DBusGMethodInvocation *context);
91   - void pw3270_dbus_get_screen_length(PW3270Dbus *object, DBusGMethodInvocation *context);
92   -
93   - void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context);
94   -
95   - void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context);
96   -
97   - void pw3270_dbus_get_field_start(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
98   - void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
99   - void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
100   -
101   - void pw3270_dbus_get_is_protected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
102   - void pw3270_dbus_get_is_protected_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context);
103   -
104   - void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context);
105   -
106   - void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context);
107   -
108   - void pw3270_dbus_action(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context);
109   -
110   - // Actions
111   - void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context);
112   - void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
113   - void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
114   - void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context);
115   - void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context);
116   - void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, char lf, DBusGMethodInvocation *context);
117   - void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, char lf, DBusGMethodInvocation *context);
118   - void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context);
119   -
120   - void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context);
121   - void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context);
122   -
123   - void pw3270_dbus_get_display_charset(PW3270Dbus *object, DBusGMethodInvocation *context);
124   - void pw3270_dbus_get_host_charset(PW3270Dbus *object, DBusGMethodInvocation *context);
125   - void pw3270_dbus_set_host_charset(PW3270Dbus *object, const gchar *charset, DBusGMethodInvocation *context);
126   - void pw3270_dbus_erase_eof(PW3270Dbus *object, DBusGMethodInvocation *context);
127   - void pw3270_dbus_print(PW3270Dbus *object, DBusGMethodInvocation *context);
128   -
129   - void pw3270_dbus_asc2ebc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context);
130   - void pw3270_dbus_ebc2asc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context);
131   -
132   - void pw3270_dbus_filetransfer(PW3270Dbus *object, const gchar *local, const gchar *remote, int flags, int lrecl, int blksize, int primspace, int secspace, int dft, DBusGMethodInvocation *context);
133   -
134   - void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context);
135   -
136   - G_END_DECLS
137   -
138   -#endif // _PW3270_DBUS_SERVICE_H
src/include/config.h.in 0 → 100644
... ... @@ -0,0 +1,41 @@
  1 +/*
  2 + * "Software G3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como config.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas de Mendonça)
  27 + *
  28 + */
  29 +
  30 +#ifndef LIBV3270_CONFIG_INCLUDED
  31 +
  32 + #define LIBV3270_CONFIG_INCLUDED 1
  33 +
  34 + #undef PACKAGE_NAME
  35 + #undef PACKAGE_VERSION
  36 + #undef PACKAGE_RELEASE
  37 +
  38 + #undef HAVE_GNOME
  39 + #undef HAVE_GTKMAC
  40 +
  41 +#endif /* LIBV3270_CONFIG_INCLUDED */
... ...
src/plugin/linux/daemon.c 0 → 100644
... ... @@ -0,0 +1,122 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como daemon.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include <glib.h>
  37 +#include <dbus/dbus.h>
  38 +#include <dbus/dbus-glib-lowlevel.h>
  39 +#include <dbus/dbus-glib.h>
  40 +
  41 +#include "daemon.h"
  42 +#include "dbus-glue.h"
  43 +
  44 +#define PW3270_DBUS_SERVICE_PATH "/br/com/bb/pw3270"
  45 +#define PW3270_DBUS_SERVICE "br.com.bb.pw3270"
  46 +
  47 +
  48 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  49 +
  50 + static DBusGConnection * connection = NULL;
  51 + static DBusGProxy * proxy = NULL;
  52 + static H3270 * hSession = NULL;
  53 +
  54 + GMainLoop * main_loop = NULL;
  55 +
  56 +
  57 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  58 +
  59 +static int initialize(void)
  60 +{
  61 + GError * error = NULL;
  62 + guint result;
  63 +
  64 + connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
  65 + if(error)
  66 + {
  67 + g_message("Error \"%s\" getting session dbus",error->message);
  68 + g_error_free(error);
  69 + return -1;
  70 + }
  71 +
  72 + proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
  73 +
  74 + org_freedesktop_DBus_request_name(proxy, PW3270_DBUS_SERVICE, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
  75 +
  76 + pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,PW3270_DBUS_SERVICE_PATH);
  77 +
  78 + return 0;
  79 +}
  80 +
  81 +static void loghandler(H3270 *session, const char *module, int rc, const char *fmt, va_list args)
  82 +{
  83 + g_logv(module,rc ? G_LOG_LEVEL_WARNING : G_LOG_LEVEL_MESSAGE, fmt, args);
  84 +}
  85 +
  86 +int main(int numpar, char *param[])
  87 +{
  88 + g_type_init ();
  89 +
  90 + if (!g_thread_supported ())
  91 + g_thread_init (NULL);
  92 +
  93 + dbus_g_thread_init ();
  94 +
  95 + lib3270_set_log_handler(loghandler);
  96 + pw3270_dbus_register_io_handlers();
  97 +
  98 + hSession = lib3270_session_new("");
  99 +
  100 + main_loop = g_main_loop_new (NULL, FALSE);
  101 +
  102 + if(initialize())
  103 + return -1;
  104 +
  105 + g_main_loop_run(main_loop);
  106 +
  107 + lib3270_session_free(hSession);
  108 +
  109 + return 0;
  110 +}
  111 +
  112 +void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)
  113 +{
  114 + g_main_loop_quit(main_loop);
  115 + dbus_g_method_return(context,0);
  116 +}
  117 +
  118 +H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
  119 +{
  120 + return hSession;
  121 +}
  122 +
... ...
src/plugin/linux/daemon.h 0 → 100644
... ... @@ -0,0 +1,46 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como daemon.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 + #include "service.h"
  37 +
  38 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  39 +
  40 + G_GNUC_INTERNAL GMainLoop * main_loop;
  41 +
  42 +
  43 +/*---[ Prototipes ]------------------------------------------------------------------------------*/
  44 +
  45 + G_GNUC_INTERNAL void pw3270_dbus_register_io_handlers(void);
  46 +
... ...
src/plugin/linux/globals.h 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como globals.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#ifndef PW3270_DBUS_GLOBALS_H_INCLUDED
  33 +
  34 + #define PW3270_DBUS_GLOBALS_H_INCLUDED 1
  35 +
  36 + #include <libintl.h>
  37 + #include <glib/gi18n.h>
  38 +
  39 + #include <errno.h>
  40 + #include <lib3270.h>
  41 + #include <lib3270/log.h>
  42 + #include <glib.h>
  43 +
  44 + //
  45 + // Disabling warning on unused-function defined in dbus-glib-bindings.h
  46 + // warning: 'org_freedesktop_DBus_reload_config' defined but not used [-Wunused-function] ...
  47 + //
  48 + #pragma GCC diagnostic ignored "-Wunused-function"
  49 +
  50 + #include <dbus/dbus-glib.h>
  51 + #include <dbus/dbus-glib-bindings.h>
  52 + #include <dbus/dbus-glib-lowlevel.h>
  53 +
  54 + #define ERROR_DOMAIN g_quark_from_static_string("pw3270DBUS")
  55 +
  56 + G_GNUC_INTERNAL gpointer pw3270_dbus_register_object (DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path);
  57 +
  58 +
  59 +#endif // PW3270_DBUS_GLOBALS_H_INCLUDED
... ...
src/plugin/linux/gobject.c 0 → 100644
... ... @@ -0,0 +1,622 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como gobject.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include <glib.h>
  37 +#include <gtk/gtk.h>
  38 +#include <dbus/dbus.h>
  39 +#include <dbus/dbus-glib-lowlevel.h>
  40 +#include <dbus/dbus-glib.h>
  41 +
  42 +#include <config.h>
  43 +#include <lib3270.h>
  44 +#include <pw3270.h>
  45 +#include <v3270.h>
  46 +#include <lib3270/actions.h>
  47 +#include <lib3270/charset.h>
  48 +
  49 +#include "service.h"
  50 +
  51 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  52 +
  53 +
  54 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  55 +
  56 +G_DEFINE_TYPE(PW3270Dbus, pw3270_dbus, G_TYPE_OBJECT)
  57 +
  58 +static void pw3270_dbus_finalize(GObject *object)
  59 +{
  60 + G_OBJECT_CLASS(pw3270_dbus_parent_class)->finalize (object);
  61 +}
  62 +
  63 +
  64 +static void pw3270_dbus_class_init(PW3270DbusClass *klass)
  65 +{
  66 + GObjectClass *object_class;
  67 + object_class = G_OBJECT_CLASS (klass);
  68 + object_class->finalize = pw3270_dbus_finalize;
  69 +}
  70 +
  71 +static void pw3270_dbus_init(PW3270Dbus *object)
  72 +{
  73 +
  74 +}
  75 +
  76 +PW3270Dbus * pw3270_dbus_new(void)
  77 +{
  78 + return g_object_new(PW3270_TYPE_DBUS, NULL);
  79 +}
  80 +
  81 +void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context)
  82 +{
  83 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  84 +#ifdef PACKAGE_REVISION
  85 + dbus_g_method_return(context,PACKAGE_REVISION);
  86 +#else
  87 + dbus_g_method_return(context,BUILD_DATE);
  88 +#endif
  89 +}
  90 +
  91 +void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)
  92 +{
  93 + H3270 *hSession = pw3270_dbus_get_session_handle(PW3270_DBUS(object));
  94 +
  95 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  96 +
  97 + if(uri && *uri)
  98 + {
  99 + lib3270_set_url(hSession,uri);
  100 + g_message("Connecting to \"%s\" by remote request",lib3270_get_url(hSession));
  101 + }
  102 + else
  103 + {
  104 + g_message("%s","Connecting by remote request");
  105 + }
  106 +
  107 + dbus_g_method_return(context,lib3270_reconnect(hSession,0));
  108 +}
  109 +
  110 +void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context)
  111 +{
  112 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  113 +
  114 + g_message("Changing host to \"%s\" by remote request",uri);
  115 +
  116 + dbus_g_method_return(context,lib3270_set_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object)),uri) != 0);
  117 +}
  118 +
  119 +void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context)
  120 +{
  121 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  122 + dbus_g_method_return(context,lib3270_get_url(pw3270_dbus_get_session_handle(PW3270_DBUS(object))));
  123 +}
  124 +
  125 +
  126 +void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context)
  127 +{
  128 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  129 +
  130 + g_message("Disconnecting by remote request");
  131 + lib3270_disconnect(pw3270_dbus_get_session_handle(object));
  132 + dbus_g_method_return(context,0);
  133 +}
  134 +
  135 +void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context)
  136 +{
  137 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  138 + dbus_g_method_return(context,lib3270_get_program_message(pw3270_dbus_get_session_handle(object)));
  139 +}
  140 +
  141 +void pw3270_dbus_get_connection_state(PW3270Dbus *object, DBusGMethodInvocation *context)
  142 +{
  143 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  144 + dbus_g_method_return(context,lib3270_get_connection_state(pw3270_dbus_get_session_handle(object)));
  145 +}
  146 +
  147 +void pw3270_dbus_get_secure_state(PW3270Dbus *object, DBusGMethodInvocation *context)
  148 +{
  149 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  150 + dbus_g_method_return(context,lib3270_get_secure(pw3270_dbus_get_session_handle(object)));
  151 +}
  152 +
  153 +GError * pw3270_dbus_get_error_from_errno(int code)
  154 +{
  155 + return g_error_new(ERROR_DOMAIN,code,"%s",g_strerror(code));
  156 +}
  157 +
  158 +int pw3270_dbus_check_valid_state(PW3270Dbus *object, DBusGMethodInvocation *context)
  159 +{
  160 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  161 + GError * error = NULL;
  162 +
  163 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  164 +
  165 + if(!lib3270_is_connected(hSession))
  166 + {
  167 + error = pw3270_dbus_get_error_from_errno(ENOTCONN);
  168 + }
  169 + else
  170 + {
  171 + LIB3270_MESSAGE state = lib3270_get_program_message(hSession);
  172 +
  173 + switch(state)
  174 + {
  175 + case LIB3270_MESSAGE_NONE:
  176 + return 0;
  177 +
  178 + case LIB3270_MESSAGE_DISCONNECTED:
  179 + error = pw3270_dbus_get_error_from_errno(ENOTCONN);
  180 + break;
  181 +
  182 + case LIB3270_MESSAGE_MINUS:
  183 + case LIB3270_MESSAGE_PROTECTED:
  184 + case LIB3270_MESSAGE_NUMERIC:
  185 + case LIB3270_MESSAGE_OVERFLOW:
  186 + case LIB3270_MESSAGE_INHIBIT:
  187 + case LIB3270_MESSAGE_KYBDLOCK:
  188 + case LIB3270_MESSAGE_X:
  189 + error = g_error_new(ERROR_DOMAIN,-1,_( "State %04d can't accept requests" ),state);
  190 + break;
  191 +
  192 + case LIB3270_MESSAGE_SYSWAIT:
  193 + case LIB3270_MESSAGE_TWAIT:
  194 + case LIB3270_MESSAGE_CONNECTED:
  195 + case LIB3270_MESSAGE_AWAITING_FIRST:
  196 + error = pw3270_dbus_get_error_from_errno(EBUSY);
  197 + break;
  198 +
  199 + case LIB3270_MESSAGE_RESOLVING:
  200 + case LIB3270_MESSAGE_CONNECTING:
  201 + error = g_error_new(ERROR_DOMAIN,EINPROGRESS,_( "Connecting to host" ));
  202 +
  203 + case LIB3270_MESSAGE_USER:
  204 + error = g_error_new(ERROR_DOMAIN,-1,_( "Unexpected state %04d" ),state);
  205 + }
  206 + }
  207 +
  208 + if(error)
  209 + {
  210 + dbus_g_method_return_error(context,error);
  211 + g_error_free(error);
  212 + return -1;
  213 + }
  214 +
  215 + return 0;
  216 +}
  217 +
  218 +void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context)
  219 +{
  220 + char * text;
  221 + gchar * utftext;
  222 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  223 +
  224 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  225 +
  226 + if(pw3270_dbus_check_valid_state(object,context))
  227 + return;
  228 +
  229 + text = lib3270_get_string_at_address(hSession,0,-1,'\n');
  230 +
  231 + utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
  232 +
  233 + lib3270_free(text);
  234 +
  235 + dbus_g_method_return(context,utftext);
  236 +
  237 + g_free(utftext);
  238 +
  239 +}
  240 +
  241 +void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context)
  242 +{
  243 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  244 + if(pw3270_dbus_check_valid_state(object,context))
  245 + return;
  246 + dbus_g_method_return(context,lib3270_enter(pw3270_dbus_get_session_handle(object)));
  247 +}
  248 +
  249 +void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, DBusGMethodInvocation *context)
  250 +{
  251 + gchar * text;
  252 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  253 +
  254 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  255 + if(pw3270_dbus_check_valid_state(object,context))
  256 + return;
  257 +
  258 + text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
  259 +
  260 + int sz = lib3270_set_string_at(hSession,row,col,(const unsigned char *) text);
  261 +
  262 + trace("%s returns %d",__FUNCTION__,sz);
  263 + dbus_g_method_return(context,sz);
  264 +
  265 + g_free(text);
  266 +}
  267 +
  268 +void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context)
  269 +{
  270 + gchar * text;
  271 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  272 +
  273 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  274 + if(pw3270_dbus_check_valid_state(object,context))
  275 + return;
  276 +
  277 + text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
  278 +
  279 + dbus_g_method_return(context,lib3270_emulate_input(hSession,(const char *) text,-1,1));
  280 +
  281 + g_free(text);
  282 +}
  283 +
  284 +
  285 +void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context)
  286 +{
  287 + gchar * text;
  288 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  289 +
  290 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  291 + if(pw3270_dbus_check_valid_state(object,context))
  292 + return;
  293 +
  294 + text = lib3270_get_string_at(hSession, row, col, len, lf);
  295 + if(!text)
  296 + {
  297 + GError *error = pw3270_dbus_get_error_from_errno(errno);
  298 + dbus_g_method_return_error(context,error);
  299 + g_error_free(error);
  300 + }
  301 + else
  302 + {
  303 + gchar * utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
  304 +
  305 + lib3270_free(text);
  306 +
  307 + dbus_g_method_return(context,utftext);
  308 +
  309 + g_free(utftext);
  310 + }
  311 + }
  312 +
  313 + void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, char lf, DBusGMethodInvocation *context)
  314 + {
  315 + gchar * text;
  316 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  317 +
  318 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  319 + if(pw3270_dbus_check_valid_state(object,context))
  320 + return;
  321 +
  322 + if(len < 0) {
  323 + len = lib3270_get_length(hSession);
  324 + }
  325 +
  326 + text = lib3270_get_string_at_address(hSession,offset,len,lf);
  327 + if(!text)
  328 + {
  329 + GError *error = pw3270_dbus_get_error_from_errno(errno);
  330 + dbus_g_method_return_error(context,error);
  331 + g_error_free(error);
  332 + }
  333 + else
  334 + {
  335 + gchar * utftext = g_convert_with_fallback(text,-1,"UTF-8",lib3270_get_display_charset(hSession),"?",NULL,NULL,NULL);
  336 +
  337 + lib3270_free(text);
  338 +
  339 + debug("\n%s\n",utftext);
  340 +
  341 + dbus_g_method_return(context,utftext);
  342 +
  343 + g_free(utftext);
  344 + }
  345 +
  346 + }
  347 +
  348 + void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context)
  349 + {
  350 + trace("%s object=%p context=%p connected=%s",__FUNCTION__,object,context, lib3270_is_connected(pw3270_dbus_get_session_handle(object)) ? "Yes" : "No");
  351 + dbus_g_method_return(context,lib3270_is_connected(pw3270_dbus_get_session_handle(object)));
  352 + }
  353 +
  354 + void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context)
  355 + {
  356 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  357 + dbus_g_method_return(context,lib3270_is_ready(pw3270_dbus_get_session_handle(object)));
  358 + }
  359 +
  360 + void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context)
  361 + {
  362 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  363 + dbus_g_method_return(context,lib3270_in_tn3270e(pw3270_dbus_get_session_handle(object)));
  364 + }
  365 +
  366 + void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context)
  367 + {
  368 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  369 + dbus_g_method_return(context,lib3270_wait_for_ready(pw3270_dbus_get_session_handle(object),timeout));
  370 + }
  371 +
  372 + void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context)
  373 + {
  374 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  375 + dbus_g_method_return(context,lib3270_set_cursor_position(pw3270_dbus_get_session_handle(object),row,col));
  376 + }
  377 +
  378 + void pw3270_dbus_set_cursor_address(PW3270Dbus *object, int addr, DBusGMethodInvocation *context)
  379 + {
  380 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  381 + dbus_g_method_return(context,lib3270_set_cursor_address(pw3270_dbus_get_session_handle(object),addr));
  382 + }
  383 +
  384 + void pw3270_dbus_get_cursor_address(PW3270Dbus *object, DBusGMethodInvocation *context)
  385 + {
  386 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  387 + dbus_g_method_return(context,lib3270_get_cursor_address(pw3270_dbus_get_session_handle(object)));
  388 + }
  389 +
  390 + void pw3270_dbus_get_screen_width(PW3270Dbus *object, DBusGMethodInvocation *context)
  391 + {
  392 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  393 + dbus_g_method_return(context,lib3270_get_width(pw3270_dbus_get_session_handle(object)));
  394 + }
  395 +
  396 + void pw3270_dbus_get_screen_height(PW3270Dbus *object, DBusGMethodInvocation *context)
  397 + {
  398 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  399 + dbus_g_method_return(context,lib3270_get_height(pw3270_dbus_get_session_handle(object)));
  400 + }
  401 +
  402 + void pw3270_dbus_get_screen_length(PW3270Dbus *object, DBusGMethodInvocation *context)
  403 + {
  404 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  405 + dbus_g_method_return(context,lib3270_get_width(pw3270_dbus_get_session_handle(object)));
  406 + }
  407 +
  408 + void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context)
  409 + {
  410 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  411 + dbus_g_method_return(context,lib3270_set_toggle(pw3270_dbus_get_session_handle(object),id,value));
  412 + }
  413 +
  414 +void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *utftext, char lf, DBusGMethodInvocation *context)
  415 +{
  416 + gchar * text;
  417 + H3270 * hSession = pw3270_dbus_get_session_handle(object);
  418 +
  419 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  420 + if(pw3270_dbus_check_valid_state(object,context))
  421 + return;
  422 +
  423 + text = g_convert_with_fallback(utftext,-1,lib3270_get_display_charset(hSession),"UTF-8","?",NULL,NULL,NULL);
  424 +
  425 + dbus_g_method_return(context,lib3270_cmp_text_at(hSession,row,col,text,lf));
  426 +
  427 + g_free(text);
  428 +}
  429 +
  430 +void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
  431 +{
  432 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  433 + if(pw3270_dbus_check_valid_state(object,context))
  434 + return;
  435 + dbus_g_method_return(context,lib3270_pfkey(pw3270_dbus_get_session_handle(object),key));
  436 +}
  437 +
  438 +void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context)
  439 +{
  440 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  441 + if(pw3270_dbus_check_valid_state(object,context))
  442 + return;
  443 + dbus_g_method_return(context,lib3270_pakey(pw3270_dbus_get_session_handle(object),key));
  444 +}
  445 +
  446 + void pw3270_dbus_get_field_start(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
  447 + {
  448 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  449 + dbus_g_method_return(context,lib3270_get_field_start(pw3270_dbus_get_session_handle(object),baddr));
  450 + }
  451 +
  452 + void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
  453 + {
  454 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  455 + dbus_g_method_return(context,lib3270_get_field_len(pw3270_dbus_get_session_handle(object),baddr));
  456 + }
  457 +
  458 + void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
  459 + {
  460 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  461 + dbus_g_method_return(context,lib3270_get_next_unprotected(pw3270_dbus_get_session_handle(object),baddr));
  462 + }
  463 +
  464 + void pw3270_dbus_get_is_protected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context)
  465 + {
  466 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  467 + dbus_g_method_return(context,lib3270_get_is_protected(pw3270_dbus_get_session_handle(object),baddr));
  468 + }
  469 +
  470 + void pw3270_dbus_get_is_protected_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context)
  471 + {
  472 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  473 + dbus_g_method_return(context,lib3270_get_is_protected_at(pw3270_dbus_get_session_handle(object),row,col));
  474 + }
  475 +
  476 + void pw3270_dbus_action(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context)
  477 + {
  478 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  479 + dbus_g_method_return(context,lib3270_action(pw3270_dbus_get_session_handle(object),text));
  480 + }
  481 +
  482 + void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context)
  483 + {
  484 + gchar *text;
  485 +
  486 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  487 +
  488 + if(pw3270_dbus_check_valid_state(object,context))
  489 + return;
  490 +
  491 + text = gtk_clipboard_wait_for_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD));
  492 +
  493 + trace("Clipboard:\n%s\n",text);
  494 +
  495 + if(!text)
  496 + {
  497 + GError *error = pw3270_dbus_get_error_from_errno(ENOENT);
  498 + dbus_g_method_return_error(context,error);
  499 + g_error_free(error);
  500 + }
  501 + else
  502 + {
  503 + dbus_g_method_return(context,text);
  504 + g_free(text);
  505 + }
  506 +}
  507 +
  508 +void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context)
  509 +{
  510 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  511 + gtk_clipboard_set_text(gtk_widget_get_clipboard(pw3270_get_toplevel(),GDK_SELECTION_CLIPBOARD),(gchar *) text, -1);
  512 + dbus_g_method_return(context,0);
  513 +}
  514 +
  515 +void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context)
  516 +{
  517 + GtkWidget *widget = pw3270_get_terminal_widget(NULL);
  518 +
  519 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  520 +
  521 + if(!widget)
  522 + {
  523 + GError *error = pw3270_dbus_get_error_from_errno(EINVAL);
  524 + dbus_g_method_return_error(context,error);
  525 + g_error_free(error);
  526 + return;
  527 + }
  528 +
  529 + dbus_g_method_return(context,v3270_set_script(widget,mode == 0 ? 0 : 'S'));
  530 +}
  531 +
  532 +void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context)
  533 +{
  534 + lib3270_popup_dialog(pw3270_dbus_get_session_handle(object), (LIB3270_NOTIFY) id , title, msg, "%s", text);
  535 + dbus_g_method_return(context,0);
  536 +}
  537 +
  538 +void pw3270_dbus_get_host_charset(PW3270Dbus *object, DBusGMethodInvocation *context)
  539 +{
  540 + dbus_g_method_return(context,lib3270_get_host_charset(pw3270_dbus_get_session_handle(object)));
  541 +}
  542 +
  543 +void pw3270_dbus_get_display_charset(PW3270Dbus *object, DBusGMethodInvocation *context)
  544 +{
  545 + // Allways return UTF-8 to avoid double conversion
  546 + dbus_g_method_return(context,"UTF-8");
  547 +}
  548 +
  549 +void pw3270_dbus_set_host_charset(PW3270Dbus *object, const gchar *charset, DBusGMethodInvocation *context)
  550 +{
  551 + dbus_g_method_return(context,lib3270_set_host_charset(pw3270_dbus_get_session_handle(object),charset));
  552 +}
  553 +
  554 +void pw3270_dbus_erase_eof(PW3270Dbus *object, DBusGMethodInvocation *context)
  555 +{
  556 + trace("%s object=%p context=%p",__FUNCTION__,object,context);
  557 + dbus_g_method_return(context,lib3270_eraseeof(pw3270_dbus_get_session_handle(object)));
  558 +}
  559 +
  560 +void pw3270_dbus_print(PW3270Dbus *object, DBusGMethodInvocation *context)
  561 +{
  562 + dbus_g_method_return(context,lib3270_print_all(pw3270_dbus_get_session_handle(object)));
  563 +}
  564 +
  565 +void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context)
  566 +{
  567 + lib3270_set_unlock_delay(pw3270_dbus_get_session_handle(object),(unsigned short) value);
  568 + dbus_g_method_return(context,0);
  569 +}
  570 +
  571 +
  572 +void pw3270_dbus_ebc2asc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context)
  573 +{
  574 + int sz = strlen(from);
  575 +
  576 + if(sz > 0)
  577 + {
  578 + unsigned char buffer[sz+1];
  579 + memcpy(buffer,from,sz);
  580 + dbus_g_method_return(context,lib3270_ebc2asc(pw3270_dbus_get_session_handle(object),buffer,sz));
  581 + return;
  582 + }
  583 +
  584 + dbus_g_method_return(context,"");
  585 +
  586 +}
  587 +
  588 +void pw3270_dbus_asc2ebc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context)
  589 +{
  590 + int sz = strlen(from);
  591 +
  592 + if(sz > 0)
  593 + {
  594 + unsigned char buffer[sz+1];
  595 + memcpy(buffer,from,sz);
  596 + dbus_g_method_return(context,lib3270_asc2ebc(pw3270_dbus_get_session_handle(object),buffer,sz));
  597 + return;
  598 + }
  599 +
  600 + dbus_g_method_return(context,"");
  601 +
  602 +}
  603 +
  604 +void pw3270_dbus_filetransfer(PW3270Dbus *object, const gchar *local, const gchar *remote, int flags, int lrecl, int blksize, int primspace, int secspace, int dft, DBusGMethodInvocation *context)
  605 +{
  606 + /*
  607 + dbus_g_method_return(context,
  608 + v3270_transfer_file(
  609 + v3270_get_default_widget(),
  610 + (LIB3270_FT_OPTION) flags,
  611 + local,
  612 + remote,
  613 + lrecl,
  614 + blksize,
  615 + primspace,
  616 + secspace,
  617 + dft
  618 + ));
  619 + */
  620 + return;
  621 +}
  622 +
... ...
src/plugin/linux/iocallback.c 0 → 100644
... ... @@ -0,0 +1,361 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como iocallback.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#if defined(_WIN32) /*[*/
  33 + #include <windows.h>
  34 +#elif defined(__APPLE__)
  35 + #include <poll.h>
  36 + #include <string.h>
  37 +#else
  38 + #include <poll.h>
  39 + #include <string.h>
  40 +#endif /*]*/
  41 +
  42 +#include <stdio.h>
  43 +#include <glib.h>
  44 +#include "daemon.h"
  45 +
  46 +static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm);
  47 +static void static_RemoveSource(void *id);
  48 +
  49 +static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session));
  50 +static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session));
  51 +
  52 +static void * static_AddTimeOut(unsigned long interval_ms, H3270 *session, void (*proc)(H3270 *session));
  53 +static void static_RemoveTimeOut(void * timer);
  54 +static int static_Sleep(H3270 *hSession, int seconds);
  55 +static int static_RunPendingEvents(H3270 *hSession, int wait);
  56 +
  57 +static gboolean IO_prepare(GSource *source, gint *timeout);
  58 +static gboolean IO_check(GSource *source);
  59 +static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data);
  60 +static void IO_finalize(GSource *source); /* Can be NULL */
  61 +static gboolean IO_closure(gpointer data);
  62 +
  63 +/*---[ Structs ]-------------------------------------------------------------------------------------------*/
  64 +
  65 + typedef struct _IO_Source
  66 + {
  67 + GSource gsrc;
  68 + GPollFD poll;
  69 +#if defined(_WIN32)
  70 + HANDLE source;
  71 +#else
  72 + int source;
  73 +#endif // _WIN32
  74 + void (*fn)(H3270 *session);
  75 + H3270 *session;
  76 + } IO_Source;
  77 +
  78 + typedef struct _timer
  79 + {
  80 + unsigned char remove;
  81 + void (*fn)(H3270 *session);
  82 + H3270 *session;
  83 + } TIMER;
  84 +
  85 + static GSourceFuncs IOSources =
  86 + {
  87 + IO_prepare,
  88 + IO_check,
  89 + IO_dispatch,
  90 + IO_finalize,
  91 + IO_closure,
  92 + NULL
  93 + };
  94 +
  95 +/*---[ Implement ]-----------------------------------------------------------------------------------------*/
  96 +
  97 +#ifdef _WIN32
  98 +static void * AddSource(HANDLE source, H3270 *session, gushort events, void (*fn)(H3270 *session))
  99 +#else
  100 +static void * AddSource(int source, H3270 *session, gushort events, void (*fn)(H3270 *session))
  101 +#endif // _WIN32
  102 +{
  103 + IO_Source *src = (IO_Source *) g_source_new(&IOSources,sizeof(IO_Source));
  104 +
  105 + src->source = source;
  106 + src->fn = fn;
  107 + src->poll.fd = (int) source;
  108 + src->poll.events = events;
  109 + src->session = session;
  110 +
  111 + g_source_attach((GSource *) src,NULL);
  112 + g_source_add_poll((GSource *) src,&src->poll);
  113 +
  114 + return src;
  115 +}
  116 +
  117 +#ifdef _WIN32
  118 +static void * static_AddInput(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
  119 +#else
  120 +static void * static_AddInput(int source, H3270 *session, void (*fn)(H3270 *session))
  121 +#endif // _WIN32
  122 +{
  123 + return AddSource(source,session,G_IO_IN|G_IO_HUP|G_IO_ERR,fn);
  124 +}
  125 +
  126 +static void static_RemoveSource(void *id)
  127 +{
  128 + if(id)
  129 + g_source_destroy((GSource *) id);
  130 +}
  131 +
  132 +#if defined(_WIN32)
  133 +static void * static_AddExcept(HANDLE source, H3270 *session, void (*fn)(H3270 *session))
  134 +{
  135 + return 0;
  136 +}
  137 +#else
  138 +static void * static_AddExcept(int source, H3270 *session, void (*fn)(H3270 *session))
  139 +{
  140 + return AddSource(source,session,G_IO_HUP|G_IO_ERR,fn);
  141 +}
  142 +#endif // _WIN32
  143 +
  144 +static gboolean do_timer(TIMER *t)
  145 +{
  146 + if(!t->remove)
  147 + t->fn(t->session);
  148 + return FALSE;
  149 +}
  150 +
  151 +static void * static_AddTimeOut(unsigned long interval, H3270 *session, void (*proc)(H3270 *session))
  152 +{
  153 + TIMER *t = g_malloc0(sizeof(TIMER));
  154 +
  155 + t->fn = proc;
  156 + t->session = session;
  157 +
  158 + g_timeout_add_full(G_PRIORITY_DEFAULT, (guint) interval, (GSourceFunc) do_timer, t, g_free);
  159 +
  160 + return t;
  161 +}
  162 +
  163 +static void static_RemoveTimeOut(void * timer)
  164 +{
  165 + ((TIMER *) timer)->remove++;
  166 +}
  167 +
  168 +static gboolean IO_prepare(GSource *source, gint *timeout)
  169 +{
  170 + /*
  171 + * Called before all the file descriptors are polled.
  172 + * If the source can determine that it is ready here
  173 + * (without waiting for the results of the poll() call)
  174 + * it should return TRUE.
  175 + *
  176 + * It can also return a timeout_ value which should be the maximum
  177 + * timeout (in milliseconds) which should be passed to the poll() call.
  178 + * The actual timeout used will be -1 if all sources returned -1,
  179 + * or it will be the minimum of all the timeout_ values
  180 + * returned which were >= 0.
  181 + *
  182 + */
  183 + return 0;
  184 +}
  185 +
  186 +static gboolean IO_check(GSource *source)
  187 +{
  188 + /*
  189 + * Called after all the file descriptors are polled.
  190 + * The source should return TRUE if it is ready to be dispatched.
  191 + * Note that some time may have passed since the previous prepare
  192 + * function was called, so the source should be checked again here.
  193 + *
  194 + */
  195 +#if defined(_WIN32) /*[*/
  196 +
  197 + if(WaitForSingleObject(((IO_Source *) source)->source,0) == WAIT_OBJECT_0)
  198 + return TRUE;
  199 +
  200 +#else /*][*/
  201 +
  202 + struct pollfd fds;
  203 +
  204 + memset(&fds,0,sizeof(fds));
  205 +
  206 + fds.fd = ((IO_Source *) source)->poll.fd;
  207 + fds.events = ((IO_Source *) source)->poll.events;
  208 +
  209 + if(poll(&fds,1,0) > 0)
  210 + return TRUE;
  211 +
  212 +#endif /*]*/
  213 +
  214 + return FALSE;
  215 +}
  216 +
  217 +static gboolean IO_dispatch(GSource *source, GSourceFunc callback, gpointer user_data)
  218 +{
  219 + /*
  220 + * Called to dispatch the event source,
  221 + * after it has returned TRUE in either its prepare or its check function.
  222 + * The dispatch function is passed in a callback function and data.
  223 + * The callback function may be NULL if the source was never connected
  224 + * to a callback using g_source_set_callback(). The dispatch function
  225 + * should call the callback function with user_data and whatever additional
  226 + * parameters are needed for this type of event source.
  227 + */
  228 + ((IO_Source *) source)->fn(((IO_Source *) source)->session);
  229 + return TRUE;
  230 +}
  231 +
  232 +static void IO_finalize(GSource *source)
  233 +{
  234 +
  235 +}
  236 +
  237 +static gboolean IO_closure(gpointer data)
  238 +{
  239 + return 0;
  240 +}
  241 +
  242 +struct bgParameter
  243 +{
  244 + gboolean running;
  245 + gboolean timer;
  246 + H3270 *session;
  247 + int rc;
  248 + int(*callback)(H3270 *session, void *);
  249 + void *parm;
  250 +
  251 +};
  252 +
  253 +gpointer BgCall(struct bgParameter *p)
  254 +{
  255 +// trace("%s starts",__FUNCTION__);
  256 + p->rc = p->callback(p->session, p->parm);
  257 + p->running = FALSE;
  258 +// trace("%s ends",__FUNCTION__);
  259 + return 0;
  260 +}
  261 +
  262 +static gboolean wait_for_thread(struct bgParameter *p)
  263 +{
  264 + if(!p->running)
  265 + {
  266 + p->timer = 0;
  267 + return FALSE;
  268 + }
  269 + return TRUE;
  270 +}
  271 +
  272 +static int static_CallAndWait(int(*callback)(H3270 *session, void *), H3270 *session, void *parm)
  273 +{
  274 + struct bgParameter p = { TRUE, TRUE, session, -1, callback, parm };
  275 + GThread * thread;
  276 +
  277 +// trace("Starting auxiliary thread for callback %p",callback);
  278 +
  279 + p.running = TRUE;
  280 + p.timer = TRUE;
  281 +
  282 + thread = g_thread_create( (GThreadFunc) BgCall, &p, 0, NULL);
  283 +
  284 + if(!thread)
  285 + {
  286 + g_error("Can't start background thread");
  287 + return -1;
  288 + }
  289 +
  290 + g_timeout_add(50,(GSourceFunc) wait_for_thread,(gpointer) &p);
  291 +
  292 + while(p.timer)
  293 + g_main_context_iteration(g_main_loop_get_context(main_loop),TRUE);
  294 +
  295 + return p.rc;
  296 +}
  297 +
  298 +static int static_Sleep(H3270 *hSession, int seconds)
  299 +{
  300 + time_t end = time(0) + seconds;
  301 +
  302 + while(time(0) < end)
  303 + g_main_iteration(TRUE);
  304 +
  305 + return 0;
  306 +}
  307 +
  308 +static int static_RunPendingEvents(H3270 *hSession, int wait)
  309 +{
  310 + GMainContext *context = g_main_loop_get_context(main_loop);
  311 + int rc = 0;
  312 + while(g_main_context_pending(context))
  313 + {
  314 + rc = 1;
  315 + g_main_context_iteration(context,FALSE);
  316 + }
  317 +
  318 + if(wait)
  319 + g_main_context_iteration(context,TRUE);
  320 +
  321 + return rc;
  322 +}
  323 +
  324 +static void beep(H3270 *session)
  325 +{
  326 +}
  327 +
  328 +void pw3270_dbus_register_io_handlers(void)
  329 +{
  330 + static const struct lib3270_callbacks hdl =
  331 + {
  332 + sizeof(struct lib3270_callbacks),
  333 +
  334 + static_AddTimeOut,
  335 + static_RemoveTimeOut,
  336 +
  337 + static_AddInput,
  338 + static_RemoveSource,
  339 +
  340 + static_AddExcept,
  341 +
  342 +#ifdef G_THREADS_ENABLED
  343 + static_CallAndWait,
  344 +#else
  345 + NULL,
  346 +#endif
  347 +
  348 + static_Sleep,
  349 + static_RunPendingEvents,
  350 + beep
  351 +
  352 + };
  353 +
  354 + #error Need rewrite
  355 +
  356 + if(lib3270_register_handlers(&hdl))
  357 + {
  358 + g_error("%s","Can't set lib3270 I/O handlers");
  359 + }
  360 +
  361 +}
... ...
src/plugin/linux/main.c 0 → 100644
... ... @@ -0,0 +1,172 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como main.c e possui - linhas de código.
  22 + *
  23 + * Referências:
  24 + *
  25 + * https://github.com/fbuihuu/samples-dbus/blob/master/dbus-server.c
  26 + *
  27 + * Contatos:
  28 + *
  29 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  30 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  31 + *
  32 + */
  33 +
  34 +#include <glib.h>
  35 +#include <dbus/dbus.h>
  36 +#include <dbus/dbus-glib-lowlevel.h>
  37 +#include <dbus/dbus-glib.h>
  38 +
  39 +#include <pw3270.h>
  40 +#include <pw3270/plugin.h>
  41 +
  42 +#include "service.h"
  43 +#include "dbus-glue.h"
  44 +
  45 +#include <gtk/gtk.h>
  46 +
  47 +/*---[ Globals ]---------------------------------------------------------------------------------*/
  48 +
  49 + static DBusGConnection * connection = NULL;
  50 + static DBusGProxy * proxy = NULL;
  51 + static gchar * service_name = NULL;
  52 +
  53 +
  54 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  55 +
  56 + LIB3270_EXPORT int pw3270_plugin_start(GtkWidget *window, GtkWidget *terminal)
  57 + {
  58 +
  59 + GError * error = NULL;
  60 + guint result;
  61 + char session_id = 0;
  62 + char id = 'a';
  63 +
  64 + connection = dbus_g_bus_get_private(DBUS_BUS_SESSION, g_main_context_default(), &error);
  65 + if(error)
  66 + {
  67 + GtkWidget *dialog = gtk_message_dialog_new(
  68 + GTK_WINDOW(window),
  69 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  70 + GTK_MESSAGE_ERROR,
  71 + GTK_BUTTONS_OK,
  72 + _( "Can't connect to DBUS server" ));
  73 +
  74 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
  75 +
  76 + g_message("Error \"%s\" getting session dbus",error->message);
  77 +
  78 + g_error_free(error);
  79 +
  80 + gtk_dialog_run(GTK_DIALOG(dialog));
  81 + gtk_widget_destroy(dialog);
  82 +
  83 + return -1;
  84 + }
  85 +
  86 + proxy = dbus_g_proxy_new_for_name(connection,DBUS_SERVICE_DBUS,DBUS_PATH_DBUS,DBUS_INTERFACE_DBUS);
  87 +
  88 + for(id='a'; id < 'z' && !error && !service_name; id++)
  89 + {
  90 + gboolean has_owner = FALSE;
  91 +
  92 + service_name = g_strdup_printf("br.com.bb.%s.%c",pw3270_get_session_name(window),(int) id);
  93 +
  94 + org_freedesktop_DBus_name_has_owner(proxy, service_name, &has_owner, NULL);
  95 +
  96 + if(has_owner)
  97 + {
  98 + trace("Service \"%s\" has owner",service_name)
  99 + g_free(service_name);
  100 + service_name = NULL;
  101 + }
  102 + else
  103 + {
  104 + session_id = id;
  105 + g_message("DBUS service name is %s",service_name);
  106 + org_freedesktop_DBus_request_name(proxy, service_name, DBUS_NAME_FLAG_DO_NOT_QUEUE, &result, &error);
  107 + }
  108 + }
  109 +
  110 + if(error)
  111 + {
  112 + GtkWidget *dialog = gtk_message_dialog_new(
  113 + GTK_WINDOW(window),
  114 + GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
  115 + GTK_MESSAGE_ERROR,
  116 + GTK_BUTTONS_OK,
  117 + _( "Can't get DBUS object name" ));
  118 +
  119 + gtk_message_dialog_format_secondary_text(GTK_MESSAGE_DIALOG(dialog),"%s",error->message);
  120 +
  121 + g_message("Error \"%s\" requesting DBUS name",error->message);
  122 +
  123 + g_error_free(error);
  124 +
  125 + gtk_dialog_run(GTK_DIALOG(dialog));
  126 + gtk_widget_destroy(dialog);
  127 +
  128 + return -1;
  129 + }
  130 +
  131 + if(session_id)
  132 + {
  133 + gchar * path = g_strdup_printf("/br/com/bb/%s",pw3270_get_session_name(window));
  134 + gchar * session = g_strdup_printf("%s:%c",pw3270_get_session_name(window),g_ascii_toupper(session_id));
  135 + pw3270_set_session_name(window,session);
  136 + g_free(session);
  137 +
  138 + g_message("DBUS service path is %s",path);
  139 +
  140 + pw3270_dbus_register_object(connection,proxy,PW3270_TYPE_DBUS,&dbus_glib_pw3270_dbus_object_info,path);
  141 +
  142 + g_free(path);
  143 + }
  144 +
  145 + return 0;
  146 + }
  147 +
  148 + LIB3270_EXPORT int pw3270_plugin_stop(GtkWidget *window, GtkWidget *terminal)
  149 + {
  150 + if(service_name)
  151 + {
  152 + // org_freedesktop_DBus_release_name
  153 +
  154 + g_free(service_name);
  155 + service_name = NULL;
  156 + }
  157 + return 0;
  158 + }
  159 +
  160 + void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context)
  161 + {
  162 + gtk_main_quit();
  163 + dbus_g_method_return(context,0);
  164 + }
  165 +
  166 + H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object)
  167 + {
  168 + return lib3270_get_default_session_handle();
  169 + }
  170 +
  171 +
  172 +
... ...
src/plugin/linux/misc.c 0 → 100644
... ... @@ -0,0 +1,47 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como misc.c e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + * Referencias:
  31 + *
  32 + * https://live.gnome.org/DBusGlibBindings
  33 + *
  34 + */
  35 +
  36 +#include "globals.h"
  37 +
  38 +/*---[ Implement ]-------------------------------------------------------------------------------*/
  39 +
  40 +gpointer pw3270_dbus_register_object(DBusGConnection *connection,DBusGProxy *proxy,GType object_type,const DBusGObjectInfo *info,const gchar *path)
  41 +{
  42 + GObject *object = g_object_new (object_type, NULL);
  43 + dbus_g_object_type_install_info (object_type, info);
  44 + dbus_g_connection_register_g_object (connection, path, object);
  45 + return object;
  46 +}
  47 +
... ...
src/plugin/linux/service.h 0 → 100644
... ... @@ -0,0 +1,138 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como service.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + * licinio@bb.com.br (Licínio Luis Branco)
  28 + * kraucer@bb.com.br (Kraucer Fernandes Mazuco)
  29 + *
  30 + */
  31 +
  32 +#ifndef _PW3270_DBUS_SERVICE_H
  33 +
  34 + #define _PW3270_DBUS_SERVICE_H 1
  35 +
  36 + #define ENABLE_NLS
  37 + #define GETTEXT_PACKAGE PACKAGE_NAME
  38 +
  39 + #include "globals.h"
  40 +
  41 + #define PW3270_TYPE_DBUS (pw3270_dbus_get_type ())
  42 + #define PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_CAST ((object), PW3270_TYPE_DBUS, PW3270Dbus))
  43 + #define PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), PW3270_TYPE_DBUS, PW3270DbusClass))
  44 + #define IS_PW3270_DBUS(object) (G_TYPE_CHECK_INSTANCE_TYPE ((object), PW3270_TYPE_DBUS))
  45 + #define IS_PW3270_DBUS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), PW3270_TYPE_DBUS))
  46 + #define PW3270_DBUS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), PW3270_TYPE_DBUS, PW3270DbusClass))
  47 +
  48 + G_BEGIN_DECLS
  49 +
  50 + typedef struct _PW3270Dbus PW3270Dbus;
  51 + typedef struct _PW3270DbusClass PW3270DbusClass;
  52 +
  53 + struct _PW3270Dbus
  54 + {
  55 + GObject parent;
  56 + };
  57 +
  58 + struct _PW3270DbusClass
  59 + {
  60 + GObjectClass parent;
  61 + };
  62 +
  63 + PW3270Dbus * pw3270_dbus_new (void);
  64 + GType pw3270_dbus_get_type (void);
  65 +
  66 + void pw3270_dbus_get_revision(PW3270Dbus *object, DBusGMethodInvocation *context);
  67 + void pw3270_dbus_quit(PW3270Dbus *object, DBusGMethodInvocation *context);
  68 + void pw3270_dbus_connect(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);
  69 + void pw3270_dbus_get_ur_l(PW3270Dbus *object, DBusGMethodInvocation *context);
  70 + void pw3270_dbus_set_ur_l(PW3270Dbus *object, const gchar *uri, DBusGMethodInvocation *context);
  71 + void pw3270_dbus_disconnect(PW3270Dbus *object, DBusGMethodInvocation *context);
  72 +
  73 + void pw3270_dbus_get_message_id(PW3270Dbus *object, DBusGMethodInvocation *context);
  74 + void pw3270_dbus_get_connection_state(PW3270Dbus *object, DBusGMethodInvocation *context);
  75 + void pw3270_dbus_get_secure_state(PW3270Dbus *object, DBusGMethodInvocation *context);
  76 +
  77 + void pw3270_dbus_get_screen_contents(PW3270Dbus *object, DBusGMethodInvocation *context);
  78 + H3270 * pw3270_dbus_get_session_handle(PW3270Dbus *object);
  79 + GError * pw3270_dbus_get_error_from_errno(int code);
  80 +
  81 + void pw3270_dbus_is_connected(PW3270Dbus *object, DBusGMethodInvocation *context);
  82 + void pw3270_dbus_is_ready(PW3270Dbus *object, DBusGMethodInvocation *context);
  83 + void pw3270_dbus_in_tn3270_e(PW3270Dbus *object, DBusGMethodInvocation *context);
  84 +
  85 + void pw3270_dbus_set_cursor_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context);
  86 + void pw3270_dbus_set_cursor_address(PW3270Dbus *object, int addr, DBusGMethodInvocation *context);
  87 + void pw3270_dbus_get_cursor_address(PW3270Dbus *object, DBusGMethodInvocation *context);
  88 +
  89 + void pw3270_dbus_get_screen_width(PW3270Dbus *object, DBusGMethodInvocation *context);
  90 + void pw3270_dbus_get_screen_height(PW3270Dbus *object, DBusGMethodInvocation *context);
  91 + void pw3270_dbus_get_screen_length(PW3270Dbus *object, DBusGMethodInvocation *context);
  92 +
  93 + void pw3270_dbus_set_toggle(PW3270Dbus *object, int id, int value, DBusGMethodInvocation *context);
  94 +
  95 + void pw3270_dbus_wait_for_ready(PW3270Dbus *object, int timeout, DBusGMethodInvocation *context);
  96 +
  97 + void pw3270_dbus_get_field_start(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
  98 + void pw3270_dbus_get_field_length(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
  99 + void pw3270_dbus_get_next_unprotected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
  100 +
  101 + void pw3270_dbus_get_is_protected(PW3270Dbus *object, int baddr, DBusGMethodInvocation *context);
  102 + void pw3270_dbus_get_is_protected_at(PW3270Dbus *object, int row, int col, DBusGMethodInvocation *context);
  103 +
  104 + void pw3270_dbus_set_script(PW3270Dbus *object, const gchar *text, int mode, DBusGMethodInvocation *context);
  105 +
  106 + void pw3270_dbus_show_popup(PW3270Dbus *object, int id, const gchar *title, const gchar *msg, const gchar *text, DBusGMethodInvocation *context);
  107 +
  108 + void pw3270_dbus_action(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context);
  109 +
  110 + // Actions
  111 + void pw3270_dbus_enter(PW3270Dbus *object, DBusGMethodInvocation *context);
  112 + void pw3270_dbus_pf_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
  113 + void pw3270_dbus_pa_key(PW3270Dbus *object, int key, DBusGMethodInvocation *context);
  114 + void pw3270_dbus_set_text_at(PW3270Dbus *object, int row, int col, const gchar *text, DBusGMethodInvocation *context);
  115 + void pw3270_dbus_get_text_at(PW3270Dbus *object, int row, int col, int len, char lf, DBusGMethodInvocation *context);
  116 + void pw3270_dbus_get_text(PW3270Dbus *object, int offset, int len, char lf, DBusGMethodInvocation *context);
  117 + void pw3270_dbus_cmp_text_at(PW3270Dbus *object, int row, int col, const gchar *text, char lf, DBusGMethodInvocation *context);
  118 + void pw3270_dbus_input(PW3270Dbus *object, const gchar *utftext, DBusGMethodInvocation *context);
  119 +
  120 + void pw3270_dbus_set_clipboard(PW3270Dbus *object, const gchar *text, DBusGMethodInvocation *context);
  121 + void pw3270_dbus_get_clipboard(PW3270Dbus *object, DBusGMethodInvocation *context);
  122 +
  123 + void pw3270_dbus_get_display_charset(PW3270Dbus *object, DBusGMethodInvocation *context);
  124 + void pw3270_dbus_get_host_charset(PW3270Dbus *object, DBusGMethodInvocation *context);
  125 + void pw3270_dbus_set_host_charset(PW3270Dbus *object, const gchar *charset, DBusGMethodInvocation *context);
  126 + void pw3270_dbus_erase_eof(PW3270Dbus *object, DBusGMethodInvocation *context);
  127 + void pw3270_dbus_print(PW3270Dbus *object, DBusGMethodInvocation *context);
  128 +
  129 + void pw3270_dbus_asc2ebc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context);
  130 + void pw3270_dbus_ebc2asc(PW3270Dbus *object, const gchar *from, DBusGMethodInvocation *context);
  131 +
  132 + void pw3270_dbus_filetransfer(PW3270Dbus *object, const gchar *local, const gchar *remote, int flags, int lrecl, int blksize, int primspace, int secspace, int dft, DBusGMethodInvocation *context);
  133 +
  134 + void pw3270_dbus_set_unlock_delay(PW3270Dbus *object, int value, DBusGMethodInvocation *context);
  135 +
  136 + G_END_DECLS
  137 +
  138 +#endif // _PW3270_DBUS_SERVICE_H
... ...
src/plugin/windows/resources.rc.in 0 → 100644
... ... @@ -0,0 +1,29 @@
  1 +#include <windows.h>
  2 +
  3 +VS_VERSION_INFO VERSIONINFO
  4 +FILEVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0
  5 +PRODUCTVERSION @PACKAGE_MAJOR_VERSION@,@PACKAGE_MINOR_VERSION@,@PACKAGE_MAJOR_RELEASE@,0
  6 +
  7 +BEGIN
  8 +
  9 + BLOCK "StringFileInfo"
  10 + BEGIN
  11 + BLOCK "080904E4"
  12 + BEGIN
  13 + VALUE "FileDescription", "@PACKAGE_NAME@ IPC Plugin\0"
  14 + VALUE "CompanyName", "Banco do Brasil S/A.\0"
  15 + VALUE "FileVersion", "@WIN32_VERSION@\0"
  16 + VALUE "LegalCopyright", "(C) 2017 Banco do Brasil S/A. All Rights Reserved\0"
  17 + VALUE "OriginalFilename", "ipc3270@DLLEXT@\0"
  18 + VALUE "ProductName", "@PACKAGE_NAME@\0"
  19 + VALUE "ProductVersion", "@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@.@PACKAGE_MAJOR_RELEASE@.0\0"
  20 + END
  21 + END
  22 +
  23 + BLOCK "VarFileInfo"
  24 + BEGIN
  25 + VALUE "Translation", 0x809, 0x04E4
  26 + END
  27 +
  28 +END
  29 +
... ...