Sujet : Re: Reverse SCAN SPLIT
De : melahi_ahmed (at) *nospam* yahoo.fr (Ahmed)
Groupes : comp.lang.forthDate : 07. Oct 2024, 20:25:20
Autres entêtes
Organisation : novaBBS
Message-ID : <c3785784f01b2fe23fc3613d9144c93e@www.novabbs.com>
References : 1 2 3 4
User-Agent : Rocksolid Light
On Mon, 7 Oct 2024 12:07:16 +0000, dxf wrote:
..
Interesting. I'd do the numeric conversion in the main routine if
possible.
There's a parsing issue with s" :30"
And what about this:
: :t ( add cnt -- add 2 1 | add1 2 add2 2 2 | add1 2 add2 2 add3 2 3)
bounds ( end start)
dup ( end start start)
>r ( end start ) ( r: start)
swap ( start end ) ( r: start)
dup ( start end pa)
-rot ( pa start end )
do ( pa)
i ( pa add)
c@ ( pa c)
[char] : = ( pa f)
if ( pa)
i ( pa add)
- ( pa-add)
dup ( pa-add pa-add)
2 ( pa-add pa-add 2)
> ( pa-add t|f)
if ( pa-add)
drop ( )
i ( add)
dup ( add add)
1+ ( add add+1)
2 ( add add+1 2)
rot ( add+1 2 add)
else ( pa-add)
1 = if ( )
s" 00" ( add 2)
i ( add 2 add)
else ( )
i ( add)
dup 1+ 1 ( add add+1 1)
rot ( add+1 1 add)
then
then
then
-1 +loop ( ... add+1 1|2 pa)
r> ( pa start)
tuck ( start pa start)
- ( start pa-st)
dup 0= if 2drop s" 00" then
;
: .t ( s_add s_cnt m_add m_cnt h_add h_cnt)
type space ." hr" space
type space ." min" space
type space ." sec"
;
with stack juggling !!!!!!!!!!
Some tests:
s" 10:1:2" :t .t 10 hr 1 min 2 sec ok
s" :10:" :t .t 00 hr 10 min 00 sec ok
s" ::" :t .t 00 hr 00 min 00 sec ok
s" ::1" :t .t 00 hr 00 min 1 sec ok
s" :10:1" :t .t 00 hr 10 min 1 sec ok
s" :10:" :t .t 00 hr 10 min 00 sec ok
s" 10:10:" :t .t 10 hr 10 min 00 sec ok
s" 10::" :t .t 10 hr 00 min 00 sec ok
Ahmed