#include #include #include "fxlib.h" #include "explorer.h" Fichier* pressPapier = 0; Copie typeCopie; Trie trie = EXT; Action act; int p, p2; void int2str(char *c, int n) { int i = 0, l = 0; if(n==0) { c[0] = '0'; c[1] = 0; } else { for(i=n ; i ; i/=10) l++; c[l] = 0; for(i=n ; i ; i/=10) c[--l] = i%10+'0'; } } int nbFichiers(char* dossier) { FONTCHARACTER memory[NB_CHAR_ADRESSE] = {0}, nomTrouve[13] = {0}; FILE_INFO fileInfo; int handle, nombreDeFichiers = 1, i; for(i=0 ; dossier[i] ; i++) memory[i] = dossier[i]; memory[i] = '*'; if(Bfile_FindFirst(memory, &handle, nomTrouve, &fileInfo) == 0) { while(Bfile_FindNext(handle, nomTrouve, &fileInfo) == 0) nombreDeFichiers++; Bfile_FindClose(handle); } else return 0; return nombreDeFichiers; } Fichier* listerFichiers(char* dossier, Fichier* fichier) { FONTCHARACTER memory[NB_CHAR_ADRESSE] = {0}, nomTrouve[13] = {0}; FILE_INFO fileInfo; // Fichier* fichier; int nb, handle, i, j, l; for(i=0 ; dossier[i] ; i++) memory[i] = dossier[i]; memory[i] = '*'; nb = nbFichiers(dossier); if(nb) { // fichier = malloc((nb+1)*sizeof(Fichier)); // if(!fichier) return 0; j = 0; Bfile_FindFirst(memory, &handle, nomTrouve, &fileInfo); do { for(l=0 ; dossier[l] ; l++) fichier[j].adresse[l] = dossier[l]; for(i=0 ; nomTrouve[i] ; i++) { fichier[j].nom[i] = nomTrouve[i]; fichier[j].adresse[l+i] = nomTrouve[i]; } fichier[j].nom[i] = 0; fichier[j].adresse[l+i] = 0; fichier[j].taille = fileInfo.dsize; fichier[j].type = fileInfo.type; j++; }while(Bfile_FindNext(handle, nomTrouve, &fileInfo) == 0); Bfile_FindClose(handle); fichier[j].nom[0] = 0; } else { // fichier = malloc(sizeof(Fichier)); fichier[0].nom[0] = 0; } return fichier; } char tolower(char a) { if(a>='A' && a<='Z') return a-'A'+'a'; return a; } char* extention(char* c) { int i; for(i=strlen(c) ; i && c[i-1]!='.' ; i--); if(i) return c+i; else return c+strlen(c); } void tolowerExtention(char* ch) { char *c; for(c=extention(ch) ; *c ; c++) *c = tolower(*c); } int sup(char* c1, char* c2) { int i; for(i=0 ; c1[i] && c1[i]!='.' ; i++) { if(tolower(c1[i])tolower(c2[i])) return 1; } return 0; } void trier(Fichier* fichier, Trie type) { Fichier tmp; int i, j, n; n = nbElement(fichier); switch(type) { case NOM: for(i=0 ; i0) i-=2; } } break; case EXT: trier(fichier, NOM); for(i=0 ; i0) i-=2; } } break; } } int nbElement(Fichier* fichier) { int i; for(i=0 ; fichier[i].nom[0] ; i++); return i; } int affiche(Fichier* fichier, char* dossier, char* selected) { unsigned int key; int i, n; char c[10], select[3] = {0xE6, 0x9B}, adresse[NB_CHAR_ADRESSE]={0}; if(dossier[2]=='f') strcpy(adresse, "STO:\\"); else strcpy(adresse, "SD:\\"); strcat(adresse, dossier+7); n = nbElement(fichier); if(act==EXE || act==EXIT) p=p2=0; if(p+p2>=n) p=p2=0; act = NUL; while(act == NUL) { Bdisp_AllClr_VRAM(); locate(1, 1); if(strlen(adresse)>21) PrintRev(adresse + strlen(adresse)-21); else PrintRev(adresse); if(n) { for(i=0 ; i<6 && i+p6) { listerFichiers(dossier,fichier); trier(fichier, trie); n = nbElement(fichier); // selected = malloc(n); for(i=0 ; i0) { p++; if(p>n) p=0; } if(r<0) { p--; if(p<0) p=n-1; } while(!IsKeyUp(KEY_CTRL_EXIT) || !IsKeyUp(KEY_CHAR_LPAR) || !IsKeyUp(KEY_CHAR_RPAR)); } } break; case EXIT: for(i=strlen(dossier)-2 ; dossier[i]!='\\' ; i--) dossier[i] = 0; break; case NAME: trie=NOM; break; case TYPE: trie=EXT; break; case NONE: trie=NON; break; } // free(selected); // free(fichier); } }