int clip_PG_IN_DOUBLE(ClipMachine* mp){ PG_ROWSET* rowset = (PG_ROWSET*)_clip_fetch_c_item( mp,_clip_parni(mp,1),_C_ITEM_TYPE_SQL); int dec = _clip_parni(mp,3); char* str; int len; if(!rowset){ _clip_trap_err(mp,0,0,0,subsys,ER_NOROWSET,er_norowset); return 1; } if(rowset->binary){ str = _clip_parcl(mp,2,&len); if(str){ _clip_retndp(mp,*((double*)str),0,dec); } } else { str = _clip_parc(mp,2); if(str){ _clip_retndp(mp,_clip_strtod(str,&len),0,dec); } } return 0; }
int static __tree_store_set(ClipMachine * ClipMachineMemory, GtkTreeIter * iter, gint startDataParam) { C_object *cstree = _fetch_co_arg(ClipMachineMemory); ClipArrVar *utypes; gint i; CHECKCOBJ(cstree, GTK_IS_TREE_STORE(cstree->object)); utypes = (ClipArrVar *) _clip_vptr(_clip_mget(ClipMachineMemory, &cstree->obj, HASH_UTYPES)); for (i = startDataParam; i <= _clip_parinfo(ClipMachineMemory, 0); i += 2) { gint column = _clip_parni(ClipMachineMemory, i); ClipVar *val; GValue value; C_object *cobj; gchar *str; int j, n; double d; CHECKARG(i, NUMERIC_type_of_ClipVarType); if (column == -1) break; column--; val = _clip_par(ClipMachineMemory, i + 1); memset(&value, 0, sizeof(value)); switch ((int) utypes->ClipVar_items_of_ClipArrVar[column].ClipNumVar_n_of_ClipVar.double_of_ClipNumVar) { case TREE_TYPE_NUMERIC: g_value_init(&value, G_TYPE_INT); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == NUMERIC_type_of_ClipVarType) g_value_set_int(&value, (int) val->ClipNumVar_n_of_ClipVar.double_of_ClipNumVar); else { n = _clip_strtod(val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, &j); g_value_set_int(&value, n); } break; case TREE_TYPE_NUMERIC_FLOAT: g_value_init(&value, G_TYPE_FLOAT); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == NUMERIC_type_of_ClipVarType) g_value_set_float(&value, val->ClipNumVar_n_of_ClipVar.double_of_ClipNumVar); else { d = _clip_strtod(val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, &j); g_value_set_float(&value, d); } break; case TREE_TYPE_STRING: str = val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf; LOCALE_TO_UTF(str); g_value_init(&value, G_TYPE_STRING); g_value_set_string(&value, str); FREE_TEXT(str); break; case TREE_TYPE_LOGICAL: g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, val->ClipLogVar_l_of_ClipVar.value_of_ClipLogVar); break; case TREE_TYPE_DATE: g_value_init(&value, G_TYPE_STRING); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == DATE_type_of_ClipVarType) str = _clip_date_to_str(val->ClipLongVar_lv_of_ClipVar.long_of_ClipLongVar, ClipMachineMemory->date_format); else str = _clip_date_to_str(_clip_str_to_date (val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, ClipMachineMemory->date_format, ClipMachineMemory->epoch), ClipMachineMemory->date_format); g_value_set_string(&value, str); break; case TREE_TYPE_PIXBUF: g_value_init(&value, GDK_TYPE_PIXBUF); cobj = _fetch_cobject(ClipMachineMemory, val); g_value_set_object(&value, cobj->object); break; } gtk_tree_store_set_value(GTK_TREE_STORE(cstree->object), iter, column, &value); } return 0; err: return 1; }
/****************************************************************************** * gtk_TreeStoreSetValue(tree,path_string, ncol, val) ******************************************************************************/ int clip_GTK_TREESTORESETVALUE(ClipMachine * ClipMachineMemory) { C_object *cstree = _fetch_co_arg(ClipMachineMemory); gchar *path = _clip_parc(ClipMachineMemory, 2); gint column = _clip_parni(ClipMachineMemory, 3); ClipVar *val = _clip_par(ClipMachineMemory, 4);; GtkTreeIter iter; ClipArrVar *utypes; GValue value; C_object *cobj; gchar *str; int j, n; double d; CHECKARG2(1, MAP_type_of_ClipVarType, NUMERIC_type_of_ClipVarType); CHECKCOBJ(cstree, GTK_IS_TREE_STORE(cstree->object)); CHECKARG(2, CHARACTER_type_of_ClipVarType); CHECKARG(3, NUMERIC_type_of_ClipVarType); gtk_tree_model_get_iter(GTK_TREE_MODEL(GTK_TREE_STORE(cstree->object)), &iter, gtk_tree_path_new_from_string(path)); utypes = (ClipArrVar *) _clip_vptr(_clip_mget(ClipMachineMemory, &cstree->obj, HASH_UTYPES)); column--; memset(&value, 0, sizeof(value)); switch ((int) utypes->ClipVar_items_of_ClipArrVar[column].ClipNumVar_n_of_ClipVar.double_of_ClipNumVar) { case TREE_TYPE_NUMERIC: g_value_init(&value, G_TYPE_INT); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == NUMERIC_type_of_ClipVarType) g_value_set_int(&value, (int) val->ClipNumVar_n_of_ClipVar.double_of_ClipNumVar); else { n = _clip_strtod(val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, &j); g_value_set_int(&value, n); } break; case TREE_TYPE_NUMERIC_FLOAT: g_value_init(&value, G_TYPE_FLOAT); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == NUMERIC_type_of_ClipVarType) g_value_set_float(&value, val->ClipNumVar_n_of_ClipVar.double_of_ClipNumVar); else { d = _clip_strtod(val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, &j); g_value_set_float(&value, d); } break; case TREE_TYPE_STRING: str = val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf; LOCALE_TO_UTF(str); g_value_init(&value, G_TYPE_STRING); g_value_set_string(&value, str); FREE_TEXT(str); break; case TREE_TYPE_LOGICAL: g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, val->ClipLogVar_l_of_ClipVar.value_of_ClipLogVar); break; case TREE_TYPE_DATE: g_value_init(&value, G_TYPE_STRING); if (val->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType == DATE_type_of_ClipVarType) str = _clip_date_to_str(val->ClipLongVar_lv_of_ClipVar.long_of_ClipLongVar, ClipMachineMemory->date_format); else str = _clip_date_to_str(_clip_str_to_date (val->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf, ClipMachineMemory->date_format, ClipMachineMemory->epoch), ClipMachineMemory->date_format); g_value_set_string(&value, str); break; case TREE_TYPE_PIXBUF: g_value_init(&value, GDK_TYPE_PIXBUF); cobj = _fetch_cobject(ClipMachineMemory, val); g_value_set_object(&value, cobj->object); break; } gtk_tree_store_set_value(GTK_TREE_STORE(cstree->object), &iter, column, &value); return 0; err: return 1; }
int static __list_store_set(ClipMachine *cm, GtkTreeIter *iter, gint startDataParam) { C_object *cslist = _fetch_co_arg(cm); ClipArrVar *utypes; gint i; CHECKCOBJ(cslist, GTK_IS_LIST_STORE(cslist->object)); utypes = (ClipArrVar *)_clip_vptr(_clip_mget(cm, &cslist->obj, HASH_UTYPES)); for (i=startDataParam; i<=_clip_parinfo(cm, 0); i+=2) { gint column = _clip_parni(cm, i); ClipVar *val; GValue value; C_object *cobj; gchar *str; int j, n; double d; CHECKARG(i, NUMERIC_t); if (column == -1) break; column --; val = _clip_par(cm, i+1); memset(&value, 0, sizeof(value)); switch ((int)utypes->items[column].n.d) { case TREE_TYPE_NUMERIC: g_value_init(&value, G_TYPE_INT); if (val->t.type == NUMERIC_t) g_value_set_int(&value, (int)val->n.d); else { n = _clip_strtod(val->s.str.buf, &j); g_value_set_int(&value, n); } break; case TREE_TYPE_NUMERIC_FLOAT: g_value_init(&value, G_TYPE_FLOAT); if (val->t.type == NUMERIC_t) g_value_set_float(&value, val->n.d); else { d = _clip_strtod(val->s.str.buf, &j); g_value_set_float(&value, d); } break; case TREE_TYPE_STRING: str = val->s.str.buf; LOCALE_TO_UTF(str); g_value_init(&value, G_TYPE_STRING); g_value_set_string(&value, str); FREE_TEXT(str); break; case TREE_TYPE_LOGICAL: g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, val->l.val); break; case TREE_TYPE_PIXBUF: g_value_init(&value, GDK_TYPE_PIXBUF); cobj = _fetch_cobject(cm, val); g_value_set_object(&value, cobj->object); break; case TREE_TYPE_DATE: g_value_init(&value, G_TYPE_STRING); if (val->t.type == DATE_t) str = _clip_date_to_str(val->lv.l, cm->date_format); else str = _clip_date_to_str(_clip_str_to_date(val->s.str.buf, cm->date_format, cm->epoch), cm->date_format); g_value_set_string(&value, str); break; } gtk_list_store_set_value(GTK_LIST_STORE(cslist->object), iter, column, &value); } return 0; err: return 1; }
/****************************************************************************** * gtk_ListStoreSetValue(list,path_string, ncol, val) ******************************************************************************/ int clip_GTK_LISTSTORESETVALUE(ClipMachine * cm) { C_object *cslist = _fetch_co_arg(cm); gchar *path = _clip_parc(cm, 2); gint column = _clip_parni(cm, 3); ClipVar *val = _clip_par(cm, 4);; GtkTreeIter iter; ClipArrVar *utypes; GValue value; C_object *cobj; gchar *str; int j, n; double d; CHECKARG2(1, MAP_t, NUMERIC_t);CHECKCOBJ(cslist, GTK_IS_LIST_STORE(cslist->object)); CHECKARG(2, CHARACTER_t); CHECKARG(3, NUMERIC_t); gtk_tree_model_get_iter(GTK_TREE_MODEL(GTK_LIST_STORE(cslist->object)), &iter, gtk_tree_path_new_from_string(path)); utypes = (ClipArrVar *)_clip_vptr(_clip_mget(cm, &cslist->obj, HASH_UTYPES)); column --; memset(&value, 0, sizeof(value)); switch ((int)utypes->items[column].n.d) { case TREE_TYPE_NUMERIC: g_value_init(&value, G_TYPE_INT); if (val->t.type == NUMERIC_t) g_value_set_int(&value, (int)val->n.d); else { n = _clip_strtod(val->s.str.buf, &j); g_value_set_int(&value, n); } break; case TREE_TYPE_NUMERIC_FLOAT: g_value_init(&value, G_TYPE_FLOAT); if (val->t.type == NUMERIC_t) g_value_set_float(&value, val->n.d); else { d = _clip_strtod(val->s.str.buf, &j); g_value_set_float(&value, d); } break; case TREE_TYPE_STRING: str = val->s.str.buf; LOCALE_TO_UTF(str); g_value_init(&value, G_TYPE_STRING); g_value_set_string(&value, str); FREE_TEXT(str); break; case TREE_TYPE_LOGICAL: g_value_init(&value, G_TYPE_BOOLEAN); g_value_set_boolean(&value, val->l.val); break; case TREE_TYPE_PIXBUF: g_value_init(&value, GDK_TYPE_PIXBUF); cobj = _fetch_cobject(cm, val); g_value_set_object(&value, cobj->object); break; case TREE_TYPE_DATE: g_value_init(&value, G_TYPE_STRING); if (val->t.type == DATE_t) str = _clip_date_to_str(val->lv.l, cm->date_format); else str = _clip_date_to_str(_clip_str_to_date(val->s.str.buf, cm->date_format, cm->epoch), cm->date_format); g_value_set_string(&value, str); break; } gtk_list_store_set_value(GTK_LIST_STORE(cslist->object), &iter, column, &value); return 0; err: return 1; }
int clip_ROUND(ClipMachine * mp) { #if 1 int len, dec; double d = _clip_parnd(mp, 1); ClipVar *vp=_clip_par(mp,1); int de = _clip_parni(mp, 2); #ifdef ARCH_i386 (*(long long*)&d)++; #endif _clip_parp(mp, 1, &len, &dec); dec = de; if (dec <= 0) dec = 0; if ( vp->t.memo ) { char *tmp=rational_toString(vp->r.r,10,dec,0); _clip_retnr(mp,rational_fromString(tmp),len,dec); free(tmp); return 0; } if( d == 0.0 ) { _clip_retndp(mp, d, len, de); return 0; } if( de == 0 ) { if( d < 0.0 ) d = ceil( d - 0.5 ); else d = floor( d + 0.5 ); _clip_retndp(mp, d, len, dec); return 0; } if( de < 0 ) { double tmp = pow( 10, -de ); if( d < 0.0 ) d = ceil( ( d / tmp ) - 0.5 ); else d = floor( ( d / tmp ) + 0.5 ); d *= tmp; } else { double tmp = pow( 10, de ); if( d < 0.0 ) d = ceil( ( d * tmp ) - 0.5 ); else d = floor( ( d * tmp ) + 0.5 ); d /= tmp; } _clip_retndp(mp, d, len, dec); return 0; #else int len, dec, len1; char buf[33],ch; double ret, d = _clip_parnd(mp, 1); int de = _clip_parni(mp, 2); _clip_parp(mp, 1, &len, &dec); buf[32]=0; if (len > 30 ) len=30; _clip_dtostr(buf, len, de+1, d, 0); len1 = strlen(buf)-1; ch = buf[len1]; if ( ch >='5' ) buf[len1-1] ++; buf[len1] = 0; ret = _clip_strtod(buf, &dec); _clip_retndp(mp, ret, len, de); return 0; #endif }
static int get_var(ClipMachine * ClipMachineMemory, ClipVar * vp, char **str, long *len) { int type; memset(vp, 0, sizeof(ClipVar)); if (!get_byte(str, len, &type)) return -1; switch (type) { case UNDEF_type_of_ClipVarType: break; case NUMERIC_type_of_ClipVarType: { int dec, l, memo; char *s = 0; long sl = 0; if (!get_byte(str, len, &dec)) return -1; if (!get_byte(str, len, &l)) return -1; if (!get_byte(str, len, &memo)) return -1; if (!get_str(str, len, &s, &sl)) return -1; vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = NUMERIC_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; vp->ClipType_t_of_ClipVar.len_of_ClipType = l; vp->ClipType_t_of_ClipVar.dec_of_ClipType = dec; vp->ClipType_t_of_ClipVar.memo_of_ClipType = memo; if (memo) vp->ClipRationalVar_r_of_ClipVar.Struc_rational_of_ClipRationalVar = rational_fromString(s); else { int dec; vp->ClipNumVar_n_of_ClipVar.double_of_ClipNumVar = _clip_strtod(s, &dec);; } free(s); } break; case CHARACTER_type_of_ClipVarType: { char *s = 0; long sl = 0; if (!get_str(str, len, &s, &sl)) return -1; vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = CHARACTER_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; /* vp->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf = malloc(sl); memcpy(vp->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf,s,sl); free(s); */ vp->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.buf_of_ClipBuf = s; vp->ClipStrVar_s_of_ClipVar.ClipBuf_str_of_ClipStrVar.len_of_ClipBuf = sl; } break; case LOGICAL_type_of_ClipVarType: { int n; if (!get_byte(str, len, &n)) return -1; vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = LOGICAL_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; vp->ClipLogVar_l_of_ClipVar.value_of_ClipLogVar = n; } break; case DATE_type_of_ClipVarType: { long n; if (!get_int32(str, len, &n)) return -1; vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = DATE_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; vp->ClipDateVar_d_of_ClipVar.julian_of_ClipDateVar = n; } break; case OBJECT_type_of_ClipVarType: { char *s = 0; long sl = 0; if (!get_str(str, len, &s, &sl)) return -1; /*vp->o.rtti->print(ClipMachineMemory, vp->o.obj, vp->o.rtti, &ClipMachineMemory->buf, &ClipMachineMemory->buflen); */ free(s); } break; case PCODE_type_of_ClipVarType: case CCODE_type_of_ClipVarType: { /*ClipVar *sp = (ClipVar *) calloc(1, sizeof(ClipVar)); */ /* vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_MPTR; vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = CCODE_t; vp->ClipRefVar_p_of_ClipVar.vp = sp; */ /*sp->ClipType_t_of_ClipVar.count_of_ClipType = 1; */ vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = CCODE_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; vp->ClipCodeVar_c_of_ClipVar.union_of_ClipCodeVar.ClipFunction_function_of_ClipCodeVar = null_func; } break; case ARRAY_type_of_ClipVarType: { long i, size; ClipVar *ap; if (!get_int32(str, len, &size)) return -1; ap = (ClipVar *) calloc(1, sizeof(ClipVar)); vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = ARRAY_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_MPTR_ClipFlags; vp->ClipRefVar_p_of_ClipVar.ClipVar_of_ClipRefVar = ap; ap->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = ARRAY_type_of_ClipVarType; ap->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; ap->ClipType_t_of_ClipVar.count_of_ClipType = 1; ap->ClipArrVar_a_of_ClipVar.ClipVar_items_of_ClipArrVar = (ClipVar *) malloc(sizeof(ClipVar) * size); ap->ClipArrVar_a_of_ClipVar.count_of_ClipArrVar = size; for (i = 0; i < size; ++i) if (get_var(ClipMachineMemory, ap->ClipArrVar_a_of_ClipVar.ClipVar_items_of_ClipArrVar + i, str, len) < 0) return -1; } break; case MAP_type_of_ClipVarType: { int i; long size; ClipVar *ap; if (!get_int32(str, len, &size)) return -1; ap = (ClipVar *) calloc(1, sizeof(ClipVar)); vp->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = MAP_type_of_ClipVarType; vp->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_MPTR_ClipFlags; vp->ClipRefVar_p_of_ClipVar.ClipVar_of_ClipRefVar = ap; ap->ClipType_t_of_ClipVar.ClipVartype_type_of_ClipType = MAP_type_of_ClipVarType; ap->ClipType_t_of_ClipVar.ClipFlags_flags_of_ClipType = F_NONE_ClipFlags; ap->ClipType_t_of_ClipVar.count_of_ClipType = 1; ap->ClipMapVar_m_of_ClipVar.ClipVarEl_items_of_ClipMapVar = (ClipVarEl *) calloc(sizeof(ClipVarEl), size); ap->ClipMapVar_m_of_ClipVar.count_of_ClipMapVar = size; for (i = 0; i < size; ++i) { if (!get_int32(str, len, &(ap->ClipMapVar_m_of_ClipVar.ClipVarEl_items_of_ClipMapVar[i].no_of_ClipVarEl))) return -1; if (get_var(ClipMachineMemory, &(ap->ClipMapVar_m_of_ClipVar.ClipVarEl_items_of_ClipMapVar[i].ClipVar_var_of_ClipVarEl), str, len) < 0) return -1; } } break; default: ; } return 0; }