=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    Date: Fri, 21 Apr 2000  06:53:31
    From: Nikolai Golovchenko <golovchenko-at-mail.ru>
      To: pic microcontroller discussion list <PICLIST-at-MITVMA.MIT.EDU>
 Subject: Re: Piclist, code generator by Nikolai Golovchenko, delimiters ?
--------------------------------------------------------------------------------

Hi Kübek,

Thanks for your response.
I did thought about how let users specify delimiters, but I was
reluctant to do so since no one asked :) Check out the page in a
couple of days.

Comments below.

Bye,
 Nikolai

On Thursday, April 20, 2000 Kübek Tony wrote:
> Hi ( Nikolai in particular ),

> I'm a bit confused about one part of the generated code,
> tried to follow it but think I failed. As far as I can tell
> there is no way to specify the delimiters one wants when
> requesting code to be generated ? 
> It seems like the delimiter check always will end up like:

> parse_state_delimiter                                    
> ;called from state table to check for end of name        
>         movwf parse_state                                
>         movfw parse_char ; w = X                                
>         skpnz                                            
>          retlw 0        ; W==0 -> X == 0

Here it checks if this is the end of a zero terminated string. Useful
when reading characters from a string.

>         addlw -' '  ; in MPASM = ADDLW 0xE0 ; w = x+0xE0   
>         skpnz                                            
>          retlw 0    ; W==0 -> X == 0x1F ?

Checks if the character is space, which is regarded as a delimiter.
-' ' gets translated into 256 - ' '. So if character is space, you get
256 - ' ' + ' ', which is zero. Just a universal and clear :) way to
check bytes for equality. You can see this everywhere in the generated
code. For example, if I wanted to test accumulator for say 'a' and 'b',
it would look like
        addlw -'a'      ;substract 'a' from accumulator
        skpnz
         retlw 1        ;w == 'a'
        addlw 'a'       ;restore accumulator
        addlw -'b'
        skpnz
         retlw 2        ;w == 'b'
Or a bit shorter,
        addlw -'a'      ;substract 'a' from accumulator
        skpnz
         retlw 1        ;w == 'a'
        addlw 'a' - 'b' ;restore accumulator and substract 'b'
        skpnz
         retlw 2        ;w == 'b'

>         addlw ' ' - '\t'   ; in MPASM = ADDLW 0x17 ; w = X+0xE0+0x17 
>         skpnz                                            
>          retlw 0    ; W==0 -> X == 0x08 ?

Is it tab?

>         addlw '\t' - '('   ; in MPASM = ADDLW 0xE1 ; w =
> X+0xE0+0x17+0xE1                            
>         skpnz                                            
>          retlw 0    ; W==0 -> X == 0x27 ?
>         retlw 255           

Is it '('? If not '(' then return error (w=255).
May be useful if keywords are functions like WriteEE(14, 1).

> Which I 'think' means the following:
> Delimiters 'accepted' ( return with w=0 ) are:

> 1 - 0x00 = 'NULL', this one is ok by me
> 2 - 0x1F = 'US' ,??? 
> 3 - 0x08 = 'BS' ,???
> 4 - 0x27 = ''' , ???

It is '\0', ' ', '\t', and ')'.

> All else will 'fail' and return with 255 in w
> ( there are no comments on these lines, so it's a bit hard to tell what
> they do )
> ( and I'm guessing that used radix could affect the result )

Yes, radix affects the result. I always assume decimal radix. It would
be easy though to replace 255 and such with 0xFF.

> What am i getting wrong with this, I dont understand any
> of these delimiters accept the 'NULL' one. Why choosing
> such strange characters ? ( or, which I think, my 'guessing' is wrong ).
> Wouldn't it be more 'logical' to use 0x0D 'CR', 0x0A 'LF' or 0x0x03
> 'ETX' ?

I'll change the form to include any delimiters you wish, but they must
be one byte long. So if you want to skip newline (0x0D, 0x0A), specify
0x0D as a delimiter, and 0x0a as a whitespace.

> /Tony


> PS Many thanks to Nikolai Golovchenko, excellent code generator DS 



> Tony Kübek, Flintab AB            
> ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²
> E-mail: tony.kubek-at-flintab.com
> ²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²²