XP(1): evaluate expressions __________________________________________________ USAGE usage: xp [-DFLYqu] [expr] -D: debug -F: report known functions and exit -L: debug lex -Y: debug yacc -q: do not print values as they are evaluated -u: use unix out DESCRIPTION Xp evaluates the expression given as an argument, or those in its standard input if none is given. When using standard input, each line is parsed and evaluated as a single expression. The expressions may involve file attributes. Thus, xp replaces the venerable UNIX test command. The usual arithmetic and logic operators can be used, Values in operations are considered as unsigned integers, integers, floating point numbers, strings, or booleans, depending on the context. The following functions are known to xp, all operate on floating point numbers: abs asin atanh cosh floor log2 sqrt trunc acos asinh cbrt exp log sin tan Γ acosh atan cos exp2 log10 sinh tanh A name that starts with '%' is considered a conversion for Printf and can be used as a function to print the argument with such conversion. Any name that is not a function name and is not a conversion can be used as a function to ask for the value of a file attribute with such name. The names r, w, and x can be used as attribute names and evaluate to a boolean value indicating if the file has any of the read, write, or execute permissions set. Text enclosed in double quotes is understood always as a name. Also, after calling a file attribute as a function, the next non-blank word is understood as a name, including characters like /, -, etc., which would become operators in other places. This is a helper to specify file paths in a convenient way. A string in square brackets represents a time. This can be used with the relational operators to compare against attributes that indicate times. The string may use any format understood by the [cmd/opt(2)] package. If the last computed yields a value of true the command exits with success, and if it is false with failure. This, along with flag -q, is useful to evaluate expressions as shell conditions without printing their value. EXAMPLES See if the length of the file is greater than 3 Mbytes and print y if it is. ; xp -q size afile '>' 3m && echo y Print the mtime for a file ; xp mtime afile 2015-05-08 11:35:28 See if the file was changed since 2013-01-02 3pm ; xp mtime afile '>' '[2013-01-02 3pm]' false Print 4KiB as a 32bit binary number [ ; xp '%064b (4 1024)' 00000000000000000001000000000000 ] SOURCE +o [/zx/sys/src/clive/cmd/xp[ __________________________________________________ User's manual. Section 1. Copyright © LSUB 2014-2016