Oxygen Basic
Programming => Problems & Solutions => Topic started by: Frankolinox on October 09, 2012, 09:08:08 AM
-
hi charles, last night I've started to build a simple sdk window with scintilla include file. my stupid question is now if it's possible to compile this script example with this new editor embedding all oxygen power? or do I need to implement an include file for building and execution this little buffer string? I used "putfile" for the buffer string to show. "endofline" and "close" (file) doesn't yet exist in oxygen.
"compile(source)" is a command as I know and that's working. I have include it already. But how I can make "go" or "run" as command for this separately editor? my idea was to start an own little scintilla editor for oxygen, but that's not so easy I can see now ;)
best regards, frank
-
Heh...
Frank you can look into my scintilla test editor written in oxygen.
For now he can only load a source file into it.
but of course you can use ShellExecute() to run compiler and then parse path
and start new executable...
look here:
Oxygen Basic > Programming > Example Code > User Interface > Sci Test
Aurel
-
thanks aurel, I will check your example.
I would liike to know if it's possible to compiel an oxygen code example without saving modus. I have a string buffer in my source code I wanted to compile. that# s not possible without saving so far as I know. It was just an experimental code exmple with my scintilla sdk window to show if that's possible to do that one. I have not idea what I have to do to make a "build" options or "go" with oxygen. and for "charles", why the scintilla editor you're using don't know all that "source code " commands like "makepe (string, string)" or "prepexec(ute)" for this freebasic editor? I am a little confused about that one, sorry. thanks for feedback aurel. only a little comment line, I have tried to convert all oxygenbasic to powerbasic. I have finished nearly 75 per Cents and I am curious to see what happens If I have finished all ;) My silly idea was to convert some parts of oxygen (I think I have to convert all source code) for my funbasic project :-)
best regards, good night from cold autumn germany, frank
X
-
Frank...
To many questions without right direction...
I understand what you have (so-so) in your mind but things not work
on that way,i know that from my own expirience.
Ok.
First if you whish made code -> work STOP thinking on PowerBasic way.
I made same mistake when i try to think like i use EmergenceBasic way.
I hope that you get point about this. ;)
Second ...
In my scintila example you can see load function.
I not add save option because in this momment i don't need this one but
for compiling code written in sci editor you must save changes in code before
compile -> run step, right?
When i catch some time i will add to my sci-editor save option,compile-option,run-option
If you look better there are already buttons for that,right?
For save option you probably need SCI_GETTEXT and fill buffer with code,then
put this buffer with PutFile() oxygen function into file,Right?
( i do not test this yet BUT probably will work ok).
Oh my--maybe i talk to much ::)
But i just try to explain the best I can... ;D
good luck...
if you have any question just ask... ;)
-
thanks aurel, I have got it now for "loading file" and compiling with oxygen for my scintilla/oxygen editor. but I wanted to send the buffer from scintilla editor for direct compiling/running/building. I will make a save file dialog for next time. I will looking for right solution and check more scintilla files on my hd :-) nice week-end, frank
-
You probably mean under direct compiling/building- as interpreting code for your funBasic?
-
yes "direct interpreting with buffer string" that's working in my funproject without problems, but I wanted to understand what's going on with my oxygen scintilla example :-)
here's my new attempt. I took your example ("doOpen") and manipulate it. I think that's only one or two little things are missing to save a scintilla file. my example works on oxygen that I can give the file a name but I cannot see the file in my folder (it doesn't exist).. compiling task after open the file I have already managed to build it :-)
'--------------- experimental code example
Sub doSaveFile
'--------------- experimental code example
INT hsize=0 : dim as sys hsci, nfile, buffer,nlen
string fR,dir,filter,title,tx,cr,tab
cr=chr(13)+chr(10)
tab=chr(9)
dir=""
string sep=chr(0)
filter = " All files "+sep+" *.*"+sep+"Oxygen files "+sep+" *.o2bas"
title="Save File... "
hwnd=0
fR = FileDialog(dir,filter,title,"txt",0,0,0)
'nFile = FREEFILE ' how to set FREEFILE for oxygen?
'OPEN f FOR BINARY AS nFile ' ???
SendMessage hSci, %SCI_GETTEXT, BYVAL LEN(tx), BYVAL STRPTR(tx)
'------- PUTFILE ---------------------- /
PUTFILE fr,LEFT(tx, LEN(tx) - 1)
'------- PUTFILE ---------------------- /
'SETEOF nFile '-> SetEndofFile doesn't exist for oxygen?
closeHandle nFile 'Close nFile
tx = GetFilename(fr,1)
hsize = SendMessage hsci, SCI_GETTEXTLENGTH, 0, 0 '?
SendMessage hsci,SCI_SETTEXT,hsize+1,strptr(tx) '?
End Sub
frank
-
Ohh i see you have problem with save sciText as file visible in folder.
I see now but you don't read what i say,i do not test this yet.
Ok i will work on this right now ;)
-
Uf Frank
I do some things quickly and i'm not sure what PUTFILE() exactly need.
I do changes in FileDialog() function in include like this:
'FileDialog( $ iDir , $ filter ,$ title , % parent ,% flag )
Function FileDialog(Dir As String, filter , Title , long Hwnd, Flags, defext) As String
Dim ofn As OPENFILENAME
Dim filename[255] As zstring
INT retval
ofn.lStructSize = 76
ofn.hwndOwner = hWnd
ofn.hInstance = GetModuleHandle(0)
ofn.lpstrFilter = ?filter
ofn.lpstrCustomFilter= NULL
ofn.nMaxCustFilter = 0
ofn.nFilterIndex = 2
ofn.lpstrFile = @filename 'zstring buffer
ofn.nMaxFile = 255
ofn.lpstrFileTitle = NULL
ofn.nMaxFileTitle = 0
ofn.lpstrInitialDir = ?dir
ofn.lpstrTitle = ?title
If flags = 0 then ofn.Flags = OFN_EXPLORER Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
If flags = 1 then ofn.Flags = OFN_EXPLORER Or OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY
ofn.nFileOffset = 0
ofn.nFileExtension = 0
ofn.lpstrDefExt = ?defext
ofn.lCustData = 0
ofn.lpfnHook = 0
ofn.lpTemplateName = NULL
' Execute the dialog box
IF flags = 0 then retval = GetOpenFileName(ofn)
IF flags = 1 then retval = GetSaveFileName(ofn)
Return filename
End Function
Then in editor code doSave:
Sub doSave
INT hsize=0
fName=""
dir=""
sys tx
string sep=chr(0)
'filter = "All Files"+sep+"*.*"+sep"Text files"+sep+"*.txt"+ sep
filter = " All files "+sep+" *.*"+sep+"Oxygen files "+sep+" *.o2bas"
title="Save File... "
hwnd=0
fName = FileDialog(dir,filter,title,0,1,"o2bas")
hsize = SendMessage hsci, SCI_GETTEXTLENGTH, 0, 0
tx=SendMessage edit1,SCI_GETTEXT,hsize+1,strptr(fName)
PutFile fName,tx
End sub
Also in awinh.inc i add
Declare Function GetOpenFileName Lib "comdlg32.dll" alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Declare Function GetSaveFileName Lib "comdlg32.dll" alias "GetSaveFileNameA" (pOpenfilename AS OPENFILENAME) As Long
BUT... >:( >:( >:(
Saved is number ::)
Ufff i think that i miss something..
maybe i tomorow see what i miss :-\
-
Yeah as usual i miss few stupid things... ::)
here is oyxgen code of doSave from scintilla c ontrol
easy ...right? ;D
Sub doSave
INT hsize=0
fName=""
dir=""
char tx[32768]
string sep=chr(0)
'filter = "All Files"+sep+"*.*"+sep"Text files"+sep+"*.txt"+ sep
filter = " All files "+sep+" *.*"+sep+"Oxygen files "+sep+" *.o2bas"
title="Save File... "
hwnd=0
fName = FileDialog(dir,filter,title,0,1,"txt")
hsize = SendMessage hsci, SCI_GETTEXTLENGTH, 0, 0
SendMessage hsci,SCI_GETTEXT,hsize+1,tx
PutFile fName,tx
Eh i use char as buffer type but probably will work as just tx without type..
because work in doOpen to :-\
-
Oh i forget there is changes in FileDialog() function like this:
FileDialog( $ iDir , $ filter ,$ title , % parent ,% flag )
Function FileDialog(Dir As String, filter , Title , long Hwnd, Flags, defext) As String
Dim ofn As OPENFILENAME
Dim filename[255] As zstring
INT retval
ofn.lStructSize = 76
ofn.hwndOwner = hWnd
ofn.hInstance = GetModuleHandle(0)
ofn.lpstrFilter = ?filter
ofn.lpstrCustomFilter= NULL
ofn.nMaxCustFilter = 0
ofn.nFilterIndex = 2
ofn.lpstrFile = @filename 'zstring buffer
ofn.nMaxFile = 255
ofn.lpstrFileTitle = NULL
ofn.nMaxFileTitle = 0
ofn.lpstrInitialDir = ?dir
ofn.lpstrTitle = ?title
If flags = 0 then ofn.Flags = OFN_EXPLORER Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
If flags = 1 then ofn.Flags = OFN_EXPLORER Or OFN_OVERWRITEPROMPT Or OFN_HIDEREADONLY
ofn.nFileOffset = 0
ofn.nFileExtension = 0
ofn.lpstrDefExt = ?defext
ofn.lCustData = 0
ofn.lpfnHook = 0
ofn.lpTemplateName = NULL
' Execute the dialog box
IF flags = 0 then retval = GetOpenFileName(ofn)
IF flags = 1 then retval = GetSaveFileName(ofn)
Return filename
End Function
-
thanks for your engaged help aurel. example with saving it seems to be not so easy, eh? ;) I will check your example next day, I am still at work and not private at home. best regards, frank
-
Just take your time ... ;)
No..it is easy but i miss some things as usual... ::)
-
here's my new attempt for an "oxy editor" and only the files are "empty" after saving. perhaps anybody can check this code example for correction.
I've used a simple winapi+scintilla example and oxide example plus include files.
$ filename "t.exe"
includepath "inc/"
'#include "../../inc/RTL32.inc"
'#include "../../inc/RTL64.inc"
'include "inc/MinWin.inc"
include "scintilla.inc"
include "OxideUtil.inc"
'include "WinUtil.inc"
DECLARE FUNCTION GetDlgItem LIB "User32.dll" ALIAS "GetDlgItem" _
(BYVAL hDlg AS DWORD, BYVAL nIDDlgItem AS LONG) AS DWORD
%Buttoni = 1001
%Buttoni2 = 1002
%scintilla = 1003
%saveFile = 1004
%execFile = 1005
%load = 1006
#lookahead ' for procedures
s=error()
'
if s then
print s
goto endprog
end if
'==================
'GLOBAL DEFINITIONS
'==================
'=========
'MAIN CODE
'=========
dim cmdline as asciiz ptr, inst as sys
&cmdline=GetCommandLine
inst=GetModuleHandle 0
'
'WINDOWS
'-------
'
WinMain inst,0,cmdline,SW_NORMAL
endprog:
'RELEASE SYSTEM RESOURCES
'---------------------
'FreeMinWinLibraries
'===========
'END OF MAIN
'===========
'--------------------------------------------------------------------
Function WinMain(sys inst, prevInst, asciiz*cmdline, sys show) as sys
'====================================================================
WndClass wc
MSG wm
sys hwnd, wwd, wht, wtx, wty, tax, myButton, hFont
wc.style = CS_HREDRAW or CS_VREDRAW
wc.lpfnWndProc = @WndProc
wc.cbClsExtra =0
wc.cbWndExtra =0
wc.hInstance =inst
wc.hIcon=LoadIcon 0, IDI_APPLICATION
wc.hCursor=LoadCursor 0,IDC_ARROW
wc.hbrBackground = GetStockObject WHITE_BRUSH
wc.lpszMenuName =null
wc.lpszClassName = strptr "Demo"
RegisterClass (@wc)
Wwd = 640 : Wht = 480
Tax = GetSystemMetrics SM_CXSCREEN
Wtx = (Tax - Wwd) /2
Tax = GetSystemMetrics SM_CYSCREEN
Wty = (Tax - Wht) /2
hwnd = CreateWindowEx 0,wc.lpszClassName,"OXYGEN BASIC",WS_OVERLAPPEDWINDOW,Wtx,Wty,Wwd,Wht,0,0,inst,0
myButton = CreateWindowEx(0, _
"Button", _
"push me!", _
%WS_CHILD OR %WS_VISIBLE OR _
%BS_PUSHBUTTON OR %BS_FLAT, _
22, 20, _
80, 24, _
hWnd, %Buttoni, _
inst, 0)
SendMessage myButton, WM_SETFONT, hFont, TRUE '1
ShowWindow hwnd,SW_SHOW
UpdateWindow hwnd
'
sys bRet
'
do while bRet := GetMessage (@wm, 0, 0, 0)
if bRet = -1 then
'show an error message
else
TranslateMessage @wm
DispatchMessage @wm
end if
wend
End Function
dim as rect crect 'for WndProc and TimerProc
'------------------------------------------------------------------
function WndProc ( sys hWnd, wMsg, wParam, lparam ) as sys callback
'==================================================================
static as sys hdc,hw,ps,sx,sy
static as String txt,cr,o2dir,f,fi,fo,dir
static as PaintStruct Paintst
dim as sys mySci,hlibsci,i,nLen,myButton ',hwnd,inst
dim as string st, buffer
static char buf[256]
'==========
select wMsg
'==========
'----------------
case WM_CREATE
'================
hlibsci = LoadLibrary "SciLexer.dll"
GetClientRect hWnd,&cRect
'hlibsci = LoadLibrary "SciLexer.dll"
'print str(hlibsci)
'---------------------------------------// buttons ---------- //
mySci = CreateWindowEx(0, _
"Scintilla", _
"", _
%WS_CHILD OR %WS_VISIBLE OR _
%BS_PUSHBUTTON OR %BS_FLAT, _
10, 60, _
360, 320, _
hWnd, %scintilla, _
inst, 0)
'st="test me"
SendMessage mySci, %SCI_SetText, 0, StrPtr(st)
SendMessage mySci, %SCI_SetMarginWidthN, 0, 20
myButton = CreateWindowEx(0, _
"Button", _
"gettext", _
%WS_CHILD OR %WS_VISIBLE OR _
%BS_PUSHBUTTON OR %BS_FLAT, _
122, 22, _
80, 24, _
hWnd, %Buttoni2, _
inst, 0)
myButton = CreateWindowEx(0, _
"Button", _
"saveFile", _
%WS_CHILD OR %WS_VISIBLE OR _
%BS_PUSHBUTTON OR %BS_FLAT, _
242, 22, _
80, 24, _
hWnd, %saveFile, _
inst, 0)
myButton = CreateWindowEx(0, _
"Button", _
"Execution", _
%WS_CHILD OR %WS_VISIBLE OR _
%BS_PUSHBUTTON OR %BS_FLAT, _
332, 22, _
80, 24, _
hWnd, %execfile, _
inst, 0)
'myButton = CreateWindowEx(0, _
' "Button", _
' "load", _
' %WS_CHILD OR %WS_VISIBLE OR _
' %BS_PUSHBUTTON OR %BS_FLAT, _
' 422, 22, _
' 80, 24, _
' hWnd, %load, _
' inst, 0)
'-------------------- //
CASE WM_COMMAND
'-------------------- //
IF wparam = %Buttoni THEN
print "hello button"
END IF
'TexTbuffer ---
'only a test for getting the buffer ------------ //
IF wparam = %Buttoni2 THEN
print "hello button2"
mySci = GetDlgItem(hWnd, %scintilla)'
IF mySci = 0 THEN EXIT FUNCTION
nLen = SendMessage(mySci, %SCI_GETTEXTLENGTH, 0, 0)
Buffer = SPACE(nLen + 1)
SendMessage mySci, %SCI_GETTEXT, BYVAL LEN(Buffer), BYVAL STRPTR(Buffer)
mbox buffer 'only for test
a=compile buffer
b=0
b=call a
print "buffer compiling by command `compile` "+b
END IF
'--------- SAVE FILE ------------------ //
'SAVE FILE
IF wparam = %saveFile THEN
print "hello saveFile"
f=fo
if ShiftKey() or f=""
f=GetFileName fo,1
end if
if f then
fo=f
fi=f
'------------ PROBLEM ZONE ------------------ ? //
s=GetText mySci 'hchw[0]
putfile fo,s
SetWindowText hWnd, "Saved "+ClipName(f)
end if
print "execution: " + f
print f
print str(mySci)
Exec o2dir+"gxo2.exe","gxo2 "+f
END IF
'error 3: file empty or not found
'--------- SAVE FILE END ------------------ //
'
'--------- EXECUTION THE FILE ------------------ //
' EXECUTE
IF wparam = %execFile THEN
print "hello execution File!"
print "error 3: file is empty after saving, why?"
if fi=""
SendMessage hwnd,WM_COMMAND,%saveFile,0
else
'problem zone --------------------- ?
s=GetText mySci '%scintilla ' hw
'problem zone --------------------- ?
if len(s) then
putfile fi,s
f=fi
string m="!"
if CtrlKey
'CREATE INDEPENDENT BINARY
if ShiftKey
t="inc/RTL64.inc" 'CTRL-SHIFT-F5
else
t="inc/RTL32.inc" 'CTRL-F5
end if
s="$filename "+qu+o2dir+"_.exe"+qu+cr+
"include "+qu+o2dir+t+qu+cr+s
f=o2dir+"_.o2bas"
'------------ HOW TO SAVE THE TeXT TO THIS FILE ? ------- //
putfile f,s
'------------ HOW TO SAVE THE TeXT TO THIS FILE ? ------- //
m=""
elseif ShiftKey
'f="-c "+f 'SHIFT-F5 CREATE DEPENDENT BINARY
s="#file "+qu+o2dir+"_.exe"+qu+cr+s
f=o2dir+"_.o2bas"
putfile f,s
m=""
end if
print "exec follows"
'Exec o2dir+"co2.exe","co2 "+m+f
'------------------------------- EXECUTE ------- //
Exec o2dir+"gxo2.exe","gxo2 "+f
'------------------------------- EXECUTE ------- //
end if
end if
END IF
'--------------------- EXECUTION FILE END ------------- //
'---------------------- followed code only for test purpose ------ //
IF wparam = %load THEN
print "hello load File!"
case %load '1008 'F8
f=GetFileName fi,0
if f then
fi=f
fo=f
s=GetFile fi
le=len s
'SendMessage hchw[0],WM_SETTEXT,le,s
SendMessage mySci,WM_SETTEXT,le,s '%scintilla
end if
SetWindowText hwnd,"Loaded " ClipName(f)
END IF
'--------------
case WM_DESTROY
'===============
PostQuitMessage 0
'------------
case WM_PAINT
'============
'--------------
case WM_KEYDOWN
'==============
'============
Select wParam
'============
Case 27 : SendMessage hwnd, WM_CLOSE, 0, 0 'ESCAPE
End Select
'--------
case else
'========
function=DefWindowProc hWnd,wMsg,wParam,lParam
end select
end function ' WndProc
1) type a code in the scintilla editor: for example
mbox "Hello oxygen friends"
go to savefile and do it.
the error file shows that the file is empty after execution.
the problem zones I have marked too in code example.
best regards, frank
X