(* Tel woorden
    {{TEL ... }}    Tel woorden en tekens in tekst
    {{SOM ... }}    Tel getallen in tekst op
    C,, ... align   Zet rij getallen in geheugen met C,
*)

: {{TEL     ( ccc -- #t #w )  \ Tel woorden en tekens in tekst
    decimal  0 ( woorden )  0 ( karakters )
    begin
        bl-word count       \ Vis volgende woord op
        tuck  s" }}" s<>    \ Is het niet het afsluitende woord?
    while
        +  >r 1+ r>         \ Verhoog karakters en woorden
    repeat
    drop  swap ;


: {{SOM     ( ccc -- som )  \ Tel getallen in tekst op (V1)
    base @ >r  decimal  0. ( Som )
    begin
        bl-word count 2>r   \ Vis volgende woord op
    2r@ s" }}" s<> while    \ Is het niet het afsluitende woord?
        0. 2r> >number      \ Zet om naar dubbel getal
        nip 0= if  d+  else  2drop  then \ Tel op als het getal ok is
    repeat
    rdrop rdrop  r> base !  drop ;


: C,,       ( ccc -- )  \ Compileer een byte getallen rij
    begin
        0.  bl-word count >number dup
    0= while            \ Hele string omgezet?
        2drop  drop  c, \ Compileer byte
    repeat
    2swap or ?abort  evaluate ;


\ Alternatieve {{SOM met kennis van INSIDE words (-20 bytes).
v: inside
: {{SOM     ( ccc -- )  \ Tel getallen in tekst op (V2)
    base @ >r decimal  0
    begin
        bl-word count 2>r
    2r@ s" }}" s<> while
        2r> number? 0= if  drop  +  else  2drop  then
    repeat
    rdrop rdrop  r> base ! ;

decimal
