; taken from amiga.lib: InvertString() and FreeIEvents()

      section text,code

      xdef _MyInvertString

_MyInvertString

      link           a5,#-$10
      movem.l        d6-d7/a2-a3/a6,-(sp)
      suba.l         a2,a2
      moveq          #$0,d7
      tst.l          $8(a5)
      beq.s          laa6
      movea.l        $8(a5),a0
      tst.b          (a0)
      bne.s          laac
laa6  moveq          #$0,d0
      bra            lb56

laac  move.l         a6,-(sp)
      moveq          #$16,d0
      moveq          #$1,d1
      swap           d1
      movea.l        _SysBase(a4),a6
      nop
      jsr            -$c6(a6)
      movea.l        (sp)+,a6
      movea.l        d0,a3
      move.l         a3,d0
      bne.s          laca
      moveq          #$1,d7
      bra.s          lb46

laca  move.l         a2,(a3)
      movea.l        a3,a2
      movea.l        $8(a5),a0
      move.b         (a0),d6
      moveq          #$0,d0
      move.b         d6,d0
      subi.w         #$3c,d0
      beq.s          lae6
      subi.w         #$20,d0
      beq.s          lafe
      bra.s          lb20

lae6  addq.l         #$1,$8(a5)
      move.l         a3,-(sp)
      pea            $8(a5)
      bsr            _doangle
      addq.w         #$8,sp
      tst.l          d0
      bne.s          lb38
      moveq          #$1,d7
      bra.s          lb46

lafe  addq.l         #$1,$8(a5)
      movea.l        $8(a5),a0
      move.b         (a0),d0
      ext.w          d0
      ext.l          d0
      move.l         d0,-(sp)
      bsr            _doesc
      addq.w         #$4,sp
      move.l         d0,d6
      cmpi.b         #$ff,d6
      bne.s          lb20
      moveq          #$1,d7
      bra.s          lb46

lb20  moveq          #$0,d0
      move.b         d6,d0
      move.l         a6,-(sp)
      movea.l        a3,a0
      movea.l        $c(a5),a1
      movea.l        _CxBase(a4),a6
      nop
      jsr            -$ae(a6)
      movea.l        (sp)+,a6
lb38  addq.l         #$1,$8(a5)
      movea.l        $8(a5),a0
      tst.b          (a0)
      bne            laac
lb46  tst.l          d7
      beq.s          lb54
      move.l         a3,-(sp)
      jsr            _MyFreeIEvents
      moveq          #$0,d0
      bra.s          lb56

lb54  move.l         a2,d0
lb56  movem.l        -$24(a5),d6-d7/a2-a3/a6
      unlk           a5
      rts

_doesc

      move.l         d7,-(sp)
      move.b         $b(sp),d7
      move.b         d7,d0
      ext.w          d0
      subi.w         #$22,d0
      beq.s          lba4
      subq.w         #$5,d0
      beq.s          lba4
      subi.w         #$9,d0
      beq.s          lb9e
      subi.w         #$c,d0
      beq.s          lba4
      subi.w         #$20,d0
      beq.s          lba4
      subi.w         #$12,d0
      beq.s          lb96
      subq.w         #$4,d0
      beq.s          lb96
      subq.w         #$2,d0
      beq.s          lb9a
      bra.s          lba2

lb96  moveq          #$d,d0
      bra.s          lba6

lb9a  moveq          #$9,d0
      bra.s          lba6

lb9e  moveq          #$0,d0
      bra.s          lba6

lba2  moveq          #-$1,d7
lba4  move.l         d7,d0
lba6  move.l         (sp)+,d7
      rts

_doangle

      link           a5,#-$14
      movem.l        d7/a2-a3/a6,-(sp)
      movea.l        $8(a5),a3
      movea.l        (a3),a2
      bra.s          lbc6

lbba  moveq          #$3e,d0
      cmp.b          (a2),d0
      bne.s          lbc4
      clr.b          (a2)
      bra.s          lbca

lbc4  addq.l         #$1,a2
lbc6  tst.b          (a2)
      bne.s          lbba
lbca  move.l         a6,-(sp)
      movea.l        (a3),a0
      lea            -$14(a5),a1
      movea.l        _CxBase(a4),a6
      nop
      jsr            -$84(a6)
      movea.l        (sp)+,a6
      move.l         d0,d7
      move.l         a2,d0
      beq.s          lbec
      move.b         #$3e,(a2)
      move.l         a2,(a3)
      bra.s          lbf2

lbec  movea.l        a2,a0
      subq.l         #$1,a0
      move.l         a0,(a3)
lbf2  tst.l          d7
      beq.s          lbfa
      moveq          #$0,d0
      bra.s          lc12

lbfa  movea.l        $c(a5),a0
      move.b         -$13(a5),$4(a0)
      move.w         -$12(a5),$6(a0)
      move.w         -$e(a5),$8(a0)
      moveq          #$1,d0
lc12  movem.l        (sp)+,d7/a2-a3/a6
      unlk           a5
      rts

lc1a dc.w           $0

      xdef _MyFreeIEvents

_MyFreeIEvents

      link           a5,#-$4
      movem.l        a3/a6,-(sp)
      movea.l        $14(sp),a3
      bra.s          lc46

lc2a  movea.l        (a3),a0
      move.l         a0,$8(sp)
      move.l         a6,-(sp)
      movea.l        a3,a1
      moveq          #$16,d0
      movea.l        _SysBase(a4),a6
      nop
      jsr            -$d2(a6)
      movea.l        (sp)+,a6
      movea.l        $8(sp),a3
lc46  move.l         a3,d0
      bne.s          lc2a
      movem.l        (sp)+,a3/a6
      unlk           a5
      rts

      xref  _CxBase
      xref  _SysBase

      end
