 		incdir "includes:"


	INCLUDE exec/execbase.I
	IFND    EXEC_TYPES_I
	INCLUDE exec/types.i
	ENDC

	IFND EXEC_NODES_I		
	include "exec/nodes.i"		
	ENDC
	IFND EXEC_MEMORY_I
	include "exec/memory.i"
	ENDC

	IFND LIBRARIES_DOS_I
	include "libraries/dos.i"
	ENDC
	IFND LIBRARIES_DOSEXTENS_I
	include "libraries/dosextens.i"
	ENDC
	
	IFND LIBRARIES_DOS_LIB_I
	include	"libraries/dos_lib.i"
	ENDC

	IFND LIBRARIES_DOS_VAR_I
	include	"dos/var.i"
	ENDC
	
	IFND EXEC_EXEC_LIB_I
	include "exec/exec_lib.i"
	ENDC

	INCLUDE	"libraries/reqtools.i"
	INCLUDE	"libraries/reqtools_lib.i"

	incdir	"asm:datamaster.library/"
	include	"datamaster.i"

	incdir	"asm:datamaster.library/"
	include	"datamaster_lib.i"


CALLBASE:	MACRO
	jsr	_LVO\1(a6)
		ENDM

JMPBASE:	MACRO
	jmp	_LVO\1(a6)
		ENDM


;TESTING=1


;*****************************************************************************
;
;This source is provided as-is...It's not very well commented,and not very
;'beautiful' in its shape,but the code is 100% clean,even if the source is
;a bit messy ;-)
;
;I used my own slightly modified includes (I HATE case-dependant ASM)
;That's why some of the reqtools offsets had to be modified a bit,for example
;*****************************************************************************

	section	DMControl,code


run:	bsr.w	OPENLIBS
	beq.w	_nolibs

	move.l	_DMbase,a5
	move.l	dmb_dosbase(a5),_dosbase
	move.l	dmb_reqbase(a5),_reqtoolsbase

	CALLDOS Output
	move.l	d0,output

	IFND	TESTING
	bsr	Do_Readargs

	move.l	_S,d0		;check set loadsize
	cmp.l	#5000,d0
	beq.s	.nochg
	move.l	_S,a0
	move.l	(a0),_S
.nochg:

	ENDC

;MAIN STUFF
	bsr	LoadPrefs
	tst.l	PrefsResult
	bne	do_F

OUT:
	lea	flist1,a0		;free file requester
	lea	filereq1,a1
	bsr	FreeFiles

	move.l	PrefsAddr,d0		;preferences handled
	beq.s	.noprf
	move.l	d0,a1
	move.l	PrefsSize,d0
	CALLEXEC FREEMEM
.noprf:	bsr	Do_FreeArgs
	bsr	CLOSELIBS
_nolibs:moveq	#0,d0
	rts


version_string:
	dc.b	"$VER: Datamaster Launcher v1.12b (12.August.1996) © Alexis Nasr (The Cyborg/NGC)",13,10,0
	even

;--------------------------------------------------------------------------
;				Sub branches
;--------------------------------------------------------------------------

do_F:	bsr	RemoveRems

	move.l	_F,a0
	move.l	a0,d0			;did user define filename(s)?
	bne.w	do_all_files		;YES,so do the job now

do_F2:	move.b	#1,req_flag
	move.l	filereq1,filereq	;NO=>reqtools requester...
	move.l	flist1,flist
	move.l	#tagsfiles,myRT_tags

	bsr	Choosefiles
	move.l	flist,flist1
	move.l	filereq,filereq1

	move.l	d0,-(sp)
	move.l	#PathVAR,d1		;setenv DML_REQPATH
	move.l	filereq1,a0
	move.l	rtfi_dir_(a0),d2
	move.l	#-1,d3
	move.l	#GVF_GLOBAL_ONLY,d4
	CALLDOS SETVAR
	move.l	(sp)+,d0

	tst.l	d0
	beq	OUT
	move.l	#mypath,_TF
	move.l	flist1,a0
do_req_files:			;loop for Reqtools requester chosen files
.loo:	move.l	rtfl_Name(a0),d0
	beq.w	OUT
	move.l	a0,currname
	bsr.s	.stick
	bsr.w	do_file
	move.l	currname,a0
	tst.l	d0		;get result of do_file
	beq	OUT
	move.l	rtfl_next(a0),d0
	beq	.another
	move.l	d0,a0
	bra.s	.loo

.another:			;ask for another file.
	lea	flist1,a1	;wipe out the previous reqlist but keep the requester
	move.l	(a1),a0
	clr.l	(a1)
	move.l	_reqtoolsbase,a6
	jsr	_LVOrtFreeFileList(a6)
	bra	do_F2

.stick:	move.l	a0,-(sp)	;d0=name
	move.l	d0,-(sp)	;NAME
	clr.b	mypath
	move.l	#mypath,d1
	move.l	filereq1,a0
	move.l	rtfi_dir_(a0),d2
	move.l	#300,d3
	CALLDOS	Addpart
	move.l	(sp)+,d2	;get back name
	move.l	#mypath,d1
	move.l	#300,d3
	CALLDOS	Addpart
	move.l	(sp)+,a0
	rts

currname:
	dc.l	0

do_all_files:			;loop for ReadArgs() files
.loo:	move.l	(a0)+,d0
	beq.w	OUT
	move.l	d0,_TF
	move.l	a0,currname
	bsr.s	do_file
	move.l	currname,a0
	tst.l	d0
	beq	OUT
	bra.s	.loo

do_file:move.l	_TF,a0		;name
	move.l	#recoF_checkpatt,d1
	move.l	_XPK,d0
	beq.s	.norm
.xpk:	add.l	#recoF_xpkload,d1					;flags
.norm:	move.l	_NC,d0
	bne.s	.norm2
	add.l	#recoF_checkdata,d1					;DATAcheck
.norm2:
	move.l	d1,-(sp)
	move.l	_TF,d1		;create a striped() name
	move.l	_dosbase,a6
	CALLBASE Filepart	
	move.l	d0,_TF2

	move.l	#nameVAR,d1			;setenv DML_FILENAME
	move.l	d0,d2
	move.l	#-1,d3
	move.l	#GVF_GLOBAL_ONLY,d4
	CALLDOS SETVAR

	move.l	#fileVAR,d1			;setenv DML_FILE
	move.l	_TF,d2
	move.l	#-1,d3
	move.l	#GVF_GLOBAL_ONLY,d4
	CALLDOS SETVAR

	move.b	nodef_flag,d0
	cmp.b	#2,d0
	beq.s	.forceall
	clr.b	nodef_flag
.forceall:

	move.l	(sp)+,d1
	move.l	_S,d0							;size
	move.l	_TF,a0
	CALLDM	dmTestFile
	move.l	d0,.handle
	tst.l	d0
	bne.s	.ok


	lea	LoaderrMSG,a1		;"couldn't test file"
	lea	LoaderrGADS,a2
	move.l	_TF2,PC_Array
	bsr	DoReq2
	cmp.l	#1,d0			;continue?
	bne.w	.cont			;yes
.err:	move.l	.handle,a0
	CALLDM dmFreeDMHandle
	moveq	#0,d0			;no (stop all other files)
	rts
.ok:
;<COMPARISON WITH PREFS HERE>
	move.l	d0,a0
	move.l	dmh_string(a0),d0
	move.b	#0,force_flag
	move.l	d0,d6			;d6=store adr of RECOGNIZERNAME
.retry:	move.l	prefsaddr,a3		;these will remain untouched
	move.l	prefssize,d3
	move.l	_DMbase,a6
	bsr	FINDTYPE		;will use the D7=SIZE to check more precisely if packer is good
	tst.l	d0
	bne.w	.nodef

	lea	actt,a3		;get ACTION string
	move.l	#echoerr,d4
	bsr	GETSTRING
	move.l	d4,actiontxt

	move.l	a2,a0
	lea	flagt,a1	;find FLAGS if any
	move.l	#-1,d0
	CALLBASE dmFindTextNC
	tst.l	d0
	bne.s	.noflags

	move.l	a1,a0		;new bounds where to find flags
	sub.l	a2,a1
	sub.l	a1,d2
	move.l	a0,a2

	move.l	a2,a0
	lea	allft,a1	;find ALLFILES flag
	move.l	#-1,d0
	CALLBASE dmFindTextNC
	tst.l	d0
	bne.s	.noflags

.allfiles:				;ALLFILES=>we must create the list
	move.b	#1,all_flag
	bsr	makehugelist
	move.l	rawbuffadr,_TF		;make a 'really big' filename hehehe
.noflags:

	move.l	actiontxt,a0
	move.l	_TF,PC_array
	bsr	PrintC
	
	move.l	#PC_buff,d1
	moveq	#0,d2
	move.l	output,d3

	IFND	TESTING
	CALLDOS	EXECUTE		;damn asm-one! coded like a sh..... :°[
	ENDC
	
	tst.b	all_flag		;if it was a ALLFILES execute()
	beq.s	.quit			;then free the 'hugebuffer' (if succeded ;-)
	move.l	rawbuffadr,d0
	beq.s	.quit
	move.l	d0,a1
	move.l	#rawbuffsize,d0
	CALLEXEC FREEMEM
.quit:	rts

.handle:dc.l	0

.cont:	moveq	#1,d0		;ok
	rts

.nodef:	move.b	nodef_flag,d0
	beq.s	.ask
	tst.b	force_flag	;was this the generic that failed??? (noo!?)
	bne.s	.nogene		;yes! DAMN!!!
.force:	move.b	#1,force_flag	;...else try forcing with generic
	move.l	#generictxt,d6
	bra.w	.retry
	
.ask:	lea	notypeMSG,a1
	lea	notypeGADS,a2
	move.l	_TF2,PC_Array
	move.l	d6,PC_Array+4
	bsr	DoReq2
	tst.l	d0		;cancel
	beq	.err
	move.b	d0,nodef_flag
	bra.s	.force

.nogene:lea	nogeneMSG,a1
	bsr	Doreq
	bra	.err
	
actiontxt:
	dc.l	0
nodef_flag:		;1 => Force once / 2=> force all
	dc.b	0
force_flag:		;means we've already tried testing with generic
	dc.b	0
req_flag:
	dc.b	0	;if 1 means we used the filerequester
all_flag:
	dc.b	0	;ALLFILES flag
	even

rawbuffsize=10000		;10 kb! ;-) sorry
makehugelist:
	move.l	#Rawbuffsize,d0
	move.l	#MEMF_CLEAR+MEMF_ANY,d1
	CALLEXEC ALLOCMEM
	tst.l	d0
	bne.s	.ok
	rts
.ok:	move.l	d0,rawbuffadr
	move.l	d0,rawbuffprogress
	tst.b	req_flag
	bne.s	.req
	bra.s	.cli
.end:	move.l	rawbuffprogress,a0
	subq	#2,a0
	move.b	(a0),d0
	cmp.b	#32,d0
	bne.s	.endd
	move.b	#0,(a0)
.endd:	rts


.REQ:	move.l	currname,a0
.loo:	move.l	rtfl_Name(a0),d0
	beq.w	.end
	move.l	a0,currname
;	move.l	d0,-(sp)		;this 'd be ok for names without path
	bsr	do_req_files\.stick
;	move.l	(sp)+,a0
	lea	mypath,a0
	bsr.s	addname
	move.l	currname,a0
	move.l	rtfl_next(a0),d0
	beq	.end
	move.l	d0,a0
	bra.s	.loo

.CLI:	move.l	currname,a0
.loo2:	move.l	(a0)+,d0
	beq.w	.end
	move.l	a0,currname
	move.l	d0,a0
	bsr.s	addname
	move.l	currname,a0
	bra.s	.loo2


ADDNAME:			;a0

	move.l	rawbuffadr,d2
	add.l	#rawbuffsize,d2	;limit
	move.l	rawbuffprogress,a1
	move.b	#'"',(a1)+
.cont:	move.b	(a0)+,(a1)+
	cmp.l	a1,d2
	beq.s	.stop
	tst.b	-1(a0)
	bne.s	.cont
	move.b	#'"',-1(a1)
	move.b	#" ",(a1)+
.stop:	move.l	a1,rawbuffprogress
	rts

rawbuffadr:
	dc.l	0
rawbuffprogress:
	dc.l	0

;finds filetype in the prefsfile,then makes new bounds begin from the line after
;the string til end of prefsfile
;IN:a3/d3=prefsadr+size
;OUT:d0=0 if OK & then a2/d2 'd be set to good values.
FINDTYPE:
	movem.l	d5/d6,-(sp)
	lea	typet,a0
	lea	typebuff,a1
	CALLBASE dmCopyStringNZ
	move.l	a0,a1
	move.l	d6,a0
	CALLBASE dmCopyString
	bsr	.sub1
	movem.l	(sp)+,d5/d6
	tst.l	d0
	rts
.sub1:	bsr	.do
	move.l	d5,d2
	tst.l	d0
	beq.s	.sub2
	rts
.sub2:	move.l	a2,a0
	lea	enddef,a1	;find REAL limit now
	move.l	#-1,d0
	CALLBASE dmFindTextNC
	tst.l	d0
	beq.s	.good
	rts
.good:	move.l	a0,d2
	sub.l	a2,d2		;=new size of scanzone
	rts
.do:	move.l	a3,a2
	move.l	d3,d2
	move.l	_DMbase,a6

.retry:	move.l	a2,a0
	lea	typebuff,a1
	move.l	#-1,d0
	CALLBASE dmFindTextNC
	tst.l	d0
	bne.w	.noprefsForThisReco
	move.l	a1,a0		;current position
	move.l	a0,a2		;=new beginning

	move.l	d2,d5
	lea	EOLtext,a1	;find limit=end of line
	move.l	#-1,d0
	CALLBASE dmFindTextC
	tst.l	d0
	beq.s	.ok
	rts
.ok:	move.l	a0,d2
	sub.l	a2,d2		;=new size of scanzone
	moveq	#0,d0		;ok! no size needs
	rts
		
.noprefsforthisreco:
	moveq	#1,d0
	rts


				;finds a string,puts 0 at the end
GETSTRING:			;a3 name=flag.answer:d4=defstring
				;d4=outstring (or defstring if none)
	move.l	a2,a0		;note:d0=0 if ok else =1
GETSTRING2:			;like getstring,but a0=beginning
	move.l	a3,a1
	move.l	#-1,d0		;if OK:d0=0 ,d4=data,a0=adr AFTER string
	move.l	_DMbase,a6
	CALLBASE dmFindTextNC	;esle :d0=1          a0= (same)
	move.l	a1,a0
	tst.l	d0
	bne.s	.back
	bsr	skipspaces
	tst.l	d0
	bne.s	.back		;no string!
	move.l	a0,d4		;string=ok
.notEOL:move.b	(a0)+,d0
	beq.s	.EOL		;test if $a **OR** zero if it's not the 1st time we call this routine!!!
	cmp.b	#10,d0
	beq.s	.EOL
	bra.s	.notEOL	
.EOL:	clr.b	-1(a0)		;replace EOL by zero
	moveq	#0,d0
.back:	rts

Skipspaces:		;a0=adr of data	.uses d0 as scratch =>get to good data
			;returns d0=0 if OK else no data :(
.loop:	move.b	(a0),d0
	cmp.b	#" ",d0		;space
	beq.s	.skip
	cmp.b	#"	",d0	;tab
	beq.s	.skip
	cmp.b	#10,d0
	beq.s	.err
	moveq	#0,d0
	rts	
.err:	moveq	#1,d0
	rts
.skip	addq	#1,a0
	bra.s	.loop

	
;*********************************************************************	
;
;			Prefs handling routines
;
;*********************************************************************	

LoadPrefs:
	move.l	_PF,a0
	bsr.w	.getlen
	tst.l	d0			;file not found=>err!
	beq	.fileerr
	move.l	d0,PrefsSize

	move.l	#MEMF_ANY+MEMF_CLEAR,d1
	CALLEXEC ALLOCMEM
	tst.l	d0
	beq.s	.memerr

	move.l	d0,PrefsAddr
	bsr	.load
	move.l	d0,PrefsResult
	tst.l	d0
	beq.s	.fileerr
	rts
				;if error,we may close the file
.memerr:move.l	d6,d1
	move.l	_dosbase,a6
	CALLBASE CLOSE

.fileerr:
	lea	noprefsmsg,a1
	move.l	_PF,PC_Array
	bra	DoReq




.getlen:			;get file length (IN:a0=name/OUT:d0=size)
	move.l	a0,d1			;name
	move.l	#MODE_OLDFILE,d2
	move.l	_dosbase,a6
	CALLBASE OPEN
	tst.l	d0
	bne.s	.nozero
	rts
.nozero:move.l	d0,d6			;d6=filehandle

	move.l	d6,d1
	moveq	#0,d2
	move.l	#OFFSET_END,d3

.seek:	movem.l	d1-d3,-(sp)		;WHY double seek?????
	move.l	_dosbase,a6
	CALLBASE SEEK
	movem.l	(sp)+,d1-d3
	JMPBASE SEEK

.load:	move.l	d6,d1
	moveq	#0,d2
	move.l	#OFFSET_BEGINNING,d3	;go back at the beginning!! :-)
	bsr	.seek

	move.l	d6,d1			;handle
	move.l	PrefsAddr,d2		;adr
	move.l	PrefsSize,d3		;size

	move.l	_dosbase,a6
	CALLBASE READ
	move.l	d0,-(sp)
	move.l	d6,d1
	CALLBASE CLOSE
	move.l	(sp)+,d0		;result
	rts


;treat all the txt such as => each EOL($a) is JUST after last char
;(no more tabs,comments,spaces...)
RemoveRems:
	move.l	PrefsAddr,d6
	add.l	PrefsSize,d6		;maxpos
	move.l	PrefsAddr,a0
.loop:	move.b	(a0),d0
	cmp.b	#";",d0
	beq.s	.wipeline
	addq	#1,a0
	cmp.l	a0,d6
	bhi.s	.loop
	rts
.wipeline:
	move.l	a0,-(sp)	;pushreg.we'll come back here later
.loop2:	move.b	-(a0),d0
	cmp.b	#" ",d0
	beq.s	.rplc
	cmp.b	#"	",d0
	beq.s	.rplc	
	bra.s	.rewdone
.rplc:	move.b	#10,(a0)
	bra.s	.loop2
.rewdone:
	move.l	(sp)+,a0
	move.b	#10,(a0)+	;remove the ";"
	move.b	(a0),d0		;& check rest of line
	cmp.b	#10,d0		;we clear everythin (fill with LF) till we find THE real line LF
	beq.s	.Loop
	cmp.l	a0,d6
	bhi.s	.wipeline
	rts



;*********************************************************************	
;
;
;			Misc Routines
;
;
;*********************************************************************	

DoReq:					;+a1=msg
	lea	NoAnswerGADS,a2
DoReq2:					;+a2=gads
	lea	rq_msgtags,a0
	sub.l	a3,a3			
	lea	PC_Array,a4
	move.l	_reqtoolsbase,d0
	beq.s	.noreq
	move.l	d0,a6
	jmp	_LVOrtEZRequestA(a6)
.noreq:	moveq	#1,d0			;"YES"
	rts




PRINTC:			;IN:		a0=format string
			;**PRESERVES ALL REGS**

	movem.l	a0-a6/d0-d7,-(sp)
	bsr.s	.do
	movem.l	(sp)+,a0-a6/d0-d7
	rts

.do:	lea	PC_array,a1
	lea	PC_buff,a2
.ok:	move.l	a2,a3
	lea	.putch,a2
	CALLEXEC RawDoFmt
	rts
.putch:	move.l	a3,PC_adr
	move.b	d0,(a3)+
	rts


;---------------------------------------------------------------------------
;			Generic File requester
;
;Sample call:	move.l	myrequester1,filereq	;may be NULL 1st time
;		move.l	myreqlist1,flist	;same
;		bsr	Choosefiles
;		move.l	flist,myreqlist
;		move.l	filereq,myrequester1
;
;NOTE:These reqtools routines may see overcomplicated,it's only because I've
;taken them from another project of mine,that needed more flexibility. :-)
;---------------------------------------------------------------------------
Choosefiles:
	move.l	#PathVAR,d1		;getenv DML_PATHNAME
	move.l	#mypath,d2
	move.l	#400,d3
	move.l	#GVF_GLOBAL_ONLY,d4
	CALLDOS GETVAR

	move.l	_reqtoolsbase,a6
	tst.l	filereq
	bne.s	FRCreqok
	clr.b	filename
	move.l	#RT_FILEREQ,d0
	sub.l	a0,a0
	jsr	_LVOrtAllocRequestA(a6)
	move.l	d0,filereq
	bne.s	FRCreqok

nomem_for_req:
	lea	rq_msgtags,a0
	lea	nomemtxt,a1
	lea	noanswergads,a2
	sub.l	a3,a3
	sub.l	a4,a4
	sub.l	a0,a0
	jsr	_LVOrtEZRequestA(a6)
	moveq	#0,d0				;error
	rts

FRCreqok:
	move.l	filereq(pc),a1			;add the PATTERN GADGET
	lea	Moretags,a0
	jsr	_LVOrtChangeReqAttrA(a6)

	move.l	filereq(pc),a1			;NOW open the requester
	lea	filename,a2
	move.l	myRT_title,a3
	move.l	myRT_tags,a0
	jsr	_LVOrtFileRequestA(a6)
	move.l	d0,flist
	rts


;		Free lists & request if needed
;			IN:	a0=LEA on pointer to Filelist
;				a1=LEA on pointer to filerequester
;	This in order to handle clearing of these easily.All handled.
FreeFiles:
	move.l	(a1),d0		;major condition=req
	bne.s	.ok
	rts
.ok	move.l	a1,-(sp)
	move.l	(a0),d0
	beq.s	.nolist
	clr.l	(a0)
	move.l	d0,a0
	move.l	_reqtoolsbase,a6
	jsr	_LVOrtFreeFileList(a6)
.nolist:move.l	(sp)+,a1
	move.l	(a1),d0
	clr.l	(a1)
	move.l	d0,a1
	jmp	_LVOrtFreeRequest(a6)



;pointers

filereq:dc.l	0
flist:	dc.l	0

myRT_tags:
	dc.l	0
myRT_title:
	dc.l	titl

filereq1:dc.l	0	;as many as needed
flist1:	dc.l	0
dirreq1:dc.l	0


tagsfiles:			;multiselect
	dc.l	RTFI_flags,FREQF_MULTISELECT+FREQF_PATGAD+FREQF_NOBUFFER
	dc.l	TAG_END

;*********************************************************************	
;
;
;				Misc/Startup routines
;
;
;*********************************************************************	
DO_READARGS:
	move.l	#args_template,d1
	move.l	#Myargs,d2
	moveq	#0,d3
	CALLDOS	ReadArgs
	move.l	d0,ArrayAdr
	rts

DO_FREEARGS:
	IFND	TESTING
	move.l	ArrayAdr,d1
	CALLDOS	FreeArgs
	rts
	ENDC

Openlibs:
	lea	DM_name,a1
	moveq	#0,d0
	CALLEXEC Openlibrary
	move.l	d0,_DMbase
	rts

Closelibs:
	move.l	_DMbase,a1
	move.l	a1,d0
	bne.s	.do
	rts
.do:	CALLEXEC Closelibrary
	rts

arrayadr:
	dc.l	0
PrefsAddr:
	dc.l	0
PrefsSize:
	dc.l	0
PrefsResult:
	dc.l	0	;if zero,means loading of prefs FAILED

myargs:
_F:	dc.l	0	;dc.b	"F=FILES/K/M,"
_XPK:	dc.l	0	;dc.b	"XPK/K/S,"
_S:	dc.l	5000	;dc.b	"SIZE/K/N,"
_NC:	dc.l	0	;dc.b	"NC=NODATACHECK/K/S"
_PF:	dc.l	pfname	;dc.b	"PF=PREFSFILE/K"


_TF:	dc.l	0	;CURRENT file!! (NOT a ReadArgs param!!)
_TF2:	dc.l	0	;striped name


_DMbase:
	dc.l	0
_dosbase:
	dc.l	0
_reqtoolsbase:
	dc.l	0
			section "stuff",data


DM_name:dc.b	"datamaster.library",0
pfname:	dc.b	"S:DMlauncher.prefs",0

		
args_template:
	dc.b	"F=FILES/K/M,"
	dc.b	"XPK/K/S,"
	dc.b	"S=SIZE/K/N,"
	dc.b	"NC=NODATACHECK/K/S,"
	dc.b	"PF=PREFSFILE/K"
	dc.b	0
	even
	
rq_msgtags:
	dc.l	RTEZ_reqtitle,rq_title
	dc.l	RTEZ_flags,EZREQF_CENTERTEXT
	dc.l	RT_underscore,"_"
	dc.l	TAG_DONE
rq_msgtagsEnd

NoAnswerGADS:
	dc.b	"_Understood!",0
rq_title:
	dc.b	"DMlauncher message",0

generictxt:
	dc.b	"generic",0

noprefsMSG:
	dc.b	"Couldn't load prefs file",10,"%s",0

NotypeMSG:
	dc.b	"%s is a >>%s<< file",10
	dc.b	"There is no action defined for this type",10
	dc.b	"Should I use the 'Generic' type action?",10,10
	dc.b	"Note:think of defining one ;-)",0

NotypeGADS:
	dc.b	"_Yes|_ALL undefined to generic|_Stop",0

nogeneMSG:
	dc.b	"WHAT??? Not even a definition for the 'Generic' type??",10
	dc.b	"Hey,go to hell!!! A program needs a user,to work ya know",10,0

LoaderrMSG:
	dc.b	"Error while testing file %s",10,0

LoaderrGADS:
	dc.b	"_Continue|_Abort all others",0
	even

moretags:
	dc.l	RTFI_MATCHPAT
patt:	dc.l	mypatt
	dc.l	RTFI_DIR
	dc.l	mypath
	dc.l	TAG_END


nomemtxt:
	dc.b	"No memory for filerequester!!",0

titl:	dc.b	"DMlauncher : Choose File(s)",0
	
enddef:	dc.b	"end_def",0
actt:	dc.b	"action=",0
flagt:	dc.b	"flags=",0
typet:	dc.b	"type=",0
allft:	dc.b	"allfiles",0

echoerr:dc.b	'echo "Hey!!! Think of defining an action,OK????',0

EOLtext:dc.b	10,0

pathVAR:	dc.b	"DML_REQPATH",0
nameVAR:	dc.b	"DML_FILENAME",0
fileVAR:	dc.b	"DML_FILE",0



	
			section	"blanks",BSS
mypatt:	ds.b	50

output:	ds.l	1

PC_adr:	ds.l	1
PC_Array:
	ds.l	30
PC_buff:ds.b	1024
typebuff:
	ds.b	50
mypath:	ds.b	400
filename:
	ds.b	130
buffend:





