;==================================================================
;===
;===	Name:	ConGlue.asm
;===
;===	Author:	Bjørn Reese & Michael Berg
;===
;===	Glue code for 'con.library'
;===
;==================================================================

	XREF	_ConBase

;--- First the _LVO's ---------------------------------------------

_LVOOpenCon	EQU -30
_LVOCloseCon	EQU -36
_LVODoFormat	EQU -42
_LVOUserNotes	EQU -48
_LVODefineChars	EQU -54
_LVODisplayRaw	EQU -60
_LVODisplay	EQU -66
_LVOAccept	EQU -72
_LVOAcceptString EQU -78
_LVOSetMsgHandler EQU -84
_LVOGetInfo	EQU -90
_LVOSetGfx	EQU -96
_LVOGotoXY	EQU -102
_LVOCursor	EQU -108
_LVOScroll	EQU -114
_LVOConvert	EQU -120

;--- Custom Macro -------------------------------------------------

CALLCON: MACRO
	move.l	a6,-(sp)
	move.l	_ConBase,a6
	jsr	_LVO\1(a6)
	move.l	(sp)+,a6
	rts
	ENDM

;--- The glue code itself -----------------------------------------

	XDEF	_OpenCon
_OpenCon:
	move.l	4(sp),a0		; ConWindow
	move.l	8(sp),d0		; CursorMode
	CALLCON	OpenCon

	XDEF	_CloseCon
_CloseCon:
	move.l	4(sp),a0		; ConHandle
	CALLCON	CloseCon

	XDEF	_DoFormat
_DoFormat:
	movem.l	a2/a3/a6,-(sp)
	movem.l	12+4(sp),a0-a3		; ConHandle, String, FormatArgs, TextBuffer
	move.l	12+20(sp),d0		; BufferSize
	move.l	_ConBase,a6
	jsr	_LVODoFormat(a6)
	movem.l	(sp)+,a2/a3/a6
	rts

	XDEF	_UserNotes
_UserNotes:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; UserText
	move.w	12(sp),d0		; NoteNumber
	CALLCON	UserNotes

	XDEF	_DefineChars
_DefineChars:
	move.w	4(sp),d0		; Mode
	move.l	6(sp),a1		; BitTable
	move.l	10(sp),a2		; ArrayOfChars
	CALLCON	DefineChars

	XDEF	_DisplayRaw
_DisplayRaw:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; String
	move.l	12(sp),d0		; MaxLength
	CALLCON	DisplayRaw

	XDEF	_Display
_Display:
	movem.l	a2/a6,-(sp)
	movem.l	8+4(sp),a0/a1/a2	; ConHandle, String, FormatArgs
	move.l	8+16(sp),d0		; MaxLength
	move.l	_ConBase,a6
	jsr	_LVODisplay(a6)
	movem.l	(sp)+,a2/a6
	rts

	XDEF	_Accept
_Accept:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; AcceptStructure
	move.l	12(sp),d0		; Flags
	CALLCON	Accept

	XDEF	_AcceptString
_AcceptString:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; AcceptStructure
	move.l	12(sp),d0		; Flags
	CALLCON	AcceptString

	XDEF	_SetMsgHandler
_SetMsgHandler:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; NewMsgHandler
	CALLCON	SetMsgHandler

	XDEF	_GetInfo
_GetInfo:
	move.l	4(sp),a0		; ConHandle
	move.l	8(sp),a1		; ConInfo
	CALLCON	GetInfo

	XDEF	_SetGfx
_SetGfx:
	movem.l	d2/a6,-(sp)
	move.l	8+4(sp),a0		; ConHandle
	movem.w	8+8(sp),d0/d1/d2	; Styles, FgCol, BgCol
	move.l	_ConBase,a6
	jsr	_LVOSetGfx(a6)
	movem.l	(sp)+,d2/a6
	rts

	XDEF	_GotoXY
_GotoXY:
	move.l	4(sp),a0		; ConHandle
	movem.w	8(sp),d0/d1		; X, Y
	CALLCON	GotoXY

	XDEF	_Cursor
_Cursor:
	move.l	4(sp),a0		; ConHandle
	move.w	8(sp),d0		; Mode
	CALLCON	Cursor

	XDEF	_Scroll
_Scroll:
	move.l	4(sp),a0		; ConHandle
	move.w	8(sp),d0		; Step
	CALLCON	Scroll

	XDEF	_Convert
_Convert:
	movem.l	a2/a6,-(sp)
	move.l	8+4(sp),a1		; String
	move.l	8+8(sp),a2		; ResultBuffer
	move.l	8+12(sp),d0		; Flags
	move.w	8+16(sp),d1		; MaxLength
	move.l	_ConBase,a6
	jsr	_LVOConvert(a6)
	movem.l	(sp)+,a2/a6
	rts

	END
