📄 sd_ls.c
字号:
#include <RTL.h> /* RTL kernel functions & defines */
#include <stdio.h> /* standard I/O .h-file */
#include <ctype.h> /* character functions */
#include <string.h> /* string and memory functions */
#include "../Drivers/PCF8833.h"
#define CNTLQ 0x11
#define CNTLS 0x13
#define DEL 0x7F
#define BACKSPACE 0x08
#define CR 0x0D
#define LF 0x0A
#define ESC 0x1B
/*----------------------------------------------------------------------------
* Process input string for an entry
*---------------------------------------------------------------------------*/
static char *get_entry (char *cp, char **pNext) {
char *sp;
if (cp == NULL) { /* skip NULL pointers */
*pNext = cp;
return (cp);
}
for ( ; *cp == ' '; cp++) { /* skip blanks */
*cp = 0;
}
//for (sp = cp; *sp != ' ' && *sp != CR && *sp != LF; sp++) {
// *sp = (char)toupper (*sp); /* convert entry to uppercase */
//}
for ( ; *sp == ' ' || *sp == CR || *sp == LF; sp++) {
*sp = 0;
}
*pNext = (*sp) ? sp : NULL; /* next entry */
return (cp);
}
/*----------------------------------------------------------------------------
* Print size in dotted fomat
*---------------------------------------------------------------------------*/
static void dot_format (U32 val, char *sp) {
if (val >= (U32)1e9) {
sp += sprintf (sp,"%d.",val/(U32)1e9);
val %= (U32)1e9;
sp += sprintf (sp,"%03d.",val/(U32)1e6);
val %= (U32)1e6;
sprintf (sp,"%03d.%03d",val/1000,val%1000);
return;
}
if (val >= (U32)1e6) {
sp += sprintf (sp,"%d.",val/(U32)1e6);
val %= (U32)1e6;
sprintf (sp,"%03d.%03d",val/1000,val%1000);
return;
}
if (val >= 1000) {
sprintf (sp,"%d.%03d",val/1000,val%1000);
return;
}
sprintf (sp,"%d",val);
}
/*----------------------------------------------------------------------------
* Print a Flash Memory Card Directory
*---------------------------------------------------------------------------*/
static void ls (char *par) {
U32 fsize,files;
char temp[32],*mask,*next;
FINFO info;
char s[50];
mask = get_entry (par, &next);
if (mask == NULL) {
mask = "*.*";
}
//printf ("\nFile System Directory...");
PutString(1,16,"Directory... ",0xF800,0xFFE0);
files = 0;
fsize = 0;
info.fileID = 0;
while (ffind (mask,&info) == 0) {
dot_format (info.size, &temp[0]);
sprintf (s,"\n%-20s %14s ", info.name, temp);
if( files < 3 ) {
PutString(1,80+files*16,s,0xF800,0xFFE0);
}
sprintf (s," %02d.%02d.%04d %02d:%02d ID[%04d]",
info.time.day, info.time.mon, info.time.year,
info.time.hr, info.time.min, info.fileID);
fsize += info.size;
files++;
}
if (info.fileID == 0) {
//printf ("\nNo files...");
PutString(1,32,"No files... ",0xF800,0xFFE0);
}
else {
dot_format (fsize, &temp[0]);
sprintf (s,"%d File(s)", files);
PutString(1,32,s,0xF800,0xFFE0);
sprintf (s,"%s bytes", temp);
PutString(1,48,s,0xF800,0xFFE0);
}
dot_format (ffree(""), &temp[0]);
sprintf (s,"%s bytes free.\n",temp);
PutString(1,64,s,0xF800,0xFFE0);
}
/*----------------------------------------------------------------------------
* Main:
*---------------------------------------------------------------------------*/
int main(void) {
U32 retv;
// char s[20];
PCF8833Init();
LCD_Clear_Screen();
for(;;) {
retv = finit (); /* Wait until the Card is ready*/
if(retv != 0) {
switch( retv ) {
case 1:
PutString(1,0,"Init Failed! ",0xF800,0xFFE0);
break;
default:
PutString(1,0,"Unformatted! ",0xF800,0xFFE0);
break;
}
continue;
}
PutString(1,0,"Card Ready! ",0xF800,0xFFE0);
ls("*.*");
}
}
/*----------------------------------------------------------------------------
* end of file
*---------------------------------------------------------------------------*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -