DEFINITION MODULE microuiHelpers; (* Utility procedures for the microui Modula-2 port. Bitwise operations on CARDINAL (ISO M2 has none), real-to-string formatting for the widget labels, and a basic strtod replacement. Compilation (from modula2/): gm2 -fiso -I. -c microuiHelpers.mod *) FROM SYSTEM IMPORT ADDRESS, BYTE; PROCEDURE BITAND(a, b : CARDINAL) : CARDINAL; PROCEDURE BITOR(a, b : CARDINAL) : CARDINAL; PROCEDURE BITXOR(a, b : CARDINAL) : CARDINAL; PROCEDURE BITNOT(a : CARDINAL) : CARDINAL; PROCEDURE BITLSL(a, n : CARDINAL) : CARDINAL; PROCEDURE BITASR(a, n : CARDINAL) : CARDINAL; PROCEDURE HasFlag(val, flag : CARDINAL) : BOOLEAN; PROCEDURE HasNoFlag(val, flag : CARDINAL) : BOOLEAN; PROCEDURE StrLen(s : ARRAY OF CHAR) : CARDINAL; PROCEDURE CopyBytes(src, dst : ADDRESS; len : CARDINAL); (* Conversions from the integer types to SHORTREAL. GNU Modula-2 16.0.1 miscompiles the type conversion SHORTREAL(x) for an integer x (it yields 0), so these helpers go through the standard FLOAT function and assign the result to a SHORTREAL. *) PROCEDURE IntToReal(n : INTEGER) : SHORTREAL; PROCEDURE CardToReal(n : CARDINAL) : SHORTREAL; (* Real-to-string: formats val into buf. prec < 0: %g style (prec = number of significant digits, up to 6). prec >= 0: fixed-point with prec decimal places. Returns the number of characters written (excluding NUL). *) PROCEDURE RealToStr(VAR buf : ARRAY OF CHAR; val : SHORTREAL; prec : INTEGER) : CARDINAL; (* Integer-to-string for "%d" style. *) PROCEDURE IntToStr(VAR buf : ARRAY OF CHAR; val : INTEGER) : CARDINAL; (* Hex to-string for "%02X" style (2-digit uppercase hex). *) PROCEDURE HexByte(VAR buf : ARRAY OF CHAR; val : CARDINAL) : CARDINAL; (* Minimal strtod: parses a decimal floating-point number from s. endptr receives the first character not consumed (may be NIL). *) PROCEDURE StrToReal(s : ARRAY OF CHAR; endptr : ADDRESS) : SHORTREAL; END microuiHelpers.