Commit ae1ce6b4a060709f52b61b4504dfc62b972ddc30

Authored by perry.werneck@gmail.com
1 parent 2426310f
Exists in master

work in progress

latest/src/include/lib3270.h
@@ -99,6 +99,14 @@ @@ -99,6 +99,14 @@
99 LIB3270_EXPORT H3270 * lib3270_session_new(const char *model); 99 LIB3270_EXPORT H3270 * lib3270_session_new(const char *model);
100 100
101 /** 101 /**
  102 + * Destroy session, release memory
  103 + *
  104 + * @param h Session handle.
  105 + *
  106 + */
  107 + LIB3270_EXPORT void lib3270_session_free(H3270 *h);
  108 +
  109 + /**
102 * Register a state change callback 110 * Register a state change callback
103 * 111 *
104 * @param h Session handle. 112 * @param h Session handle.
latest/src/lib/ctlr.c
@@ -148,13 +148,12 @@ static unsigned char code_table[64] = { @@ -148,13 +148,12 @@ static unsigned char code_table[64] = {
148 /* 148 /*
149 * Initialize the emulated 3270 hardware. 149 * Initialize the emulated 3270 hardware.
150 */ 150 */
151 -void  
152 -ctlr_init(unsigned cmask unused) 151 +void ctlr_init(H3270 *session, unsigned cmask unused)
153 { 152 {
154 /* Register callback routines. */ 153 /* Register callback routines. */
155 - register_schange(ST_HALF_CONNECT, ctlr_half_connect);  
156 - register_schange(ST_CONNECT, ctlr_connect);  
157 - register_schange(ST_3270_MODE, ctlr_connect); 154 + lib3270_register_schange(session,ST_HALF_CONNECT, ctlr_half_connect, 0);
  155 + lib3270_register_schange(session,ST_CONNECT, ctlr_connect, 0);
  156 + lib3270_register_schange(session,ST_3270_MODE, ctlr_connect, 0);
158 } 157 }
159 /* 158 /*
160 * Reinitialize the emulated 3270 hardware. 159 * Reinitialize the emulated 3270 hardware.
latest/src/lib/ctlrc.h
@@ -37,7 +37,7 @@ LIB3270_INTERNAL void ctlr_bcopy(int baddr_from, int baddr_to, int count, int mo @@ -37,7 +37,7 @@ LIB3270_INTERNAL void ctlr_bcopy(int baddr_from, int baddr_to, int count, int mo
37 // LIB3270_INTERNAL void ctlr_changed(int bstart, int bend); 37 // LIB3270_INTERNAL void ctlr_changed(int bstart, int bend);
38 LIB3270_INTERNAL void ctlr_clear(H3270 *session, Boolean can_snap); 38 LIB3270_INTERNAL void ctlr_clear(H3270 *session, Boolean can_snap);
39 LIB3270_INTERNAL void ctlr_erase_all_unprotected(void); 39 LIB3270_INTERNAL void ctlr_erase_all_unprotected(void);
40 -LIB3270_INTERNAL void ctlr_init(unsigned cmask); 40 +LIB3270_INTERNAL void ctlr_init(H3270 *session, unsigned cmask);
41 LIB3270_INTERNAL void ctlr_read_buffer(unsigned char aid_byte); 41 LIB3270_INTERNAL void ctlr_read_buffer(unsigned char aid_byte);
42 LIB3270_INTERNAL void ctlr_read_modified(unsigned char aid_byte, Boolean all); 42 LIB3270_INTERNAL void ctlr_read_modified(unsigned char aid_byte, Boolean all);
43 LIB3270_INTERNAL void ctlr_reinit(H3270 *session, unsigned cmask); 43 LIB3270_INTERNAL void ctlr_reinit(H3270 *session, unsigned cmask);
latest/src/lib/glue.c
@@ -143,25 +143,16 @@ const char *toggle_names[N_TOGGLES] = @@ -143,25 +143,16 @@ const char *toggle_names[N_TOGGLES] =
143 "SmartPaste" 143 "SmartPaste"
144 }; 144 };
145 145
146 -H3270 * lib3270_session_new(const char *model) 146 +void lib3270_session_free(H3270 *h)
147 { 147 {
148 - static int configured = 0;  
149 -  
150 - H3270 *hSession = &h3270;  
151 - int ovc, ovr;  
152 - int model_number;  
153 - char junk;  
154 148
155 - Trace("%s - configured=%d",__FUNCTION__,configured);  
156 -  
157 - if(configured)  
158 - {  
159 - // TODO (perry#5#): Allocate a new structure.  
160 - errno = EBUSY;  
161 - return hSession;  
162 - } 149 +}
163 150
164 - configured = 1; 151 +void lib3270_session_init(H3270 *hSession, const char *model)
  152 +{
  153 + int ovc, ovr;
  154 + char junk;
  155 + int model_number;
165 156
166 memset(hSession,0,sizeof(H3270)); 157 memset(hSession,0,sizeof(H3270));
167 hSession->sz = sizeof(H3270); 158 hSession->sz = sizeof(H3270);
@@ -175,18 +166,6 @@ H3270 * lib3270_session_new(const char *model) @@ -175,18 +166,6 @@ H3270 * lib3270_session_new(const char *model)
175 strncpy(hSession->full_model_name,"IBM-",FULL_MODEL_NAME_SIZE); 166 strncpy(hSession->full_model_name,"IBM-",FULL_MODEL_NAME_SIZE);
176 hSession->model_name = &hSession->full_model_name[4]; 167 hSession->model_name = &hSession->full_model_name[4];
177 168
178 -#if defined(_WIN32)  
179 -  
180 - (void) get_version_info();  
181 -  
182 - Trace("%s (init_calls: %d)",__FUNCTION__,init_calls);  
183 -  
184 -#else  
185 -  
186 - Trace("%s (init_calls: %d)",__FUNCTION__,init_calls);  
187 -  
188 -#endif  
189 -  
190 /* 169 /*
191 * Sort out model and color modes, based on the model number resource. 170 * Sort out model and color modes, based on the model number resource.
192 */ 171 */
@@ -243,6 +222,29 @@ H3270 * lib3270_session_new(const char *model) @@ -243,6 +222,29 @@ H3270 * lib3270_session_new(const char *model)
243 if (appres.apl_mode) 222 if (appres.apl_mode)
244 appres.charset = Apl; 223 appres.charset = Apl;
245 224
  225 +}
  226 +
  227 +H3270 * lib3270_session_new(const char *model)
  228 +{
  229 + static int configured = 0;
  230 +
  231 + H3270 *hSession = &h3270;
  232 +
  233 + Trace("%s - configured=%d",__FUNCTION__,configured);
  234 +
  235 + if(configured)
  236 + {
  237 + // TODO (perry#5#): Allocate a new structure.
  238 + errno = EBUSY;
  239 + return hSession;
  240 + }
  241 +
  242 + configured = 1;
  243 +
  244 + lib3270_session_init(hSession, model);
  245 +
  246 + if(screen_init(hSession))
  247 + return NULL;
246 248
247 Trace("Charset: %s",appres.charset); 249 Trace("Charset: %s",appres.charset);
248 if (charset_init(appres.charset) != CS_OKAY) 250 if (charset_init(appres.charset) != CS_OKAY)
@@ -251,9 +253,6 @@ H3270 * lib3270_session_new(const char *model) @@ -251,9 +253,6 @@ H3270 * lib3270_session_new(const char *model)
251 (void) charset_init(CN); 253 (void) charset_init(CN);
252 } 254 }
253 255
254 - if(screen_init(hSession))  
255 - return NULL;  
256 -  
257 kybd_init(); 256 kybd_init();
258 // hostfile_init(); 257 // hostfile_init();
259 // hostfile_init(); 258 // hostfile_init();
@@ -287,6 +286,12 @@ static void initialize(void) @@ -287,6 +286,12 @@ static void initialize(void)
287 286
288 initialize_toggles(); 287 initialize_toggles();
289 288
  289 +#if defined(_WIN32)
  290 + (void) get_version_info();
  291 +#endif
  292 +
  293 + Trace("%s (init_calls: %d)",__FUNCTION__,init_calls);
  294 +
290 /* Set the defaults. */ 295 /* Set the defaults. */
291 appres.mono = False; 296 appres.mono = False;
292 appres.extended = True; 297 appres.extended = True;
latest/src/lib/macros.c
@@ -66,7 +66,7 @@ @@ -66,7 +66,7 @@
66 return strdup(buffer); 66 return strdup(buffer);
67 } 67 }
68 68
69 - static const char * get_state(void) 69 + static const char * get_state(H3270 *h)
70 { 70 {
71 #define DECLARE_XLAT_STATE(x) { x, #x } 71 #define DECLARE_XLAT_STATE(x) { x, #x }
72 static const struct _xlat_state 72 static const struct _xlat_state
@@ -89,7 +89,7 @@ @@ -89,7 +89,7 @@
89 89
90 int f; 90 int f;
91 91
92 - enum cstate state = QueryCstate(); 92 + enum cstate state = lib3270_get_connection_state(h);
93 93
94 for(f=0;f < (sizeof(xlat_state)/sizeof(struct _xlat_state)); f++) 94 for(f=0;f < (sizeof(xlat_state)/sizeof(struct _xlat_state)); f++)
95 { 95 {
@@ -214,14 +214,14 @@ @@ -214,14 +214,14 @@
214 if(str) 214 if(str)
215 Input_String((unsigned char *) str); 215 Input_String((unsigned char *) str);
216 216
217 - return strdup(get_state()); 217 + return strdup(get_state(hSession));
218 } 218 }
219 219
220 LIB3270_MACRO( status ) 220 LIB3270_MACRO( status )
221 { 221 {
222 - const char * luname = get_connected_lu(0);  
223 - const char * cstate = get_state();  
224 - const char * host = get_current_host(0); 222 + const char * luname = (const char *) get_connected_lu(hSession);
  223 + const char * cstate = get_state(hSession);
  224 + const char * host = (const char *) get_current_host(hSession);
225 char * rsp; 225 char * rsp;
226 size_t sz; 226 size_t sz;
227 227
@@ -239,12 +239,12 @@ @@ -239,12 +239,12 @@
239 239
240 LIB3270_MACRO( cstate ) 240 LIB3270_MACRO( cstate )
241 { 241 {
242 - return strdup(get_state()); 242 + return strdup(get_state(hSession));
243 } 243 }
244 244
245 LIB3270_MACRO( luname ) 245 LIB3270_MACRO( luname )
246 { 246 {
247 - const char * luname = get_connected_lu(hSession); 247 + const char * luname = (const char *) get_connected_lu(hSession);
248 return strdup(luname ? luname : "none" ); 248 return strdup(luname ? luname : "none" );
249 } 249 }
250 250
latest/src/lib/screen.c
@@ -132,13 +132,13 @@ int screen_init(H3270 *session) @@ -132,13 +132,13 @@ int screen_init(H3270 *session)
132 } 132 }
133 133
134 /* Set up callbacks for state changes. */ 134 /* Set up callbacks for state changes. */
135 - register_schange(ST_CONNECT, status_connect);  
136 - register_schange(ST_3270_MODE, status_3270_mode);  
137 - register_schange(ST_PRINTER, status_printer); 135 + lib3270_register_schange(session,ST_CONNECT, status_connect,0);
  136 + lib3270_register_schange(session,ST_3270_MODE, status_3270_mode,0);
  137 + lib3270_register_schange(session,ST_PRINTER, status_printer,0);
138 138
139 - register_schange(ST_HALF_CONNECT, relabel);  
140 - register_schange(ST_CONNECT, relabel);  
141 - register_schange(ST_3270_MODE, relabel); 139 + lib3270_register_schange(session,ST_HALF_CONNECT, relabel,0);
  140 + lib3270_register_schange(session,ST_CONNECT, relabel,0);
  141 + lib3270_register_schange(session,ST_3270_MODE, relabel,0);
142 142
143 /* See about all-bold behavior. */ 143 /* See about all-bold behavior. */
144 // if (appres.all_bold_on) 144 // if (appres.all_bold_on)
@@ -149,7 +149,7 @@ int screen_init(H3270 *session) @@ -149,7 +149,7 @@ int screen_init(H3270 *session)
149 // ab_mode = appres.m3279? TS_ON: TS_OFF; 149 // ab_mode = appres.m3279? TS_ON: TS_OFF;
150 150
151 /* Set up the controller. */ 151 /* Set up the controller. */
152 - ctlr_init(-1); 152 + ctlr_init(session,-1);
153 ctlr_reinit(session,-1); 153 ctlr_reinit(session,-1);
154 154
155 /* Set the window label. */ 155 /* Set the window label. */
latest/src/lib/tesprogram.c 0 → 100644
@@ -0,0 +1,16 @@ @@ -0,0 +1,16 @@
  1 +
  2 +#include <lib3270.h>
  3 +
  4 +int main(int numpar, char *param[])
  5 +{
  6 + H3270 *h;
  7 +
  8 + h = lib3270_session_new("");
  9 +
  10 +
  11 +
  12 +
  13 + lib3270_session_free(h);
  14 +
  15 + return 0;
  16 +}