Tollos – tollosUtil.c  
Libraries
Background

tollosUtil.c – useful macros and functions for Tollos The macros are defined in tollosUtil.h, and are:
abs(x) – return the absolute value of x deg2rad(d) – degrees to radians iswap(x,y) – swap the values of the ints x and y using XOR max(a,b) – return the larger of x and y min(a,b) – return the smaller of x and y rad2deg(r) – radians to degrees signum(x) – return the sign of x (−1, 0, or 1) The functions have various purposes.
byte2hex – convert a byte to two hex chars void byte2hex(byte b, char *hex, flag upper);
b – byte to convert hex – points to where ASCII bytes should go upper – 1 to use ABCDEF, 0 for abcdef This writes only the two characters; no terminating zero char is added. No error is possible. fastrand – return a random number in the range 0 to n−1 int fastrand(uint n, uint *seed);
n – defines the random number range seed – static or persistent seed
returns the pseudorandom number n should be <30,000,000; the seed is provided by the caller initially but should not then be altered by the caller. This uses the conventional X(n+1)=mod((A*X(n) + C),M) as used in the Rexx function package, but without some refinements. The values for A and M are from the table in D.E.Knuth’s book, “Seminumerical Algorithms”, AddisonWesley, 1981, page 102 (section 3.3.2). These particular values are attributed to Lavaux and Janssens.
hex2byte – convert two hexadecimal characters to a byte int hex2byte(char *hex, byte *b);
hex – points to two ASCII bytes b – points to byte which will receive the converted hexadecimal; set to 0x00 if error
returns 0 if OK, −1 if error This accepts both uppercase and lowercase A>F and a>f. isqrtg – return the square root of an int, with guess int isqrtg(int num, int guess);
num – the number to square root guess – is the number to converge from (e.g., last similar result); if < 1, isqrtg will make the first guess
returns the integer square root of num, such that result*result < num; if num is less than zero then 0 is returned Note: the maximum input value is 2**31−1 (2147483647) hence the maximum possible returned value is 46340. i2str – layout an integer as a string int i2str(char *string, int num, int len);
string – where to layout the integer num – the integer to lay out (not 0x80000000) len – width of the field (string) to lay out into
returns 0 if OK, 1 if overflow (does not fit) This writes num rightaligned and signed in the string field. No terminating zero char is written. nop – do nothing with an int int nop(int i);
i – an integer
returns i This is used for placating compilers when parameters are intentionally or temporarily unused. streq – caseless string compare int streq(const char *char1, const char *char2);
char1 – first string to compare char2 – second string
returns 1 if the strings caselesscompare equal, 0 otherwise If both strings are empty they are equal. strf – a reentrant mini printf to send a formatted string int strf(putter putC, const char *format, va_list args);
putC – the function to which to send formatted characters format – format and data string args – list of other arguments as required
returns the number (count) of characters sent The following format indicators are supported:
%% – ‘%’ %c – single char %d, i – signed int %m – minidec decimal number [iff MINIDEC is defined] %s – string %u – unsigned int %x, X – hexadecimal %\n – LF only (otherwise \n becomes CRLF) The five printf format flags (+  0 # and space) are supported for all formats as in C99 (e.g., # only affects ‘x’, here). The ‘h’, ‘l’, and ‘L’ modifiers are not supported. Field width (e.g., %10i, %08x) is supported for all formats. Field precision (e.g., %5.7i) is not supported; for decimals, use Quantize on a number to set its ‘precision’. A \n in the string is expanded to \r\n unless preceded by %. Almost no error checking is carried out, so, for example, the flags and field width can be used even if the format character is not one of those listed; the format character then appears in the output. 
Tollos and these web pages were written by Mike Cowlishaw; Please send me any corrections, suggestions, etc.  
All content © Mike Cowlishaw, 2010–2012, except where marked
otherwise. All rights reserved. The pages here are for noncommercial
use only (see the separate licence for Tollos source code).
Privacy policy: the Speleotrove website
records no personal information and sets no ‘cookies’.
However, statistics, etc. might be recorded by the web hosting
service.
This page was last updated on 20111118 by c2wiki. 