97 unsigned char fopen_(
unsigned char *fname,
char mode,
File *file)
99 unsigned long cluster_temp = 0;
100 unsigned char name[11] =
" ";
101 unsigned int temp = 0;
103 if(file == 0)
return(0);
125 fseek_(file, 0, SEEK_END);
131 if((mode ==
'a') || (mode ==
'w'))
136 temp = (
unsigned int)cluster_temp;
164 #ifdef __USE_TIME_DATE_ATTRIBUTE // has the date and time attribute of the file to be set?
166 time = (((rtctime.hour)<<11) | ((rtctime.minute)<<5) | rtctime.second);
167 date = ((((rtctime.year)-1980) <<9) | ((rtctime.month) <<5) | rtctime.day);
172 if(file && file->
mode ==
'a')
221 unsigned long fread_(
void *buffer,
unsigned long size,
unsigned long count,
File *file)
223 unsigned long object_cnt = 0;
224 unsigned long object_size = 0;
225 unsigned char *buff_pnt = 0;
226 unsigned char success = 1;
228 buff_pnt = (
unsigned char *) buffer;
230 while((object_cnt < count) && success)
233 while((size > 0) && success)
235 *buff_pnt = (
unsigned char)
fgetchar_(file);
239 if(success) object_cnt++;
254 unsigned long fwrite_(
void *buffer,
unsigned long size,
unsigned long count,
File *file)
256 unsigned long object_cnt = 0;
257 unsigned long object_size = 0;
258 unsigned char *buff_pnt = 0;
259 unsigned char success = 1;
261 buff_pnt = (
unsigned char *) buffer;
263 while((object_cnt < count) && success)
266 while((size > 0) && success)
272 if(success) object_cnt++;
290 unsigned long temp = 0;
293 if(origin == SEEK_SET)
298 else if(origin == SEEK_END)
303 else if(origin == SEEK_CUR)
310 if((fposition >= 0) && (fposition <= (long)file->
filesize))
402 unsigned long ul_temp = 0;
403 unsigned char retvalue = 1;
447 while(
string[i] != 0)
467 unsigned char state = 0;
475 if(buff_tmp == 0x0D) state++;
486 if(buff_tmp == EOF) {buff_tmp = 0; count = 1;}
487 string[buff_pnt] = (char) buff_tmp;
491 string[buff_pnt] = 0;
507 if(
fopen_(fname,
'r', file))
528 unsigned long fat_pointer = 0;
529 unsigned long fat_sector_offset = 0;
530 unsigned long ul_tmp = 0;
531 unsigned char retvalue = 0;
543 fat_sector_offset += 2;
544 fat_pointer = (fat_sector_offset%0x100);
545 fat_sector_offset = (fat_sector_offset>>8);
550 ul_tmp = (
unsigned long)
FileBuffer[((fat_pointer << 1)+1)];
551 ul_tmp = (ul_tmp << 8);
552 ul_tmp |= (
unsigned long)
FileBuffer[(fat_pointer << 1)];
576 unsigned long fat_pointer = 0;
577 unsigned long ul_tmp = 0;
578 unsigned int fat_sector_offset = 0;
579 unsigned int fat_entry = 0;
580 unsigned int free_cluster = 0;
584 while((fat_sector_offset <
SectorsPerFat) && (!free_cluster))
586 ul_tmp = (
unsigned long) ((
unsigned long)fat_pointer + (
unsigned long)fat_sector_offset);
590 for(fat_entry=0;fat_entry<256;fat_entry++)
596 free_cluster = fat_entry;
597 free_cluster += (fat_sector_offset << 8);
603 return(free_cluster);
616 unsigned int free_cluster = 0;
617 unsigned long fat_pointer = 0;
618 unsigned char retvalue = 0;
621 if(free_cluster) retvalue = 1;
630 fat_pointer = (
unsigned long)free_cluster;
648 unsigned long fat_sector_offset = 0;
652 fat_sector_offset += 2;
654 return((
unsigned int)fat_sector_offset);
666 unsigned int fat_pointer = 0;
669 fat_pointer = fat_pointer % 0x100;
689 unsigned int rootentry = 0;
690 unsigned int cnt_enries_searched = 0;
692 unsigned int sector_offset = 0;
693 unsigned char retvalue = 0;
701 while((rootentry<16) && (!retvalue))
703 if((DirectoryEntry[rootentry].
attribute == 0) || (DirectoryEntry[rootentry].
attribute == 0xE5))
705 for(i=0;i<11;i++) DirectoryEntry[rootentry].
name[i] = fname[i];
706 DirectoryEntry[rootentry].
attribute = attrib;
708 DirectoryEntry[rootentry].
size = 0;
715 cnt_enries_searched++;
738 unsigned int rootentry=0;
739 unsigned int end_of_directory_not_reached = 0;
741 unsigned char retvalue = 0;
742 unsigned long cluster_temp = 0;
743 unsigned int cnt = 0;
751 while((!retvalue)&&(rootentry<16))
754 while((i<10)&&(DirectoryEntry[rootentry].
name[i] == fname[i]))
760 cluster_temp = (
unsigned long)DirectoryEntry[rootentry].
startcluster;
766 file->
filesize = (
unsigned long) DirectoryEntry[rootentry].
size;
777 while((end_of_directory_not_reached) && (!retvalue));
792 unsigned char readpointer = 0;
793 unsigned char writepointer = 0;
794 unsigned char dircnt = 0;
795 unsigned char dirname[11];
796 unsigned char retvalue = 1;
797 unsigned char cnt = 0;
800 while((fname[readpointer]!=0) && (cnt < 255))
803 if((fname[readpointer] ==
'/') && readpointer)
810 for(writepointer=0;writepointer<10;writepointer++) dirname[writepointer] =
' ';
817 while(dircnt && retvalue)
819 if(fname[readpointer] !=
'/')
821 if((fname[readpointer]>96) && (fname[readpointer]<123))
823 dirname[writepointer]=(fname[readpointer] - 32);
827 dirname[writepointer]=fname[readpointer];
838 for(writepointer=0;writepointer<10;writepointer++) dirname[writepointer] =
' ';
856 unsigned char readpointer = 0;
857 unsigned char writepointer = 0;
858 unsigned char dircnt = 0;
859 unsigned char fileindex = 0;
861 while(fname[readpointer]!=0)
863 if((fname[readpointer] ==
'/') && readpointer)
866 fileindex = (readpointer + 1);
870 readpointer = fileindex;
873 while((writepointer<=10) && (fname[readpointer]!=0))
875 if(fname[readpointer]==
'.')
882 if((fname[readpointer]>96) && (fname[readpointer]<123))
884 name[writepointer]=(fname[readpointer] - 32);
888 name[writepointer]=fname[readpointer];
unsigned long fwrite_(void *buffer, unsigned long size, unsigned long count, File *file)
unsigned long FileAllocationTable
unsigned int SectorsPerFat
unsigned long FirstPartitionSector
unsigned long directory_sector
unsigned int startcluster
unsigned int GetNextCluster(File *file)
unsigned char fexist_(unsigned char *fname, File *file)
unsigned long fread_(void *buffer, unsigned long size, unsigned long count, File *file)
unsigned char ScanSubDirectories(unsigned char *fname, File *file)
int fseek_(File *file, long offset, int origin)
unsigned char fputchar_(File *file, char c)
unsigned long fileposition
unsigned char FileBuffer[512]
unsigned int FindNextFreeCluster(File *file)
struct DirEntry * DirectoryEntry
unsigned int GetFatSectorIndex(File *file)
unsigned char SeekDirectoryEntry(unsigned char *fname, File *file)
unsigned long start_cluster
unsigned int GetFatClusterOffset(File *file)
unsigned char InitFat16(void)
unsigned long sector_in_buffer
char * fgets_(char *string, int count, File *file)
unsigned int next_cluster
unsigned char fputs_(File *file, char *string)
unsigned long ReservedSectors
unsigned char AppendCluster(File *file)
unsigned char CreateDirectoryEntry(unsigned char *fname, unsigned int cluster, File *file, unsigned char attrib)
unsigned char sector_index
unsigned int PossibleRootEntries
unsigned long RootDirectory
int fgetchar_(File *file)
unsigned char SectorsPerCluster
unsigned long cluster_pointer
unsigned char directory_index
unsigned char fopen_(unsigned char *fname, char mode, File *file)
unsigned long FirstDataCluster
void SeperateFileName(unsigned char *fname, unsigned char *name)