create procedure lib_math_int_to_base ( val_in bigint, base_in smallint, cap_in smallint) returns ( strg_out varchar(63)) as declare variable val_mod smallint; begin /* convert bigint (cardinal 0..2^63-1) to base-n (n=2..16) string cap_in (capitalisation): 0/1: lower/upper case characters in base-n string */ if ( (val_in is null) or (val_in < 0) or (base_in is null) or (base_in < 2) or (16 < base_in) or (cap_in is null) or (cap_in < 0) or (1 < cap_in)) then strg_out = null; /* or: raise exception 'invalid parameter' */ else begin strg_out = ''; while (val_in <> 0) do begin execute procedure lib_math_div_mod :val_in, :base_in returning_values :val_in, :val_mod; if (val_mod = 10) then strg_out = 'a' || strg_out; else if (val_mod = 11) then strg_out = 'b' || strg_out; else if (val_mod = 12) then strg_out = 'c' || strg_out; else if (val_mod = 13) then strg_out = 'd' || strg_out; else if (val_mod = 14) then strg_out = 'e' || strg_out; else if (val_mod = 15) then strg_out = 'f' || strg_out; else strg_out = val_mod || strg_out; end if (strg_out = '') then strg_out = '0'; if (cap_in = 1) then strg_out = upper( strg_out); end suspend; end