www.pudn.com > fat16 and fat32 file system.rar > file.c


/*C************************************************************************** 
* NAME:         file.c 
*---------------------------------------------------------------------------- 
* Copyright (c) 2003 Atmel. 
*---------------------------------------------------------------------------- 
* RELEASE:      snd1c-refd-nf-4_0_3       
* REVISION:     1.10      
*---------------------------------------------------------------------------- 
* PURPOSE: 
* This file contains extention routines to the file system 
*****************************************************************************/ 
 
/*_____ I N C L U D E S ____________________________________________________*/ 
 
#include "config.h"                         /* system configuration   */ 
#include "modules\display\disp_task.h"      /* display definition */ 
#include "file.h"                           /* file system definition */ 
 
/*_____ M A C R O S ________________________________________________________*/ 
 
#define F_SEEK_TIME ((Byte)4) 
 
extern  bit     fs_memory;          /* selected file system */ 
 
/*_____ D E F I N I T I O N ________________________________________________*/ 
 
 
/*_____ D E C L A R A T I O N ______________________________________________*/ 
 
 
/*F************************************************************************** 
* NAME: file_seek_prev 
*---------------------------------------------------------------------------- 
* PARAMS: 
*   id: file type identifier 
*   loop: loop to the last file 
* 
* return: 
*---------------------------------------------------------------------------- 
* PURPOSE: 
*   Select previous file with specified extension 
*---------------------------------------------------------------------------- 
* EXAMPLE: 
*---------------------------------------------------------------------------- 
* NOTE: 
*   Depending on the time played, this function selects the previous file 
*   or restarts the file under playing. 
*---------------------------------------------------------------------------- 
* REQUIREMENTS: 
*****************************************************************************/ 
bit file_seek_prev (Byte id, bit loop) 
{ 
  if ((disp_get_sec() < F_SEEK_TIME) && (disp_get_min() == 0)) 
  { 
    while (File_goto_prev() == OK) 
    { 
      /* a file or a directory exists */ 
      if ((File_type() & id) != 0)            /* specified file type found */ 
      {  
        return TRUE;                          /* exit when found */ 
      } 
    } 
    /* beginning of dir */ 
    if (File_goto_last() == OK)               /* goto to the end of dir */ 
    { 
      if (loop)                               /* loop = false when ask previous and play */ 
      { 
        do 
        { 
          if ((File_type() & id) != 0)          /* look for a specified file */ 
          {                                     /* specified file type found */ 
            return TRUE;                        /* exit when found */ 
          } 
        } 
        while (File_goto_prev() == OK); 
        return FALSE; 
      } 
      else                                    /* no loop */ 
      { 
        return FALSE;                         /* Stop at the last */ 
      } 
    } 
    else 
      return FALSE; 
  } 
  return TRUE; 
} 
 
 
/*F************************************************************************** 
* NAME: file_seek_next 
*---------------------------------------------------------------------------- 
* PARAMS: 
*   id:   file type identifier 
*   loop: loop to the first file 
* 
* return: 
*---------------------------------------------------------------------------- 
* PURPOSE: 
*   Select next file with specified extension 
*---------------------------------------------------------------------------- 
* EXAMPLE: 
*---------------------------------------------------------------------------- 
* NOTE: 
*---------------------------------------------------------------------------- 
* REQUIREMENTS: 
*****************************************************************************/ 
bit file_seek_next (Byte id, bit loop) 
{ 
   
  while (File_goto_next() == OK) 
  { 
    /* file or dir found */ 
    if ((File_type() & id) != 0) 
    { /* specified file type found */ 
      return TRUE;                          /* exit when found */ 
    } 
  } 
                                            /* end of dir */ 
  if (File_goto_first() == OK)              /* goto beginning of the dir */ 
  { 
    if (loop)                               /* loop ? */ 
    {                                       /* re-start at the beginning */ 
      do 
      { 
        if ((File_type() & id) != 0)        /* look for a specified file */ 
        {                                   /* specified file type found */ 
          return TRUE;                      /* exit when found */ 
        } 
      } 
      while (File_goto_next() == OK);       
      return FALSE;                         /* no specified file in the dir */ 
    } 
    else                                    /* no loop */ 
    { 
      return FALSE;                         /* Stop at the beginning */ 
    } 
  } 
  else 
    return FALSE; 
} 
 
 
/*F************************************************************************** 
* NAME: file_entry_dir 
*---------------------------------------------------------------------------- 
* PARAMS: 
*   id: file type identifier 
* 
* return: 
*   OK: file type found in dir 
*   KO: file type not found in dir 
*---------------------------------------------------------------------------- 
* PURPOSE: 
*   Enter a directory 
*---------------------------------------------------------------------------- 
* EXAMPLE: 
*---------------------------------------------------------------------------- 
* NOTE: 
*---------------------------------------------------------------------------- 
* REQUIREMENTS: 
*****************************************************************************/ 
bit file_entry_dir (Byte id) 
{ 
  if (File_type() == FILE_DIR)              /* only for directory! */ 
  { /* stopped on a directory */ 
    if (File_goto_child(id) == KO) 
    { 
      /* no file in dir */ 
      File_goto_parent(id); 
      return KO; 
    } 
    else 
     return OK; 
  } 
  else 
  { 
    return KO; 
  } 
}