
; ULONG ASM NewDefine(REG(a0) STRPTR *text_store,
;                     REG(d0) ULONG   len,
;                     REG(a1) ULONG  *line);

; a2: STRPTR text
; d1: ULONG  chars


        section text,code

        near    code

Z


_NewDefine:
        move.l  a2,-(sp)
        movea.l (a0),a2

.loop:  cmpi.b  #32,(a2)
        beq.s   .loop2
        cmpi.b  #9,(a2)
        beq.s   .loop2
        tst.l   d0
        beq.s   .fail
        bra.s   .ende

.loop2:
        addq.l  #1,a2
        subq.l  #1,d0
        bra.s   .loop

.ende:  cmpi.b  #35,(a2)+
        bne.s   .fail

        cmpi.l  #8,d0
        bls.s   .fail

        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #68,d1
        bne.s   .fail
        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #69,d1
        bne.s   .fail
        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #70,d1
        bne.s   .fail
        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #73,d1
        bne.s   .fail
        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #78,d1
        bne.s   .fail
        move.b  (a2)+,d1
        andi.b  #223,d1
        cmpi.b  #69,d1
        bne.s   .fail
        cmpi.b  #32,(a2)+
        bne.s   .fail

        subq.l  #8,d0

.loop3: cmpi.b  #32,(a2)
        beq.s   .loop4
        cmpi.b  #9,(a2)
        beq.s   .loop4
        tst.l   d0
        beq.s   .fail
        bra.s   .ende2

.loop4: addq.l  #1,a2
        subq.l  #1,d0
        bra.s   .loop3

.ende2: movea.l a2,(a0)
        moveq   #0,d1

.loop5: cmpi.b  #32,(a2)
        beq.s   .ok
        cmpi.b  #40,(a2)
        beq.s   .ok
        tst.l   d0
        beq.s   .ok
        addq.l  #1,d1
        subq.l  #1,d0
        addq.l  #1,a2
        bra.s   .loop5

.ok:    move.l  d1,d0
        bra.s   .exit

.fail:
        moveq   #0,d0

.exit:  move.l  (sp)+,a2
        rts


        dc.b    0,'$VER: NewDefine 1.0 (12.5.97) © by Maik "BLiZZeR" Schreiber [FREEWARE]'


        end

