?login_element?

Subversion Repositories NedoOS

Rev

Rev 272 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

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