	; Programm : Sound Effect Machine
	; Modul    : Load File-Tabelle
	; by       : Dan Dark Software / Jörg Schließer
	; Version  : V1.0 / April 1990
	; Assembler: Kick-Ass V1.20

	; Modul zum Laden einer Anzahl von Files

	; Übergabeparameter beim Aufruf:

	; a0 = Zeiger auf Name der Filenamentabelle als ASCII-File
	; d0 = Speichertyp für die zu ladenden Files

	; Rückgabeparameter:

	; a0 => Zeiger auf Tabelle der Daten im Speicher
	; d0 = 0 => Error ...
	; d0 > 0 => Anzahl der geladenen Files

	; Außerdem nötig:

	; Load-File-Modul (S.E.M.-Projekt Teil 2)

	; Betriebsystem-Routinen

AllocMem	=       -198
FreeMem	=       -210

	; Konstanten:

execbase	=       $4           ; Exec Basisadresse

	; Load File-Tabelle - Modul zum Laden einer Reihe von Files,
	; deren Filenamen in einer ASCII-Tabelle übergeben werden

loadtab:
	movem.l d1-d7/a1-a6,-(sp) ; Registerinhalte retten
	exg    d0,d6              ; Speichertyp retten
	moveq  #1,d0              ; Speichertyp für Tabelle: egal
	bsr    loadfile           ; ASCII-Tabelle laden
	move.l d0,d7              ; Länge des ASCII-Files retten
	beq    errorltab          ; keine Filetabelle ? ... Error !
	moveq  #0,d5              ; Zähler für Filezahl
	move.l a0,a2              ; Zeiger auf ASCII-Text
	move.l a0,a3              ; nochmal Zeiger auf ASCII-Text
loadtabloop:
	moveq  #79,d1             ; Maximal 80 Zeichen für Filename
	lea    zwfile,a5          ; Zwischenspeicher für Filenamen
lookforreturn:
	move.b (a3),(a5)+         ; nächstes Zeichen kopieren
	move.b (a3)+,d0           ; und nochmal lesen
	cmp.b  #10,d0             ; Zeichen = LineFeed ?
	beq    returnfound        ; ja ! Super ! Filename fertig
	cmp.b  #13,d0             ; Zeichen = CarriageReturn ?
	beq    returnfound        ; ja ! Super ! Filename fertig
	cmp.b  #42,d0             ; Zeichen = "*" ?
	beq    exitloadtab        ; ja ! Tabelle fertig !
	dbra   d1,lookforreturn   ; nächstes Zeichen
returnfound:
	clr.b  -(a5)              ; Null-Byte ans Ende des Filenamen
	lea    zwfile,a0          ; Zeiger auf Filenamenspeicher
	move.l d6,d0              ; Speichertyp nach d0
	bsr    loadfile           ; File laden
	move.l d5,d4              ; Nummer des Files mal 8 ergibt
	asl.w  #3,d4              ; Zeiger auf Position in Memorytab
	lea    memorytab,a4       ; Zeiger auf Memorytab
	move.l a0,0(a4,d4)        ; Adresse der Daten sichern
	move.l d0,4(a4,d4)        ; Länge der Daten sichern
	addq.l #1,d5              ; Filenummer plus 1
	cmp.l  #31,d5             ; schon mehr als 32 Files geladen ?
	bls    loadtabloop        ; nein ... also weiter
exitloadtab:
	move.l a2,a1              ; Zeiger auf Filenamentabelle
	move.l d7,d0              ; Länge der Filenamentabelle
	move.l execbase.s,a6      ; Exec-Basisadresse
	jsr    FreeMem(a6)        ; Speicher freigeben
	lea    memorytab,a0       ; Zeiger auf Memorytab
	move.l d5,d0              ; Zahl der Files (-1) nach d0
	addq.l #1,d0              ; +1 => tatsächliche Zahl der Files
exitltab:
	movem.l (sp)+,d1-d7/a1-a6
	rts
errorltab:
	moveq  #0,d0              ; Zahl der Files = 0 für ERROR!
	bra    exitltab           ; Fertig !

memorytab:	blk.l 64,0                ; Tabelle der Adressen und Längen
zwfile:	blk.w 41,0                ; Zwischenspeicher für Filenamen

