struct        StringsBase     *StringsBase=0L;

/*#define RUN*/
#ifdef  RUN

char *StrCatUntilStrStr(ds,s,ss) char *ds,*s,*ss; {    /*  */
  char *p,*endp,*dp=ds;
  if(dp) {
   do; while(*dp++); *--dp=0;
   p=s; endp=(char *)StrStr(s,ss); if(!endp) dp=0;
   if(!*ss) endp=0;      if(endp==p) endp=0;
   if(endp) { do *dp++=*p++; while(p<endp); *dp=0; }
  }
  return dp;                    /* $VER: StrCatUntilStrStr 24oct03 0.1  */
 };
#endif

long test(ds,s,ss) char *ds,*s,*ss; {
  long el=0; char  *p;  printf("<%8s>%2ld",ds,StrLen(ds));
  p=(char *)StrCatUntilStrStr(ds,s,ss);
  printf("<%12s>%3ld %7x <%6s> %3ld%7x<%6s>%3ld%7x\n",s,StrLen(s),s,
  ss,StrLen(ss),ss,ds,StrLen(ds),p);
  if(!ds) puts("ZERO POINTER as destination");
  return el; /*  */
 }

int main() {                            /* MAIN */
  long el=0; char s[1024],as[1024]; el--;
  StringsBase=(struct StringsBase *)OpenLibrary("Strings.library",0);
  puts("   Input  Len     String   Len  Adr     Search   Len  Adr  Output Len RetAdr");
  StrCpy(as,"StrCpyStr");  StrCpy(s,"test"); el=test("test",as,"Cpy");
  el=test("test",as,"CpyStr"); el=test("t",as,"S");
  el=test("test",as,"Until"); el=test("test",as,"not");
  el=test("test",as,""); el=test("",as,"C"); el=test("","","a");
  el=test("","",""); el=test("",0,""); el=test("",as,"Cpy");
  el=test("",as,"CpyStr"); el=test("",as,"S"); el=test("",as,"Until");
  el=test("",as,"not"); el=test("",as,""); el=test("",as,"C");
  el=test("","","a"); el=test("","",""); el=test(0,0,"");
  if(StringsBase)  CloseLibrary(StringsBase);
  return el;
 }                                                             /* END */
/*
   Input  Len     String   Len  Adr     Search   Len  Adr  Output Len RetAdr
<    test> 4<   StrCpyStr>  9  271958 <   Cpy>   3 220158<testStr>  7 220163
<    test> 4<   StrCpyStr>  9  271958 <CpyStr>   6 22014C<testStr>  7 22015A
<       t> 1<   StrCpyStr>  9  271958 <     S>   1 220148<     t>  1 22014B
<    test> 4<   StrCpyStr>  9  271958 < Until>   5 22013D<  test>  4      0
<    test> 4<   StrCpyStr>  9  271958 <   not>   3 220134<  test>  4      0
<    test> 4<   StrCpyStr>  9  271958 <      >   0 22012E<  test>  4 220133
<        > 0<   StrCpyStr>  9  271958 <     C>   1 22012B<   Str>  3 220130
<        > 0<            >  0  220129 <     a>   1 220127<      >  0      0
<        > 0<            >  0  220125 <      >   0 220124<      >  0 220126
<        > 0<            >  0       0 <      >   0 220122<      >  0      0
<        > 0<   StrCpyStr>  9  271958 <   Cpy>   3 22011D<   Str>  3 220124
<        > 0<   StrCpyStr>  9  271958 <CpyStr>   6 220115<   Str>  3 22011F
<        > 0<   StrCpyStr>  9  271958 <     S>   1 220112<      >  0 220114
<        > 0<   StrCpyStr>  9  271958 < Until>   5 22010B<      >  0      0
<        > 0<   StrCpyStr>  9  271958 <   not>   3 220106<      >  0      0
<        > 0<   StrCpyStr>  9  271958 <      >   0 220104<      >  0 220105
<        > 0<   StrCpyStr>  9  271958 <     C>   1 220101<   Str>  3 220106
<        > 0<            >  0  2200FF <     a>   1 2200FD<      >  0      0
<        > 0<            >  0  2200FB <      >   0 2200FA<      >  0 2200FC
<        > 0<            >  0       0 <      >   0 2200F8<      >  0      0

*/
