/************* * DESCRIPTION: this method is called whenever the user presses return in * the float string object * INPUT: cl class * obj object * msg message * OUTPUT: *************/ static ULONG StringAck(struct IClass *cl,Object *obj,struct opGet *msg) { struct Float_Data *data = (struct Float_Data *)INST_DATA(cl,obj); char *s; float value; char buffer[32]; GetAttr(MUIA_String_Contents,data->fs_gadget,(ULONG*)&s); value = atof(s); if(data->lowerbound && (((value < data->lower) && data->lowerinside) || ((value <= data->lower) && !data->lowerinside))) { value = data->value; Float2String(value, buffer); SetAttrs(data->fs_gadget, MUIA_String_Contents, buffer, TAG_DONE); DisplayBeep(_screen(obj)); } if(data->upperbound && (((value > data->upper) && data->upperinside) || ((value >= data->upper) && !data->upperinside))) { value = data->value; Float2String(value, buffer); SetAttrs(data->fs_gadget, MUIA_String_Contents, buffer, TAG_DONE); DisplayBeep(_screen(obj)); } data->value = value; return 0; }
/************* * DESCRIPTION: OM_SET method * INPUT: cl class * obj object * msg message * OUTPUT: *************/ static ULONG Set(struct IClass *cl,Object *obj,struct opSet *msg) { struct Float_Data *data = (struct Float_Data *)INST_DATA(cl,obj); struct TagItem *tags,*tag; char buffer[32]; tags=msg->ops_AttrList; do { tag = WARPOS_PPC_FUNC(NextTagItem)(&tags); if(tag) { switch (tag->ti_Tag) { case MUIA_Float_Value: data->value = *(float*)tag->ti_Data; Float2String(data->value, buffer); SetAttrs(data->fs_gadget, MUIA_String_Contents, buffer, TAG_DONE); break; } } } while(tag); return(DoSuperMethodA(cl,obj,(Msg)msg)); }
char * Freq2String(float freq, bool alwaysSign, char bufferOut[20]) { bufferOut[0] = 0; char *suffix = 0; if(freq == ERROR_VALUE_FLOAT) { strcat(bufferOut, ERROR_STRING_VALUE); return bufferOut; } if(freq >= 1e6) { suffix = set.common.lang == Russian ? "ÌÃö" : "MHz"; freq /= 1e6; } else if (freq >= 1e3) { suffix = set.common.lang == Russian ? "êÃö" : "kHz"; freq /= 1e3; } else { suffix = set.common.lang == Russian ? "Ãö" : "Hz"; } char buffer[20]; strcat(bufferOut, Float2String(freq, false, 4, buffer)); strcat(bufferOut, suffix); return bufferOut; }
char* Time2String(float time, bool alwaysSign, char buffer[20]) { buffer[0] = 0; char *suffix = 0; if(time == ERROR_VALUE_FLOAT) { strcat(buffer, ERROR_STRING_VALUE); return buffer; } else if(fabs(time) + 0.5e-10 < 1e-6) { suffix = set.common.lang == Russian ? "íñ" : "ns"; time *= 1e9; } else if(fabs(time) + 0.5e-7 < 1e-3) { suffix = set.common.lang == Russian ? "ìêñ" : "us"; time *= 1e6; } else if(fabs(time) + 0.5e-3 < 1) { suffix = set.common.lang == Russian ? "ìñ" : "ms"; time *= 1e3; } else { suffix = set.common.lang == Russian ? "ñ" : "s"; } char bufferOut[20]; strcat(buffer, Float2String(time, alwaysSign, 4, bufferOut)); strcat(buffer, suffix); return buffer; }
char* Float2Db(float value, int numDigits, char bufferOut[20]) { bufferOut[0] = 0; char buffer[20]; strcat(bufferOut, Float2String(value, false, numDigits, buffer)); strcat(bufferOut, "äÁ"); return bufferOut; }
/************* * DESCRIPTION: do initialations for float subclass * INPUT: cl class * obj object * msg message * OUTPUT: created object or 0 if failed *************/ static ULONG New(struct IClass *cl,Object *obj,struct opSet *msg) { struct Float_Data *data,databuf; char buffer[32]; float value; obj = (Object *)DoSuperNew(cl,obj, MUIA_Group_Horiz, TRUE, Child, KeyFloatString( databuf.fs_gadget, GetTagData(MUIA_Float_Label,NULL,msg->ops_AttrList), NULL, GetTagData(MUIA_Float_ControlChar,NULL,msg->ops_AttrList)), End, TAG_MORE,msg->ops_AttrList); if(obj) { data = (struct Float_Data*)INST_DATA(cl,obj); *data = databuf; value = (float)WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_Value,1,msg->ops_AttrList); data->lower = WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_Min,1,msg->ops_AttrList); data->upper = WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_Max,100,msg->ops_AttrList); data->lowerbound = (BOOL)WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_LowerBound,FALSE,msg->ops_AttrList); data->upperbound = (BOOL)WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_UpperBound,FALSE,msg->ops_AttrList); data->lowerinside = (BOOL)WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_LowerInside,FALSE,msg->ops_AttrList); data->upperinside = (BOOL)WARPOS_PPC_FUNC(GetTagData)(MUIA_Float_UpperInside,FALSE,msg->ops_AttrList); Float2String(value,buffer); SetAttrs(data->fs_gadget, MUIA_String_Contents, buffer, TAG_DONE); DOMETHOD(data->fs_gadget, MUIM_Notify, MUIA_String_Acknowledge, MUIV_EveryTime, obj, 1, MUIM_Float_StringAck); return((ULONG)obj); } return(0); }
char* Voltage2String(float voltage, bool alwaysSign, char buffer[20]) { buffer[0] = 0; char *suffix; if(voltage == ERROR_VALUE_FLOAT) { strcat(buffer, ERROR_STRING_VALUE); return buffer; } else if(fabs(voltage) + 0.5e-4 < 1e-3) { suffix = set.common.lang == Russian ? "\x10ìêÂ" : "\x10uV"; voltage *= 1e6; } else if(fabs(voltage) + 0.5e-4 < 1) { suffix = set.common.lang == Russian ? "\x10ìÂ" : "\x10mV" ; voltage *= 1e3; } else if(fabs(voltage) + 0.5e-4 < 1000) { suffix = set.common.lang == Russian ? "\x10Â" : "\x10V"; } else { suffix = set.common.lang == Russian ? "\x10êÂ" : "\x10kV"; voltage *= 1e-3; } char bufferOut[20]; Float2String(voltage, alwaysSign, 4, bufferOut); strcat(buffer, bufferOut); strcat(buffer, suffix); return buffer; }
TiXmlElement * AddDouble(TiXmlNode * node, const char * name, double num) { return AddString(node, name, Float2String(num).c_str()); }
char* Phase2String(float phase, bool empty, char bufferOut[20]) { char buffer[20]; sprintf(bufferOut, "%s\xa8", Float2String(phase, false, 4, buffer)); return bufferOut; }
char* FloatFract2String(float value, bool alwaysSign, char bufferOut[20]) { return Float2String(value, alwaysSign, 4, bufferOut); }