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   -/*
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
ansi.c
... ... @@ -46,7 +46,7 @@
46 46 //#include "appres.h"
47 47 // #include "ctlr.h"
48 48 #if defined(X3270_DBCS) /*[*/
49   -#include "3270ds.h"
  49 +#include <lib3270/3270ds.h>
50 50 #endif /*]*/
51 51  
52 52 #include "ansic.h"
... ...
ctlr.c
... ... @@ -40,7 +40,7 @@
40 40  
41 41 #include "globals.h"
42 42 #include <errno.h>
43   -#include "3270ds.h"
  43 +#include <lib3270/3270ds.h>
44 44 //#include "appres.h"
45 45 // #include "ctlr.h"
46 46 #include "screen.h"
... ...
ft_cut.c
... ... @@ -45,7 +45,7 @@
45 45  
46 46 //#include "appres.h"
47 47 // #include "ctlr.h"
48   -#include "3270ds.h"
  48 +#include <lib3270/3270ds.h>
49 49  
50 50 #include "actionsc.h"
51 51 #include "ctlrc.h"
... ...
ft_dft.c
... ... @@ -42,7 +42,7 @@
42 42 #if defined(X3270_FT) /*[*/
43 43  
44 44 //#include "appres.h"
45   -#include "3270ds.h"
  45 +#include <lib3270/3270ds.h>
46 46 #include "ft_dft_ds.h"
47 47  
48 48 #include "actionsc.h"
... ...
glue.c
... ... @@ -52,7 +52,7 @@
52 52 #include <stdarg.h>
53 53  
54 54 //#include "appres.h"
55   -#include "3270ds.h"
  55 +#include <lib3270/3270ds.h>
56 56 #include "resources.h"
57 57  
58 58 #include "actionsc.h"
... ...
html.c
... ... @@ -27,8 +27,10 @@
27 27 */
28 28  
29 29 #include <string.h>
  30 + #include <stdlib.h>
30 31 #include <lib3270.h>
31 32 #include <lib3270/session.h>
  33 + #include <lib3270/3270ds.h>
32 34 #include <lib3270/html.h>
33 35  
34 36 #include "globals.h"
... ... @@ -68,29 +70,44 @@
68 70  
69 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 99 struct html_info
90 100 {
91 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 111 char * text;
95 112 int maxlength;
96 113 unsigned short fg;
... ... @@ -124,9 +141,8 @@
124 141 unsigned short bg = ((attr & 0x00F0) >> 4);
125 142 char * txt;
126 143  
127   - #warning Fix field colors
128 144 if(attr & LIB3270_ATTR_FIELD)
129   - fg = (attr & 0x0003);
  145 + fg = 16+(attr & 0x0003);
130 146 else
131 147 fg = (attr & 0x000F);
132 148  
... ... @@ -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 209 LIB3270_EXPORT char * lib3270_get_as_html(H3270 *session, LIB3270_HTML_OPTION option)
166 210 {
167 211 int row, baddr;
... ... @@ -172,6 +216,7 @@
172 216 info.text = lib3270_malloc(info.szText+1);
173 217 info.fg = 0xFF;
174 218 info.bg = 0xFF;
  219 + info.mode = HTML_MODE_TEXT;
175 220  
176 221 if(option & LIB3270_HTML_OPTION_HEADERS)
177 222 {
... ... @@ -193,69 +238,127 @@
193 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 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 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 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 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 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 362 if(cr || (option && LIB3270_HTML_OPTION_ALL))
260 363 append_element(&info,HTML_ELEMENT_LINE_BREAK);
261 364 }
... ...
kybd.c
... ... @@ -51,7 +51,7 @@
51 51 // #include <X11/keysym.h>
52 52  
53 53 #include <fcntl.h>
54   -#include "3270ds.h"
  54 +#include <lib3270/3270ds.h>
55 55 // #include "appres.h"
56 56 // #include "ctlr.h"
57 57 #include "resources.h"
... ...
paste.c
... ... @@ -46,7 +46,7 @@
46 46  
47 47 #include <fcntl.h>
48 48  
49   -#include "3270ds.h"
  49 +#include <lib3270/3270ds.h>
50 50 //#include "appres.h"
51 51 #include "resources.h"
52 52  
... ...
proxy.c
... ... @@ -70,7 +70,7 @@
70 70  
71 71 #include "api.h"
72 72  
73   -#include "3270ds.h"
  73 +#include <lib3270/3270ds.h>
74 74 #include "popupsc.h"
75 75 #include "proxyc.h"
76 76 #include "resolverc.h"
... ...
rpq.c
... ... @@ -56,7 +56,7 @@
56 56  
57 57 #include <assert.h>
58 58 #include <stdarg.h>
59   -#include "3270ds.h"
  59 +#include <lib3270/3270ds.h>
60 60 //#include "appres.h"
61 61  
62 62 #include "popupsc.h"
... ...
screen.c
... ... @@ -38,7 +38,7 @@
38 38 #include "globals.h"
39 39 #include <signal.h>
40 40 //#include "appres.h"
41   -#include "3270ds.h"
  41 +#include <lib3270/3270ds.h>
42 42 #include "resources.h"
43 43 // #include "ctlr.h"
44 44  
... ...
see.c
... ... @@ -44,7 +44,7 @@
44 44 #include <signal.h>
45 45 #include <stdarg.h>
46 46 #include <fcntl.h>
47   -#include "3270ds.h"
  47 +#include <lib3270/3270ds.h>
48 48  
49 49 #include "tablesc.h"
50 50 #if !defined(PR3287) /*[*/
... ...
selection.c
... ... @@ -497,6 +497,24 @@ LIB3270_EXPORT char * lib3270_get_text(H3270 *h, int offset, int len)
497 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 518 LIB3270_EXPORT char * lib3270_get_selected(H3270 *hSession)
501 519 {
502 520 if(!hSession->selected || hSession->select.start == hSession->select.end)
... ...
session.c
... ... @@ -44,7 +44,7 @@
44 44 #include "ctlrc.h"
45 45 #include "ftc.h"
46 46 #include "kybdc.h"
47   -#include "3270ds.h"
  47 +#include <lib3270/3270ds.h>
48 48  
49 49 /*---[ Globals ]--------------------------------------------------------------------------------------------------------------*/
50 50  
... ...
sf.c
... ... @@ -42,7 +42,7 @@
42 42 #if !defined(_WIN32) /*[*/
43 43 #include <netinet/in.h>
44 44 #endif /*]*/
45   -#include "3270ds.h"
  45 +#include <lib3270/3270ds.h>
46 46 // #include "appres.h"
47 47 #include "screen.h"
48 48 // #include "ctlr.h"
... ...
telnet.c
... ... @@ -81,7 +81,7 @@
81 81 // #include <stdarg.h>
82 82  
83 83 #include "tn3270e.h"
84   -#include "3270ds.h"
  84 +#include <lib3270/3270ds.h>
85 85  
86 86 // #include "appres.h"
87 87  
... ...
toggles.c
... ... @@ -77,6 +77,8 @@ static const char *toggle_names[LIB3270_TOGGLE_COUNT] =
77 77 "autoconnect",
78 78 "kpalternative", /**< Keypad +/- move to next/previous field */
79 79 "beep", /**< Beep on errors */
  80 + "fieldattr", /**< View Field attribute */
  81 +
80 82 };
81 83  
82 84 LIB3270_EXPORT unsigned char lib3270_get_toggle(H3270 *session, LIB3270_TOGGLE ix)
... ...
trace_ds.c
... ... @@ -52,7 +52,7 @@
52 52 #include <signal.h>
53 53 #include <stdarg.h>
54 54 #include <fcntl.h>
55   -#include "3270ds.h"
  55 +#include <lib3270/3270ds.h>
56 56 //#include "appres.h"
57 57 #include "objects.h"
58 58 #include "resources.h"
... ...