[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]

    {*****************************************************************************
     * Function ...... Rat()
     * Purpose ....... Locate the last occurance of a substring in a string
     * Parameters .... sub        Substring to locate
     *                 s          String to look for <sub> in
     * Returns ....... Numeric last position of <sub> in s, counting from
     *                 left to right.
     * Notes ......... None
     * Author ........ Martin Richardson
     * Date .......... October 2, 1992
     *****************************************************************************}
    FUNCTION Rat( sub: STRING; s: STRING ): BYTE; ASSEMBLER;
    VAR
       nResult: WORD;
    ASM
          PUSH    DS
          XOR     CX, CX
          XOR     BX, BX

          LDS     SI, sub
          XOR     AX, AX
          LODSB
          XCHG    BX, AX

          CMP     BX, 0
          JBE     @@3

          LES     DI, s
          LODSB
          MOV     DX, AX
          CMP     DX, 0
          JBE     @@3

          CMP     BX, DX
          JAE     @@3

          DEC     BX
          CLD
    @@1:  MOV     SI, WORD PTR sub
          INC     SI
          LODSB

          MOV     CX, DX
          REPNE   SCASB
          JNZ     @@3

          MOV     DX, CX
          MOV     CX, BX
          REPE    CMPSB
          JZ      @@4

          ADD     DI, CX
          SUB     DI, BX
    @@2:  CMP     DX, BX
          JA      @@1
    @@3:  XOR     AL, AL
          JMP     @@5
    @@4:  SUB     DI, BX
          DEC     DI
          SUB     DI, WORD PTR s
          MOV     nResult, DI
          ADD     DI, WORD PTR s
          ADD     DI,CX
          INC     DI
          JMP     @@2
    @@5:
          MOV     AX, nResult
          POP     DS
    END;

[Back to STRINGS SWAG index] [Back to Main SWAG index] [Original]