;
;	Excerpt from Amiga ROM Kernel Reference Manual: Libraries and 
;	Devices.  Used by permission, 1987, Phil Staub.
;
;**************************************************************************
;                                                                         *
;	Copyright 1985, Commodore-Amiga Inc. All rights reserved.         *
;	No part of this program may be reproduced, transmitted            *
;	transcribed, stored in retrieval system, or translated into       *
;	any language or computer language, in any form or by any means,   *
;	electronic, mechanical, magnetic, optical, chemical,              *
;	manual or ohterwise, without the prior written permission of      *
;	Commodore-Amiga Incorporated, 983 University Ave. Building #D,    *
;	Los Gatos, California, 95030                                      *
;                                                                         *
;**************************************************************************
	section	printer

;	included files

	include	"exec/types.i"
	include	"exec/nodes.i"
	include	"exec/lists.i"
	include	"exec/memory.i"
	include	"exec/ports.i"
	include	"exec/libraries.i"

	include	"macros.i"

;	imported functions

	XREF_EXE	CloseLibrary
	XREF_EXE	OpenLibrary
	XREF		_AbsExecBase

	XREF		_PEDData

;	exported globals

	XDEF	_Init
	XDEF	_Expunge
	XDEF	_Open
	XDEF	_Close
	XDEF	_PD
	XDEF	_PED
	XDEF	_SysBase
	XDEF	_DOSBase
	XDEF	_GfxBase
	XDEF	_IntuitionBase

;***********************************************
	section	printer,data
_PD		DC.L	0
_PED		DC.L	0
_SysBase	DC.L	0
_DOSBase	DC.L	0
_GfxBase	DC.L	0
_IntuitionBase	DC.L	0
;***********************************************
	section	printer,code
_Init:
	move.l	4(a7),_PD
	lea	_PEDData(pc),a0
	move.l	a0,_PED
	move.l	a6,-(a7)
	move.l	_AbsExecBase,a6
	move.l	a6,_SysBase

;	open the dos library
	lea	DLName(pc),a1
	moveq	#0,d0
	CALLEXE	OpenLibrary
	move.l	d0,_DOSBase
	beq.l	initDLErr

;	open the graphics library
	lea	GLName(pc),a1
	moveq	#0,d0
	CALLEXE	OpenLibrary
	move.l	d0,_GfxBase
	beq.l	initGLErr

;	open the intuition library
	lea	ILName(pc),a1
	moveq	#0,d0
	CALLEXE	OpenLibrary
	move.l	d0,_IntuitionBase
	beq.l	initILErr

	moveq	#0,d0

pdiRTS:
	move.l	(a7)+,a6
	rts

initPAErr:
	move.l	_IntuitionBase,a1
	LINKEXE	CloseLibrary

initILErr:
	move.l	_GfxBase,a1
	LINKEXE	CloseLibrary

initGLErr:
	move.l	_DOSBase,a1
	LINKEXE	CloseLibrary

initDLErr:
	moveq	#-1,d0
	bra.s	pdiRTS

ILName:
	dc.b	'intuition.library'
	dc.b	0
DLName:
	dc.b	'dos.library'
	dc.b	0
GLName:
	dc.b	'graphics.library'
	dc.b	0
	ds.w	0

;
_Expunge:
	move.l	_IntuitionBase,a1
	LINKEXE	CloseLibrary

	move.l	_GfxBase,a1
	LINKEXE	CloseLibrary

	move.l	_DOSBase,a1
	LINKEXE	CloseLibrary

_Open:
	moveq	#0,d0
	rts

_Close:
	moveq	#0,d0
	rts

	end
