Annotation of qemu/roms/openbios/forth/lib/split.fs, revision 1.1.1.1

1.1       root        1: \ implements split-before, split-after and left-split 
                      2: \ as described in 4.3 (Path resolution)
                      3: 
                      4: \ delimeter returned in R-string
                      5: : split-before ( addr len delim -- addr-R len-R addr-L len-L ) 
                      6:   0 rot dup >r 0 ?do
                      7:     ( str char cnt R: len <sys> )
                      8:     2 pick over + c@ 2 pick = if leave then
                      9:     1+
                     10:   loop
                     11:   nip
                     12:   2dup + r> 2 pick -
                     13:   2swap
                     14: ;
                     15: 
                     16: \ delimeter returned in L-string
                     17: : split-after ( addr len delim -- addr-R len-R addr-L len-L ) 
                     18:   over 1- rot dup >r 0 ?do
                     19:     ( str char cnt R: len <sys> )
                     20:     2 pick over + c@ 2 pick = if leave then
                     21:     1-
                     22:        loop
                     23:   nip
                     24:        dup 0 >= if 1+ else drop r@ then
                     25:        2dup + r> 2 pick -
                     26:   2swap
                     27: ;
                     28: 
                     29: \ delimiter not returned
                     30: : left-split ( addr len delim -- addr-R len-R addr-L len-L )
                     31:   0 rot dup >r 0 ?do
                     32:     ( str char cnt R: len <sys> )
                     33:     2 pick i + c@ 2 pick = if leave then
                     34:     1+
                     35:   loop
                     36:   nip
                     37:   2dup + 1+ r> 2 pick -
                     38:   dup if 1- then
                     39:   2swap
                     40: ;
                     41: 
                     42: \ delimiter not returned [THIS FUNCTION IS NOT NEEDED]
                     43: : right-split ( addr len delim -- addr-R len-R addr-L len-L )
                     44:        dup >r
                     45:        split-after
                     46:        dup if 2dup + 1-
                     47:                c@ r@ = if 1- then then
                     48:        r> drop
                     49: ;
                     50: 
                     51: \ split <param-text> into separate path and device strings
                     52: : split-path-device  ( str len -- pathstr len devstr len )
                     53:   ascii , left-split 2 pick 0= if
                     54:     \ No comma - so either <dev>:<id> or <dev>:<id><path>
                     55:     2dup ascii \ strchr 0= if
                     56:       \ No backslash so just <dev> or <dev>:<id>
                     57:       s" " 2swap       \ ( pathstr len devstr len )
                     58:     else
                     59:       \ Contains backslash, must be a <dev>:<id><path>
                     60:       ascii : left-split       \ ( pathstr len devstr len )
                     61:     then
                     62: 
                     63:     \ Remove RHS split (unused)
                     64:     4 roll drop
                     65:     4 roll drop
                     66:   else
                     67:     \ Contains comma so split is already correct
                     68:   then
                     69: ;
                     70: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.