ùúùú                                        ; $VER: Allocate 1.0 Staffan Hämälä
; Copyright (c)1994
; Formatting program
; .
; Requires V37+
; -------------------------------------------------------------------
		incdir	include:
		include	LVO/LVOs.i
		include dos/dos.i
		include	intuition/intuition.i

; Version information:

Version:MACRO
	dc.b	'Allocate 1.0'
	ENDM

	lea	DATA,a5			; a5 = DATABASE
	suba.l	a1,a1			; Clear a0
	movea.l	4.w,a6			; Exec base in a6
	CallLib	FindTask		; Find Task
	movea.l	d0,a4			; Save task
	tst.l	$AC(a4)			; check for CLI-structure
	bne.s	.CLI			; Started from CLI

.WB					; Started from WB
	lea	$5C(a4),a0
	CallLib	WaitPort		; Wait for message
	lea	$5C(a4),a0
	CallLib	GetMsg			; Get message
	move.l	d0,a5			; Save message

	CallLib Forbid			; Forbid
	movea.l	a5,a1			; get message in a1
	JMP	_LVOReplyMsg(a6)	; and reply it

.CLI

	lea	DosName(pc),a1
	moveq	#37,d0			; V37 is required!
	CallLib	OpenLibrary
	move.l	d0,DosBase(a5)
	beq.b	.NoDos

	lea	Template(pc),a0
	move.l	a0,d1			; Formatting string.
	lea	Opts(a5),a0
	move.l	a0,d2			; Array of longwords for results, 1 per template entry.
	moveq	#0,d3			; Optional rdargs structure for options.
	move.l	DosBase(a5),a6
	CallLib	ReadArgs
	move.l	d0,ReturnReadArgs(a5)
	bne.s	.OkReadArgs

	moveq	#0,d2
	bsr.w	PrintIoErr
	bra.w	.NoReadArgs
.OkReadArgs:

	bsr	MainProgram


	move.l	ReturnReadArgs(a5),d1
	move.l	DosBase(a5),a6
	CallLib	FreeArgs		;Free some allocated memory

.NoReadArgs:
	move.l	DosBase(a5),a1
	move.l	4.w,a6
	CallLib	CloseLibrary
.NoDos:
	moveq	#0,d0
	rts				; exit


MainProgram:
	rts











************************************************************************
*
*	Type:	PrintIoErr	Prints system error message
*
*	In	d2	header
*
*	Out	-
*

PrintIoErr:	movem.l	d0-d2/a0-a1/a6,-(sp)
		tst.l	DosBase(a5)
		bne.s	.DosBaseExist

		Move.l	4.w,a6			;open "old" doslib!
		Lea	DosName(pc),a1
		move.l	#33,d0
		CallLib	OpenLibrary
		Move.l	d0,DosBase(a5)
		beq.s	.NoMess

		move.l	DosBase(a5),a6
		moveq.l	#ERROR_INVALID_RESIDENT_LIBRARY,d1
		CallLib	SetIoErr

.DosBaseExist:	move.l	DosBase(a5),a6
		CallLib	IoErr
		move.l	d0,d1
		beq.s 	.NoMess
		CallLib	PrintFault
.NoMess:	movem.l (sp)+,d0-d2/a0-a1/a6
		rts

; ------------------------------------------------------------------------
;     Data
; ------------------------------------------------------------------------
DosName:dc.b	'dos.library',0
	dc.b	'$VER:'
	Version
	dc.b	' Copyright ©1994 by Staffan Hämälä '
	IncBin	ENV:Date
	dc.b	' - This is FREEWARE!',0


RequireText:		dc.b	10,"This program requires 2.x or higher",0
Template:		dc.b	"MemLocation/A,MemSize/A",0

	STRUCTURE	BSS,0
		LONG	ReturnReadArgs
		LONG	DosBase
		STRUCT	Opts,2*4		;For use with Template!
	LABEL	BSS_SizeOf


	Section	BSS_Data,BSS
DATA:
	ds.b	BSS_SizeOf
