www.pudn.com > sfalic-03-src.rar.rar > bigendian.h


#ifndef __BIGENDIAN_H 
#define __BIGENDIAN_H 
 
/* funkcje zalezne od Endianness maszyny; sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */ 
 
/* funkcje pomocnicze do operacji na liczbach Big Endian do 32b */ 
/* funkcje operujace na plikach BEread.../BEwrite... potencjalnie wolne */ 
/* funkcje operujace wierszach pikseli sprawdzaja endianness maszyny, szybkie */ 
 
/* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */ 
/* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian  */ 
/* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */ 
 
#include "cdftypes.h" 
#include  
 
 
/* sprawdzenie ustawien kompilacji i poprawnosci zalozen implementacyjnych */ 
/* dotyczy calego kompresora, nie tylko tego modulu */ 
/* zwraca 0-ok, >=1 blad */ 
int CheckAssumptions(); 
 
/* makro BE_MACHINE mozna (nie musi sie) zdefiniowac na komputerach BigEndian */ 
/* makra BE_MACHINE _nie wolno_ definiowac na maszynach LittleEndian, sprawdzane przez assert w BEmachine() */ 
 
/* #define BE_MACHINE /**/ 
 
/* zapisz pod adres adr slowo towrite w kolejnosci BigEndian */ 
/* adr moze byc dowolnym wyrazeniem typu wskaznikowego */ 
/* towrite powinno byc 32-bitowa zmienna lub stala */ 
/* makro BE_STORE_WORD warunkowe od makra BE_MACHINE, po jego zdefiniowaniu bedzie szybsze */ 
#ifdef BE_MACHINE 
 
#define BE_STORE_WORD(adr, towrite)				\ 
			*(unsigned int *)(adr)=(towrite) 
 
#define BE_LOAD_WORD(adr, toread)				\ 
			(toread)=*(unsigned int *)(adr) 
 
#else 
 
#define BE_STORE_WORD(adr, towrite)				\ 
			{									\ 
				BYTE * const bp=(BYTE *)(adr);	\ 
				bp[0]=(BYTE)((towrite)>>24);	\ 
				bp[1]=(BYTE)((towrite)>>16);	\ 
				bp[2]=(BYTE)((towrite)>>8);		\ 
				bp[3]=(BYTE)(towrite);			\ 
			} 
 
#define BE_LOAD_WORD(adr, toread)						\ 
			{											\ 
				const BYTE * const bp=(BYTE *)(adr);	\ 
				(toread)= (((unsigned int)bp[0])<<24)	\ 
						| (((unsigned int)bp[1])<<16)	\ 
						| (((unsigned int)bp[2])<<8)	\ 
						|  ((unsigned int)bp[3]);		\ 
			} 
 
#endif 
 
/* zwroc endianness maszyny 1-BigEndian, 0-Little */ 
int BEmachine(); 
 
/* endian-aware*/ 
/* zamienia wczytane z pliku piksele BigEndian rawBYTESpp Bajtow/piksel (1 lub 2), */ 
/* na ActualEndian sizeof(PIXEL) Bajtow/piksel */ 
/* width- liczba pikseli */ 
void BErawrowtopixelrow(const BYTE * const filerow, PIXEL * const currow, const int width, const int rawBYTESpp); 
 
/* operacja odwrotna do BErawrowtopixelrow*/ 
void BEpixelrowtorawrow(BYTE * const filerow, const PIXEL * const currow, const int width, const int rawBYTESpp); 
 
/* zapisz do pliku liczbe 16-bitowa w formacie BigEndian*/ 
/* zwroc EOF jak blad */ 
int BEwrite2Bytes(int val, FILE *f); 
 
/* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/ 
int BEread2Bytes(FILE *f); 
 
/* zapisz do pliku liczbe 32-bitowa w formacie BigEndian*/ 
/* zwroc EOF jak blad */ 
int BEwrite4Bytes(int val, FILE *f); 
 
/* odczytaj z pliku liczbe 16-bitowa w formacie BigEndian*/ 
int BEread4Bytes(FILE *f); 
 
 
#endif