Subversion Repositories Kolibri OS

Rev

Rev 976 | Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. //Áûñòðàÿ ñîðòèðîâêà. Leency 2008. GPL license.
  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; dword offset=buf+72;  byte filename1[256], filename2[256]; int n;
  29.         IF (a >= b) return;
  30.         for (j = a; j <= b; j++)
  31.         {
  32.             //
  33.                 copystr(file_mas[j]*304 + offset, #filename1);
  34.                 copystr(file_mas[b]*304 + offset, #filename2);
  35.                 n=strlen(#filename1)-1;
  36.                 WHILE (filename1[n]<>'.') && (n>0) n--;
  37.                 IF (n) copystr(#filename1+n+1, #filename1);
  38.                 n=strlen(#filename2)-1;
  39.                 WHILE (filename2[n]<>'.') && (n>0) n--;
  40.                 IF (n) copystr(#filename2+n+1, #filename2);
  41.                 //
  42.                 n=strcmp(#filename1, #filename2);
  43.                 IF (n<0) { file_mas[i] >< file_mas[j];   i++;}
  44.                 IF (n==0) && (strcmp(file_mas[j]*304 + offset, file_mas[b]*304 + offset)<=0) { file_mas[i] >< file_mas[j];   i++;}
  45.         }
  46.         Sort_by_Type(a, i-2);
  47.         Sort_by_Type(i, b);
  48. }
  49.  
  50.  
  51.  
  52.