;-------T-------T------------------------T----------------------------------;
;Name:      Run Segment.
;Author:    Paul Manias
;Copyright: DreamWorld Productions (c) 1996-1997.  Freely distributable.
;
;This demo lists system references in the IceBreaker window.

	INCDIR	"GMSDev:Includes/"
	INCLUDE	"dpkernel/dpkernel.i"
	INCLUDE	"system/debug.i"
	INCLUDE	"system/globalbase.i"
	INCLUDE	"system/misc.i"
	INCLUDE	"files/segments.i"

	SECTION	"Demo",CODE

;===========================================================================;
;                             INITIALISE DEMO
;===========================================================================;

	STARTDPK

Start:	MOVEM.L	A0-A6/D1-D7,-(SP)
	move.l	DPKBase(pc),a6

	move.l	gb_ReferenceDir(a6),a0
	cmp.l	#$00,a0
	beq.s	.Exit
	bsr.s	PrintDirectory

	move.l	DPKBase(pc),a6
	move.l	gb_ReferenceList(a6),a0
	bsr.s	PrintReferences

.Exit	MOVEM.L	(SP)+,A0-A6/D1-D7
	moveq	#ERR_OK,d0
	rts

;===========================================================================;
;                         PRINT DIRECTORY STRUCTURE
;===========================================================================;

PrintDirectory:
	moveq	#DBG_Message,d7	;d7 = Message.
	lea	.message(pc),a5
	CALL	DebugMessage	;>> = Send the message.

	move.l	a0,a4
	move.l	DIR_ChildDir(a0),a0	;a0 = DirList.
.dirlp	cmp.l	#$00,a0
	beq.s	.filelist
	moveq	#DBG_Message,d7	;d7 = Message.
	move.l	DIR_Source(a0),a1	;a1 = FileName.
	move.l	FN_Name(a1),a5	;a5 = Name of file.
	CALL	DebugMessage	;>> = Send the message.
	move.l	DIR_Next(a0),a0	;a0 = Next directory.
	bra.s	.dirlp	;>> = Keep looping.

.filelist
	move.l	a4,a0	;a0 = Directory.
	move.l	DIR_ChildFile(a0),a0	;a0 = DirList.
.filelp	cmp.l	#$00,a0
	beq.s	.end
	move.l	DIR_Source(a0),a1	;a1 = FileName.
	move.l	FN_Name(a1),a5	;a5 = Name of file.
	moveq	#DBG_Message,d7	;d7 = Message.
	CALL	DebugMessage	;>> = Send the message.
	move.l	DIR_Next(a0),a0	;a0 = Next directory.
	bra.s	.filelp	;>> = Keep looping.
.end	rts

.message
	dc.b	"Printing reference files.",0
	even

;===========================================================================;
;                          PRINT OBJECT REFERENCES
;===========================================================================;

PrintReferences:
	cmp.l	#$00,a0
	beq.s	.noref

	moveq	#DBG_Message,d7	;d7 = Message.
	lea	.message(pc),a5
	CALL	DebugMessage	;>> = Send the message.
.loop	cmp.l	#$00,a0
	beq.s	.end
	move.l	REF_ObjectName(a0),a5
	moveq	#DBG_Message,d7	;d7 = Message.
	CALL	DebugMessage	;>> = Send the message.
	move.l	REF_Next(a0),a0
	bra.s	.loop
.end	rts

.noref	moveq	#DBG_Message,d7	;d7 = Message.
	lea	.noreferences(pc),a5
	CALL	DebugMessage	;>> = Send the message.
	rts

.message
	dc.b	"Printing system references.",0
	even

.noreferences
	dc.b	"No references declared by system.",0
	even

;===========================================================================;

ProgName:	dc.b  "List References",0
ProgAuthor:	dc.b  "Paul Manias",0
ProgDate:	dc.b  "8 October 1997",0
ProgCopyright:	dc.b  "DreamWorld Productions (c) 1996-1997.  Freely distributable.",0
ProgShort:	dc.b  "Lists all system reference files.",0
		even

