; 
; 
; (c) 1997 Cyborg 

    {* Include sys:coder/preass/Options.p *}
    {* NewProc=GetFilename[][]*}


    {* String: Version="$VER: GrundSource (C) CYBORG 97"*}
    
    {* Incblock: Buffer,1000*}

    {* Incvar: Bilder,Breite,Hoehe,Bits,ModeID,Cmaplen,Cmappos,Bodylen,Bodypos*}
    {* Incvar: Bufferlaenge,ANHDlen,ANHDpos,Chunk*}

Position[]:
    pos=Seek(Animhandle,0,#offset_begin)
    Seek(Animhandle,pos,#Offset_Current)
    move.l pos,d0
    RTS

ReadChunk[]:
    Read(Animhandle,#Chunk,4)
    anz=Read(Animhandle,#Bufferlaenge,4)
    If Anz=#0 --> .error
    pos=Position()
    Read(Animhandle,#Buffer,Bufferlaenge)
    moveq.l #0,d0
    RTS
.error:
    move.l #-1,d0
    RTS

SkipChunk[]:
    Read(Animhandle,#Chunk,4)
    anz=Read(Animhandle,#Bufferlaenge,4)
    If Anz=#0 --> .error
    pos=Position()
    Seek(Animhandle,Bufferlaenge,#Offset_Current)
    moveq.l #0,d0
    RTS
.error:
    move.l #-1,d0
    RTS

WriteEintrag[]:
    If ReadChunk()##0 --> .error
    ANHDpos==pos+14
    Anhd=.w16(#Buffer)
    ReadChunk()
    CmapPos==Pos
    CmapLen==Bufferlaenge
    skipChunk()
    BodyPos==Pos
    BodyLen==Bufferlaenge
    Write(Indexhandle,#Bodylen,4)
    Write(Indexhandle,#Bodypos,4)
    Write(Indexhandle,#Cmaplen,4)
    Write(Indexhandle,#Cmappos,4)
    Write(Indexhandle,#ANHD+2,2)
    Write(Indexhandle,#ANHDpos,4)
    Bilder==Bilder+1
    move.l #0,d0
    RTS
.error:
    move.l #-1,d0
    RTS

Start:
    OK=Getfilename()
;    Copymem("pc:Hello.ma\$00",#Filename,?)
    If (AnimHandle=Open(#Filename,#Mode_old))=#0 --> .error
    Buffer=="xx"+filename+".index"
    If (IndexHandle=Open(#Buffer+2,#Mode_New))=#0 --> .error1
    Seek(Animhandle,0,#Offset_end)
    Filelaenge=Seek(Animhandle,0,#Offset_begin)
    Write(Indexhandle,#Filelaenge,4)
    anz=Write(IndexHandle,"IFF-Anim7_16",?)
    Zero==92-anz
    For I=1 to Zero
        Write(Indexhandle,"\$00",1)
    Next I
    Write(IndexHandle,"\$00\$00\$00\$00\$00\$00",6)
    Seek(Animhandle,32,#Offset_Current)
    Read(Animhandle,#Breite,2)
    Read(Animhandle,#Hoehe,2)
    Seek(Animhandle,4,#Offset_Current)
    Read(Animhandle,#Bits+1,1)
    Seek(Animhandle,19,#Offset_Current)
    Read(Animhandle,#ModeID,4)
    Write(Indexhandle,#Breite,2)
    Write(Indexhandle,#Hoehe,2)
    Write(Indexhandle,#Bits,2)
    Write(Indexhandle,"\$00\$00",2)
    Write(Indexhandle,"\$00\$00\$00\$00",4)
    Write(Indexhandle,#Modeid,4)
    Write(Indexhandle,#Breite,2)
    Write(Indexhandle,#Hoehe,2)
    Write(Indexhandle,"\$00\$00\$00\$00",4)
    Write(Indexhandle,"\$08\$00",2)
    Write(Indexhandle,"\$01\$00\$00\$00",4)
    Write(Indexhandle,"\$00\$00",2)
    Write(Indexhandle,#Breite,2)
    Write(Indexhandle,#Hoehe,2)

;Ab hier einen Eintrag;
    If WriteEintrag()##0 --> .ende
    Write(Indexhandle,"\$00\$01\$00\$01\$00\$01",6)
    Write(Indexhandle,#Breite,2)
    Write(Indexhandle,#Hoehe,2)
    Seek(Animhandle,12,#Offset_current)
.Schleife:
    If WriteEintrag()##0 --> .ende
    Write(Indexhandle,"\$00\$01\$00\$01\$00\$03",6)
    Write(Indexhandle,#Breite,2)
    Write(Indexhandle,#Hoehe,2)
    Seek(Animhandle,12,#Offset_current)
    bra .Schleife
.ende:
    Seek(Indexhandle,96,#Offset_begin)
    Bilder==Bilder-1
    Write(Indexhandle,#Bilder+2,2)
    Bilder==Bilder+1
    Write(Indexhandle,#Bilder,4)
    Close(Indexhandle)
.error1:
    Close(animhandle)
.error:
    RTS

GetFilename:
    {* IncBlock: Filename,256*}
        cmpi.l #0,laenge
        beq .l13
        cmpi.l #1,laenge
        beq .l13
        Move.l Adresse,a0
.l1:    cmpi.b #`"`,(a0)
        beq .l10
        cmpi.b #` `,(a0)+
        beq .l1
        lea -1(a0),a1
.l2:    cmpi.b #`"`,(a0)
        beq .l11
        cmpi.b #$0a,(a0)
        beq .l12
        cmpi.b #$00,(a0)
        beq .l12
        cmpi.b #` `,(a0)+
        bne .l2
        Lea -1(a0),a2
.l3:    suba.l a1,a2
        Copymem(a1,#Filename,a2)
        Move.l a2,d0
        rts
.l10:   lea 1(a0),a1
        bra .l2
.l11:   lea 1(a0),a1
        bra .l3
.l12:   move.l a0,a2
        bra .l3
.l13:   moveq.l #0,d0
        RTS
