        xdef   _formatfile

        section code

; A0 ^ fil
; A1 ^ dato "00-00-00"

_formatfile:
        movem.l d2-d7/a2-a6,-(sp)
        tst.w   SplitInit
        bne.b   .iniok
        not.w   SplitInit
        lea     SplitMap,a2
        moveq   #0,d0
        subq.b  #1,d0
.inilp: clr.b   (a2)+
        dbra    d0,.inilp
        lea     SplitMap,a2
        st      (a2)
        st      ' '(a2)
        st      '.'(a2)
        st      '/'(a2)
        st      '!'(a2)

.iniok: move.l  d0,d6
        lea     MyString,a6
        move.l  #32<<24+32<<16+32<<8+32,d7
        ; WRITE OUT THE NAME
        move.l  a0,a2           ; a2 ^ name
        move.l  a2,d0           ; d0 ^ name
.lp:    move.b  (a2)+,(a6)+     ; copy name
        bne.b   .lp
        move.b  d7,-1(a6)
        sub.l   a2,d0
        neg.w   d0
        sub.w   #24,d0          ; this is the actual max length ± a few bytes :-)
        bgt.b   .toolong
        neg.w   d0
        subq.w  #1,d0
        blt.b   .ok
        ; TOO SHORT
.lp2:   move.b  d7,(a6)+
        dbra    d0,.lp2
        bra.b   .ok
        ; TOO LONG
.toolong:
        sub.w   d0,a6
        move.w  #'!'<<8+32,-2(a6)
.ok:
        move.b  d7,(a6)+
        ; WRITE OUT THE SIZE
        move.l  #$ffff,d0
        move.b  d7,(a6)+
        move.b  d7,(a6)+
        move.b  d7,(a6)+
        move.l  200(a0),d2
        lsr.l   #8,d2
        lsr.l   #2,d2
        bne.b   .not0
        moveq   #1,d2
.not0:  move.b  #'K',d1
        cmp.l   #999,d2
        ble.b   .ok2
        divu    #102,d2
        ext.l   d2
        move.b  #'M',(a6)+
        divu    #10,d2
        swap    d2
        add.b   #'0',d2
        move.b  d2,-2(a6)
        move.b  #'.',-3(a6)
        swap    d2
        add.b   #'0',d2
        move.b  d2,-4(a6)
        bra.b   .skip
.ok2:   move.l  a6,a5
        move.b  d1,(a6)+
Loop:   divu    #10,d2
        swap    d2
        add.b   #'0',d2
        move.b	d2,-(a5)
        swap    d2
        and.l   d0,d2
        bne.S   Loop
.skip:  move.w  d7,(a6)+

        ; WRITE OUT THE DATE
        move.l  (a1)+,(a6)+
        move.l  (a1)+,(a6)+
        move.b  (a1)+,(a6)+
        move.w  d7,(a6)+

        ; WRITE OUT THE DL COUNT
        move.w  192(a0),d0
        cmp.l   #100,d0
        blt.b   .nocut
        moveq   #99,d0                  ; gee, this BBS is popular.. >100 dl's of this file!!!
.nocut: divu    #10,d0
        swap    d0
        lsl.w   #8,d0
        add.l   #'[00]',d0
        move.l  d0,(a6)+
        move.w  d7,(a6)+

        ; WRITE OUT THE DESCRIPTION
        lea     32(a0),a2
        lea     SplitMap,a4
        moveq   #0,d1
.lp4:   moveq   #27,d0
        sub.l   a3,a3
.lp3:   move.b  (a2)+,d1
        move.b  d1,(a6)+
        beq.b   .done
        move.l  a4,a0
        add.w   d1,a0
        tst.b   (a0)
        beq.b   .nope
        move.l  a2,a3
        move.l  a6,a5
.nope:  dbra    d0,.lp3
        ; CHECK IF ANYMORE LEFT
        move.l  a2,a1
.clp:   move.b  (a1)+,d1
        beq.b   .done2
        move.l  a4,a0
        add.w   d1,a0
        tst.b   (a0)
        bne.b   .clp
        ; WRITE OUT DESCRIPTION, 2. LINE
        cmp.l   #0,a3
        beq.b   .hard
        move.l  a3,a2
        move.l  a5,a6
.hard:  move.b  #10,(a6)+

        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+
        move.l  d7,(a6)+

        bra.b   .lp4

.done2: addq.l  #1,a6
.done:  move.b  #10,-1(a6)
        clr.b   (a6)
        movem.l (sp)+,d2-d7/a2-a6
        move.l  #MyString,d0
        rts


MyString:       ds.b    400

SplitMap:       ds.b    256
SplitInit:      dc.w    0

                end
