void VALBLK::ChkTyp(PVBLK vb) { if (Check && (Type != vb->GetType() || Unsigned != vb->IsUnsigned())) { PGLOBAL& g = Global; strcpy(g->Message, MSG(VALTYPE_NOMATCH)); longjmp(g->jumper[g->jump_level], Type); } // endif Type } // end of ChkTyp
void CHRBLK::SetValues(PVBLK pv, int k, int n) { #if defined(_DEBUG) if (Type != pv->GetType() || Long != ((CHRBLK*)pv)->Long) { PGLOBAL& g = Global; strcpy(g->Message, MSG(BLKTYPLEN_MISM)); longjmp(g->jumper[g->jump_level], Type); } // endif Type #endif // _DEBUG char *p = ((CHRBLK*)pv)->Chrp; if (!k) memcpy(Chrp, p, Long * n); else memcpy(Chrp + k * Long, p + k * Long, Long * (n - k)); } // end of SetValues
void CHRBLK::SetValue(PVBLK pv, int n1, int n2) { bool b; if (Type != pv->GetType() || Long != ((CHRBLK*)pv)->Long) { PGLOBAL& g = Global; strcpy(g->Message, MSG(BLKTYPLEN_MISM)); longjmp(g->jumper[g->jump_level], Type); } // endif Type if (!(b = pv->IsNull(n2) && Nullable)) memcpy(Chrp + n1 * Long, ((CHRBLK*)pv)->Chrp + n2 * Long, Long); else Reset(n1); SetNull(n1, b); } // end of SetValue
int ARRAY::Convert(PGLOBAL g, int k, PVAL vp) { int i, prec = 0; bool b = FALSE; PMBV ovblk = Valblk; PVBLK ovblp = Vblp; Type = k; // k is the new type Valblk = new(g) MBVALS; switch (Type) { case TYPE_DOUBLE: prec = 2; case TYPE_SHORT: case TYPE_INT: case TYPE_DATE: Len = 1; break; default: sprintf(g->Message, MSG(BAD_CONV_TYPE), Type); return TYPE_ERROR; } // endswitch k Size = Nval; Nval = 0; Vblp = Valblk->Allocate(g, Type, Len, prec, Size); if (!Valblk->GetMemp()) // The error message was built by PlgDBalloc return TYPE_ERROR; else Value = AllocateValue(g, Type, Len, prec); /*********************************************************************/ /* Converting STRING to DATE can be done according to date format. */ /*********************************************************************/ if (Type == TYPE_DATE && ovblp->GetType() == TYPE_STRING && vp) if (((DTVAL*)Value)->SetFormat(g, vp)) return TYPE_ERROR; else b = TRUE; // Sort the new array on date internal values /*********************************************************************/ /* Do the actual conversion. */ /*********************************************************************/ for (i = 0; i < Size; i++) { Value->SetValue_pvblk(ovblp, i); if (AddValue(g, Value)) return TYPE_ERROR; } // endfor i /*********************************************************************/ /* For sorted arrays, get the initial find values. */ /*********************************************************************/ if (b) Sort(g); ovblk->Free(); return Type; } // end of Convert