; ___________________________________________________________________________
; |*************************************************************************|
; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
; |*| Set TAB to 15 for best readable file layout. |*| HiSoft DevPac 3.04 |*|
; |*|______________________________________________|*|____________________|*|
; |*************************************************************************|
; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
; |*|               |*|  $Id: extra_lib.i (19.03.01)                      |*|
; |*| ###### ###### |*|  RhoSigma Source based on NDK 3.1 Includes 40.15  |*|
; |*| ##  ## ##   # |*| _________________________________________________ |*|
; |*| ##  ##  ##    |*|                                                   |*|
; |*| ######   ##   |*|  The vector offsets of extra.libary's functions   |*|
; |*| ##      ##    |*|                                                   |*|
; |*| ##     ##   # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
; |*| ##     ###### |*|  Copyright © 1998-2001 RhoSigma, Roland Heyder    |*|
; |*|               |*|  All Rights Reserved.                             |*|
; |*|_______________|*|___________________________________________________|*|
; |*************************************************************************|
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

	IFND	EXTRA_LIB_I
EXTRA_LIB_I	SET	1

** start bias (-30) **
** private (-30) **
** private (-36) **
_LVO_EXTRA_BAMCheckSum		= -42
_LVO_EXTRA_BootBlockSum		= -48
_LVO_EXTRA_DiskBlockSum		= -54
_LVO_EXTRA_OpenBuf		= -60
_LVO_EXTRA_CloseBuf		= -66
_LVO_EXTRA_FileToBuf		= -72
_LVO_EXTRA_BufToFile		= -78
_LVO_EXTRA_ClearBuf		= -84
_LVO_EXTRA_DuplicateBuf		= -90
_LVO_EXTRA_BufInfo		= -96
_LVO_EXTRA_SeekBuf		= -102
_LVO_EXTRA_Store		= -108
_LVO_EXTRA_InsertBuf		= -114
_LVO_EXTRA_InsertFile		= -120
_LVO_EXTRA_Replace		= -126
_LVO_EXTRA_Get			= -132
_LVO_EXTRA_Clear		= -138
_LVO_EXTRA_FindData		= -144
_LVO_EXTRA_FindNext		= -150
_LVO_EXTRA_FindPrev		= -156
_LVO_EXTRA_FreeFinds		= -162
_LVO_EXTRA_SetBookmark		= -168
_LVO_EXTRA_GotoBookmark		= -174
_LVO_EXTRA_FindString		= -180
_LVO_EXTRA_GetLength		= -186
_LVO_EXTRA_LastError		= -192
_LVO_EXTRA_LongToString		= -198
_LVO_EXTRA_StringToLong		= -204
_LVO_EXTRA_PackByteRun1		= -210
_LVO_EXTRA_UnpackByteRun1		= -216
_LVO_EXTRA_PrintIoError		= -222
_LVO_EXTRA_FlipCase		= -228
_LVO_EXTRA_CmpMem		= -234
_LVO_EXTRA_CopyMemI		= -240
_LVO_EXTRA_FillMem		= -246
_LVO_EXTRA_GetMem		= -252
_LVO_EXTRA_UnGetMem		= -258
_LVO_EXTRA_OutlineOff		= -264
_LVO_EXTRA_OutlineOn		= -270
_LVO_EXTRA_SetOPen		= -276
_LVO_EXTRA_SpecText		= -282
_LVO_EXTRA_SpecTextPrefs		= -288
_LVO_EXTRA_ShowMsg		= -294
_LVO_EXTRA_v2_OpenBuf		= -300
_LVO_EXTRA_v2_FileToBuf		= -306
_LVO_EXTRA_v2_DuplicateBuf		= -312

	IFEQ	__LK-3
;----------------------------------------------------------------------------
; Die alten Symbole nach NDK-Norm werden nur noch verwendet, wenn linkbarer
; Code erzeugt wird. Dies geschieht in weiser Voraussicht auf die eventuelle
; Einbindung der amiga.lib o.ä., welche natürlich nur die alten NDK-Symbole
; kennt. Würde dies nicht gemacht, dann wird der Linker sich über viele un-
; definierte Symbole beschweren...
;----------------------------------------------------------------------------
** start bias (-30) **
** private (-30) **
** private (-36) **
_LVOBAMCheckSum		= -42
_LVOBootBlockSum		= -48
_LVODiskBlockSum		= -54
_LVOOpenBuf			= -60
_LVOCloseBuf			= -66
_LVOFileToBuf			= -72
_LVOBufToFile			= -78
_LVOClearBuf			= -84
_LVODuplicateBuf		= -90
_LVOBufInfo			= -96
_LVOSeekBuf			= -102
_LVOStore			= -108
_LVOInsertBuf			= -114
_LVOInsertFile			= -120
_LVOReplace			= -126
_LVOGet			= -132
_LVOClear			= -138
_LVOFindData			= -144
_LVOFindNext			= -150
_LVOFindPrev			= -156
_LVOFreeFinds			= -162
_LVOSetBookmark		= -168
_LVOGotoBookmark		= -174
_LVOFindString			= -180
_LVOGetLength			= -186
_LVOLastError			= -192
_LVOLongToString		= -198
_LVOStringToLong		= -204
_LVOPackByteRun1		= -210
_LVOUnpackByteRun1		= -216
_LVOPrintIoError		= -222
_LVOFlipCase			= -228
_LVOCmpMem			= -234
_LVOCopyMemI			= -240
_LVOFillMem			= -246
_LVOGetMem			= -252
_LVOUnGetMem			= -258
_LVOOutlineOff			= -264
_LVOOutlineOn			= -270
_LVOSetOPen			= -276
_LVOSpecText			= -282
_LVOSpecTextPrefs		= -288
_LVOShowMsg			= -294
_LVOv2_OpenBuf			= -300
_LVOv2_FileToBuf		= -306
_LVOv2_DuplicateBuf		= -312
;----------------------------------------------------------------------------
	ENDC

;*** lvo / Lib-Call-Macro ***
;============================================================================
; Dieses Macro dient zum Aufruf einer Funktion aus der dazugehörigen Library.
;  Dabei ist dieses Macro gegenüber den CALL-Macros des NDK jedoch so intelli-
; gent, daß es erkennt, ob mit ihm auch wirklich eine Funktion der zugehörigen
; Library aufgerufen wird. Damit wird vermieden, daß versehendlich z.B. eine
; Funktion der exec.library mit dem Macro (und damit natürlich auch dem Zeiger)
; der graphics.library aufgerufen werden kann, was höchstwahrscheinlich sofort
; einen Systemabsturz nach sich ziehen würde.
;  Außerdem haben Optimal-Programmierer auch die Möglichkeit Quick-Aufrufe zu
; verwenden, um jedes überflüssige Byte einzusparen. Für die Programmierung re-
; entranter Programme ist ebenfalls eine Syntax definiert, bei der die voll-
; ständige effektive Addresse des Basis-Zeigers als Parameter übergeben werden
; muß, da dort ja keine flüchtigen absoluten Adressen verwendet werden dürfen.
;----------------------------------------------------------------------------
; Definiert:	... _lib.i  (Copyright © 1998-2001 RhoSigma, Roland Heyder)
;
; Schablone:	Func/A, Opts/F/S
;
; Parameter:	Func --> Name der aufzurufenden Funktion ohne »_LVO_LIBNAME_«
;
;	Opts --> - das Schlüsselwort »OK« für einen QuickJump-Aufruf
;	           (s. Bemerkung)
;
;	         - Opts weglassen, um Basis-Symbol »_LibnameBase« ins
;	           Register A6 zu laden
;
;	         - die effektive Adresse, welche die Basis der Library
;	           enthält (z.B. »globals_Libname(a5)«)
;
; Bemerkung:	Wird das Schlüsselwort »OK« angegeben, dann wird davon ausge-
;	gangen, daß die richtige Basisadresse der Library bereits im
;	Register A6 steht, und es wird sofort in die Funktion gesprungen.
;============================================================================

DOEXTRA	MACRO	(Func/A, Opts/F/S)
	;--------------------------------

	IFND	_LVO_EXTRA_\1
	 FAIL	** Function undefined or wrong Library **
	ENDC

	;OK for opts means base ready, no baseloading needed

	IFC	'\2','OK'
	 jsr	_LVO_EXTRA_\1(a6)
	 MEXIT
	ENDC

	;nothing means, load static base (for non-pure code only)

	IFC	'\2',''
	 movea.l	_ExtraBase,a6
	 jsr	_LVO_EXTRA_\1(a6)
	 MEXIT
	ENDC

	;else opts should be the entire baselocation (for pure code)

	movea.l	\2,a6
	jsr	_LVO_EXTRA_\1(a6)

	;--------------------------------
	ENDM	;DOEXTRA

	ENDC	;extra_lib.i
