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 / SLIB3.LBR / SSCANNER.Z80 < prev    next >
Text File  |  2000-06-30  |  1KB  |  70 lines

  1. ;
  2. ; SYSLIB Module Name:  SCANNER
  3. ; Author:  Richard Conn
  4. ; SYSLIB Version Number:  3.6
  5. ; Module Version Number:  1.1
  6.  
  7.     public    scanner
  8.  
  9. ;
  10. ;  SSCANNER --
  11. ;    SCANNER scans the vector of bytes pointed to by HL for
  12. ; the vector of bytes pointed to by DE.  The HL-byte vector is B bytes
  13. ; long, and the DE-byte vector is C bytes long.
  14. ;    On return, if found, HL points to the beginning location within
  15. ; the original HL vector of the located vector and Zero Flag is set.
  16. ; If not found, Zero Flag is not set and HL is unaffected.  DE and BC
  17. ; are not affected by this routine.
  18. ;
  19. SCANNER:
  20.     PUSH    BC    ; SAVE REGISTERS
  21.     PUSH    HL
  22.  
  23. ; MAIN LOOP
  24. SCAN:
  25.  
  26. ; CHECK FOR DONE
  27.     LD    A,B    ; DONE IF B<C
  28.     CP    C    ; DONE?
  29.     JP    C,NOT$FOUND
  30.  
  31. ; SCAN HL FOR DE FOR C BYTES
  32.     PUSH    BC    ; SAVE BC
  33.     PUSH    HL    ; SAVE PTRS
  34.     PUSH    DE
  35. SCANL:
  36.     LD    A,(DE)    ; GET DE BYTE
  37.     CP    (HL)    ; MATCH?
  38.     JP    NZ,NEXT
  39.     INC    DE    ; PT TO NEXT
  40.     INC    HL
  41.     DEC    C    ; COUNT DOWN
  42.     JP    NZ,SCANL
  43.  
  44. ;  MATCH
  45.     POP    DE    ; RESTORE PTRS
  46.     POP    HL
  47.     POP    BC    ; OLD BC
  48.     POP    BC    ; ORIGINAL HL -- DISCARD
  49.     POP    BC    ; ORIGINAL BC
  50.     RET        ; ZERO FLAG IS SET
  51.  
  52. ;  NOT FOUND YET
  53. NEXT:
  54.     POP    DE    ; RESTORE PTRS
  55.     POP    HL
  56.     POP    BC    ; GET COUNT
  57.     INC    HL    ; PT TO NEXT IN SCANNED VECTOR
  58.     DEC    B    ; COUNT DOWN
  59.     JP    NZ,SCAN    ; CONTINUE SCANNING
  60.  
  61. ;  NO MATCH!
  62. NOT$FOUND:
  63.     POP    HL    ; ORIGINAL HL
  64.     POP    BC    ; ORIGINAL BC
  65.     LD    A,0FFH    ; NOT FOUND
  66.     OR    A    ; SET NOT ZERO
  67.     RET
  68.  
  69.     END
  70.