Deleted
Deleted Member
Posts: 0
|
BASM
Dec 9, 2014 11:30:11 GMT 1
Post by Deleted on Dec 9, 2014 11:30:11 GMT 1
Good News! We pick up the masmBASIC author to help out. We are trying to resolve the same issue on Windows which will hopefully resolve the Linux side. (NASM cross platform ASM friendliness ) Check out what is going on at the BASM forum.
|
|
|
BASM
Dec 9, 2014 12:43:09 GMT 1
Post by alexfish on Dec 9, 2014 12:43:09 GMT 1
Hi Vovchik
I like the context to which the bin widget is used
this will give the use option to use bin or the actual widget. same method will save others including myself a lot of work.
Thinking about the g_object_set.
Many thanks Alex
|
|
|
BASM
Dec 9, 2014 12:49:00 GMT 1
Post by alexfish on Dec 9, 2014 12:49:00 GMT 1
Good News! We pick up the masmBASIC author to help out. We are trying to resolve the same issue on Windows which will hopefully resolve the Linux side. (NASM cross platform ASM friendliness ) Check out what is going on at the BASM forum. Good news indeed. BR Alex PS:: can U try and get some original DEF FN Examples from the Author. We really need this to crank things up a bit esp on the Alias side of things. + send BR & thanks in advance . Alex
|
|
|
BASM
Dec 9, 2014 16:05:34 GMT 1
Post by alexfish on Dec 9, 2014 16:05:34 GMT 1
Hi John & Vovchik
Think have found one problem with accessing the libs and the segfault
In Simple terms the $
IE
FUNCTION HUGLIB$
just found that one out when changing the GSET over to GSET$ exec the app and = segfault
No looking further.
have entered the Two g_object_set as GSET and GSETDATA , can not really test all until imports are complete Look like hug widget font gives access to most of the identifiers exception been EDIT were the buffer is required.
SUB GSET(NUMBER hug_widget, STRING hug_text$,STRING hug_data$)
LOCAL dim, i, layer, lab, buffer, lst, image, which TYPE int LOCAL (*hug_func)(long,char*) TYPE void LOCAL widget
REM widget= hug_widget_font(STR$(hug_widget)) REM g_object_set(hug_widget,hug_text$, hug_data$, NULL) SELECT hug_widget_type$(STR$(hug_widget)) PRINT "SET BUTS" CASE "win"; CASE "notebook"; CASE "entry"; CASE "password"; CASE "combo"; CASE "frame"; CASE "msgdialog"; CASE "filedialog"; CASE "spin"; CASE "slider"; CASE "image"; CASE "button"; CASE "stock"; CASE "toggle"; CASE "check"; CASE "mark"; CASE "radio" CASE "progressbar"; PRINT hug_widget_font(STR$(hug_widget)) g_object_set(hug_widget_font(STR$(hug_widget)),hug_text$, hug_data$, NULL) CASE "edit" buffer = hug_widget_s_widget(STR$(hug_widget)) g_object_set(buffer,hug_text$, hug_data$, NULL)
END SELECT END SUB
the import line
DECLARE FUNCTION GSET LIB "./hug.so" ALIAS "GSET" (w AS INTEGER, f AS STRING,ff AS STRING) AS VOID
Typical usage GSET (lab2,"label",lab_change1$)
@ Vovchik , can u test the above Thanks in advance Alex As yet still can not access g_object_set direct as in Vovckik's in part this may be due to the __VAR_ARGS__ and the NULL TERMINATOR .
|
|
|
BASM
Dec 9, 2014 16:13:31 GMT 1
Post by vovchik on Dec 9, 2014 16:13:31 GMT 1
Dear Alex,
I am glad that GETCHILD thing works so easily. I really didn't want to deal with a list or some weird structure in BASM as it now is and that seemed like a nice little solution. It will only work properly, however, if there is only one child, as I understand. Your g_object stuff will have to do much more, though, so we will learn something. I was thinking that we could simply use ALIAS TO in HUG to pull in a number of useful and convenient things from BaCOn. I will try that now.
With kind regards, vovchik
PS. As for NULL as a terminator, have you tried this?
' ------------------ FUNCTION CHR$(ASCII AS INTEGER) AS STRING ' ------------------ $ASM extern malloc ccall malloc, 2 MOV EBX,EAX MOV AH,byte[EBP+8] MOV byte[EBX],AH MOV byte[EBX+1],0 MOV dword[EBP-4],EBX $END ASM END FUNCTION
The problem may be that CHR$(0) will be typed as a four-byte entity and not a single-byte char.
PS Just tested your GSET. BRILLIANT and it works for changing the label when I feed it markup. Will do more tests now.
|
|
|
BASM
Dec 9, 2014 16:36:35 GMT 1
Post by alexfish on Dec 9, 2014 16:36:35 GMT 1
Dear Alex, I am glad that GETCHILD thing works so easily. I really didn't want to deal with a list or some weird structure in BASM as it now is and that seemed like a nice little solution. It will only work properly, however, if there is only one child, as I understand. Your g_object stuff will have to do much more, though, so we will learn something. I was thinking that we could simply use ALIAS TO in HUG to pull in a number of useful and convenient things from BaCOn. I will try that now. With kind regards, vovchik according to devs it will work for most as "font" "type of font" : "label" "my text" : "text" as in setting EDIT from file GSET(edit,"text",mybuf$) there also should not crash the app , I think say's he , early days , more options can be added like what was done in elm , can only get the info from devs there may be a case of Third argument or more/// that takes time , but will be interesting to see what can be done as the code stands of now. as mentioned getting the DEF FN to work with var args + the NULL important here will stand corrected on the set_property direct , this one = *whatever , need to find away around that one as in IMPORTS like *VOID at least for now have limited access but not to limited Re the above mentioned happens. BR Alex
|
|
|
BASM
Dec 9, 2014 17:31:29 GMT 1
Post by alexfish on Dec 9, 2014 17:31:29 GMT 1
Hi all can resolve the $ in hug lib
this gives access to the libs If change FUNCTION HUGLIB$(STRING hug_name$)
To below and recompile
FUNCTION HUGLIB(STRING hug_name$)
LOCAL lib$
SELECT hug_name$ CASE "gtk" lib$ = hug_Get_Gtk$() CASE "gdk" lib$ = hug_Get_Gdk$() CASE "glib" lib$ = hug_Get_Glib$() CASE "gobject" lib$ = hug_Get_Gobject$() CASE "pango" lib$ = hug_Get_Pango$() CASE "glarea" lib$ = hug_Get_GtkGlArea$() CASE "glext" lib$ = hug_Get_GtkGlExt$() CASE "goo" lib$ = hug_Get_Goocanvas$() DEFAULT lib$ = "Unknown" END SELECT
RETURN lib$
END FUNCTION
then import
DECLARE FUNCTION HUGLIB LIB "./hug.so" ALIAS "HUGLIB" (t AS STRING ) AS STRING
code
DIM Glib$ AS STRING Golib$ = HUGLIB("gobject")
result
./but libgobject-2.0.so.0
Wonder what the results wold be with GRAB$
BR Alex
|
|
|
BASM
Dec 9, 2014 17:54:28 GMT 1
Post by alexfish on Dec 9, 2014 17:54:28 GMT 1
Hi John & Vovchik
progress RE GRAB$
Have change the GRAB$ to GRAB
now getting Text as in strings out of HUG
now going through the rest of lib as regards the subs and functions appended with the $
soon as complete will post if U all acceptable to the change
as adding these two functions
FUNCTION GRAB(NUMBER hug_widget)
RETURN GRAB$(hug_widget)
END FUNCTION
FUNCTION HUGLIB(STRING hug_name$)
RETURN HUGLIB$(hug_name$)
END FUNCTION
BR Alex
|
|
|
BASM
Dec 9, 2014 18:53:10 GMT 1
Post by vovchik on Dec 9, 2014 18:53:10 GMT 1
Dear Alex, I had to wrap GRAB like this: FUNCTION GRAB$(widget AS INTEGER) AS STRING DIM s$ AS STRING s$ = GRAB(widget) result = s$ END FUNCTION
to avoid a segfault, but HUGLIB worked fine. You are making great progress. We are going to invoke BaCon HUG as a lib now. Golib$: libgobject-2.0.so.0 Screen width: 1280 Screen height: 1024 img ID: 152915128 SET BUTS 152918432 SET BUTS 152918560 You changed the pic to ./nobugs02.png SET BUTS 152918432 SET BUTS 152918560 BASM HUG test You changed the pic to ./nobugs07.png
With kind regards, vovchik
|
|
|
BASM
Dec 9, 2014 19:59:40 GMT 1
Post by alexfish on Dec 9, 2014 19:59:40 GMT 1
Hi Vovchik
do U know a work around for INCLUDE as in INCLUDE "hug_imports.bac"
looking at those function's then can apply same to the GSET GSETDATA TO GSET$ & GSET altough will have change the name of GSET in the lib BR Alex
|
|
|
BASM
Dec 9, 2014 20:29:23 GMT 1
Post by vovchik on Dec 9, 2014 20:29:23 GMT 1
Dear Alex,
I don't know really how to wrap that thing, but it might be possible. I will give it a try...
With kind regards, vovchik
PS. BASM will recognize in the source:
$Include "mathfuncs1.bas"
I just put all the DECLARES in a hug.inc and put $INCLUDE "hug.inc" at the top of the hugimage demo. IT works fine. So does
DECLARE FUNCTION FILESIZE LIB "./hug.so" ALIAS "FILESIZE" (s AS STRING) AS INTEGER DECLARE FUNCTION CAT LIB "./hug.so" ALIAS "CAT" (s AS STRING) AS STRING DECLARE FUNCTION GRAB LIB "./hug.so" ALIAS "GRAB" (w AS INTEGER) AS STRING DECLARE FUNCTION GETENVIRON LIB "./hug.so" ALIAS "GETENVIRON" (s AS STRING) AS STRING DECLARE FUNCTION EXEC LIB "./hug.so" ALIAS "EXEC" (s AS STRING) AS STRING
ss$ = EXEC("ls *.bac") PRINT ss$ PRINT "HOME: ", GETENVIRON("HOME") PRINT FILESIZE("hugbut1c")
with this stuff at the end of hug.bac
' ------------------ FUNCTION CAT(STRING FILENAME$) ' ------------------ ' read file into a string memvar - like *nix cat LOCAL fileline$, txt$ TYPE STRING txt$ = "" IF FILEEXISTS(FILENAME$) THEN OPEN FILENAME$ FOR READING AS catfile WHILE NOT(ENDFILE(catfile)) DO READLN fileline$ FROM catfile txt$ = CONCAT$(txt$, fileline$, NL$) WEND CLOSE FILE catfile END IF RETURN CHOP$(txt$) END FUNCTION
FUNCTION GRAB(NUMBER hug_widget) RETURN GRAB$(hug_widget) END FUNCTION
FUNCTION HUGLIB(STRING hug_name$) RETURN HUGLIB$(hug_name$) END FUNCTION
FUNCTION GETENVIRON(STRING e$) RETURN GETENVIRON$(e$) END FUNCTION
FUNCTION FILESIZE(STRING f$) LOCAL size TYPE long size = FILELEN(f$) RETURN size END FUNCTION
FUNCTION EXEC(STRING i$) LOCAL result$ TYPE STRING result$ = EXEC$(i$) RETURN result$ END FUNCTION
|
|
|
BASM
Dec 9, 2014 20:53:05 GMT 1
Post by alexfish on Dec 9, 2014 20:53:05 GMT 1
Hi Vovchik
found it
also be in the small key word
IE $Include "hug_imports.bac"
Forgot to mention
here looking to put the INCLUDES there as in the BASM
make life a bit easier on the eye.
Now saving IMPORTS as basm_imports.bas Not sure
maybe hug_imports.bas
What U think BR Alex
|
|
|
BASM
Dec 9, 2014 21:15:41 GMT 1
Post by vovchik on Dec 9, 2014 21:15:41 GMT 1
Dear Alex,
I just called this "hug.inc":
' *********************** ' IMPORTS ' ***********************
DECLARE FUNCTION HUGLIB LIB "./hug.so" ALIAS "HUGLIB" (t AS STRING) AS STRING DECLARE FUNCTION INIT LIB "./hug.so" ALIAS "INIT" () AS VOID DECLARE FUNCTION QUIT LIB "./hug.so" ALIAS "QUIT" () AS VOID DECLARE FUNCTION HUGOPTIONS LIB "./hug.so" ALIAS "HUGOPTIONS" (o AS STRING) AS VOID DECLARE FUNCTION DISPLAY LIB "./hug.so" ALIAS "DISPLAY" () AS VOID DECLARE FUNCTION WINDOW LIB "./hug.so" ALIAS "WINDOW" (w AS STRING, width AS INTEGER, height AS INTEGER) AS INTEGER DECLARE FUNCTION ATTACH LIB "./hug.so" ALIAS "ATTACH" (p AS INTEGER, c AS INTEGER, x AS INTEGER, y AS INTEGER) AS VOID DECLARE FUNCTION HCALLBACK LIB "./hug.so" ALIAS "CALLBACK" (w AS INTEGER, c AS INTEGER) AS VOID DECLARE FUNCTION MARK LIB "./hug.so" ALIAS "MARK" (t AS STRING, w AS INTEGER, h AS INTEGER) AS INTEGER DECLARE FUNCTION IMAGE LIB "./hug.so" ALIAS "IMAGE" (t AS STRING, w AS INTEGER, h AS INTEGER) AS INTEGER DECLARE FUNCTION FONT LIB "./hug.so" ALIAS "FONT" (w AS INTEGER, f AS STRING) AS VOID DECLARE FUNCTION TEXT LIB "./hug.so" ALIAS "TEXT" (w AS INTEGER, f AS STRING) AS VOID DECLARE FUNCTION WINICON LIB "libgtk-x11-2.0.so.0" ALIAS "gtk_window_set_icon_name" (w AS INTEGER, i AS STRING) AS VOID DECLARE FUNCTION STOCK LIB "./hug.so" ALIAS "STOCK" (t AS STRING, w AS INTEGER, h AS INTEGER) AS INTEGER DECLARE FUNCTION HIDE LIB "./hug.so" ALIAS "HIDE" (w AS INTEGER) AS VOID DECLARE FUNCTION SHOW LIB "./hug.so" ALIAS "SHOW" (w AS INTEGER) AS VOID DECLARE FUNCTION ENABLE LIB "./hug.so" ALIAS "ENABLE" (w AS INTEGER) AS VOID DECLARE FUNCTION DISABLE LIB "./hug.so" ALIAS "DISABLE" (w AS INTEGER) AS VOID DECLARE FUNCTION FOCUS LIB "./hug.so" ALIAS "FOCUS" (w AS INTEGER) AS VOID DECLARE FUNCTION UNFOCUS LIB "./hug.so" ALIAS "UNFOCUS" (w AS INTEGER) AS VOID DECLARE FUNCTION SCREENSIZE LIB "./hug.so" ALIAS "SCREENSIZE" (s AS INTEGER) AS INTEGER DECLARE FUNCTION HSEPARATOR LIB "./hug.so" ALIAS "HSEPARATOR" (s AS INTEGER) AS INTEGER DECLARE FUNCTION VSEPARATOR LIB "./hug.so" ALIAS "VSEPARATOR" (s AS INTEGER) AS INTEGER DECLARE FUNCTION FRAME LIB "./hug.so" ALIAS "FRAME" (w AS INTEGER, h AS INTEGER) AS INTEGER DECLARE FUNCTION EDIT LIB "./hug.so" ALIAS "EDIT" (w AS INTEGER, h AS INTEGER) AS INTEGER DECLARE FUNCTION SYNC LIB "./hug.so" ALIAS "SYNC" () AS VOID DECLARE FUNCTION MODFONT LIB "libgtk-x11-2.0.so.0" ALIAS "gtk_widget_modify_font" (w AS INTEGER, d AS INTEGER) AS VOID DECLARE FUNCTION PANGO LIB "libpango-1.0.so.0" ALIAS "pango_font_description_from_string" (s AS STRING) AS INTEGER DECLARE FUNCTION GETCHILD LIB "libgtk-x11-2.0.so.0" ALIAS "gtk_bin_get_child" (w AS INTEGER) AS INTEGER DECLARE FUNCTION GSET LIB "./hug.so" ALIAS "GSET" (w AS INTEGER, f AS STRING,ff AS STRING) AS VOID DECLARE FUNCTION FILESIZE LIB "./hug.so" ALIAS "FILESIZE" (s AS STRING) AS INTEGER DECLARE FUNCTION CAT LIB "./hug.so" ALIAS "CAT" (s AS STRING) AS STRING DECLARE FUNCTION GRAB LIB "./hug.so" ALIAS "GRAB" (w AS INTEGER) AS STRING DECLARE FUNCTION GETENVIRON LIB "./hug.so" ALIAS "GETENVIRON" (s AS STRING) AS STRING DECLARE FUNCTION EXEC LIB "./hug.so" ALIAS "EXEC" (s AS STRING) AS STRING
' *********************** ' END IMPORTS ' ***********************
|
|
|
BASM
Dec 10, 2014 1:07:50 GMT 1
Post by alexfish on Dec 10, 2014 1:07:50 GMT 1
Hi John
don a valgind on the callback
this bit may be of interest
You pressed a button, so we are quitting.
==11750== Thread 2: ==11750== Invalid free() / delete / delete[] / realloc() ==11750== at 0x4029C88: free (in /usr/lib/valgrind/vgpreload_memcheck-x86-linux.so) ==11750== by 0x416D9A4: __libc_freeres (in /lib/i386-linux-gnu/libc-2.17.so) ==11750== by 0x47A6FFF: ??? (in /lib/i386-linux-gnu/libglib-2.0.so.0.3600.4) ==11750== Address 0xffffffff is not stack'd, malloc'd or (recently) free'd
BR Aex
|
|
Deleted
Deleted Member
Posts: 0
|
BASM
Dec 10, 2014 3:12:31 GMT 1
Post by Deleted on Dec 10, 2014 3:12:31 GMT 1
Thanks Alex! I'll pass on your discovery to AIR and Jochen.
I have pushed to the BASM bitucket site (BASM-Linux64) an updated Assembly.h to try. It seems more stable with callbacks. Also retest functions calling functions with this update.
This example from AIR seems to work with no seg faults.
$CONST GTKLIB = "libgtk-x11-2.0.so.0"
DECLARE FUNCTION INIT LIB GTKLIB ALIAS "gtk_init" (aa AS INTEGER, bb AS STRING) AS VOID DECLARE FUNCTION WINDOW LIB GTKLIB ALIAS "gtk_window_new" (aa AS INTEGER) AS INTEGER DECLARE FUNCTION WINTITLE LIB GTKLIB ALIAS "gtk_window_set_title" (w AS INTEGER, t AS STRING) AS VOID DECLARE FUNCTION WINSIZE LIB GTKLIB ALIAS "gtk_window_set_default_size" (w AS INTEGER, width AS INTEGER, height AS INTEGER) AS VOID DECLARE FUNCTION WINPOS LIB GTKLIB ALIAS "gtk_window_set_position" (w AS INTEGER, pos AS INTEGER) AS VOID DECLARE FUNCTION WINICON LIB GTKLIB ALIAS "gtk_window_set_icon_name" (w AS INTEGER, i AS STRING) AS VOID DECLARE FUNCTION BUTTON LIB GTKLIB ALIAS "gtk_button_new_with_label" (b AS STRING) AS INTEGER DECLARE FUNCTION LABEL LIB GTKLIB ALIAS "gtk_label_new" (s AS STRING) AS INTEGER DECLARE FUNCTION MARKUP LIB GTKLIB ALIAS "gtk_label_set_markup" (l AS INTEGER, t AS STRING) AS VOID DECLARE FUNCTION FIXED LIB GTKLIB ALIAS "gtk_fixed_new" () AS INTEGER DECLARE FUNCTION CONTAINER_ADD LIB GTKLIB ALIAS "gtk_container_add" (p AS INTEGER, c AS INTEGER) AS VOID DECLARE FUNCTION SHOW LIB GTKLIB ALIAS "gtk_widget_show" (aa AS INTEGER) AS VOID DECLARE FUNCTION SHOWALL LIB GTKLIB ALIAS "gtk_widget_show_all" (aa AS INTEGER) AS VOID DECLARE FUNCTION DISPLAY LIB GTKLIB ALIAS "gtk_main" () AS VOID DECLARE FUNCTION QUIT LIB GTKLIB ALIAS "gtk_main_quit" () AS Integer DECLARE FUNCTION ATTACH LIB GTKLIB ALIAS "gtk_fixed_put" (f AS INTEGER, w AS INTEGER, x AS INTEGER, y AS INTEGER) AS VOID DECLARE FUNCTION WIDGET_SIZE LIB GTKLIB ALIAS "gtk_widget_set_size_request" (w AS INTEGER, width AS INTEGER, HEIGHT AS INTEGER) AS VOID ' gobject DECLARE FUNCTION SIGNAL LIB "libgobject-2.0.so.0" ALIAS "g_signal_connect_data" (w AS INTEGER, s AS STRING, c AS INTEGER, x AS INTEGER, y AS INTEGER, z AS INTEGER) AS Integer DECLARE FUNCTION PROPERTY LIB "libgobject-2.0.so" ALIAS "gobject_set" (o AS INTEGER, p AS STRING, v AS STRING) AS VOID
' declare widget vars
DIM win AS INTEGER DIM but AS INTEGER DIM lab AS INTEGER DIM fix AS INTEGER dim cnt as integer cnt = 1
SUB MYCLICK() PRINT "You've pressed the button ",cnt," Times" cnt = cnt + 1 '~ QUIT() END SUB
INIT(0, "") win = WINDOW(0) WINTITLE(win, "BASM GTK") WINSIZE(win, 340, 240) WINPOS(win, 1) WINICON(win, "gtk-info") SIGNAL(win, "destroy", CALLBACK(QUIT), 0, 0, 0) fix = FIXED() CONTAINER_ADD(win, fix) lab = LABEL("") MARKUP(lab, "<span color='red' font='Sans Bold 26'>Simple Callback</span>") but = BUTTON("Quit") WIDGET_SIZE(but, 80, -1) SIGNAL(but, "clicked", CALLBACK(MYCLICK), 0, 0, 0) ATTACH(fix, but, 240, 190) ATTACH(fix, lab, 16, 50) SHOWALL(win) DISPLAY()
|
|