  xdef _ShortFind

* argumenter:
* a0 ^ indexfil
* a1 ^ filnavn
* d7 = længde af indexfil

* returværdi: d0 ^ linie i indexfil der matcher eller NULL (0L) for ingen match

  section hjaelperutine,code

_ShortFind:
  movem.l d2-d7/a2-a6,-(sp)
  move.l  a7,Stack
  bsr.b   Toupper
.mainlp:
  bsr.b   Compare
  beq.b   .GotIt
  bsr.b   Skip
  bra.b   .mainlp
.GotIt:
  move.l  a0,d0

Stop:
  move.l  Stack,a7
  movem.l (sp)+,d2-d7/a2-a6
  rts

* kører a0 frem til efter næste return ( ascii 10)
* exitter hvis eof nås
Skip:
  moveq   #0,d0
  move.b  #10,d1
.skiplp:
  subq.l  #1,d7
  beq.b   Stop
  cmp.b   (a0)+,d1
  bne.b   .skiplp
  rts

* sammenligner strengen a1 peger på med teksten som a0 peger på
* a1 skal være i uppercase
* tæller ikke a0 frem - eller d7 ned
* exitter hvis eof nås
* returnerer d0=0 hvis de var ens eller d0<>0 hvis ikke-ens
Compare:
  move.l  a1,a2
  move.l  a0,a3
  move.l  d7,d6
.cmplp:
  subq.l  #1,d7
  beq.b   Stop
  move.b  (a0)+,d1
  move.b  (a2)+,d0
  beq.b   Match
  cmp.b   #97,d1
  blo.b   .d1ok
  cmp.b   #122,d1
  bhi.b   .d1ok
  sub.b   #32,d1
.d1ok:
  cmp.b   d1,d0
  beq.b   .cmplp
  move.l  a3,a0
  move.l  d6,d7
  rts
Match:
  move.l  a3,a0
  move.l  d6,d7
  moveq   #0,d0
  rts

* laver strengen som a1 peger på om til uppercase og returnerer ny ptr i a1 på denne streng
* (dvs. den gamle streng bevares)
Toupper:
  lea     Mystring,a2
.uplp:
  move.b  (a1)+,d0
  beq.b   .done
  cmp.b   #97,d0
  blo.b   .d0ok
  cmp.b   #122,d0
  bhi.b   .d0ok
  sub.b   #32,d0
.d0ok:
  move.b  d0,(a2)+
  bra.b   .uplp

.done:
  clr.b   (a2)+
  lea     Mystring,a1
  rts

Mystring: ds.b  100
Stack: dc.l 0

  end
