try to use these functions, I know I didn't take the time to create a sample :
#define MAX_FILE 128
void load_color_proms(char *name);
void selectPic(unsigned char pic[],unsigned short palette[]);
int LoadFile(char *name, Uint8 *location, Uint32 size);
unsigned char Scene3[307200];
unsigned short Scene3Pal[513];
extern unsigned short file_id, dir_id;
void InitCD()
{
Sint32 dirwork[SLCD_WORK_SIZE(MAX_FILE)];
Sint32 ndir;
ndir = slCdInit(MAX_FILE, dirwork);
}
void ChooseFile(unsigned short prefix)
{
char filename[50];
char filenamePal[50];
char toto[100];
sprintf(filename,"%04d.BIN",prefix);
sprintf(filenamePal,"%04dPAL.BIN",prefix);
sprintf(toto,"Current file : %s ", filename);
slPrint(toto,slLocate(19,6));
if (LoadFile(filename, &Scene3[0x000], 192)==0) //taille /16000
{
load_color_proms(filenamePal);
// slPrint("End Loading picture...", slLocate(2,2));
selectPic(Scene3,Scene3Pal);
}
else
{
file_id--;
}
}
void ChangeDir(unsigned short prefix)
{
Sint32 stat;
char dirname[50];
char toto[100];
if (prefix > 0)
sprintf(dirname,"%04d",prefix);
else
sprintf(dirname,"..");
//
file_id=0;
stat= slCdChgDir(dirname);
if (stat < 2) dir_id--;
//sprintf(toto,"CD %s nb files : %d ", dirname,stat-2);
slSynch();
// slPrint(toto,slLocate(19,5));
}
int LoadFile(char *name, Uint8 *location, Uint32 size)
{
// Sint32 dirwork[SLCD_WORK_SIZE(MAX_FILE)];
// Sint32 ndir;
CDHN cdhn;
CDKEY key[2];
CDBUF buf[2];
Sint32 stat;
Sint32 len[2];
Sint32 CDerr;
char toto[100];
// ndir = slCdInit(MAX_FILE, dirwork);
// stat= slCdChgDir("0001");
key[0].cn = key[0].sm = key[0].ci = CDKEY_NONE;
key[1].cn = CDKEY_TERM;
cdhn = slCdOpen(name, key);
if (cdhn!=NULL)
{
buf[0].type = CDBUF_COPY;
buf[0].trans.copy.addr = location;
buf[0].trans.copy.unit = CDBUF_FORM1;
buf[0].trans.copy.size = size;
buf[1].type = CDBUF_TERM;
slCdLoadFile(cdhn, buf);
while (1)
{
slSynch();
stat = slCdGetStatus(cdhn, len);
// if (stat == CDSTAT_DOING) slPrint("Read in progress ", slLocate(2,2));
// if (stat == CDSTAT_WAIT) slPrint("CD waiting ", slLocate(2,2));
// if (stat == CDSTAT_PAUSE) slPrint("CD pause ", slLocate(2,2));
// sprintf(toto,"toto %06d",stat);
// slPrint(toto,slLocate(10,3));
// sprintf(toto,"CDERR_NEXIST %06d len[0] %d len[1] %d len[2] %d ",CDERR_NEXIST,len[0], len[1], len[2]);
//
// slPrint(toto,slLocate(10,5));
// sprintf(toto,"CDSTAT_DOING %06d",CDSTAT_DOING);
// slPrint(toto,slLocate(10,6));
if (stat == CDSTAT_COMPLETED || stat == CDSTAT_WAIT || len[2]==0) break;
// if (stat == CDSTAT_COMPLETED) break;
}
return 0;
}
else
{
slSynch();
sprintf(toto,"file not found : %s ",name);
slPrint(toto,slLocate(15,5));
return -1;
}
}
void load_color_proms(char *name)
{
int i;
unsigned char buffer[513];
if (LoadFile(name, &buffer[0x000], 1)==0)
{
for(i=1;i<513;i+=2)
{
Scene3Pal[(i-1)/2] = (buffer>> 0) + (buffer[i-1] << 8);
}
}
}