User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:10 pm

DavidS wrote:
Sun Jul 14, 2019 7:49 pm
@RichardRussell:
I am looking at a bit of BBC BASIC code by you, and it uses GOSUB a lot, as well as GOTO.
I don't understand. You quote my name, but then refer to a program using GOTO and GOSUB. I haven't used either keyword in a BBC BASIC program for at least 30 years, apart from test programs designed to verify that those keywords work. So what program are you referring to, and why did you direct your comment at me?

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:19 pm

RichardRussell,

I think it's about this code by ejolson: https://github.com/ZiCog/fibo_4784969/b ... ic_bbc.bas

complete with hundreds of GOTOs and GOSUBs.

Not originally by you but specially made with your mods for BBC BASIC.

If there is a problem with the attribution there I can fix it.
Memory in C++ is a leaky abstraction .

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:23 pm

ZXDunny wrote:
Sun Jul 14, 2019 8:04 pm
Well, back in the day they were a lot faster than procedures, so maybe for speed? Or just convenience?
In BBC BASIC, procedure calls (without parameters) are typically faster than GOSUB. Specifically, the destination of a procedure call is looked up in the same way as variables are, in a relatively fast and efficient way, whereas when GOSUB is executed the destination line is found by searching from the beginning of the program, line by line, until that line is reached! GOSUB (and GOTO) are not optimised because they are provided only for legacy reasons; I would never use them in a 'serious' program.

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:43 pm

Heater wrote:
Sun Jul 14, 2019 9:19 pm
Not originally by you but specially made with your mods for BBC BASIC.
All I did was to provide a tiny 'preamble' to the 'classic BASIC' submission so that it would run in BBC BASIC; the whole point was to demonstrate that the legacy subset of BBC BASIC is reasonably standard (although it has to be said there was an element of luck that the Fibo program needed so few alterations). It isn't my program and I can't be held responsible for the code of others; in any case it's not possible to avoid GOTO and GOSUB in 'classic' BASIC.

I wrote a 'proper' BBC BASIC version of the Fibo challenge which most certainly doesn't use GOTO or GOSUB, here it is again:

Code: Select all

      HIMEM = PAGE + 20000000
      INSTALL @lib$ + "bigint"
      PROCbiginit

      fibo%% = FNbignew(1000000)

      TIME = 0
      PROCfibo(4784969, fibo%%)
      *spool fibo1M.txt
      PRINT FNbigstr(fibo%%)
      *spool
      PRINT TIME/100 " seconds"
      END

      REM Fibonacci calculation using the doubling algorithm:
      DEF PROCfibo(N%, f%%)
      LOCAL S%, a%%, b%%, c%%
      S% = N% * LOG((SQR(5) + 1) / 2) + 1
      a%% = FNbignew(S%) : b%% = FNbignew(S%)
      PROCfibo2(N% DIV 2, a%%, b%%)
      c%% = FNbignew(S%)

      IF N% AND 1 THEN
        REM f = b*(2*b-a)-(-1)^k
        PROCbiguadd(f%%, b%%, b%%)
        PROCbigusub(c%%, f%%, a%%)
        PROCbigumul(f%%, b%%, c%%)
        IF N% MOD 4=1 THEN PROCbigudec(f%%) ELSE PROCbiguinc(f%%)
      ELSE
        REM f = b*(2*a+b)
        PROCbiguadd(f%%, a%%, a%%)
        PROCbiguadd(c%%, f%%, b%%)
        PROCbigumul(f%%, b%%, c%%)
      ENDIF
      ENDPROC

      DEF PROCfibo2(N%, f%%, g%%)
      LOCAL S%, a%%, b%%, c%%, d%%
      S% = N% * LOG((SQR(5) + 1) / 2) + 1
      IF N% = 0 THEN
        PROCbigval(f%%, "0") : REM f = 0
        PROCbigval(g%%, "1") : REM g = 1
        ENDPROC
      ENDIF
      a%% = FNbignew(S%) : b%% = FNbignew(S%)
      PROCfibo2(N% DIV 2, a%%, b%%)
      c%% = FNbignew(S%) : d%% = FNbignew(S%)

      IF N% AND 1 THEN
        REM f = a*(2*a+b)+(-1)^k
        REM g = b*(2*a+b)
        PROCbiguadd(c%%, a%%, a%%)
        PROCbiguadd(d%%, c%%, b%%)
        PROCbigumul(g%%, b%%, d%%)
        PROCbigumul(f%%, a%%, d%%)
        IF N% MOD 4 = 1 THEN PROCbiguinc(f%%) ELSE PROCbigudec(f%%)
      ELSE
        REM f = a*(2*b-a)
        REM g = b*(2*b-a)-(-1)^k
        PROCbiguadd(c%%, b%%, b%%)
        PROCbigusub(d%%, c%%, a%%)
        PROCbigumul(f%%, a%%, d%%)
        PROCbigumul(g%%, b%%, d%%)
        IF N% MOD 4 = 0 THEN PROCbigudec(g%%) ELSE PROCbiguinc(g%%)
      ENDIF
      ENDPROC

ZXDunny
Posts: 117
Joined: Sun Jul 08, 2012 7:57 pm

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:47 pm

RichardRussell wrote:
Sun Jul 14, 2019 9:23 pm
ZXDunny wrote:
Sun Jul 14, 2019 8:04 pm
Well, back in the day they were a lot faster than procedures, so maybe for speed? Or just convenience?
In BBC BASIC, procedure calls (without parameters) are typically faster than GOSUB. Specifically, the destination of a procedure call is looked up in the same way as variables are, in a relatively fast and efficient way, whereas when GOSUB is executed the destination line is found by searching from the beginning of the program, line by line, until that line is reached! GOSUB (and GOTO) are not optimised because they are provided only for legacy reasons; I would never use them in a 'serious' program.
The same way Sinclair BASIC did it then (we didn't have procedures though) by searching for the destination. SpecBAS uses a line number LUT so it's a lot faster than a PROC call which sets up local vars and suchlike before executing.

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:52 pm

Heater wrote:
Sun Jul 14, 2019 9:19 pm
If there is a problem with the attribution there I can fix it.
I can't see anything that might have led DavidS to conclude it was written by me. It says "with slight modifications to run under Richard Russell's BBCBasic" and "Written December 25, 2018 by Eric Olson" which seems perfectly clear and accurate.

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:55 pm

ZXDunny wrote:
Sun Jul 14, 2019 9:47 pm
it's a lot faster than a PROC call which sets up local vars and suchlike before executing.
In BBC BASIC a procedure without parameters doesn't have any 'local' variables (unless explicitly declared using LOCAL) so there is literally nothing more to 'set up' than there is with GOSUB (just pushing the 'return address' onto the stack in each case).
Last edited by RichardRussell on Sun Jul 14, 2019 9:59 pm, edited 1 time in total.

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 9:58 pm

RichardRussell,
I wrote a 'proper' BBC BASIC version of the Fibo challenge which most certainly doesn't use GOTO or GOSUB, here it is again:
Cool.

How did I miss that. I'll give it a spin and replace the Fibo Challenge entry in the repo. If that is OK with you.
...the destination of a procedure call is looked up in the same way as variables are, in a relatively fast and efficient way, whereas when GOSUB is executed the destination line is found by searching from the beginning of the program, ...
One might wonder why line numbers are not in the same symbol tables as variables and procedures. For fast look up.
Memory in C++ is a leaky abstraction .

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 10:05 pm

Heater wrote:
Sun Jul 14, 2019 9:58 pm
How did I miss that. I'll give it a spin and replace the Fibo Challenge entry in the repo. If that is OK with you.
The issue is that it relies on my 'bigint' library which was thrown together for the challenge and never completed. I had hoped that somebody would take up the reins and develop what I started into a genuinely useful library, but it hasn't happened and therefore the submission cannot be considered valid.
One might wonder why line numbers are not in the same symbol tables as variables and procedures. For fast look up.
If they were it wouldn't necessarily be any faster, given that (in those days) every line needed to have a number, so the table could be large. Imagine a program of 1000 lines but containing only 10 procedures; however you arrange the lookup it is likely that finding a procedure name in a set of 10 will be faster than finding a line in a set of 1000!

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 10:28 pm

Ah, so that last code post is not a Fibo Challenge entry and I can forget it. Right?

I have difficulty thinking of 1000 as a big number now a days. But OK, I see your point.
Memory in C++ is a leaky abstraction .

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 10:46 pm

Heater wrote:
Sun Jul 14, 2019 10:28 pm
Ah, so that last code post is not a Fibo Challenge entry and I can forget it. Right?
You are correct that I have never submitted an entry for the 'Fibo Challenge' (I don't know what the process is for doing so, or even who the challenge was organised by). My limited understanding of the rules is that the only kind of library permitted is one that is supplied as standard with the language, and with my bigint library never having been completed clearly it doesn't qualify.

ZXDunny
Posts: 117
Joined: Sun Jul 08, 2012 7:57 pm

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 11:31 pm

I expect that it was not stored as a jump table due to memory constraints. The 48k Spectrum had just that - 48kb of usable RAM, and a large program would need a largish table. And besides, Spectrum code lines were stored with a four byte header - two bytes for the line number, two bytes for the length, so searching was pretty rapid as that sort of thing went.

User avatar
John_Spikowski
Posts: 1581
Joined: Wed Apr 03, 2019 5:53 pm
Location: Anacortes, WA USA
Contact: Website Twitter

Re: Introduction to BBC BASIC

Sun Jul 14, 2019 11:44 pm

I wonder if interpretive tokenized code is worth the effort these days?

User avatar
DavidS
Posts: 4334
Joined: Thu Dec 15, 2011 6:39 am
Location: USA
Contact: Website

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 1:35 am

Heater wrote:
Sun Jul 14, 2019 8:35 pm
DavidS,

I believe that code you are looking at is ejolson's "classic basic" entry for the Fibonaccu Challenge, very slightly modified to run under BBC BASIC by TimRussell.

If you have never used GOSUB you have never used BASIC.
I used GOSUB way back when dealing with MS-BASIC on 8-Bit computers, though not sinse going over to BBC BASIC.
RPi = The best ARM based RISC OS computer around
More than 95% of posts made from RISC OS on RPi 1B/1B+ computers. Most of the rest from RISC OS on RPi 2B/3B/3B+ computers

User avatar
DavidS
Posts: 4334
Joined: Thu Dec 15, 2011 6:39 am
Location: USA
Contact: Website

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 1:37 am

RichardRussell wrote:
Sun Jul 14, 2019 9:10 pm
DavidS wrote:
Sun Jul 14, 2019 7:49 pm
@RichardRussell:
I am looking at a bit of BBC BASIC code by you, and it uses GOSUB a lot, as well as GOTO.
I don't understand. You quote my name, but then refer to a program using GOTO and GOSUB. I haven't used either keyword in a BBC BASIC program for at least 30 years, apart from test programs designed to verify that those keywords work. So what program are you referring to, and why did you direct your comment at me?
My mistake and appologies, it is not your code. I was thinking it was, my error.
RPi = The best ARM based RISC OS computer around
More than 95% of posts made from RISC OS on RPi 1B/1B+ computers. Most of the rest from RISC OS on RPi 2B/3B/3B+ computers

User avatar
DavidS
Posts: 4334
Joined: Thu Dec 15, 2011 6:39 am
Location: USA
Contact: Website

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 1:41 am

ScriptBasic wrote:
Sun Jul 14, 2019 11:44 pm
I wonder if interpretive tokenized code is worth the effort these days?
I believe it is still a good way to make code smaller, and make the interpreter faster. Those are always good things no matter how fast a computer or how much memory you have.

I also think it has the potential to make an interpreter easier to maintain, though that is a matter of perspective.
RPi = The best ARM based RISC OS computer around
More than 95% of posts made from RISC OS on RPi 1B/1B+ computers. Most of the rest from RISC OS on RPi 2B/3B/3B+ computers

User avatar
DavidS
Posts: 4334
Joined: Thu Dec 15, 2011 6:39 am
Location: USA
Contact: Website

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 1:45 am

RichardRussel wrote:

Code: Select all

      HIMEM = PAGE + 20000000
      INSTALL @lib$ + "bigint"
      PROCbiginit

      fibo%% = FNbignew(1000000)

      TIME = 0
      PROCfibo(4784969, fibo%%)
      *spool fibo1M.txt
      PRINT FNbigstr(fibo%%)
      *spool
      PRINT TIME/100 " seconds"
      END

      REM Fibonacci calculation using the doubling algorithm:
      DEF PROCfibo(N%, f%%)
      LOCAL S%, a%%, b%%, c%%
      S% = N% * LOG((SQR(5) + 1) / 2) + 1
      a%% = FNbignew(S%) : b%% = FNbignew(S%)
      PROCfibo2(N% DIV 2, a%%, b%%)
      c%% = FNbignew(S%)

      IF N% AND 1 THEN
        REM f = b*(2*b-a)-(-1)^k
        PROCbiguadd(f%%, b%%, b%%)
        PROCbigusub(c%%, f%%, a%%)
        PROCbigumul(f%%, b%%, c%%)
        IF N% MOD 4=1 THEN PROCbigudec(f%%) ELSE PROCbiguinc(f%%)
      ELSE
        REM f = b*(2*a+b)
        PROCbiguadd(f%%, a%%, a%%)
        PROCbiguadd(c%%, f%%, b%%)
        PROCbigumul(f%%, b%%, c%%)
      ENDIF
      ENDPROC

      DEF PROCfibo2(N%, f%%, g%%)
      LOCAL S%, a%%, b%%, c%%, d%%
      S% = N% * LOG((SQR(5) + 1) / 2) + 1
      IF N% = 0 THEN
        PROCbigval(f%%, "0") : REM f = 0
        PROCbigval(g%%, "1") : REM g = 1
        ENDPROC
      ENDIF
      a%% = FNbignew(S%) : b%% = FNbignew(S%)
      PROCfibo2(N% DIV 2, a%%, b%%)
      c%% = FNbignew(S%) : d%% = FNbignew(S%)

      IF N% AND 1 THEN
        REM f = a*(2*a+b)+(-1)^k
        REM g = b*(2*a+b)
        PROCbiguadd(c%%, a%%, a%%)
        PROCbiguadd(d%%, c%%, b%%)
        PROCbigumul(g%%, b%%, d%%)
        PROCbigumul(f%%, a%%, d%%)
        IF N% MOD 4 = 1 THEN PROCbiguinc(f%%) ELSE PROCbigudec(f%%)
      ELSE
        REM f = a*(2*b-a)
        REM g = b*(2*b-a)-(-1)^k
        PROCbiguadd(c%%, b%%, b%%)
        PROCbigusub(d%%, c%%, a%%)
        PROCbigumul(f%%, a%%, d%%)
        PROCbigumul(g%%, b%%, d%%)
        IF N% MOD 4 = 0 THEN PROCbigudec(g%%) ELSE PROCbiguinc(g%%)
      ENDIF
Now that I see as your code. Actually follows the rules for BBC BASIC.

I am going to see about giving it a try in BBC BASIC on RISC OS (hopefully not to much work). Though where is the library with PROCbigmul and PROCbigadd? Or did you not get far enogh for those two to work?
RPi = The best ARM based RISC OS computer around
More than 95% of posts made from RISC OS on RPi 1B/1B+ computers. Most of the rest from RISC OS on RPi 2B/3B/3B+ computers

User avatar
John_Spikowski
Posts: 1581
Joined: Wed Apr 03, 2019 5:53 pm
Location: Anacortes, WA USA
Contact: Website Twitter

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 2:22 am

DavidS wrote:
Mon Jul 15, 2019 1:41 am
ScriptBasic wrote:
Sun Jul 14, 2019 11:44 pm
I wonder if interpretive tokenized code is worth the effort these days?
I believe it is still a good way to make code smaller, and make the interpreter faster. Those are always good things no matter how fast a computer or how much memory you have.

I also think it has the potential to make an interpreter easier to maintain, though that is a matter of perspective.
ScriptBasic does what Peter Verhas calls compiling the script to binary. As close as I have gotten to understanding that format is what scriba -C generates.

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 4:36 am

RichardRussell,
You are correct that I have never submitted an entry for the 'Fibo Challenge' (I don't know what the process is for doing so, or even who the challenge was organised by).
To be clear to everyone, the big fibonacci BASIC code I have been referring to was originally written by ejolson.

It has slight modifications to enable BBC BASIC to run it and produce an output to a file rather than into the IDE window. As suggested by Richard Russel this thread: https://www.raspberrypi.org/forums/view ... 0#p1464704

Such discussion and code posting in the "Avoiding BASIC" thread was the "process" by which solutions found their way into the repository. I have tried to provide attribution and links back to the forum posts where all contributions were made to the README files in that repository.

So Richard, if you would like me to remove your name from the code or change the attribution or delete it entirely from the repository just let me know.

ejolson's original submission:
https://github.com/ZiCog/fibo_4784969/b ... lassic.bas

As above with Richard's suggestions added:
https://github.com/ZiCog/fibo_4784969/b ... ic_bbc.bas

The Fibo Challenge, so much as it is a thing at all, was originally posed only to DavidS after his continual harping on about how great BASIC is. I was amazed when so many others took it up and contributed so many other language solutions. It's been fascinating.
Memory in C++ is a leaky abstraction .

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 4:42 am

DavidS,
I am going to see about giving it a try in BBC BASIC on RISC OS (hopefully not to much work). Though where is the library with PROCbigmul and PROCbigadd? Or did you not get far enogh for those two to work?
See Richard's post here: https://www.raspberrypi.org/forums/view ... 7#p1500070

Did you get a result from the big fibo BASIC code that linked you to (Also see my previous post)? We know that one works well.
Memory in C++ is a leaky abstraction .

User avatar
John_Spikowski
Posts: 1581
Joined: Wed Apr 03, 2019 5:53 pm
Location: Anacortes, WA USA
Contact: Website Twitter

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 4:50 am

I don't see the ScriptBasic version of that in the repository.

Heater
Posts: 13683
Joined: Tue Jul 17, 2012 3:02 pm

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 5:17 am

ScriptBasic,
I don't see the ScriptBasic version of that in the repository.
It's in my local repository here ready to go.

It's still waiting on the big integer extension being fixed and added to the SciptBasic release.
Memory in C++ is a leaky abstraction .

ZXDunny
Posts: 117
Joined: Sun Jul 08, 2012 7:57 pm

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 8:03 am

ScriptBasic wrote:
Mon Jul 15, 2019 2:22 am
DavidS wrote:
Mon Jul 15, 2019 1:41 am
ScriptBasic wrote:
Sun Jul 14, 2019 11:44 pm
I wonder if interpretive tokenized code is worth the effort these days?
I believe it is still a good way to make code smaller, and make the interpreter faster. Those are always good things no matter how fast a computer or how much memory you have.

I also think it has the potential to make an interpreter easier to maintain, though that is a matter of perspective.
ScriptBasic does what Peter Verhas calls compiling the script to binary. As close as I have gotten to understanding that format is what scriba -C generates.
I had no idea that ScriptBasic used interpretive tokenised code; I thought from it's general speed that it was a pure interpreter. You live and learn, I suppose.

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 8:18 am

ScriptBasic wrote:
Sun Jul 14, 2019 11:44 pm
I wonder if interpretive tokenized code is worth the effort these days?
I'm not sure what point you're making here. There is obviously less "effort" involved in interpreting a program compared with compiling it (using those terms in their traditional senses) and tokenisation is simply a method of saving memory and speeding up execution - it's a step on the road to the 'bytecode' used by some modern languages. There are interpreted languages that don't tokenise at all (Liberty BASIC is an example).

User avatar
RichardRussell
Posts: 590
Joined: Thu Jun 21, 2012 10:48 am

Re: Introduction to BBC BASIC

Mon Jul 15, 2019 8:28 am

DavidS wrote:
Mon Jul 15, 2019 1:45 am
Though where is the library with PROCbigmul and PROCbigadd? Or did you not get far enogh for those two to work?
As I've said, I developed the library only far enough to allow the Fibo application to run (which it does, so obviously those procedures work!). Specifically there is no support for negetive numbers nor for division, which are pretty serious limitations for a 'bigint' library! I'm happy to publish the library in its current, incomplete, state but I'm not sure that there would be much point; it makes heavy use of 64-bit integers and array pointers, so is not at all portable to ARM BASIC V.

Here's a snippet of the code:

Code: Select all

      REM Unsigned addition
      DEF PROCbiguadd(c%%, a%%, b%%)
      LOCAL A%, F%, r%%, s%%, a%%(), b%%(), c%%() : r%% = 10^18 : s%% = !c%% AND &7FFFFF
      IF a%%!4 < b%%!4 SWAP a%%,b%%
      A% = a%%!4 : a%%!4 = b%%!4
      c%%!4 = a%%!4 : IF c%%!4 > s%% ERROR 100, "PROCbiguadd: BigInt overflow"
      IF INKEY(-256)=&73 IF @platform% AND &40 THEN ]^a%%() = a%%+3 : ]^b%%() = b%%+3 : ]^c%%() = c%%+3 ELSE !^a%%() = a%%+3 : !^b%%() = b%%+3 : !^c%%() = c%%+3
      F% = FNbigadd(c%%(), a%%(), b%%()) <> 0
      a%%!4 = A%
      WHILE F% OR c%%!4 < A%
        IF c%%!4 >= s%% ERROR 100, "PROCbiguadd: BigInt overflow"
        c%%!4 += 1
        IF c%%!4 <= A% c%%(c%%!4 - 1) = a%%(c%%!4 - 1) - F% ELSE c%%(c%%!4 - 1) = - F%
        F% = c%%(c%%!4 - 1) >= r%% : IF F% c%%(c%%!4 - 1) -= r%%
      ENDWHILE
      ENDPROC

      DEF FNbigadd(c%%(), a%%(), b%%())
      LOCAL F%,N%,r%%,d%%() : r%% = 10^18 : N% = DIM(a%%(),1) : DIM d%%(N%)
      c%%() = a%%() + b%%()
      REPEAT
        d%%() = c%%() DIV r%%
        IF SUM(d%%()) = 0 EXIT REPEAT
        c%%() MOD= r%%
        F% OR= d%%(N%)
        IF N% SYS MemMove%%, ^d%%(1), ^d%%(0), N%*8
        d%%(0) = FALSE
        c%%() += d%%()
      UNTIL FALSE
      = F%

Return to “Other programming languages”