Subversion Repositories Kolibri OS

Rev

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

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