
	SECTION	MountENVrs000000,CODE

	include	lvos
	include	systab.st

	mc68000

	clrFO
_exec	fo.l	1
_allp3	fo.l	1
_all3	fo.l	1
_allp2	fo.l	1
_all2	fo.l	1
_allp1	fo.l	1
_all1	fo.l	1
_arg2	fo.l	1
_arg1	fo.l	1

ProgStart
	moveq	#RETURN_FAIL,d7
	movea.l	(4),a6
	moveq	#dvi_SIZEOF,d0
	move.l	#MEMF_PUBLIC!MEMF_CLEAR,d1
	sys	AllocMem
	tst.l	d0
	beq	_quit
	movea.l	d0,a2

	iniFO	a5,a0,d0
	move.l	a6,(_exec,a5)
	lea	(_all1,a5),a0
	lea	(_hand,pc),a1
	bsr	_alloc
	move.l	d0,(dvi_Handler,a2)
	beq	_err
	move.l	#2000,(dvi_Stacksize,a2)
	moveq	#5,d0
	move.l	d0,(dvi_Priority,a2)
	moveq	#-1,d0
	move.l	d0,(dvi_GlobVec,a2)
	moveq	#36,d0
	lea	(_dosn,pc),a1
	sys	OpenLibrary
	tst.l	d0
	beq	_err
	movea.l	d0,a6

	moveq	#LDF_ALL!LDF_READ,d1
	sys	LockDosList
	move.l	d0,d1
	beq.b	.ndl
	lea	(_env,pc),a0
	move.l	a0,d2
	moveq	#LDF_ALL,d3
	sys	FindDosEntry
	move.l	d0,d2
	beq	.nf
	moveq	#5,d7
.nf	moveq	#LDF_ALL!LDF_READ,d1
	sys	UnLockDosList
.ndl	tst.l	D2
	bne	_err2
	lea	(_envarc,pc),a0
	move.l	a0,d1
	moveq	#SHARED_LOCK,d2
	sys	Lock
	move.l	d0,d1
	beq.b	\nl
	sys	UnLock
\nl	lea	(_temp,pc),a0
	move.l	a0,d1
	lea	(_arg1,a5),a0
	move.l	a0,d2
	moveq	#0,d3
	sys	ReadArgs
	move.l	d0,d6
	beq	_err2
	lea	(_all2,a5),a0
	lea	(_env,pc),a1
	move.l	(_arg1,a5),d0
	beq.b	\narg
	movea.l	d0,a1
\narg	bsr	_alloc
	move.l	d0,(dvi_Name,a2)
	beq.b	_err3
	move.l	(_arg2,a5),d0
	beq.b	\narg2
	lea	(_all3,a5),a0
	movea.l	d0,a1
	bsr.b	_alloc
	move.l	d0,(dvi_Startup,a2)
\narg2	lea	(_expn,pc),a1
	movea.l	a6,a4
	movea.l	(_exec,a5),a6
	sys	OldOpenLibrary
	tst.l	d0
	beq.b	_fail
	movea.l	d0,a6
	movea.l	a2,a0
	moveq	#0,d0
	moveq	#0,d1
	sys	AddDosNode
	tst.l	d0
	beq.b	.fn
	moveq	#RETURN_OK,d7

.fn	movea.l	a6,a1
	movea.l	(_exec,a5),a6
	sys	CloseLibrary
_fail	movea.l	a4,a6
_err3	move.l	d6,d1
	sys	FreeArgs
_err2	movea.l	a6,a1
	movea.l	(_exec,a5),a6
	sys	CloseLibrary
	tst.l	d7
	beq	_skip
_err	moveq	#dvi_SIZEOF,d0
	movea.l	a2,a1
	sys	FreeMem
	moveq	#2,d2
	lea	(_all1,a5),a2
.loop	move.l	(a2)+,d0
	move.l	(a2)+,d1
	beq	.roll
	movea.l	d1,a1
	sys	FreeMem
.roll	dbf	d2,.loop
_skip	unlk	a5
_quit	move.l	d7,D0
	rts

_regs	reg	d2/a2/a3/a6
_alloc	movem.l	_regs,-(sp)
	movea.l	a0,a3
	movea.l	a1,a2
\1	tst.b	(a1)+
	bne.b	\1
	suba.l	a2,a1
	move.l	a1,d0
	subq.l	#1,d0
	beq.b	\err
	move.l	d0,d2
	move.l	a1,d0
	addq.l	#1,d0
	move.l	d0,(a3)+
	moveq	#MEMF_PUBLIC,d1
	movea.l	(_exec,a5),a6
	sys	AllocMem
	move.l	d0,(a3)
	beq.b	\err
	movea.l	d0,a1
	lsr.l	#2,d0
	move.b	d2,(a1)+
\2	move.b	(a2)+,(a1)+
	bne.b	\2
\err	movem.l	(sp)+,_regs
	rts


;	dc.b	'$VER: MountENV 1.2 (28.3.2002)',10,13,0
_temp	dc.b	'DEVNAME/K,STARTUP/F',0
_dosn	dc.b	'dos.library',0
_expn	dc.b	'expansion.library',0
_envarc	dc.b	'ENVARC:',0
_hand	dc.b	'L:HappyENV-handler',0
_env	dc.b	'ENV',0

	end
