Hello.
I was using oxygen help and noticed some pages are missing. In particular I did not find:
CALL, JMP, RET, #RETURN, YVAL.
Is there any information on these functions?
Thank you.
It looks to me like assembler functions
i never use them.
I think so too. If Charles told us their use we could add them to the help.
Hello Charles
Can you guard us on this issue?
Thanxx a lot
Hi,
I am making this change to the help.
What do you think?
Cheers
13-01-2022 new version with new additions. I started writing on the CONSOLE.
25-01-2022 new version with best index.
02-02-2022 improvements on content and visuals.
first
Merry Christmas
I am not sure how this Help really can Help
if user don't know how things work in OxygenBasic..
I am user long time (almost from beginining) but i still learn some
things testing old programs or looking into examples in this case i look into old
Peter Wirbelauer sw.inc app called deep
and yes ..for example JMP is similar like GOTO ( means JUMP ) ..loook into code :
'example deep - using sw.dll by peter wirbelauer version A41
include "sw.inc"
window 800,600,1
setFps (16)
'test jmp / comment| uncomment next line
JMP the_end
string salt = "INTO THE DEEP"
single a,cx,cy,i,w,h,y
sys tcolor
w=800/2 : h=600/2
p = len(salt)
while key(27)=0
cls rgb(0,0,0)
for i=1,360
cx = w+sin(i-a)*i
cy = h+cos(i-a)*i
tcolor= rgb( i-105, i-105, 0)
'! FillCircle Lib "sw.dll" (sys xpos,ypos,r1,color) as sys
fillcircle cx-20,cy+70,2*a ,tcolor
cx = w+sin(i+a)*i
cy = h+cos(i+a)*i
'color i-105, 0, i-105
tcolor = rgb(i-105, 0, i-105)
fillcircle cx-20,cy+70,3*a,tcolor
cx = w+sin(i-a)*i
cy = h+cos(i-a)*i
tcolor = rgb(i-105, i, i-105)
fillcircle cx-20,cy+70,4*a, tcolor
cx = w+sin(i+a)*i
cy = h+cos(i+a)*i
tcolor = rgb(i, i-105, i-200)
fillcircle cx-20,cy+70,2*a, tcolor
a = a + 0.1
if a>=8 then a = -a
next
for s=1 to p
'color 255,255,255
text 900,200+s*20,20,mid(salt,s,1)
next
sync()
wend
'winEnd
'jump to labele here:
the_end:
print "test JMP ...THE END"
so program simply jump over code to label the_end
the above program looks (see attachment)
according to help
do you know what this means ?
while key(27)=0
that means while loop running until key ESC is not pressed
simple ..? or is not ?
this is just one really simple question..right?
few years back i was tried to write some sort of help but that is a huge work
it is the best to learn from examples..test it ..modify it .
i know that would be great to have one big help file but oxygen basic
examples use different libs to make programs ..there is not standard GUI wrapper or gfx layer for
programs there are sdl,mine awinh,peter window,sw Charles coreWin ..etc etc..
Aurel, I agree.
Here is the importance of the forum. Through the things we write and ask and answer we help ourselves to understand.
It is also interesting the things you wrote about the various "inc".
However I saw that sw.inc is in project C and it is for scriptbasic ... and the sw.dll is not there ...
I just checked C projects folder
and i am surprised why is this sw.inc there
but what I see ..it is not original sw.inc by Peter Wirbelauer
and why would be in scriptbasic folder .
And also i think that any connection with scriptBasic should be removed from
OxygenBasic files , simply because there is no any benefit using this files .
The similar opinion i have about Thinbasic files, o2 should be more for oriented to himself.
if you wish i can post sw.inc and sw.dll i have on my computer ?
yes thanks,
I'd like to try the program you posted.
OK
code you have above
in attachment are sw.inc and sw.dll
Thanks Aurel.
Unfortunately I am unable to run the program.
He opens the window but says that the program is not responding and shows nothing.
I tried to compile it, but when I start the compiled program it doesn't find the dll. What directory should I put it in when I want to use the compiled program?
I tried JMP ... as you said it works the same way as goto ...
Hello
must be all in one folder
deep.o2bas
sw.inc
sw.dll
oxygen.dll
program is JIT compiled in memory so require oxygen.dll
that is a main rule
Hi Aurel,
thanks for the tips.
However, unfortunately I was unable to run the program. If I compile it in 64-bit it always looks for the sw.dll, if I compile it in 32 the program "does not respond", if I simply do F5 the same program "does not respond" ... the pc i use has the win10 64bit
I also tried on another 32bit laptop with win10 and even there the program "does not respond" ...
Where am I wrong?
On the other hand, I managed to adapt this other program (PONG) quite easily.
This runs quietly ...
'ScriptBasic PONG by Peter Wirbelauer
'adapted to O2 by NP
'INCLUDE "sbsw.inc"
INCLUDE "sw.inc"
Window 320, 240, 1
SetCaption "OxygenBasic Pong"
SetFPS 60
sys x = 50, y = 50, x2 = 130, y2 = 150, pspeed = 4, xadj = 2, yadj = 2
sys delay = 1, score = 0
sys haha = loadwav("wav/haha.wav"), pong = loadwav("wav/pong.wav")
WHILE Key(27) = 0
Cls RGB(200, 200, 247)
FillCircle x, y, 8, RGB(0, 0, 255)
FillBox x2, y2, 30, 4, RGB(255, 255, 255)
'Box 20, 20, 280, 160, 4, RGB(255, 255, 0)
Box 20, 20, 280, 160, RGB(255, 255, 0)
Text 10, 0, "SCORE:" & score, RGB(255, 0, 0)
IF y <= 20 THEN
yadj = 1
PlayWav pong
END IF
IF y >= 180 THEN
yadj = -1
PlayWav pong
END IF
IF x >= 290 THEN
xadj = -1
PlayWav pong
END IF
IF x <= 20 THEN
xadj = 1
PlayWav pong
END IF
IF Key(37) AND x2 > 18 THEN x2 = x2 - pspeed
IF Key(39) AND x2 < 270 THEN x2 = x2 + pspeed
x += xadj
y += yadj
IF y > y2 - 7 AND y2 < y2 + 2 AND x < x2 + 30 AND x > x2 THEN
yadj = -1
score += 1
END IF
IF y > y2 + 10 THEN
Text 100, 200, "GAME OVER!", RGB(0, 160, 55)
Playwav haha
Waitkey
score = 0
x = 50
y = 50
x2 = 130
y2 = 150
END IF
Sync
WEND
CloseWindow
... however this dll is really nice in its simplicity and versatility ... :)
I am really not sure why not work for you
for me work because i compiled it with older A41 version of compiler
i don't tried with new-er or latest
I see that you use OxIde but should be the same ,...
hi nicola
this one i tested on 0.28 selfcompiled
there are few changes in strict definition of variable and in while key(27) event loop.
check code
'example deep - using sw.dll by peter wirbelauer version A41
include "sw.inc"
window 800,600,1
setFps (16)
'test jmp / comment| uncomment next line
'JMP the_end
string salt = "INTO THE DEEP"
single a,cx,cy,i,w,h,y
sys tcolor,s
w=800/2 : h=600/2
int p = len(salt)
'int KeyHit = key(0)
'int Escape_Key = 27
While key(27)=0
cls rgb(0,0,0)
for i = 1 to 360
cx = w+sin(i-a)*i
cy = h+cos(i-a)*i
tcolor= rgb( i-105, i-105, 0)
'! FillCircle Lib "sw.dll" (sys xpos,ypos,r1,color) as sys
fillcircle cx-20,cy+70,2*a ,tcolor
cx = w+sin(i+a)*i
cy = h+cos(i+a)*i
'color i-105, 0, i-105
tcolor = rgb(i-105, 0, i-105)
fillcircle cx-20,cy+70,3*a,tcolor
cx = w+sin(i-a)*i
cy = h+cos(i-a)*i
tcolor = rgb(i-105, i, i-105)
fillcircle cx-20,cy+70,4*a, tcolor
cx = w+sin(i+a)*i
cy = h+cos(i+a)*i
tcolor = rgb(i, i-105, i-200)
fillcircle cx-20,cy+70,2*a, tcolor
a = a + 0.001
if a>=8 then a = -a
next i
for s=1 to p
tcolor = rgb(225,225,155)
'! Text Lib "sw.dll" (sys xpos,ypos,string text,sys color) as sys
Text 400, 200+s*20, mid(salt,s,1), tcolor
next s
sync()
wend
'winEnd
'jump to labele here:
'the_end:
'print "test JMP ...THE END"
..also
i just tried to compile OxIDE from package and found that some things not work
configuration file is not loaded ..why ..i don't know
compile ..F5 not work in my case too
i set code
% SCLEX_OBASIC = 75
'
def sm SendMessage hsci,
'
'3 cpp
'8 vb ***
'40 lout
'51 powerbasic
'75 freebasic
sm SCI_SETLEXER, SCLEX_OBASIC ,0 'Oxygenbasic lexer
sclex was with number 200 ... :o
that is strange because i have old version i think running ,it looks that code
for oxIde is not updated ..i am not sure ..
Aurel,
I checked the listing and found the catches. I didn't think I had to check the syntax ...
Anyway it's ok. works without problems.
But remains the problem of the 64bit compilation that still does not find the DLL although I have put it both where it is oxide, and in the directory of DEEP.o2bas ... (Charles could help me understand this thing)
An interesting and beautiful thing, I add a value + 0.0001 (a = a + 0.0001) and the resulting effect is really beautiful. :-*
well as far as i know OxIde is 32bit program.
Ok i will try compile 64 bit app on win7_64 bit to see how Aurel Edit work
then i can tell you...
Thanks Aurel.
Speaking of OXIDE, I don't hide the idea that I'd like it to have more accurate bug reporting.
Often it seems like everything should be fine and instead there are errors that go unnoticed ... and I don't have the ability to implement such a thing. :'(
Cheers
Hi,
What is the use of the SKIP command / function?
skip ???
never see this thing
but if SKIP is command or function proably then skip over something .
i am wondering where you find this thing ?
wait a moment
i just download help chm file you posted
who made this one ...i have never saw it before ???
edit;;;
QuoteThis Help was compiled by nico18n (Nicola Piano) - agosto 2021
so i see you made it ..great ..
may i ask you in what you made it ...
i am using old waHelp but i have some freakin problems with this program( i think that have bugs )
There is a lot of material on x86 Assembler on the web. You can lookup X86 instruction set
But to see some live asm in o2 there are som base functions in inc/RTL32.inc and inc/RTL64.inc
LCASE example:
'------------
lcases: '2328
'============
'
push esi
mov esi,[esp+8]
mov edi,0
cmp esi,0 'null string test
jz lwrx1
mov edi,[esi-4]
lwrx1:
push edx
push edi
push 0
call SysAllocStringByteLen
pop edx
mov ecx,edi
mov edi,eax
push eax
and edx,0xff 'supporting wide code
lwrr:
sub ecx,edx
jl lwrx
mov al,[esi]
cmp al,65
jl lwrn
cmp al,90
jg lwrn
add al,32
lwrn:
mov [edi],al
add esi,edx
add edi,edx
jmp lwrr
lwrx:
pop eax
pop esi
ret 4
Thanks Nicola for your help file. I will take a look ASAP
Not at all Charles. :)
Thanks to you for the precious o2b.
If you see something to fix write it to me ...
Where can I find examples with "==", "#return", "yval"?
Maybe when you can give us other ideas to see.
Quote from: Zlatko Vid on December 25, 2021, 05:18:43 PM
And also i think that any connection with scriptBasic should be removed from
OxygenBasic files , simply because there is no any benefit using this files .
The similar opinion i have about Thinbasic files, o2 should be more for oriented to himself.
I agree, additional things about other projects only get in the way of learning with O2
I also believe it is right to focus on O2B
OK. I can consign ProjectsC to a legacy folder on GitHib.
PS:
yval looks like a typo
#return is obsolete
jmp call ret are x86 assembly code instructions, and commonly used for other processors.
Charles Pegge, I think that this way you could add content to VBA, there are thousands of users who use it to automate their projects in MS office package, for easy use for laymen until Corel bought and implemented it.
for most things vba is self sufficient, but lacks speed in some cases, and mostly lacks a way to mask your code.
maybe it was a way to attract developers to O2 interested in developing for a specific market
Quote
And also i think that any connection with scriptBasic should be removed from
OxygenBasic files , simply because there is no any benefit using this files .
The similar opinion i have about Thinbasic files, o2 should be more for oriented to himself.
by Zlatko
I second this move
This is true, it is pointless to keep a useless script basic
Also I second Eduardo's move to help VBA programmers to migrate to O2
Yes, being able to work on office documents with a separate VBA program is a great idea.
In fact I had asked how one could read / write on an xls / xlsx document.
Hi Charles,
I have updated the o2 help file.
25-01-2022 new update.
http://www.jose.it-berater.org/smfforum/index.php?topic=5772.msg24462#msg24462
Hi.
Please I would need to have accurate information on the commands / functions implemented with "CONSOLEG.INC"
I tried some examples, they are beautiful.
I'd like to add this help info ...
Charles, please ... :)
Cheers
Dear Charles,
i was updating the help and i noticed that the examples related to
STRUCTUREOF
ENCODINGOF
RECORDOF
don't work.
Error: not defined
Word: r
line: 2
type vt long v,double d
dim as vt v : r=recordof v
Hi Nicola,
without #autodim enabled, r needs to be: dim as string r.
this is a current list of all the attributes from oxsc\lang.inc
sizeof 11 1 4
offsetof 11 2 4
countof 11 3 4
spanof 11 3 4
bytesof 11 4 4
typeof 11 5 193
structureof 11 6 193
encodingof 11 6 193
prototypeof 11 7 193
typecodeof 11 8 4
recordof 11 9 4
widthof 11 10 4
ptrlevelof 11 11 4
metatypeof 11 12 193
strptr 11 21 8
lpartof 11 31 0
rpartof 11 32 0
vtypeof 11 33 0
dim string r
type vt long v,double d
dim as vt v
r=recordof v
print r
now it looks like it's ok.
thanks charles
result is
983
16
8892
0
0
983
0
0
v
[ebx+8892]
vt
In the early days, autodim was the default. This makes short demo code easier but it's a serious hazard for any project of significant scale.
ok, then i will correct the example that is on the help.
Ciao
Hi Nicola,
If you still updating this help file, maybe you can adjust Asc()...
//asc() can be used not only as a function but as a statement also.
string sString = "12345"
asc(sString, 3) = 120 // give "12x45" (120 is ascii for "x")
Many thanks for your work, it is really appreciated...
Also, inner is missing...
Regards
Hi Pierre,
thanks for the info. I put it in the help. Sorry for the delay, but unfortunately things do not always go well.
If you have any other suggestions thank you.
Cheers
Hi Nicola,
Easy does it, no rush on my side.
I appreciate what you did, it's a nice gift.
Thanks again...
Hi,
I posted an update on the help file.
I have included notes on implementations related to the management of Arrays written by Charles Pegge from version P14.4.
Cheers
Thanks!
thanks from me to !!!
Hi Charles,
I can't find information on the following words:
PURE, OBJECTS, OOP, INHERITS.
Could you give them to me to put them in the HELP file.
Cheers
Hi Nicola,
I'll update my records in inf/o2keyw.txt and I need to rewrite classes.o2bas.
[group topics, non-keyword:
OBJECTS same as classes
OOP sames as classes
secondary keywords:
INHERITS no longer used
PURE same as virtual (used in C++)
'
Thanks Charles,
I put these notes in the HELP file.
Hi Nicola,
For your next help chm release.
endsel is no more supported an can be removed.
endselect and end select remain as is.
Hi Pierre,
I edited the Help file.
Thanks for the info.
Cheers
Hi,
Due to the fact that it is no longer possible for me to edit the post, I had to change the site where to post the chm help file. You can find it at the bottom of my posts.
Cheers
@Charles.
The SKIP command is not yet implemented. In the file "o2keyw.txt" it is present, but it seems that it has not been implemented. The demo program also does not exist.
News about it?
Cheers
key: "scope 52"
key: "skip 52"
key: "o2 52"
key: "( 52"
groupref: blocks
group: blocks
incfile1: demos\basics\macros.o2bas
related: procedures, macros
updated: 24/02/2017
Also, is there any information about "NOPROTO"?
Hi Nicola,
The skip block is now obsolete, I'll remove it from the manual / o2keyw.txt
key: "scope 52"
key: "inner 52"
key: "module 52"
key: "namespace 52"
key: "o2 52"
key: "( 52"
groupref: blocks
group: blocks
related: procedures, macros
updated: 30/04/2023
Hi Charles.
ok for SKIP, I delete it from the HELP.
And what about NOPROTO?
Hi.
I updated the Help file on GitHub :)
Quote from: Nicola_Piano on April 20, 2023, 12:03:16 PMHi,
Due to the fact that it is no longer possible for me to edit the post, I had to change the site where to post the chm help file. You can find it at the bottom of my posts.
Cheers
And now ... can you do it?
noproto was replaced by nosig.
I have removed it from this group:
key: "function 52"
key: "sub 52"
key: "method 52"
key: "gosub 52"
groupref: procedures
group: procedural blocks
incfile1: demos\basics\procedures.o2bas
related: macro
updated: 30/04/2023
.
This is a group of secondary keywords associated with procedures:
key: "declare 54"
key: "! 54"
key: "function 53"
key: "sub 53"
key: "ptr 53"
key: "alias 53"
key: "lib 53"
key: "stdcall 53"
key: "cdecl 53"
key: "pascal 53"
key: "ms64 53"
key: "as 53"
key: "export 53"
key: "extern 53"
key: "external 53"
key: "callback 53"
key: "link 53"
key: "at 53"
key: "= 53"
key: "label 53"
key: "nosig 53"
groupref: declarations
group: declaring procedures
keywords:
<b>Left-side keywords:</b>
¬declare¬
¬!¬
same as 'declare'
¬function¬
optional
¬sub¬
optional
¬ptr¬
function pointer
¬*¬
function pointer
¬alias¬
exact name of the function in the dll (dynamic link library)
optional if the function name is an exact match
¬lib¬
name of dll
¬stdcall¬
calling convention (32bit default)
¬cdecl¬
C calling convention (32bit)
¬pascal¬
pascal calling convention (32bit)
¬ms64¬
MS calling convention (64bit default)
<b>Right-side keywords:</b>
¬as¬
type of return value
¬link¬
store function location to specified variable.
¬at¬
specify pointer to the function location
¬=¬
same as 'at'
incfile1:
related: procedures, types
updated: 18/01/2021
.
It needs further work
Hi Theo, I tried. You can edit it and attach the new file.
You were good at fixing everything. ;)
@Charles Pegge Charles, can you tell me something more about "NOSIG" and could you post some examples of use?
Thank you
Hi Nicola,
'nosig' allows a procedure to accept any parameters. This can be useful for providing a kind of polymorphism. Supposing you have a function that processes floats, but the variables you are using are UDT types, containing floats:
type VectorXYZ
float x,y,z
end type
type matrix4x4
float col1[4]
float col2[4]
float col3[4]
float col4[4]
end type
function f(float*v, int n) nosig
...
print "f ok"
end function
float x[1000]
f(@x[31],4)
vectorXYZ v[100]
f(@v[10],3)
matrix4x4 m[100]
f(@m[10],16)
Hi Charles,
Thanks for the explanation.
I entered in the help this keyword and the related example.
Hi.
I've updated the Oxygen_Help.chm file.
I have added the functions related to the SySUtil.inc UDF
Hello
Thanks Nicola.
Hi.
I've updated the help file. I've added more .inc and fixed some things. The look and feel has also changed a bit.
Cheers