Author Topic: Net Basic - a BASIC in PHP  (Read 1225 times)

Offline Gemino Smothers

  • BASIC Developer
  • Posts: 24
    • Lucid Apogee
Net Basic - a BASIC in PHP
« on: October 05, 2023, 01:54:40 PM »
I have been working on another project. What do you think about it? A Tiny BASIC direct interpreter online service in PHP.

A direct interpreter hosted on the web. You submit code and get results. There's no input, but GET requests may be read to allow url variables and forms.

Programs may be compiled/embedded into a url. Visit https://www.lucidapogee.com/netbasic and copy/paste/run some of the examples. Whenever you run code on the page, you get program encoded urls. One for HTTPS and one for HTTP. The whole site is available to HTTPS or HTTP through a subdomain.

Here's some examples:

Code: [Select]
1 REM https://rosettacode.org/wiki/Attractive_numbers
10 FOR x = 1 TO 120
20 LET n = x
30 LET c = 0
40 IF n MOD 2 <> 0 THEN 70
50 LET n = INT(n / 2)
60 LET c = c + 1
70 IF n MOD 2 = 0 THEN 40
80 FOR i = 3 TO SQR(n) STEP 2
90 IF n MOD i <> 0 THEN 120
100 LET n = INT(n / i)
110 LET c = c + 1
120 IF n MOD i = 0 THEN 90
130 NEXT i
140 IF n <= 2 THEN 160
150 LET c = c + 1
160 IF NOT(PRIME(c)) THEN 180
170 PRINT x,
180 NEXT x
Program encoded url: https://www.lucidapogee.com/netbasic/?listing=1%20REM%20https%3A%2F%2Frosettacode.org%2Fwiki%2FAttractive_numbers%0D%0A10%20FOR%20x%20%3D%201%20TO%20120%0D%0A20%20LET%20n%20%3D%20x%0D%0A30%20LET%20c%20%3D%200%0D%0A40%20IF%20n%20MOD%202%20%3C%3E%200%20THEN%2070%0D%0A50%20LET%20n%20%3D%20INT%28n%20%2F%202%29%0D%0A60%20LET%20c%20%3D%20c%20%2B%201%0D%0A70%20IF%20n%20MOD%202%20%3D%200%20THEN%2040%0D%0A80%20FOR%20i%20%3D%203%20TO%20SQR%28n%29%20STEP%202%0D%0A90%20IF%20n%20MOD%20i%20%3C%3E%200%20THEN%20120%0D%0A100%20LET%20n%20%3D%20INT%28n%20%2F%20i%29%0D%0A110%20LET%20c%20%3D%20c%20%2B%201%0D%0A120%20IF%20n%20MOD%20i%20%3D%200%20THEN%2090%0D%0A130%20NEXT%20i%0D%0A140%20IF%20n%20%3C%3D%202%20THEN%20160%0D%0A150%20LET%20c%20%3D%20c%20%2B%201%0D%0A160%20IF%20NOT%28PRIME%28c%29%29%20THEN%20180%0D%0A170%20PRINT%20x%2C%0D%0A180%20NEXT%20x

Code: [Select]
1 REM https://rosettacode.org/wiki/Nth_root
10 LET a = INT(RND * 5999) + 2
20 PRINT "nth root of "; a; "..."
30 FOR n = 1 TO 10
40 LET p = .00001
50 LET x = a
60 LET y = a / n
70 IF ABS(x - y) <= p THEN 110
80 LET x = y
90 LET y = ((n - 1) * y + a / y ^ (n - 1)) / n
100 IF ABS(x - y) > p THEN 80
110 PRINT n; " : "; y
120 NEXT n
Program encoded url: https://www.lucidapogee.com/netbasic/?listing=10%20LET%20a%20%3D%20INT%28RND%20%2A%205999%29%20%2B%202%0D%0A20%20PRINT%20%22nth%20root%20of%20%22%3B%20a%3B%20%22...%22%0D%0A30%20FOR%20n%20%3D%201%20TO%2010%0D%0A40%20LET%20p%20%3D%20.00001%0D%0A50%20LET%20x%20%3D%20a%0D%0A60%20LET%20y%20%3D%20a%20%2F%20n%0D%0A70%20IF%20ABS%28x%20-%20y%29%20%3C%3D%20p%20THEN%20110%0D%0A80%20LET%20x%20%3D%20y%0D%0A90%20LET%20y%20%3D%20%28%28n%20-%201%29%20%2A%20y%20%2B%20a%20%2F%20y%20%5E%20%28n%20-%201%29%29%20%2F%20n%0D%0A100%20IF%20ABS%28x%20-%20y%29%20%3E%20p%20THEN%2080%0D%0A110%20PRINT%20n%3B%20%22%20%3A%20%22%3B%20y%0D%0A120%20NEXT%20n

Code: [Select]
1 REM https://rosettacode.org/wiki/Prime_decomposition
10 LET loops = 100
20 FOR x = 1 TO loops
30 LET n = x
40 PRINT n; " : ";
50 LET c = 0
60 IF n MOD 2 > 0 THEN 110
70 LET n = INT(n / 2)
80 LET @(c) = 2
90 LET c = c + 1
100 IF n MOD 2 = 0 THEN 70
110 FOR i = 3 TO SQR(n) STEP 2
120 IF n MOD i > 0 THEN 170
130 LET n = INT(n / i)
140 LET @(c) = i
150 LET c = c + 1
160 IF n MOD i = 0 THEN 130
170 NEXT i
180 IF n <= 2 THEN 210
190 LET @(c) = n
200 LET c = c + 1
210 FOR y = 0 TO c
220 IF @(y) = 0 THEN 250
230 PRINT @(y); " ";
240 LET @(y) = 0
250 NEXT y
260 PRINT
270 NEXT x
Program encoded url: https://www.lucidapogee.com/netbasic/?listing=1%20REM%20https%3A%2F%2Frosettacode.org%2Fwiki%2FPrime_decomposition%0D%0A10%20LET%20loops%20%3D%20100%0D%0A20%20FOR%20x%20%3D%201%20TO%20loops%0D%0A30%20LET%20n%20%3D%20x%0D%0A40%20PRINT%20n%3B%20%22%20%3A%20%22%3B%0D%0A50%20LET%20c%20%3D%200%0D%0A60%20IF%20n%20MOD%202%20%3E%200%20THEN%20110%0D%0A70%20LET%20n%20%3D%20INT%28n%20%2F%202%29%0D%0A80%20LET%20%40%28c%29%20%3D%202%0D%0A90%20LET%20c%20%3D%20c%20%2B%201%0D%0A100%20IF%20n%20MOD%202%20%3D%200%20THEN%2070%0D%0A110%20FOR%20i%20%3D%203%20TO%20SQR%28n%29%20STEP%202%0D%0A120%20IF%20n%20MOD%20i%20%3E%200%20THEN%20170%0D%0A130%20LET%20n%20%3D%20INT%28n%20%2F%20i%29%0D%0A140%20LET%20%40%28c%29%20%3D%20i%0D%0A150%20LET%20c%20%3D%20c%20%2B%201%0D%0A160%20IF%20n%20MOD%20i%20%3D%200%20THEN%20130%0D%0A170%20NEXT%20i%0D%0A180%20IF%20n%20%3C%3D%202%20THEN%20210%0D%0A190%20LET%20%40%28c%29%20%3D%20n%0D%0A200%20LET%20c%20%3D%20c%20%2B%201%0D%0A210%20FOR%20y%20%3D%200%20TO%20c%0D%0A220%20IF%20%40%28y%29%20%3D%200%20THEN%20250%0D%0A230%20PRINT%20%40%28y%29%3B%20%22%20%22%3B%0D%0A240%20LET%20%40%28y%29%20%3D%200%0D%0A250%20NEXT%20y%0D%0A260%20PRINT%0D%0A270%20NEXT%20x

Code: [Select]
1 REM Prime Table
10 PRINT "Generating table of primes below..."
20 HTML
30 PRINT "<center><table><tr>"
40 FOR y = 1 TO 50
50 FOR x = 1 TO 20
60 LET i = i + 1
70 PRINT "<td style = 'border:1px solid black; background-color:yellow;'>"
80 PRINT i; ":<br /> "; PRIME(i)
90 PRINT "</td>"
100 NEXT x
110 PRINT "</tr><tr>"
120 NEXT y
130 PRINT "</tr></table></center>"
Program encoded url: https://www.lucidapogee.com/netbasic/?listing=1%20REM%20Prime%20Table%0D%0A10%20PRINT%20%22Generating%20table%20of%20primes%20below...%22%0D%0A20%20HTML%0D%0A30%20PRINT%20%22%3Ccenter%3E%3Ctable%3E%3Ctr%3E%22%0D%0A40%20FOR%20y%20%3D%201%20TO%2050%0D%0A50%20FOR%20x%20%3D%201%20TO%2020%0D%0A60%20LET%20i%20%3D%20i%20%2B%201%0D%0A70%20PRINT%20%22%3Ctd%20style%20%3D%20%27border%3A1px%20solid%20black%3B%20background-color%3Ayellow%3B%27%3E%22%0D%0A80%20PRINT%20i%3B%20%22%3A%3Cbr%20%2F%3E%20%22%3B%20PRIME%28i%29%0D%0A90%20PRINT%20%22%3C%2Ftd%3E%22%0D%0A100%20NEXT%20x%0D%0A110%20PRINT%20%22%3C%2Ftr%3E%3Ctr%3E%22%0D%0A120%20NEXT%20y%0D%0A130%20PRINT%20%22%3C%2Ftr%3E%3C%2Ftable%3E%3C%2Fcenter%3E%22

Take this simple program and encode it to a url using the IDE on the Net Basic page.
Code: [Select]
1 REM USD currency conversion
10 GET u
20 PRINT "$"; u; " USD ="
30 GET e
40 GET g
50 GET i
60 GET j
70 PRINT u * e;  " EUR"
80 PRINT u * g; " GBP"
90 PRINT u * i; " INR"
100 PRINT u * j; " JPY"


Once you get the url, add the variables to the url in upper case. Notice the U=25.99&E=.925881&G=.7924&I=82.628&J=145.96 part.

Here's the URL ready to go: https://www.lucidapogee.com/netbasic/?U=25.99&E=.925881&G=.7924&I=82.628&J=145.96&listing=1%20REM%20USD%20currency%20conversion%0D%0A10%20GET%20u%0D%0A20%20PRINT%20%22%24%22%3B%20u%3B%20%22%20USD%20%3D%22%0D%0A30%20GET%20e%0D%0A40%20GET%20g%0D%0A50%20GET%20i%0D%0A60%20GET%20j%0D%0A70%20PRINT%20u%20*%20e%3B%20%20%22%20EUR%22%0D%0A80%20PRINT%20u%20*%20g%3B%20%22%20GBP%22%0D%0A90%20PRINT%20u%20*%20i%3B%20%22%20INR%22%0D%0A100%20PRINT%20u%20*%20j%3B%20%22%20JPY%22%0D%0A
(for some reason the link broke, so you will have to copy/paste this one for it to work)

When you click the link, you will get exchange rates. Simply modify the GET variables to change the program output.


Try saving this form as a .html file and open it with your browser.
You will have a currency conversion app on your screen.
Code: [Select]
<form action = "https://www.lucidapogee.com/netbasic/" target = "output" method = "get">
<p>
U<br /><input type = "text" name = "U" value = "1"><br />
E<br /><input type = "text" name = "E" value = ".925881"><br />
G<br /><input type = "text" name = "G" value = ".7924"><br />
I<br /><input type = "text" name = "I" value = "82.628"><br />
J<br /><input type = "text" name = "J" value = "145.96">
</p>
<input type = "hidden" name = "listing" value = "1%20REM%20USD%20currency%20conversion%0D%0A10%20GET%20u%0D%0A20%20PRINT%20%22%24%22%3B%20u%3B%20%22%20USD%20%3D%22%0D%0A30%20GET%20e%0D%0A40%20GET%20g%0D%0A50%20GET%20i%0D%0A60%20GET%20j%0D%0A70%20PRINT%20u%20*%20e%3B%20%20%22%20EUR%22%0D%0A80%20PRINT%20u%20*%20g%3B%20%22%20GBP%22%0D%0A90%20PRINT%20u%20*%20i%3B%20%22%20INR%22%0D%0A100%20PRINT%20u%20*%20j%3B%20%22%20JPY%22%0D%0A">
<input type = "submit">
</form>
<iframe name = "output"></iframe>
« Last Edit: October 05, 2023, 01:57:03 PM by Gemino Smothers »

Offline John

  • Forum Support / SB Dev
  • Posts: 3591
    • ScriptBasic Open Source Project
Re: Net Basic - a BASIC in PHP
« Reply #1 on: October 05, 2023, 04:20:45 PM »
Nice feature!

Control Solutions uses ScriptBasic in a few of their controllers. It has a web interface based interpreter as well.




Offline Gemino Smothers

  • BASIC Developer
  • Posts: 24
    • Lucid Apogee
Re: Net Basic - a BASIC in PHP
« Reply #2 on: October 05, 2023, 07:28:08 PM »
I need to keep Script Basic in mind as a web programming language.. Server side scripting and all.

Offline John

  • Forum Support / SB Dev
  • Posts: 3591
    • ScriptBasic Open Source Project
Re: Net Basic - a BASIC in PHP
« Reply #3 on: October 05, 2023, 08:44:49 PM »
I have a remote socket based console debugger that works with the ScriptBasic web server.

https://allbasic.info/forum/index.php?topic=393.msg4317#msg4317
« Last Edit: October 05, 2023, 08:48:32 PM by John »