DoAppIcon:	Move.W	#CUSTAPPICONERR,_ErrorCode

	Move.L	_AppIcon(PC),A2
	Cmp.L	#0,A2
	Beq.S	.UseDefIcon

	Lea	Info(PC),A0
	Move.L	A2,A1
	Bsr	FindData
	Tst.L	D0
	Bne.S	.No_Info
	Clr.B	(A0)
.No_Info	Move.L	A2,A0

	CALL	GetDiskObject,ICON
	Move.L	D0,_IconObject
	Bne	.GotIcon

	Bsr	ErrorHandler

.UseDefIcon	Move.W	#APPICONERR,_ErrorCode

	Move.L	_WBMessage(PC),A0
	Move.L	sm_ArgList(A0),A2
	Cmp.L	#0,A2	
	Beq	CloseDown

	Move.L	(A2),D1		;wa_Lock
	CALL	CurrentDir,DOS
	Move.L	D0,_OldDirectory

	Move.L	wa_Name(A2),A0
	CALL	GetDiskObject,ICON
	Move.L	D0,_IconObject
	Beq	CloseDown
.GotIcon
;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	Move.L	_OldDirectory(PC),D1
	CALL	CurrentDir,DOS
	Clr.L	_OldDirectory

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	Move.L	_IconObject(PC),A0

	Move.L	_AppIconX(PC),do_CurrentX(A0)
	Move.L	_AppIconY(PC),do_CurrentY(A0)

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	CALL	CreateMsgPort,EXEC
	Move.L	D0,_AppMsgPort
	Beq	CloseDown

	Move.L	D0,A0
	Moveq	#0,D0
	Move.B	MP_SIGBIT(A0),D0
	Moveq	#1,D1
	Lsl.L	D0,D1
	Move.L	D1,_Signal

	OPENLIBRARY	WB,0

	Moveq	#69,D0		;ID
	Moveq	#0,D1		;UserData
	Move.L	_AppName(PC),A0		;text
	Move.L	_AppMsgPort(PC),A1	;msg port
	Sub.L	A2,A2		;lock (not used)
	Move.L	_IconObject(PC),A3	;icon
	Sub.L	A4,A4		;Tags (not used)
	CALL	AddAppIconA,WB
	Move.L	D0,_AppIconActual
	Beq	CloseDown

	Clr.W	_ErrorCode

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
AppLoop:	Move.L	_Signal(PC),D0
	BSet	#SIGBREAKB_CTRL_C,D0
	CALL	Wait,EXEC
	Btst	#SIGBREAKB_CTRL_C,D0
	Bne	CloseDown

.MsgLoop	Move.L	_AppMsgPort(PC),A0
	CALL	GetMsg,EXEC
	Tst.L	D0
	Beq.S	AppLoop
	Move.L	D0,_AppMsg

	Move.L	D0,A0
	Move.L	am_NumArgs(A0),D0
	Tst.L	D0
	Beq.S	.NoArgsProvided

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
	Move.L	am_ArgList(A0),A1
	Move.L	am_NumArgs(A0),D0

	Move.L	A1,_CurrentName
	Move.W	D0,_LoopCount
	Beq.S	.MsgLoop

	Clr.L	FileName
	Move.W	#ARGS_ICONS,_ArgMode
	Bsr	DoFiles

	Move.L	_AppMsg(PC),A1
	CALL	ReplyMsg,EXEC
	Clr.L	_AppMsg
	Bra.S	.MsgLoop

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.NoArgsProvided	Sub.L	A0,A0		;window to open on
	Lea	_esReq(PC),A1		;easyrequest structure
	Sub.L	A2,A2		;no custom IDCMP requests
	Move.L	#AboutText,es_TextFormat(A1)	;requestor text
	Move.L	#AboutGads,es_GadgetFormat(A1)	;requestor gadget
	Sub.L	A3,A3		;requestor text arguments
	CALL	EasyRequestArgs,INTUI	;bring up the requestor.

	Cmp.B	#1,D0
	Beq.S	.UseASL

	Cmp.L	#2,D0
	Beq	CloseDown

	Move.L	_AppMsg(PC),A1
	CALL	ReplyMsg,EXEC
	Clr.L	_AppMsg

	Bra.S	.MsgLoop

;=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
.UseASL	Move.W	#ASLOPENERR,_ErrorCode

	Tst.L	_ASLBase
	Bne.S	.GotASLLib
	OPENLIBRARY	ASL,38

.GotASLLib	Move.W	#ASLREQERR,_ErrorCode

	Moveq	#ASL_FileRequest,D0
	Sub.L	A0,A0
	CALL	AllocAslRequest,ASL
	Move.L	D0,_Requestor
	Beq.S	CloseDown

	Clr.W	_ErrorCode

	Move.L	_Requestor(PC),A0
	Lea	_ASLTags(PC),A1
	CALL	AslRequest
	Cmp.L	#FALSE,D0
	Beq	.MsgLoop

	Move.L	_Requestor(PC),A0
	Move.L	fr_ArgList(A0),_CurrentName
	Move.L	fr_NumArgs(A0),D0
	Move.W	D0,_LoopCount
	Beq	.MsgLoop

	Clr.L	_FileName
	Move.W	#ARGS_ASLREQ,_ArgMode

	Bsr	DoFiles

	Move.L	_Requestor(PC),A0	;free up requestor structure
	CALL	FreeAslRequest,ASL
	Clr.L	_Requestor

	Move.L	_AppMsg(PC),A1
	CALL	ReplyMsg,EXEC
	Clr.L	_AppMsg

	Bra	.MsgLoop
