LB Booster
General >> Announcements >> LB 4.5 is underwhelming
http://lbb.conforums.com/index.cgi?board=announcements&action=display&num=1438112665

LB 4.5 is underwhelming
Post by Alincon on Jul 28th, 2015, 7:44pm

I downloaded and installed the newly announced LB 4.5
I never needed more memory
I don't use these:
INP and OUT on 64-bit Windows
OPEN "COMn:" - Remove restrictions on baud rates
INPUTCSV - New INPUT statement for reading CSV files with quotation marks
HTTPGET$() - Get the contents of a web page

As noted earlier these are easily made functions:
AFTERLAST$() and AFTER$() - Return the part of a string after matching a substring
REPLSTR$() - Replace one string pattern with another
REMCHAR$() - Remove a string pattern from another string
UPTO$() - Match a p

I would have preferred Carl had worked on version 5, instead.

r.m.
Re: LB 4.5 is underwhelming
Post by Richard Russell on Jul 29th, 2015, 09:13am

on Jul 28th, 2015, 7:44pm, Alincon wrote:
I would have preferred Carl had worked on version 5

I simply don't understand Carl's priorities. Whenever I release a new version of LBB or BB4W, at the top of my list, by a large margin, is fixing bugs. I give only a very low priority to adding built-in functionality which replicates what can easily be achieved with a user-defined function.

LB 4.5.0 seems to be the opposite. There are several new keywords which simply reproduce what user code can straightforwardly do (and which break compatibility with any existing program that uses one of them as an array name). Yet of the well-known and documented bugs I have tested so far not a single one has been fixed!

Richard.
Re: LB 4.5 is underwhelming
Post by tsh73 on Jul 29th, 2015, 11:05am

>>so far not a single one has been fixed!

why.
It is said that "path limit" in open dialog window has been fixed.
And bug with Paste shortcut (Ctrl V) where text is pasted in another (not active) control is fixed too (actually I requested that fix).

Re: LB 4.5 is underwhelming
Post by Richard Russell on Jul 29th, 2015, 12:08pm

on Jul 29th, 2015, 11:05am, tsh73 wrote:
It is said that "path limit" in open dialog window has been fixed.
And bug with Paste shortcut (Ctrl V) where text is pasted in another (not active) control is fixed too (actually I requested that fix).

I said "of the ones I have tested" and I didn't try those (I wasn't even aware of the second one).

But my point remains: even something as serious as the TIMER bug - which really impacts on programs, especially because of label scope issues - is unchanged. This program locks up LB 4.5.0 (try moving the IDE window):

Code:
    timer 100, tick
    wait

sub tick
    print "Tick"
end sub 

Richard.
Re: LB 4.5 is underwhelming
Post by mclout99 on Jul 29th, 2015, 3:56pm

Does the release candidate pose any compatibility issues for LBB and if so will you update LBB to fix that? As alway Thanks Richard.
Re: LB 4.5 is underwhelming
Post by Richard Russell on Jul 29th, 2015, 4:39pm

on Jul 29th, 2015, 3:56pm, mclout99 wrote:
Does the release candidate pose any compatibility issues for LBB and if so will you update LBB to fix that?

LBB 3.00 already supports the main new features of LB 4.5.0:
So that really only leaves the new inputcsv statement as something which LB 4.5.0 has but LBB 3.00 doesn't. I could either add that in a future version, or make available a user-defined routine with equivalent functionality.

Richard.
Re: LB 4.5 is underwhelming
Post by bluatigro on Jul 30th, 2015, 09:13am


i wood it liked it more if carl made :
SWAP
SGN()
ATAN2()
INCLUDE
PI , TRUE , FALSE as const
hopefuly he wil do that + OOP in LB5
SWAP , SGN , ATAN2 are also not in LBB300
Re: LB 4.5 is underwhelming
Post by Richard Russell on Jul 30th, 2015, 10:53am

on Jul 30th, 2015, 09:13am, bluatigro wrote:
SWAP , SGN , ATAN2 are also not in LBB300

SWAP and SGN are in LBB 3.00, if you do not mind using the BBC BASIC escape feature:

Code:
    a = 1
    b = 2
    !SWAP a,b
    print a,b 

Code:
    a = -3.14159
    b = 0
    c = +3.14159
    !a = SGN(a)
    !b = SGN(b)
    !c = SGN(c)
    print a,b,c 

Richard.
Re: LB 4.5 is underwhelming
Post by SarmedNafi on Aug 1st, 2015, 05:30am

Code:

But my point remains: even something as serious as the TIMER bug - which really impacts on programs, especially because of label scope issues - is unchanged. This program locks up LB 4.5.0 (try moving the IDE window):

 


Richard,

The TIMER bug which they mentioned to on their "Bug tracker" site is more than a SUB routine problem.

If you please run the following modified code on both LB and LBB.

'code----------
timer 100, tick
wait

[tick]
print "Tiiiiick"
wait
'code---------

Actually I got a lot of disappointments from LB.
Now I got that freeze, halted, locked, hangup, or whatever you call it for no sensible reason.
Each time I used Timer in my programs I felt the PC or OS became unhappy, what should I do?
I have to use LBB.
There is no other choice for me.

Regards,
Sarmed

Re: LB 4.5 is underwhelming
Post by Rod on Aug 1st, 2015, 07:31am

Sarmed you have given the timer a sub handler name but not written the sub. The way to avoid timer issues is to contain any timer delay within its own sub which would appear to fix the scope issue.

Re: LB 4.5 is underwhelming
Post by SarmedNafi on Aug 1st, 2015, 07:57am

Yes, Dear Rod,

I did but LB goes inside the branch label and run it, displays Tiiiick the code is wrong LB accepted, and makes a wrong execution.

I wonder, are you going to make me refuse what I seen on my screen, or you ask me to write correct code because LB accepts and run wrong codes. So we must pay more attention.!

You know what?
I run my code on LBB just to help me find if there were errors I made not reported by LB.

With all respects,
Sarmed


Re: LB 4.5 is underwhelming
Post by SarmedNafi on Aug 1st, 2015, 08:08am

Rod,

As you here, please note.
There is something wrong with timer at least under LB, I have to change any SUB in my program into branch label, just to prevents my program from got freeze after I use many timers, of course I close each one at the beginning of any branch, but this is the only way I have in spite I don't use any SUBs with any timer in my program, the window got freeze when I touched it's capture.
Therefor I said the problem is in Timer not in subs as they said on their bug tracker site.
I hope Carl will take care of that.

Regards
Sarmed
Re: LB 4.5 is underwhelming
Post by Richard Russell on Aug 1st, 2015, 09:27am

on Aug 1st, 2015, 07:57am, SarmedNafi wrote:
I run my code on LBB just to help me find if there were errors I made not reported by LB.

To be fair, sometimes you need to do the opposite! The program you listed should report something like "No such subroutine 'tick'" but in LBB the error is silently ignored. sad

But you are right that in LB 4.04 and LB 4.5.0 the timer has more problems than just the SUB handler. In particular it upsets the operation of the PROMPT statement.

So, since there's obviously something not right with TIMER, I'm not surprised that you have encountered other issues with its use.

Richard.

Re: LB 4.5 is underwhelming
Post by SarmedNafi on Aug 1st, 2015, 10:28am

Rod,

If you still here please run the following, It is a disaster.
The second release of LB 450 will RUN all the following Branches whatever names they have or quantity.

Please tell Carl I am sure he listen well to you.

'code----------
timer 100, tick
wait

[ticktacktoock]
print "ticktacktoock"
wait

[secondTick]
print "secondTick"
wait

'code---------

Regards
Sarmed
Re: LB 4.5 is underwhelming
Post by Richard Russell on Aug 1st, 2015, 11:17am

on Aug 1st, 2015, 10:28am, SarmedNafi wrote:
If you still here please run the following, It is a disaster.

I don't think it is a "disaster", but it is certainly surprising and affects not only the timer. Try this program in LB and you'll see that BUTTON events misbehave as well (click on the button three times and watch what happens):

Code:
    UpperLeftX = 1
    UpperLeftY = 1
    button #w, "Click me and view the mainwin", tick, UL, 20, 100
    open "Event bug" for window as #w
    wait
    print "Fell through a WAIT statement: should never happen!!"

[ticktacktoock]
    print "ticktacktoock"
    wait
    print "Fell through a WAIT statement: should never happen!!"

[secondTick]
    print "secondTick"
    wait
    print "Fell through a WAIT statement: should never happen!!" 

I am beginning to think this bug explains the occasional report I have seen of code following a WAIT statement being executed - because it's exactly what happens in this case!

In LBB there is no way the statement immediately following a WAIT can be executed, unless it has a label.

Richard.
Re: LB 4.5 is underwhelming
Post by Richard Russell on Aug 21st, 2015, 09:41am

Now that LB 4.5.0 is officially released I thought it appropriate to list once again a library for LBB which supports the new string functions: after$, afterlast$, remchar$, replstr$, upto$ and httpget$ (I've also included the endswith function although I can't find it mentioned anywhere in the LB 4.5.0 help file!).

To ensure that a program using one or more of these functions is fully compatible with both LBB and LB 4.5.0 you should save the code listed below to a file (called lb45func.bas or something like that). Then add this command at the very end of your program:

Code:
'include lb45func.bas 
(must start in the first column and end with a newline).

Because this command is ignored by LB the native functions will be called when running in LB 4.5.0 and the library functions when running in LBB.

Here is the library:

Code:
' LB 4.5.0 function library for LB Booster
' by Richard Russell, http://lbbooster.com

function after$(source$, match$)
i = instr(source$, match$)
if i then after$ = mid$(source$,i+len(match$))
end function

function afterlast$(source$, match$)
do : i = j
  j = instr(source$, match$, j+1)
loop until j = 0
if i then afterlast$ = mid$(source$,i+len(match$))
end function

function endswith(source$, match$)
endswith = right$(source$,len(match$)) = match$
end function

function remchar$(source$, charset$)
for i = 1 to len(charset$)
  do
    j = instr(source$, mid$(charset$,i,1))
    if j then source$ = left$(source$,j-1);mid$(source$,j+1)
  loop until j = 0
next
remchar$ = source$
end function

function replstr$(source$, old$, new$)
do
  i = instr(source$, old$, i+1)
  if i then
    source$ = left$(source$,i-1);new$;mid$(source$,i+len(old$))
    i = i + len(new$) - 1
  end if
loop until i = 0
replstr$ = source$
end function

function upto$(source$, match$)
i = instr(source$, match$)
if i then upto$=left$(source$,i-1) else upto$=source$
end function

function httpget$(url$)
open "WININET.DLL" for dll as #net
calldll #net, "InternetOpenA", "LB Booster" as ptr, 0 as long, _
  0 as long, 0 as long, 0 as long, hnet as ulong
calldll #net, "InternetOpenUrlA", hnet as ulong, url$ as ptr, _
  "" as ptr, 0 as long, 0 as long, 0 as long, hurl as ulong
buffer$ = space$(1000)
struct httpget, nread as long
do
  buflen = len(buffer$)
  calldll #net, "InternetReadFile", hurl as ulong, _
buffer$ as ptr, buflen as long, httpget as struct, res as long
  httpget$ = httpget$ + left$(buffer$, httpget.nread.struct)
loop until httpget.nread.struct = 0
calldll #net, "InternetCloseHandle", hurl as ulong, res as long
calldll #net, "InternetCloseHandle", hnet as ulong, res as long
close #net
end function 

Richard.