Here's the result, which could be easily tuned by using a predefined array to speedup the Ucase(Chr()) part...
Code: Select all
#CharMult= #PB_Compiler_Unicode
#CharByte= #CharMult+1
Procedure.s StrTrim(*s.Character,*trim.Character,DoCase=#True)
Protected *c.Character
Protected *l.Character
Protected *r.Character
Protected mode;char,chck
Debug "----------------------------------------------------"
Debug "Remove '"+PeekS(*trim)+"' with"+Left("out",1!DoCase*3)+" case:"
*l=*s
While *s\c
*c=*trim
If DoCase
While *c\c
If *s\c=*c\c
mode+1
Break
EndIf
*c+#CharByte
Wend
Else
While *c\c
If UCase(Chr(*s\c))=UCase(Chr(*c\c)); see text
mode+1
Break
EndIf
*c+#CharByte
Wend
EndIf
*s+#CharByte
Select mode
Case 0;
mode=4;
*r=*s
Case 1,3;
mode=2
*l=*s
Case 2,4;
mode=4;
*r=*s;
Case 5
mode=4;
EndSelect
Wend
If *r<*l; mode=2
ProcedureReturn ""
EndIf
ProcedureReturn PeekS(*l,(*r-*l)>>#CharMult)
EndProcedure
s.s="****Purebasic is pure****"
Debug s
Debug StrTrim(@s,@"*")
Debug StrTrim(@s,@"*pure")
Debug StrTrim(@s,@"*PURE")
Debug StrTrim(@s,@"*PURE",#Null)