Index: soft/giet_vm/giet_libs/stdio.c
===================================================================
--- soft/giet_vm/giet_libs/stdio.c	(revision 658)
+++ soft/giet_vm/giet_libs/stdio.c	(revision 659)
@@ -1054,4 +1054,30 @@
 }
 
+////////////////////////////////////
+int giet_fat_opendir( char* pathname )
+{
+    return sys_call( SYSCALL_FAT_OPENDIR,
+                     (unsigned int)pathname,
+                     0, 0, 0 );
+}
+
+////////////////////////////////////
+int giet_fat_closedir( unsigned int fd_id )
+{
+    return sys_call( SYSCALL_FAT_CLOSEDIR,
+                     (unsigned int)fd_id,
+                     0, 0, 0 );
+}
+
+////////////////////////////////////
+int giet_fat_readdir( unsigned int  fd_id,
+                      fat_dirent_t* entry )
+{
+    return sys_call( SYSCALL_FAT_READDIR,
+                     (unsigned int)fd_id,
+                     (unsigned int)entry,
+                     0, 0 );
+}
+
 /////////////////////////////////////
 int giet_fat_list( char* pathname )
Index: soft/giet_vm/giet_libs/stdio.h
===================================================================
--- soft/giet_vm/giet_libs/stdio.h	(revision 658)
+++ soft/giet_vm/giet_libs/stdio.h	(revision 659)
@@ -60,7 +60,7 @@
 #define SYSCALL_FAT_MKDIR            0x28
 #define SYSCALL_FAT_LIST             0x29
-//                                   0x2A
-//                                   0x2B
-//                                   0x2C
+#define SYSCALL_FAT_OPENDIR          0x2A
+#define SYSCALL_FAT_CLOSEDIR         0x2B
+#define SYSCALL_FAT_READDIR          0x2C
 //                                   0x2D
 //                                   0x2E
@@ -96,4 +96,12 @@
     unsigned int is_dir;
 }   fat_file_info_t;
+
+typedef struct fat_dirent_s
+{
+    unsigned int cluster;
+    unsigned int size;
+    unsigned int is_dir;
+    char name[36];
+}   fat_dirent_t;
 
 #define SEEK_SET            0          // argument for giet_fat_lseek()
@@ -310,6 +318,6 @@
 extern int giet_fat_close( unsigned int fd_id );
 
-extern int giet_fat_file_info( unsigned int             fd_id,
-                               struct fat_file_info_s*  info );
+extern int giet_fat_file_info( unsigned int     fd_id,
+                               fat_file_info_t* info );
 
 extern int giet_fat_read( unsigned int fd_id,
@@ -332,4 +340,11 @@
 
 extern int giet_fat_mkdir( char* pathname );
+
+extern int giet_fat_opendir( char* pathname );
+
+extern int giet_fat_closedir( unsigned int fd_id );
+
+extern int giet_fat_readdir( unsigned int  fd_id,
+                             fat_dirent_t* entry );
 
 extern int giet_fat_list( char* pathname );
