Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //Áûñòðàÿ ñîðòèðîâêà. Leency 2008.
  2.  
  3. void Sort_by_Size(int a, b)   // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
  4. {                                        
  5.         int i = a;
  6.         IF (a >= b) return;
  7.         FOR (j = a; j <= b; j++)
  8.                 IF (ESDWORD[file_mas[j]*304 + buf+64] <= ESDWORD[file_mas[b]*304 + buf+64])
  9.                 { file_mas[i] >< file_mas[j];   i++;}
  10.         Sort_by_Size (a, i-2);
  11.         Sort_by_Size (i, b);
  12. }
  13.  
  14.  
  15. void Sort_by_Name(int a, b)   // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
  16. {                                        
  17.         int i = a;
  18.         IF (a >= b) return;
  19.         FOR (j = a; j <= b; j++)
  20.                 IF (strcmp(file_mas[j]*304 + buf+72, file_mas[b]*304 + buf+72)<=0) { file_mas[i] >< file_mas[j];   i++;}
  21.         Sort_by_Name(a, i-2);
  22.         Sort_by_Name(i, b);
  23. }
  24.  
  25.  
  26. void Sort_by_Type(int a, b)   // äëÿ ïåðâîãî âûçîâà: a = 0, b = <ýëåìåíòîâ â ìàññèâå> - 1
  27. {                                        
  28.         int i=a;
  29.         int n;
  30.         dword offset=buf+72;
  31.         byte filename1[256], filename2[256];
  32.        
  33.         IF (a >= b) return;
  34.         for (j = a; j <= b; j++)
  35.         {
  36.             //
  37.                 copystr(file_mas[j]*304 + offset, #filename1);
  38.                 copystr(file_mas[b]*304 + offset, #filename2);
  39.                 n=strlen(#filename1)-1;
  40.                 WHILE (filename1[n]<>'.') && (n>0) n--;
  41.                 IF (n) copystr(#filename1+n+1, #filename1);
  42.                 n=strlen(#filename2)-1;
  43.                 WHILE (filename2[n]<>'.') && (n>0) n--;
  44.                 IF (n) copystr(#filename2+n+1, #filename2);
  45.                 //
  46.                 n=strcmp(#filename1, #filename2);
  47.                 IF (n<0) { file_mas[i] >< file_mas[j];   i++;}
  48.                 IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j];   i++;}
  49.         }
  50.         Sort_by_Type(a, i-2);
  51.         Sort_by_Type(i, b);
  52. }
  53.  
  54.  
  55.  
  56.