Subversion Repositories Kolibri OS

Rev

Rev 3247 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.  
  2. void print_error(void)
  3. {
  4.  
  5. #if LANG_ENG
  6.     printf("  Error!\n\r");
  7. #elif LANG_RUS
  8.     printf("  Žè¨¡ª !\n\r");
  9. #endif
  10.  
  11. }
  12.  
  13. int cmd_cp(char param[])
  14. {
  15.  
  16. char* argv[100];
  17. int i;
  18. int argc;
  19. char *filename_in;
  20. char *filename_out;
  21. char *buffer;
  22.  
  23. kol_struct70    k70_in;
  24. kol_struct70    k70_out;
  25.  
  26. kol_struct_BDVK bdvk;
  27.  
  28. unsigned filesize, result;
  29. unsigned n; // ª®«¨ç¥á⢮ à § ª®¯¨à®¢ ­¨ï ¯® 4 ª¡ ©â 
  30.  
  31. argc = parameters_prepare(param, argv);
  32.  
  33. if (argc != 2)
  34.    {
  35.       #if LANG_ENG
  36.         printf("  cp <file_in> <file_out>\n\r");
  37.       #elif LANG_RUS
  38.         printf("  cp <¨áâ®ç­¨ª> <१ã«ìâ â>\n\r");
  39.       #endif
  40.  
  41.       parameters_free(argc, argv);
  42.  
  43.       return FALSE;
  44.    }
  45.  
  46. filename_in  = (char*) malloc(4096);
  47. filename_out = (char*) malloc(4096);
  48.  
  49. if (argv[0][0] != '/')
  50.    {
  51.    strcpy(filename_in, cur_dir);
  52.    if (filename_in[strlen(filename_in)-1] != '/')
  53.         strcat(filename_in, "/"); // add slash
  54.    strcat(filename_in, argv[0]);
  55.    }
  56.    else
  57.    {
  58.    strcpy(filename_in, argv[0]);
  59.    }
  60.  
  61. if (argv[1][0] != '/')
  62.    {
  63.    strcpy(filename_out, cur_dir);
  64.    if (filename_out[strlen(filename_out)-1] != '/')
  65.         strcat(filename_out, "/"); // add slash
  66.    strcat(filename_out, argv[1]);
  67.    }
  68.    else
  69.    {
  70.    strcpy(filename_out, argv[1]);
  71.    }
  72.  
  73.  
  74. k70_in.p00 = 5;
  75. k70_in.p04 = k70_in.p08 = k70_in.p12 = 0;
  76. k70_in.p16 = (unsigned) &bdvk;
  77. k70_in.p20 = 0;
  78. k70_in.p21 = filename_in;
  79.  
  80. result = kol_file_70(&k70_in); // ¯®«ãç ¥¬ ¨­ä®à¬ æ¨î ® ä ©«¥
  81. if ( 0 != result )
  82.        {
  83.        print_error();
  84.  
  85.        parameters_free(argc, argv);
  86.        free(filename_in);
  87.        free(filename_out);
  88.        return FALSE;
  89.        }
  90.  
  91. filesize = bdvk.p32[0]; // ¯®«ãç ¥¬ à §¬¥à ä ©«   (®£à ­¨ç¥­¨¥ - 4 ƒ¡ ©â )
  92. n = filesize / 4096;
  93.  
  94. buffer = (char*) malloc(4096);
  95.  
  96. k70_in.p00 = 0;
  97. k70_in.p08 = 0;
  98. k70_in.p12 = 4096;
  99. k70_in.p16 = (unsigned) buffer;
  100. k70_in.p20 = 0;
  101. k70_in.p21 = filename_in;
  102.  
  103. k70_out.p00 = 2;
  104. k70_out.p08 = 0;
  105. k70_out.p12 = 4096;
  106. k70_out.p16 = (unsigned) buffer;
  107. k70_out.p20 = 0;
  108. k70_out.p21 = filename_out;
  109.  
  110. i = 0; // ¤«ï ⮣®, çâ®¡ë ª®¯¨à®¢ âì ä ©«ë á à §¬¥à®¬ ¬¥­ìè¥ 4 ª ©â
  111. for ( i = 0; i < n; i++)
  112.     {
  113.  
  114.     k70_in.p04 = i*4096;
  115.     result = kol_file_70(&k70_in); // ç⥭¨¥
  116.     if (result != 0)
  117.        {
  118.        print_error();
  119.  
  120.        parameters_free(argc, argv);
  121.        free(filename_in);
  122.        free(filename_out);
  123.        free(buffer);
  124.        return FALSE;
  125.        }
  126.  
  127.     k70_out.p04 = i*4096;
  128.     result = kol_file_70(&k70_out); // § ¯¨áì
  129.     if (result != 0)
  130.        {
  131.        print_error();
  132.  
  133.        parameters_free(argc, argv);
  134.        free(filename_in);
  135.        free(filename_out);
  136.        free(buffer);
  137.        return FALSE;
  138.        }
  139.  
  140.     if (i == 0)
  141.        k70_out.p00 = 3; // ¬¥­ï¥¬ äã­ªæ¨î á ᮧ¤ ­¨ï (2) ­  ¤®§ ¯¨áì (3)
  142.  
  143.     }
  144.  
  145. if ( (filesize%4096) != 0 ) // ¥á«¨ à §¬¥à ä ©«  ­¥ ªà â¥­ 4 ª ©â ¬
  146.    {
  147.  
  148.    k70_in.p12  = filesize%4096;
  149.    k70_out.p12 = filesize%4096;
  150.  
  151.    k70_in.p04 = i*4096; // ¢ i ¤®«¦­® ¡ëâì ¯à ¢¨«ì­®¥ ᬥ饭¨¥
  152.    result = kol_file_70(&k70_in); // ç⥭¨¥
  153.    if (result != 0)
  154.        {
  155.        print_error();
  156.  
  157.        parameters_free(argc, argv);
  158.        free(filename_in);
  159.        free(filename_out);
  160.        free(buffer);
  161.        return FALSE;
  162.        }
  163.  
  164.     k70_out.p04 = i*4096;
  165.     result = kol_file_70(&k70_out); // § ¯¨áì
  166.     if (result != 0)
  167.        {
  168.        print_error();
  169.  
  170.        parameters_free(argc, argv);
  171.        free(filename_in);
  172.        free(filename_out);
  173.        free(buffer);
  174.        return FALSE;
  175.        }
  176.  
  177.    }
  178.  
  179.  
  180.  
  181. parameters_free(argc, argv);
  182. free(filename_in);
  183. free(filename_out);
  184. free(buffer);
  185.  
  186.  
  187. return TRUE;
  188. }
  189.  
  190.