1;=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
2;very simple jwasm gtk example (written by jcfuller)
3; create a Linux binary
4; 1. assemble:       jwasm -elf -zcw -Fo=gtk01.o gtk01.asm
5; 2. link with LD:   ld -s -o gtk01 gtk01.o -I/lib/ld-linux.so.2 `pkg-config --libs gtk+-2.0`
6;
7; create a Win32 binary with MinGW
8; ( MinGW installed at C:\MinGW, GTK+ installed at C:\GTK )
9; 1. assemble:       jwasm -elf gtk01.asm
10; 2. link with LD:   ld -s -o gtk01.exe gtk01.obj -Lc:/gtk/lib
11;                    -lgtk-win32-2.0.dll -lgobject-2.0.dll -Lc:/mingw/lib -lmsvcrt
12;=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*=*
13    .386
14    .model flat
15
16    public _start
17
18gtk_init proto c :DWORD, :DWORD
19gtk_init_check proto c :DWORD, :DWORD
20gtk_window_new proto c :DWORD
21gtk_window_set_title proto c :DWORD, :DWORD
22gtk_table_new proto c :DWORD, :DWORD, :DWORD
23gtk_table_attach_defaults proto c :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
24gtk_container_add proto c :DWORD, :DWORD
25gtk_button_new_from_stock  proto c :DWORD
26gtk_label_new proto c :DWORD
27gtk_widget_show_all proto c :DWORD
28gtk_main proto c
29gtk_main_quit proto c
30g_signal_connect_data proto c :DWORD, :DWORD, :DWORD, :DWORD, :DWORD, :DWORD
31
32puts  proto c :DWORD
33exit  proto c :DWORD
34
35.data
36no_int db 'No gtk_init',0
37wincap db 'Hello World', 0
38labelcap db 'jwasm gtk example', 0
39quitbut db 'gtk-quit',0
40no_win_err db 'No Window',0
41sdel_event db 'delete-event',0
42sclicked db 'clicked',0
43
44    .data?
45window dd ?
46table dd ?
47gtklabel dd ?
48button dd ?
49
50    .code
51
52_start:    ; let the ritual begin.
53
54;make sure we have gtk
55invoke gtk_init_check,0,0
56.if (eax == 0)
57    invoke puts, offset no_int
58    jmp Terminate
59.endif
60;create window
61invoke gtk_window_new, 0
62.if (eax == 0)
63    invoke puts, offset no_win_err
64    jmp Terminate
65.endif
66mov [window], eax
67
68invoke gtk_window_set_title,[window], offset wincap
69invoke gtk_table_new,15, 15, 1
70mov [table],eax
71invoke gtk_container_add,[window],[table]
72invoke gtk_label_new,offset labelcap
73mov [gtklabel],eax
74invoke gtk_table_attach_defaults,[table],[gtklabel],1, 8, 3, 7
75invoke gtk_button_new_from_stock,offset quitbut
76mov [button],eax
77invoke gtk_table_attach_defaults,[table],[button], 10, 14, 12, 14
78;Show whole GUI
79invoke gtk_widget_show_all,[window]
80;attache signals
81invoke g_signal_connect_data,[window],offset sdel_event,offset exit_prog,0, 0, 0
82invoke g_signal_connect_data,[button],offset sclicked,offset exit_prog,0, 0, 0
83;Do it
84invoke gtk_main
85;------------------------------------------------------------------------------
86;Callback for closing window
87exit_prog proc
88    invoke gtk_main_quit
89exit_prog endp
90;------------------------------------------------------------------------------
91Terminate:
92    invoke exit, 0
93
94    end _start
95