Oxygen Basic

Programming => Bugs & Feature Requests => Topic started by: Peter on December 01, 2012, 06:55:33 AM

Title: New Dll Error
Post by: Peter on December 01, 2012, 06:55:33 AM
Deleted
Title: Re: New Dll Error
Post by: Charles Pegge on December 01, 2012, 11:14:29 AM

Ugh! I am a hostage to fortune

Is this better Peter?



X
Title: Re: New Dll Error
Post by: JRS on December 01, 2012, 11:33:03 AM
Quote
Ugh! I am a hostage to fortune

@Charles - Remember O2 is open source. Rephrased: I am a hostage to perfection
Title: Re: New Dll Error
Post by: Charles Pegge on December 01, 2012, 11:45:51 AM
Weeds in my garden:

(http://www.bbc.co.uk/gardening/images/gardening_with_children/300x193_weeds.jpg)
Title: Re: New Dll Error
Post by: JRS on December 01, 2012, 11:58:35 AM
Quote
Weeds in my garden

The people of Washington State just legalized pot. (use and sale) Puts a whole new spin on weeds in the garden.  :o
Title: Re: New Dll Error
Post by: Charles Pegge on December 01, 2012, 07:16:37 PM
That is an amazing turnaround! Until recently, You might have expected 10 years of incarceration for such an evil crime!
Title: Re: New Dll Error
Post by: JRS on December 02, 2012, 07:14:44 AM
Colorado has also legalized pot in the last elections. So far the federal government (still a crime) hasn't made any moves to override the states authority. Interesting times.

more ... (http://seattletimes.com/html/localnews/2019812886_apuslegalizingmarijuanahowithappened.html)
Title: Re: New Dll Error
Post by: jumpandrun on December 28, 2012, 10:25:43 AM
A few things that appear to me like bugs:

this prints zero:

Code: [Select]
function myf() int
    return 1
end function
print myf()

and this prints no function result:

Code: [Select]
function myf() int
    return 1
end function
print myf() "zzz..."

this crashes:

Code: [Select]
function myf() int
    int i
    return 1
end function
print myf() "zzz..."

and some more:
these two fragments to my limited understanding should do exactly the same, but they do not (not always). #1 OB, and #2 FreeBasic, with FB doing correct. [sorry for the formatting - the board destroys the original formatting..]

Code: [Select]
#case sensitive
#indexbase 0
type Node
int nextnode[25]
int id
end type

string keys[2] <= {"", "CONTINUE", "FOR"}
Node tree[999]

sub Populate
int c, i, node, nodes = 1
byte* p

for c = 1 to 2
@p = strptr keys[c]
        node = 0
while p != 0
i = p - 65
if tree[node].nextnode[i] == 0 then
tree[node].nextnode[i] = nodes
                nodes++
end if
node = tree[node].nextnode[i]
@p++
wend
tree[node].id = c
next
end sub

function Scan(string s) as int
int i, node = 0
byte* p
   
    @p = strptr s
    while p != 0
i = p - 65
        if tree[node].nextnode[i] == 0 then exit while
node = tree[node].nextnode[i]
@p++
wend
if tree[node].id != 0 and p == 0 then return tree[node].id
    return 0
end function

'''main'''
Populate
print Scan("FR")
Code: [Select]

type TNode
as integer nextnode(25)
as integer id
end type

static shared as zstring * 12 keys(2) => {"", "CONTINUE", "FOR"}
dim shared as TNode tree(999)

sub Populate
dim as integer c, i, node, nodes = 1
dim as zstring ptr p

for c = 1 to 2
p = @keys(c)
        node = 0
while *p <> 0
i = *p - 65
if tree(node).nextnode(i) = 0 then
tree(node).nextnode(i) = nodes
                nodes += 1
end if
node = tree(node).nextnode(i)
p += 1
wend
tree(node).id = c
next
end sub

function Scan(s as zstring ptr) as integer
dim as integer i, node = 0
dim as zstring ptr p
    
    p = s
    while *p <> 0
i = *p - 65
        if tree(node).nextnode(i) = 0 then exit while
node = tree(node).nextnode(i)
p += 1
wend
if tree(node).id <> 0 and *p = 0 then return tree(node).id
    return 0
end function

'''main'''
Populate
print Scan("FR")
sleep
Title: Re: New Dll Error
Post by: Charles Pegge on December 28, 2012, 10:51:54 AM
Hi Jumpandrun,

function myf() as int

Code: [Select]
function myf() as int
    return 1
end function
print myf()

Title: Re: New Dll Error
Post by: jumpandrun on December 28, 2012, 10:57:20 AM
ok, but OB does not complain about the missing "as"..

and what is the difference in the two codes OB/FB?
Title: Re: New Dll Error
Post by: Charles Pegge on December 28, 2012, 11:06:10 AM
Yes, it should be possible to make the return typer as optional without disrupting other keys. I will investigate.

PS:

string keys[2]={"CONTINUE", "FOR"}
Title: Re: New Dll Error
Post by: jumpandrun on December 28, 2012, 11:19:09 AM
string keys[2]={"CONTINUE", "FOR"}
unfortunately does not change the outcome..

so, is there no automatic counting of elements by the compiler?

Title: Re: New Dll Error
Post by: Charles Pegge on December 28, 2012, 02:22:00 PM
I've checked prototype parsing and we definitely need the as key to avoid other syntax conflicts.

Array elements are not automatically counted at present.

But the same syntax can be used to fill elements of compound types and arrays of compound types. Unlike C, multiassignments can be done any time and from any offset.

example:

Code: [Select]
type location string name, single x,y,z

location loclist[8]

loclist[2]<=
"A", 1,1,1,
"B", 1,1,2,
"C", 2,1,3,
"D", 2,1,4

print loclist[3].name + loclist[3].z ' B2





Title: Re: New Dll Error
Post by: Aurel on March 18, 2013, 07:03:37 AM
Charles ...
I download latest oxygen.dll and replace with old wihich i currently use
BUT now compiler complain that there is error:

cc = Tally(temp$,",")

he say that error is with comma inside quote  ???
Is this bug ?

/ So i must use again old oxygen.dll (409kB) - which work with oxyMapy / >:(
Title: Re: New Dll Error
Post by: Charles Pegge on March 26, 2013, 02:13:51 AM
Should be okay, Aurel. Can it locate Tally?

I checked a version of tally with #lookahead

#lookahead

string temp$=" ,,, , , , ,"

cc = Tally(temp$,",")
print cc '7

end

function tally(string s,k) as sys
sys a,c
a=1
do
  a=instr a,s,k
  if a
    c++
    a+=len k
  else
    exit do
  end if
end do
return c
end function
Title: Re: New Dll Error
Post by: Aurel on March 26, 2013, 08:05:24 AM
Aha...Ok Charles  ;)
I will check this now ...
Title: Re: New Dll Error
Post by: Aurel on April 16, 2013, 08:01:54 AM
Charles...
latest oxygen dll not work properly .
look i have this in include file:
Code: [Select]
'MsgBox--------------------------------
Function MsgBox (lpText AS STRING,lpCaption AS STRING) as INT
RETURN MessageBox 0,lpText,lpCaption,0
End Function
It is simple MsgBox function, i also have try with byref and with byval
and not work ...
i have receive strange error that wndproc not found  ???
It is strange that work inside subroutine in program ???

prog:
'test
include "awinh.inc"
MsgBox "Message...","Title"

And more strange thing sometimes not compile then gxo2 just stay hangin in memory  :o
what kind of errors is all about ???

and also again Tally( temp, delim) not work...
This time i dont have any lookahead in awinh.inc

I really don't know what to do.. :-\
with every new oxygen.dll more and more problems , so i again must use older dll (409kB).

Charles  please,do you can concentrate on bug fixed release ...then adding new asm or what ever else
function ,so please make bug fixed version that most of us can use our older programs with few
modifications..etc and not with constant errors,crushes...etc..
thanks ..Aurel  ;)
Title: Re: New Dll Error
Post by: Charles Pegge on April 16, 2013, 09:28:37 AM
Hi Aurel, I test new DLLs on your projectsB/Scintilla/AsciEdit, among many other progs, but yes this is very odd. If you add any statement after masbox, like a=4, then it works fine

My test code:

'u=loadlibrary "user32.dll"
'bind u
'{
' MessageBox MessageBoxA
'}

Library "user32.dll"
! MessageBox alias "MessageBoxA"
Library ""


Function MsgBox (lpText AS STRING,lpCaption AS STRING) as INT
If lpCaption = "" then lpCaption="<MsgBox>"
Return MessageBox 0,lpText,lpCaption,0
End Function

MsgBox "hello","title"

a=4
'print "ok"
'MessageBox 0,"AA","BB",0


PS: it appears to be caused by the last param on the last line of a prog  being a quoted string. If you add enclosing brackets or use a variable, its okay. This looks an old bug and you discovered the evil combination. So Thank you for exposing it :)
Title: Re: New Dll Error
Post by: Aurel on April 16, 2013, 10:45:33 AM
Thanks Charles.. ;)
Maybe sometimes my posting here looks like trolling or something like that.
But i am very impressed with your work... :)
I always watch very close what was heapend in any of my program.
Of course anyone can make mistake or miss something.
keep up and i hope that all things will work properly... ;)
Title: Re: New Dll Error
Post by: Charles Pegge on April 16, 2013, 01:06:15 PM
Library is a directive rather than a control block. Personally, I prefer extern .. end extern.

extern may include lib, calling-convention, export and/or virtual

extern lib "kernel32.dll" stdcall
!..
end extern

extern stdcall export

myfun(...)
...
end function

end extern
Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 01:37:25 AM
I agree with Peter that Declare Function or !
! MessageBoxA Lib "user32.dll" (sys hwnd, string lpText, lpCaption, sys wType) As Long
is far easier and better .
Charles when we can espect bug fixing with this weird string litteral problem?
Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 07:10:12 AM
Charles
I don't know why again Tally(temp,",") is not work.
so i try :
Tally(temp,chr(44))
and agin not work ,how is this posible ,is this some really weird bug or something starange that
compiler can see chr()... ???
Title: Re: New Dll Error
Post by: Charles Pegge on April 17, 2013, 09:50:08 AM
I dont have an original but here is a byte-based tally. It skips quoted words, but is also able to count individual quote marks.



function tally(string s,k) as sys
'
if s="" or k="" then exit function
byte   sb at (strptr s)
byte   kb at (strptr k)
sys    lk=len k
sys    ls=len(s)-lk+1
sys    i=1
sys    j
indexbase 1
'
do
  if sb=34 or sb=39 or sb=96 ' " `
    if sb<>kb
      byte cq=sb
      do 'SKIP QUOTE
        @sb++
        i++
        if i>ls
          jmp fwd done 'LIMIT
        elseif sb=cq
          exit do
        end if
      end do
    end if
  end if  
  if sb=kb
    j=2
    do
      if j>lk
        exit do
      end if
      if sb(j)<>kb(j)
        j=0 : exit do 'NO MATCH
      end if
      j++
    end do
    if j>lk
      function++ 'TALLY
      i+=lk
      @sb+=lk
      continue do
    end if
  elseif i>ls
    exit do 'LIMIT
  end if
  @sb++
  i++ 'NEXT BYTE
end do
done:
end function


print tally("one,two,three,,`,q,`","`")        '2
print tally("one,two,three,,`,q,`","`,q,`")    '1
print tally("one,two,three,one,`,q,`","one")   '2
print tally("one,two,three,one,`,q,`",chr(44)) '4


Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 10:06:42 AM
Hi Charles..
here is Tally which i use because i need to store commas positions in array:
Code: [Select]
FUNCTION Tally(STRING Main$,STRING Match$) As INT
'print "TALLY:" + main$
    DIM i,j,q,mlen,matchlen As INT
DIM t$ As STRING
    mlen = LEN(Main$)
    matchlen = LEN(Match$)
    i = 1
    j = 0
    q = 0
    IF (mlen = 0) OR (matchlen = 0)
        RETURN j
    END IF
   
    do

t$ = MID(Main$,i,matchlen)
IF t$ = Chr(34) THEN q = q + 1
IF q=2 THEN q = 0
        IF t$ = Match$ AND q=0
           j++
'mem del$ position
dpos[j]=i
  'j = j + 1
         
        END IF

           i++
        IF i > mlen then
           exit do
        END IF
    end do
'tbreak:
    RETURN j
END FUNCTION

So o2 complain like this:
That strings inside not defined... ???
Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 10:11:29 AM
here is shot of this wird error ,o2 see function with main as string even is not defined in tally function ???

X
Title: Re: New Dll Error
Post by: Charles Pegge on April 17, 2013, 10:45:02 AM
We seem to have acquired  sensitivity to "$" suffixes attached to parameter names, when using C style prototypes. If you remove the '$' from both parameter names, it should work. I only support it as a legacy, but this should be quite easy to fix.
Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 01:21:06 PM
So Charles
i must remove from every string name $ ...this is really weird.
I don't see that any other compiler complain about using $ or any other character on the end of varible
name...
So do i must remove all $ from string variable names or not  ???
Title: Re: New Dll Error
Post by: Aurel on April 17, 2013, 01:29:02 PM
Aha ...
I forget to look into Oxygen update topic... ::)
Thanks Charles finally work OK ,like in old oxygen version ;)
just one small point maybe someone else find this unusual...
when we have:

FUNCTION Tally(byval Main$ as string,byval Match$ as string) As int
this cose error in reading function BUT
when we use this:
FUNCTION Tally(Main$ as string,Match$ as string) As int
then work fine...
 ;)