struct StringsBase *StringsBase=0L; /*#define RUN*/ #ifdef RUN char *StrnRv(s,l) register char *s; register long l; { register char *cs,*sp,c; cs=sp=s; if( (*cs) && (l>1) ) { do ; while((*sp++) && l--); sp--; sp--; do { c=*cs; *cs=*sp; *sp=c; cs++; sp--; } while (cs n = %ld ",s,l); printf(" out = <%s> <%s>\n",StrnRv(s,l),s); return 0; /* */ } int main() { /* MAIN */ long el=0; StringsBase=(struct StringsBase *)OpenLibrary("Strings.library",0); el=test("testStrRv",12); el=test("string",9); el=test("abc",6); el=test("ab",6); el=test("a",6); el=test("",3); el=test("abcd",0); el=test("abcd",1); el=test("abcd",2); el=test("abcd",3); el=test("abcd",4); el=test("abcd",5); if(StringsBase) CloseLibrary(StringsBase); return el; } /* END */ #ifdef COMMENT _StrnRv: movem.l a2,-(sp) move.l A0,A2 move.l A2,A1 tst.b (A1) beq StrnRv2 moveq.l #1,D1 cmp.l D0,D1 bge StrnRv2 StrnRv4: move.l A2,A3 addq.l #$01,A2 tst.b (A3) beq StrnRv17 move.l D0,D1 subq.l #$01,D0 tst.l D1 bne StrnRv4 StrnRv17: subq.l #$02,A2 StrnRv7: move.b (A1),D1 move.b (A2),(A1)+ move.b D1,(A2) subq.l #$01,A2 cmp.l A1,A2 bhi StrnRv7 StrnRv2: move.l A0,D0 movem.l (sp)+,A2 RTS s = n = 12 out = s = n = 9 out = s = n = 6 out = s = n = 6 out = s = n = 6 out = s = <> n = 3 out = <> <> s = n = 0 out = s = n = 1 out = s = n = 2 out = s = n = 3 out = s = n = 4 out = s = n = 5 out = #endif