Commit d99b30f2c0ef4d70266ce8d7ffac82198d0fd51a
1 parent
c7915bdf
Exists in
master
and in
5 other branches
Mais ajustes para multi-sessao
Showing
1 changed file
with
48 additions
and
44 deletions
Show diff stats
src/lib3270/telnet.c
| @@ -183,7 +183,7 @@ Boolean local_process = False; | @@ -183,7 +183,7 @@ Boolean local_process = False; | ||
| 183 | // static unsigned char *lbptr; | 183 | // static unsigned char *lbptr; |
| 184 | // static int lnext = 0; | 184 | // static int lnext = 0; |
| 185 | // static int backslashed = 0; | 185 | // static int backslashed = 0; |
| 186 | -static int t_valid = 0; | 186 | +//static int t_valid = 0; |
| 187 | static char vintr; | 187 | static char vintr; |
| 188 | static char vquit; | 188 | static char vquit; |
| 189 | static char verase; | 189 | static char verase; |
| @@ -230,12 +230,12 @@ static void tn3270e_nak(enum pds); | @@ -230,12 +230,12 @@ static void tn3270e_nak(enum pds); | ||
| 230 | 230 | ||
| 231 | #if defined(X3270_ANSI) /*[*/ | 231 | #if defined(X3270_ANSI) /*[*/ |
| 232 | static void do_data(char c); | 232 | static void do_data(char c); |
| 233 | -static void do_intr(char c); | ||
| 234 | -static void do_quit(char c); | ||
| 235 | -static void do_cerase(char c); | ||
| 236 | -static void do_werase(char c); | ||
| 237 | -static void do_kill(char c); | ||
| 238 | -static void do_rprnt(char c); | 233 | +static void do_intr(H3270 *hSession, char c); |
| 234 | +static void do_quit(H3270 *hSession, char c); | ||
| 235 | +static void do_cerase(H3270 *hSession, char c); | ||
| 236 | +static void do_werase(H3270 *hSession, char c); | ||
| 237 | +static void do_kill(H3270 *hSession, char c); | ||
| 238 | +static void do_rprnt(H3270 *hSession, char c); | ||
| 239 | static void do_eof(char c); | 239 | static void do_eof(char c); |
| 240 | static void do_eol(char c); | 240 | static void do_eol(char c); |
| 241 | static void do_lnext(char c); | 241 | static void do_lnext(char c); |
| @@ -496,6 +496,11 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | @@ -496,6 +496,11 @@ int net_connect(H3270 *session, const char *host, char *portname, Boolean ls, Bo | ||
| 496 | { | 496 | { |
| 497 | // struct servent * sp; | 497 | // struct servent * sp; |
| 498 | // struct hostent * hp; | 498 | // struct hostent * hp; |
| 499 | + | ||
| 500 | +#if defined(X3270_ANSI) | ||
| 501 | + static int t_valid = 0; | ||
| 502 | +#endif // X3270_ANSI | ||
| 503 | + | ||
| 499 | char passthru_haddr[8]; | 504 | char passthru_haddr[8]; |
| 500 | int passthru_len = 0; | 505 | int passthru_len = 0; |
| 501 | unsigned short passthru_port = 0; | 506 | unsigned short passthru_port = 0; |
| @@ -2163,23 +2168,23 @@ static void net_cookout(H3270 *hSession, const char *buf, int len) | @@ -2163,23 +2168,23 @@ static void net_cookout(H3270 *hSession, const char *buf, int len) | ||
| 2163 | if (c == '\n') | 2168 | if (c == '\n') |
| 2164 | do_eol(c); | 2169 | do_eol(c); |
| 2165 | else if (c == vintr) | 2170 | else if (c == vintr) |
| 2166 | - do_intr(c); | 2171 | + do_intr(hSession, c); |
| 2167 | else if (c == vquit) | 2172 | else if (c == vquit) |
| 2168 | - do_quit(c); | 2173 | + do_quit(hSession,c); |
| 2169 | else if (c == verase) | 2174 | else if (c == verase) |
| 2170 | - do_cerase(c); | 2175 | + do_cerase(hSession,c); |
| 2171 | else if (c == vkill) | 2176 | else if (c == vkill) |
| 2172 | - do_kill(c); | 2177 | + do_kill(hSession,c); |
| 2173 | else if (c == vwerase) | 2178 | else if (c == vwerase) |
| 2174 | - do_werase(c); | 2179 | + do_werase(hSession,c); |
| 2175 | else if (c == vrprnt) | 2180 | else if (c == vrprnt) |
| 2176 | - do_rprnt(c); | 2181 | + do_rprnt(hSession,c); |
| 2177 | else if (c == veof) | 2182 | else if (c == veof) |
| 2178 | do_eof(c); | 2183 | do_eof(c); |
| 2179 | else if (c == vlnext) | 2184 | else if (c == vlnext) |
| 2180 | do_lnext(c); | 2185 | do_lnext(c); |
| 2181 | else if (c == 0x08 || c == 0x7f) /* Yes, a hack. */ | 2186 | else if (c == 0x08 || c == 0x7f) /* Yes, a hack. */ |
| 2182 | - do_cerase(c); | 2187 | + do_cerase(hSession,c); |
| 2183 | else | 2188 | else |
| 2184 | do_data(c); | 2189 | do_data(c); |
| 2185 | } | 2190 | } |
| @@ -2234,10 +2239,10 @@ do_data(char c) | @@ -2234,10 +2239,10 @@ do_data(char c) | ||
| 2234 | h3270.backslashed = 0; | 2239 | h3270.backslashed = 0; |
| 2235 | } | 2240 | } |
| 2236 | 2241 | ||
| 2237 | -static void | ||
| 2238 | -do_intr(char c) | 2242 | +static void do_intr(H3270 *hSession, char c) |
| 2239 | { | 2243 | { |
| 2240 | - if (h3270.lnext) { | 2244 | + if (hSession->lnext) |
| 2245 | + { | ||
| 2241 | do_data(c); | 2246 | do_data(c); |
| 2242 | return; | 2247 | return; |
| 2243 | } | 2248 | } |
| @@ -2246,10 +2251,10 @@ do_intr(char c) | @@ -2246,10 +2251,10 @@ do_intr(char c) | ||
| 2246 | net_interrupt(); | 2251 | net_interrupt(); |
| 2247 | } | 2252 | } |
| 2248 | 2253 | ||
| 2249 | -static void | ||
| 2250 | -do_quit(char c) | 2254 | +static void do_quit(H3270 *hSession, char c) |
| 2251 | { | 2255 | { |
| 2252 | - if (h3270.lnext) { | 2256 | + if (hSession->lnext) |
| 2257 | + { | ||
| 2253 | do_data(c); | 2258 | do_data(c); |
| 2254 | return; | 2259 | return; |
| 2255 | } | 2260 | } |
| @@ -2258,47 +2263,48 @@ do_quit(char c) | @@ -2258,47 +2263,48 @@ do_quit(char c) | ||
| 2258 | net_break(); | 2263 | net_break(); |
| 2259 | } | 2264 | } |
| 2260 | 2265 | ||
| 2261 | -static void | ||
| 2262 | -do_cerase(char c) | 2266 | +static void do_cerase(H3270 *hSession, char c) |
| 2263 | { | 2267 | { |
| 2264 | int len; | 2268 | int len; |
| 2265 | 2269 | ||
| 2266 | - if (h3270.backslashed) { | ||
| 2267 | - h3270.lbptr--; | 2270 | + if (hSession->backslashed) |
| 2271 | + { | ||
| 2272 | + hSession->lbptr--; | ||
| 2268 | ansi_process_s("\b"); | 2273 | ansi_process_s("\b"); |
| 2269 | do_data(c); | 2274 | do_data(c); |
| 2270 | return; | 2275 | return; |
| 2271 | } | 2276 | } |
| 2272 | - if (h3270.lnext) { | 2277 | + if (hSession->lnext) |
| 2278 | + { | ||
| 2273 | do_data(c); | 2279 | do_data(c); |
| 2274 | return; | 2280 | return; |
| 2275 | } | 2281 | } |
| 2276 | - if (h3270.lbptr > h3270.lbuf) { | ||
| 2277 | - len = strlen(ctl_see((int) *--h3270.lbptr)); | 2282 | + if (hSession->lbptr > hSession->lbuf) |
| 2283 | + { | ||
| 2284 | + len = strlen(ctl_see((int) *--hSession->lbptr)); | ||
| 2278 | 2285 | ||
| 2279 | while (len--) | 2286 | while (len--) |
| 2280 | ansi_process_s("\b \b"); | 2287 | ansi_process_s("\b \b"); |
| 2281 | } | 2288 | } |
| 2282 | } | 2289 | } |
| 2283 | 2290 | ||
| 2284 | -static void | ||
| 2285 | -do_werase(char c) | 2291 | +static void do_werase(H3270 *hSession, char c) |
| 2286 | { | 2292 | { |
| 2287 | int any = 0; | 2293 | int any = 0; |
| 2288 | int len; | 2294 | int len; |
| 2289 | 2295 | ||
| 2290 | - if (h3270.lnext) { | 2296 | + if (hSession->lnext) { |
| 2291 | do_data(c); | 2297 | do_data(c); |
| 2292 | return; | 2298 | return; |
| 2293 | } | 2299 | } |
| 2294 | - while (h3270.lbptr > h3270.lbuf) { | 2300 | + while (hSession->lbptr > hSession->lbuf) { |
| 2295 | char ch; | 2301 | char ch; |
| 2296 | 2302 | ||
| 2297 | - ch = *--h3270.lbptr; | 2303 | + ch = *--hSession->lbptr; |
| 2298 | 2304 | ||
| 2299 | if (ch == ' ' || ch == '\t') { | 2305 | if (ch == ' ' || ch == '\t') { |
| 2300 | if (any) { | 2306 | if (any) { |
| 2301 | - ++h3270.lbptr; | 2307 | + ++hSession->lbptr; |
| 2302 | break; | 2308 | break; |
| 2303 | } | 2309 | } |
| 2304 | } else | 2310 | } else |
| @@ -2310,41 +2316,39 @@ do_werase(char c) | @@ -2310,41 +2316,39 @@ do_werase(char c) | ||
| 2310 | } | 2316 | } |
| 2311 | } | 2317 | } |
| 2312 | 2318 | ||
| 2313 | -static void | ||
| 2314 | -do_kill(char c) | 2319 | +static void do_kill(H3270 *hSession, char c) |
| 2315 | { | 2320 | { |
| 2316 | int i, len; | 2321 | int i, len; |
| 2317 | 2322 | ||
| 2318 | - if (h3270.backslashed) { | ||
| 2319 | - h3270.lbptr--; | 2323 | + if (hSession->backslashed) { |
| 2324 | + hSession->lbptr--; | ||
| 2320 | ansi_process_s("\b"); | 2325 | ansi_process_s("\b"); |
| 2321 | do_data(c); | 2326 | do_data(c); |
| 2322 | return; | 2327 | return; |
| 2323 | } | 2328 | } |
| 2324 | - if (h3270.lnext) { | 2329 | + if (hSession->lnext) { |
| 2325 | do_data(c); | 2330 | do_data(c); |
| 2326 | return; | 2331 | return; |
| 2327 | } | 2332 | } |
| 2328 | - while (h3270.lbptr > h3270.lbuf) { | ||
| 2329 | - len = strlen(ctl_see((int) *--h3270.lbptr)); | 2333 | + while (hSession->lbptr > hSession->lbuf) { |
| 2334 | + len = strlen(ctl_see((int) *--hSession->lbptr)); | ||
| 2330 | 2335 | ||
| 2331 | for (i = 0; i < len; i++) | 2336 | for (i = 0; i < len; i++) |
| 2332 | ansi_process_s("\b \b"); | 2337 | ansi_process_s("\b \b"); |
| 2333 | } | 2338 | } |
| 2334 | } | 2339 | } |
| 2335 | 2340 | ||
| 2336 | -static void | ||
| 2337 | -do_rprnt(char c) | 2341 | +static void do_rprnt(H3270 *hSession, char c) |
| 2338 | { | 2342 | { |
| 2339 | unsigned char *p; | 2343 | unsigned char *p; |
| 2340 | 2344 | ||
| 2341 | - if (h3270.lnext) { | 2345 | + if (hSession->lnext) { |
| 2342 | do_data(c); | 2346 | do_data(c); |
| 2343 | return; | 2347 | return; |
| 2344 | } | 2348 | } |
| 2345 | ansi_process_s(ctl_see((int) c)); | 2349 | ansi_process_s(ctl_see((int) c)); |
| 2346 | ansi_process_s("\r\n"); | 2350 | ansi_process_s("\r\n"); |
| 2347 | - for (p = h3270.lbuf; p < h3270.lbptr; p++) | 2351 | + for (p = hSession->lbuf; p < hSession->lbptr; p++) |
| 2348 | ansi_process_s(ctl_see((int) *p)); | 2352 | ansi_process_s(ctl_see((int) *p)); |
| 2349 | } | 2353 | } |
| 2350 | 2354 |