[Coco] The Coco's first webserver, written in Basic09

Christian Lesage hyperfrog at gmail.com
Wed Dec 30 20:17:27 EST 2009


I don't understand where you are heading to with this. You would need 
more than an expression evaluator in order to program a server that can 
generate dynamic content. In JavaScript, for instance, the eval() 
function parses the string it is given as a parameter, looking for 
JavaScript code. If it finds any JavaScript code, it will be executed. 
If you want to simulate the same behaviour in BASIC09, you will end up 
writing a complete BASIC09 interpreter on top of the underlying one, 
unless you find a way to inject an arbitrary string in the latter.

Hint: Use RUN.



Wayne Campbell wrote:
> OK. I did a little. I really don't know what I'm doing here, but this 
> is what I got for a start. There are many problems. First, Basic09's 
> precedence ordering acts on the expression as follows:
>
> 2*3+5/2
>
> is evaluated as
>
> 2*3/2+5, yielding a result of 8
>
> To get the result of 5 (what we're looking for), it would have to be 
> written as
>
> (2*3+5)/2 (the remainder of 1 is dropped)
>
> Because I am parsing the string "as I go", I am getting incorrect 
> results. Not just 8 iunstead of 5, I am getting wierd numbers. It also 
> does not account for numbers greater than 1 digit in length. Hopefully 
> someone else can make the necessary corrections/modifications. I 
> simply don't understand enough to do it right.
>
> Wayne
>
> PROCEDURE eval
> DIM a,b,c,d,e,f:INTEGER
> DIM mul,div,add,sub:BOOLEAN
> DIM inputStr:STRING
> a:=0 \b:=0 \c:=0 \d:=0 \e:=0 \f:=0
> mul:=FALSE \div:=FALSE \add:=FALSE \sub:=FALSE
> inputStr:="2*3+5/2"
> REM a:=(2*3+5)/2
> FOR b:=1 TO LEN(inputStr)
>  IF MID$(inputStr,b,1)>="0" AND MID$(inputStr,b,1)<="9" THEN
>    IF c=0 THEN
>      c:=VAL(MID$(inputStr,b,1))
>    ELSE IF d=0 THEN
>      d:=VAL(MID$(inputStr,b,1))
>      GOSUB 10
>    ELSE IF e=0 THEN
>      e:=VAL(MID$(inputStr,b,1))
>      GOSUB 10
>    ELSE IF f=0 THEN
>      f:=VAL(MID$(inputStr,b,1))
>      GOSUB 10
>    ENDIF \ENDIF \ENDIF \ENDIF
>  ELSE
>    IF MID$(inputStr,b,1)="*" THEN
>      mul:=TRUE
>    ELSE IF MID$(inputStr,b,1)="/" THEN
>      div:=TRUE
>    ELSE IF MID$(inputStr,b,1)="+" THEN
>      add:=TRUE
>    ELSE IF MID$(inputStr,b,1)="-" THEN
>      sub:=TRUE
>    ENDIF \ENDIF \ENDIF \ENDIF
>  ENDIF
> NEXT b
> PRINT a
> END
> 10 IF mul THEN
>  a:=a+c*d
>  mul:=FALSE
> ELSE IF div THEN
>  a:=a/e
>  div:=FALSE
> ELSE IF add THEN
>  a:=a+f
>  add:=FALSE
> ENDIF \ENDIF \ENDIF
> RETURN
>
> ----- Original Message ----- From: "Christian Lesage" 
> <hyperfrog at gmail.com>
> To: "CoCoList for Color Computer Enthusiasts" <coco at maltedmedia.com>
> Sent: Wednesday, December 30, 2009 7:44 AM
> Subject: Re: [Coco] The Coco's first webserver, written in Basic09
>
>
>> If BASIC09 has an EVAL statement (I can't remember), you could easily 
>> program an ASP-like server. That would be pretty cool. I did that 
>> using another BASIC-like language a few years ago. I started from 
>> scratch, and the server was small, but good enough for small projects.
>>
>> Christian
>>
>>
>> -- 
>> Coco mailing list
>> Coco at maltedmedia.com
>> http://five.pairlist.net/mailman/listinfo/coco 
>
>
> -- 
> Coco mailing list
> Coco at maltedmedia.com
> http://five.pairlist.net/mailman/listinfo/coco
>




More information about the Coco mailing list