home *** CD-ROM | disk | FTP | other *** search
/ Oakland CPM Archive / oakcpm.iso / sigm / vol090 / sinstr.mac < prev    next >
Encoding:
Text File  |  1984-04-29  |  1.4 KB  |  72 lines

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