;IceBreaker Assembler Source
;---------------------------
;Link this file with IceBreaker.c.
;CASE sensitivity ON.

	INCDIR	"INCLUDES:"
	INCLUDE	"exec/exec_lib.i"
	INCLUDE	"dos/dos_lib.i"
	INCLUDE	"libs/graphics_lib.i"
	INCLUDE	"games/games_lib.i"
	INCLUDE	"games/games.i"
	INCLUDE	"games/debug.i"
	INCLUDE	"games/gamesbase.i"
	INCLUDE	"games/tasks.i"

	;The following values are defined by us so that the C source can
	;access them.

	xdef	_libDebugMessage
	xdef	_libErrorMessage
	xdef	_libStepBack
	xdef	_DebugList
	xdef	_GFXBase

	;The following values are defined in the C source.

	xref	_DOSBase
	xref	_GMSBase
	xref	_SysBase
	xref	_conhandle

	SECTION	IceAssembler,CODE	;SECTION __MERGED,CODE

WText	MACRO		;Simple macro for nice looking source.
	dc.b	\1,0
	even
	ENDM

;===================================================================================;
;                             INTERCEPT DEBUG MESSAGE
;===================================================================================;
;Function: Receives a debug message, copies it to the buffer and then sends a
;	   message to our main task, which tells it new data has appeared in the
;	   buffer.  This function needs to be very very fast.
;
;Requires: d7 = Debug type in low word, flags in high word.
;	   a5 = Message string if type of Error/Formatted/Message.
;Returns:  Nothing.

_libDebugMessage:
	cmp.w	#DBG_END,d7	;d7 = If (Type < 0) or (Type > DBG_End-1)
	bcc.s	.exit	;>> = No, it's safe.
	tst.w	gb_BlitterUsed(a6)	;a6 = Blitter allocated?
	beq.s	.debug	;>> = No, safe.
	MOVEM.L	D0-D7/A0-A6,-(SP)
	move.l	_GFXBase(pc),a6	;a6 = Graphics base.
	CALL	DisownBlitter	;>> = Disown the blitter.
	CALL	WaitBlit
	bsr.s	.debug	;>> = Now we can send the messaage.
	move.l	_GFXBase(pc),a6	;a6 = Graphics base.
	CALL	OwnBlitter
	CALL	WaitBlit
	MOVEM.L	(SP)+,D0-D7/A0-A6
.exit	rts

.debug	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	_SysBase,a6	;a6 = Exec Base.
	CALL	Forbid	;>> = Halt all tasks for a moment.

	move.l	d7,d6	;d6 = Save flags.
	and.l	#$0000ffff,d7	;d7 = Get rid of special flags.
	bsr	Stepper	;>> = Function stepper (print step).
	lea	_DebugList(pc),a6	;a6 = Pointer to debug list.
	mulu	#DL_SIZEOF,d7	;d7 = (Type)*DL_SIZEOF
	move.l	DL_Print(a6,d7.l),a6	;a6 = Printer for this type.
	jsr	(a6)	;>> = Go to the printer.
	bsr	NewLine	;>> = Write new line.

	and.l	#STEP,d6	;d6 = Step necessary?
	beq.s	.done	;>> = Nope.
	move.l	_GMSBase,a6	;a6 = GMSBase.
	CALL	FindGMSTask	;>> = Find this task.
	tst.l	d0	;d0 = Check if the node exists.
	beq.s	.done	;>> = No.
	move.l	d0,a0	;a0 = Pointer to GMS task node.
	addq.w	#1,GT_DebugStep(a0)	;a0 = (DebugStep)+1

.done	move.l	_SysBase,a6	;a6 = Exec Base.
	CALL	Permit	;>> = Give back multi-tasking.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

;===================================================================================;
;                             INTERCEPT ERROR MESSAGE
;===================================================================================;
;Function: Receives an error number and prints it out.
;Requires: d0.l = Error code.
;Returns:  Nothing.

_libErrorMessage:
	cmp.l	#ERR_END,d0	;d0 = If (Code < 0) or (Code > ERR_END-1).
	bcc.s	.exit	;>> = Error/Unrecognised.
	tst.w	gb_BlitterUsed(a6)	;Has the blitter been grabbed and not
	beq.s	.message	;returned?  If so we better free it before
	MOVEM.L	D0-D7/A0-A6,-(SP)	;SP = Save used registers.
	move.l	_GFXBase,a6	;a6 = Graphics base.
	CALL	DisownBlitter	;>> = Disown the blitter.
	bsr.s	.message	;>> = Print message.
	move.l	_GFXBase,a6	;a6 = Graphics base.
	CALL	OwnBlitter	;>> = Get back blitter.
	MOVEM.L	(SP)+,D0-D7/A0-A6	;SP = Return used registers.
.exit	rts

.message
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	_SysBase,a6	;a6 = Exec Base.
	CALL	Forbid	;>> = Halt all tasks for a moment.
	bsr	Stepper	;>> = Function stepper.
	lea	TXT_ErrorCode(pc),a0	;a0 = "ErrorCode:"
	bsr	WriteBold	;>> = Write it out.
	lea	ErrorList(pc),a0	;a0 = Pointer to debug list.
	add.l	d0,d0	;d0 = *2
	add.l	d0,d0	;d0 = *4
	move.l	(a0,d0.l),a0	;a0 = Text for this type.
	bsr	WText	;>> = Write it out.
	bsr	NewLine	;>> = Write new line.
	move.l	_SysBase,a6	;a6 = Exec Base.
	CALL	Permit	;>> = Give back multi-tasking.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

;===================================================================================;
;                           STEP BACK AN ENTRY
;===================================================================================;
;Function: Used to step back an entry after STEP has been specified.
;Requires: Nothing.
;Returns:  Nothing.

_libStepBack:
	MOVEM.L	A0/D0,-(SP)	;SP = Save used registers.
	CALL	FindGMSTask	;>> = Find this task.
	tst.l	d0
	beq.s	.done
	move.l	d0,a0	;a0 = Task node pointer.
	subq.w	#1,GT_DebugStep(a0)	;a0 = (DebugStep)-1
.done	MOVEM.L	(SP)+,A0/D0	;SP = Return used registers.
	rts

;===================================================================================;
;                                PRINTING FUNCTIONS
;===================================================================================;

PRINT_Error:
	lea	TXT_Error(pc),a0
	bsr	WriteBold
	move.l	a5,a0	;a0 = Message
	bsr	WText	;>> = Write it out.
	rts

PRINT_Formatted:
	lea	TXT_Formatted(pc),a0
	bsr	WriteBold
	move.l	a5,a0	;a0 = Message
	bsr	WText	;>> = Write it out.
	rts

PRINT_BoldMessage:
	lea	TXT_Message(pc),a0
	bsr	WriteBold
	move.l	a5,a0	;a0 = Message
	bsr	WText	;>> = Write it out.
	rts

PRINT_Message:
	lea	TXT_Message(pc),a0
	bsr	WriteFirst
	move.l	a5,a0	;a0 = Message
	bsr	WText	;>> = Write it out.
	rts

;-----------------------------------------------------------------------------------;
;                             MISCELLANEOUS FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_AddInputHandler:
	lea	TXT_AddInputHandler(pc),a0
	bsr	WriteFirst
	rts

PRINT_RemInputHandler:
	lea	TXT_RemInputHandler(pc),a0
	bsr	WriteFirst
	rts

PRINT_Switch:
	lea	TXT_Switch(pc),a0
	bsr	WriteFirst
	rts

PRINT_FindGMSTask:
	lea	TXT_FindGMSTask(pc),a0
	bsr	WriteFirst
	rts

PRINT_AllocAudio:
	lea	TXT_AllocAudio(pc),a0
	bsr	WriteFirst
	rts

PRINT_FreeAudio:
	lea	TXT_FreeAudio(pc),a0
	bsr	WriteFirst
	rts

PRINT_GMSOpened:
	lea	TXT_GMSOpened(pc),a0
	bsr	WriteWhite
	rts

PRINT_GMSClosed:
	lea	TXT_GMSClosed(pc),a0
	bsr	WriteWhite
	rts

PRINT_AddInterrupt:
	lea	TXT_AddInterrupt(pc),a0
	bsr	WriteFirst
	rts

PRINT_RemInterrupt:
	lea	TXT_RemInterrupt(pc),a0
	bsr	WriteFirst
	rts

PRINT_RemoveGPI:
	lea	TXT_RemoveGPI(pc),a0
	bsr	WriteFirst
	rts

PRINT_OpenGPI:
	lea	TXT_OpenGPI(pc),a0
	bsr	WriteFirst
	rts

PRINT_SmartUnpack:
	lea	TXT_SmartUnpack(pc),a0
	bsr	WriteFirst
	rts

PRINT_SetUserPrefs:
	move.l	a0,a1
	lea	TXT_SetUserPrefs(pc),a0
	bsr	WriteFirst
	lea	TXT_Name(pc),a0	;a0 = "Name: "
	bsr	WriteText
	cmp.l	#$00,a1	;a1 = Name given?
	beq.s	.unspecified
	move.l	a1,a0
	bra	WriteText
.unspecified
	lea	TXT_Unspecified(pc),a0
	bra	WriteText

PRINT_InitCards:
	lea	TXT_InitCards(pc),a0
	bra	WriteFirst

PRINT_FreeCards:
	lea	TXT_FreeCards(pc),a0
	bra	WriteFirst

PRINT_GetCardInfo:
	lea	TXT_GetCardInfo(pc),a0
	bra	WriteFirst

PRINT_SelfDestruct:
	lea	TXT_SelfDestruct(pc),a0
	bra	WriteFirst

PRINT_Armageddon:
	lea	TXT_Armageddon(pc),a0
	bra	WriteFirst

PRINT_FingerOfDeath:
	lea	TXT_FingerOfDeath(pc),a0
	bra	WriteFirst

PRINT_InitDestruct:
	lea	TXT_InitDestruct(pc),a0
	bra	WriteFirst

PRINT_Awaken:
	lea	TXT_Awaken(pc),a0
	bsr	WriteFirst
	lea	TXT_Task(pc),a0
	bsr	WriteText
	move.l	a1,d0
	bra	WriteHex

;-----------------------------------------------------------------------------------;
;                                 SOUND FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_InitSound:
	move.l	a0,d0
	lea	TXT_InitSound(pc),a0
	bsr	WriteFirst
	lea	TXT_SoundAddr(pc),a0
	bsr	WriteText
	bra	WriteHex

PRINT_FreeSound:
	move.l	a0,d0
	lea	TXT_FreeSound(pc),a0
	bsr	WriteFirst
	lea	TXT_SoundAddr(pc),a0
	bsr	WriteText
	bra	WriteHex

;-----------------------------------------------------------------------------------;
;                                BLITTER FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_AllocBlitter:
	lea	TXT_AllocBlitter(pc),a0
	bra	WriteFirst

PRINT_FreeBlitter:
	lea	TXT_FreeBlitter(pc),a0
	bra	WriteFirst

PRINT_InitBob:
	move.l	a0,d0
	lea	TXT_InitBob(pc),a0	;a0 = "InitBob()"
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText
	bsr	WriteHex
	lea	TXT_BobAddr(pc),a0	;a0 = "Bob: $"
	bsr	WriteText
	move.l	a1,d0	;d0 = Bob Address.
	bra	WriteHex

PRINT_FreeBob:
	lea	TXT_FreeBob(pc),a0	;a0 = "FreeBob()"
	bsr	WriteFirst
	lea	TXT_BobAddr(pc),a0	;a0 = "Bob: $"
	bsr	WriteText
	move.l	a1,d0	;d0 = Bob Address.
	bra	WriteHex

PRINT_InitMap:
	lea	TXT_InitMap(pc),a0
	bsr	WriteFirst
	rts

PRINT_FreeMap:
	lea	TXT_FreeMap(pc),a0
	bsr	WriteFirst
	rts

PRINT_CreateMasks:
	lea	TXT_CreateMasks(pc),a0
	bsr	WriteFirst
	rts

PRINT_GetBitmap:
	lea	TXT_GetBitmap(pc),a0
	bsr	WriteFirst
	rts

PRINT_InitBitmap:
	lea	TXT_InitBitmap(pc),a0
	bsr	WriteFirst
	rts

PRINT_FreeBitmap:
	lea	TXT_FreeBitmap(pc),a0
	bsr	WriteFirst
	rts

PRINT_SetBobFrames:
	lea	TXT_SetBobFrames(pc),a0
	bsr	WriteFirst
	rts

;-----------------------------------------------------------------------------------;
;                              RESTORELIST FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_InitRestore:
	lea	TXT_InitRestore(pc),a0
	bsr	WriteFirst
	lea	TXT_AmtBuffers(pc),a0	;a0 = "AmtBuffers: "
	bsr	WriteText	;>> = Write.
	bsr	WriteDec	;>> = Write out amount of buffers in d0.
	lea	TXT_AmtEntries(pc),a0	;a0 = ", AmtEntries: "
	bsr	WriteText	;>> = Write text.
	move.l	d1,d0	;d0 = Amount Entries.
	bra	WriteDec	;>> = Write out amount of entries.

PRINT_ResetRestore:
	lea	TXT_ResetRestore(pc),a0
	bsr	WriteFirst
	lea	TXT_RestoreAddr(pc),a0	;a0 = "Restorelist: $"
	bsr	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Pointer to restorelist.
	bra	WriteHex	;>> = Write.

PRINT_FreeRestore:
	lea	TXT_FreeRestore(pc),a0
	bsr	WriteFirst
	lea	TXT_RestoreAddr(pc),a0	;a0 = "Restorelist: $"
	bsr	WriteText	;>> = Write.
	bra	WriteHex	;>> = Write out address in d0.

;-----------------------------------------------------------------------------------;
;                               PICTURE MANIPULATION
;-----------------------------------------------------------------------------------;

PRINT_LoadPic:
	lea	TXT_LoadPic(pc),a0
	bsr	WriteFirst
	lea	TXT_PictureAddr(pc),a0	;a0 = "Picture: $"
	bsr.s	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of picture.
	bra	WriteHex	;>> = Write.

PRINT_FreePic:
	lea	TXT_FreePic(pc),a0
	bsr	WriteFirst
	lea	TXT_PictureAddr(pc),a0	;a0 = "Picture: $"
	bsr.s	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of picture.
	bra	WriteHex	;>> = Write.

PRINT_GetPicInfo:
	lea	TXT_GetPicInfo(pc),a0
	bsr	WriteFirst
	lea	TXT_PictureAddr(pc),a0	;a0 = "Picture: $"
	bsr.s	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of picture.
	bra	WriteHex	;>> = Write.

PRINT_UnpackPic:
	lea	TXT_UnpackPic(pc),a0
	bsr	WriteFirst
	lea	TXT_PictureAddr(pc),a0	;a0 = "Picture: $"
	bsr.s	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of picture.
	bra	WriteHex	;>> = Write.

;-----------------------------------------------------------------------------------;
;                                 SCREEN HANDLING
;-----------------------------------------------------------------------------------;

PRINT_ShowScreen:
	move.l	a0,a1	;a1 = Save GameScreen
	lea	TXT_ShowScreen(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write it out.
	move.l	a1,d0	;d0 = Adddress of screen.
	bra	WriteHex	;>> = Write it out.

PRINT_DeleteScreen:
	move.l	a0,a1	;a1 = Save GameScreen
	lea	TXT_DeleteScreen(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write it out.
	move.l	a1,d0	;d0 = Adddress of screen.
	bra	WriteHex	;>> = Write it out.

PRINT_AddScreen:
	move.l	a0,a1	;a1 = Save GameScreen
	lea	TXT_AddScreen(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write it out.
	move.l	a1,d0	;d0 = Adddress of screen.
	bra	WriteHex	;>> = Write it out.

PRINT_HideScreen:
	move.l	a0,a1
	lea	TXT_HideScreen(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write it out.
	move.l	a1,d0	;d0 = Adddress of screen.
	bra	WriteHex	;>> = Write it out.

PRINT_MoveToBack:
	move.l	a0,a1
	lea	TXT_MoveToBack(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText
	move.l	a1,d0
	bra	WriteHex

PRINT_MoveToFront:
	move.l	a0,a1
	lea	TXT_MoveToFront(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText
	move.l	a1,d0
	bra	WriteHex

PRINT_TakeDisplay:
	move.l	a0,a1
	lea	TXT_TakeDisplay(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText
	move.l	a1,d0
	bra	WriteHex

PRINT_ReturnDisplay:
	move.l	a0,a1
	lea	TXT_ReturnDisplay(pc),a0
	bra	WriteFirst

PRINT_BlankOn:
	lea	TXT_BlankOn(pc),a0
	bra	WriteFirst

PRINT_BlankOff:
	lea	TXT_BlankOff(pc),a0
	bra	WriteFirst

;-----------------------------------------------------------------------------------;
;                                   RASTERLISTS
;-----------------------------------------------------------------------------------;

PRINT_InitRasterlist:
	move.l	a0,a1	;a1 = Save GameScreen.
	lea	TXT_InitRasterlist(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of screen.
	bsr	WriteHex	;>> = Write.
	lea	TXT_RasterAddr(pc),a0	;a0 = "Rasterlist: $"
	bsr	WriteText	;>> = Write.
	move.l	GS_Rasterlist(a1),d0	;d0 = Address of rasterlist.
	bra	WriteHex	;>> = Write.

PRINT_HideRasterlist:
	move.l	a0,a1	;a1 = Save GameScreen.
	lea	TXT_HideRasterlist(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of screen.
	bsr	WriteHex	;>> = Write.
	lea	TXT_RasterAddr(pc),a0	;a0 = "Rasterlist: $"
	bsr	WriteText	;>> = Write.
	move.l	GS_Rasterlist(a1),d0	;d0 = Address of rasterlist.
	bra	WriteHex	;>> = Write.

PRINT_ShowRasterlist:
	move.l	a0,a1	;a1 = Save GameScreen.
	lea	TXT_ShowRasterlist(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of screen.
	bsr	WriteHex	;>> = Write.
	lea	TXT_RasterAddr(pc),a0	;a0 = "Rasterlist: $"
	bsr	WriteText	;>> = Write.
	move.l	GS_Rasterlist(a1),d0	;d0 = Address of rasterlist.
	bra	WriteHex	;>> = Write.

PRINT_RemoveRasterlist:
	move.l	a0,a1	;a1 = Save GameScreen.
	lea	TXT_RemoveRasterlist(pc),a0
	bsr	WriteFirst
	lea	TXT_ScreenAddr(pc),a0	;a0 = "GameScreen: $"
	bsr	WriteText	;>> = Write.
	move.l	a1,d0	;d0 = Address of screen.
	bsr	WriteHex	;>> = Write.
	lea	TXT_RasterAddr(pc),a0	;a0 = "Rasterlist: $"
	bsr	WriteText	;>> = Write.
	move.l	GS_Rasterlist(a1),d0	;d0 = Address of rasterlist.
	bra	WriteHex	;>> = Write.

;-----------------------------------------------------------------------------------;
;                                OBJECT FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_GetObject:
	lea	TXT_GetObject(pc),a0
	bsr	WriteFirst
	rts

PRINT_GetObjectList:
	lea	TXT_GetObjectList(pc),a0
	bsr	WriteFirst
	rts

PRINT_LoadObjectFile:
	lea	TXT_LoadObjectFile(pc),a0
	bsr	WriteFirst
	rts

PRINT_FreeObjectFile:
	lea	TXT_FreeObjectFile(pc),a0
	bsr	WriteFirst
	rts

;-----------------------------------------------------------------------------------;
;                                MEMORY FUNCTIONS
;-----------------------------------------------------------------------------------;

PRINT_AllocBlitMem:
	lea	TXT_AllocBlitMem(pc),a0
	bsr	WriteFirst
	bsr.s	Alloc
	lea	TXT_MemBlit(pc),a0
	bra	WriteText

PRINT_AllocVideoMem:
	lea	TXT_AllocVideoMem(pc),a0
	bsr	WriteFirst
	bsr.s	Alloc
	lea	TXT_MemVideo(pc),a0
	bra	WriteText

PRINT_AllocSoundMem:
	lea	TXT_AllocSoundMem(pc),a0
	bsr	WriteFirst
	bsr.s	Alloc
	lea	TXT_MemSound(pc),a0
	bra	WriteText

PRINT_AllocMemBlock:
	lea	TXT_AllocMemBlock(pc),a0
	bsr	WriteFirst
	bsr.s	Alloc
	lea	TXT_MemData(pc),a0
	bra	WriteText

PRINT_FreeMemBlock:
	lea	TXT_FreeMemBlock(pc),a0
	bsr	WriteFirst
	lea	TXT_Address(pc),a0	;a0 = "Address: $"
	bsr	WriteText	;>> = Write it out.
	bsr	WriteHex	;>> = Write out address in d0.
	lea	TXT_Size(pc),a0	;a0 = "Size : "
	bsr	WriteText	;>> = Write it out.
	move.l	d0,a0	;d0 = Address of memory block.
	move.l	-12(a0),d0	;d0 = Size of block.
	bra	WriteDec	;>> = Write it out.

Alloc:	lea	TXT_Size(pc),a0	;a0 = "Size: "
	bsr	WriteText	;>> = Write text.
	bra	WriteDec	;>> = Write out size in d0.

;-----------------------------------------------------------------------------------;
;                             STRUCTURE MANIPULATION
;-----------------------------------------------------------------------------------;

PRINT_GetBob:
	lea	TXT_GetBob(pc),a0
	bra	WriteFirst

PRINT_GetPicture:
	lea	TXT_GetPicture(pc),a0
	bra	WriteFirst

PRINT_GetScreen:
	lea	TXT_GetScreen(pc),a0
	bra	WriteFirst

PRINT_GetMBob:
	lea	TXT_GetMBob(pc),a0
	bra	WriteFirst

PRINT_GetSound:
	lea	TXT_GetSound(pc),a0
	bra	WriteFirst

PRINT_GetStructure:
	lea	TXT_GetStructure(pc),a0
	bsr	WriteFirst
	lea	TXT_ID(pc),a0	;a0 = "ID: "
	bsr.s	WriteText	;>> = Write.

	swap	d0	;d0 = "IDTG" or "XXID"
	cmp.w	#"TG",d0	;d0 = Is it a specified taglist?
	bne.s	.chkBob	;>> = No, must be of type XXID.
	swap	d0	;d0 = "TGID"

.chkBob	cmp.w	#ID_BOB,d0
	bne.s	.chkMBob
	lea	.Bob(pc),a0
	bra	WriteText

.chkMBob
	cmp.w	#ID_MBOB,d0
	bne.s	.chkGameScreen
	lea	.MBob(pc),a0
	bra	WriteText

.chkGameScreen
	cmp.w	#ID_GAMESCREEN,d0
	bne.s	.chkPicture
	lea	.GameScreen(pc),a0
	bra	WriteText

.chkPicture
	cmp.w	#ID_PICTURE,d0
	bne.s	.chkCardSet
	lea	.Picture(pc),a0
	bra	WriteText

.chkCardSet
	cmp.w	#ID_CARDSET,d0
	bne.s	.chkAnimation
	lea	.CardSet(pc),a0
	bra	WriteText

.chkAnimation
	cmp.w	#ID_ANIM,d0
	bne.s	.chkMovie
	lea	.Animation(pc),a0
	bra	WriteText

.chkMovie
;	cmp.w	#ID_MOVIE,d0
;	bne.s	.chkSound
;	lea	.Movie(pc),a0
;	bra	WriteText

.chkSound
	cmp.w	#ID_SOUND,d0
	bne.s	.chkInvalid
	lea	.Sound(pc),a0
	bra	WriteText

.chkInvalid
	lea	.Invalid(pc),a0
	bra	WriteText

.Bob		dc.b  "Bob",0
.MBob		dc.b  "MBob",0
.GameScreen	dc.b  "GameScreen",0
.Picture	dc.b  "Picture",0
.CardSet	dc.b  "CardSet",0
.Animation	dc.b  "Animation",0
.Movie		dc.b  "Movie",0
.Sound		dc.b  "Sound",0
.Invalid	dc.b  "Error - Invalid!",0
		even

PRINT_FreeStructure:
	lea	TXT_FreeStructure(pc),a0
	bsr	WriteFirst
	move.l	a0,a1	;a1 = Save structure.
	lea	TXT_Structure(pc),a0	;a0 = "Structure: $"
	bsr	WriteText
	move.l	a1,d0	;d0 = Structure address.
	bra	WriteHex

;-----------------------------------------------------------------------------------;
;                                    FILE I/O
;-----------------------------------------------------------------------------------;

PRINT_SmartSave:
	lea	TXT_SmartSave(pc),a0
	bsr	WriteFirst
	move.l	d0,d1	;d1 = Save length.
	bsr	WriteText	;>> = Write out filename in a0.
	lea	TXT_CSource(pc),a0	;a0 = ", Source: $"
	bsr	WriteText	;>> = Write text.
	move.l	a1,d0	;d0 = Address of source.
	bsr	WriteHex	;>> = Write as hex.
	lea	TXT_SourceLen(pc),a0	;a0 = "Length: "
	bsr	WriteText	;>> = Write text.
	move.l	d1,d0	;d0 = Length.
	bra	WriteDec	;>> = Write as decimals.

PRINT_OpenFile:
	move.l	a0,a1
	lea	TXT_OpenFile(pc),a0
	bsr	WriteFirst
	move.l	a1,a0
	bsr.s	WriteText	;>> = Write out filename in a0.
	lea	TXT_Flags(pc),a0	;a0 = ", Flags: $"
	bsr.s	WriteText
	bra	WriteHex	;>> = Write out hex flags in d0.

PRINT_CloseFile:
	lea	TXT_CloseFile(pc),a0
	bsr	WriteFirst
	move.l	a0,a1	;a1 = Save file structure.
	lea	TXT_FileBase(pc),a0	;a0 = "FileBase: $"
	bsr.s	WriteText
	move.l	a1,d0	;d0 = Structure address.
	bra	WriteHex

PRINT_SmartLoad:
	move.l	a0,a3
	lea	TXT_SmartLoad(pc),a0
	bsr	WriteFirst
	move.l	a3,a0
	bsr	WriteText	;>> = Write out filename.
	lea	TXT_CDest(pc),a0	;a0 = "Dest: $"
	bsr	WriteText
	cmp.l	#$00,a1	;a1 = Destination given?
	beq.s	.alloc	;>> = No, allocate destination.
	move.l	a1,d0	;d0 = Destination address.
	bra	WriteHex
.alloc	lea	TXT_Allocated(pc),a0	;a0 = "Allocated"
	bra	WriteText

PRINT_QuickLoad:
	move.l	a0,a3
	lea	TXT_QuickLoad(pc),a0
	bsr	WriteFirst
	move.l	a3,a0
	bsr	WriteText	;>> = Write out filename.
	lea	TXT_CDest(pc),a0	;a0 = "Dest: $"
	bsr	WriteText
	cmp.l	#$00,a1	;a1 = Destination given?
	beq.s	.alloc	;>> = No, allocate destination.
	move.l	a1,d0	;d0 = Destination address.
	bra	WriteHex
.alloc	lea	TXT_Allocated(pc),a0	;a0 = "Allocated"
	bra	WriteText

;===================================================================================;
;                                NEW LINE
;===================================================================================;

NewLine:
	MOVEM.L	D0-D7/A0-A6,-(SP)	;SP = Save used registers.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_NewLine,d2	;d2 = Start of string.
	moveq	#1,d3	;d3 = One character.
	CALL	Write	;>> = Write out the string.
	MOVEM.L	(SP)+,D0-D7/A0-A6	;SP = Return used registers.
	rts

;===================================================================================;
;                            FUNCTION STEPPER
;===================================================================================;

Stepper:
	MOVEM.L	D0-D7/A0-A6,-(SP)	;SP = Save used registers.
	move.l	_GMSBase,a6	;a6 = GMSBase
	CALL	FindGMSTask	;>> = Find this task.
	tst.l	d0	;d0 = Check if node exists.
	beq.s	.done	;>> = No, exit...
	move.l	d0,a0	;a0 = GMS task node.

	move.w	GT_DebugStep(a0),d4	;d4 = Amount of spaces to step.
	beq.s	.done	;>> = No spaces, exit.
	blt.s	.error	;>> = Error...

	move.l	_DOSBase,a6	;a6 = DOSBase.
	subq.w	#1,d4	;d4 = (Step)-1 [for loop]
.loop	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_Space,d2	;d2 = Start of string.
	moveq	#1,d3	;d3 = One character.
	CALL	Write	;>> = Write out the string.
	dbra	d4,.loop	;d4 = --1 and loop.
.done	MOVEM.L	(SP)+,D0-D7/A0-A6	;SP = Return used registers.
	rts

.error	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#.XXX,d2	;d2 = Start of string.
	moveq	#1,d3	;d3 = One character.
	CALL	Write	;>> = Write out the string.
	MOVEM.L	(SP)+,D0-D7/A0-A6	;SP = Return used registers.
	rts

.XXX	dc.b	"X"
	even

;===================================================================================;
;                            OUTPUT Text TO OUR WINDOW
;===================================================================================;
;Internal: Writes a string of Text to our window.
;Requires: a0 = Text string.
;Returns:  Nothing.

MAXLETTERS =	23

WriteBold:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	a0,a3	;a3 = Save pointer to text to write.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_Bold,d2	;d2 = Start of string.
	moveq	#4,d3	;d3 = (EndString)-StartString [Length]
	CALL	Write	;>> = Write out the string.
	bra.s	WSkip

WriteWhite:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	a0,a3	;a3 = Save pointer to text to write.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_White,d2	;d2 = Start of string.
	moveq	#5,d3	;d3 = (EndString)-StartString [Length]
	CALL	Write	;>> = Write out the string.
	bra.s	WSkip	;>> = Skip into routine.

WriteFirst:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	a0,a3	;a3 = Save pointer to text to write.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_Flat,d2	;d2 = Start of string.
	moveq	#4,d3	;d3 = (EndString)-StartString [Length]
	CALL	Write	;>> = Write out the string.

WSkip:	move.l	_GMSBase,a6	;a6 = GMSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	a3,d2	;d2 = Start of string.
	moveq	#-1,d3	;d3 = -1 [length]
.count	addq.l	#1,d3	;d3 = ++1
	tst.b	(a3)+	;a3 = End of string?
	bne.s	.count	;>> = Keep looping.

	moveq	#MAXLETTERS,d5	;d5 = MaxLetters
	sub.l	d3,d5	;d5 = (MaxLetters)-TextLength

	move.l	_GMSBase,a6
	CALL	FindGMSTask
	tst.l	d0
	beq.s	.under
	move.l	d0,a0	;a0 = GMS Task.

	moveq	#$00,d6
	move.w	GT_DebugStep(a0),d6
	sub.l	d6,d5	;d5 = (MaxLetters-TextLength)-Stepped
	bge.s	.under	;>> = Under the maximum amount.
	add.l	d5,d3	;d3 = (Length)-Overflow
.under	move.l	_DOSBase,a6	;a6 = DOSBase.
	CALL	Write	;>> = Write out the string.

.spaces	subq.l	#1,d5
	blt.s	.done
	move.l	_conhandle,d1	;d1 = Output.
	move.l	#TXT_Space,d2	;d2 = Start of text.
	moveq	#1,d3	;d3 = 1 character.
	CALL	Write	;>> = Write out the string.
	bra.s	.spaces	;>> = Loop until finished.
.done	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

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

WriteText:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	#TXT_Flat,d2	;d2 = Start of string.
	moveq	#4,d3	;d3 = (EndString)-StartString [Length]
	CALL	Write	;>> = Write out the string.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	bsr.s	WText
	rts

;-----------------------------------------------------------------------------------;
;a0 = String to write.

WText:	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	move.l	_DOSBase,a6	;a6 = DOSBase.
	move.l	_conhandle,d1	;d1 = Window to output Text.
	move.l	a0,d2	;d2 = Start of string.
.count	tst.b	(a0)+	;a0 = End of string?
	bne.s	.count	;>> = Keep looping.
	subq.w	#1,a0	;a0 = --1 [End of string]
	move.l	a0,d3	;d3 = End of string.
	sub.l	d2,d3	;d3 = (EndString)-StartString [Length]
	CALL	Write	;>> = Write out the string.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

;===================================================================================;
;                      OUTPUT HEXADECIMAL Text TO OUR WINDOW
;===================================================================================;
;Internal: Outputs a longword value as hexidecimal Text.
;Requires: d0 = Value
;	   d7 = AmtBytes (1-8)
;Returns:  Nothing.

WriteHex:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	lea	.hex(pc),a0	;a0 = Hex table.
	lea	String(pc),a1	;a1 = Text buffer.
	moveq	#$00,d2
	tst.l	d0
	beq.s	.wzero
	moveq	#8-1,d7	;d7 = (AmtBytes)-1
.loop2	rol.l	#4,d0	;d0 = <<4 [rotate, last nibble first]
	move.l	d0,d1	;d1 = Current value.
	and.l	#$0000000F,d1	;d1 = (Value)&$F [nibble]
	bne.s	.write
	tst.w	d2
	beq.s	.skip
.write	move.b	(a0,d1.w),(a1)+	;a1 = Write out the hex value.
	moveq	#$01,d2
.skip	dbra	d7,.loop2	;d7 = --1 and loop.
	move.w	#$2000,(a1)	;a1 = Clear the final byte.
	lea	String(pc),a0	;a0 = Text buffer.
	bsr	WriteText	;>> = Write it out.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

.wzero	lea	.zero(pc),a0	;a0 = "0"
	bsr	WriteText	;>> = Write it out.
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

.zero	dc.b	"0 ",0
	even

.hex	dc.b	"0123456789ABCDEF"
	even

String:	dc.b	"                ",0
	even

;===================================================================================;
;                          WRITE DECIMAL NUMBER
;===================================================================================;
;Internal: Outputs a longword value as decimal Text.
;Requires: d0 = Value
;	   d7 = AmtBytes (1-8) or -1/0.
;Returns:  Nothing.

WriteDec:
	MOVEM.L	A0-A6/D0-D7,-(SP)	;SP = Save used registers.
	moveq	#-1,d7
	move.l	_GMSBase,a6
	move.w	d7,d1
	lea	String(pc),a0
	CALL	WriteDec
	move.l	d0,a1
	move.w	#$2000,(a1)
	bsr	WriteText
	MOVEM.L	(SP)+,A0-A6/D0-D7	;SP = Return used registers.
	rts

;===================================================================================;
;                             Text FOR PRINT ROUTINES
;===================================================================================;

_GFXBase:  dc.l  0

TXT_RasterAddr:	  WText " Rasterlist: $"
TXT_CSource:	  WText ", Source: $"
TXT_CDest:	  WText ", Dest: $"
TXT_SourceLen:	  WText "Length: "
TXT_RestoreAddr:  WText "Restorelist: $"
TXT_AmtBuffers:	  WText "AmtBuffers: "
TXT_AmtEntries:	  WText ", AmtEntries: "
TXT_FileName:	  WText "FileName: "
TXT_FileBase:	  WText "FileBase: $"
TXT_Flags:	  WText ", Flags: $"
TXT_Name:	  WText "Name: "
TXT_Unknown:	  WText "Unknown.  "
TXT_Unspecified:  WText "Unspecified.  "
TXT_Source:	  WText "Source: $"
TXT_Allocated:	  WText "Allocated.  "
TXT_Address:	  WText "Address: $"
TXT_PictureAddr:  WText "Picture: $"
TXT_ScreenAddr:	  WText "GameScreen: $"
TXT_BobAddr:	  WText "Bob: $"
TXT_MBobAddr:	  WText "MBob: $"
TXT_SoundAddr:	  WText "Sound: $"
TXT_Size:	  WText "Size: "
TXT_MemData:	  WText "(Data)"
TXT_MemVideo:	  WText "(Video)"
TXT_MemBlit:	  WText "(Blit)"
TXT_MemSound:	  WText "(Sound)"
TXT_ObjectBase:	  WText "ObjectBase: $"
TXT_ObjectList:   WText "ObjectList: $"
TXT_Structure:	  WText "Structure: $"
TXT_ID:		  WText "ID: "
TXT_Task:	  WText "Task: $"
TXT_Space:	  WText " "
TXT_NewLine:	  dc.b  10,0

TXT_Flat:	  WText "[0m"
TXT_Bold:	  WText "[1m"
TXT_White:	  WText "[32m"

GPINames:
	dc.l	.SCR_Name
	dc.l	.BLT_Name
	dc.l	.SND_Name
	dc.l	.NET_Name
	dc.l	.VEC_Name
	dc.l	.FBL_Name	;Empty
	dc.l	.ANM_Name
	dc.l	.RKO_Name
	dc.l	.TXT_Name
	dc.l	.OBJ_Name

.SCR_Name	WText "Screens.GPI"
.BLT_Name	WText "Blitter.GPI"
.SND_Name	WText "Sound.GPI"
.NET_Name	WText "Network.GPI"
.VEC_Name	WText "Vectors.GPI"
.FBL_Name	WText "Fireball.GPI"
.ANM_Name	WText "Anim.GPI"
.RKO_Name	WText "Reko.GPI"
.TXT_Name	WText "Text.GPI"
.OBJ_Name	WText "Objects.GPI"

;-----------------------------------------------------------------------------------;
;                                    ERROR LIST
;-----------------------------------------------------------------------------------;

ErrorList:
	dc.l	ERROR_OK
	dc.l	ERROR_NoMem
	dc.l	ERROR_NoPtr
	dc.l	ERROR_InUse
	dc.l	ERROR_Struct
	dc.l	ERROR_Failed
	dc.l	ERROR_File
	dc.l	ERROR_Data
	dc.l	ERROR_Search
	dc.l	ERROR_ScrType
	dc.l	ERROR_GPI
	dc.l	ERROR_RCommand
	dc.l	ERROR_RList
	dc.l	ERROR_NoRaster
	dc.l	ERROR_DiskFull
	dc.l	ERROR_FileMiss
	dc.l	ERROR_WrongVer
	dc.l	ERROR_Monitor
	dc.l	ERROR_Unpack
	dc.l	ERROR_Args

ERROR_OK:	WText "OK: No problem!"
ERROR_NoMem:	WText "NOMEM: Not enough memory available."
ERROR_NoPtr:	WText "NOPTR: A required address pointer is not present."
ERROR_InUse:	WText "INUSE: Previous allocations have not been freed."
ERROR_Struct:	WText "STRUCT: Structure version not supported or found."
ERROR_Failed:	WText "FAILED: General/Miscellaneous failure."
ERROR_File:	WText "FILE: File error, eg file not found, disk full etc."
ERROR_Data:	WText "DATA: There is an error in the given data."
ERROR_Search:	WText "SEARCH: An internal search was performed and it failed."
ERROR_ScrType:	WText "SCRTYPE: Screen Type not recognised."
ERROR_GPI:	WText "GPI: Trouble initialising a GPI."
ERROR_RCommand: WText "RASTCOMMAND: Invalid raster command detected."
ERROR_RList:	WText "RASTERLIST: Complete rasterlist failure."
ERROR_NoRaster: WText "NORASTER: Rasterlist missing from GS_Rasterlist."
ERROR_DiskFull: WText "DISKFULL: Disk full error."
ERROR_FileMiss: WText "FILEMISSING: File not found."
ERROR_WrongVer: WText "WRONGVER: Wrong version or version not supported."
ERROR_Monitor:  WText "MONITOR: Monitor driver not found or not supported."
ERROR_Unpack:   WText "UNPACK: Problem with unpacking of data."
ERROR_Args:	WText "ARGS: Invalid arguments passed to function."

;-----------------------------------------------------------------------------------;
;                                    DEBUG LIST
;-----------------------------------------------------------------------------------;

    STRUCTURE	DataListEntry,0
	WORD	DL_State	;On = 1 / Off = 0.
	APTR	DL_Print	;Pointer to the function printer.
	LABEL	DL_SIZEOF

	MACRO	Entry
	dc.w	1	;On = 1 / Off = 0.
	dc.l	PRINT_\1	;Print function called by WriteBuffer.
	ENDM

_DebugList:
	Entry	Error
	Entry	Formatted
	Entry	BoldMessage
	Entry	Message
	Entry	FreeMemBlock
	Entry	AddScreen
	Entry	DeleteScreen
	Entry	OpenGPI
	Entry	RemoveGPI
	Entry	AddInputHandler
	Entry	RemInputHandler
	Entry	AddInterrupt
	Entry	RemInterrupt
	Entry	SmartLoad
	Entry	QuickLoad
	Entry	SmartUnpack
	Entry	SmartSave
	Entry	SetUserPrefs
	Entry	LoadPic
	Entry	FreePic
	Entry	InitRasterlist
	Entry	AllocBlitter
	Entry	FreeBlitter
	Entry	InitBob
	Entry	FreeBob
	Entry	InitRestore
	Entry	FreeRestore
	Entry	AllocBlitMem
	Entry	AllocVideoMem
	Entry	AllocSoundMem
	Entry	AllocAudio
	Entry	FreeAudio
	Entry	ShowScreen
	Entry	HideScreen
	Entry	InitMap
	Entry	FreeMap
	Entry	InitSound
	Entry	FreeSound
	Entry	HideRasterlist
	Entry	ShowRasterlist
	Entry	FindGMSTask
	Entry	MoveToFront
	Entry	Switch
	Entry	UnpackPic
	Entry	GetPicInfo
	Entry	GMSOpened
	Entry	GMSClosed
	Entry	ResetRestore
	Entry	RemoveRasterlist
	Entry	InitCards
	Entry	FreeCards
	Entry	GetCardInfo
	Entry	GetBob
	Entry	GetPicture
	Entry	GetScreen
	Entry	GetStructure
	Entry	GetMBob
	Entry	GetSound
	Entry	SelfDestruct
	Entry	Armageddon
	Entry	FingerOfDeath
	Entry	InitDestruct
	Entry	BlankOn
	Entry	BlankOff
	Entry	LoadObjectFile
	Entry	FreeObjectFile
	Entry	GetObjectList
	Entry	GetObject
	Entry	OpenFile
	Entry	CloseFile
	Entry	FreeStructure
	Entry	MoveToBack
	Entry	TakeDisplay
	Entry	ReturnDisplay
	Entry	Awaken
	Entry	CreateMasks
	Entry	GetBitmap
	Entry	InitBitmap
	Entry	FreeBitmap
	Entry	SetBobFrames
	Entry	AllocMemBlock

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

TXT_GMSOpened:        WText "GMS OPENED        "
TXT_GMSClosed:        dc.b  "GMS CLOSED        ",10,0
		      even

TXT_ErrorCode:	      WText "ErrorCode:"
TXT_Error:	      WText "Error:"
TXT_Formatted:	      WText "Message:"
TXT_Message:	      WText "Message:"

TXT_AllocMemBlock:    WText "AllocMemBlock()"
TXT_FreeMemBlock:     WText "FreeMemBlock()"
TXT_AddScreen:	      WText "AddScreen()"
TXT_DeleteScreen:     WText "DeleteScreen()"
TXT_OpenGPI:	      WText "OpenGPI()"
TXT_RemoveGPI:	      WText "RemoveGPI()"
TXT_AddInputHandler:  WText "AddInputHandler()"
TXT_RemInputHandler:  WText "RemInputHandler()"
TXT_AddInterrupt:     WText "AddInterrupt()"
TXT_RemInterrupt:     WText "RemInterrupt()"
TXT_SmartLoad:	      WText "SmartLoad()"
TXT_QuickLoad:	      WText "QuickLoad()"
TXT_SmartUnpack:      WText "SmartUnpack()"
TXT_SmartSave:	      WText "SmartSave()"
TXT_SetUserPrefs:     WText "SetUserPrefs()"
TXT_LoadPic:	      WText "LoadPic()"
TXT_FreePic:	      WText "FreePic()"
TXT_InitRasterlist:   WText "InitRasterlist()"
TXT_AllocBlitter:     WText "AllocBlitter()"
TXT_FreeBlitter:      WText "FreeBlitter()"
TXT_InitBob:          WText "InitBob()"
TXT_FreeBob:          WText "FreeBob()"
TXT_InitRestore:      WText "InitRestore()"
TXT_FreeRestore:      WText "FreeRestore()"
TXT_AllocBlitMem:     WText "AllocBlitMem()"
TXT_AllocVideoMem:    WText "AllocVideoMem()"
TXT_AllocSoundMem:    WText "AllocSoundMem()"
TXT_AllocAudio:       WText "AllocAudio()"
TXT_FreeAudio:	      WText "FreeAudio()"
TXT_ShowScreen:       WText "ShowScreen()"
TXT_HideScreen:       WText "HideScreen()"
TXT_InitMap:	      WText "InitMap()"
TXT_FreeMap:          WText "FreeMap()"
TXT_InitSound:	      WText "InitSound()"
TXT_FreeSound:	      WText "FreeSound()"
TXT_HideRasterlist:   WText "HideRasterlist()"
TXT_ShowRasterlist:   WText "ShowRasterlist()"
TXT_FindGMSTask:      WText "FindGMSTask()"
TXT_MoveToFront:      WText "MoveToFront()"
TXT_Switch:           WText "Switch()"
TXT_UnpackPic:        WText "UnpackPic()"
TXT_GetPicInfo:	      WText "GetPicInfo()"
TXT_ResetRestore:     WText "ResetRestore()"
TXT_RemoveRasterlist: WText "RemoveRasterlist()"
TXT_InitCards:	      WText "InitCards()"
TXT_FreeCards:	      WText "FreeCards()"
TXT_GetCardInfo:      WText "GetCardInfo()"
TXT_GetBob:           WText "GetBob()"
TXT_GetPicture:       WText "GetPicture()"
TXT_GetScreen:        WText "GetScreen()"
TXT_GetStructure:     WText "GetStructure()"
TXT_GetMBob:          WText "GetMBob()"
TXT_GetSound:         WText "GetSound()"
TXT_SelfDestruct:     WText "SelfDestruct()"
TXT_Armageddon:       WText "Armageddon()"
TXT_FingerOfDeath:    WText "FingerOfDeath()"
TXT_InitDestruct:     WText "InitDestruct()"
TXT_BlankOn:          WText "BlankOn()"
TXT_BlankOff:         WText "BlankOff()"
TXT_LoadObjectFile:   WText "LoadObjectFile()"
TXT_FreeObjectFile:   WText "FreeObjectFile()"
TXT_GetObjectList:    WText "GetObjectList()"
TXT_GetObject:        WText "GetObject()"
TXT_OpenFile:	      WText "OpenFile()"
TXT_CloseFile:	      WText "CloseFile()"
TXT_FreeStructure:    WText "FreeStructure()"
TXT_MoveToBack:       WText "MoveToBack()"
TXT_TakeDisplay:      WText "TakeDisplay()"
TXT_ReturnDisplay:    WText "ReturnDisplay()"
TXT_Awaken:	      WText "Awaken()"
TXT_CreateMasks:      WText "CreateMasks()"
TXT_GetBitmap:        WText "GetBitmap()"
TXT_InitBitmap:       WText "InitBitmap()"
TXT_FreeBitmap:       WText "FreeBitmap()"
TXT_SetBobFrames:     WText "SetBobFrames()"

