164 lines
3.9 KiB
C
164 lines
3.9 KiB
C
/*
|
|
BASIC_IO Sept 2001
|
|
-------- ---------
|
|
|
|
Ce module a ete ecrit pour tenter de regler les
|
|
problemes de "boutisme" pour que c,a puisse aussi
|
|
tourner sur les vrais processeurs, parce que, bon,
|
|
les 386, parfois, on s'en gave, hein...
|
|
|
|
Ceci dit, je ne sais pas vraiment comment traiter
|
|
le probleme. Pour le moment (Septembre 2001) c'est
|
|
un peu beaucoup du "try and test".
|
|
|
|
D'autre part, comment les choses vont se passer sur
|
|
des CPUs a 64 (ou 128) bits ?
|
|
-------------------------------------------------
|
|
|
|
9 oct 2001: pourquoi pas de fonction pour ecrire des BYTEs ?
|
|
|
|
*/
|
|
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include "../tthimage.h"
|
|
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_teste_boutisme(char *txt)
|
|
{
|
|
char *unix = "Unix";
|
|
long lfoo;
|
|
|
|
fprintf(stderr, "Image:\ttests de 'boutisme'\n\tmerci linux-31@culte.org\n");
|
|
fprintf(stderr, "\t- %s -\n", txt);
|
|
|
|
lfoo = * (long *) unix;
|
|
fprintf(stderr, "\t%08lx\n", lfoo);
|
|
|
|
/* ah ah ah, mais il y a autre chose dans le source 'imprime.c'
|
|
* a propos du boutisme... */
|
|
|
|
return FUNC_NOT_FINISH;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_read_I_short(FILE *fp, uint16_t *pvalue)
|
|
{
|
|
unsigned char byteH, byteL;
|
|
int foo = 0;
|
|
|
|
foo += fread(&byteL, 1, 1, fp);
|
|
foo += fread(&byteH, 1, 1, fp);
|
|
|
|
*pvalue = ( (byteH<<8) + byteL );
|
|
|
|
return foo==2 ? OLL_KORRECT : BASIC_IO_RD_ERR;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_read_M_short(FILE *fp, uint16_t *pvalue)
|
|
{
|
|
unsigned char byteH, byteL;
|
|
int foo = 0;
|
|
|
|
foo += fread(&byteH, 1, 1, fp);
|
|
foo += fread(&byteL, 1, 1, fp);
|
|
|
|
*pvalue = ( (byteH<<8) + byteL );
|
|
|
|
return foo==2 ? OLL_KORRECT : BASIC_IO_RD_ERR;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_write_I_short(FILE *fp, short value)
|
|
{
|
|
unsigned char byte;
|
|
int foo = 0;
|
|
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: write I short: %d\n", value);
|
|
#endif
|
|
|
|
byte = (unsigned short)value & 0xff;
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: low byte = %02x\n", byte);
|
|
#endif
|
|
foo += fwrite(&byte, 1, 1, fp);
|
|
|
|
byte = ((unsigned short)value >> 8) & 0xff;
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: hight byte = %02x\n", byte);
|
|
#endif
|
|
foo += fwrite(&byte, 1, 1, fp);
|
|
|
|
return foo==2 ? OLL_KORRECT : BASIC_IO_WR_ERR;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_write_M_short(FILE *fp, short value)
|
|
{
|
|
unsigned char byte;
|
|
int foo = 0;
|
|
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: write M short: %d\n", value);
|
|
#endif
|
|
|
|
byte = ((unsigned short)value >> 8) & 0xff;
|
|
foo += fwrite(&byte, 1, 1, fp);
|
|
|
|
byte = (unsigned short)value & 0xff;
|
|
foo += fwrite(&byte, 1, 1, fp);
|
|
|
|
return foo==2 ? OLL_KORRECT : BASIC_IO_WR_ERR;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_read_I_long(FILE *fp, uint32_t *pvalue)
|
|
{
|
|
unsigned char byte;
|
|
int foo;
|
|
uint32_t value;
|
|
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: read I long (a tester) !\n");
|
|
#endif
|
|
|
|
value = 0L;
|
|
for (foo=0; foo<4; foo++)
|
|
{
|
|
if (1 != fread(&byte, 1, 1, fp))
|
|
{
|
|
fprintf(stderr, "bad fread in %s\n", __func__);
|
|
abort();
|
|
}
|
|
value <<= 8;
|
|
value += byte;
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, " %d %02x %08lx %ld\n", foo, byte, value, value);
|
|
#endif
|
|
}
|
|
|
|
*pvalue = value;
|
|
|
|
return FUNC_IS_BETA; /* XXX ? */
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|
|
int Image_basicIO_write_I_long(FILE *fp, long value)
|
|
{
|
|
unsigned char byte;
|
|
int foo, bar;
|
|
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, "Basic IO: write I long: %ld\n", value);
|
|
#endif
|
|
|
|
for (foo=0; foo<4; foo++)
|
|
{
|
|
bar = foo * 8;
|
|
byte = (value >> bar) & 0xff;
|
|
#if DEBUG_LEVEL > 2
|
|
fprintf(stderr, " %3d %3d %02x\n", foo, bar, byte);
|
|
#endif
|
|
fwrite(&byte, 1, 1, fp);
|
|
}
|
|
|
|
return OLL_KORRECT;
|
|
}
|
|
/*::------------------------------------------------------------------::*/
|