***************************************************************************

; library skeleton v37.1 - 15/11/95 by Gunther Nikl - first version

***************************************************************************

; include stuff

		include	exec/types.i
		include	exec/resident.i
		include	exec/libraries.i
		include	exec/initializers.i
		include	lvo30/exec_lib.i

; specific defines

UHRVER		equ	37
UHRREV		equ	1

; macro stuff

RECALL		MACRO
		jsr	_LVO\1(a6)
		ENDM

LIBVEC		macro
		dc.w	\1-FuncTab
		endm

; class base

	STRUCTURE ClassBase,36

	 ULONG	cb_SegList
	 ULONG	cb_SysBase

	LABEL cb_SIZEOF

***************************************************************************

start		moveq	#-1,d0
		rts

***************************************************************************

RomTag		dc.w	RTC_MATCHWORD
		dc.l	RomTag
		dc.l	EndTag
		dc.b	RTF_AUTOINIT
		dc.b	UHRVER
		dc.b	NT_LIBRARY
		dc.b	0
		dc.l	LibName
		dc.l	IdString
		dc.l	InitTab
EndTag

;--------------------------------------------------------------------------

LibName		dc.b	'tolleuhr.library',0
IdString	dc.b	'tolleuhr 37.1 (15.11.95)'
		dc.b	' by M.Fleischer and G.Nikl',13,10,0

;--------------------------------------------------------------------------

		cnop	0,4

InitTab		dc.l	cb_SIZEOF
		dc.l	FuncTab
		dc.l	ResInfo
		dc.l	InitFunc

;--------------------------------------------------------------------------

FuncTab		dc.w	-1
		LIBVEC	LibOpen
		LIBVEC	LibClose
		LIBVEC	LibExpunge
		LIBVEC	LibExtFunc
		LIBVEC	LibClock
		dc.w	-1

;--------------------------------------------------------------------------

ResInfo		INITBYTE LN_TYPE,NT_LIBRARY
		INITLONG LN_NAME,LibName
		INITBYTE LIB_FLAGS,(LIBF_SUMUSED!LIBF_CHANGED)
		INITWORD LIB_VERSION,UHRVER
		INITWORD LIB_REVISION,UHRREV
		INITLONG LIB_IDSTRING,IdString
		dc.w 0

***************************************************************************

		cnop	0,4

InitFunc	suba.l	a1,a1
		cmp.w	#37,20(a6)		; need at least 2.04!
		bcs.s	1$
;		btst	#1,297(a6)		; need  at least a 68020!
;		beq.s	1$
		move.l	d0,a1
		move.l	a0,cb_SegList(a1)	; save seglist
		move.l	a6,cb_SysBase(a1)	; cache SysBase (speed!)
1$		move.l	a1,d0
		rts

;--------------------------------------------------------------------------

LibOpen		addq.w	#1,32(a6)		; one more user
		and.b	#$f7,14(a6)
		move.l	a6,d0
		rts
;--------------------------------------------------------------------------

LibClose	subq.w	#1,32(a6)		; one less user
		bne.s	LibExtFunc
		btst	#3,14(a6)
		bne.s	LibExpunge		; expunge!

;--------------------------------------------------------------------------

LibExtFunc	moveq	#0,d0			; reserved library entry
		rts

;--------------------------------------------------------------------------

LibExpunge	movem.l	a2/a5/a6,-(sp)
		move.l	a6,a5
		suba.l	a2,a2
		or.b	#8,14(a5)		; set LIBF_DELEXP
		tst.w	32(a5)
		bne.s	1$			; still in use..
		move.l	cb_SysBase(a5),a6
		move.l	cb_SegList(a5),a2	; get seglist
		move.l	a5,a1
		RECALL	Remove
		move.l	a5,a1
		moveq	#0,d0
		move.w	16(a5),d0
		suba.l	d0,a1
		add.w	18(a5),d0
		RECALL	FreeMem
1$		move.l	a2,d0			; return SegList (or NULL)
		movem.l	(sp)+,a2/a5/a6
		rts

;--------------------------------------------------------------------------

		cnop	0,4

LibClock	end
