diff options
Diffstat (limited to 'do/join')
-rw-r--r-- | do/join | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/do/join b/do/join deleted file mode 100644 index c5c5220099..0000000000 --- a/do/join +++ /dev/null @@ -1,45 +0,0 @@ -void -do_join(TARG,arglast) -register STR *TARG; -int *arglast; -{ - register STR **st = stack->ary_array; - int sp = arglast[1]; - register int items = arglast[2] - sp; - register char *delim = str_get(st[sp]); - register STRLEN len; - int delimlen = st[sp]->str_cur; - - st += sp + 1; - - len = (items > 0 ? (delimlen * (items - 1) ) : 0); - if (TARG->str_len < len + items) { /* current length is way too short */ - while (items-- > 0) { - if (*st) - len += (*st)->str_cur; - st++; - } - STR_GROW(TARG, len + 1); /* so try to pre-extend */ - - items = arglast[2] - sp; - st -= items; - } - - if (items-- > 0) - str_sset(TARG, *st++); - else - str_set(TARG,""); - len = delimlen; - if (len) { - for (; items > 0; items--,st++) { - str_ncat(TARG,delim,len); - str_scat(TARG,*st); - } - } - else { - for (; items > 0; items--,st++) - str_scat(TARG,*st); - } - STABSET(TARG); -} - |