#include #include #include #ifdef HAVE_CONFIG_H #include "config.h" #endif #include "wv.h" void wvInitLVL (LVL * lvl) { lvl->grpprlPapx = NULL; lvl->grpprlChpx = NULL; lvl->numbertext = NULL; wvInitLVLF (&(lvl->lvlf)); } void wvCopyLVL (LVL * dest, LVL * src) { int len; wvReleaseLVL (dest); wvInitLVL (dest); wvCopyLVLF (&(dest->lvlf), &(src->lvlf)); if (src->lvlf.cbGrpprlPapx > 0) { dest->grpprlPapx = (U8 *) wvMalloc (src->lvlf.cbGrpprlPapx); memcpy (dest->grpprlPapx, src->grpprlPapx, src->lvlf.cbGrpprlPapx); } else dest->grpprlPapx = NULL; if (src->lvlf.cbGrpprlChpx > 0) { dest->grpprlChpx = (U8 *) wvMalloc (src->lvlf.cbGrpprlChpx); memcpy (dest->grpprlChpx, src->grpprlChpx, src->lvlf.cbGrpprlChpx); } else dest->grpprlChpx = NULL; if (src->numbertext == NULL) dest->numbertext = NULL; else { len = src->numbertext[0]; dest->numbertext = (U16 *) wvMalloc (sizeof (U16) * (len + 2)); memcpy (dest->numbertext, src->numbertext, len + 2); } } void wvGetLVL (LVL * lvl, wvStream * fd) { int len; wvGetLVLF (&(lvl->lvlf), fd); if (lvl->lvlf.cbGrpprlPapx > 0) { lvl->grpprlPapx = (U8 *) wvMalloc (lvl->lvlf.cbGrpprlPapx); wvStream_read (lvl->grpprlPapx, sizeof (U8), lvl->lvlf.cbGrpprlPapx, fd); } else lvl->grpprlPapx = NULL; if (lvl->lvlf.cbGrpprlChpx > 0) { lvl->grpprlChpx = (U8 *) wvMalloc (lvl->lvlf.cbGrpprlChpx); wvStream_read (lvl->grpprlChpx, sizeof (U8), lvl->lvlf.cbGrpprlChpx, fd); } else lvl->grpprlChpx = NULL; len = read_16ubit (fd); if (len > 0) { lvl->numbertext = (U16 *) wvMalloc (sizeof (U16) * (len + 2)); lvl->numbertext[0] = len; wvStream_read (&(lvl->numbertext[1]), sizeof (U16), len, fd); lvl->numbertext[len - 1] = 0; } else lvl->numbertext = NULL; wvTrace (("len is %d\n", len)); } void wvReleaseLVL (LVL * lvl) { if (lvl == NULL) return; wvFree (lvl->grpprlPapx); wvFree (lvl->grpprlChpx); wvFree (lvl->numbertext); } void wvCopyLVLF (LVLF * dest, LVLF * src) { memcpy (dest, src, sizeof (LVLF)); } void wvGetLVLF (LVLF * item, wvStream * fd) { U8 temp8; int i; #ifdef PURIFY wvInitLVLF (item); #endif item->iStartAt = read_32ubit (fd); wvTrace (("iStartAt is %d\n", item->iStartAt)); item->nfc = read_8ubit (fd); temp8 = read_8ubit (fd); item->jc = temp8 & 0x03; item->fLegal = (temp8 & 0x04) >> 2; item->fNoRestart = (temp8 & 0x08) >> 3; item->fPrev = (temp8 & 0x10) >> 4; item->fPrevSpace = (temp8 & 0x20) >> 5; item->fWord6 = (temp8 & 0x40) >> 6; item->reserved1 = (temp8 & 0x80) >> 7; for (i = 0; i < 9; i++) item->rgbxchNums[i] = read_8ubit (fd); item->ixchFollow = read_8ubit (fd);; item->dxaSpace = read_32ubit (fd); item->dxaIndent = read_32ubit (fd); item->cbGrpprlChpx = read_8ubit (fd); item->cbGrpprlPapx = read_8ubit (fd); item->reserved2 = read_16ubit (fd);; } void wvInitLVLF (LVLF * item) { int i; item->iStartAt = 1; item->nfc = 0; item->jc = 0; item->fLegal = 0; item->fNoRestart = 0; item->fPrev = 0; item->fPrevSpace = 0; item->fWord6 = 0; item->reserved1 = 0; for (i = 0; i < 9; i++) item->rgbxchNums[i] = 0; item->ixchFollow = 0; item->dxaSpace = 0; item->dxaIndent = 0; item->cbGrpprlChpx = 0; item->cbGrpprlPapx = 0; item->reserved2 = 0; }