Menu

PLEASE TAKE A QUICK GANDER AT GNUCOBOL IN MY CODE TO SEE IF IT IS CORRECT

J McNamara
2024-10-24
2024-10-26
  • J McNamara

    J McNamara - 2024-10-24

    hI-

    I am trying to call a dialog from cobol to GIK and output the message.

    I am really stuck on this one. thanks!

    thanks.

    SOURCE FORMAT IS FIXED
    IDENTIFICATION DIVISION.
    PROGRAM-ID. screen1.
    ENVIRONMENT DIVISION.
    CONFIGURATION SECTION.
    DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 gtk-window USAGE POINTER.
    01 gtk-box USAGE POINTER.
    01 gtk-label USAGE POINTER.
    01 gtk-button USAGE POINTER.
    01 gtk-textentry PIC X(100).
    01 GTK-RESULT PIC 9.
    01 DIALOG USAGE POINTER.

    01 GTK_DIALOG_DESTROY_WITH_PARENT PIC 9 VALUE 1.
    01 GTK_MESSAGE_INFO   PIC 9 VALUE 1.
    01 GTK_BUTTONS_OK     PIC 9 VALUE 1.
    01 G_CALLBACK         USAGE POINTER.  
    01 WS-AB              PIC X(100).
    01 value-to-receive   PIC X(100).
    01 WS-ENTRY-STORE     PIC X(50).
    01 WS-BASE-YEAR       PIC 9(4).
    01 WS-MONTH           PIC 9(2).
    01 WS-MYID            PIC 9(11).
    01 WS-SEQUENCE-NUM    PIC 9(13) VALUE 1.
    01 WS-FORMATTED-SEQ   PIC X(25).
    01 WS-TRANS-TYPE      PIC 9(3) VALUE 0.  
    01 WS-TRANS-DESC      PIC X(50) VALUE SPACES.
    LINKAGE SECTION.
    01 input-message PIC X(100).
    
    PROCEDURE DIVISION USING input-message.
    MAIN-RTN.
       DISPLAY "User input: " input-message.
       EXIT PROGRAM.
    END PROGRAM screen1.
    

    / with much help from chatgpt /

    include <windows.h></windows.h>

    include <gtk gtk.h=""></gtk>

    include <stdio.h></stdio.h>

    ifdef _WIN64

    define EXPORT __declspec(dllexport)

    else

    define EXPORT

    endif

    include "stdio.h"

    include <glib-2.0 glib.h=""></glib-2.0>

    include <atk atk.h=""></atk>

    include <gtk gtk.h=""></gtk>

    include <gdk gdk.h=""></gdk>

    include <gdk gdkpixbuf.h=""></gdk>

    include <gdk gdkcairo.h=""></gdk>

    include <gtk gtk.h=""></gtk>

    include <gtk gtk.h=""></gtk>

    // Declare the COBOL function (assuming it's in a COBOL shared library)
    extern void CBL_OC_DISPLAY_USER_INPUT(const char *value);

    static int gtk_initialized = 0;

    // Function to initialize GTK
    void initialize_gtk() {
    if (!gtk_initialized) {
    gtk_init(NULL, NULL);
    gtk_initialized = 1; // Prevent re-initialization
    }
    }

    // Function to display user input in a dialog
    void display_user_input(const char *input) {
    if (input == NULL) {
    g_warning("Input is NULL");
    return; // Handle the error appropriately
    }

    GtkWidget *dialog;
    GtkWidget *window;
    
    // Ensure GTK is initialized
    initialize_gtk();
    
    // Create a new top-level window
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    if (window == NULL) {
        g_error("Failed to create window.");
        return;
    }
    
    gtk_window_set_title(GTK_WINDOW(window), "GTK Dialog");
    gtk_window_set_default_size(GTK_WINDOW(window), 250, 150);
    
    // Create the dialog
    dialog = gtk_message_dialog_new(GTK_WINDOW(window),
                                    GTK_DIALOG_DESTROY_WITH_PARENT,
                                    GTK_MESSAGE_INFO,
                                    GTK_BUTTONS_OK,
                                    "User input: %s", input);
    if (dialog == NULL) {
        g_error("Failed to create dialog.");
        gtk_widget_destroy(window);
        return;
    }
    
    // Show the dialog
    gtk_dialog_run(GTK_DIALOG(dialog));
    
    // Clean up
    gtk_widget_destroy(dialog);
    gtk_widget_destroy(window);
    

    }

    // Example button click callback (if needed)
    void on_button_clicked(GtkWidget button, gpointer data) {
    const char
    input = "Hello from Button!";
    display_user_input(input);
    }

    int main(int argc, char argv[]) {
    GtkWidget
    window;
    GtkWidget entry;
    // GtkWidget
    button;
    GtkWidget button2;
    GtkWidget
    box;

     /**
     // Initialize GTK
    initialize_gtk();
    
    // Create the main window
    GtkWidget *main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(main_window), "Main Window");
    gtk_window_set_default_size(GTK_WINDOW(main_window), 300, 200);
    g_signal_connect(main_window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    
    // Create a button
    GtkWidget *button = gtk_button_new_with_label("Click me");
    g_signal_connect(button, "clicked", G_CALLBACK(on_button_clicked), NULL);
    
    // Add the button to the main window
    gtk_container_add(GTK_CONTAINER(main_window), button);
    
    // Show all widgets in the window
    gtk_widget_show_all(main_window);
    
    // Run the GTK main loop
    gtk_main();
    
    **/
    
    return 0;
    

    }

    Sent with Proton Mail secure email.

     
  • László Erdős

    László Erdős - 2024-10-26

    Hi,

    there are GTK examples in the GnuCOBOL FAQ, and also in the GnuCOBOL Contributions SVN. Maybe it helps you. Generell the FAQ and the Contributions are good starting point, you can spare time with them.

    László

     

Anonymous
Anonymous

Add attachments
Cancel