Пример #1
0
/***************************************************************************
 * 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);
}
Пример #2
0
/***************************************************************************
 * 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);
}
Пример #3
0
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);
    }
}