/* File : BUF.C Description: Buffered File I/O Author : Peter H. Michalicka Environment: HP-UX 8.05 */ #include #ifndef WIN32 #include #endif #include "tiff.h" extern WorkFile t; extern IMAGE im; extern long *SOffs; extern long *SBCs; extern BYTE *iob; extern int nstrip; extern BYTE TIFFBitRevTable[256]; char *msg_fopen = "Cant open file <%s>"; char *msg_fwrite = "Cant write to file <%s>"; char *msg_fread = "Cant read from file <%s>"; #ifdef ANSI int error(char *s1, char *s2); #endif /* Code */ int open_ibuf(fnam) char *fnam; { t.fnam = fnam; if ((t.fpi = fopen(fnam, "rb")) == NULL) return error(msg_fopen, fnam); return TRUE; } int fillbuf() { if ((t.ilen = fread((char *)t.ibuf, 1, BLKSIZE, t.fpi)) == 0) return error(msg_fread, t.fnam); t.ipos = 0; return TRUE; } int fillstrip() { BYTE *ptr, *maxptr; t.ipos = 0; fseek(t.fpi, SOffs[nstrip], SEEK_SET); if ((t.ilen = fread((char *)iob, 1, SBCs[nstrip], t.fpi)) == 0) return error(msg_fread, t.fnam); ptr = iob; maxptr = ptr + t.ilen; if (im.FillOrder == 2) { do { *ptr = TIFFBitRevTable[*ptr]; } while (++ptr < maxptr); } nstrip++; return TRUE; } void getbuf(size, ptr) int size; /* (I) .. get size Bytes to ptr */ BYTE *ptr; /* (O) .. Buffer Pointer */ { int j = 0; if ((t.ipos+size) >= t.ilen) { while (t.ipos < t.ilen) { *ptr++ = t.ibuf[t.ipos++]; j++; } t.ipos = 0; if ((t.ilen = fread((char *)t.ibuf, 1, BLKSIZE, t.fpi)) == 0) if ((size-j) != 0) error("Invalid End Of File", NULL); while (j < size) { *ptr++ = t.ibuf[t.ipos++]; j++; } } else { while (j < size) { *ptr++ = t.ibuf[t.ipos++]; j++; } } }