Commit 8f241e95bb9c0a68f950370ea7b185c9ab9d1be9
1 parent
714519b0
Exists in
master
and in
5 other branches
Incluindo popup com a saida dos programas rexx usando o formato do rexx v4
Showing
1 changed file
with
51 additions
and
3 deletions
Show diff stats
src/plugins/rx3270/pluginmain.cc
... | ... | @@ -48,6 +48,16 @@ |
48 | 48 | #include <lib3270/actions.h> |
49 | 49 | #include <lib3270/log.h> |
50 | 50 | |
51 | +/*--[ Rexx application data block ]--------------------------------------------------------------------------*/ | |
52 | + | |
53 | + struct rexx_application_data | |
54 | + { | |
55 | + GtkAction * action; | |
56 | + GtkWidget * widget; | |
57 | + const gchar * filename; | |
58 | + }; | |
59 | + | |
60 | + | |
51 | 61 | /*--[ Plugin session object ]--------------------------------------------------------------------------------*/ |
52 | 62 | |
53 | 63 | class plugin : public rx3270 |
... | ... | @@ -219,15 +229,53 @@ |
219 | 229 | return lib3270_get_text(hSession,baddr,len); |
220 | 230 | } |
221 | 231 | |
232 | + static int REXXENTRY Rexx_IO_exit(RexxExitContext *context, int exitnumber, int subfunction, PEXIT parmBlock) | |
233 | + { | |
234 | + trace("%s call with ExitNumber: %d Subfunction: %d",__FUNCTION__,(int) exitnumber, (int) subfunction); | |
235 | + | |
236 | + if(subfunction == RXSIOSAY) | |
237 | + { | |
238 | + GtkWidget *dialog = gtk_message_dialog_new( GTK_WINDOW(gtk_widget_get_toplevel(((struct rexx_application_data * )context->GetApplicationData())->widget)), | |
239 | + GTK_DIALOG_DESTROY_WITH_PARENT, | |
240 | + GTK_MESSAGE_INFO, | |
241 | + GTK_BUTTONS_OK_CANCEL, | |
242 | + "%s", (((RXSIOSAY_PARM *) parmBlock)->rxsio_string).strptr ); | |
243 | + | |
244 | + gtk_window_set_title(GTK_WINDOW(dialog), _( "Script message" ) ); | |
245 | + | |
246 | + if(gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL) | |
247 | + context->RaiseException0(Rexx_Error_Program_interrupted); | |
248 | + | |
249 | + gtk_widget_destroy(dialog); | |
250 | + | |
251 | + return RXEXIT_HANDLED; | |
252 | + } | |
253 | + | |
254 | + return RXEXIT_NOT_HANDLED; | |
255 | + } | |
256 | + | |
222 | 257 | static void call_rexx_script(GtkAction *action, GtkWidget *widget, const gchar *filename) |
223 | 258 | { |
224 | - const gchar * args = (const gchar *) g_object_get_data(G_OBJECT(action),"args"); | |
259 | + const gchar * args = (const gchar *) g_object_get_data(G_OBJECT(action),"args"); | |
260 | + | |
261 | + struct rexx_application_data appdata = { action, widget, filename }; | |
225 | 262 | |
226 | 263 | RexxInstance * instance; |
227 | 264 | RexxThreadContext * threadContext; |
228 | 265 | RexxOption options[25]; |
266 | + RexxContextExit exits[2]; | |
229 | 267 | |
230 | 268 | memset(options,0,sizeof(options)); |
269 | + memset(exits,0,sizeof(exits)); | |
270 | + | |
271 | + exits[0].sysexit_code = RXSIO; | |
272 | + exits[0].handler = Rexx_IO_exit; | |
273 | + | |
274 | + options[0].optionName = DIRECT_EXITS; | |
275 | + options[0].option = (void *) exits; | |
276 | + | |
277 | + options[1].optionName = APPLICATION_DATA; | |
278 | + options[1].option = (void *) &appdata; | |
231 | 279 | |
232 | 280 | if(!RexxCreateInterpreter(&instance, &threadContext, options)) |
233 | 281 | { |
... | ... | @@ -278,9 +326,9 @@ |
278 | 326 | GTK_DIALOG_DESTROY_WITH_PARENT, |
279 | 327 | GTK_MESSAGE_ERROR, |
280 | 328 | GTK_BUTTONS_CANCEL, |
281 | - "%s", _( "Script error" )); | |
329 | + "%s", _( "Rexx script failed" )); | |
282 | 330 | |
283 | - gtk_window_set_title(GTK_WINDOW(dialog),_( "System busy" )); | |
331 | + gtk_window_set_title(GTK_WINDOW(dialog),_( "Rexx error" )); | |
284 | 332 | |
285 | 333 | gtk_message_dialog_format_secondary_text( |
286 | 334 | GTK_MESSAGE_DIALOG(dialog), | ... | ... |