Commit f270ea9aa907ba1e5f8b2a410d831d6313b60ff3

Authored by perry.werneck@gmail.com
1 parent 844f2ac2

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 101 int szText;
102 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 109 HTML_MODE_INPUT_BUTTON, /**< Button input (PFkey) */
110 110 } mode;
111 111  
... ... @@ -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 184 char name[30];
185 185  
... ... @@ -188,21 +188,27 @@
188 188 snprintf(name,29,"F%04d",addr);
189 189  
190 190 append_string(info,"<input type=\"");
191   - append_string(info,type);
  191 + append_string(info,mode == HTML_MODE_INPUT_TEXT ? "text" : "password" );
192 192 append_string(info,"\" name=\"");
193 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 200 static void close_input(struct html_info *info)
199 201 {
200 202 char buffer[80];
  203 + char *ptr;
201 204  
202 205 if(info->mode == HTML_MODE_TEXT)
203 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 212 append_string(info,buffer);
207 213  
208 214 append_string(info,"></input>");
... ... @@ -262,35 +268,9 @@
262 268 {
263 269 // Input field
264 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 276 else if(col < len && session->text[baddr+col+1].chr == 'F')
... ... @@ -331,10 +311,11 @@
331 311 append_string(&info,"&nbsp;");
332 312 }
333 313 }
334   - else if(info.mode == HTML_MODE_TEXT)
  314 + else
335 315 {
336 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 320 if(session->text[baddr+col].attr & LIB3270_ATTR_CG)
340 321 {
... ... @@ -363,6 +344,10 @@
363 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 ? "&nbsp;" : " ");
  350 + }
366 351 else
367 352 {
368 353 static const struct chr_xlat xlat[] =
... ... @@ -371,17 +356,15 @@
371 356 { '&', "&amp;" },
372 357 { '<', "&lt;" },
373 358 { '>', "&gt;" },
374   - { ' ', "&nbsp;" },
375 359  
376 360 { 0x00, NULL }
377 361 };
  362 +
378 363 append_char(&info, xlat, session->text[baddr+col].chr);
379 364 }
380   - }
381   - else
382   - {
383   - // Input contents
  365 +
384 366 info.maxlength++;
  367 +
385 368 }
386 369 }
387 370 }
... ...