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 4 2685C0 < Dies > 7 e 3 2685B8 4 s 2 2685B1 2 A 2 2685AC 1 A 1 2685AA < Dies > 7 X <> 0 2685A9 4 <> 0 2685A1 <> 0 s <> 0 26859C <> 0 s <> 0 0 */