Commit f270ea9aa907ba1e5f8b2a410d831d6313b60ff3
1 parent
844f2ac2
Exists in
master
and in
5 other branches
Corrigindo montagem dos campos de entrada
Showing
1 changed file
with
27 additions
and
44 deletions
Show diff stats
src/lib3270/html.c
@@ -101,11 +101,11 @@ | @@ -101,11 +101,11 @@ | ||
101 | int szText; | 101 | int szText; |
102 | int form; | 102 | int form; |
103 | 103 | ||
104 | - enum mode | 104 | + enum HTML_MODE |
105 | { | 105 | { |
106 | - HTML_MODE_TEXT, /**< Non editable */ | ||
107 | - HTML_MODE_INPUT_TEXT, /**< Text input */ | ||
108 | - HTML_MODE_INPUT_VALUE, /**< Value input */ | 106 | + HTML_MODE_TEXT, /**< Non editable */ |
107 | + HTML_MODE_INPUT_TEXT, /**< Text input */ | ||
108 | + HTML_MODE_INPUT_PASSWORD, /**< Password input */ | ||
109 | HTML_MODE_INPUT_BUTTON, /**< Button input (PFkey) */ | 109 | HTML_MODE_INPUT_BUTTON, /**< Button input (PFkey) */ |
110 | } mode; | 110 | } mode; |
111 | 111 | ||
@@ -179,7 +179,7 @@ | @@ -179,7 +179,7 @@ | ||
179 | 179 | ||
180 | } | 180 | } |
181 | 181 | ||
182 | - static void open_input(struct html_info *info, int addr, const char *type) | 182 | + static void open_input(struct html_info *info, int addr, enum HTML_MODE mode) |
183 | { | 183 | { |
184 | char name[30]; | 184 | char name[30]; |
185 | 185 | ||
@@ -188,21 +188,27 @@ | @@ -188,21 +188,27 @@ | ||
188 | snprintf(name,29,"F%04d",addr); | 188 | snprintf(name,29,"F%04d",addr); |
189 | 189 | ||
190 | append_string(info,"<input type=\""); | 190 | append_string(info,"<input type=\""); |
191 | - append_string(info,type); | 191 | + append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" ); |
192 | append_string(info,"\" name=\""); | 192 | append_string(info,"\" name=\""); |
193 | append_string(info,name); | 193 | append_string(info,name); |
194 | - append_string(info,"\""); | ||
195 | - info->mode = HTML_MODE_INPUT_TEXT; | 194 | + append_string(info,"\" value=\""); |
195 | + info->mode = mode; | ||
196 | + info->maxlength = 0; | ||
197 | + | ||
196 | } | 198 | } |
197 | 199 | ||
198 | static void close_input(struct html_info *info) | 200 | static void close_input(struct html_info *info) |
199 | { | 201 | { |
200 | char buffer[80]; | 202 | char buffer[80]; |
203 | + char *ptr; | ||
201 | 204 | ||
202 | if(info->mode == HTML_MODE_TEXT) | 205 | if(info->mode == HTML_MODE_TEXT) |
203 | return; | 206 | return; |
204 | 207 | ||
205 | - snprintf(buffer,80," maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); | 208 | + for(ptr = info->text+(strlen(info->text)-1);ptr > info->text && *ptr == ' ';ptr--); |
209 | + *(++ptr) = 0; | ||
210 | + | ||
211 | + snprintf(buffer,80,"\" maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength); | ||
206 | append_string(info,buffer); | 212 | append_string(info,buffer); |
207 | 213 | ||
208 | append_string(info,"></input>"); | 214 | append_string(info,"></input>"); |
@@ -262,35 +268,9 @@ | @@ -262,35 +268,9 @@ | ||
262 | { | 268 | { |
263 | // Input field | 269 | // Input field |
264 | unsigned char attr = get_field_attribute(session,baddr+col+1); | 270 | unsigned char attr = get_field_attribute(session,baddr+col+1); |
265 | - char * text = lib3270_get_field_at(session,baddr+col+1); | ||
266 | - | ||
267 | - open_input(&info,baddr+col+1,FA_IS_ZERO(attr) ? "password" : "text"); | ||
268 | - | ||
269 | - if(text) | ||
270 | - { | ||
271 | - char *ptr = text; | ||
272 | - | ||
273 | - for(ptr = text; *ptr && (*ptr == ' ' || *ptr == '_'); ptr++); | ||
274 | - | ||
275 | - if(*ptr) | ||
276 | - { | ||
277 | - int f; | ||
278 | - char * last = ptr; | ||
279 | - | ||
280 | - for(f=0;ptr[f];f++) | ||
281 | - { | ||
282 | - if(ptr[f] > ' ') | ||
283 | - last = ptr+f+1; | ||
284 | - } | ||
285 | - *last = 0; | 271 | + //char * text = lib3270_get_field_at(session,baddr+col+1); |
286 | 272 | ||
287 | - append_string(&info," value=\""); | ||
288 | - append_string(&info,ptr); | ||
289 | - append_string(&info,"\""); | ||
290 | - } | ||
291 | - | ||
292 | - lib3270_free(text); | ||
293 | - } | 273 | + open_input(&info,baddr+col+1,FA_IS_ZERO(attr) ? HTML_MODE_INPUT_PASSWORD : HTML_MODE_INPUT_TEXT); |
294 | 274 | ||
295 | } | 275 | } |
296 | else if(col < len && session->text[baddr+col+1].chr == 'F') | 276 | else if(col < len && session->text[baddr+col+1].chr == 'F') |
@@ -331,10 +311,11 @@ | @@ -331,10 +311,11 @@ | ||
331 | append_string(&info," "); | 311 | append_string(&info," "); |
332 | } | 312 | } |
333 | } | 313 | } |
334 | - else if(info.mode == HTML_MODE_TEXT) | 314 | + else |
335 | { | 315 | { |
336 | // Normal text | 316 | // Normal text |
337 | - update_colors(&info,session->text[baddr+col].attr); | 317 | + if(info.mode == HTML_MODE_TEXT) |
318 | + update_colors(&info,session->text[baddr+col].attr); | ||
338 | 319 | ||
339 | if(session->text[baddr+col].attr & LIB3270_ATTR_CG) | 320 | if(session->text[baddr+col].attr & LIB3270_ATTR_CG) |
340 | { | 321 | { |
@@ -363,6 +344,10 @@ | @@ -363,6 +344,10 @@ | ||
363 | append_char(&info, xlat, session->text[baddr+col].chr); | 344 | append_char(&info, xlat, session->text[baddr+col].chr); |
364 | 345 | ||
365 | } | 346 | } |
347 | + else if(session->text[baddr+col].chr == ' ') | ||
348 | + { | ||
349 | + append_string(&info,info.mode == HTML_MODE_TEXT ? " " : " "); | ||
350 | + } | ||
366 | else | 351 | else |
367 | { | 352 | { |
368 | static const struct chr_xlat xlat[] = | 353 | static const struct chr_xlat xlat[] = |
@@ -371,17 +356,15 @@ | @@ -371,17 +356,15 @@ | ||
371 | { '&', "&" }, | 356 | { '&', "&" }, |
372 | { '<', "<" }, | 357 | { '<', "<" }, |
373 | { '>', ">" }, | 358 | { '>', ">" }, |
374 | - { ' ', " " }, | ||
375 | 359 | ||
376 | { 0x00, NULL } | 360 | { 0x00, NULL } |
377 | }; | 361 | }; |
362 | + | ||
378 | append_char(&info, xlat, session->text[baddr+col].chr); | 363 | append_char(&info, xlat, session->text[baddr+col].chr); |
379 | } | 364 | } |
380 | - } | ||
381 | - else | ||
382 | - { | ||
383 | - // Input contents | 365 | + |
384 | info.maxlength++; | 366 | info.maxlength++; |
367 | + | ||
385 | } | 368 | } |
386 | } | 369 | } |
387 | } | 370 | } |