Annotation of qemu/roms/openbios/forth/lib/split.fs, revision 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.