#include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "wvexporter-priv.h" void wvPutSTSHI (STSHI * item, U16 cbSTSHI, wvStream * fd) { U16 temp16 = 0, count = 0; int i; write_16ubit (fd, item->cstd); write_16ubit (fd, item->cbSTDBaseInFile); temp16 |= item->fStdStylenamesWritten; temp16 |= item->reserved << 1; write_16ubit (fd, temp16); write_16ubit (fd, (U16) item->stiMaxWhenSaved); write_16ubit (fd, item->istdMaxFixedWhenSaved); write_16ubit (fd, item->nVerBuiltInNamesWhenSaved); count = 12; /* add */ for (i = 0; i < 3; i++) { write_16ubit (fd, item->rgftcStandardChpStsh[i]); count += 2; if (count >= cbSTSHI) break; } while (count < cbSTSHI) { count++; write_8ubit (fd, 0); /* write garbage */ } } void wvPutSTD (STD * item, U16 len, wvStream * fd) { U16 temp16 = 0; U16 i, j; int pos; int ret = 0; U16 count = 0; temp16 |= item->sti; temp16 |= item->fScratch << 12; temp16 |= item->fInvalHeight << 13; temp16 |= item->fHasUpe << 14; temp16 |= item->fMassCopy << 15; write_16ubit (fd, temp16); temp16 = 0; temp16 |= item->sgc; temp16 |= item->istdBase << 4; write_16ubit (fd, temp16); temp16 = 0; temp16 |= item->cupx; temp16 |= item->istdNext << 4; write_16ubit (fd, temp16); write_16ubit (fd, (U16) item->bchUpe); count = 8; /* add */ pos = 11; ret = 1; write_8ubit (fd, (U8) len); for (i = 0; i < len; i++) { /* if (count > 10) */ /* write_16ubit(fd, (U16)item->xstzName[i]) */ /* else */ write_8ubit (fd, (U8) item->xstzName[i]); pos++; } for (i = 0; i < item->cupx; i++) { if ((pos + 1) / 2 != pos / 2) { /* eat odd bytes */ wvStream_offset (fd, -1); /* TODO: check me */ pos++; } write_16ubit (fd, item->grupxf[i].cbUPX); pos += 2; if (item->grupxf[i].cbUPX == 0) continue; if ((item->cupx == 1) || ((item->cupx == 2) && (i == 1))) { for (j = 0; j < item->grupxf[i].cbUPX; j++) { write_8ubit (fd, item->grupxf[i].upx.chpx.grpprl[j]); pos++; } } else if ((item->cupx == 2) && (i == 0)) { write_16ubit (fd, item->grupxf[i].upx.papx.istd); pos += 2; for (j = 0; j < item->grupxf[i].cbUPX - 2; j++) { write_8ubit (fd, item->grupxf[i].upx.papx.grpprl[j]); pos++; } } else { /* something is FUBAR -- maybe try to handle it here someday */ wvError (("Something FUBAR in wbPutSTD")); } } /* eat odd bytes */ if ((pos + 1) / 2 != pos / 2) /* check me */ wvStream_offset (fd, -1); } void wvPutSTSH (STSH * item, U16 cbStshi, wvStream * fd) { U16 i; write_16ubit (fd, cbStshi); wvPutSTSHI (&(item->Stshi), cbStshi, fd); if (item->Stshi.cstd == 0) return; if (item->std == NULL) { wvError (("What the @#*@#*: item->std is null")); return; } for (i = 0; i < item->Stshi.cstd; i++) { write_16ubit (fd, i); /* TODO: is this right?? i+1?? */ /* TODO *//* wvPutSTD(&(item->std[i]), fd); */ } /* TODO: there must be a setting of styles */ /* TODO: this probably is not finished */ }