Previous | Contents | Next

C.4 Search in a string

 ; StrStr

 ; input, top of stack = string to search for

 ;        top of stack-1 = string to search in

 ; output, top of stack (replaces with the portion of the string remaining)

 ; modifies no other variables.

 ;

 ; Usage:

 ;   Push "this is a long ass string"

 ;   Push "ass"

 ;   Call StrStr

 ;   Pop $R0

 ;  ($R0 at this point is "ass string")



 Function StrStr

   Exch $R1 ; st=haystack,old$R1, $R1=needle

   Exch    ; st=old$R1,haystack

   Exch $R2 ; st=old$R1,old$R2, $R2=haystack

   Push $R3

   Push $R4

   Push $R5

   StrLen $R3 $R1

   StrCpy $R4 0

   ; $R1=needle

   ; $R2=haystack

   ; $R3=len(needle)

   ; $R4=cnt

   ; $R5=tmp

   loop:

     StrCpy $R5 $R2 $R3 $R4

     StrCmp $R5 $R1 done

     StrCmp $R5 "" done

     IntOp $R4 $R4 + 1

     Goto loop

 done:

   StrCpy $R1 $R2 "" $R4

   Pop $R5

   Pop $R4

   Pop $R3

   Pop $R2

   Exch $R1

 FunctionEnd

Previous | Contents | Next