*****************************************************************************
*									    *
*	PROGRAM: CCExtractor						    *
*	VERSION: 1.1							    *
*   SOURCE CODE: 9 (26.2.2001)						    *
*	   DATE: 15.01.2001 - 9.2.2001					    *
*      LANGUAGE: Assembler (DevPac V3.14)				    *
*	 SYSTEM: A1200	KS 40.68 WB 40.42 2MB chip 64MB fast 68030/50mhz    *
*									    *
*	 AUTHOR: Joerg Riemer						    *
*	  EMAIL: mission@cs.tu-berlin.de				    *
*									    *
*      FUNCTION: program/datafile extractor for carrier command masterdisk  *
*									    *
*****************************************************************************

	output	ram:CCExtractor

*****************************************************************************

	include	source/custom.i

*****************************************************************************

_LVOOpenLibrary		equ	 -00000552
_LVOCloseLibrary	equ	-$0000019E

MODE_NEWFILE		equ	 $000003EE

_LVOOpen		equ	-$0000001E
_LVORead		equ	-$0000002A
_LVOInput		equ	-$00000036
_LVOOutput		equ	-$0000003C
_LVOWrite		equ	-$00000030
_LVOClose		equ	-$00000024

*****************************************************************************

INTENAsave	rs.w	1

	include	source/DBStructure.i

*****************************************************************************

	cmp.b	#"?",(A0)
	bne	CCRead

Start	moveq	#0,D0			;set last supported version
	lea	DosName(pc),A1		;get library name
	movea.l	$4.w,A6			;set execbase to call a function
	jsr	-$228(A6)		;use EXEC to (openlibrary)
	tst.l	D0			;be sure it's open
	beq.b	Quit			;quit if not
	movea.l	D0,A6			;set dosbase to call a function
	jsr	-$3C(A6)		;use DOS to find (output)
	move.l	D0,D1			;set them
	lea	InfoText(pc),A0		;get textbase
	move.l	A0,D2			;set base of text
	move.l	#TextSize,D3		;set size of text
	jsr	-$30(A6)		;use DOS to (write) text
	movea.l	A6,A1			;set dosbase for close
	movea.l	$4.w,A6			;set execbase to call a function
	jsr	-$19e(A6)		;use EXEC to (closelibrary)
	moveq	#0,D0			;clear returncode
Quit	rts				;back to console

*****************************************************************************

InfoText

  dc.b	$A," CARRIER COMMAND FILE-EXTRACTOR",$A,$A

  dc.b	" especially file-reader program for CARRIER COMMAND",$A
  dc.b	" RAINBIRD DISK: version A1.2 (19.08.1988) / A1200-fix TML!'2001",$A,$A

  dc.b  " this one extracts all data files to the current directory",$A,$A

  dc.b	" by joerg riemer feb'2001  email: mission@cs.tu-berlin.de",$A,$A,0

TextSize  equ	*-InfoText-1

*****************************************************************************

		cnop	0,4

CCRead		moveq	#0,D0
		lea	DosName(PC),A1
		move.l	$04.w,A6
		jsr	_LVOOpenLibrary(A6)
		move.l	D0,A5

		lea	InfoText00(PC),A4
		bsr	PrintText

		bsr	WaitReturn

		lea	InfoText07(PC),A4
		move.b	Error(pc),D0
		bne	QuitProg

		movem.l	A5/A6,-(SP)
		bsr	ReadDisk
		movem.l	(SP)+,A5/A6

		lea	InfoText02(PC),A4
		lea	DataBase(pc),A0
		tst.b	TrackError(A0)
		bne	QuitProg

		lea	InfoText06(PC),A4
		bsr	PrintText

		bsr	WaitReturn

		lea	InfoText07(PC),A4
		move.b	Error(pc),D0
		bne	QuitProg

****************

		lea	InfoText03(PC),A4
		move.l	#FileName1,D1
		move.l	#MODE_NEWFILE,D2
		move.l	A5,A6
		jsr	_LVOOpen(A6)
		move.l	D0,D7
		beq	QuitProg

		lea	InfoText04(PC),A4

		move.l	D7,D1
		move.l	#FileData1,D2
		move.l	#FileSize1,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize1,D0
		bne	Closefile

		move.l	D7,D1
		move.l	A5,A6
		jsr	_LVOClose(A6)

****************

		lea	InfoText03(PC),A4
		move.l	#FileName2,D1
		move.l	#MODE_NEWFILE,D2
		move.l	A5,A6
		jsr	_LVOOpen(A6)
		move.l	D0,D7
		beq	QuitProg

		lea	InfoText04(PC),A4

		move.l	D7,D1
		move.l	#FileData2,D2
		move.l	#FileSize2,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize2,D0
		bne	Closefile

		move.l	D7,D1
		move.l	A5,A6
		jsr	_LVOClose(A6)

****************

		lea	InfoText03(PC),A4
		move.l	#FileName3,D1
		move.l	#MODE_NEWFILE,D2
		move.l	A5,A6
		jsr	_LVOOpen(A6)
		move.l	D0,D7
		beq.b	QuitProg

		lea	InfoText04(PC),A4

		move.l	D7,D1
		move.l	#FileData3,D2
		move.l	#FileSize3,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize3,D0
		bne.b	Closefile

		move.l	D7,D1
		move.l	A5,A6
		jsr	_LVOClose(A6)

****************

		lea	InfoText03(PC),A4
		move.l	#FileName4,D1
		move.l	#MODE_NEWFILE,D2
		move.l	A5,A6
		jsr	_LVOOpen(A6)
		move.l	D0,D7
		beq.b	QuitProg

		lea	InfoText04(PC),A4

		move.l	D7,D1
		move.l	#FileData4,D2
		move.l	#FileSize4,D3
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		cmp.l	#FileSize4,D0
		bne.b	Closefile

****************

		lea	InfoText05(PC),A4

Closefile	move.l	D7,D1
		move.l	A5,A6
		jsr	_LVOClose(A6)

****************

QuitProg	bsr	PrintText

		lea	SetClock(pc),A1
		move.l	A1,D1
		moveq	#0,D2
		moveq	#0,D3
		movea.l	A5,A6
		jsr	-222(a6)

		move.l	A5,A1
		move.l	$04.w,A6
		jsr	_LVOCloseLibrary(A6)
		moveq	#$00,D0
		rts

*****************************************************************************

	dc.b	"$VER: CCExtractor 1.1 (26.2.2001)",0

*****************************************************************************

		cnop	0,4

WaitReturn	lea	InfoText01(PC),A4
		bsr.b	PrintText

		move.l	A5,A6

		st	Error

ChBreak		moveq	#00,D1			;prepare signal mask
		bset	#12,D1			;set break bit (ctrl_c)
		jsr	-792(A6)		;use DOS to (checksignal)
		btst	#12,D0			;test break bit (ctrl_c)
		bne.b	.Cancel			;if set, branch

		jsr	_LVOInput(A6)
		move.l	D0,D1			;set input
		move.l	#50000,D2		;set timeout
		jsr	-$CC(A6)		;use DOS to (waitforchar)
		tst.l	D0			;must be (DOS)true
		beq.b	ChBreak			;loop if not

		lea	CharBuffer(pc),A2
		clr.b	(A2)			;clear buffer

		jsr	_LVOInput(A6)
		move.l	D0,D1			;set input
		move.l	A2,D2			;set buffer
		moveq	#1,D3			;chars to read
		jsr	-$2A(A6)		;use DOS to (read)
	 	cmp.b	#$A,(A2)		;check for <LINEFEED>
		bne.b	ChBreak			;loop if not
		sf	Error
.Cancel		rts

*****************************************************************************

PrintText	move.l	A5,A6
		jsr	_LVOOutput(A6)
		move.l	D0,D1
		move.l	A4,D2
		moveq	#-$01,D3
GetSize		addq.l	#$01,D3
		tst.b	(A4)+
		bne.b	GetSize
		move.l	A5,A6
		jsr	_LVOWrite(A6)
		rts

*****************************************************************************

DosName		dc.b	"dos.library",0

SetClock	dc.b	"RUN >NIL: SetClock Load",0

FileName1	dc.b	"CCBackupper.bin",0
FileName2	dc.b	"CCPicture.bin",0
FileName3	dc.b	"CCGame.bin",0
FileName4	dc.b	"CCTitleSound.bin",0

InfoText00	dc.b	"CARRIER COMMAND FILE-EXTRACTOR",$A
		dc.b	"by joerg riemer feb'2001  email: <mission@cs.tu-berlin.de>",$A
		dc.b	"insert original disk RAINBIRD carrier command in df0:",$A,0

InfoText06	dc.b	"ready to write files in the current directory.",$A,0
InfoText01	dc.b	"hit <RETURN> to continue or <CTRL><C> to abort: ",0
InfoText02	dc.b	"ERROR: reading tracks... (corrupt/wrong disk)",$A,0
InfoText03	dc.b	"ERROR: Couldn't open file for writing...",$A,0
InfoText04	dc.b	"ERROR: Couldn't save file...",$A,0
InfoText05	dc.b	"all files saved. operation successful!!!",$A,0
InfoText07	dc.b	$A,"operation cancelled!!!",$A,0

CharBuffer	dc.b	$00
Error		dc.b	$00

		cnop	0,4

*****************************************************************************

ReadDisk	include	source/SCode.s

*****************************************************************************

		moveq	#1,D0		;(load game datas) first track
		moveq	#79,D1		;tracks to read
		moveq	#0,D2		;diskside
		moveq	#0,D3		;drive number
		lea	FileData1,A0	;base of mem
		lea	TrackBuffer,A1	;dma buffer
		bsr.b	LoadDatas	;read tracks
		beq.b	.1
		rts

.1		moveq	#0,D0		;(load titlesound) first track
		moveq	#80,D1		;tracks to read
		moveq	#1,D2		;diskside
		moveq	#0,D3		;drive number
		lea	FileData4,A0	;base of mem
		lea	TrackBuffer,A1	;dma buffer

*****************************************************************************

		include	source/LoadDatas.s

*****************************************************************************

		cnop	0,4

DataBase	dcb.b	BSS_Size,0

*****************************************************************************

		SECTION	FileReader_02,BSS

*****************************************************************************

FileData1	ds.b	512*10*1			;Backup.prg
FileSize1	equ	*-FileData1
FileData2	ds.b	512*10*7			;Title.pic
FileSize2	equ	*-FileData2
FileData3	ds.b	512*10*71			;CCGame.prg
FileSize3	equ	*-FileData3
FileData4	ds.b	512*10*80			;Title.snd
FileSize4	equ	*-FileData4

*****************************************************************************

		SECTION	FileReader_03,BSS_C

*****************************************************************************

TrackBuffer	ds.l	4096

 end ************************************************************************
