*************************************************
*						*
*		(C) Copyright 1993-95		*
*						*
*		   Tomi  Blinnikka		*
*						*
*	Don't try to understand the code	*
*						*
* Version 1.00	15.08.1993			*
*	       -03.03.1993			*
* BUGS:						*
*						*
* Not finished.					*
*						*
* Version 1.01	03.01.1995			*
*						*
* Should now support all file types.		*
*						*
*************************************************

	INCLUDE	"JMPLibs.i"
	INCLUDE	"libraries/dos.i"

	INCLUDE	"XREF:2.0.xref"
	INCLUDE	"XREF:exec.xref"
	INCLUDE	"XREF:dos.xref"

	INCLUDE	"libraries/voice.i"

PROGVERSION:	macro
		dc.b	"1.01 (03.01.95)"
		endm

DefAccVal:	EQU	3000		;VoiceShell default

;VSFileVersion	'VS02', oldest supported type

GADLENG1VS02:	EQU	16
GADLENG2VS02:	EQU	64
GADLENGTHVS02:	EQU	(GADLENG1VS02+GADLENG2VS02)

;VSFileVersion	'VS03', has longer command strings than 02

VocabSIZE:	EQU	60
GADLENG1:	EQU	16
GADLENG2:	EQU	256
GADLENGTH:	EQU	(GADLENG1+GADLENG2)
VSMB_Size:	EQU	VocabSIZE*304

;VSFileVersion 'VS04', has error commands (9*GADLENG2), Wakeup and
;confirmation

;VSFileVersion 'VS05', prefs and data file joined, PrefsWake length
;changed from byte to word

VS02Length:	EQU	23040
VS03Length:	EQU	34560
VS04Length:	EQU	36864
VS05Length:	EQU	36902

VSHEADER_SIZE:	EQU	4

;VCLI version 7.0

VCLIVocabSIZE:	EQU	48
VCLIMB_Size:	EQU	VCLIVocabSIZE*304

NullBufSize1:	EQU	65536

TRUE:		EQU	1
FALSE:		EQU	0

		section	VSConv,CODE

		openlib	Dos,NoDos

		lea.l	CLTemplate1,a0
		move.l	a0,d1
		lea.l	CLArray1,a0
		move.l	a0,d2
		clr.l	d3
		lib	Dos,ReadArgs
		move.l	d0,RDArgs1
		beq	NoRDArgs

		lib	Dos,Output
		move.l	d0,_stdout

		lib	Dos,Input
		move.l	d0,_stdin

		lea.l	FromFileText1,a0
		bsr	Printer
		move.l	SourceFile1,a0
		bsr	Printer
		lea.l	CRLFText1,a0
		bsr	Printer

		lea.l	FromFileText2,a0
		bsr	Printer
		move.l	SourceFile2,a0
		bsr	Printer
		lea.l	CRLFText1,a0
		bsr	Printer

		lea.l	DestText1,a0
		bsr	Printer
		move.l	DestFile,a0
		bsr	Printer
		lea.l	CRLFText1,a0
		bsr	Printer

		move.l	SourceFile1,d1
		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,Source1
		beq	NoRDArgs

		move.l	SourceFile2,d1
		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,Source2

		move.l	DestFile,d1
		move.l	#MODE_OLDFILE,d2
		lib	Dos,Open
		move.l	d0,Destination
		beq	OpenDest2

OpenDest1:	lea.l	FExistsText1,a0
		bsr	Printer

		bsr	GetYesNo
		tst.l	d0
		beq	OpenDest1

		cmp.l	#1,d0			;Yes, replace
		beq	OpenDest1.1

		cmp.l	#2,d0
		beq	ShutDown

		move.l	#RETURN_FAIL,RetCode
		bra	ShutDown		;Error

OpenDest1.1:	move.l	Destination,d1		;Close and reopen as new
		lib	Dos,Close
		clr.l	Destination

OpenDest2:	move.l	DestFile,d1
		move.l	#MODE_NEWFILE,d2
		lib	Dos,Open
		move.l	d0,Destination
		beq	NoRDArgs

		lea.l	CRLFText1,a0
		bsr	Printer

;Versions 02 - 04 must be checked by length since the data file didn't have
;a header at all... :(

		move.l	Source1,d1
		bsr	GetFileLength
		tst.l	d0
		beq	NoRDArgs

		cmp.l	#VS02Length,d0
		beq	DoVS02

		cmp.l	#VS03Length,d0
		beq	DoVS03

		cmp.l	#VS04Length,d0
		beq	DoVS04

;These can be checked directly from the header

		move.l	Source1,d1
		bsr	GetHeader
		tst.l	d0
		beq	NoRDArgs

		lea.l	VSVersion05,a0
		lea.l	CopyBuffer1,a1
		bsr	CmpStrings
		tst.l	d0
		bne	DoVS05

		lea.l	VCLI70ID,a0
		lea.l	CopyBuffer1,a1
		bsr	CmpStrings
		tst.l	d0
		bne	DoVCLI70

		lea.l	UnknownText1,a0
		bsr	Printer

		lea.l	CopyBuffer1,a0
		bsr	Printer

		lea.l	CRLFText1,a0
		bsr	Printer

		bra	ShutDown

DoVS02:		lea.l	ConvText1,a0
		bsr	Printer
		lea.l	ConvText3,a0
		bsr	Printer

;Test for optional prefs file and get prefs if possible

		move.l	Source2,d1
		beq	DoVS02.2
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#38,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		lea.l	VSVersion02,a0
		lea.l	CopyBuffer1,a1
		bsr	CmpStrings
		tst.l	d0
		bne	DoVS02.1

		lea.l	IncVerText1,a0
		bsr	Printer
		move.l	#RETURN_WARN,RetCode
		bra	DoVS02.2

DoVS02.1:	lea.l	CopyBuffer1,a0
		add.l	#4,a0			;Skip header
		lea.l	DefPrefs,a1
		add.l	#4,a1			;Skip header
		move.l	#14,d0
		lib	Exec,CopyMem		;Copy prefs, part I

		lea.l	CopyBuffer1,a0
		lea.l	DefPrefs,a1
		move.b	18(a0),19(a1)		;Move wake correctly
		move.l	34(a0),34(a1)		;Move Alt(X/Y)Pos

DoVS02.2:	bsr	WriteDefPrefs
		tst.l	d0
		beq	NoRDArgs

		move.l	#VSMB_Size,d0
		bsr	CopyMapBuffer
		tst.l	d0
		beq	NoRDArgs

;Copy commands and patch length

		move.l	#VocabSIZE,d5

DoVS02.3:	bsr	CopyGL02Bytes
		tst.l	d0
		beq	NoRDArgs

		move.l	#(GADLENG2-GADLENG2VS02),d3	;192 bytes
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

		sub.l	#1,d5
		bne	DoVS02.3			;Do until end

;Error commands

		move.l	#(9*GADLENG2),d3		;2304 bytes
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

		bra	ShutDown

DoVS03:		lea.l	ConvText1,a0
		bsr	Printer
		lea.l	ConvText4,a0
		bsr	Printer

;Test for optional prefs file and get prefs if possible

		move.l	Source2,d1
		beq	DoVS03.2
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#38,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		lea.l	VSVersion03,a0
		lea.l	CopyBuffer1,a1
		bsr	CmpStrings
		tst.l	d0
		bne	DoVS03.1

		lea.l	IncVerText1,a0
		bsr	Printer
		move.l	#RETURN_WARN,RetCode
		bra	DoVS03.2

DoVS03.1:	lea.l	CopyBuffer1,a0
		add.l	#4,a0			;Skip header
		lea.l	DefPrefs,a1
		add.l	#4,a1			;Skip header
		move.l	#14,d0
		lib	Exec,CopyMem		;Copy prefs, part I

		lea.l	CopyBuffer1,a0
		lea.l	DefPrefs,a1
		move.b	18(a0),19(a1)		;Move wake correctly
		move.l	34(a0),34(a1)		;Move Alt(X/Y)Pos

DoVS03.2:	bsr	WriteDefPrefs
		tst.l	d0
		beq	NoRDArgs

;Do MapBuffer & CommandList

		move.l	Source1,d1
		move.l	#(VSMB_Size+VocabSIZE*GADLENGTH),d3
		bsr	CopyBytes
		tst.l	d0
		beq	NoRDArgs

;Do ErrCmdList

		move.l	#(9*GADLENG2),d3		;2304 bytes
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

		bra	ShutDown

DoVS04:		lea.l	ConvText1,a0
		bsr	Printer
		lea.l	ConvText5,a0
		bsr	Printer

;Test for optional prefs file and get prefs if possible

		move.l	Source2,d1
		beq	DoVS04.2
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#38,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		lea.l	VSVersion04,a0
		lea.l	CopyBuffer1,a1
		bsr	CmpStrings
		tst.l	d0
		bne	DoVS04.1

		lea.l	IncVerText1,a0
		bsr	Printer
		move.l	#RETURN_WARN,RetCode
		bra	DoVS04.2

DoVS04.1:	lea.l	CopyBuffer1,a0
		add.l	#4,a0			;Skip header
		lea.l	DefPrefs,a1
		add.l	#4,a1			;Skip header
		move.l	#14,d0
		lib	Exec,CopyMem		;Copy prefs, part I

		lea.l	CopyBuffer1,a0
		lea.l	DefPrefs,a1
		move.b	18(a0),19(a1)		;Move wake correctly
		move.l	34(a0),34(a1)		;Move Alt(X/Y)Pos

DoVS04.2:	bsr	WriteDefPrefs
		tst.l	d0
		beq	NoRDArgs

;Do MapBuffer, CommandList & ErrorCommands

		move.l	Source1,d1
		move.l	#(VSMB_Size+VocabSIZE*GADLENGTH+9*GADLENG2),d3
		bsr	CopyBytes
		tst.l	d0
		beq	NoRDArgs
		bra	ShutDown

DoVS05:		lea.l	NewestText1,a0
		bsr	Printer
		bra	ShutDown

DoVCLI70:	lea.l	ConvText2,a0
		bsr	Printer
		lea.l	ConvText9,a0
		bsr	Printer

;Seek 12+VCLIMB_Size+16*48+128*48 bytes from the start, to
;beginning of VCLI preferences in source (VCLI file)

		move.l	Source1,d1
		move.l	#12+VCLIMB_Size+16*48+128*48,d2
		move.l	#OFFSET_BEGINNING,d3
		lib	Dos,Seek
		cmp.l	#-1,d0
		beq	NoRDArgs

;Read prefs 4 bytes

		move.l	Source1,d1
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#4,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		lea.l	CopyBuffer1,a0
		lea.l	DefPrefs,a1

		move.b	(a0)+,d0
		btst.b	#0,d0			;Timer bit
		bne	DoVCLI70.1
		move.b	#TIMER_B,7(a1)
		bra	DoVCLI70.2
DoVCLI70.1:	move.b	#TIMER_A,7(a1)

DoVCLI70.2:	btst.b	#1,d0			;Confirm
		bne	DoVCLI70.3
		move.b	#TRUE,11(a1)		;Default is on
		bra	DoVCLI70.4
DoVCLI70.3:	move.b	#FALSE,11(a1)

DoVCLI70.4:	move.b	(a0)+,5(a1)		;SampType
		move.b	(a0),8(a1)		;Gain

;Write prefs

		bsr	WriteDefPrefs

;Seek 12 bytes from the start, to beginning of MapBuffer,
;in source (VCLI file)

		move.l	Source1,d1
		move.l	#12,d2
		move.l	#OFFSET_BEGINNING,d3
		lib	Dos,Seek
		cmp.l	#-1,d0
		beq	NoRDArgs

;Copy VCLI MapBuffer to Destination (VoiceShell)

		move.l	#VCLIMB_Size,d0
		bsr	CopyMapBuffer
		tst.l	d0
		beq	NoRDArgs

;Correct VCLI to VoiceShell vocabulary size difference
;
;Write (VocabSIZE*304) - (VCLIVocabSIZE*304) amount of NULL to Destination

		move.l	#VSMB_Size-VCLIMB_Size,d3
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

;Copy descriptions from Source (VCLI) to Destination (VoiceShell) with
;steps of GADLENG1. Read in 16 bytes chunks, written in GADLENG1 chunks,
;VCLIVocabSIZE times. Skip GADLENG2 in between.

		move.l	Source1,d1
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#VCLIVocabSIZE*16,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		clr.l	d5

VCLI70.5:	move.l	d5,d0
		mulu.w	#16,d0			;Get offset
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		add.l	d0,d2

		move.l	Destination,d1
		move.l	#16,d3
		lib	Dos,Write
		cmp.l	d3,d0
		bne	NoRDArgs

		move.l	#GADLENG2,d3		;skip command for now
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

		add.l	#1,d5
		cmp.l	#VCLIVocabSIZE,d5
		bne	VCLI70.5

;Add missing entries

		move.l	#GADLENGTH*(VocabSIZE-VCLIVocabSIZE),d3	;skip command for now
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

;Seek to first CLI Command string in Destination (VoiceShell)
;
		move.l	Destination,d1
		move.l	#38+VSMB_Size+GADLENG1,d2
		move.l	#OFFSET_BEGINNING,d3
		lib	Dos,Seek
		cmp.l	#-1,d0
		beq	NoRDArgs

;Copy strings from Source (VCLI) to Destination (VoiceShell) with steps of
;GADLENG2. Read in 128 bytes chunks, written in GADLENG2 chunks, 
;VCLIVocabSIZE times. Skip GADLENG1 in between.

		move.l	Source1,d1
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#VCLIVocabSIZE*128,d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	NoRDArgs

		clr.l	d5

VCLI70.6:	move.l	d5,d0
		mulu.w	#128,d0			;Get offset
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		add.l	d0,d2

		move.l	Destination,d1
		move.l	#128,d3
		lib	Dos,Write
		cmp.l	d3,d0
		bne	NoRDArgs

		move.l	Destination,d1
		move.l	#(GADLENG2-128)+GADLENG1,d2	;skip description and leftovers
		move.l	#OFFSET_CURRENT,d3
		lib	Dos,Seek
		cmp.l	#-1,d0
		beq	NoRDArgs

		add.l	#1,d5
		cmp.l	#VCLIVocabSIZE,d5
		bne	VCLI70.6

;Error commands

		move.l	Destination,d1
		bsr	SeekEnd
		cmp.l	#-1,d0
		beq	NoRDArgs

		move.l	#(9*GADLENG2),d3		;2304 bytes
		bsr	WriteNulls
		tst.l	d0
		beq	NoRDArgs

		bra	ShutDown

GetYesNo:	move.l	_stdin,d1
		move.l	#TRUE,d2
		lib	Dos,SetMode

		move.l	_stdin,d1
		lib	Dos,Flush

		move.l	_stdin,d1
		lib	Dos,FGetC
		cmp.l	#-1,d0
		bne	GetYesNo2
		lea.l	ErrorText1,a0
		bsr	Printer
		bra	GetYesNo_OUT

GetYesNo2:	cmp.l	#'y',d0
		beq	GetYesNo3
		cmp.l	#'Y',d0
		beq	GetYesNo3
		cmp.l	#'n',d0
		beq	GetYesNo4
		cmp.l	#'N',d0
		beq	GetYesNo4
		cmp.l	#13,d0
		beq	GetYesNo4		;Return
		cmp.l	#10,d0
		beq	GetYesNo4		;Return
		clr.l	d0
		bra	GetYesNo_OUT
GetYesNo3:	lea.l	YesText1,a0
		bsr	Printer
		move.l	#1,d0
		bra	GetYesNo_OUT
GetYesNo4:	lea.l	NoText1,a0
		bsr	Printer
		move.l	#2,d0
;		bra	GetYesNo_OUT		;Careful!
GetYesNo_OUT:	push	d0
		move.l	_stdin,d1
		move.l	#FALSE,d2
		lib	Dos,SetMode
		pull	d0
		rts


;GetFileLength gets the length of a file and returns to the start of file
;
;Input	d1 = File
;
;Result	d0 = Length
;

GetFileLength:	move.l	d1,d3
		bsr	SeekStart
		cmp.l	#-1,d0
		beq	GetFLength_ERR
		move.l	d3,d1
		bsr	SeekEnd
		cmp.l	#-1,d0
		beq	GetFLength_ERR
		push	d0
		move.l	d3,d1
		bsr	SeekStart
		cmp.l	#-1,d0
		beq	GetFLength_ERR2
		pull	d0
		rts

GetFLength_ERR2: pull	d0
GetFLength_ERR:	clr.l	d0
		rts

;Seek to end of file
;
;Input	d1 = File
;
;Result	d0 = Length
;

SeekEnd:	push	d2-d6
		move.l	d1,d6
		clr.l	d2
		move.l	#OFFSET_END,d3
		lib	Dos,Seek
		cmp.l	#-1,d0
		beq	SeekEnd_ERR
		move.l	d6,d1
		lib	Dos,Seek
SeekEnd_ERR:	pull	d2-d6
		rts

;Seek to start of file
;
;Input	d1 = File
;
;Result	d0 = Length
;

SeekStart:	push	d2-d3
		move.l	#0,d2
		move.l	#OFFSET_BEGINNING,d3
		lib	Dos,Seek
		pull	d2-d3
		rts

;GetHeader reads 12 bytes into CopyBuffer1 and seeks to start of file
;
;Input	d1 = File

GetHeader:	move.l	d1,d4

		bsr	SeekStart
		cmp.l	#-1,d0
		beq	GetHeader_ERR1

		move.l	d4,d1
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#12,d3
		lib	Dos,Read
		cmp.l	#12,d0
		bne	GetHeader_ERR1

		move.l	d4,d1
		bsr	SeekStart
		cmp.l	#-1,d0
		beq	GetHeader_ERR1

		move.l	#-1,d0
		rts

GetHeader_ERR1:	clr.l	d0
		rts

;WriteDefPrefs writes DefPrefsSize bytes from start of file to destination
;
;DefPrefs should be set accordingly (or left alone for defaults)

WriteDefPrefs:	move.l	Destination,d1
		bsr	SeekStart
		cmp.l	#-1,d0
		beq	WriteDP_ERR1

		move.l	Destination,d1
		lea.l	DefPrefs,a0
		move.l	a0,d2
		move.l	#DefPrefsSize,d3
		lib	Dos,Write
		cmp.l	d3,d0
		bne	WriteDP_ERR1
		move.l	#-1,d0
		rts

WriteDP_ERR1:	clr.l	d0
		rts

;CopyMapBuffer reads d0 bytes into MapBuffer and writes them into
;destination at current point
;
;Input	d0 = Length

CopyMapBuffer:	push	d0
		move.l	Source1,d1
		lea.l	MapBuffer,a0
		move.l	a0,d2
		pull	d3
		lib	Dos,Read
		cmp.l	d3,d0
		bne	CopyMB_ERR1

		move.l	Destination,d1
		lib	Dos,Write
		cmp.l	d3,d0
		bne	CopyMB_ERR1
		move.l	#-1,d0
		rts

CopyMB_ERR1:	clr.l	d0
		rts

;CopyBytes copies asked amount from given file to destination at current
;positions. Max. length should be under 65536 bytes.
;
;Inputs	d1 = Source file
;	d3 = Length
;

CopyBytes:	lea.l	CopyBuffer1,a0
		move.l	a0,d2
		lib	Dos,Read
		cmp.l	d3,d0
		bne	CopyBytes_ERR1

		move.l	Destination,d1
		lib	Dos,Write
		cmp.l	d3,d0
		bne	CopyBytes_ERR1
		move.l	#-1,d0
		rts

CopyBytes_ERR1:	clr.l	d0
		rts

;CopyGL02Bytes copies GADLENG2VS02 bytes from Source to Destination
;

CopyGL02Bytes:	move.l	Source1,d1		;Read GADLENGTHVS02 bytes
		lea.l	CopyBuffer1,a0
		move.l	a0,d2
		move.l	#GADLENGTHVS02,d3
		lib	Dos,Read
		cmp.l	#GADLENGTHVS02,d0
		bne	CopyGL02_ERR1

		move.l	Destination,d1		;Write GADLENGTHVS02 bytes
		lib	Dos,Write
		cmp.l	#GADLENGTHVS02,d0
		bne	CopyGL02_ERR1
		move.l	#-1,d0
		rts

CopyGL02_ERR1:	clr.l	d0
		rts

;WriteNulls writes NULLs to Destination
;
;Inputs	d3 = Amount of NULLs to write

WriteNulls:	move.l	Destination,d1
		lea.l	NullBuffer,a0
		move.l	a0,d2
		lib	Dos,Write
		cmp.l	d3,d0
		bne	WriteNull_ERR1
		move.l	#-1,d0
		rts

WriteNull_ERR1:	clr.l	d0
		rts

CloseFiles:	move.l	Source1,d1
		beq	CloseFiles2
		lib	Dos,Close

CloseFiles2:	move.l	Source2,d1
		beq	CloseFiles3
		lib	Dos,Close

CloseFiles3:	move.l	Destination,d1
		beq	CloseFiles4
		lib	Dos,Close
CloseFiles4:	rts

;Compares two strings upto length of first string.
;
;Input	a0 = String 1
;	a1 = String 2
;
;Result	d0 = 0 if not same
;
;BUGS
;
;String 1 has to have NULL at end!
;

CmpStrings:	tst.b	(a0)
		beq	CmpStrings2
		cmp.b	(a0)+,(a1)+
		beq	CmpStrings
		clr.l	d0
		rts
CmpStrings2:	move.l	#-1,d0
		rts

;Get length of text in given address
;
;Input a0 = Address of null terminated text string
;
;Result d0 = Length

GetLength:	push	a0
		clr.l	d0
		cmp.l	#$00,a0		;fixes enforcer hit
		beq	GetLength_OUT
GetLength2:	add.l	#1,d0
		tst.b	(a0)+
		bne	GetLength2
		sub.l	#1,d0		;don't include NULL
GetLength_OUT:	pull	a0
		rts

ShutDown:	move.l	RDArgs1,d1
		beq	ShutDown9000
		lib	Dos,FreeArgs

ShutDown9000:	bsr	CloseFiles

ShutDown1000:	closlib	Dos
		move.l	RetCode,d0
		rts

NoDos:		move.l	#RETURN_FAIL,d0
		rts

NoRDArgs:	lib	Dos,IoErr
		move.l	d0,d1
NoRDArgs2:	clr.l	d2
		lib	Dos,PrintFault
		move.l	#RETURN_FAIL,RetCode
		bra	ShutDown

Printer:	printa	a0
		rts


;Library stuff

		libnames

;Reservations

_stdin:		dc.l	0
_stdout:	dc.l	0
RDArgs1:	dc.l	0
Source1:	dc.l	0
Source2:	dc.l	0
Destination:	dc.l	0
RetCode:	dc.l	RETURN_OK

;Options

CLArray1:
SourceFile1:	dc.l	0
SourceFile2:	dc.l	0
DestFile:	dc.l	0

;Strings, errors etc.

FExistsText1:	dc.b	13,10,"File already exists! Replace? (y/N) ",0
UnknownText1:	dc.b	"Unknown file type!",13,10,13,10
		dc.b	"File header was:",13,10,0
NewestText1:	dc.b	13,10,"This is the newest version of the datafile ",13,10
		dc.b	"for VoiceShell that this program recognizes.",13,10,13,10
		dc.b	"ERROR: Can't convert to anything!",13,10,0
ErrorText1:	dc.b	"Error!",13,10,0

;Strings, others

CLTemplate1:	dc.b	"FROM/A,PREFS,TO/A/K",0
VSConvVersion:	dc.b	"$VER: VoiceShell_Conversion_Utility "
		PROGVERSION
		dc.b	" (c) Copyright Tomi Blinnikka 1995",0

FromFileText1:	dc.b	13,10,"Data file   : ",0
FromFileText2:	dc.b	"Prefs file  : ",0
DestText1:	dc.b	"Destination : ",0

ConvText1:	dc.b	"Converting VoiceShell: ",0
ConvText2:	dc.b	"Converting VCLI: ",0
ConvText3:	dc.b	"(VS02) 1.07 - 1.11 to 1.25 (VS05).",13,10,0
ConvText4:	dc.b	"(VS03) 1.12 - 1.18 to 1.25 (VS05).",13,10,0
ConvText5:	dc.b	"(VS04) 1.19 - 1.24 to 1.25 (VS05).",13,10,0
ConvText9:	dc.b	"VCLI 7.0 to VoiceShell 1.25 (VS05).",13,10,0

IncVerText1:	dc.b	"Incorrect preferences file version, using defaults.",13,10,0

YesText1:	dc.b	"Yes",13,10,0
NoText1:	dc.b	"No",13,10,0
CRLFText1:	dc.b	13,10,0


;File headers

VSVersion02:	dc.b	"VS02",0		;For prefs only!
VSVersion03:	dc.b	"VS03",0		;For prefs only!
VSVersion04:	dc.b	"VS04",0		;For prefs only!
VSVersion05:	dc.b	"VS05",0		;For prefs only!
VCLI70ID:	dc.b	"VCLI7.0 DATA",0

		ds.w	0

DEFPREFS_START:
DefPrefs:	dc.b	"VS05"
		dc.b	0
		dc.b	SAMP_GENERIC
		dc.b	RES_HI
		dc.b	TIMER_B
		dc.b	0
		dc.b	CHANNEL_LEFT
		dc.b	INPUT_LINE
		dc.b	0
		dc.l	120
		dc.w	DefAccVal
		dc.w	0
		dc.w	0
		dc.l	0
		dc.l	0
		dc.l	0

		dc.w	200
		dc.w	31

;Map buffer comes here

;Command list after that

;Error commands after that

DEFPREFS_END:	dc.l	0,0

DefPrefsSize:	EQU	(DEFPREFS_END-DEFPREFS_START)

;Other stuff, part II

		Section VS,BSS

DATA_START:

MapBuffer:	ds.b	(VocabSIZE*304)		;60 words

CmdList:	ds.b	(VocabSIZE*GADLENGTH)

ErrCmdList:	ds.b	(9*GADLENG2)

DATA_END:	ds.l	1

DataSize:	EQU	(DATA_END-DATA_START)


NullBuffer:	ds.b	NullBufSize1
CopyBuffer1:	ds.b	NullBufSize1

		end

