/*************************************************************************** * Function: get_pck ***************************************************************************/ void get_pck(FILE *fp, WORD *img) { int x = 0, y = 0, i = 0; char c = '0'; char header[BUFSIZ]; if( fp == NULL ) return; rewind (fp); header[0] = '\n'; header[1] = 0; while( c != EOF && ( x == 0 || y == 0) ) { i = x = y = 0; c = (char)i; while((++i < BUFSIZ) && (c != EOF) && (c != '\n') && (x==0) && (y==0)) { if((header[i] = c = (char)getc(fp)) == '\n') sscanf(header, PACKIDENTIFIER, &x, &y); } } unpack_word(fp, x, y, img); }
/*************************************************************************** * Function: get_pck ***************************************************************************/ void get_pck(FILE *fp, INT16 *img) { int x = 0, y = 0, i = 0, c = 0; char header[BUFSIZ]; if ( fp == NULL ) return; rewind ( fp ); header[0] = '\n'; header[1] = 0; while ((c != EOF) && ((x == 0) || (y == 0))) { c = i = x = y = 0; while ((++i < BUFSIZ) && (c != EOF) && (c != '\n') && (x==0) && (y==0)) if ((header[i] = c = getc(fp)) == '\n') sscanf(header, PACKIDENTIFIER, &x, &y); } unpack_word(fp, x, y, img); }
static void dump(FILE *f, HASHTAB t, OBJ ob, int *labct, OBJ *ep) { if (is_structured(ob)){ int sz = _size(_header(ob)), fs = _flags(_header(ob)), i; intptr_t flds; OBJ *data; if (_tstRc(_header(ob),1)) { write_obj(f,mkExclCell(fs,sz),ep); if (*ep) return; } else { HASHENTRY e; /* check if object already dumped */ i = (WORD)ob % HASHSIZE; for (e = t->tab[i]; e; e = e->next) { if (e->obj == ob) { write_obj(f,mkRefToCell(e->label),ep); return; } } /* first time dumping a shared cell */ write_obj(f,mkSharedCell(fs,sz),ep); if (*ep) return; /* create new entry in hashtab and assign label to it, since we might have to visit it again. */ e = newEntry(); e->label = (*labct)++; write_obj(f,mkRefToCell(e->label),ep); if (*ep) return; e->obj = ob; e->next = t->tab[i]; t->tab[i] = e; } /* calculate no of fields */ if (sz % flat_offset_ssize == big_escape_ssize){ flds = unpack_word(((BCELL)ob)->size); write_obj(f,(OBJ)flds,ep); if (*ep) return; data = _bdata(ob); } else { flds = sz % flat_offset_ssize; data = _data(ob); } if (sz >= flat_offset_ssize) { if (fs & (1 << byte_flat_sflag)){ /* write 2 words and rest as char stream */ unsigned char * cdata = (unsigned char*)(data+2); int cflds = (flds-2) * sizeof(OBJ); write_obj(f,data[0],ep); write_obj(f,data[1],ep); for (i = 0; i < cflds && !*ep; i++) { if (putc(cdata[i],f) != cdata[i]){ get_unix_failure(errno,*ep); } } } else { /* write fields as coded longwords */ for (i = 0; i < flds && !*ep; i++) { write_obj(f,data[i],ep); } } } else { /* recursivly dump fields. */ for (i = 0; i < flds && !*ep; i++) { dump(f,t,data[i],labct,ep); } } } else { write_obj(f,ob,ep); } }