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 / SIMTEL / CPMUG / CPMUG049.ARK / INDEX.Z80 < prev    next >
Text File  |  1984-04-29  |  1KB  |  69 lines

  1. ;1    FUNCTION INDEX(KA,KB,LB,LA)
  2. ;2    INTEGER*1 KA,KB
  3. ;3    C Must pass string lengths explicitly in F66
  4. ;4    DIMENSION KA(LA),KB(LB)
  5.     EXT    $AT
  6.     ENTRY    INDEX
  7. INDEX    LD    (KA),HL
  8.     LD    (KB),DE
  9.     LD    A,02
  10.     LD    HL,LB
  11.     CALL    $AT
  12. ;7    NS=LA-LB+1
  13. ;8    DO 100 INDEX=1,NS
  14.     LD    HL,(LB)
  15.     LD    E,(HL)
  16.     INC    HL
  17.     LD    D,(HL)
  18.     DEC    DE
  19.     LD    (LB1),DE
  20.     LD    HL,(LA)
  21.     LD    A,(HL)
  22.     INC    HL
  23.     LD    H,(HL)
  24.     LD    L,A
  25.     XOR    A
  26.     SBC    HL,DE
  27.     PUSH    HL    ;Number of start positions
  28. ;9    C Try each possible start position until KB found
  29. ;10    DO 10 I=1,LB
  30. ;11    IA=I+INDEX-1
  31. ;12    10    IF(KA(IA).NE.KB(I))GO TO 100
  32.     LD    HL,(KA)
  33.     POP    BC
  34. DO100:    LD    DE,(KB)
  35.     LD    A,(DE)
  36.     CPIR    ;search for 1st character
  37.     JR    NZ,NFND
  38.     PUSH    BC
  39.     LD    BC,(LB1)    ;number chars yet to find
  40.     LD    A,C
  41.     OR    B
  42.     JR    Z,FOUND
  43.     PUSH    HL
  44. DO10:    INC    DE
  45.     LD    A,(DE)
  46.     CPI    ;Compare rest of string
  47.     JR    NZ,NXT
  48.     JP    PE,DO10    ;if any left to find
  49. ;String found starting at INDEX
  50.     POP    HL
  51. FOUND:    POP    BC
  52.     LD    DE,(KA)    ;Calculate INDEX
  53.     XOR    A
  54.     SBC    HL,DE
  55.     RET
  56. NXT:    POP    HL
  57.     POP    BC
  58.     LD    A,B    ;repeat if INDEX<NS
  59.     OR    C
  60.     JR    NZ,DO100
  61. NFND:    LD    HL,0
  62.     RET
  63. KA:    DS    2
  64. KB:    DS    2
  65. LB:    DS    2
  66. LA:    DS    2
  67. LB1:    DS    2
  68.     END
  69.