Author |
Topic: Features that are never used (Read 544 times) |
|
rtr2
Guest
|
 |
Re: Features that are never used
« Reply #15 on: Mar 21st, 2015, 11:47pm » |
|
2. RETURN destination
This is the second in an occasional series of posts on features of BBC BASIC for Windows which are so obscure or specialised that they are (virtually) never used.
The RETURN statement is used either to exit from a subroutine (called using GOSUB) or to indicate the completion of an ON event handler. Normally it causes execution to continue from the point in the code where the subroutine call or event interrupt happened.
However you can, optionally, follow the RETURN with a destination (line number or label) which will cause it to 'return' to the specified place instead. Effectively it is like a GOTO except that the 'return address', which was pushed onto the stack, is discarded (if you used GOTO instead the program would appear to work, for a while, until all the memory was used up by the ever-growing stack).
When might you want to do that? Hardly ever (and being equivalent to a GOTO all the arguments for avoiding them apply to this usage as well)! One possible use might be for an ON TIME interrupt to abort some lengthy process without the overhead of polling for the event:
Code: ON TIME RETURN (abort)
REPEAT
I% += 1
UNTIL FALSE
(abort)
PRINT "Aborted with I% = "; I% Perhaps you can think of another application for this functionality.
Richard.
|
|
Logged
|
|
|
|
David Williams
Developer
member is offline

meh

Gender: 
Posts: 452
|
 |
Re: Features that are never used
« Reply #16 on: Mar 22nd, 2015, 08:12am » |
|
SUMLEN
Not really a 'feature' of BB4W as such, but I noticed it for the first time a few days ago when I was browsing the list of ARM BASIC V's keywords. Had to check if BB4W has it as well, and of course it does.
I'm certain I had never noticed this keyword before in all my years of BBC BASIC programming.
Any other long-time BBC BASIC users new to this keyword?
Embarrassing if it's just me.
David. --
|
|
Logged
|
|
|
|
rtr2
Guest
|
 |
Re: Features that are never used
« Reply #17 on: Mar 22nd, 2015, 10:43am » |
|
on Mar 22nd, 2015, 08:12am, David Williams wrote:| Any other long-time BBC BASIC users new to this keyword? |
|
I think it's reasonably well-known, but little-used. Because SUMLEN arrived in the language at the same time as SUM (which is much more useful) I would expect anybody who knows about one to be aware of the other.
Having searched through thousands of programs on my PC I have found only one genuine example of its use, which is in a program that puts a whole load of files on the clipboard (CF_HDROP format). To work out how much memory to allocate for the clipboard data it does:
Code: nfiles% = FNselectfiles("Select one or more files", "*.*", file$())
ddesize% = DIM(dropfiles{}) + SUMLEN(file$()) + nfiles% + 1 But I'd prefer the thread not to fly off-topic this soon. Any feedback specifically on the RETURN destination feature?
Richard.
|
|
Logged
|
|
|
|
David Williams
Developer
member is offline

meh

Gender: 
Posts: 452
|
 |
Re: Features that are never used
« Reply #18 on: Mar 22nd, 2015, 12:25pm » |
|
on Mar 22nd, 2015, 10:43am, g4bau wrote:| Any feedback specifically on the RETURN destination feature? |
|
Only that it was news to me, and that I've made a mental note of it.
David. --
|
|
Logged
|
|
|
|
DDRM
Administrator
member is offline


Gender: 
Posts: 321
|
 |
Re: Features that are never used
« Reply #19 on: Mar 23rd, 2015, 5:32pm » |
|
Hi Richard,
I'm not sure you'd ever want to do it this way, but I guess you could use it to cut out the "PROCsys" bit of an ON PROC handler:
Code:
5 PROCMenus
10 ON SYS w%=50+@wparam%:RETURN w%
20 REPEAT
30 WAIT 1
40 UNTIL FALSE
45 END
50 PRINT "Black":END
51 PRINT "RED" :END
100 END
DEFPROCMenus
SYS "CreateMenu" TO hmenu%
SYS "SetMenu", @hwnd%, hmenu%
SYS "AppendMenu", hmenu%, 0, 0, "Blac&k"
SYS "AppendMenu", hmenu%, 0, 1, "&Red"
SYS "DrawMenuBar", @hwnd%
ENDPROC
Incidentally, I was interested to see that I can mix numbered and unnumbered bits of code - not that I'd recommend it...
Obviously you would probably want to jump to a handling routine rather than just a print statement, and I can't see much advantage over doing it the way recommended in the manual, but it IS a potential use for the feature!
I suspect you should probably mask @wparam% with &FFFF?
Best wishes,
D
|
| « Last Edit: Mar 23rd, 2015, 5:37pm by DDRM » |
Logged
|
|
|
|
rtr2
Guest
|
 |
Re: Features that are never used
« Reply #20 on: Mar 23rd, 2015, 8:01pm » |
|
on Mar 23rd, 2015, 5:32pm, DDRM wrote:| I suspect you should probably mask @wparam% with &FFFF? |
|
Not in the case of a menu selection; MSDN says: "Value of the high-order word of wParam... If the message is from a menu, this parameter is 0".
Richard.
|
|
Logged
|
|
|
|
rtr2
Guest
|
 |
Re: Features that are never used
« Reply #21 on: Apr 6th, 2015, 10:32pm » |
|
3. ELSEIF condition THEN;
This is the third in an occasional series of posts on features of BBC BASIC for Windows which are so obscure or specialised that they are (virtually) never used.
Some BASIC dialects provide an ELSEIF (or ELSIF) keyword to allow multiple conditions to be conveniently handled without nesting IF statements. Standard BBC BASIC does not support this, but an equivalent functionality can be achieved using CASE:
Code: CASE TRUE OF
WHEN condition1:
REM Do something
WHEN condition2:
REM Do something else
OTHERWISE:
REM Do default action
ENDCASE However BB4W does support a form of ELSEIF, a feature which was added primarily to aid automatic translation from other dialects:
Code: IF condition1 THEN
REM Do something
ELSEIF condition2 THEN;
REM Do something else
ELSE
REM Do default action
ENDIF Note the semicolon ; immediately after the THEN which prevents a new (nested) multi-line IF clause being started.
Richard.
|
|
Logged
|
|
|
|
DDRM
Administrator
member is offline


Gender: 
Posts: 321
|
 |
Re: Features that are never used
« Reply #22 on: Apr 9th, 2015, 08:56am » |
|
Hi Richard,
Thanks for the note on ELSEIF. I quite often use the CASE TRUE construction, which is very nice, but I can see that using ELSEIF...THEN; might also work well to make multiple choices clear.
I see that there is one use of it in the wiki - is that enough to earn ELSEIF a brief mention in the manual?
Best wishes,
D
|
|
Logged
|
|
|
|
rtr2
Guest
|
 |
Re: Features that are never used
« Reply #23 on: Apr 9th, 2015, 10:13am » |
|
on Apr 9th, 2015, 08:56am, DDRM wrote:| I see that there is one use of it in the wiki - is that enough to earn ELSEIF a brief mention in the manual? |
|
It is already there. ELSEIF is just ELSE IF and is therefore documented under ELSE and IF. It's a standard feature of BBC BASIC, which you could use even on the BBC Micro:
Code: IF condition1 PROCdosomething ELSEIF condition2 PROCdoanotherthing The little-used, BB4W-specific, feature I drew attention to was THEN; (i.e. the trailing semicolon) which is documented, unsurprisingly, under THEN:
http://www.bbcbasic.co.uk/bbcwin/manual/bbcwin7.html#then
Richard.
|
| « Last Edit: Apr 9th, 2015, 10:17am by rtr2 » |
Logged
|
|
|
|
|