Commit 062033af115bff1587c009f5fc46a4db5b61767c
1 parent
ad53b5fa
Exists in
master
and in
3 other branches
Fixing warnings.
Adding new function for translate the windows error codes.
Showing
6 changed files
with
76 additions
and
18 deletions
Show diff stats
src/include/config.h.in
| @@ -36,11 +36,17 @@ | @@ -36,11 +36,17 @@ | ||
| 36 | #undef PACKAGE_VERSION | 36 | #undef PACKAGE_VERSION |
| 37 | #undef PACKAGE_RELEASE | 37 | #undef PACKAGE_RELEASE |
| 38 | 38 | ||
| 39 | - /* Defaults */ | 39 | + /* Default settings */ |
| 40 | + | ||
| 41 | + /** @brief The lib3270's default host URL */ | ||
| 40 | #undef LIB3270_DEFAULT_HOST | 42 | #undef LIB3270_DEFAULT_HOST |
| 43 | + | ||
| 41 | #undef LIB3270_DATADIR | 44 | #undef LIB3270_DATADIR |
| 42 | 45 | ||
| 43 | - /* Libraries */ | 46 | + /** @brief the delay, in miliseconds, between the host unlocking the keyboard and lib3270 actually performing the unlock */ |
| 47 | + #define UNLOCK_MS 350 | ||
| 48 | + | ||
| 49 | + /* Library options */ | ||
| 44 | #undef HAVE_GNUC_VISIBILITY | 50 | #undef HAVE_GNUC_VISIBILITY |
| 45 | #undef HAVE_LIBINTL | 51 | #undef HAVE_LIBINTL |
| 46 | #undef HAVE_GETADDRINFO | 52 | #undef HAVE_GETADDRINFO |
src/include/lib3270.h
| @@ -1234,7 +1234,7 @@ | @@ -1234,7 +1234,7 @@ | ||
| 1234 | * The value is in milliseconds; use 0 to turn off the delay completely. | 1234 | * The value is in milliseconds; use 0 to turn off the delay completely. |
| 1235 | * | 1235 | * |
| 1236 | * @param session lib3270 session. | 1236 | * @param session lib3270 session. |
| 1237 | - * @param Delay in milliseconds. | 1237 | + * @param delay Delay in milliseconds. |
| 1238 | * | 1238 | * |
| 1239 | */ | 1239 | */ |
| 1240 | LIB3270_EXPORT int lib3270_set_unlock_delay(H3270 *session, unsigned int delay); | 1240 | LIB3270_EXPORT int lib3270_set_unlock_delay(H3270 *session, unsigned int delay); |
| @@ -1256,7 +1256,6 @@ | @@ -1256,7 +1256,6 @@ | ||
| 1256 | 1256 | ||
| 1257 | LIB3270_EXPORT void * lib3270_malloc(int len); | 1257 | LIB3270_EXPORT void * lib3270_malloc(int len); |
| 1258 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len); | 1258 | LIB3270_EXPORT void * lib3270_realloc(void *p, int len); |
| 1259 | -// LIB3270_EXPORT void * lib3270_replace(void **p, void *ptr); | ||
| 1260 | LIB3270_EXPORT void * lib3270_strdup(const char *str); | 1259 | LIB3270_EXPORT void * lib3270_strdup(const char *str); |
| 1261 | 1260 | ||
| 1262 | #define LIB3270_AUTOPTR_FUNC_NAME(TypeName) lib3270_autoptr_cleanup_##TypeName | 1261 | #define LIB3270_AUTOPTR_FUNC_NAME(TypeName) lib3270_autoptr_cleanup_##TypeName |
| @@ -1287,17 +1286,6 @@ | @@ -1287,17 +1286,6 @@ | ||
| 1287 | LIB3270_EXPORT H3270 * lib3270_get_default_session_handle(void); | 1286 | LIB3270_EXPORT H3270 * lib3270_get_default_session_handle(void); |
| 1288 | 1287 | ||
| 1289 | /** | 1288 | /** |
| 1290 | - * Get resource string. | ||
| 1291 | - * | ||
| 1292 | - * @param first_element First element of resource path | ||
| 1293 | - * @param ... Resource path (ends with NULL) | ||
| 1294 | - * | ||
| 1295 | - * @return Resource string (Release with lib3270_free()) | ||
| 1296 | - * | ||
| 1297 | - */ | ||
| 1298 | - LIB3270_EXPORT char * lib3270_get_resource_string(H3270 *hSession, const char *first_element, ...); | ||
| 1299 | - | ||
| 1300 | - /** | ||
| 1301 | * Get library version. | 1289 | * Get library version. |
| 1302 | * | 1290 | * |
| 1303 | * @return Version of active library as string. | 1291 | * @return Version of active library as string. |
| @@ -1371,6 +1359,17 @@ | @@ -1371,6 +1359,17 @@ | ||
| 1371 | #ifdef WIN32 | 1359 | #ifdef WIN32 |
| 1372 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e); | 1360 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e); |
| 1373 | LIB3270_EXPORT const char * lib3270_win32_local_charset(void); | 1361 | LIB3270_EXPORT const char * lib3270_win32_local_charset(void); |
| 1362 | + | ||
| 1363 | + /** | ||
| 1364 | + * @brief Translate windows error code. | ||
| 1365 | + * | ||
| 1366 | + * @param lasterror Windows error code (from GetLastError()). | ||
| 1367 | + * | ||
| 1368 | + * @return String with translated message (release it with lib3270_free). | ||
| 1369 | + * | ||
| 1370 | + */ | ||
| 1371 | + LIB3270_EXPORT char * lib3270_win32_translate_error_code(int lasterror); | ||
| 1372 | + | ||
| 1374 | #endif // WIn32 | 1373 | #endif // WIn32 |
| 1375 | 1374 | ||
| 1376 | /** | 1375 | /** |
src/lib3270/kybd.c
| @@ -113,7 +113,6 @@ static const unsigned char pa_xlate[] = | @@ -113,7 +113,6 @@ static const unsigned char pa_xlate[] = | ||
| 113 | }; | 113 | }; |
| 114 | #define PF_SZ (sizeof(pf_xlate)/sizeof(pf_xlate[0])) | 114 | #define PF_SZ (sizeof(pf_xlate)/sizeof(pf_xlate[0])) |
| 115 | #define PA_SZ (sizeof(pa_xlate)/sizeof(pa_xlate[0])) | 115 | #define PA_SZ (sizeof(pa_xlate)/sizeof(pa_xlate[0])) |
| 116 | -#define UNLOCK_MS 350 /* 0.35s after last unlock */ | ||
| 117 | 116 | ||
| 118 | static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean pasting,Boolean *skipped); | 117 | static Boolean key_Character(H3270 *hSession, int code, Boolean with_ge, Boolean pasting,Boolean *skipped); |
| 119 | static int flush_ta(H3270 *hSession); | 118 | static int flush_ta(H3270 *hSession); |
src/lib3270/paste.c
| @@ -209,7 +209,7 @@ static int set_string(H3270 *hSession, const unsigned char *str) | @@ -209,7 +209,7 @@ static int set_string(H3270 *hSession, const unsigned char *str) | ||
| 209 | } | 209 | } |
| 210 | str++; | 210 | str++; |
| 211 | 211 | ||
| 212 | - if(IN_3270 && lib3270_get_toggle(hSession,LIB3270_TOGGLE_MARGINED_PASTE) && BA_TO_COL(hSession->cursor_addr) < data.orig_col) | 212 | + if(IN_3270 && lib3270_get_toggle(hSession,LIB3270_TOGGLE_MARGINED_PASTE) && BA_TO_COL(hSession->cursor_addr) < ((unsigned int) data.orig_col)) |
| 213 | { | 213 | { |
| 214 | if(!remargin(hSession,data.orig_col)) | 214 | if(!remargin(hSession,data.orig_col)) |
| 215 | last = 0; | 215 | last = 0; |
src/lib3270/session.c
| @@ -337,9 +337,15 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | @@ -337,9 +337,15 @@ static void lib3270_session_init(H3270 *hSession, const char *model, const char | ||
| 337 | hSession->host_type = LIB3270_HOSTTYPE_DEFAULT; | 337 | hSession->host_type = LIB3270_HOSTTYPE_DEFAULT; |
| 338 | hSession->colors = 16; | 338 | hSession->colors = 16; |
| 339 | hSession->m3279 = 1; | 339 | hSession->m3279 = 1; |
| 340 | - hSession->unlock_delay_ms = 350; // 0.35s after last unlock | ||
| 341 | hSession->pointer = (unsigned short) LIB3270_POINTER_LOCKED; | 340 | hSession->pointer = (unsigned short) LIB3270_POINTER_LOCKED; |
| 342 | 341 | ||
| 342 | +#ifdef UNLOCK_MS | ||
| 343 | + hSession->unlock_delay_ms = UNLOCK_MS; | ||
| 344 | +#else | ||
| 345 | + #error aqui | ||
| 346 | + hSession->unlock_delay_ms = 350; | ||
| 347 | +#endif // UNLOCK_MS | ||
| 348 | + | ||
| 343 | // CSD | 349 | // CSD |
| 344 | for(f=0;f<4;f++) | 350 | for(f=0;f<4;f++) |
| 345 | hSession->csd[f] = hSession->saved_csd[f] = LIB3270_ANSI_CSD_US; | 351 | hSession->csd[f] = hSession->saved_csd[f] = LIB3270_ANSI_CSD_US; |
src/lib3270/windows/util.c
| @@ -121,6 +121,54 @@ const char * inet_ntop(int af, const void *src, char *dst, socklen_t cnt) | @@ -121,6 +121,54 @@ const char * inet_ntop(int af, const void *src, char *dst, socklen_t cnt) | ||
| 121 | } | 121 | } |
| 122 | #endif // HAVE_INET_NTOP | 122 | #endif // HAVE_INET_NTOP |
| 123 | 123 | ||
| 124 | +LIB3270_EXPORT char * lib3270_win32_translate_error_code(int lasterror) | ||
| 125 | +{ | ||
| 126 | + char * buffer = lib3270_malloc(4096); | ||
| 127 | + | ||
| 128 | + if(FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM,NULL,lasterror,MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),buffer,4096,NULL) == 0) | ||
| 129 | + { | ||
| 130 | + snprintf(buffer, 4095, _( "Windows error %d" ), e); | ||
| 131 | + } | ||
| 132 | + | ||
| 133 | +#ifdef HAVE_ICONV | ||
| 134 | + { | ||
| 135 | + // Convert from windows codepage to UTF-8 pw3270´s default charset | ||
| 136 | + iconv_t hConv = iconv_open("UTF-8",lib3270_win32_local_charset()); | ||
| 137 | + | ||
| 138 | + trace("[%s]",buffer); | ||
| 139 | + | ||
| 140 | + if(hConv == (iconv_t) -1) | ||
| 141 | + { | ||
| 142 | + lib3270_write_log(NULL,"iconv","%s: Error creating charset conversion",__FUNCTION__); | ||
| 143 | + } | ||
| 144 | + else | ||
| 145 | + { | ||
| 146 | + size_t in = strlen(buffer); | ||
| 147 | + size_t out = (in << 1); | ||
| 148 | + char * ptr; | ||
| 149 | + char * outBuffer = (char *) malloc(out); | ||
| 150 | + ICONV_CONST char * inBuffer = (ICONV_CONST char *) buffer; | ||
| 151 | + | ||
| 152 | + memset(ptr=outBuffer,0,out); | ||
| 153 | + | ||
| 154 | + iconv(hConv,NULL,NULL,NULL,NULL); // Reset state | ||
| 155 | + | ||
| 156 | + if(iconv(hConv,&inBuffer,&in,&ptr,&out) != ((size_t) -1)) | ||
| 157 | + { | ||
| 158 | + strncpy(buffer,outBuffer,4095); | ||
| 159 | + } | ||
| 160 | + | ||
| 161 | + free(outBuffer); | ||
| 162 | + | ||
| 163 | + iconv_close(hConv); | ||
| 164 | + } | ||
| 165 | + | ||
| 166 | + } | ||
| 167 | +#endif // HAVE_ICONV | ||
| 168 | + | ||
| 169 | + return buffer; | ||
| 170 | +} | ||
| 171 | + | ||
| 124 | // Decode a Win32 error number. | 172 | // Decode a Win32 error number. |
| 125 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e) | 173 | LIB3270_EXPORT const char * lib3270_win32_strerror(int e) |
| 126 | { | 174 | { |