Oxygen Basic
Programming => Problems & Solutions => Topic started by: Aurel on May 16, 2017, 10:26:50 AM
-
Hi Charles
I have this time problem with UDT
do you can test this small program?
this code is part of well known JimKlutho small basic version
written in PowerBasic and i try to translate to Oxygen
but i see that o2 have problem with this UDT.
you may see from screenshot...
if you want i can post whole translation
part of code:
test TYPE
TYPE FOR_STACK_TYPE
vari AS LONG
Target AS LONG
Location AS LONG
End TYPE
Dim Ftos AS LONG
Dim Gtos AS LONG
Dim FStack[256] AS FOR_STACK_TYPE
Declare SUB fpush(i as FOR_STACK_TYPE)
Declare SUB fPop(i AS FOR_STACK_TYPE)
SUB fPush(i AS FOR_STACK_TYPE)
If ftos > 256 THEN
print "SB_TOO_MNY_FOR"
Else
FStack[ftos] = i
ftos++
End If
END SUB
SUB fPop(i AS FOR_STACK_TYPE)
ftos = ftos - 1
If ftos < 0 THEN
print "SB_NEXT_WO_FOR"
Else
i = FStack[ftos]
End If
END SUB
.
-
Hi Aurel,
UDT variables can be copied, as a whole: copy @dest, @src, bytes
TYPE FOR_STACK_TYPE
vari AS LONG
Target AS LONG
Location AS LONG
End TYPE
Dim Ftos AS LONG
Dim Gtos AS LONG
Dim FStack[256] AS FOR_STACK_TYPE
Declare SUB fpush(i as FOR_STACK_TYPE)
Declare SUB fPop(i AS FOR_STACK_TYPE)
SUB fPush(i AS FOR_STACK_TYPE)
If ftos > 256 THEN
print "SB_TOO_MNY_FOR"
Else
copy @FStack[ftos], @i, sizeof(FOR_STACK_TYPE)
ftos++
End If
END SUB
SUB fPop(i AS FOR_STACK_TYPE)
ftos = ftos - 1
If ftos < 0 THEN
print "SB_NEXT_WO_FOR"
Else
copy @i, @FStack[ftos], sizeof(FOR_STACK_TYPE)
End If
END SUB
-
Hi Charles
and thanks for reply..
so if i understand properly
currently ...i can not use it like in powerBasic?
your presented way is cool and i don't know that ...
it looks that is only when i try to use it with array index,right?
also is there a way to use it with typedef structure ?
thnx!
-
Copy should work with any variables, indexed or otherwise. It is primitive but very flexible.
But I have now added some code to o2 so it will be possible to assign a UDT variable directly, with the next release.
Yes, you can create typedef struct. It requires a C-style block on the outside:
typedef struct _FOR_STACK_TYPE {
vari AS LONG
Target AS LONG
Location AS LONG
} FOR_STACK_TYPE
-
Hi Charles
Personally when i can, i try to avoid UDT or similar stuff but in some
cases are only or one of options.
But I have now added some code to o2 so it will be possible to assign a UDT variable directly, with the next release.
That would be nice :)
Yes typedef struct work !
:D