; Iff - Test
; Programmed 1988 by
; Thomas Pflaum
; 8602 Unerneuses 33

execbase       equ 4
OpenLib        equ -408
CloseLib       equ -414
Open           equ -30
Close          equ -36
Output         equ -60
Read           equ -42
Write          equ -48
cr             equ 13
lf             equ $0a
crlf           equ $0d0a       ; cr und lf
; ******* Iff - Konstanten *******
form           equ "FORM"
ilbm           equ "ILBM"
ftxt           equ "FTXT"
smus           equ "SMUS"
svx            equ "8SVX"

start:
 move   d0,d1
 lea    namenpuffer,a5
loop:
 move.b (a0)+,(a5)+            ; name kopieren
 dbra   d1,loop
 add.l  #namenpuffer-1,d0
 move.l d0,a0
 move.b #0,(a0)

 move.l execbase,a6            ; Open Dos Lib
 lea    dosname,a1
 clr.l  d0
 jsr    OpenLib(a6)
 move.l d0,dosbase
 beq    error1

 move.l dosbase,a6             ; Standart Ausgabe ermitteln
 jsr    Output(a6)
 move.l d0,clihandle

 move.l #Namenpuffer,d1        ; File Öffnen
 move.l #1005,d2               ; Modus Alt
 move.l dosbase,a6
 jsr    Open(a6)
 move.l d0,filehandle
 beq    Error2

 move.l dosbase,a6             ; 40 Bytes lesen
 move.l d0,d1
 move.l #puffer,d2
 move.l #40,d3
 jsr    Read(a6)
 cmp.b  #40,d0                 ; keine 40 Zeichen
 bne    error3

 move.l dosbase,a6             ; Begrüßung
 move.l clihandle,d1
 move.l #text1,d2
 move   #33,d3
 jsr    write (a6)

 cmp.l  #form,puffer              ; Iff - Datei ??
 beq    IffOk
 move.l #text2,d2 
 move   #19,d3
 bsr    print
 bra    ende

IffOK:
 move.l #text2_1,d2
 move   #39,d3
 bsr    print

 cmp.l  #ilbm,puffer+8         ; ILBM  ??
 bne    svxtest

IlbmOk:
 move   #21,d3
 move.l #text3,d2
 bsr    print

 clr.l  d0                     ; Bitplanes ausgeben
 move.b puffer+28,d0
 lea    text5+13,a0
 bsr    umwandlung
 move   #19,d3
 move.l #text5,d2
 bsr    print

 clr.l  d0                     ; Maskierung ausgeben
 move.b puffer+29,d0
 lea    text6+14,a0
 bsr    umwandlung
 move   #20,d3
 move.l #text6,d2
 bsr    print

 move.l #text7,d2
 move   #14,d3
 bsr    print
 clr.l  d0                     ; Komprimiert ??
 move.b puffer+30,d0
 bne    KompOk
 move   #6,d3
 move.l #text9,d2
 bsr    print
 bra    größe
KompOk:
 move   #4,d3
 move.l #text8,d2
 bsr    print

größe:
 move   puffer+20,d0           ; Größe
 lea    text10+25,a0
 bsr    umwandlung
 move   puffer+22,d0
 lea    text10+32,a0
 bsr    umwandlung
 move.l #text10,d2
 move   #38,d3
 bsr    print

 move   puffer+36,d0           ; Auflößung
 lea    text11+29,a0
 bsr    umwandlung
 move   puffer+38,d0
 lea    text11+36,a0
 bsr    umwandlung
 move.l #text11,d2
 move   #42,d3
 bsr    print
 bra    ende

svxtest:
 cmp.l  #svx,puffer+8          ; 8SVX  ??
 bne    ftxtTest
 move.l #text14,d2
 move   #32,d3
 bsr    print
 bra    ende

ftxtTest:
 cmp.l  #ftxt,puffer+8
 bne    smusTest
 move.l #text15,d2
 move   #15,d3
 bsr    print
 bra    ende

smusTest:
 cmp.l  #smus,puffer+8
 bne    UnbekIff
 move.l #text16,d2
 move   #22,d3
 bsr    print
 bra    ende

UnbekIff:
 move.w #crlf,puffer+12
 move.l #puffer+8,d2
 move   #6,d3
 bsr    print
 bra    ende

error3:
 move   #15,d3
 move.l #text13,d2
 bsr    print
ende:
 move.l filehandle,d1          ; Datei schließen
 move.l dosbase,a6
 jsr    Close(a6)
 bra    error2b

error2:
 move   #30,d3
 move.l #text12,d2
 bsr    print
error2b:
 move.l dosbase,a1             ; DosLib schließen
 move.l execbase,a6
 jsr    CloseLib(a6)

error1:
 rts

; ********** Sub - Routienen *********

print:
 move.l dosbase,a6             ; Text in d2   Länge in d3
 move.l clihandle,d1
 jsr    Write (a6)
 rts

umwandlung:
 divu   #1000,d0
 bsr    ziffer
 divu   #100,d0
 bsr    ziffer
 divu   #10,d0
 bsr    ziffer
ziffer:
 add    #$30,d0
 move.b d0,(a0)+
 clr    d0
 swap   d0
 rts

; *********************** TEXTE ******************
text1:           dc.b " ******** Iff - Tester ********",cr,lf
 even
text2:           dc.b " KEIN IFF - File ",cr,lf
 even
text2_1:         dc.b " Es ist ein IFF - File des Types : ",cr,lf
 even
text3:           dc.b " ILBM  (IFF - Bild)",cr,lf
 even
text5:           dc.b " Bitplanes : ","0000",cr,lf
 even
text6:           dc.b " Maskierung : ","0000",cr,lf
 even
text7:           dc.b " Komprimiert  "
 even
text8:           dc.b "JA",cr,lf
 even
text9:           dc.b "NEIN",cr
 even
text10:          dc.b " Größe (Breite x Höhe) : 0000 x 0000",cr,lf
 even
text11:          dc.b " Auflößung (Breite x Höhe) : 0000 x 0000",cr,lf
 even
text12:          dc.b " Kann das File nicht öffnen",cr,lf
 even
text13:          dc.b " File zu kurz",cr,lf
 even
text14:          dc.b " 8SVX  (digitalisierte Klänge)",cr,lf
 even
text15:          dc.b " FTXT  (Texte)",cr,lf
 even
text16:          dc.b " SMUS  (Lied, Noten)",cr,lf
 even
; ********** PUFFER *******
dosname:         dc.b "dos.library",0
 even

 bss
clihandler:      dc.l 0
Returnadr        dc.l 0
filehandle       dc.l 0
Clihandle        dc.l 0
dosbase:         dc.l 0
puffer:          blk.b 40,0
namenpuffer:     blk.b 250,0

 end
