home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / SYSLIB / SLIB2.LBR / SINSTR.Z80 < prev    next >
Text File  |  2000-06-30  |  2KB  |  68 lines

  1. ;
  2. ; SYSLIB Module Name:  SINSTR
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    instr
  8.  
  9. ;
  10. ;  SINSTR --
  11. ;    INSTRING Function.  Scan string pointed to by HL for the string
  12. ; pointed to by DE.  A string in this case is a vector of bytes terminated
  13. ; by a binary 0.
  14. ;    On return, Zero Flag is set if found, and HL points to 1st byte
  15. ; of substring within scanned string.  DE and BC are not affected.  If
  16. ; string not found, Zero Flag is not set and HL is not affected.
  17. ;
  18. INSTR:
  19.     PUSH    BC    ; SAVE REGISTERS
  20.     PUSH    HL    ; SAVE ORIGINAL HL
  21.  
  22. SCAN:
  23.     PUSH    HL    ; SAVE PTR TO STRINGS
  24.     PUSH    DE
  25.  
  26. SCANL:
  27.     LD    A,(DE)    ; GET BYTE FROM STRING TO SCAN FOR
  28.     OR    A    ; END OF STRING?
  29.     JP    Z,FOUND    ; FOUND IF SO
  30.     LD    B,A    ; SAVE IN B
  31.     LD    A,(HL)    ; GET BYTE OF STRING BEING SCANNED
  32.     OR    A    ; END OF STRING?
  33.     JP    Z,NOT$FOUND
  34.     CP    B    ; COMPARE STRING ELEMENTS
  35.     JP    NZ,NEXT
  36.     INC    HL    ; PT TO NEXT BYTE
  37.     INC    DE
  38.     JP    SCANL    ; CONTINUE SCAN
  39.  
  40. ;  NO MATCH -- POINT TO NEXT BYTE IN STRING BEING SCANNED
  41. NEXT:
  42.     POP    DE    ; GET PTRS
  43.     POP    HL
  44.     INC    HL    ; PT TO NEXT
  45.     JP    SCAN    ; SCAN AGAIN
  46.  
  47. ;  MATCH -- ZERO FLAG IS SET -- GET POINTERS
  48. FOUND:
  49.     POP    DE    ; GET PTRS
  50.     POP    HL
  51.  
  52.     POP    BC    ; CLEAR HL FROM STACK
  53.     POP    BC    ; GET BC
  54.     RET
  55.  
  56. ;  NO MATCH -- SET NOT ZERO AND RESTORE ORIGINAL POINTERS
  57. NOT$FOUND:
  58.     POP    DE    ; GET PTRS
  59.     POP    HL
  60.  
  61.     POP    HL    ; RESTORE ORIGINAL HL
  62.     POP    BC    ; GET BC
  63.     LD    A,0FFH    ; SET NOT FOUND
  64.     OR    A    ; SET NOT ZERO
  65.     RET
  66.  
  67.     END
  68.