From d99d5f3337f8427403b94953e57659bca4c845ef Mon Sep 17 00:00:00 2001
From: "ol.sc" 
Date: Wed, 10 Oct 2012 20:55:56 +0000
Subject: [PATCH] Replaced Apple II specific solution with implementation of
 recently introduced devicedir().
git-svn-id: svn://svn.cc65.org/cc65/trunk@5846 b7a2c559-68d2-44c3-8de9-860c34a00d81
---
 doc/apple2.sgml           |  1 -
 doc/apple2enh.sgml        |  1 -
 include/apple2.h          |  5 ---
 libsrc/apple2/Makefile    |  2 +-
 libsrc/apple2/devicedir.s | 82 +++++++++++++++++++++++++++++++++++++++
 libsrc/apple2/rootdir.s   | 52 -------------------------
 libsrc/apple2enh/Makefile |  2 +-
 7 files changed, 84 insertions(+), 61 deletions(-)
 create mode 100644 libsrc/apple2/devicedir.s
 delete mode 100644 libsrc/apple2/rootdir.s
diff --git a/doc/apple2.sgml b/doc/apple2.sgml
index 3d55f6f96..c01c5bda7 100644
--- a/doc/apple2.sgml
+++ b/doc/apple2.sgml
@@ -296,7 +296,6 @@ usage.
 - _filetype
 - get_ostype
 - rebootafterexit
-- rootdir
 - ser_apple2_slot
 - tgi_apple2_mix
 
diff --git a/doc/apple2enh.sgml b/doc/apple2enh.sgml
index 075811236..8d80002a2 100644
--- a/doc/apple2enh.sgml
+++ b/doc/apple2enh.sgml
@@ -296,7 +296,6 @@ usage.
 - _filetype
 - get_ostype
 - rebootafterexit
-- rootdir
 - ser_apple2_slot
 - textframe
 - textframexy
diff --git a/include/apple2.h b/include/apple2.h
index b7826a764..b81e6bedd 100644
--- a/include/apple2.h
+++ b/include/apple2.h
@@ -155,11 +155,6 @@ unsigned char get_ostype (void);
 void rebootafterexit (void);
 /* Reboot machine after program termination has completed. */
 
-int __fastcall__ rootdir (unsigned char drive, char* buf);
-/* Fill buffer with root directory name of ProDOS 8 disk in
- * ProDOS 8 drive. Returns 0 on success and -1 on error.
- */
-
 #define ser_apple2_slot(num)  ser_ioctl (0, (void*) (num))
 /* Select a slot number from 1 to 7 prior to ser_open.
  * The default slot number is 2.
diff --git a/libsrc/apple2/Makefile b/libsrc/apple2/Makefile
index a8e92f467..3896f2903 100644
--- a/libsrc/apple2/Makefile
+++ b/libsrc/apple2/Makefile
@@ -62,6 +62,7 @@ S_OBJS=	_scrsize.o	\
      	crt0.o		\
      	ctype.o		\
      	cvline.o	\
+     	devicedir.o	\
 	dioclose.o	\
 	diocommon.o	\
 	dioopen.o	\
@@ -95,7 +96,6 @@ S_OBJS=	_scrsize.o	\
      	read.o          \
      	reboot.o        \
      	revers.o	\
-     	rootdir.o	\
 	rwcommon.o	\
 	syschdir.o	\
 	sysmkdir.o	\
diff --git a/libsrc/apple2/devicedir.s b/libsrc/apple2/devicedir.s
new file mode 100644
index 000000000..3572eeeeb
--- /dev/null
+++ b/libsrc/apple2/devicedir.s
@@ -0,0 +1,82 @@
+;
+; Oliver Schmidt, 2010-05-24
+;
+; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
+;
+
+        .export		_getdevicedir
+        .import		popax, popa
+
+        .include	"zeropage.inc"
+        .include	"errno.inc"
+        .include	"mli.inc"
+
+_getdevicedir:
+        ; Save size
+        sta	ptr2
+        stx	ptr2+1
+
+        ; Save buf
+        jsr	popax
+        sta	ptr1
+        stx	ptr1+1
+
+        ; Set buf
+        sta	mliparam + MLI::ON_LINE::DATA_BUFFER
+        stx	mliparam + MLI::ON_LINE::DATA_BUFFER+1
+
+        ; Set device
+        jsr	popa
+        sta	mliparam + MLI::ON_LINE::UNIT_NUM
+
+        ; Check for valid slot
+        tax
+        and	#$0F
+        bne	erange
+        txa
+        and	#$70
+        beq	erange
+
+        ; Check for sufficient buf size
+        lda	ptr2+1
+        bne	:++		; Buf >= 256
+        lda	ptr2
+        cmp	#17
+        bcs	:++		; Buf >= 17
+
+        ; Handle errors
+erange: lda	#