Subversion Repositories NedoOS

Rev

Rev 128 | Rev 136 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "ff.h"
  4.  
  5. FILE * img=NULL;
  6. FILE * f1=NULL;
  7. FATFS fs;
  8. FIL f2;
  9. char * cc="";
  10. char buf[8*1024];
  11. int imagemnt(char * imgname){
  12.         int res;
  13.         if((img=fopen(imgname,"rb+"))==NULL) {
  14.                 printf("Image file %s not open.\n",imgname);
  15.                 return 1;
  16.         }
  17.         if(res=f_mount(&fs, "0:", 1)){
  18.                 printf("f_mount error %d.",res);
  19.                 return 1;
  20.         }
  21.         return 0;
  22. }
  23.  
  24. int parsearg(char * arg){
  25.         int res;
  26.         if(arg[0] != '-') return imagemnt(arg);
  27.         switch(arg[1]){
  28.                 case 'S':
  29.                        
  30.                         break;
  31.         }
  32.         return 0;
  33. }
  34.  
  35. int main (int argc, char *argv[]){
  36.         DIR dr;
  37.         FILINFO fi;
  38.         int res;
  39. #ifdef WIN32
  40.     SetConsoleCP(866);// установка кодовой страницы win-cp 1251 в поток ввода
  41.     SetConsoleOutputCP(866); // установка кодовой страницы win-cp 1251 в поток вывода
  42. #endif
  43.  
  44.         if(argc<3){
  45.                 puts("Error: Need more parameters.");
  46.                 exit(1);
  47.         }
  48.         if(imagemnt(argv[1])) exit(2);
  49.        
  50.         if(strcmp(argv[2],"mkdir")==0){
  51.                 //printf("mkdir ");
  52.                 if(argc!=4){
  53.                         puts("Error: wrong namber parameters");
  54.                         exit(1);
  55.                 }
  56.                 //puts(argv[3]);
  57.                 if(res=f_mkdir(argv[3])){
  58.                         printf("Error fatfs: %d",res);
  59.                         exit(1);
  60.                 }
  61.         }else if(strcmp(argv[2],"del")==0){
  62.                 //printf("del ");
  63.                 if(argc!=4){
  64.                         puts("Error: wrong namber parameters");
  65.                         exit(1);
  66.                 }
  67.                 //puts(argv[3]);
  68.                 if(res=f_unlink(argv[3])){
  69.                         printf("Error fatfs: %d",res);
  70.                         exit(1);
  71.                 }
  72.         }else if(strcmp(argv[2],"put")==0){
  73.                 //printf("put ");
  74.                 if(argc!=5){
  75.                         puts("Error: wrong namber parameters");
  76.                         exit(1);
  77.                 }
  78.                 //printf(argv[3]);putchar(' '); puts(argv[4]);
  79.                 if((f1=fopen(argv[3],"rb"))==NULL) {
  80.                         printf("file %s not open.\n",argv[3]);
  81.                         return 1;
  82.                 }
  83.                 if(res=f_open(&f2,argv[4],FA_CREATE_ALWAYS|FA_WRITE)) {
  84.                         printf("Error fatfs: %d",res);
  85.                         exit(1);
  86.                 }
  87.                 while(1){
  88.                         int len=0,len2=0;
  89.                         len=fread(buf, 1, sizeof(buf), f1);
  90.                         if(len<=0)break;
  91.                         f_write (&f2, buf, len, &len2);
  92.                 }
  93.                 fclose(f1);
  94.                 f_close(&f2);
  95.         }else if(strcmp(argv[2],"get")==0){
  96.                 //printf("get ");
  97.                 if(argc!=5){
  98.                         puts("Error: wrong namber parameters");
  99.                         exit(1);
  100.                 }
  101.                 //printf(argv[3]);putchar(' '); puts(argv[4]);
  102.                 if((f1=fopen(argv[4],"w+b"))==NULL) {
  103.                         printf("file %s not open.\n",argv[3]);
  104.                         return 1;
  105.                 }
  106.                 if(res=f_open(&f2,argv[3],FA_OPEN_EXISTING|FA_READ)) {
  107.                         printf("Error fatfs: %d",res);
  108.                         exit(1);
  109.                 }
  110.                 while(1){
  111.                         int len=0,len2=0;
  112.                         f_read(&f2, buf, sizeof(buf), &len);
  113.                         if(len<=0)break;
  114.                         len2=fwrite(buf, 1, len, f1);
  115.                 }
  116.                 fclose(f1);
  117.                 f_close(&f2);
  118.         }else if(strcmp(argv[2],"dir")==0){
  119.                 //printf("dir ");
  120.                 if(argc<3){
  121.                         puts("Error: wrong namber parameters");
  122.                         exit(1);
  123.                 }
  124.                 //puts(argv[3]);
  125.                 cc="f_opendir";
  126.                 if(res=f_opendir (&dr,(argc>=4)?argv[3]:"")) goto errexit;
  127.                 while(1){
  128.                         cc="f_readdir";
  129.                         if(res=f_readdir (&dr, &fi)) goto errexit;
  130.                         if(fi.fname[0]==0x00)break;
  131.                         puts(fi.fname);
  132.                 }      
  133.         }
  134.         //for(int ai=2;ai<argc;ai++){
  135.                 //puts(argv[ai]);
  136.         //      if(parsearg(argv[ai])) goto errexit;
  137.         //}
  138.         //exit(0);
  139.        
  140.        
  141.        
  142.        
  143.         fclose(img);
  144.         exit(0);
  145. errexit:
  146.         printf("%s: %d",cc,res);
  147.         fclose(img);
  148.         exit(1);
  149. }
  150.