struct        StringsBase     *StringsBase=0L;
extern char *SetUntilChar();

#ifdef RUN
char *SetUntilChar(s,cc) register char *s;  register char cc;  {
  register  char c,*p=s; if(s){p--;do { c=*++p; if(c==cc) c=0; } while(c); }
  return p; 
 }                                 /* $VER: SetUntilChar repeat loop 0.1 */
#endif

long test(s,c) char *s; char c; {
  long el=0; char *p;  char bs[256]; sprintf(bs,"<%s>",s);
  printf(" %11s  %ld      %4c     %10x",bs,(long)strlen(s),c,s);
  p=SetUntilChar(s,c);  sprintf(bs,"<%s>",p);
  printf("%10s  %4ld   %10x\n",bs,(long)strlen(p),p);
  return el;
 }

main() {
  char s[256],*p; long el=0; el++;
  StringsBase=(struct StringsBase *)OpenLibrary("Strings.library",0);
  puts("    String   len   Searchchar      Adr        Out     len       Adr");
  el=test("  Dieees",'e'); el=test("  Dies ",'e'); el=test("test",'s');
  el=test("AA",'A'); el=test("A",'A'); el=test("  Dies ",'X');
  el=test("test",0); el=test("",'s'); el=test(0,'s');
  if(StringsBase) CloseLibrary(StringsBase);
 } /*hcc: version 2.0  Copyright (c) 1988,1989,1991 by Sozobon, Limited.*/
/*  Amiga Version 1.1 by Detlef Würkner.

register  char c,*p=s; if(s){p--;do { c=*++p; if(c==cc) c=0; } while(c); }
        move.l  8(a5),a2
        move.b  15(a5),d3
        move.l  a2,a3
        cmp.l   #0,a2
        beq     L3
        subq.l  #1,a3
L4:     addq.l  #1,a3
        move.b  (a3),d4
        cmp.b   d3,d4
        bne     L5
        clr.b   d4
L5:     tst.b   d4
        bne     L4
L3:     move.l  a3,d0

               cmp.l   #0,a0
               beq     SetUntilChar3
SetUntilChar4: move.b  (a0)+,d1
               cmp.b   d0,d1
               bne     SetUntilChar5
               clr.b   d1
SetUntilChar5: tst.b   d1
               bne     SetUntilChar4
               subq.l  #1,a0
SetUntilChar3: move.l  a0,d0
               rts
    String   len   Searchchar  Out  len   Adr
  <  Dieees>  8         e    <eees>  4   2685C0
   <  Dies >  7         e     <es >  3   2685B8
      <test>  4         s      <st>  2   2685B1
        <AA>  2         A      <AA>  2   2685AC
         <A>  1         A       <A>  1   2685AA
   <  Dies >  7         X        <>  0   2685A9
      <test>  4                  <>  0   2685A1
          <>  0         s        <>  0   26859C
          <>  0         s        <>  0   0
*/
