AllBASIC Forum
BASIC Developer & Support Resources => Compilers => Topic started by: John on January 11, 2013, 06:31:20 AM
-
Peter from the OxygenBasic forum created an include file for IUP that makes using the library easy.
(http://files.allbasic.info/O2/iup_hello.png)
iup_hello.o2bas
include "iup.inc"
IupOpen(0,0)
IupShow(IupDialog(IupLabel("Hello World!")))
IupMainLoop()
IupClose()
iup.inc (work-in-process)
#define IUP_TITLE "TITLE"
% IUP_CENTERPARENT = 65530
% IUP_CENTER = 65535
% IUP_LEFT = 65534
% IUP_RIGHT = 65533
% IUP_MOUSEPOS= 65532
% IUP_CURRENT = 65531
% IUP_TOP = IUP_LEFT
% IUP_BOTTOM = IUP_RIGHT
% IUP_CLOSE =-3
% IUP_ERROR = 1
% IUP_NOERROR = 0
% IUP_OPENED =-1
% IUP_INVALID =-1
% IUP_IGNORE =-1
% IUP_DEFAULT =-2
% IUP_CLOSE =-3
% IUP_CONTINUE=-4
% IUP_BUTTON1 = 1
% IUP_BUTTON2 = 2
% IUP_BUTTON3 = 3
% IUP_BUTTON4 = 4
% IUP_BUTTON5 = 5
enum {IUP_SBUP, IUP_SBDN, IUP_SBPGUP, IUP_SBPGDN, IUP_SBPOSV, IUP_SBDRAGV,
IUP_SBLEFT, IUP_SBRIGHT, IUP_SBPGLEFT, IUP_SBPGRIGHT, IUP_SBPOSH, IUP_SBDRAGH}
enum {IUP_DRAW_FILL, IUP_DRAW_STROKE, IUP_DRAW_STROKE_DASH}
enum {IUP_SHOW,IUP_RESTORE,IUP_MINIMIZE,IUP_MAXIMIZE,IUP_HIDE}
typedef struct Ihandle_ {}
Ihandle_ Ihandle
typedef int (*Icallback)(Ihandle*)
typedef struct _IdrawCanvas {}
_IdrawCanvas IdrawCanvas
! IupOpen Lib "iup.dll" (sys argc,argv) as sys
! IupCreate Lib "iup.dll" (string cname) as sys
! IupDialog Lib "iup.dll" (sys ih) as sys
! IupLabel Lib "iup.dll" (char *title) as sys
! IupImageLibOpen Lib "iup.dll" ()
! IupMainLoop Lib "iup.dll" () as sys
! IupLoopStep Lib "iup.dll" () as sys
! IupLoopStepWait Lib "iup.dll" () as sys
! IupMainLoopLevel Lib "iup.dll" () as sys
! IupFlush Lib "iup.dll" ()
! IupExitLoop Lib "iup.dll" ()
! IupRecordInput Lib "iup.dll" (char *filename, sys mode) as sys
! IupPlayInput Lib "iup.dll" (char *filename) as sys
! IupUpdate Lib "iup.dll" (sys ih)
! IupUpdateChildren Lib "iup.dll" (sys ih)
! IupRedraw Lib "iup.dll" (sys ih, children)
! IupRefresh Lib "iup.dll" (sys ih)
! IupRefreshChildren Lib "iup.dll" (sys ih)
! IupMapFont Lib "iup.dll" (char *iupfont) as string
! IupUnMapFont Lib "iup.dll" (char *driverfont) as string
! IupHelp Lib "iup.dll" (string url) as sys
! IupLoad Lib "iup.dll" (char *filename) as string
! IupLoadBuffer Lib "iup.dll" (char *buffer) as string
! IupVersion Lib "iup.dll" () as string
! IupVersionDate Lib "iup.dll" () as string
! IupVersionNumber Lib "iup.dll" () as sys
! IupSetLanguage Lib "iup.dll" (char *lng)
! IupGetLanguage Lib "iup.dll" () as string
! IupDestroy Lib "iup.dll" (sys ih)
! IupDetach Lib "iup.dll" (sys child)
! IupAppend Lib "iup.dll" (sys ih, child) as sys
! IupInsert Lib "iup.dll" (sys ih, ref_child, child) as sys
! IupGetChild Lib "iup.dll" (sys ih, sys pos) as sys
! IupGetChildPos Lib "iup.dll" (sys ih, child) as sys
! IupGetChildCount Lib "iup.dll" (sys ih) as sys
! IupGetNextChild Lib "iup.dll" (sys ih, child) as sys
! IupGetBrother Lib "iup.dll" (sys ih) as sys
! IupGetParent Lib "iup.dll" (sys ih) as sys
! IupGetDialog Lib "iup.dll" (sys ih) as sys
! IupGetDialogChild Lib "iup.dll" (sys ih, char *name) as sys
! IupReparent Lib "iup.dll" (sys ih, new_parent, ref_child) as sys
! IupPopup Lib "iup.dll" (sys ih, x, y) as sys
! IupShow Lib "iup.dll" (sys ih) as sys
! IupShowXY Lib "iup.dll" (sys ih, x, y) as sys
! IupHide Lib "iup.dll" (sys ih) as sys
! IupMap Lib "iup.dll" (sys ih) as sys
! IupUnmap Lib "iup.dll" (sys ih)
! IupSetAttribute Lib "iup.dll" (sys ih, char *name, char *value)
! IupSetAttributes Lib "iup.dll" (sys ih,string strz) as sys
! IupAppend Lib "iup.dll" (sys ih, child) as sys
! IupRefresh Lib "iup.dll" (sys ih)
! IupSetCallback Lib "iup.dll" (sys ih, char *sname, sys func) as sys callback
! IupSetFocus Lib "iup.dll" (sys ih) as sys
! IupImageLibOpen Lib "iup.dll" () as sys
! IupClose Lib "iup.dll" ()
! IupGetColor Lib "iup.dll" (sys x, y, char *r, *g, *b) as sys
! IupSetFocus Lib "iup.dll" (sys ih) as sys
! IupGetFocus Lib "iup.dll" () as sys
! IupPreviousField Lib "iup.dll" (sys ih) as sys
! IupNextField Lib "iup.dll" (sys ih) as sys
! IupGetFunction Lib "iup.dll" (char *name) as sys
! IupSetFunction Lib "iup.dll" (char *name, sys func) as sys callback
! IupGetActionName Lib "iup.dll" () as string
! IupFill Lib "iup.dll" () as sys
! IupRadio Lib "iup.dll" (sys child) as sys
! IupVbox Lib "iup.dll" (sys child) as sys
! IupVboxv Lib "iup.dll" (sys *children) as sys
! IupZbox Lib "iup.dll" (sys child) as sys
! IupZboxv Lib "iup.dll" (sys *children) as sys
! IupHbox Lib "iup.dll" (sys child) as sys
! IupHboxv Lib "iup.dll" (sys *children) as sys
! IupNormalizer Lib "iup.dll" (sys ih_first) as sys
! IupNormalizerv Lib "iup.dll" (sys *ih_list) as sys
! IupCbox Lib "iup.dll" (sys child) as sys
! IupCboxv Lib "iup.dll" (sys *children) as sys
! IupSbox Lib "iup.dll" (sys child) as sys
! IupSplit Lib "iup.dll" (sys child1, child2) as sys
! IupFrame Lib "iup.dll" (sys child) as sys
! IupImage Lib "iup.dll" (sys width, height, char *pixmap) as sys
! IupImageRGB Lib "iup.dll" (sys width, height, char *pixmap) as sys
! IupImageRGBA Lib "iup.dll" (sys width, height, char *pixmap) as sys
! IupItem Lib "iup.dll" (char *title, char *action) as sys
! IupSubmenu Lib "iup.dll" (char *title, sys child) as sys
! IupSeparator Lib "iup.dll" () as sys
! IupMenu Lib "iup.dll" (sys child) as sys
! IupMenuv Lib "iup.dll" (sys *children) as sys
! IupButton Lib "iup.dll" (char *title, char *action) as sys
! IupCanvas Lib "iup.dll" (char *action) as sys
! IupUser Lib "iup.dll" () as sys
! IupLabel Lib "iup.dll" (char *title) as sys
! IupList Lib "iup.dll" (char *action) as sys
! IupText Lib "iup.dll" (char *action) as sys
! IupMultiLine Lib "iup.dll" (char *action) as sys
! IupToggle Lib "iup.dll" (char *title, char *action) as sys
! IupTimer Lib "iup.dll" () as sys
! IupClipboard Lib "iup.dll" () as sys
! IupProgressBar Lib "iup.dll" () as sys
! IupVal Lib "iup.dll" (char *type) as sys
! IupTabs Lib "iup.dll" (sys child) as sys
! IupTabsv Lib "iup.dll" (sys *children) as sys
! IupTree Lib "iup.dll" () as sys
! IupGetFile Lib "iup.dll" (char *arq) as sys
! IupMessage Lib "iup.dll" (char *title, *msg)
! IupMessagef Lib "iup.dll" (char *title, *format)
! IupAlarm Lib "iup.dll" (char *title, *msg, *b1, *b2, *b3) as sys
! iupDrawCreateCanvas Lib "iup.dll" (Ihandle *ih) as sys
! iupDrawKillCanvas Lib "iup.dll" (sys *dc)
! iupDrawFlush Lib "iup.dll" (sys *dc)
! iupDrawUpdateSize Lib "iup.dll" (sys *dc)
! iupDrawGetSize Lib "iup.dll" (sys *dc, *w, *h)
! iupDrawLine Lib "iup.dll" (sys *dc, x1, y1, x2, y2, byte r, g, b, sys style)
! iupDrawRectangle Lib "iup.dll" (sys *dc, x1, y1, x2, y2, byte r, g, b, sys style)
! iupDrawArc Lib "iup.dll" (sys *dc, x1, y1, x2, y2, double a1, a2, byte r, g, b, sys style)
! iupDrawPolygon Lib "iup.dll" (sys *dc, *points, count, byte r, g, b, sys style)
! iupDrawText Lib "iup.dll" (sys *dc, char *text, sys len, x, y, byte r, g, b, char *font)
! iupDrawImage Lib "iup.dll" (sys *dc, char *name, sys make_inactive, x, y, *img_w, *img_h)
! iupDrawSetClipRect Lib "iup.dll" (sys *dc, x1, y1, x2, y2)
! iupDrawResetClip Lib "iup.dll" (sys *dc)
! iupDrawRectangleInvert Lib "iup.dll" (sys *dc, x1, y1, x2, y2)
! iupDrawParentBackground Lib "iup.dll" (sys *dc)
/* NOT COMPLETE YET */
-
The OxygenBasic IUP team is making progress and we solved our callback and resource embedding issues. Peter Wirbelauer has teken the IUP lead for the O2 project and is building an include set of IUP definitions to make using the GUI toolkit easier.
(http://files.allbasic.info/O2/o2butstyle.png)
(http://files.allbasic.info/O2/o2butmsg.png)
include "iup.inc"
sys win
Sub Btn1_clicked() callback
static sys a
a +=1
PRINT "BUTTON 1 Event " + a "x pressed"
End Sub
Sub Btn2_clicked() callback
static sys a
a +=1
PRINT "BUTTON 2 Event " + a "x pressed"
End Sub
Sub Btn3_clicked() callback
static sys a
a +=1
PRINT "BUTTON 3 Event " + a "x pressed"
End Sub
IupOpen(0,0)
win=IupCreate("dialog")
IupSetAttributes win, "TITLE= Test Dialog, SIZE=300x"
horzbox = IupCreate("hbox")
IupSetAttributes(horzbox, "GAP=5")
btn1 = IupCreate("button")
IupSetAttributes(btn1, "TITLE=Button1, EXPAND=HORIZONTAL")
btn2 = IupCreate("button")
IupSetAttributes(btn2, "TITLE=Button2, EXPAND=HORIZONTAL")
btn3 = IupCreate("button")
IupSetAttributes(btn3, "TITLE=Button3, EXPAND=HORIZONTAL")
IupAppend(horzbox, btn1)
IupAppend(horzbox, btn2)
IupAppend(horzbox, btn3)
IupAppend(win, horzbox)
IupSetCallback(btn1,"ACTION", @Btn1_clicked)
IupSetCallback(btn2,"ACTION", @Btn2_clicked)
IupSetCallback(btn3,"ACTION", @Btn3_clicked)
IupShow(win)
IupMainLoop()
IupClose()
This is an example using the CD (Canvas Draw) features of the toolkit.
(http://files.allbasic.info/O2/iupdraw.png)
include "iup.inc"
sys win,cvas
Sub Text() callback
iupDrawText *cvas,"APPLES ARE FUNNY",16, 150,10, 200,200,248,""
iupDrawRectangle *cvas, 144,8, 148+140,20+8, 255,255,255, 1
iupDrawRectangle *cvas, 100,80, 100+210,64+80, 255,0,255, 0
iupDrawText *cvas,"IUP BANANAS ARE DELICIOUS",26, 105,100, 255,255,255, ""
iupDrawImage *cvas,"iup.bmp",1,180,200,102,100
iupDrawFlush *cvas
End Sub
IupOpen(0,0)
win=iupCreate "dialog"
IupSetAttributes win,"TITLE=OXYGENBASIC, SIZE=320x240"
IupShow win
cvas=IupDrawCreateCanvas (win)
IupSetCallback cvas,"ACTION", Text
IupMainLoop()
IupDrawKillCanvas *cvas
IupClose()
At this point I'm leaning towards OxygenBasic as my Windows IUP development environment. (ScriptBasic has already been embedded in O2 some time ago so both of my bases are covered)
-
Charles is making great progress with using standard C headers (.h) with OxygenBasic.
includepath "C:\iup\include\"
extern lib "iup.dll" cdecl
include "iup.h"
end extern
sys win, horzbox, btn1, btn2, btn3
extern cdecl
FUNCTION Btn1_clicked(iHandle* h) as sys
static sys a
a +=1
PRINT "BUTTON 1 Event " + a "x pressed"
RETURN IUP_DEFAULT
END FUNCTION
FUNCTION Btn2_clicked(iHandle* h) as sys
static sys a
a +=1
PRINT "BUTTON 2 Event " + a "x pressed"
RETURN IUP_DEFAULT
END FUNCTION
FUNCTION Btn3_clicked(iHandle* h) as sys
static sys a
a +=1
PRINT "BUTTON 3 Event " + a "x pressed"
RETURN IUP_DEFAULT
END FUNCTION
end extern
IupOpen(0,0)
win=IupCreate("dialog")
IupSetAttributes win, "TITLE= Test Dialog, SIZE=300x"
horzbox = IupCreate("hbox")
IupSetAttributes(horzbox, "GAP=5")
btn1 = IupCreate("button")
IupSetAttributes(btn1, "TITLE=Button1, EXPAND=HORIZONTAL")
btn2 = IupCreate("button")
IupSetAttributes(btn2, "TITLE=Button2, EXPAND=HORIZONTAL")
btn3 = IupCreate("button")
IupSetAttributes(btn3, "TITLE=Button3, EXPAND=HORIZONTAL")
IupAppend(horzbox, btn1)
IupAppend(horzbox, btn2)
IupAppend(horzbox, btn3)
IupAppend(win, horzbox)
IupSetCallback(btn1,"ACTION", @Btn1_clicked)
IupSetCallback(btn2,"ACTION", @Btn2_clicked)
IupSetCallback(btn3,"ACTION", @Btn3_clicked)
IupShow(win)
IupMainLoop()
IupClose()
Note You need to use the latest A39 Oxygen.dll to follow along with the IUP examples posted.
Other O2 News:
This new version of Oxygen also supports dead code removal. It can take out all unused functions,subs and methods when the #compact directive is used. (Warning! If any Basic procedure is called exclusively from assembler, it will not be tagged as used, and will be thrown out!)
This allows programmers to work with large source code libraries, and still produce small binaries.
I have also extended the addr pseudo-instruction to resolve addresses of labels and string literals as well as variables.
.here
addr ecx,here
addr eax, "Hello World" '(must use eax for strings)
sys a,b,c
addr ecx,a
-
Just in case you need to define more than one dll and a .h include file.
extern cdecl
library "lib1.dll"
include "lib1.h"
library "lib2.dll"
include "lib2.h"
library "lib3.dll"
include "lib3.h"
end extern
Both OxygenBasic and BaCon are making working with C libraries, structures and definitions a natural extension to Basic.