	;SC68 plugin script for Gamebase

	;%fp		file pointer (set to 0 at start of script)
	;%lof		length of file in bytes
	;%fn$		filename
	;%ver		version of the script plugin compiler/interpretor

	;%s1$		string 1 in GB window (default to empty string)
	;%s2$		string 2 in GB window (default to empty string)
	;%s3$		string 3 in GB window (default to empty string)
	;%n1		number 1 in GB window (default to 0)
	;%n2		number 2 in GB window (default to 0)

	;Define global variables
	mov 0, %track	
	
	;Define arrays

	; test the file
	mov 0, tst				;prepare null termination detect
	rds 0, %id$				;Read string until null byte
	mov %id$, tst
	bne "SC68 Music-file / (c) (BeN)jamin Gerard / SasHipA-Dev  ", error
	
	
	;Process SC68 (Tag Chunk)
	rds 4, %SC68_header			;read start tag chunk-id
	lon					;turn on little endian reads
	rdl %SC68_size				;read total filesize (-56 for ID)
	mov %SC68_header, tst
	bne "SC68", error
	
	
	;Process SCFN (Header Chunk)
	rds 4, %SC68_header$			;read disk chunk-id
	rdl %SC68_size				;read 32bit little endian integer
	mov %SC68_header$, tst
	bne "SCFN", error
	rds %SC68_size, %s1$			;read in disk name
	nam %s1$, "Game/Demo"
	
		
	;Process SCMU (Track Chunk)
	rds 4, %SC68_header$			;read track tag chunk-id
	skp 4					;skip chunk-size
	mov %SC68_header$, tst
	bne "SCMU", error
	
	
	;Process next chunks
start:
	rds 4, %SC68_header$
	rdl %SC68_size
	mov %SC68_header$, tst
	eeq "SCEF"
	jeq "SCMU", default_track
	jeq "SCMN", track_name
	jeq "SCAN", author_name
	jeq "SCCN", composer_name
	jeq "SCTI", track_time
	jeq "SCTY", hardware
	jeq "SCFR", frames
	jeq "SCFQ", frequency
	jeq "SCLP", play_loop
	jeq "SCRE", ext_routine
	jeq "SCDA", next
	bra start
next:
	skp %SC68_size
	inc %track
	mov eof, tst
	eeq TRUE
	bra start


error:
	err "File is not a valid SC68 format"
	end


track_name:
	rds %SC68_size, %SC68_track_name$[%track]
	nam %SC68_track_name$[%track], "Track "
	nam %SC68_track_name$[%track], +%track
	rts
	
author_name:
	rds %SC68_size, %SC68_author_name$[%track]
	nam %SC68_author_name$[%track], "Author"
	rts
	
composer_name:
	rds %SC68_size, %SC68_composer_name$[%track]
	nam %SC68_composer_name$[%track], "Composer"
	rts
	
track_time:
	rdl %SC68_track_time[%track]
	nam %SC68_track_time[%track], "Length (secs)"
	rts
	
hardware:
	rdl %hardware_flag
	and 7, %hardware_flag			;logical AND with Binary 111
	jeq 1, hardware_ym			;if bit 0 = 1
	jeq 2, hardware_ste			;if bit 1 = 1
	jeq 4, hardware_amiga			;if bit 2 = 1
	nam %SC68_hardware$[%track], "Sound Hardware"
	rts
	
hardware_ym:
	mov "YM", %SC68_hardware$[%track]	
	rts
	
hardware_ste:
	mov "STe", %SC68_hardware$[%track]	
	rts
	
hardware_amiga:
	mov "Amiga", %SC68_hardware$[%track]	
	rts
	
frames:
	rdl %SC68_frames[%track]
	rts
	
frequency:
	rdl %SC68_frequency[%track]
	nam %SC68_frequency[%track], "Frequency (Hz)"
	rts
	
play_loop:
	rdl %SC68_play_loop[%track]
	beq &80000001, infinite			;if signed long is -1 create a named string value instead
	nam %SC68_play_loop[%track], "Number of plays"
	rts
	
infinite:
	mov "Infinite", %SC68_play_loop$[%track]
	nam %SC68_play_loop$[%track], "Number of plays"
	rts
	
ext_routine:
	mov 0, tst
	rds 0, %SC68_ext_routine$[%track]
	nam %SC68_ext_routine$[%track], "External Routine Name"
	rts
	
default_track:
	rdl %n2
	nam %n2, "Default Track"	
	rts
end:
	mov %track, %n1
	nam %n1, "Tracks"
	mov %SC68_track_name[0], %s2$
	nam %s2$, "First track name"
	mov %SC68_track_composer[0], %s3$
	nam %s3$, "First track composer"
	