bidoo Le 11/06/2004 à 08:25Edité par bidoo le 11/06/2004 à 11:33 il fo faire comme ceci :
#include <tigcclib.h>
short testtype(char *nom,short type)
{
void *plastbyte=HeapDeref(SymFindPtr(SYMSTR (nom),0)->handle)+((MULTI_EXPR*)HeapDeref(SymFindPtr(SYMSTR (nom),0)->handle))->Size+1;
if(peek(plastbyte)==type){return 1;}
return 0;
}
short testtyperep(char *rep,short type,char *retour)
{
short i=0,k=0;
char nom[100][20];
short j = 0;
SYM_ENTRY *SymPtr = SymFindFirst (SYMSTR (rep), FO_SINGLE_FOLDER);
while (SymPtr)
{
strcpy(nom[j],rep);
strcat(nom[j],"\");
strcat (nom[j++], SymPtr->name);
SymPtr = SymFindNext ();
}
for(i=0;i<j;i++)
{
if(testtype(nom[i],type)==1)strcpy(&retour[20*k++],nom[i]);
}
return k;
}
void getdoss(char *dossier)
{
short i=0;
SYM_ENTRY *psym = SymFindFirst(NULL, 4);
while (psym!= NULL && i<20 )
{
sprintf(&dossier[9*i++],psym->name);
psym = SymFindNext();
}
}
char* testalldoss(short type)
{
short i,j,k,cpteur=0;
char *dossier=calloc(20*9,sizeof(char));
getdoss(dossier);
char *nom2=calloc(50*20,sizeof(char));
char nom[50][20];for(i=0;i<50;i++)strcpy(nom[i],"");
i=0;
for(j=0;strcmp(&dossier[j*9],"")!=0;j++)
{
k=testtyperep(&dossier[j*9],type,nom2);
for(i=0;i<k;i++)strcpy(nom[cpteur++],&nom2[20*i]);
}
HANDLE h=PopupNew("files", 50);
for(i=0;strcmp(nom[i],"")!=0;i++)
{
PopupAddText(h, -1, nom[i], i+1);
}
k=PopupDo(h, CENTER, CENTER, 0);
HeapFree(h);
free(dossier);
free(nom2);
if(k==0)return NULL;
char *retour=calloc(strlen(nom[k-1]),sizeof(char));
strcpy(retour,nom[k-1]);
return retour;
}
void showpicture(char *nom)
{
SCR_RECT screen = {{0, 0, 159, 99}};
short size=((MULTI_EXPR*)HeapDeref(SymFindPtr(SYMSTR (nom),0)->handle))->Size;
void *buffer=malloc(size);
FILE *f=fopen(nom,"rb");
fread(buffer,1,size,f);
fclose(f);
clrscr();
BitmapPut (0,0,buffer, &screen,A_NORMAL );
ngetchx();
free(buffer);
/*
//et si tu veux la hauteur et la largeur fais comme ca mais JE SUIS PAS SUR!!! , j'ai pas testé
//tu ferais mieu d'aller voar ds le topic : "ecran virutel 2 " par matthieu
//kevin explique comment y acceder
unsigned short hauteur=(unsigned short)buffer[0];
unsigned short largeur=(unsigned short)buffer[sizeof(unsigned short)];
*/
}
short chtype(void)
{
HANDLE h=PopupNew("quelle type", 80);
char typec[10][40]={"les chaînes de caractère","listes ou matrices","programmes ou fonctions","data","GDB","images","textes","figures","macros","programmes ou librairies en assembleur"};
short types[10]={45,217,220,221,222,223,224,225,226,243 };
short i;
for(i=0;i<10;i++)
{
PopupAddText(h, -1,typec[i], i+1);
}
i=PopupDo(h, CENTER, CENTER, 0);
HeapFree(h);
if(i==0)return 0;
return types[i-1];
}
void _main (void)
{
char *chemin=NULL;
short type=chtype();
if(type==0)return;
chemin=testalldoss(type);
if(type==PIC_TAG && chemin!=NULL)showpicture(chemin);
}
et puis tou le monde peux l'utiliser pour rechercher n'importe quel type de fichier
sur toute sa calculatrice !