;mit DOBJ gewonnenes Listing von 'Dir'
;anschließend per Hand optimiert und dahingehend geändert, daß das H-Flag
;respektiert wird

	NOLIST
	INCLUDE "exec/LVO.i"
	INCLUDE "exec/execbase.i"
	INCLUDE "exec/tasks.i"
	INCLUDE "exec/memory.i"
	INCLUDE "dos/LVO.i"
	INCLUDE "dos/dos.i"
	INCLUDE "dos/dosasl.i"
	INCLUDE "dos/dosextens.i"
	LIST

	SECTION only,CODE

main:	LINK.W	A5,#-776
	MOVEM.L D2-D3/A2-A3/A6,-(sp)
	MOVEA.W #_AbsExecBase,A0
	MOVEA.L (A0),A3
	MOVEA.L A3,A0
	MOVE.L	A0,24(sp)
	MOVE.W	#749,D0
	MOVEQ	#0,D1
	LEA.L	-758(A5),A1
1$:	MOVE.B	D1,(A1)+
	dbf	D0,1$
	MOVE.L	A3,-758(A5)
	MOVEQ	#RETURN_FAIL,D0
	MOVE.L	D0,-460(A5)
	MOVE.L	D1,-464(A5)
	LEA.L	DosName(pc),A1
	MOVEQ	#36,D0
	MOVEA.L A3,A6
	CALL	OpenLibrary
	MOVE.L	D0,A2
	MOVE.L	D0,-754(A5)
	beq	EndNoDos
	MOVE.L	#$0800,D0
	MOVE.L	#MEMF_CLEAR|MEMF_PUBLIC,D1
	CALL	AllocVec
	MOVE.L	D0,-432(A5)
	bne	2$
	MOVEA.L A2,A6
	CALL	IoErr
	MOVE.L	D0,-464(A5)
	bra	EndNoMem
2$:	LEA.L	Template(pc),A0
	MOVE.L	A0,D1
	LEA.L	-456(A5),A1
	MOVE.L	A1,D2
	MOVEQ	#0,D3
	MOVEA.L A2,A6
	CALL	ReadArgs
	MOVE.L	D0,20(sp)
	bne	3$
	CALL	IoErr
	MOVE.L	D0,-464(A5)
	bra	EndBadArgs
3$:	MOVE.L	-452(A5),D1
	beq	EvaluateOptions
	MOVEA.L D1,A3
	bra	NextOpt
ParseOpts:
	moveq	#1,d1
	MOVE.B	(A3)+,D0
	SUBI.b	#'A',D0         ;'A' ?
	beq	3$
	SUBQ.b	#3,D0		;'D' ?
	beq	4$
	SUBQ.b	#2,D0		;'F' ?
	beq	5$
	SUBQ.b	#3,D0		;'I' ?
	beq	6$
	SUBI.b	#24,D0		;'a' ?
	beq	3$
	SUBQ.b	#3,D0		;'d' ?
	beq	4$
	SUBQ.b	#2,D0		;'f' ?
	beq	5$
	SUBQ.b	#3,D0		;'i' ?
	bne	7$
6$:	MOVE.L	D1,-436(A5)
	bra	NextOpt
3$:	MOVE.L	D1,-448(A5)
	bra	NextOpt
4$:	MOVE.L	D1,-444(A5)
	bra	NextOpt
5$:	MOVE.L	D1,-440(A5)
	bra	NextOpt
7$:	MOVEA.L A2,A6
	CALL	Output
	MOVEQ	#0,D1
	MOVE.B	-1(A3),D1
	MOVE.L	D1,32(sp)
	move.l	d1,d2
	MOVE.L	D0,D1
	CALL	FPutC
	LEA.L	IgnoreOptTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
NextOpt:
	TST.B	(A3)
	bne	ParseOpts
EvaluateOptions:
	lea	-465(a5),a0
	TST.L	-448(A5)
	beq	1$
	BSET.B	#0,(a0)
1$:	TST.L	-436(A5)
	beq	2$
	BSET.B	#3,(a0)
2$:	MOVE.L	-440(A5),D0
	beq	3$
	BSET.B	#2,(a0)
3$:	MOVE.L	-444(A5),D1
	beq	4$
	BSET.B	#1,(a0)
4$:	or.l	d1,d0
	bne	5$
	OR.B	#6,(a0)
5$:	MOVE.L	#$1000,-742(A5)
	MOVE.B	#1,-734(A5)
	TST.L	-456(A5)
	bne	6$
	LEA.L	L11(pc),A0
	MOVE.L	A0,-456(A5)
6$:	MOVEA.L -456(A5),A0
	MOVE.L	A0,D1
	LEA.L	-750(A5),A1
	MOVE.L	A1,D2
	MOVEA.L A2,A6
	CALL	MatchFirst
	TST.L	D0
	beq	L9
	CALL	IoErr
	MOVE.L	D0,-464(A5)
	CMPI.L	#ERROR_BREAK,D0
	beq	L10
	MOVE.B	-734(A5),D0
	BTST.L	#1,D0
	bne	L10
	LEA.L	NoInfoTxt(pc),A0
	MOVE.L	A0,D1
	LEA.L	-456(A5),A1
	MOVE.L	A1,D2
	CALL	VPrintf
	bra	L10
L9:	tst.l  -726(A5)
	bpl	L12
	btst.b	#1,-734(a5)
	bne	L12
	MOVE.L	#ERROR_DIR_NOT_FOUND,-464(A5)
	LEA.L	NoDirTxt(pc),A1
	MOVE.L	A1,D1
	LEA.L	-456(A5),A0
	MOVE.L	A0,D2
	CALL	VPrintf
	bra	L10
L12:	bclr.b	#3,-734(a5)
	MOVEQ	#0,D0
	LEA.L	-758(A5),A0
	move.l	d0,a1
	bsr	DoDir
L10:	LEA.L	-750(A5),A0
	MOVE.L	A0,D1
	MOVEA.L A2,A6
	CALL	MatchEnd
	MOVE.L	20(sp),D1
	CALL	FreeArgs
EndBadArgs:
	MOVEA.L 24(sp),A3
	MOVEA.L -432(A5),A1
	MOVEA.L A3,A6
	CALL	FreeVec
EndNoMem:
	MOVE.L	-464(A5),D1
	beq	2$
	CMPI.L	#ERROR_BREAK,D1
	beq	1$
	MOVEA.L A2,A6
	CALL	SetIoErr
1$:	MOVE.L	-464(A5),D1
	MOVEQ	#ERROR_NO_MORE_ENTRIES/2,D0
	ADD.L	D0,D0
	CMP.L	D1,D0
	beq	2$
	MOVEQ	#0,D2
	MOVEA.L A2,A6
	CALL	PrintFault
2$:	MOVEA.L A2,A1
	MOVEA.L A3,A6
	CALL	CloseLibrary
	bra	Exit
EndNoDos:
	move.l	(a3),a1
	MOVEA.L ThisTask(A1),A0
	MOVEQ	#ERROR_INVALID_RESIDENT_LIBRARY,D0
	MOVE.L	D0,pr_Result2(A0)
Exit:	MOVE.L	-460(A5),D0
	MOVEM.L (sp)+,D2-D3/A2-A3/A6
	UNLK	A5
	RTS

DoDir:	LINK.W	A5,#-36
	MOVEM.L D2-D7/A2-A3/A6,-(sp)
	MOVE.L	D0,D7
	MOVEA.L A1,A3
	MOVE.L	A0,-32(A5)
	SUBA.L	A0,A0
	MOVE.L	A0,-20(A5)
	MOVE.L	A0,D6
	MOVEA.L -32(A5),A2
	MOVEQ	#20,D0
	MOVE.L	D0,298(A2)
	MOVE.L	A0,D5
	MOVE.L	A3,-28(A5)
	BCLR.B	#5,293(A2)
	tst.l	32(A2)          ;ap_Info+fib_DirEntryType+8
	ble	L16
	TST.L	D7
	bne	1$
	BTST.B	#1,24(A2)       ;ap_Flags+8
	bne	L16
1$:	BSET.B	#2,24(A2)       ;ap_Flags+8
	LEA.L	8(A2),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A2),A6
	CALL	MatchNext
	MOVE.L	D0,D5
L16:	BTST.B	#4,22(A2)       ;ap_FoundBreak+2+8
	beq	1$
	MOVE.L	#ERROR_BREAK,D5
	MOVEQ	#64,D0
	MOVE.L	D0,290(A2)
1$:	TST.L	D5
	bne	L19		;bne L21 ?
	MOVEA.L 12(A2),A0
	MOVE.L	8(A0),D1
	MOVEA.L 4(A2),A6
	CALL	DupLock
	MOVE.L	D0,D6
	MOVE.L	D6,-24(A5)
	MOVEA.L A3,A0
	MOVE.L	A0,-28(A5)
	MOVE.L	A0,746(A2)
	bra	L18
L17:	MOVEA.L 746(A2),A0
	MOVE.L	4(A0),D1
	MOVE.L	D6,D2
	MOVEA.L 4(A2),A6
	CALL	SameLock
	TST.L	D0
	bne	1$
	BTST.B	#3,24(A2)
	bne	1$
	LEA.L	CircularDirTxt(pc),A1
	MOVE.L	A1,D1
	CALL	PutStr
	bra	L20
1$:	MOVEA.L -32(A5),A2
	MOVEA.L 746(A2),A0
	MOVE.L	(A0),746(A2)
L18:	TST.L	746(A2)
	bne	L17
	bra	L19
L38:	BTST.B	#3,24(A2)       ;ap_Flags+8
	beq	1$
	BCLR.B	#3,24(A2)       ;ap_Flags+8
	MOVEQ	#ERROR_NO_MORE_ENTRIES/2,D5
	ADD.L	D5,D5
	bra	L21

;dieser Einschub soll dafür sorgen, daß das Hidden-Flag respektiert wird:
1$:	btst.b	#7,147(a2)      ;ap_Info+fib_Protection+3+8
	bne	L32
	;Es geht im Moment darum, hier das richtige Sprungziel zu finden.
	;* bei L21 wird das aktuelle Directory als abgearbeitet betrachtet.
	;* bei L19 bleibt das Programm in irgendeiner Schleife hängen
	;	(vermutlich wird MatchNext übergangen)
	;* L32 scheint zu stimmen ! (auch kurz mit OPT I/A getestet)

3$:	MOVEA.L -32(A5),A2
	BTST.B	#4,22(A2)       ;ap_FoundBreak+2+8
	beq	2$
	MOVE.L	#ERROR_BREAK,D5
	MOVEQ	#64,D0
	MOVE.L	D0,290(A2)
	bra	L21
2$:	MOVEA.L -32(A5),A2
	BTST.B	#1,293(A2)
	beq	L22
	tst.l	32(A2)          ;ap_Info+fib_DirEntryType+8
	ble	L22
	MOVEA.L A2,A0
	LEA.L	330(A0),A3
	ADDA.W	#36,A2
	BTST.B	#1,24(A0)
	beq	L23
	TST.L	D7
	bne	L23
	MOVEA.L -32(A5),A1
	MOVEA.L 12(A1),A0       ;ap_Last+8
	MOVE.L	8(A0),D1
	MOVE.L	A3,D2
	MOVEQ	#64,D3
	ADD.L	D3,D3
	MOVEA.L 4(A1),A6
	CALL	NameFromLock
	MOVE.L	D2,D1
	MOVE.L	A2,D2
	CALL	AddPart
	bra	L24
L23:	MOVEQ	#64,D0
	ADD.L	D0,D0
	MOVEA.L A3,A0
	MOVEA.L A2,A1
	bsr	strncpy
L24:	MOVEA.L -32(A5),A2
	MOVE.L	D7,D0
	ADDQ.L	#1,D0
	MOVE.L	D0,D1
	LSL.L	#2,D1
	ADD.L	D0,D1
	MOVE.L	D1,714(A2)
	MOVE.L	A3,718(A2)
	MOVEQ	#ST_LINKDIR,D0
	CMP.L	32(A2),D0       ;ap_Info+fib_DirEntryType+8
	bne	1$
	LEA.L	DirHlTxt(pc),A0
	bra	3$
1$:	LEA.L	DirTxt(pc),A0
3$:	MOVE.L	A0,722(A2)
	LEA.L	714(A2),A3
	MOVE.L	A3,-(sp)
	MOVEA.L 326(A2),A0
	LEA.L	MetaFormat(pc),A1
	bsr	sprintf
	ADDQ.W	#4,A7
	LEA.L	SpcTxt(pc),A0
	MOVE.L	A0,714(A2)
	BTST.B	#3,293(A2)
	beq	L27
	BSET.B	#7,293(A2)
L29:	MOVE.L	326(A2),D1
	MOVE.L	A3,D2
	MOVEA.L 4(A2),A6
	CALL	VPrintf
	LEA.L	QMarkTxt(pc),A0
	MOVE.L	A0,D1
	MOVEQ	#0,D2
	CALL	VPrintf
	MOVEQ	#0,D0
	MOVE.L	D0,D1
	MOVEA.L A2,A0
	bsr	Interact
L28:	BTST.B	#7,293(A2)
	bne	L29
	BTST.B	#4,293(A2)
	beq	1$
	BCLR.B	#4,293(A2)
	bra	L21
1$:	MOVEA.L -32(A5),A2
	BTST.B	#6,293(A2)
	bne	L20
	MOVEQ	#20,D0
	CMP.L	298(A2),D0
	bne	L22
	bra	L20
L27:	MOVE.L	326(A2),D1
	MOVE.L	A3,D2
	MOVEA.L 4(A2),A6
	CALL	VPrintf
	LEA.L	LfTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
L22:	MOVEA.L -32(A5),A2
	MOVEQ	#33,D0
	AND.L	290(A2),D0
	beq	L31
	tst.l	32(A2)          ;ap_Info+fib_DirEntryType+8
	bmi	L31
	MOVE.L	D7,D0
	ADDQ.L	#1,D0
	MOVEA.L A2,A0
	LEA.L	-28(A5),A1
	bsr	DoDir
	BCLR.B	#3,24(A2)       ;ap_Flags+8
	BTST.B	#6,293(A2)
	bne	L20
	MOVEQ	#20,D0
	CMP.L	298(A2),D0
	beq	L20
L31:	MOVEA.L -32(A5),A2
	BTST.B	#2,293(A2)
	beq	L32
	tst.l	32(A2)          ;ap_Info+fib_DirEntryType+8
	bpl	L32
	MOVEQ	#40,D0
	MOVE.L	#MEMF_CLEAR|MEMF_PUBLIC,D1
	MOVEA.L (A2),A6
	CALL	AllocVec
	MOVE.L	D0,734(A2)
	bne	L33
	MOVEA.L 4(A2),A6
	CALL	IoErr
	MOVE.L	D0,294(A2)
	LEA.L	IncompleteTxt(pc),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A2),A6
	CALL	PutStr
	bra	L21
L33:	MOVEA.L -32(A5),A2
	MOVEA.L 734(A2),A0
	ADDQ.L	#8,A0
	LEA.L	36(A2),A1
	MOVEQ	#32,D0
	bsr	strncpy
	MOVEA.L 734(A2),A0
	MOVE.L	32(A2),4(A0)
	LEA.L	-20(A5),A0
	MOVE.L	A0,742(A2)
	MOVE.L	-20(A5),738(A2)
	bra	L34
L37:	MOVEA.L 738(A2),A0
	ADDQ.L	#8,A0
	MOVEA.L 734(A2),A1
	ADDQ.L	#8,A1
	bsr	stricmp
	TST.L	D0
	ble	1$
	MOVEA.L 734(A2),A0
	MOVEA.L 742(A2),A1
	MOVE.L	(A1),(A0)
	MOVEA.L 742(A2),A0
	MOVE.L	734(A2),(A0)
	bra	L36
1$:	MOVEA.L -32(A5),A2
	MOVEA.L 738(A2),A0
	MOVE.L	A0,742(A2)
	MOVE.L	(A0),738(A2)
L34:	TST.L	738(A2)
	bne	L37
L36:	TST.L	738(A2)
	bne	L32
	MOVEA.L 742(A2),A0
	MOVE.L	734(A2),(A0)
L32:	LEA.L	8(A2),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A2),A6
	CALL	MatchNext
	MOVE.L	D0,D5
	BTST.B	#0,292(A2)
	beq	L19
	MOVE.L	D6,D1
	CALL	CurrentDir
	MOVE.L	D0,D4
	LEA.L	330(A2),A0
	MOVE.L	A0,D1
	CALL	DeleteFile
	TST.L	D0
	bne	1$
	CALL	IoErr
	MOVE.L	D0,D1
	MOVEQ	#0,D2
	CALL	PrintFault
	bra	2$
1$:	LEA.L	DelTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
2$:	MOVE.L	D4,D1
	CALL	CurrentDir
	BCLR.B	#0,292(A2)
L19:	TST.L	D5
	beq	L38
L21:	CMPI.L	#ERROR_BREAK,D5
	bne	1$
	MOVE.L	d5,294(A2)
	MOVEQ	#5,D0
	MOVE.L	D0,298(A2)
	MOVEQ	#64,D0
	MOVE.L	D0,290(A2)
	bra	L20
1$:	MOVEA.L -32(A5),A2
	BTST.B	#6,293(A2)
	bne	L20
	MOVEA.L -32(A5),A2
	MOVEQ	#ERROR_NO_MORE_ENTRIES/2,D0
	ADD.L	D0,D0
	CMP.L	D0,D5
	beq	2$
	MOVEA.L 4(A2),A6
	CALL	IoErr
	MOVE.L	D0,294(A2)
2$:	MOVEQ	#0,D0
	MOVE.L	D0,298(A2)
	MOVE.L	-20(A5),734(A2)
	MOVE.L	D0,722(A2)
	MOVEQ	#1,D5
	bra	L39
L45:	BTST.B	#3,293(A2)
	beq	L40
	MOVE.L	D7,D0
	LSL.L	#2,D0
	ADD.L	D7,D0
	ADDQ.L	#2,D0
	MOVE.L	D0,714(A2)
	MOVEA.L 734(A2),A3
	LEA.L	8(A3),A0
	MOVE.L	A0,718(A2)
	LEA.L	L11(pc),A0
	MOVE.L	A0,722(A2)
	MOVE.L	4(A3),D0
	addq.l	#4,d0
	bne	3$
	LEA.L	HlTxt(pc),A0
	MOVE.L	A0,722(A2)
3$:	MOVEQ	#3,D0
	CMP.L	4(A3),D0
	bne	4$
	LEA.L	SlTxt(pc),A0
	MOVE.L	A0,722(A2)
4$:	LEA.L	714(A2),A3
	MOVE.L	A3,-(sp)
	MOVEA.L 326(A2),A0
	LEA.L	MetaFormat2(pc),A1
	bsr	sprintf
	LEA.L	SpcTxt(pc),A0
	MOVE.L	A0,714(A2)
	BSET.B	#7,293(A2)
	LEA.L	330(A2),A0
	MOVEA.L 734(A2),A1
	ADDQ.L	#8,A1
	MOVEQ	#64,D0
	ADD.L	D0,D0
	bsr	strncpy
	ADDQ.W	#4,sp
	bra	L41
L42:	MOVE.L	326(A2),D1
	MOVE.L	A3,D2
	MOVEA.L 4(A2),A6
	CALL	VPrintf
	LEA.L	QMarkTxt(pc),A0
	MOVE.L	A0,D1
	MOVEQ	#0,D2
	CALL	VPrintf
	MOVE.L	D6,D0
	MOVEQ	#1,D1
	MOVEA.L A2,A0
	bsr	Interact
L41:	BTST.B	#7,293(A2)
	bne	L42
	BTST.B	#4,293(A2)
	beq	1$
	BCLR.B	#4,293(A2)
	bra	L20
1$:	MOVEA.L -32(A5),A2
	BTST.B	#6,293(A2)
	beq	L43
	bra	L20
L40:	MOVE.L	#SIGBREAKF_CTRL_C,D1
	MOVEA.L 4(A2),A6
	CALL	CheckSignal
	TST.L	D0
	beq	1$
	MOVEQ	#64,D0
	MOVE.L	D0,290(A2)
	MOVEQ	#5,D0
	MOVE.L	D0,298(A2)
	MOVE.L	#ERROR_BREAK,294(A2)
	bra	L20
1$:	MOVEA.L -32(A5),A2
	MOVE.L	D5,D0
	MOVEQ	#1,D1
	AND.L	D1,D0
	ASL.L	#7,D0
	MOVEA.L A2,A0
	ADDA.L	D0,A0
	LEA.L	458(A0),A3
	MOVEA.L 734(A2),A0
	ADDQ.L	#8,A0
	MOVEA.L A0,A1
	MOVEQ	#32,D0
	MOVEA.L A3,A0
	bsr	strncpy
	MOVEA.L 734(A2),A0
	MOVEQ	#-4,D0
	CMP.L	4(A0),D0
	bne	2$
	MOVEA.L A3,A0
	LEA.L	HlTxt(pc),A1
	bsr	strcat
2$:	MOVEA.L 734(A2),A0
	MOVEQ	#3,D0
	CMP.L	4(A0),D0
	bne	3$
	MOVEA.L A3,A0
	LEA.L	SlTxt(pc),A1
	bsr	strcat
3$:	MOVE.L	D5,D0
	ASL.L	#2,D0
	MOVE.L	D0,D1
	ADDI.L	#714,D1
	MOVE.L	A3,0(A2,D1.L)
	MOVEQ	#3,D0
	SUB.L	D5,D0
	MOVE.L	D0,D5
	MOVEQ	#1,D0
	CMP.L	D0,D5
	beq	4$
	MOVEA.L 734(A2),A0
	TST.L	(A0)
	bne	L43
4$:	MOVE.L	D7,D0
	LSL.L	#2,D0
	ADD.L	D7,D0
	ADDQ.L	#2,D0
	lea	714(a2),a0
	move.l	d0,(a0)
	MOVE.L	A0,-(sp)
	MOVE.L	A0,40(sp)
	MOVEA.L 326(A2),A0
	LEA.L	MetaFormat3(pc),A1
	bsr	sprintf
	ADDQ.W	#4,sp
	LEA.L	SpcTxt(pc),A0
	MOVE.L	A0,714(A2)
	MOVE.L	326(A2),D1
	MOVE.L	36(sp),D2
	MOVEA.L 4(A2),A6
	CALL	VPrintf
	CLR.L	722(A2)
L43:	MOVEA.L -32(A5),A2
	MOVEA.L 734(A2),A0
	MOVE.L	(A0),734(A2)
L39:	TST.L	734(A2)
	beq	L20
	TST.L	298(A2)
	beq	L45
	bra	L20
L46:	MOVEA.L -20(A5),A1
	MOVE.L	(A1),734(A2)
	MOVEA.L (A2),A6
	CALl	FreeVec
	MOVE.L	734(A2),-20(A5)
L20:	TST.L	-20(A5)
	bne	L46
	TST.L	D6
	beq	1$
	MOVE.L	D6,D1
	MOVEA.L 4(A2),A6
	CALL	UnLock
1$:	MOVEM.L (sp)+,D2-D7/A2-A3/A6
	UNLK	A5
	RTS

Interact:
	LINK.W	A5,#-36
	MOVEM.L D2-D3/D6-D7/A2-A3/A6,-(sp)
	MOVEA.L A0,A3
	MOVE.L	D0,D7
	MOVE.L	D1,D6
	MOVEQ	#0,D0
	MOVE.L	D0,298(A3)
	BSET.B	#7,293(A3)
	MOVEQ	#23,D0
	MOVEQ	#0,D1
	LEA.L	-28(A5),A0
1$:	MOVE.B	D1,(A0)+
	dbf	D0,1$
	MOVEA.L 4(A3),A6
	CALL	Output
	MOVE.L	D0,D1
	CALL	Flush
	MOVEQ	#64,D0
	ADD.L	D0,D0
	MOVE.L	#MEMF_CLEAR|MEMF_PUBLIC,D1
	MOVEA.L (A3),A6
	CALL	AllocVec
	MOVE.L	D0,28(sp)
	bne	L47
	MOVEA.L 4(A3),A6
	CALL	IoErr
	MOVE.L	D0,294(A3)
	LEA.L	IncompleteTxt(pc),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A3),A6
	CALL	PutStr
	MOVEQ	#20,D0
	MOVE.L	D0,298(A3)
	bra	L48
L47:	TST.L	D6
	bne	1$
	LEA.L	InteractionTemplate1(pc),A0
	MOVE.L	A0,D1
	LEA.L	-28(A5),A1
	MOVE.L	A1,D2
	MOVEQ	#0,D3
	MOVEA.L 4(A3),A6
	CALL	ReadArgs
	MOVEA.L D0,A2
	bra	2$
1$:	LEA.L	InteractionTemplate2(pc),A0
	MOVE.L	A0,D1
	LEA.L	-28(A5),A1
	MOVE.L	A1,D2
	MOVEQ	#0,D3
	MOVEA.L 4(A3),A6
	CALL	ReadArgs
	MOVEA.L D0,A2
2$:	MOVE.L	A2,D0
	bne	3$
	CALL	IoErr
	MOVE.L	D0,294(A3)
	MOVEQ	#20,D0
	MOVE.L	D0,298(A3)
	bra	L49
3$:	TST.L	-28(A5)
	beq	L50
	MOVEQ	#1,D0
	CMP.L	D0,D6
	bne	L50
	MOVE.L	D7,D1
	CALL	CurrentDir
	MOVE.L	D0,D6
	LEA.L	330(A3),A0
	MOVE.L	A0,D1
	MOVE.L	#MODE_OLDFILE,D2
	CALL	Open
	MOVE.L	D0,D7
	bne	L51
	CALL	IoErr
	MOVE.L	D0,294(A3)
	MOVEQ	#20,D0
	MOVE.L	D0,298(A3)
	bra	L52
L54:	move.l	#SIGBREAKF_CTRL_C,D1
	MOVEA.L 4(A3),A6
	CALL	CheckSignal
	TST.L	D0
	beq	1$
	MOVE.L	#ERROR_BREAK,D1
	MOVEQ	#0,D2
	CALL	PrintFault
	bra	L53
1$:	LEA.L	-29(A5),A0
	MOVE.L	A0,D1
	MOVEQ	#1,D2
	CALL	WriteChars
L51:	MOVE.L	D7,D1
	MOVEA.L 4(A3),A6
	CALL	FGetC
	MOVE.B	D0,-29(A5)
	CMPI.B	#$ff,D0
	bne	L54
L53:	MOVE.L	D7,D1
	MOVEA.L 4(A3),A6
	CALL	Close
L52:	MOVE.L	D6,D1
	MOVEA.L 4(A3),A6
	CALL	CurrentDir
	bra	L55
L50:	TST.L	-12(A5)
	beq	L56
	MOVE.L	-8(A5),D1
	beq	L57
	MOVEQ	#0,D2
	MOVE.L	D2,D3
	MOVEA.L 4(A3),A6
	CALL	Execute
	LEA.L	LfTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
	bra	L55
L57:	LEA.L	CmdQuest(pc),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A3),A6
	CALL	PutStr
	CALL	Output
	MOVE.L	D0,D1
	CALL	Flush
	CALL	 Input
	MOVE.L	D0,D1
	MOVE.L	28(sp),D2
	MOVE.L	#$0800,D3
	CALL	FGets
	TST.L	D0
	beq	L55
	MOVE.L	D2,D1
	MOVEQ	#0,D2
	MOVE.L	D2,D3
	CALL	Execute
	LEA.L	LfTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
	bra	L55
L56:	TST.L	-8(A5)
	beq	1$
	LEA.L	InvalidAnswerTxt(pc),A0
	MOVE.L	A0,D1
	MOVEA.L 4(A3),A6
	CALL	PutStr
	bra	L55
1$:	TST.L	-16(A5)
	beq	2$
	MOVEQ	#64,D0
	MOVE.L	D0,290(A3)
	bra	L58
2$:	TST.L	-24(A5)
	beq	3$
	BSET.B	#3,24(A3)
	BSET.B	#4,293(A3)
	bra	L58
3$:	TST.L	-28(A5)
	beq	4$
	TST.L	D6
	bne	4$
	BSET.B	#5,293(A3)
	bra	L58
4$:	TST.L	-20(A5)
	beq	L58
	MOVEQ	#1,D0
	CMP.L	D0,D6
	bne	L59
	MOVE.L	D7,D1
	MOVEA.L 4(A3),A6
	CALL	CurrentDir
	MOVE.L	D0,D6
	LEA.L	330(A3),A0
	MOVE.L	A0,D1
	CALL	DeleteFile
	TST.L	D0
	bne	5$
	CALL	IoErr
	MOVE.L	D0,294(A3)
	MOVEQ	#10,D0
	MOVE.L	D0,298(A3)
	bra	6$
5$:	LEA.L	DelTxt(pc),A0
	MOVE.L	A0,D1
	CALL	PutStr
6$:	MOVE.L	D6,D1
	MOVEA.L 4(A3),A6
	CALL	CurrentDir
	bra	L58
L59:	BSET.B	#0,292(A3)
L58:	BCLR.B	#7,293(A3)
L55:	MOVE.L	A2,D1
	MOVEA.L 4(A3),A6
	CALL	FreeArgs
L49:	MOVEA.L 28(sp),A1
	MOVEA.L (A3),A6
	CALL	FreeVec
L48:	MOVEM.L (sp)+,D2-D3/D6-D7/A2-A3/A6
	UNLK	A5
	RTS

putc:	MOVE.B	D0,(A3)+
	RTS

sprintf:
	MOVEM.L A2-A3/A6,-(sp)
	MOVEA.L A0,A3
	move.l	a1,a0
	move.l	a3,-(sp)
	move.l	20(sp),a1
	LEA.L	putc(pc),A2
	MOVEA.L _AbsExecBase,A6
	CALL	RawDoFmt
	move.l	(sp)+,a3
	MOVEA.L A3,A0
1$:	TST.B	(A0)+
	bne	1$
	SUBQ.L	#1,A0
	SUBA.L	A3,A0
	MOVE.L	A0,D0
	MOVEM.L (sp)+,A2-A3/A6
	RTS

strncpy:
	MOVE.L	A0,D1
	bra	1$
3$:	MOVE.B	(A1)+,(A0)+
	beq	2$
1$:	SUBQ.L	#1,D0
	bcc	3$
	bra	4$
5$:	CLR.B	(A0)+
2$:	SUBQ.L	#1,D0
	bcc	5$
4$:	MOVE.L	D1,D0
	RTS

stricmp:
	MOVEQ	#0,D0
	MOVEQ	#0,D1
1$:	MOVE.B	(A0)+,D0
	MOVE.B	(A1)+,D1
	CMPI.B	#'a',D0
	blt	2$
	CMPI.B	#'z',D0
	bgt	2$
	SUBI.B	#32,D0
2$:	CMPI.B	#'a',D1
	blt	3$
	CMPI.B	#'z',D1
	bgt	3$
	SUBI.B	#32,D1
3$:	SUB.L	D1,D0
	bne	4$
	TST.B	D1
	bne	1$
4$:	RTS

strcat: move.l	a0,d0
1$:	TST.B	(A0)+
	bne	1$
	SUBQ.L	#1,A0
2$:	MOVE.B	(A1)+,(A0)+
	bne	2$
	RTS

L11:		dc.w	0
Version:	dc.b	"$VER: dir 37.51 (7.7.93 by as)",10,13,0
DosName:	dc.b	"dos.library",0
Template:	dc.b	"DIR,OPT/K,ALL/S,DIRS/S,FILES/S,INTER/S",0
InteractionTemplate1:
	dc.b	"E=ENTER/S,B=BACK/S,DEL=DELETE/S,Q=QUIT/S,C=COM/S,COMMAND",0
InteractionTemplate2:
	dc.b	"T=TYPE/S,B=BACK/S,DEL=DELETE/S,Q=QUIT/S,C=COM/S,COMMAND",0
IgnoreOptTxt:	dc.b	" option ignored",10,0
NoInfoTxt:	dc.b	"Could not get information for %s",10,0
NoDirTxt:	dc.b	"%s is not a directory",10,0
CircularDirTxt: dc.b	"Error, circular directory entry found",10,0
DirHlTxt:	dc.b	"(dir)"
HlTxt:		dc.b	" <hl>",0
SlTxt:		dc.b	" <sl>",0
DirTxt: 	dc.b	"(dir)",0
IncompleteTxt:	dc.b	"List incomplete -"
SpcTxt: 	dc.b	32,0
DelTxt: 	dc.b	"Deleted"
LfTxt:		dc.b	10,0
MetaFormat:	dc.b	"%%%lds%%s %%s",0
MetaFormat2:	dc.b	"%%%lds%%s%%s",0
MetaFormat3:	dc.b	"%%%lds%%-31s  %%s",10,0
CmdQuest:	dc.b	10,"Command"
QMarkTxt:	dc.b	" ? ",0
InvalidAnswerTxt:
		dc.b	"Invalid response - try again",10,0

	END
