/* File : GP4.C Description: Group 4 -> RLF Converter Author : Peter H. Michalicka Environment: HP-UX 8.05 */ #include #include #include #ifndef WIN32 #include #endif #include "tiff.h" #include "vma.h" extern WorkFile t; extern int max_strip; extern int is_start; extern char *msg_fread; extern char *msg_malloc; extern IMAGE im; extern BYTE cb; extern BYTE *iob; extern int nstrip; extern long *SOffs; extern long *SBCs; /* external functions */ #ifdef ANSI int error(char *s1, char *s2); int fatal(char *s1, char *s2); int open_ibuf(char *fnam); int fillbuf(void); void getbuf(int size, BYTE *ptr); /* rlc.c */ void rlc_init(vma *v); void dcgr4(vma *v); #endif /* Code */ static int hash(s) char *s; { register char *p = s; register int i = *p; while (*++p) i += *p; return i; } /* Analyse Modul */ static int analyse_header() { int n1, n2; int i, idx, ret = 0; char entry[10], value[120]; char *p; im.Compression = 0; /* not supported */ im.Orientation = 270; im.XResolution = im.YResolution = 200; for (i = 0; i < 2048;) { if (t.ibuf[i] != ' ') { sscanf((char *)&t.ibuf[i], "%s %s", entry, value); idx = hash(entry); #ifdef DEBUG printf("entry: %s (%d)...... value: %s = ", entry, idx, value); #endif switch (idx) { case 622: /* rtype: */ if (sscanf(value, "%d", &n1) == 1) ret++; im.Compression = n1; #ifdef DEBUG printf("%d\n", im.Compression); #endif break; case 818: /* rpelcnt: */ if (sscanf(value, "%d,%d", &n1, &n2) == 2) ret++; im.ImageWidth = n1; im.ImageLength = n2; #ifdef DEBUG printf("%d,%d\n", im.ImageWidth, im.ImageLength); #endif break; case 829: /* rorient: */ sscanf(value, "%d,%d", &idx, &n1); im.Orientation = n1; #ifdef DEBUG printf("%d\n", im.Orientation); #endif break; case 835: /* rdensty: */ sscanf(value, "%d", &n1); im.XResolution = im.YResolution = n1; #ifdef DEBUG printf("%d\n", im.Resolution); #endif break; #ifdef DEBUG default: printf("\n"); #endif } } i += 128; } return ret; } int gp4_hdr(fnam, v) char *fnam; vma *v; { if (! open_ibuf(fnam)) return FALSE; if (fread(t.ibuf, 2048, 1, t.fpi) != 1) /* sizeof(Gr4_HDR) must be 2048 */ return error("No file header in <%s>", fnam); if (analyse_header() != 2) return error("Group 4 file must have Width,Length", NULL); fseek(t.fpi, 0L, SEEK_END); max_strip = ftell(t.fpi) - 2048; SBCs = (long *)malloc(sizeof(long)); SOffs = (long *)malloc(sizeof(long)); if (SBCs == NULL || SOffs == NULL) return error(msg_malloc, NULL); *SOffs = 2048L; *SBCs = max_strip; max_strip += 3; v->ImageLength = im.ImageLength; v->ImageWidth = im.ImageWidth; im.RowsPerStrip = im.ImageLength; /* fillstrip() */ im.Compression = 4; return TRUE; }