]> git.sur5r.net Git - cc65/commitdiff
Allow a third, optional filename argument for cbm_opendir.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 4 Jun 2012 18:32:38 +0000 (18:32 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Mon, 4 Jun 2012 18:32:38 +0000 (18:32 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5683 b7a2c559-68d2-44c3-8de9-860c34a00d81

include/cbm.h
libsrc/cbm/cbm_dir.c

index d3c96675528d46937045f84d63ebea808e50f0c9..471349b71e7e85f4fff316980b505fbd6805b548 100644 (file)
@@ -116,7 +116,7 @@ extern char _filetype;          /* Defaults to 'u' */
 #define CH_LIRA                 92
 #define CH_ESC          27
 
-                
+
 
 /*****************************************************************************/
 /*                Definitions for directory reading functions                */
@@ -150,9 +150,9 @@ struct cbm_dirent {
 };
 
 unsigned char __fastcall__ _cbm_filetype (unsigned char c);
-/* Map the start character for a file type to one of the file types above. 
- * Note: 'd' will always mapped to CBM_T_DEL. The calling function has to 
- * look at the following character to determine if the file type is actually 
+/* Map the start character for a file type to one of the file types above.
+ * Note: 'd' will always mapped to CBM_T_DEL. The calling function has to
+ * look at the following character to determine if the file type is actually
  * CBM_T_DIR.
  * This is a function used by the implementation. There is usually no need
  * to call it from user code.
@@ -274,10 +274,11 @@ int __fastcall__ cbm_write (unsigned char lfn, const void* buffer,
  * _oserror contains an error-code, then (see above table).
  */
 
-unsigned char __fastcall__ cbm_opendir (unsigned char lfn, unsigned char device);
-/* Opens directory listing.
- * Returns 0 if openning directory was successful;
- * otherwise, an error-code corresponding to cbm_open().
+unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...);
+/* Opens directory listing. Returns 0 if opening directory was successful;
+ * otherwise, an error-code corresponding to cbm_open(). As an optional
+ * argument, the name of the directory may be passed to the function. If
+ * no explicit name is specified, "$" is used.
  */
 
 unsigned char __fastcall__ cbm_readdir (unsigned char lfn,
index 79d2c205e2dd3fa44276d17092043cebe593d26c..df3d21cb54ceaab2bd260cf0910a0eece4ec2dea 100644 (file)
 /* in directory listings).                            */
 
 
+#include <stdarg.h>
 #include <cbm.h>
 #include <errno.h>
 
 
 
-/* Opens directory listing.
-** Returns 0 if openning directory was successful;
-** otherwise, an error-code corresponding to cbm_open().
+/* Opens directory listing. Returns 0 if opening directory was successful;
+** otherwise, an error-code corresponding to cbm_open(). As an optional
+** argument, the name of the directory may be passed to the function. If
+** no explicit name is specified, "$" is used.
 */
-unsigned char __fastcall__ cbm_opendir (unsigned char lfn, unsigned char device)
+unsigned char cbm_opendir (unsigned char lfn, unsigned char device, ...)
 {
-    if (cbm_open (lfn, device, CBM_READ, "$") == 0) {
+    va_list ap;
+    const char* name = "$";
+
+    /* The name used in cbm_open may optionally be passed */
+    if (__argsize__ == 4) {
+        va_start (ap, device);
+        name = va_arg (ap, const char*);
+        va_end (ap);
+    }
+
+    /* Open the directory */
+    if (cbm_open (lfn, device, CBM_READ, name) == 0) {
         if ((_oserror = cbm_k_chkin (lfn)) == 0) {
             /* Ignore start address */
             cbm_k_basin();