struct StringsBase *StringsBase=0L; /*#define RUN*/ #ifdef RUN char *ToUpperCpy(d,s) register char *d,*s; { register char c,*p; if(d) { p=d; c=*s++; do { if(c>='a') if(c<='z') c&=223; *p++=c; c=*s++; } while(c); *p=0; } return d; }; /* $VER: ToUpper feb06 0.1 */ #endif long test(s) char *s; { long el=0,l=StrLen(s); char os[256],d[128],*p; sprintf(os,"<%s>",s); if(s) { printf("%29s ",os); p=(char *)ToUpperCpy(d,s); sprintf(os,"<%s>",d); printf(" %29s %8x %ld\n",os,p,l); } if(!s) p=(char *)ToUpper(s,s), printf("ZEROPOINTER return = %x\n",p); return el; } int main() { /* MAIN */ long el; StringsBase=(struct StringsBase *)OpenLibrary("Strings.library",0); puts(" inputstring \t\t outputstring\t\t return len"); el=test("TESTING ToUpperCpy"); el=test("abcdefghijklmnopqrstuvwxyz "); el=test("!@#$%^&*()__+|1234567890"); el=test("ABCDEF GHIJKL MNOPQ RSTUV"); el=test("WXYZ \[];',../<>{}:<>?"); el=test("a"); el=test("B"); el=test(""); el=test(0); if(StringsBase) CloseLibrary(StringsBase); return 0; } /* END */ #ifdef COMMENT _ToUpperCpy: link a5,#0 move.l 8(a5),a0 move.l 12(a5),a1 move.l a0,d0 cmp.l #0,a0 beq ToUpperCpyEnd move.b (a1)+,d1 ToUpperCpyLoop: cmp.b #97,d1 blt ToUpperCpyJump cmp.b #122,d1 bgt ToUpperCpyJump and.b #223,d1 ToUpperCpyJump: move.b d1,(a0)+ move.b (a1)+,d1 bne ToUpperCpyLoop clr.b (a0) ToUpperCpyEnd: unlk a5 rts ; mrz06 inputstring outputstring return len 2874C0 18 2874C0 27 2874C0 24 2874C0 25 {}:<>?> {}:<>?> 2874C0 21 2874C0 1 2874C0 1 <> <> 2874C0 0 ZEROPOINTER return = 0 #endif