home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / dpl.zip / FSTRNG.D < prev    next >
Text File  |  1988-07-11  |  2KB  |  80 lines

  1. ; Doug's Programming Language  -- DPL, Version 2.22
  2. ; Copyright (c) 1988 Douglas S. Cody, All rights reserved.
  3. ;-------------------------------------------
  4. ; F S T R N G  -- FIND A MATCH IN A SUBSTRING
  5. ;
  6. ; Entry Conditions:
  7. ;    AX holds the match string offset
  8. ;    BX holds the target string offset
  9. ; Exit conditions:
  10. ;    Assume all working registers modified
  11. ;    CARRY set   = no match
  12. ;          clear = match found
  13. ;         AX holds the offset from the start
  14. ;            of the target string to the match
  15. ;
  16. ; Calling Example:
  17. ;
  18. ;    DEFINE    M00,'this is a test'
  19. ;    DEFINE    M01,'is'
  20. ;    ;
  21. ;    CALL    FSTRNG M01 M00
  22. ;
  23. ; Calling results:
  24. ;
  25. ;    CARRY clear & AX = 2
  26. ;
  27. ;    'this is a test'
  28. ;       ^OFFSET M00+AX
  29. ;
  30. SUBPGM    FSTRNG
  31. BEGIN    FSTRNG
  32.     EXTRN    _STRLEN:NEAR
  33.     PUSH    ES        ; SAVE ALL SEGMENTS & INDEX REGISTERS
  34.     PUSH    BP
  35.     PUSH    SI
  36.     PUSH    DI
  37. ;
  38.     PUSH    DS
  39.     POP    ES        ; ES = DATA SEGMENT
  40.     CLD
  41. ;
  42.     MOV    SI,AX        ; GET THE MATCHING STRING
  43.     CALL    _STRLEN        ; GET THE LENGTH
  44.     MOV    DX,CX        ; DX HOLDS THE MATCH LENGTH
  45.     MOV    AX,SI        ; RESTORE THE MATCH ADDRESS
  46.     MOV    DI,BX        ; DI POINTS TO THE TARGET
  47.     PUSH    BX        ; SAVE A COPY FOR LATER
  48. ;
  49. FSTR_05:
  50.     CMP    BYTE PTR [DI],0 ; AT THE END?
  51.     JZ    FSTR_20        ; YES, EXIT BAD
  52.     REPE    CMPSB        ; COMPARE TILL MISMATCH/EOL
  53.     JE    FSTR_10        ; EXIT IF EQUAL
  54.     INC    BX        ; ADVANCE THE TARGET TO THE NEXT POSITION
  55.     MOV    DI,BX        ; SETUP FOR THE NEXT TRY
  56.     MOV    SI,AX        ; POINT TO THE BEGINNING OF THE SOURCE
  57.     MOV    CX,DX        ; GET THE LENGTH
  58.     JMP    SHORT FSTR_05    ; TRY AGAIN...
  59. ;
  60. FSTR_10:
  61.     MOV    AX,BX        ; BX POINTS TO THE START OF THE MATCH
  62.     POP    BX        ; GET THE ORIGINAL AGAIN...
  63.     SUB    AX,BX        ; AX HOLDS THE OFFSET COUNT
  64.     CLC
  65. ;
  66. FSTR_15:
  67.     POP    DI
  68.     POP    SI
  69.     POP    BP
  70.     POP    ES
  71.     RET
  72. ;
  73. FSTR_20:
  74.     POP    AX        ; FLUSH THE STACK...
  75.     STC            ; EXIT BAD
  76.     JMP    SHORT FSTR_15
  77. ;
  78. ENDPGM    FSTRNG
  79. ;
  80.