Commit e4c721e638623cc6ac1d2ed4843b0fa94bcb7d53

Authored by perry.werneck@gmail.com
1 parent 6cdfc7ad

Implementando conversão do buffer de terminal para HTML

@@ -1,333 +0,0 @@ @@ -1,333 +0,0 @@
1 -/*  
2 - * Modifications Copyright 1993, 1994, 1995, 1999, 2000, 2002, 2003, 2004,  
3 - * 2005 by Paul Mattes.  
4 - * RPQNAMES modifications Copyright 2004 by Don Russell.  
5 - * Original X11 Port Copyright 1990 by Jeff Sparkes.  
6 - * Permission to use, copy, modify, and distribute this software and its  
7 - * documentation for any purpose and without fee is hereby granted,  
8 - * provided that the above copyright notice appear in all copies and that  
9 - * both that copyright notice and this permission notice appear in  
10 - * supporting documentation.  
11 - *  
12 - * Copyright 1989 by Georgia Tech Research Corporation, Atlanta, GA 30332.  
13 - * All Rights Reserved. GTRC hereby grants public use of this software.  
14 - * Derivative works based on this software must incorporate this copyright  
15 - * notice.  
16 - *  
17 - * x3270, c3270, s3270, tcl3270 and pr3287 are distributed in the hope that  
18 - * they will be useful, but WITHOUT ANY WARRANTY; without even the implied  
19 - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
20 - * file LICENSE for more details.  
21 - */  
22 -  
23 -/*  
24 - * 3270ds.h  
25 - *  
26 - * Header file for the 3270 Data Stream Protocol.  
27 - */  
28 -  
29 -/* 3270 commands */  
30 -#define CMD_W 0x01 /* write */  
31 -#define CMD_RB 0x02 /* read buffer */  
32 -#define CMD_NOP 0x03 /* no-op */  
33 -#define CMD_EW 0x05 /* erase/write */  
34 -#define CMD_RM 0x06 /* read modified */  
35 -#define CMD_EWA 0x0d /* erase/write alternate */  
36 -#define CMD_RMA 0x0e /* read modified all */  
37 -#define CMD_EAU 0x0f /* erase all unprotected */  
38 -#define CMD_WSF 0x11 /* write structured field */  
39 -  
40 -/* SNA 3270 commands */  
41 -#define SNA_CMD_RMA 0x6e /* read modified all */  
42 -#define SNA_CMD_EAU 0x6f /* erase all unprotected */  
43 -#define SNA_CMD_EWA 0x7e /* erase/write alternate */  
44 -#define SNA_CMD_W 0xf1 /* write */  
45 -#define SNA_CMD_RB 0xf2 /* read buffer */  
46 -#define SNA_CMD_WSF 0xf3 /* write structured field */  
47 -#define SNA_CMD_EW 0xf5 /* erase/write */  
48 -#define SNA_CMD_RM 0xf6 /* read modified */  
49 -  
50 -/* 3270 orders */  
51 -#define ORDER_PT 0x05 /* program tab */  
52 -#define ORDER_GE 0x08 /* graphic escape */  
53 -#define ORDER_SBA 0x11 /* set buffer address */  
54 -#define ORDER_EUA 0x12 /* erase unprotected to address */  
55 -#define ORDER_IC 0x13 /* insert cursor */  
56 -#define ORDER_SF 0x1d /* start field */  
57 -#define ORDER_SA 0x28 /* set attribute */  
58 -#define ORDER_SFE 0x29 /* start field extended */  
59 -#define ORDER_YALE 0x2b /* Yale sub command */  
60 -#define ORDER_MF 0x2c /* modify field */  
61 -#define ORDER_RA 0x3c /* repeat to address */  
62 -  
63 -#define FCORDER_NULL 0x00 /* format control: null */  
64 -#define FCORDER_FF 0x0c /* form feed */  
65 -#define FCORDER_CR 0x0d /* carriage return */  
66 -#define FCORDER_SO 0x0e /* shift out (DBCS subfield) */  
67 -#define FCORDER_SI 0x0f /* shift in (DBCS end) */  
68 -#define FCORDER_NL 0x15 /* new line */  
69 -#define FCORDER_EM 0x19 /* end of medium */  
70 -#define FCORDER_DUP 0x1c /* duplicate */  
71 -#define FCORDER_FM 0x1e /* field mark */  
72 -#define FCORDER_SUB 0x3f /* substitute */  
73 -#define FCORDER_EO 0xff /* eight ones */  
74 -  
75 -/* SCS control code, some overlap orders */  
76 -#define SCS_BS 0x16 /* Back Space */  
77 -#define SCS_BEL 0x2f /* Bell Function */  
78 -#define SCS_CR 0x0d /* Carriage Return */  
79 -#define SCS_ENP 0x14 /* Enable Presentation */  
80 -#define SCS_FF 0x0c /* Forms Feed */  
81 -#define SCS_GE 0x08 /* Graphic Escape */  
82 -#define SCS_HT 0x05 /* Horizontal Tab */  
83 -#define SCS_INP 0x24 /* Inhibit Presentation */  
84 -#define SCS_IRS 0x1e /* Interchange-Record Separator */  
85 -#define SCS_LF 0x25 /* Line Feed */  
86 -#define SCS_NL 0x15 /* New Line */  
87 -#define SCS_SA 0x28 /* Set Attribute: */  
88 -#define SCS_SA_RESET 0x00 /* Reset all */  
89 -#define SCS_SA_HIGHLIGHT 0x41 /* Highlighting */  
90 -#define SCS_SA_CS 0x42 /* Character set */  
91 -#define SCS_SA_GRID 0xc2 /* Grid */  
92 -#define SCS_SET 0x2b /* Set: */  
93 -#define SCS_SHF 0xc1 /* Horizontal format */  
94 -#define SCS_SLD 0xc6 /* Line Density */  
95 -#define SCS_SVF 0xc2 /* Vertical Format */  
96 -#define SCS_SO 0x0e /* Shift out (DBCS subfield start) */  
97 -#define SCS_SI 0x0f /* Shift in (DBCS subfield end) */  
98 -#define SCS_TRN 0x35 /* Transparent */  
99 -#define SCS_VCS 0x04 /* Vertical Channel Select */  
100 -#define SCS_VT 0x0b /* Vertical Tab */  
101 -  
102 -/* Structured fields */  
103 -#define SF_READ_PART 0x01 /* read partition */  
104 -#define SF_RP_QUERY 0x02 /* query */  
105 -#define SF_RP_QLIST 0x03 /* query list */  
106 -#define SF_RPQ_LIST 0x00 /* QCODE list */  
107 -#define SF_RPQ_EQUIV 0x40 /* equivalent+ QCODE list */  
108 -#define SF_RPQ_ALL 0x80 /* all */  
109 -#define SF_ERASE_RESET 0x03 /* erase/reset */  
110 -#define SF_ER_DEFAULT 0x00 /* default */  
111 -#define SF_ER_ALT 0x80 /* alternate */  
112 -#define SF_SET_REPLY_MODE 0x09 /* set reply mode */  
113 -#define SF_SRM_FIELD 0x00 /* field */  
114 -#define SF_SRM_XFIELD 0x01 /* extended field */  
115 -#define SF_SRM_CHAR 0x02 /* character */  
116 -#define SF_CREATE_PART 0x0c /* create partition */  
117 -#define CPFLAG_PROT 0x40 /* protected flag */  
118 -#define CPFLAG_COPY_PS 0x20 /* local copy to presentation space */  
119 -#define CPFLAG_BASE 0x07 /* base character set index */  
120 -#define SF_OUTBOUND_DS 0x40 /* outbound 3270 DS */  
121 -#define SF_TRANSFER_DATA 0xd0 /* file transfer open request */  
122 -  
123 -/* Query replies */  
124 -#define QR_SUMMARY 0x80 /* summary */  
125 -#define QR_USABLE_AREA 0x81 /* usable area */  
126 -#define QR_ALPHA_PART 0x84 /* alphanumeric partitions */  
127 -#define QR_CHARSETS 0x85 /* character sets */  
128 -#define QR_COLOR 0x86 /* color */  
129 -#define QR_HIGHLIGHTING 0x87 /* highlighting */  
130 -#define QR_REPLY_MODES 0x88 /* reply modes */  
131 -#define QR_DBCS_ASIA 0x91 /* DBCS-Asia */  
132 -#define QR_PC3270 0x93 /* PC3270 */  
133 -#define QR_DDM 0x95 /* distributed data management */  
134 -#define QR_RPQNAMES 0xa1 /* RPQ names */  
135 -#define QR_IMP_PART 0xa6 /* implicit partition */  
136 -#define QR_NULL 0xff /* null */  
137 -  
138 -#define BA_TO_ROW(ba) ((ba) / h3270.cols)  
139 -#define BA_TO_COL(ba) ((ba) % h3270.cols)  
140 -#define ROWCOL_TO_BA(r,c) (((r) * h3270.cols) + c)  
141 -#define INC_BA(ba) { (ba) = ((ba) + 1) % (h3270.cols * h3270.rows); }  
142 -#define DEC_BA(ba) { (ba) = (ba) ? (ba - 1) : ((h3270.cols*h3270.rows) - 1); }  
143 -  
144 -/* Field attributes. */  
145 -#define FA_PRINTABLE 0xc0 /* these make the character "printable" */  
146 -#define FA_PROTECT 0x20 /* unprotected (0) / protected (1) */  
147 -#define FA_NUMERIC 0x10 /* alphanumeric (0) /numeric (1) */  
148 -#define FA_INTENSITY 0x0c /* display/selector pen detectable: */  
149 -#define FA_INT_NORM_NSEL 0x00 /* 00 normal, non-detect */  
150 -#define FA_INT_NORM_SEL 0x04 /* 01 normal, detectable */  
151 -#define FA_INT_HIGH_SEL 0x08 /* 10 intensified, detectable */  
152 -#define FA_INT_ZERO_NSEL 0x0c /* 11 nondisplay, non-detect */  
153 -#define FA_RESERVED 0x02 /* must be 0 */  
154 -#define FA_MODIFY 0x01 /* modified (1) */  
155 -  
156 -/* Bits in the field attribute that are stored. */  
157 -#define FA_MASK (FA_PROTECT | FA_NUMERIC | FA_INTENSITY | FA_MODIFY)  
158 -  
159 -/* Tests for various attribute properties. */  
160 -#define FA_IS_MODIFIED(c) ((c) & FA_MODIFY)  
161 -#define FA_IS_NUMERIC(c) ((c) & FA_NUMERIC)  
162 -#define FA_IS_PROTECTED(c) ((c) & FA_PROTECT)  
163 -#define FA_IS_SKIP(c) (((c) & FA_PROTECT) && ((c) & FA_NUMERIC))  
164 -  
165 -#define FA_IS_ZERO(c) \  
166 - (((c) & FA_INTENSITY) == FA_INT_ZERO_NSEL)  
167 -#define FA_IS_HIGH(c) \  
168 - (((c) & FA_INTENSITY) == FA_INT_HIGH_SEL)  
169 -#define FA_IS_NORMAL(c) \  
170 - ( \  
171 - ((c) & FA_INTENSITY) == FA_INT_NORM_NSEL \  
172 - || \  
173 - ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \  
174 - )  
175 -#define FA_IS_SELECTABLE(c) \  
176 - ( \  
177 - ((c) & FA_INTENSITY) == FA_INT_NORM_SEL \  
178 - || \  
179 - ((c) & FA_INTENSITY) == FA_INT_HIGH_SEL \  
180 - )  
181 -#define FA_IS_INTENSE(c) \  
182 - ((c & FA_INT_HIGH_SEL) == FA_INT_HIGH_SEL)  
183 -  
184 -/* Extended attributes */  
185 -#define XA_ALL 0x00  
186 -#define XA_3270 0xc0  
187 -#define XA_VALIDATION 0xc1  
188 -#define XAV_FILL 0x04  
189 -#define XAV_ENTRY 0x02  
190 -#define XAV_TRIGGER 0x01  
191 -#define XA_OUTLINING 0xc2  
192 -#define XAO_UNDERLINE 0x01  
193 -#define XAO_RIGHT 0x02  
194 -#define XAO_OVERLINE 0x04  
195 -#define XAO_LEFT 0x08  
196 -#define XA_HIGHLIGHTING 0x41  
197 -#define XAH_DEFAULT 0x00  
198 -#define XAH_NORMAL 0xf0  
199 -#define XAH_BLINK 0xf1  
200 -#define XAH_REVERSE 0xf2  
201 -#define XAH_UNDERSCORE 0xf4  
202 -#define XAH_INTENSIFY 0xf8  
203 -#define XA_FOREGROUND 0x42  
204 -#define XAC_DEFAULT 0x00  
205 -#define XA_CHARSET 0x43  
206 -#define XA_BACKGROUND 0x45  
207 -#define XA_TRANSPARENCY 0x46  
208 -#define XAT_DEFAULT 0x00  
209 -#define XAT_OR 0xf0  
210 -#define XAT_XOR 0xf1  
211 -#define XAT_OPAQUE 0xff  
212 -#define XA_INPUT_CONTROL 0xfe  
213 -#define XAI_DISABLED 0x00  
214 -#define XAI_ENABLED 0x01  
215 -  
216 -/* WCC definitions */  
217 -#define WCC_RESET(c) ((c) & 0x40)  
218 -#define WCC_START_PRINTER(c) ((c) & 0x08)  
219 -#define WCC_SOUND_ALARM(c) ((c) & 0x04)  
220 -#define WCC_KEYBOARD_RESTORE(c) ((c) & 0x02)  
221 -#define WCC_RESET_MDT(c) ((c) & 0x01)  
222 -  
223 -/* AIDs */  
224 -#define AID_NO 0x60 /* no AID generated */  
225 -#define AID_QREPLY 0x61  
226 -#define AID_ENTER 0x7d  
227 -#define AID_PF1 0xf1  
228 -#define AID_PF2 0xf2  
229 -#define AID_PF3 0xf3  
230 -#define AID_PF4 0xf4  
231 -#define AID_PF5 0xf5  
232 -#define AID_PF6 0xf6  
233 -#define AID_PF7 0xf7  
234 -#define AID_PF8 0xf8  
235 -#define AID_PF9 0xf9  
236 -#define AID_PF10 0x7a  
237 -#define AID_PF11 0x7b  
238 -#define AID_PF12 0x7c  
239 -#define AID_PF13 0xc1  
240 -#define AID_PF14 0xc2  
241 -#define AID_PF15 0xc3  
242 -#define AID_PF16 0xc4  
243 -#define AID_PF17 0xc5  
244 -#define AID_PF18 0xc6  
245 -#define AID_PF19 0xc7  
246 -#define AID_PF20 0xc8  
247 -#define AID_PF21 0xc9  
248 -#define AID_PF22 0x4a  
249 -#define AID_PF23 0x4b  
250 -#define AID_PF24 0x4c  
251 -#define AID_OICR 0xe6  
252 -#define AID_MSR_MHS 0xe7  
253 -#define AID_SELECT 0x7e  
254 -#define AID_PA1 0x6c  
255 -#define AID_PA2 0x6e  
256 -#define AID_PA3 0x6b  
257 -#define AID_CLEAR 0x6d  
258 -#define AID_SYSREQ 0xf0  
259 -  
260 -#define AID_SF 0x88  
261 -#define SFID_QREPLY 0x81  
262 -  
263 -/* Colors */  
264 -#define COLOR_NEUTRAL_BLACK 0  
265 -#define COLOR_BLUE 1  
266 -#define COLOR_RED 2  
267 -#define COLOR_PINK 3  
268 -#define COLOR_GREEN 4  
269 -#define COLOR_TURQUOISE 5  
270 -#define COLOR_YELLOW 6  
271 -#define COLOR_NEUTRAL_WHITE 7  
272 -#define COLOR_BLACK 8  
273 -#define COLOR_DEEP_BLUE 9  
274 -#define COLOR_ORANGE 10  
275 -#define COLOR_PURPLE 11  
276 -#define COLOR_PALE_GREEN 12  
277 -#define COLOR_PALE_TURQUOISE 13  
278 -#define COLOR_GREY 14  
279 -#define COLOR_WHITE 15  
280 -  
281 -/* Data stream manipulation macros. */  
282 -#define MASK32 0xff000000U  
283 -#define MASK24 0x00ff0000U  
284 -#define MASK16 0x0000ff00U  
285 -#define MASK08 0x000000ffU  
286 -#define MINUS1 0xffffffffU  
287 -  
288 -#define SET16(ptr, val) { \  
289 - *((ptr)++) = ((val) & MASK16) >> 8; \  
290 - *((ptr)++) = ((val) & MASK08); \  
291 -}  
292 -#define GET16(val, ptr) { \  
293 - (val) = *((ptr)+1); \  
294 - (val) += *(ptr) << 8; \  
295 -}  
296 -#define SET32(ptr, val) { \  
297 - *((ptr)++) = ((val) & MASK32) >> 24; \  
298 - *((ptr)++) = ((val) & MASK24) >> 16; \  
299 - *((ptr)++) = ((val) & MASK16) >> 8; \  
300 - *((ptr)++) = ((val) & MASK08); \  
301 -}  
302 -#define HIGH8(s) (((s) >> 8) & 0xff)  
303 -#define LOW8(s) ((s) & 0xff)  
304 -  
305 -/* Other EBCDIC control codes. */  
306 -#define EBC_null 0x00  
307 -#define EBC_ff 0x0c  
308 -#define EBC_cr 0x0d  
309 -#define EBC_so 0x0e  
310 -#define EBC_si 0x0f  
311 -#define EBC_nl 0x15  
312 -#define EBC_em 0x19  
313 -#define EBC_dup 0x1c  
314 -#define EBC_fm 0x1e  
315 -#define EBC_space 0x40  
316 -#define EBC_nobreakspace 0x41  
317 -#define EBC_period 0x4b  
318 -#define EBC_ampersand 0x50  
319 -#define EBC_underscore 0x6d  
320 -#define EBC_greater 0x6e  
321 -#define EBC_question 0x6f  
322 -#define EBC_Yacute 0xad  
323 -#define EBC_diaeresis 0xbd  
324 -#define EBC_minus 0xca  
325 -#define EBC_0 0xf0  
326 -#define EBC_9 0xf9  
327 -#define EBC_eo 0xff  
328 -  
329 -/* BIND definitions. */  
330 -#define BIND_RU LIB3270_BIND_RU  
331 -#define BIND_OFF_PLU_NAME_LEN LIB3270_BIND_OFF_PLU_NAME_LEN  
332 -#define BIND_OFF_PLU_NAME LIB3270_BIND_OFF_PLU_NAME  
333 -#define BIND_PLU_NAME_MAX LIB3270_BIND_PLU_NAME_MAX  
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 //#include "appres.h" 46 //#include "appres.h"
47 // #include "ctlr.h" 47 // #include "ctlr.h"
48 #if defined(X3270_DBCS) /*[*/ 48 #if defined(X3270_DBCS) /*[*/
49 -#include "3270ds.h" 49 +#include <lib3270/3270ds.h>
50 #endif /*]*/ 50 #endif /*]*/
51 51
52 #include "ansic.h" 52 #include "ansic.h"
@@ -40,7 +40,7 @@ @@ -40,7 +40,7 @@
40 40
41 #include "globals.h" 41 #include "globals.h"
42 #include <errno.h> 42 #include <errno.h>
43 -#include "3270ds.h" 43 +#include <lib3270/3270ds.h>
44 //#include "appres.h" 44 //#include "appres.h"
45 // #include "ctlr.h" 45 // #include "ctlr.h"
46 #include "screen.h" 46 #include "screen.h"
@@ -45,7 +45,7 @@ @@ -45,7 +45,7 @@
45 45
46 //#include "appres.h" 46 //#include "appres.h"
47 // #include "ctlr.h" 47 // #include "ctlr.h"
48 -#include "3270ds.h" 48 +#include <lib3270/3270ds.h>
49 49
50 #include "actionsc.h" 50 #include "actionsc.h"
51 #include "ctlrc.h" 51 #include "ctlrc.h"
@@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
42 #if defined(X3270_FT) /*[*/ 42 #if defined(X3270_FT) /*[*/
43 43
44 //#include "appres.h" 44 //#include "appres.h"
45 -#include "3270ds.h" 45 +#include <lib3270/3270ds.h>
46 #include "ft_dft_ds.h" 46 #include "ft_dft_ds.h"
47 47
48 #include "actionsc.h" 48 #include "actionsc.h"
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 #include <stdarg.h> 52 #include <stdarg.h>
53 53
54 //#include "appres.h" 54 //#include "appres.h"
55 -#include "3270ds.h" 55 +#include <lib3270/3270ds.h>
56 #include "resources.h" 56 #include "resources.h"
57 57
58 #include "actionsc.h" 58 #include "actionsc.h"
@@ -27,8 +27,10 @@ @@ -27,8 +27,10 @@
27 */ 27 */
28 28
29 #include <string.h> 29 #include <string.h>
  30 + #include <stdlib.h>
30 #include <lib3270.h> 31 #include <lib3270.h>
31 #include <lib3270/session.h> 32 #include <lib3270/session.h>
  33 + #include <lib3270/3270ds.h>
32 #include <lib3270/html.h> 34 #include <lib3270/html.h>
33 35
34 #include "globals.h" 36 #include "globals.h"
@@ -68,29 +70,44 @@ @@ -68,29 +70,44 @@
68 70
69 static const char * html_color[] = 71 static const char * html_color[] =
70 { 72 {
71 - "black",  
72 - "deepSkyBlue",  
73 - "red",  
74 - "pink",  
75 - "green",  
76 - "turquoise",  
77 - "yellow",  
78 - "white",  
79 - "black",  
80 - "blue",  
81 - "orange",  
82 - "purple",  
83 - "paleGreen",  
84 - "paleTurquoise",  
85 - "grey",  
86 - "white" 73 + // Terminal colors
  74 + "black",
  75 + "deepSkyBlue",
  76 + "red",
  77 + "pink",
  78 + "green",
  79 + "turquoise",
  80 + "yellow",
  81 + "white",
  82 + "black",
  83 + "blue",
  84 + "orange",
  85 + "purple",
  86 + "paleGreen",
  87 + "paleTurquoise",
  88 + "grey",
  89 + "white",
  90 +
  91 + // Field colors
  92 + "green", // Normal/Unprotected
  93 + "red", // Intensified/Unprotected
  94 + "cyan", // Normal/Protected
  95 + "white", // Intensified/Protected
  96 +
87 }; 97 };
88 98
89 struct html_info 99 struct html_info
90 { 100 {
91 int szText; 101 int szText;
92 102
93 - unsigned char fa; /**< field attribute, it nonzero */ 103 + enum mode
  104 + {
  105 + HTML_MODE_TEXT, /**< Non editable */
  106 + HTML_MODE_INPUT_TEXT, /**< Text input */
  107 + HTML_MODE_INPUT_VALUE, /**< Value input */
  108 + HTML_MODE_INPUT_BUTTON, /**< Button input (PFkey) */
  109 + } mode;
  110 +
94 char * text; 111 char * text;
95 int maxlength; 112 int maxlength;
96 unsigned short fg; 113 unsigned short fg;
@@ -124,9 +141,8 @@ @@ -124,9 +141,8 @@
124 unsigned short bg = ((attr & 0x00F0) >> 4); 141 unsigned short bg = ((attr & 0x00F0) >> 4);
125 char * txt; 142 char * txt;
126 143
127 - #warning Fix field colors  
128 if(attr & LIB3270_ATTR_FIELD) 144 if(attr & LIB3270_ATTR_FIELD)
129 - fg = (attr & 0x0003); 145 + fg = 16+(attr & 0x0003);
130 else 146 else
131 fg = (attr & 0x000F); 147 fg = (attr & 0x000F);
132 148
@@ -162,6 +178,34 @@ @@ -162,6 +178,34 @@
162 178
163 } 179 }
164 180
  181 + static void open_input(struct html_info *info, int addr)
  182 + {
  183 + char name[30];
  184 +
  185 + snprintf(name,29,"F%04d",addr);
  186 +
  187 + append_string(info,"<input type=\"text\" name=\"");
  188 + append_string(info,name);
  189 + append_string(info,"\"");
  190 + info->mode = HTML_MODE_INPUT_TEXT;
  191 + }
  192 +
  193 + static void close_input(struct html_info *info)
  194 + {
  195 + char buffer[80];
  196 +
  197 + if(info->mode == HTML_MODE_TEXT)
  198 + return;
  199 +
  200 + snprintf(buffer,80," maxlength=\"%d\" class=\"IW%03d\"",info->maxlength,info->maxlength);
  201 + append_string(info,buffer);
  202 +
  203 + append_string(info,"></input>");
  204 +
  205 + info->mode = HTML_MODE_TEXT;
  206 + info->maxlength = 0;
  207 + }
  208 +
165 LIB3270_EXPORT char * lib3270_get_as_html(H3270 *session, LIB3270_HTML_OPTION option) 209 LIB3270_EXPORT char * lib3270_get_as_html(H3270 *session, LIB3270_HTML_OPTION option)
166 { 210 {
167 int row, baddr; 211 int row, baddr;
@@ -172,6 +216,7 @@ @@ -172,6 +216,7 @@
172 info.text = lib3270_malloc(info.szText+1); 216 info.text = lib3270_malloc(info.szText+1);
173 info.fg = 0xFF; 217 info.fg = 0xFF;
174 info.bg = 0xFF; 218 info.bg = 0xFF;
  219 + info.mode = HTML_MODE_TEXT;
175 220
176 if(option & LIB3270_HTML_OPTION_HEADERS) 221 if(option & LIB3270_HTML_OPTION_HEADERS)
177 { 222 {
@@ -193,69 +238,127 @@ @@ -193,69 +238,127 @@
193 len = col; 238 len = col;
194 } 239 }
195 240
196 - for(col = 0; col <= len;col++) 241 + for(col = 0; col <= len || (col < session->cols && info.mode != HTML_MODE_TEXT);col++)
197 { 242 {
198 - if((option && LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED)) 243 + if((option & LIB3270_HTML_OPTION_ALL) || (session->text[baddr+col].attr & LIB3270_ATTR_SELECTED))
199 { 244 {
200 cr++; 245 cr++;
201 246
202 - if(session->text[baddr+col].attr & LIB3270_ATTR_CG) 247 + if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER) && (option & LIB3270_HTML_OPTION_FORM) )
203 { 248 {
204 - static const struct chr_xlat xlat[] =  
205 - {  
206 - { 0xd3, "+" }, // CG 0xab, plus  
207 - { 0xa2, "-" }, // CG 0x92, horizontal line  
208 - { 0x85, "|" }, // CG 0x184, vertical line  
209 - { 0xd4, "+" }, // CG 0xac, LR corner  
210 - { 0xd5, "+" }, // CG 0xad, UR corner  
211 - { 0xc5, "+" }, // CG 0xa4, UL corner  
212 - { 0xc4, "+" }, // CG 0xa3, LL corner  
213 - { 0xc6, "|" }, // CG 0xa5, left tee  
214 - { 0xd6, "|" }, // CG 0xae, right tee  
215 - { 0xc7, "-" }, // CG 0xa6, bottom tee  
216 - { 0xd7, "-" }, // CG 0xaf, top tee  
217 - { 0x8c, "&le;" }, // CG 0xf7, less or equal "≤"  
218 - { 0xae, "&ge;" }, // CG 0xd9, greater or equal "≥"  
219 - { 0xbe, "&ne;" }, // CG 0x3e, not equal "≠"  
220 - { 0xad, "[" }, // "["  
221 - { 0xbd, "]" }, // "]"  
222 -  
223 - { 0x00, NULL }  
224 - }; 249 + int fa = (session->ea_buf[baddr+col].fa & FA_MASK);
  250 + int tx = (info.mode == HTML_MODE_TEXT);
  251 +
  252 + close_input(&info);
225 253
226 update_colors(&info,session->text[baddr+col].attr); 254 update_colors(&info,session->text[baddr+col].attr);
227 - append_char(&info, xlat, session->text[baddr+col].chr);  
228 255
  256 + if(!FA_IS_PROTECTED(fa))
  257 + {
  258 + // Input field
  259 + open_input(&info,baddr+col+1);
  260 + }
  261 + else if(col < len && session->text[baddr+col+1].chr == 'F')
  262 + {
  263 + char *text = lib3270_get_field_at(session,baddr+col+1);
  264 +
  265 + if(text)
  266 + {
  267 + char *ptr = text;
  268 +
  269 + while(*ptr && *ptr == ' ')
  270 + ptr++;
  271 +
  272 + if(strlen(ptr)>1)
  273 + {
  274 + int value = atoi(ptr+1);
  275 + if(value > 1 && value < 24)
  276 + {
  277 + // E uma PF, cria um botao
  278 + char name[30];
  279 +
  280 + snprintf(name,29,"PF%02d",value);
  281 +
  282 + append_string(&info,"<input type=\"button\" name=\"");
  283 + append_string(&info,name);
  284 + append_string(&info,"\" value=\"");
  285 + append_string(&info,ptr);
  286 + append_string(&info,"\"");
  287 + info.mode = HTML_MODE_INPUT_BUTTON;
  288 + }
  289 + }
  290 + lib3270_free(text);
  291 + }
  292 +
  293 + }
  294 + else if(tx)
  295 + {
  296 + append_string(&info,"&nbsp;");
  297 + }
229 } 298 }
230 - else 299 + else if(info.mode == HTML_MODE_TEXT)
231 { 300 {
232 - static const struct chr_xlat xlat[] = 301 + // Normal text
  302 + update_colors(&info,session->text[baddr+col].attr);
  303 +
  304 + if(session->text[baddr+col].attr & LIB3270_ATTR_CG)
233 { 305 {
234 - { '"', "&quot;" },  
235 - { '&', "&amp;" },  
236 - { '<', "&lt;" },  
237 - { '>', "&gt;" },  
238 - { ' ', "&nbsp;" }, 306 + static const struct chr_xlat xlat[] =
  307 + {
  308 + { 0xd3, "+" }, // CG 0xab, plus
  309 + { 0xa2, "-" }, // CG 0x92, horizontal line
  310 + { 0x85, "|" }, // CG 0x184, vertical line
  311 + { 0xd4, "+" }, // CG 0xac, LR corner
  312 + { 0xd5, "+" }, // CG 0xad, UR corner
  313 + { 0xc5, "+" }, // CG 0xa4, UL corner
  314 + { 0xc4, "+" }, // CG 0xa3, LL corner
  315 + { 0xc6, "|" }, // CG 0xa5, left tee
  316 + { 0xd6, "|" }, // CG 0xae, right tee
  317 + { 0xc7, "-" }, // CG 0xa6, bottom tee
  318 + { 0xd7, "-" }, // CG 0xaf, top tee
  319 + { 0x8c, "&le;" }, // CG 0xf7, less or equal "≤"
  320 + { 0xae, "&ge;" }, // CG 0xd9, greater or equal "≥"
  321 + { 0xbe, "&ne;" }, // CG 0x3e, not equal "≠"
  322 + { 0xad, "[" }, // "["
  323 + { 0xbd, "]" }, // "]"
  324 +
  325 + { 0x00, NULL }
  326 + };
239 327
240 - { 0x00, NULL }  
241 - }; 328 + append_char(&info, xlat, session->text[baddr+col].chr);
242 329
243 - if((session->text[baddr+col].attr & LIB3270_ATTR_MARKER))  
244 - {  
245 - update_colors(&info,session->text[baddr+col].attr);  
246 - append_string(&info,"|");  
247 } 330 }
248 else 331 else
249 { 332 {
250 - update_colors(&info,session->text[baddr+col].attr); 333 + static const struct chr_xlat xlat[] =
  334 + {
  335 + { '"', "&quot;" },
  336 + { '&', "&amp;" },
  337 + { '<', "&lt;" },
  338 + { '>', "&gt;" },
  339 + { ' ', "&nbsp;" },
  340 +
  341 + { 0x00, NULL }
  342 + };
251 append_char(&info, xlat, session->text[baddr+col].chr); 343 append_char(&info, xlat, session->text[baddr+col].chr);
252 } 344 }
253 } 345 }
  346 + else
  347 + {
  348 + // Input contents
  349 + info.maxlength++;
  350 + }
254 } 351 }
255 } 352 }
256 353
257 baddr += session->cols; 354 baddr += session->cols;
258 355
  356 + if(info.mode != HTML_MODE_TEXT)
  357 + {
  358 + #warning Incluir o tratamento correto
  359 + close_input(&info);
  360 + }
  361 +
259 if(cr || (option && LIB3270_HTML_OPTION_ALL)) 362 if(cr || (option && LIB3270_HTML_OPTION_ALL))
260 append_element(&info,HTML_ELEMENT_LINE_BREAK); 363 append_element(&info,HTML_ELEMENT_LINE_BREAK);
261 } 364 }
@@ -51,7 +51,7 @@ @@ -51,7 +51,7 @@
51 // #include <X11/keysym.h> 51 // #include <X11/keysym.h>
52 52
53 #include <fcntl.h> 53 #include <fcntl.h>
54 -#include "3270ds.h" 54 +#include <lib3270/3270ds.h>
55 // #include "appres.h" 55 // #include "appres.h"
56 // #include "ctlr.h" 56 // #include "ctlr.h"
57 #include "resources.h" 57 #include "resources.h"
@@ -46,7 +46,7 @@ @@ -46,7 +46,7 @@
46 46
47 #include <fcntl.h> 47 #include <fcntl.h>
48 48
49 -#include "3270ds.h" 49 +#include <lib3270/3270ds.h>
50 //#include "appres.h" 50 //#include "appres.h"
51 #include "resources.h" 51 #include "resources.h"
52 52
@@ -70,7 +70,7 @@ @@ -70,7 +70,7 @@
70 70
71 #include "api.h" 71 #include "api.h"
72 72
73 -#include "3270ds.h" 73 +#include <lib3270/3270ds.h>
74 #include "popupsc.h" 74 #include "popupsc.h"
75 #include "proxyc.h" 75 #include "proxyc.h"
76 #include "resolverc.h" 76 #include "resolverc.h"
@@ -56,7 +56,7 @@ @@ -56,7 +56,7 @@
56 56
57 #include <assert.h> 57 #include <assert.h>
58 #include <stdarg.h> 58 #include <stdarg.h>
59 -#include "3270ds.h" 59 +#include <lib3270/3270ds.h>
60 //#include "appres.h" 60 //#include "appres.h"
61 61
62 #include "popupsc.h" 62 #include "popupsc.h"
@@ -38,7 +38,7 @@ @@ -38,7 +38,7 @@
38 #include "globals.h" 38 #include "globals.h"
39 #include <signal.h> 39 #include <signal.h>
40 //#include "appres.h" 40 //#include "appres.h"
41 -#include "3270ds.h" 41 +#include <lib3270/3270ds.h>
42 #include "resources.h" 42 #include "resources.h"
43 // #include "ctlr.h" 43 // #include "ctlr.h"
44 44
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 #include <signal.h> 44 #include <signal.h>
45 #include <stdarg.h> 45 #include <stdarg.h>
46 #include <fcntl.h> 46 #include <fcntl.h>
47 -#include "3270ds.h" 47 +#include <lib3270/3270ds.h>
48 48
49 #include "tablesc.h" 49 #include "tablesc.h"
50 #if !defined(PR3287) /*[*/ 50 #if !defined(PR3287) /*[*/
@@ -497,6 +497,24 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len) @@ -497,6 +497,24 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len)
497 return buffer; 497 return buffer;
498 } 498 }
499 499
  500 +/**
  501 + * Get field contents
  502 + *
  503 + * @param session Session handle
  504 + * @param baddr Field addr
  505 + *
  506 + * @return String with the field contents (release it with lib3270_free()
  507 + */
  508 +LIB3270_EXPORT char * lib3270_get_field_at(H3270 *session, int baddr)
  509 +{
  510 + int first = lib3270_field_addr(session,baddr);
  511 +
  512 + if(first < 0)
  513 + return NULL;
  514 +
  515 + return lib3270_get_text(session,first,lib3270_field_length(session,first)+1);
  516 +}
  517 +
500 LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession) 518 LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession)
501 { 519 {
502 if(!hSession->selected || hSession->select.start == hSession->select.end) 520 if(!hSession->selected || hSession->select.start == hSession->select.end)
@@ -44,7 +44,7 @@ @@ -44,7 +44,7 @@
44 #include "ctlrc.h" 44 #include "ctlrc.h"
45 #include "ftc.h" 45 #include "ftc.h"
46 #include "kybdc.h" 46 #include "kybdc.h"
47 -#include "3270ds.h" 47 +#include <lib3270/3270ds.h>
48 48
49 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/ 49 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/
50 50
@@ -42,7 +42,7 @@ @@ -42,7 +42,7 @@
42 #if !defined(_WIN32) /*[*/ 42 #if !defined(_WIN32) /*[*/
43 #include <netinet/in.h> 43 #include <netinet/in.h>
44 #endif /*]*/ 44 #endif /*]*/
45 -#include "3270ds.h" 45 +#include <lib3270/3270ds.h>
46 // #include "appres.h" 46 // #include "appres.h"
47 #include "screen.h" 47 #include "screen.h"
48 // #include "ctlr.h" 48 // #include "ctlr.h"
@@ -81,7 +81,7 @@ @@ -81,7 +81,7 @@
81 // #include <stdarg.h> 81 // #include <stdarg.h>
82 82
83 #include "tn3270e.h" 83 #include "tn3270e.h"
84 -#include "3270ds.h" 84 +#include <lib3270/3270ds.h>
85 85
86 // #include "appres.h" 86 // #include "appres.h"
87 87
@@ -77,6 +77,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] = @@ -77,6 +77,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
77 "autoconnect", 77 "autoconnect",
78 "kpalternative", /**< Keypad +/- move to next/previous field */ 78 "kpalternative", /**< Keypad +/- move to next/previous field */
79 "beep", /**< Beep on errors */ 79 "beep", /**< Beep on errors */
  80 + "fieldattr", /**< View Field attribute */
  81 +
80 }; 82 };
81 83
82 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix) 84 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix)
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 #include <signal.h> 52 #include <signal.h>
53 #include <stdarg.h> 53 #include <stdarg.h>
54 #include <fcntl.h> 54 #include <fcntl.h>
55 -#include "3270ds.h" 55 +#include <lib3270/3270ds.h>
56 //#include "appres.h" 56 //#include "appres.h"
57 #include "objects.h" 57 #include "objects.h"
58 #include "resources.h" 58 #include "resources.h"