int dxExporter::ffp_words( DX_WORD *vals, int num ) { DX_WORD data[1]; int i; for (i = 0; i < num; i++) { data[0] = vals[i]; BSWAP_W(data[0]); if (fwrite( data, sizeof(DX_WORD), 1, _fp ) != 1) { return 0; } } return num; }
static int ReadSURF(LWSurface *lwsur, surfAttr *surf) { unsigned char *p,r,g,b,*databuf; short *size,*t,s; int len,max; char *st; max = lwsur->size; databuf = lwsur->data; surf->su_tx.xTextureCenter = 0.0f; surf->su_tx.yTextureCenter = 0.0f; surf->su_tx.zTextureCenter = 0.0f; surf->su_tx.xTextureSize = 1.0f; surf->su_tx.yTextureSize = 1.0f; surf->su_tx.zTextureSize = 1.0f; surf->su_tx.textureAxis = TA_Z; surf->su_tx.textureType = TT_CUBIC; surf->su_tx.textureFlags = 0; surf->su_tx.wTiles = 1.0f; surf->su_tx.hTiles = 1.0f; surf->su_red = 0.8f; surf->su_green = 0.8f; surf->su_blue = 0.8f; surf->su_lumi = 0; surf->su_diff = 256; // 256 = 100% surf->su_spec = 0; surf->su_refl = 0; surf->su_tran = 0; surf->su_image = NULL; for(len=0; len<max; databuf +=(6 + s), len+=(6 + s) ) { size=(short *)&(databuf[4]); s=*size; BSWAP_W(s); if( STR_IS_ID(databuf,'C','O','L','R') ) //if(!strncmp(data,"COLR",4)) { p=&databuf[6]; // Skip COLR, 2-byte size r=*p++; surf->su_red=r; surf->su_red /= 255; g=*p++; surf->su_green=g; surf->su_green /= 255; b=*p++; surf->su_blue=b; surf->su_blue /= 255; } else if( STR_IS_ID(databuf,'F','L','A','G') ) // if(!strncmp(data,"FLAG",4)) { t=(short *)&(databuf[6]); surf->su_flags = (short)*t; BSWAP_W(surf->su_flags); } else if( STR_IS_ID(databuf,'S','M','A','N') ) // if(!strncmp(data,"SMAN",4)) { float f; /*at = (float *)(data+6); f = at[0];*/ f = STR_TO_FLOAT( (&(databuf[6])) ); BSWAP_L(f); surf->su_tx.smAngle = f; } else if( STR_IS_ID(databuf,'T','R','A','N') ) // if(!strncmp(data,"TRAN",4)) { t=(short *)(databuf+6); surf->su_tran = *t; BSWAP_W(surf->su_tran); } else if( STR_IS_ID(databuf,'L','U','M','I') ) // if(!strncmp(data,"LUMI",4)) { t=(short *)(databuf+6); surf->su_lumi = *t; BSWAP_W(surf->su_lumi); } else if( STR_IS_ID(databuf,'S','P','E','C') ) // if(!strncmp(data,"SPEC",4)) { t=(short *)(databuf+6); surf->su_spec = *t; BSWAP_W(surf->su_spec); } else if( STR_IS_ID(databuf,'D','I','F','F') ) // if(!strncmp(data,"DIFF",4)) { t=(short *)(databuf+6); surf->su_diff = *t; BSWAP_W(surf->su_diff); } else if( STR_IS_ID(databuf,'C','T','E','X') ) // if(!strncmp(data,"CTEX",4)) { st=(char *)databuf+6; surf->su_tx.textureType = TT_PLANAR; if( STR_IS_ID(st,'P','l','a','n') ) // if(!strncmp(st,"Plan",4)) { surf->su_tx.textureType = TT_PLANAR; } else if( STR_IS_ID(st,'C','y','l','i') ) // if(!strncmp(st,"Cyli",4)) { surf->su_tx.textureType = TT_CYLINDRICAL; } else if( STR_IS_ID(st,'S','p','h','e') ) // if(!strncmp(st,"Sphe",4)) { surf->su_tx.textureType = TT_SPHERICAL; } else if( STR_IS_ID(st,'C','u','b','i') ) // if(!strncmp(st,"Cubi",4)) { surf->su_tx.textureType = TT_CUBIC; } } else if( STR_IS_ID(databuf,'T','I','M','G') ) // if(chnk=='TIMG') //if(!strncmp(databuf,"TIMG",4)) { surf->su_image = (char *)(databuf+6); } else if( STR_IS_ID(databuf,'T','F','P','0') ) // if(chnk=='TFP0') //if(!strncmp(databuf,"TFP0",4)) // width tiling.. for spher,cyl { float f; //at = (float *)(databuf+6); //f = at[0]; f = STR_TO_FLOAT( (&(databuf[6])) ); BSWAP_L(f); surf->su_tx.wTiles = f; } else if( STR_IS_ID(databuf,'T','F','P','1') ) // if(chnk=='TFP1') //if(!strncmp(databuf,"TFP1",4)) // height tiling.. for spher { float f; //at = (float *)(databuf+6); //f = at[0]; f = STR_TO_FLOAT( (&(databuf[6])) ); BSWAP_L(f); surf->su_tx.hTiles = f; } else if( STR_IS_ID(databuf,'T','W','R','P') ) // if(!strncmp(data,"TWRP",4)) { unsigned short *f; f=(unsigned short *)(databuf+6); if(*f!=0) surf->su_tx.textureFlags |= TXF_UDECAL; f++; if(*f!=0) surf->su_tx.textureFlags |= TXF_VDECAL; } else if( STR_IS_ID(databuf,'T','C','T','R') ) // if(!strncmp(data,"TCTR",4)) { float *at,f; at = (float *)(databuf+6); f = STR_TO_FLOAT( (&(databuf[6])) ); //f = at[0]; BSWAP_L(f); surf->su_tx.xTextureCenter = f; f = STR_TO_FLOAT( (&(databuf[10])) ); //f = at[1]; BSWAP_L(f); surf->su_tx.yTextureCenter = f; f = STR_TO_FLOAT( (&(databuf[14])) ); //f = at[2]; BSWAP_L(f); surf->su_tx.zTextureCenter = f; } else if( STR_IS_ID(databuf,'T','S','I','Z') ) // if(chnk=='TSIZ') //if(!strncmp(databuf,"TSIZ",4)) { float *at,f; at = (float *)(databuf+6); f = STR_TO_FLOAT( (&(databuf[6])) ); //f = at[0]; BSWAP_L(f); surf->su_tx.xTextureSize = f; f = STR_TO_FLOAT( (&(databuf[10])) ); //f = at[1]; BSWAP_L(f); surf->su_tx.yTextureSize = f; f = STR_TO_FLOAT( (&(databuf[14])) ); //f = at[2]; BSWAP_L(f); surf->su_tx.zTextureSize = f; } else if( STR_IS_ID(databuf,'T','F','L','G') ) // if(chnk=='TFLG') //if(!strncmp(databuf,"TFLG",4)) { unsigned short f; t=(short *)(databuf+6); f= *t; BSWAP_W(f); surf->su_tx.textureFlags |= f; if(f&TXF_AXIS_X) surf->su_tx.textureAxis = TA_X; else if(f&TXF_AXIS_Y) surf->su_tx.textureAxis = TA_Y; else // if(*t&TXF_AXIS_Z) surf->su_tx.textureAxis = TA_Z; // BSWAP_W(surf->su_tx.textureFlags); } } return(len); }
static int GetPolygon(LWOBInfo *object, LWPolygon *poly) { unsigned short pntcnt; unsigned short pointval; unsigned short junk; unsigned short detail; short surface; int k,x; fsetpos(object->fp,&object->polPosCur); if (object->polSizeCur<object->polSize){ fread(&pntcnt,2,1,object->fp); BSWAP_W(pntcnt) ; object->polSizeCur = object->polSizeCur + 2; poly->npoints = pntcnt; for(x=0;x<pntcnt;x++){ fread(&pointval,2,1,object->fp); BSWAP_W(pointval); object->polSizeCur = object->polSizeCur + 2; poly->plist[x]=pointval; } fread(&surface,2,1,object->fp); BSWAP_W(surface); object->polSizeCur = object->polSizeCur + 2; if (surface<0) { fread(&detail,2,1,object->fp); BSWAP_W(detail); object->polSizeCur = object->polSizeCur + 2; for(k=0;k<detail;k++) { fread(&junk,2,1,object->fp); BSWAP_W(junk); fseek(object->fp,(junk+1)*2,SEEK_CUR); object->polSizeCur = object->polSizeCur + ((junk+2)*2); } poly->surface = abs(surface); } else poly->surface=surface; fgetpos(object->fp,&object->polPosCur); } else return(0); return(1); }