home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Windows Gam…ming Gurus (2nd Edition) / Disc2.iso / vc98 / crt / src / platform / strrchr.asm < prev    next >
Assembly Source File  |  1998-06-17  |  3KB  |  93 lines

  1.         page    ,132
  2.         title   strrchr - find last occurence of character in string
  3. ;***
  4. ;strrchr.asm - find last occurrence of character in string
  5. ;
  6. ;       Copyright (c) 1985-1997, Microsoft Corporation. All rights reserved.
  7. ;
  8. ;Purpose:
  9. ;       defines strrchr() - find the last occurrence of a given character
  10. ;       in a string.
  11. ;
  12. ;*******************************************************************************
  13.  
  14.         .xlist
  15.         include cruntime.inc
  16.         .list
  17.  
  18. page
  19. ;***
  20. ;char *strrchr(string, ch) - find last occurrence of ch in string
  21. ;
  22. ;Purpose:
  23. ;       Finds the last occurrence of ch in string.  The terminating
  24. ;       null character is used as part of the search.
  25. ;
  26. ;       Algorithm:
  27. ;       char *
  28. ;       strrchr (string, ch)
  29. ;             char *string, ch;
  30. ;             {
  31. ;             char *start = string;
  32. ;
  33. ;             while (*string++)
  34. ;                     ;
  35. ;             while (--string != start && *string != ch)
  36. ;                     ;
  37. ;             if (*string == ch)
  38. ;                     return(string);
  39. ;             return(NULL);
  40. ;             }
  41. ;
  42. ;Entry:
  43. ;       char *string - string to search in
  44. ;       char ch - character to search for
  45. ;
  46. ;Exit:
  47. ;       returns a pointer to the last occurrence of ch in the given
  48. ;       string
  49. ;       returns NULL if ch does not occurr in the string
  50. ;
  51. ;Uses:
  52. ;
  53. ;Exceptions:
  54. ;
  55. ;*******************************************************************************
  56.  
  57.         CODESEG
  58.  
  59.         public  strrchr
  60. strrchr proc \
  61.         uses edi, \
  62.         string:ptr byte, \
  63.         chr:byte
  64.  
  65.         mov     edi,[string]    ; di = string
  66.         xor     eax,eax         ; al=null byte
  67.         or      ecx,-1          ; cx = -1
  68. repne   scasb                   ; find the null & count bytes
  69.         inc     ecx             ; cx=-byte count (with null)
  70.         neg     ecx             ; cx=+byte count (with null)
  71.         dec     edi             ; di points to terminal null
  72.         mov     al,chr          ; al=search byte
  73.         std                     ; count 'down' on string this time
  74. repne   scasb                   ; find that byte
  75.         inc     edi             ; di points to byte which stopped scan
  76.  
  77.         cmp     [edi],al        ; see if we have a hit
  78.         je      short returndi  ; yes, point to byte
  79.  
  80.         xor     eax,eax         ; no, return NULL
  81.         jmp     short toend     ; do return sequence
  82.  
  83. returndi:
  84.         mov     eax,edi         ; ax=pointer to byte
  85.  
  86. toend:
  87.         cld
  88.  
  89.         ret                     ; _cdecl return
  90.  
  91. strrchr endp
  92.         end
  93.