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 | 183 | // static unsigned char *lbptr; |
| 184 | 184 | // static int lnext = 0; |
| 185 | 185 | // static int backslashed = 0; |
| 186 | -static int t_valid = 0; | |
| 186 | +//static int t_valid = 0; | |
| 187 | 187 | static char vintr; |
| 188 | 188 | static char vquit; |
| 189 | 189 | static char verase; |
| ... | ... | @@ -230,12 +230,12 @@ static void tn3270e_nak(enum pds); |
| 230 | 230 | |
| 231 | 231 | #if defined(X3270_ANSI) /*[*/ |
| 232 | 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 | 239 | static void do_eof(char c); |
| 240 | 240 | static void do_eol(char c); |
| 241 | 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 | 496 | { |
| 497 | 497 | // struct servent * sp; |
| 498 | 498 | // struct hostent * hp; |
| 499 | + | |
| 500 | +#if defined(X3270_ANSI) | |
| 501 | + static int t_valid = 0; | |
| 502 | +#endif // X3270_ANSI | |
| 503 | + | |
| 499 | 504 | char passthru_haddr[8]; |
| 500 | 505 | int passthru_len = 0; |
| 501 | 506 | unsigned short passthru_port = 0; |
| ... | ... | @@ -2163,23 +2168,23 @@ static void net_cookout(H3270 *hSession, const char *buf, int len) |
| 2163 | 2168 | if (c == '\n') |
| 2164 | 2169 | do_eol(c); |
| 2165 | 2170 | else if (c == vintr) |
| 2166 | - do_intr(c); | |
| 2171 | + do_intr(hSession, c); | |
| 2167 | 2172 | else if (c == vquit) |
| 2168 | - do_quit(c); | |
| 2173 | + do_quit(hSession,c); | |
| 2169 | 2174 | else if (c == verase) |
| 2170 | - do_cerase(c); | |
| 2175 | + do_cerase(hSession,c); | |
| 2171 | 2176 | else if (c == vkill) |
| 2172 | - do_kill(c); | |
| 2177 | + do_kill(hSession,c); | |
| 2173 | 2178 | else if (c == vwerase) |
| 2174 | - do_werase(c); | |
| 2179 | + do_werase(hSession,c); | |
| 2175 | 2180 | else if (c == vrprnt) |
| 2176 | - do_rprnt(c); | |
| 2181 | + do_rprnt(hSession,c); | |
| 2177 | 2182 | else if (c == veof) |
| 2178 | 2183 | do_eof(c); |
| 2179 | 2184 | else if (c == vlnext) |
| 2180 | 2185 | do_lnext(c); |
| 2181 | 2186 | else if (c == 0x08 || c == 0x7f) /* Yes, a hack. */ |
| 2182 | - do_cerase(c); | |
| 2187 | + do_cerase(hSession,c); | |
| 2183 | 2188 | else |
| 2184 | 2189 | do_data(c); |
| 2185 | 2190 | } |
| ... | ... | @@ -2234,10 +2239,10 @@ do_data(char c) |
| 2234 | 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 | 2246 | do_data(c); |
| 2242 | 2247 | return; |
| 2243 | 2248 | } |
| ... | ... | @@ -2246,10 +2251,10 @@ do_intr(char c) |
| 2246 | 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 | 2258 | do_data(c); |
| 2254 | 2259 | return; |
| 2255 | 2260 | } |
| ... | ... | @@ -2258,47 +2263,48 @@ do_quit(char c) |
| 2258 | 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 | 2268 | int len; |
| 2265 | 2269 | |
| 2266 | - if (h3270.backslashed) { | |
| 2267 | - h3270.lbptr--; | |
| 2270 | + if (hSession->backslashed) | |
| 2271 | + { | |
| 2272 | + hSession->lbptr--; | |
| 2268 | 2273 | ansi_process_s("\b"); |
| 2269 | 2274 | do_data(c); |
| 2270 | 2275 | return; |
| 2271 | 2276 | } |
| 2272 | - if (h3270.lnext) { | |
| 2277 | + if (hSession->lnext) | |
| 2278 | + { | |
| 2273 | 2279 | do_data(c); |
| 2274 | 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 | 2286 | while (len--) |
| 2280 | 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 | 2293 | int any = 0; |
| 2288 | 2294 | int len; |
| 2289 | 2295 | |
| 2290 | - if (h3270.lnext) { | |
| 2296 | + if (hSession->lnext) { | |
| 2291 | 2297 | do_data(c); |
| 2292 | 2298 | return; |
| 2293 | 2299 | } |
| 2294 | - while (h3270.lbptr > h3270.lbuf) { | |
| 2300 | + while (hSession->lbptr > hSession->lbuf) { | |
| 2295 | 2301 | char ch; |
| 2296 | 2302 | |
| 2297 | - ch = *--h3270.lbptr; | |
| 2303 | + ch = *--hSession->lbptr; | |
| 2298 | 2304 | |
| 2299 | 2305 | if (ch == ' ' || ch == '\t') { |
| 2300 | 2306 | if (any) { |
| 2301 | - ++h3270.lbptr; | |
| 2307 | + ++hSession->lbptr; | |
| 2302 | 2308 | break; |
| 2303 | 2309 | } |
| 2304 | 2310 | } else |
| ... | ... | @@ -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 | 2321 | int i, len; |
| 2317 | 2322 | |
| 2318 | - if (h3270.backslashed) { | |
| 2319 | - h3270.lbptr--; | |
| 2323 | + if (hSession->backslashed) { | |
| 2324 | + hSession->lbptr--; | |
| 2320 | 2325 | ansi_process_s("\b"); |
| 2321 | 2326 | do_data(c); |
| 2322 | 2327 | return; |
| 2323 | 2328 | } |
| 2324 | - if (h3270.lnext) { | |
| 2329 | + if (hSession->lnext) { | |
| 2325 | 2330 | do_data(c); |
| 2326 | 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 | 2336 | for (i = 0; i < len; i++) |
| 2332 | 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 | 2343 | unsigned char *p; |
| 2340 | 2344 | |
| 2341 | - if (h3270.lnext) { | |
| 2345 | + if (hSession->lnext) { | |
| 2342 | 2346 | do_data(c); |
| 2343 | 2347 | return; |
| 2344 | 2348 | } |
| 2345 | 2349 | ansi_process_s(ctl_see((int) c)); |
| 2346 | 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 | 2352 | ansi_process_s(ctl_see((int) *p)); |
| 2349 | 2353 | } |
| 2350 | 2354 | ... | ... |