void readRect(FILE *f, struct Rect *s) { int nBits; byteAlign(); nBits = readBits(f, 5); s->xMin = readSBits(f, nBits); s->xMax = readSBits(f, nBits); s->yMin = readSBits(f, nBits); s->yMax = readSBits(f, nBits); }
void printCXForm(FILE *f, boolean hasAlpha) { int hasAdd, hasMult, nBits; byteAlign(); hasAdd = readBits(f, 1); hasMult = readBits(f, 1); nBits = readBits(f, 4); if(hasMult) { puts("x("); printf("%i,", readSBits(f, nBits)); printf("%i,", readSBits(f, nBits)); printf("%i)", readSBits(f, nBits)); if(hasAlpha) printf("%i,", readSBits(f, nBits)); } else puts("x()"); if(hasAdd) { puts("+("); printf("%i,", readSBits(f, nBits)); printf("%i,", readSBits(f, nBits)); printf("%i)", readSBits(f, nBits)); if(hasAlpha) printf("%i,", readSBits(f, nBits)); } else puts("+()"); putchar('\n'); }
void printRect(FILE *f) { int nBits, xMin, xMax, yMin, yMax; byteAlign(); nBits = readBits(f, 5); xMin = readSBits(f, nBits); xMax = readSBits(f, nBits); yMin = readSBits(f, nBits); yMax = readSBits(f, nBits); printf("(%i,%i)x(%i,%i)", xMin, xMax, yMin, yMax); }
void printMatrix(FILE *f) { int nBits; float num; byteAlign(); if(readBits(f, 1)) /* has scale */ { nBits = readBits(f, 5); num = (float)readSBits(f, nBits)/0x10000; println("xScale: %f", num); num = (float)readSBits(f, nBits)/0x10000; println("yScale: %f", num); } if(readBits(f, 1)) /* has rotate */ { nBits = readBits(f, 5); num = (float)readSBits(f, nBits)/0x10000; println("rotate0: %f", num); num = (float)readSBits(f, nBits)/0x10000; println("rotate1: %f", num); } nBits = readBits(f, 5); println("x: %i", readSBits(f, nBits)); println("y: %i", readSBits(f, nBits)); }
void readMatrix(FILE *f, struct Matrix *s) { int nBits; byteAlign(); if(readBits(f, 1)) /* has scale */ { nBits = readBits(f, 5); s->xScale = (float)readSBits(f, nBits)/0x10000; s->yScale = (float)readSBits(f, nBits)/0x10000; } else s->xScale = s->yScale = 1.0; if(readBits(f, 1)) /* has rotate */ { nBits = readBits(f, 5); s->rot0 = (float)readSBits(f, nBits)/0x10000; s->rot1 = (float)readSBits(f, nBits)/0x10000; } else s->rot0 = s->rot1 = 0; nBits = readBits(f, 5); s->x = readSBits(f, nBits); s->y = readSBits(f, nBits); }
void readCXForm(FILE *f, struct CXForm *s, boolean hasAlpha) { int hasAdd, hasMult, nBits; byteAlign(); hasAdd = readBits(f, 1); hasMult = readBits(f, 1); nBits = readBits(f, 4); if(hasMult) { s->rMult = readSBits(f, nBits); s->gMult = readSBits(f, nBits); s->bMult = readSBits(f, nBits); if(hasAlpha) s->aMult = readSBits(f, nBits); else s->aMult = 0x100; } else { s->aMult = 0x100; s->rMult = 0x100; s->gMult = 0x100; s->bMult = 0x100; } if(hasAdd) { s->rAdd = readSBits(f, nBits); s->gAdd = readSBits(f, nBits); s->bAdd = readSBits(f, nBits); if(hasAlpha) s->aAdd = readSBits(f, nBits); else s->aAdd = 0; } else { s->aAdd = 0; s->rAdd = 0; s->gAdd = 0; s->bAdd = 0; } }
int printTextRecord(FILE *f, int glyphBits, int advanceBits, int type) { int i, numGlyphs; int flags = readUInt8(f); if(flags == 0) return 0; if(flags & TEXTRECORD_STATECHANGE) { if(flags & TEXTRECORD_HASFONT) println("font id: %i", readUInt16(f)); if(flags & TEXTRECORD_HASCOLOR) { print("color: "); if(type == 2) printRGBA(f); else printRGB(f); putchar('\n'); } if(flags & TEXTRECORD_HASXOFF) println("X Offset: %i", readSInt16(f)); if(flags & TEXTRECORD_HASYOFF) println("Y Offset: %i", readSInt16(f)); if(flags & TEXTRECORD_HASFONT) println("font height: %i", readUInt16(f)); } else { numGlyphs = flags & TEXTRECORD_NUMGLYPHS; for(i=0; i<numGlyphs; ++i) { println("glyph index: %i", readBits(f, glyphBits)); println("glyph x advance: %i", readSBits(f, advanceBits)); } } return 1; }
int printShapeRec(FILE *f, int *lineBits, int *fillBits, int shapeType) { int type; // printf("(%i:%i)",fileOffset,bufbits); type = readBits(f, 1); if(type==0) /* state change */ { int newStyles = readBits(f, 1); int lineStyle = readBits(f, 1); int fillStyle1 = readBits(f, 1); int fillStyle0 = readBits(f, 1); int moveTo = readBits(f, 1); if(newStyles==0 && lineStyle==0 && fillStyle1==0 && fillStyle0==0 && moveTo==0) { println("EndShape"); return 0; } if(moveTo==1) { int moveBits = readBits(f, 5); int x = readSBits(f, moveBits); int y = readSBits(f, moveBits); println("MoveTo (%i) - (%i,%i)", moveBits, x, y); } if(fillStyle0==1) println("FillStyle0: %i", readBits(f, *fillBits)); if(fillStyle1==1) println("FillStyle1: %i", readBits(f, *fillBits)); if(lineStyle==1) println("LineStyle1: %i", readBits(f, *lineBits)); if(newStyles==1) { println("NewStyles:"); printFillStyleArray(f, shapeType); printLineStyleArray(f, shapeType); *fillBits = readBits(f, 4); *lineBits = readBits(f, 4); } } else /* it's an edge record */ { int straight = readBits(f, 1); int numBits = readBits(f, 4)+2; if(straight==1) { if(readBits(f, 1)) /* general line */ { int x = readSBits(f, numBits); int y = readSBits(f, numBits); println("StraightEdge: (%i) - (%i,%i)", numBits, x, y); } else if(readBits(f, 1)) /* vert = 1 */ println("StraightEdge: (%i) - (0,%i)", numBits, readSBits(f, numBits)); else println("StraightEdge: (%i) - (%i,0)", numBits, readSBits(f, numBits)); } else { int controlX = readSBits(f, numBits); int controlY = readSBits(f, numBits); int anchorX = readSBits(f, numBits); int anchorY = readSBits(f, numBits); println("CurvedEdge: (%i) - (%i,%i)->(%i,%i)", numBits, controlX, controlY, anchorX, anchorY); } } return 1; }
int readShapeRec(FILE *f, struct Shape *shape) { struct ShapeRecord *s; int type; shape->shapes.shape = realloc(shape->shapes.shape, (shape->shapes.nShapes+1) * sizeof(struct ShapeRecord)); s = &(shape->shapes.shape[shape->shapes.nShapes]); ++shape->shapes.nShapes; type = readBits(f, 1); if(type==0) /* state change */ { int newStyles = readBits(f, 1); int lineStyle = readBits(f, 1); int fillStyle1 = readBits(f, 1); int fillStyle0 = readBits(f, 1); int moveTo = readBits(f, 1); if(newStyles==0 && lineStyle==0 && fillStyle1==0 && fillStyle0==0 && moveTo==0) { s->type = SHAPERECORD_END; return 0; } s->type = SHAPERECORD_STATECHANGE; if(moveTo==1) { int moveBits = readBits(f, 5); s->data.change.movetox = readSBits(f, moveBits); s->data.change.movetoy = readSBits(f, moveBits); } else { s->data.change.movetox = 0; s->data.change.movetoy = 0; } if(fillStyle0==1) { int num = readBits(f, shape->fillBits); s->data.change.fill0 = (num==0) ? 0 : num + shape->fillOffset; } else s->data.change.fill0 = -1; if(fillStyle1==1) { int num = readBits(f, shape->fillBits); s->data.change.fill1 = (num==0) ? 0 : num + shape->fillOffset; } else s->data.change.fill1 = -1; if(lineStyle==1) { int num = readBits(f, shape->lineBits); s->data.change.line = (num==0) ? 0 : num + shape->lineOffset; } else s->data.change.line = -1; if(newStyles==1) { readFillStyleArray(f, shape, 0); readLineStyleArray(f, shape, 0); shape->fillBits = readBits(f, 4); shape->lineBits = readBits(f, 4); } } else /* it's an edge record */ { int straight = readBits(f, 1); int numBits = readBits(f, 4)+2; if(straight==1) { s->type = SHAPERECORD_LINE; if(readBits(f, 1)) /* general line */ { s->data.line.x = readSBits(f, numBits); s->data.line.y = readSBits(f, numBits); } else if(readBits(f, 1)) /* vert = 1 */ { s->data.line.x = 0; s->data.line.y = readSBits(f, numBits); } else { s->data.line.x = readSBits(f, numBits); s->data.line.y = 0; } } else { s->type = SHAPERECORD_CURVE; s->data.curve.controlx = readSBits(f, numBits); s->data.curve.controly = readSBits(f, numBits); s->data.curve.anchorx = readSBits(f, numBits); s->data.curve.anchory = readSBits(f, numBits); } } return 1; }