diff --git a/lib3270.cbp b/lib3270.cbp index 1e13135..508d1fe 100644 --- a/lib3270.cbp +++ b/lib3270.cbp @@ -157,6 +157,9 @@ + + diff --git a/src/include/lib3270.h b/src/include/lib3270.h index 27b0a7a..04e15e7 100644 --- a/src/include/lib3270.h +++ b/src/include/lib3270.h @@ -66,6 +66,8 @@ #endif + #define LIB3270_STRINGIZE(x) #x + #define LIB3270_STRINGIZE_VALUE_OF(x) LIB3270_STRINGIZE(x) /** * @brief BIND definitions. @@ -1330,6 +1332,14 @@ LIB3270_EXPORT const char * lib3270_win32_local_charset(void); #endif // WIn32 + /** + * @brief Build filename on "DATADIR". + * + * @return Full path for the file (release it with lib3270_free). + * + */ + LIB3270_EXPORT char * lib3270_build_data_filename(const char *name); + #ifdef __cplusplus } #endif diff --git a/src/lib3270/Makefile.in b/src/lib3270/Makefile.in index 7b94560..db69cb6 100644 --- a/src/lib3270/Makefile.in +++ b/src/lib3270/Makefile.in @@ -118,6 +118,7 @@ $(OBJDBG)/%.o: \ $(CFLAGS) \ -Wall -Wextra -fstack-check \ -DDEBUG=1 \ + -DDATADIR=. \ -o $@ -c $< $(OBJDBG)/%.o: \ @@ -138,6 +139,7 @@ $(OBJRLS)/%.o: \ @$(CC) \ $(CFLAGS) \ -DNDEBUG=1 \ + -DDATADIR=$(datarootdir)/pw3270 \ -o $@ -c $< $(OBJRLS)/%.o: \ diff --git a/src/lib3270/linux/util.c b/src/lib3270/linux/util.c new file mode 100644 index 0000000..bbffed8 --- /dev/null +++ b/src/lib3270/linux/util.c @@ -0,0 +1,42 @@ +/* + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob + * o nome G3270. + * + * Copyright (C) <2008> + * + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela + * Free Software Foundation. + * + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para + * obter mais detalhes. + * + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin + * St, Fifth Floor, Boston, MA 02110-1301 USA + * + * Este programa está nomeado como - e possui - linhas de código. + * + * Contatos: + * + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck) + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça) + * + */ + +/** + * @brief Linux Utility functions. + */ + + +#include +#include "../private.h" + +char * lib3270_build_data_filename(const char *name) +{ + return lib3270_strdup_printf("%s/%s",LIB3270_STRINGIZE_VALUE_OF(DATADIR),name); +} diff --git a/src/lib3270/windows/util.c b/src/lib3270/windows/util.c index 2f12b27..4567c88 100644 --- a/src/lib3270/windows/util.c +++ b/src/lib3270/windows/util.c @@ -208,3 +208,22 @@ int gettimeofday(struct timeval *tv, void *ignored unused) return 0; } +char * lib3270_build_data_filename(const char *name) +{ + // https://github.com/GNOME/glib/blob/master/glib/gwin32.c + + char *p; + wchar_t wc_fn[MAX_PATH]; + + if (!GetModuleFileNameW(NULL, wc_fn, MAX_PATH)) + return NULL; + + if((p = strrchr (filename, '\\')) != NULL) + *p = '\0'; + + if((p = strrchr (filename, '/')) != NULL) + *p = '\0'; + + return lib3270_strdup_printf("%s\\%s",wc_fn,name); + +} -- libgit2 0.21.2