- return (double) SPEC_CVAL (val->etype).v_long;
- }
-
- if (SPEC_NOUN (val->etype) == V_INT) {
- if (SPEC_USIGN (val->etype))
- return (double) SPEC_CVAL (val->etype).v_uint;
- else
- return (double) SPEC_CVAL (val->etype).v_int;
- }
-
- if (SPEC_NOUN (val->etype) == V_CHAR) {
- if (SPEC_USIGN (val->etype))
- return (double) (unsigned char)SPEC_CVAL (val->etype).v_uint;
- else
- return (double) (signed char)SPEC_CVAL (val->etype).v_int;
- }
-
- if (IS_BITVAR(val->etype)) {
- return (double) SPEC_CVAL (val->etype).v_uint;
- }
-
- if (SPEC_NOUN (val->etype) == V_VOID) {
- return (double) SPEC_CVAL (val->etype).v_ulong;
- }
-
- // we are lost !
- werror (E_INTERNAL_ERROR, __FILE__, __LINE__,
- "floatFromVal: unknown value");
+ return SPEC_CVAL (val->etype).v_long;
+ }
+
+ if (SPEC_NOUN (val->etype) == V_INT)
+ {
+ if (SPEC_USIGN (val->etype))
+ return SPEC_CVAL (val->etype).v_uint;
+ else
+ return SPEC_CVAL (val->etype).v_int;
+ }
+
+ if (SPEC_NOUN (val->etype) == V_CHAR)
+ {
+ if (SPEC_USIGN (val->etype))
+ return (unsigned char) SPEC_CVAL (val->etype).v_uint;
+ else
+ return (signed char) SPEC_CVAL (val->etype).v_int;
+ }
+
+ if (IS_BITVAR(val->etype))
+ return SPEC_CVAL (val->etype).v_uint;
+
+ if (SPEC_NOUN (val->etype) == V_VOID)
+ return SPEC_CVAL (val->etype).v_ulong;
+
+ /* we are lost ! */
+ werror (E_INTERNAL_ERROR, __FILE__, __LINE__, "floatFromVal: unknown value");
+ return 0;
+}
+
+/*------------------------------------------------------------------*/
+/* ulFromVal - value to unsigned long conversion */
+/*------------------------------------------------------------------*/
+unsigned long
+ulFromVal (value * val)
+{
+ if (!val)
+ return 0;
+
+ if (val->etype && SPEC_SCLS (val->etype) != S_LITERAL)
+ {
+ werror (E_CONST_EXPECTED, val->name);
+ return 0;
+ }
+
+ /* if it is not a specifier then we can assume that */
+ /* it will be an unsigned long */
+ if (!IS_SPEC (val->type))
+ return SPEC_CVAL (val->etype).v_ulong;
+
+ if (SPEC_NOUN (val->etype) == V_FLOAT)
+ return double2ul (SPEC_CVAL (val->etype).v_float);
+
+ if (SPEC_NOUN (val->etype) == V_FIXED16X16)
+ return double2ul (doubleFromFixed16x16 (SPEC_CVAL (val->etype).v_fixed16x16));
+
+ if (SPEC_LONG (val->etype))
+ {
+ if (SPEC_USIGN (val->etype))
+ return SPEC_CVAL (val->etype).v_ulong;
+ else
+ return SPEC_CVAL (val->etype).v_long;
+ }
+
+ if (SPEC_NOUN (val->etype) == V_INT)
+ {
+ if (SPEC_USIGN (val->etype))
+ return SPEC_CVAL (val->etype).v_uint;
+ else
+ return SPEC_CVAL (val->etype).v_int;
+ }
+
+ if (SPEC_NOUN (val->etype) == V_CHAR)
+ {
+ if (SPEC_USIGN (val->etype))
+ return (unsigned char) SPEC_CVAL (val->etype).v_uint;
+ else
+ return (signed char) SPEC_CVAL (val->etype).v_int;
+ }
+
+ if (IS_BITVAR(val->etype))
+ return SPEC_CVAL (val->etype).v_uint;
+
+ if (SPEC_NOUN (val->etype) == V_VOID)
+ return SPEC_CVAL (val->etype).v_ulong;
+
+ /* we are lost ! */
+ werror (E_INTERNAL_ERROR, __FILE__, __LINE__, "ulFromVal: unknown value");