	SECTION program,CODE

	;Store Parameter Info
		Move.l	D0,Parm_Len
		Move.l	A0,Parm_Ptr

	;Open dos.library
		Move.l	4.w,A6
		Lea	DosName,A1
		Jsr	_LVOOldOpenLibrary(A6)
		Move.l	D0,DosBase

	;Get standard Output
		Move.l	D0,A6
		Jsr	_LVOOutput(A6)
		Move.l	D0,OutHand

	;Check for No Parameters
		Subq.l	#1,Parm_Len
		Beq	Syntax

	;Check for Trailing Spaces
		Move.l	Parm_Ptr,A0
		Move.l	Parm_Len,D0
		Subq.l	#1,D0
Check_Again:	Cmpi.b	#' ',(A0,D0)
		Bne	No_Space
		Subq.l	#1,D0
		Bra.s	Check_Again
No_Space:
		Addq.l	#1,D0
		Move.l	D0,Parm_Len

	;Add Null char at end of filename.
		Move.l	Parm_Ptr,A0
		Add.l	D0,A0
		move.b	#0,(A0)

	;Try to get a Lock on the file.
		Move.l	Parm_Ptr,D1
		Moveq.l	#-2,D2
		Jsr	_LVOLock(A6)
		Tst.l	D0
		Beq	FileNotFound
		Move.l	D0,Handle
	
	;Examine the file
		Move.l	D0,D1
		Move.l	#Buffer,D2
		Jsr	_LVOExamine(A6)

	;Store away the file length
		Move.l	Buffer+124,D0
		Move.l	D0,FileLength

	;Remove the Lock
		Move.l	Handle,D1
		Jsr	_LVOUnLock(A6)

	;Check that name given isn't a directory.
		Move.l	Buffer+4,D0
		Tst.l	D0
		Bmi	IsAFile
		Bra	NotAFile

IsAFile:
	;Try to allocate memory for the file.
		Move.l	FileLength,D0
		Moveq.l	#3,D1
		Move.l	4.w,A6
		Jsr	_LVOAllocMem(A6)
		Tst.l	D0
		Beq	NoMemory
		Move.l	D0,Mem_Ptr

	;Now Open the file.
		Move.l	Parm_Ptr,D1
		Move.l	#1005,D2
		Move.l	DosBase,A6
		Jsr	_LVOOpen(A6)
		Tst.l	D0
		Beq	FileNotOpened
		Move.l	D0,Handle

	;Read the file into the allocated memory
		Move.l	Handle,D1
		Move.l	Mem_Ptr,D2
		Move.l	FileLength,D3
		Jsr	_LVORead(A6)

	;Close the file
		Move.l	Handle,D1
		Jsr	_LVOClose(A6)

	;Write the data to the default output.
		Move.l	Mem_Ptr,D2
		Move.l	FileLength,D3
OutMess:	Move.l	OutHand,D1
		Move.l	DosBase,A6
		jsr	_LVOWrite(A6)

	;Free the memory
Exit_FreeMem:	Move.l	Mem_Ptr,A1
		BEQ	SkipFreeMem
		Move.l	FileLength,D0
		Move.l	4.w,A6
		Jsr	_LVOFreeMem(A6)
SkipFreeMem:		
		Moveq.l	#0,D0
		Rts

FileNotFound:
FileNotOpened:
NotAFile:
NoMemory:
Syntax:
	;Output ERROR.
		Move.l	#Message_Ptr,D2
		Move.l	#Message_Len,D3
		BRA.s	OutMess


DosName: 	dc.b	"dos.library",0

Message_Ptr:	dc.b	$9B,"33mERROR!",$9B,"31m",10
Message_Len:	Equ	*-Message_Ptr

	SECTION	uninitialised,BSS

Parm_Len:	ds.l	1
Parm_Ptr:	ds.l	1
Handle:		ds.l	1
FileLength:	ds.l	1
Mem_Ptr:	ds.l	1
OutHand:	ds.l	1
DosBase:	ds.l	1

Buffer:		ds.b	260

