orpie man page

orpie is a console-based RPN calculator with an interactive visual stack.

Synopsis

orpie

Quick Start

CAUTION: while this manpage should be suitable as a quick reference, it may  be subject to miscellaneous shortcomings in typesetting. The definitive  documentation is the user manual provided with Orpie in PDF format.

This section describes how to use Orpie in its default configuration. After  familiarizing yourself with the basic operations as outlined in this section,  you may wish to consult  the orpierc(5) manpage  to see how Orpie can be configured to better fit your needs.

Overview

The interface has two  panels. The left panel combines status information with context-sensitive help;  the right panel represents the calculator's stack. (Note that the left panel  will be hidden if Orpie is run in a terminal with less than 80 columns.)

In general, you perform calculations by first entering data on to the stack,  then executing functions that operate on the stack data. As an example, you can  hit 1<enter>2<enter>+ in order to add 1 and 2.

Entering Real Numbers

To enter a real number, just type the desired digits and hit enter. The space  bar will begin entry of a scientific notation exponent. The 'n' key is used  for negation. Here are some examples:

Keypresses Resulting Entry  
1.23<enter> 1.23  
1.23<space>23n<enter> 1.23e-23  
1.23n<space>23<enter> -1.23e23  

Entering Complex Numbers

Orpie can represent complex numbers using either cartesian (rectangular) or  polar coordinates. See  PERFORMING BASIC COMMAND OPERATIONS  to see how to change the complex number display mode.

A complex number is entered by first pressing '(', then entering the real  part, then pressing ',' followed by the imaginary part. Alternatively, you  can press '(' followed by the magnitude, then '<' followed by the  phase angle. The angle will be interpreted in degrees or radians, depending on  the current setting of the angle mode  (see PERFORMING BASIC COMMAND OPERATIONS).  Examples:

Keypresses Resulting Entry  
(1.23, 4.56<enter> (1.23, 4.56)  
(0.7072<45<enter> (0.500065915655126, 0.50006591...  
(1.23n,4.56<space>10<enter> (-1.23, 45600000000)  

Entering Matrices

You can enter matrices by pressing '['. The elements of the matrix may then be  entered as described in the previous sections, and should be separated using  ','. To start a new row of the matrix, press '[' again. On the  stack, each row of the matrix is enclosed in a set of brackets; for example, the  matrix

1 2  
3 4

would appear on the stack as [[1, 2][3, 4]].

Examples of matrix entry:

Keypresses Resulting Entry  
[1,2[3,4<enter> [[1, 2][3, 4]]  
[1.2<space>10,0[3n,5n<enter> [[ 12000000000, 0 ][ -3, -5 ]]  
[(1,2,3,4[5,6,7,8<enter> [[ (1, 2), (3, 4) ][ (5, 6), (...  

Entering Data with Units

Real and complex scalars and matrices can optionally be labeled with units. After typing  in the numeric portion of the data, press '_' followed by a units string. The format  of units strings is described in  the Units Formatting section.

Examples of entering dimensioned data:

Keypresses Resulting Entry  
1.234_N*mm^2/s<enter> 1.234_N*mm^2*s^-1
(2.3,5_s^-4<enter> (2.3, 5)_s^-4
[1,2[3,4_lbf*in<enter> [[ 1, 2 ][ 3, 4 ]]_lbf*in  
_nm<enter> 1_nm  

Entering Exact Integers

An exact integer may be entered by pressing '#' followed by the desired  digits. The base of the integer will be assumed to be the same as the current  calculator base mode (see  PERFORMING BASIC COMMAND OPERATIONS  to see how to set this mode).  Alternatively, the desired base may be specified by pressing space and appending  one of {b, o, d, h}, to represent binary, octal, decimal, or hexadecimal,  respectively. On the stack, the representation of the integer will be changed  to match the current base mode. Examples:

Keypresses Resulting Entry  
#123456<enter> # 123456`d  
#ffff<space>h<enter> # 65535`d  
#10101n<space>b<enter> # -21`d  

Note that exact integers may have unlimited length, and the basic arithmetic  operations (addition, subtraction, multiplication, division) will be performed  using exact arithmetic when both arguments are integers.

Entering Variable Names

A variable name may be entered by pressing '@' followed by the desired  variable name string. The string may contain alphanumeric characters, dashes, and  underscores. Example:

Keypresses Resulting Entry  
@myvar @ myvar

Orpie also supports autocompletion of variable names. The help panel displays a  list of pre-existing variables that partially match the name currently being entered.  You can press '<tab>' to iterate through the list of matching variables.

As a shortcut, keys <f1>-<f4> will enter the variables (“registers”)  @ r01 through @ r04.

Entering Physical Constants

Orpie includes definitions for a number of fundamental physical constants. To  enter a constant, press 'C', followed by the first few letters/digits  of the constant's symbol, then hit enter. Orpie offers an autocompletion  feature for physical constants, so you only need to type enough of the constant  to identify it uniquely. A list of matching constants will appear in the left  panel of the display, to assist you in finding the desired choice.

The following is a list of Orpie's physical constant symbols:

Symbol Physical Constant  
NA Avagadro's number  
k Boltzmann constant  
Vm molar volume  
R universal gas constant  
stdT standard temperature  
stdP standard pressure  
sigma Stefan-Boltzmann constant  
c speed of light  
eps0 permittivity of free space  
u0 permeability of free space  
g acceleration of gravity  
G Newtonian gravitational constant  
h Planck's constant  
hbar Dirac's constant  
e electron charge  
me electron mass  
mp proton mass  
alpha fine structure constant  
phi magnetic flux quantum  
F Faraday's constant  
Rinf “infinity” Rydberg constant  
a0 Bohr radius  
uB Bohr magneton  
uN nuclear magneton  
lam0 wavelength of a 1eV photon  
f0 frequency of a 1eV photon  
lamc Compton wavelength  
c3 Wien's constant  

All physical constants are defined in the Orpie run-configuration file; consult  the orpierc(5) manpage  if you wish to define your own constants or change the existing definitions.

Entering Data with an External Editor

Orpie can also parse input entered via an external editor. You may find this to be  a convenient method for entering large matrices. Pressing 'E' will  launch the external editor, and the various data types may be entered as illustrated  by the examples below:

Data Type Sample Input String  
exact integer #12345678`d, where the trailing
letter is one of the base characters {b, o, d, h}  
real number -123.45e67  
complex number (1e10, 2) or (1 <90)  
real matrix [[1, 2][3.1, 4.5e10]]  
complex matrix [[(1, 0), 5][1e10, (2 <90)]]  
variable @myvar  

Real and complex numbers and matrices may have units appended; just add a units  string such as “_N*m/s” immediately following the numeric portion  of the expression.

Notice that the complex matrix input parser is quite flexible; real and complex  matrix elements may be mixed, and cartesian and polar complex formats may be  mixed as well.

Multiple stack entries may be specified in the same file, if they are separated  by whitespace. For example, entering (1, 2) 1.5 into the editor will cause  the complex value (1, 2) to be placed on the stack, followed by the real  value 1.5.

The input parser will discard whitespace where possible, so feel free to add  any form of whitespace between matrix rows, matrix elements, real and complex  components, etc.

Executing Basic Function Operations

Once some data has been entered on the stack, you can apply operations to that  data. For example, '+' will add the last two elements on the stack. By  default, the following keys have been bound to such operations:

Keys Operations  
+ add last two stack elements  
- subtract element 1 from element 2  
* multiply last two stack elements  
/ divide element 2 by element 1  
^ raise element 2 to the power of element 1  
n negate last element  
i invert last element  
s square root function  
a absolute value function  
e exponential function  
l natural logarithm function  
c complex conjugate function  
! factorial function  
% element 2 mod element 1  
S store element 2 in (variable) element 1  
; evaluate variable to obtain contents  

As a shortcut, function operators will automatically enter any data that you  were in the process of entering. So instead of the sequence  2<enter>2<enter>+, you could type simply 2<enter>2+ and the second number  would be entered before the addition operation is applied.

As an additional shortcut, any variable names used as function arguments will  be evaluated before application of the function. In other words, it is not necessary  to evaluate variables before performing arithmetic operations on them.

Executing Function Abbreviations

One could bind nearly all calculator operations to specific keypresses, but this  would rapidly get confusing since the PC keyboard is not labeled as nicely as a  calculator keyboard is. For this reason, Orpie includes an  abbreviation syntax.

To activate an abbreviation, press ''' (quote key), followed by the  first few letters/digits of the abbreviation, then hit enter. Orpie offers an  autocompletion feature for abbreviations, so you only need to type enough of  the operation to identify it uniquely. The matching abbreviations will appear  in the left panel of the display, to assist you in finding the appropriate  operation.

To avoid interface conflicts, abbreviations may be entered only when the  entry buffer (the bottom line of the screen) is empty.

The following functions are available as abbreviations:

Abbreviations Functions  
inv inverse function  
pow raise element 2 to the power of element 1  
sq square last element  
sqrt square root function  
abs absolute value function  
exp exponential function  
ln natural logarithm function  
10^ base 10 exponential function  
log10 base 10 logarithm function  
conj complex conjugate function  
sin sine function  
cos cosine function  
tan tangent function  
sinh hyperbolic sine function  
cosh hyperbolic cosine function  
tanh hyperbolic tangent function  
asin arcsine function  
acos arccosine function  
atan arctangent function  
asinh inverse hyperbolic sine function  
acosh inverse hyperbolic cosine function  
atanh inverse hyperbolic tangent function  
re real part of complex number  
im imaginary part of complex number  
gamma Euler gamma function  
lngamma natural log of Euler gamma function  
erf error function  
erfc complementary error function  
fact factorial function  
gcd greatest common divisor function  
lcm least common multiple function  
binom binomial coefficient function  
perm permutation function  
trans matrix transpose  
trace trace of a matrix  
solvelin solve a linear system of the form Ax = b  
mod element 2 mod element 1  
floor floor function  
ceil ceiling function  
toint convert a real number to an integer type  
toreal convert an integer type to a real number  
add add last two elements  
sub subtract element 1 from element 2  
mult multiply last two elements  
div divide element 2 by element 1  
neg negate last element  
store store element 2 in (variable) element 1  
eval evaluate variable to obtain contents  
purge delete a variable  
total sum the columns of a real matrix  
mean compute the sample means of the columns of a real matrix  
sumsq sum the squares of the columns of a real matrix  
var compute the unbiased sample variances of the columns of a real matrix  
varbias compute the biased (population) sample variances of the columns of a real matrix  
stdev compute the unbiased sample standard deviations of the columns of a real matrix  
stdevbias compute the biased (pop.) sample standard deviations of the columns of a matrix  
min find the minima of the columns of a real matrix  
max find the maxima of the columns of a real matrix  
utpn compute the upper tail probability of a normal distribution  
uconvert convert element 2 to an equivalent expression with units matching element 1  
ustand convert to equivalent expression using SI standard base units  
uvalue drop the units of the last element  

Entering abbreviations can become tedious when performing repetitive calculations.  To save some keystrokes, Orpie will automatically bind recently-used operations with no prexisting  binding to keys <f5>-<f12>. The current autobindings can be viewed by pressing 'h'  to cycle between the various pages of the help panel.

Executing Basic Command Operations

In addition to the function operations listed in  the section Executing Basic Function Operations,  a number of basic calculator commands have been bound to single keypresses:

Keys Operations  
\ drop last element  
| clear all stack elements  
<pagedown> swap last two elements  
<enter> duplicate last element (when entry buffer is empty)  
u undo last operation  
r toggle angle mode between degrees and radians  
p toggle complex display mode between rectangular and polar  
b cycle base display mode between binary, octal, decimal, hex  
h cycle through multiple help windows  
v view last stack element in a fullscreen editor  
E create a new stack element using an external editor  
P enter 3.14159265 on the stack  
C-L refresh the display  
<up> begin stack browsing mode  
Q quit Orpie  

Executing Command Abbreviations

In addition to the function operations listed in  the section Executing Function Abbreviations,  there are a large number of calculator commands that  have been implemented using the abbreviation syntax:

Abbreviations Calculator Operation  
drop drop last element  
clear clear all stack elements  
swap swap last two elements  
dup duplicate last element  
undo undo last operation  
rad set angle mode to radians  
deg set angle mode to degrees  
rect set complex display mode to rectangular  
polar set complex display mode to polar  
bin set base display mode to binary  
oct set base display mode to octal  
dec set base display mode to decimal  
hex set base display mode to hexidecimal  
view view last stack element in a fullscreen editor  
edit create a new stack element using an external editor  
pi enter 3.14159265 on the stack  
rand generate a random number between 0 and 1 (uniformly distributed)  
refresh refresh the display  
about display a nifty “About Orpie” screen  
quit quit Orpie  

Browsing the Stack

Orpie offers a stack browsing mode to assist in viewing and manipulating  stack data. Press <up> to enter stack browsing mode; this should  highlight the last stack element. You can use the up and down arrow keys to  select different stack elements. The following keys are useful in stack  browsing mode:

Keys Operations  
q quit stack browsing mode  
<left> scroll selected entry to the left  
<right> scroll selected entry to the right  
r cyclically “roll” stack elements downward, below the selected element (inclusive)  
R cyclically “roll” stack elements upward, below the selected element (inclusive)  
v view the currently selected element in a fullscreen editor  
E edit the currently selected element with an external editor  
<enter> duplicate the currently selected element  

The left and right scrolling option may prove useful for viewing very lengthy  stack entries, such as large matrices. The edit option provides a convenient  way to correct data after it has been entered on the stack.

Units Formatting

A units string is a list of units separated by '*' to indicate multiplication  and '/' to indicate division. Units may be raised to real-valued powers  using the '^'character. A contrived example of a valid unit string would be  "N*nm^2*kg/s/in^-3*GHz^2.34".

Orpie supports the standard SI prefix set,  {y, z, a, f, p, n, u, m, c, d, da, h, k, M, G, T, P, E, Z, Y}  (note the use of 'u' for micro-). These prefixes may be applied  to any of the following exhaustive sets of units:

String Length Unit  
m meter  
ft foot  
in inch  
yd yard  
mi mile  
pc parsec  
AU astronomical unit  
Ang angstrom  
furlong furlong  
pt PostScript point  
pica PostScript pica  
nmi nautical mile  
lyr lightyear  
String Mass Unit  
g gram  
lb pound mass  
oz ounce  
slug slug  
lbt Troy pound  
ton (USA) short ton  
tonl (UK) long ton  
tonm metric ton  
ct carat  
gr grain  
String Time Unit  
s second  
min minute  
hr hour  
day day  
yr year  
Hz Hertz  
String Temperature Unit  
K Kelvin  
R Rankine  

Note: No, Celsius and Fahrenheit will not be supported. Because these  temperature units do not share a common zero point, their behavior is  ill-defined under many operations.

String “Amount of Substance” Unit  
mol Mole  
String Force Unit  
N Newton  
lbf pound force  
dyn dyne  
kip kip  
String Energy Unit  
J Joule  
erg erg  
cal calorie  
BTU british thermal unit  
eV electron volt  
String Electrical Unit  
A Ampere  
C Coulomb  
V volt  
Ohm Ohm  
F Farad  
H Henry  
T Tesla  
G Gauss  
Wb Weber  
Mx Maxwell  
String Power Unit  
W Watt  
hp horsepower  
String Pressure Unit  
Pa Pascal  
atm atmosphere  
bar bar  
Ohm Ohm  
mmHg millimeters of mercury  
inHg inches of mercury  
String Luminance Unit  
cd candela  
lm lumen  
lx lux  

Note: Although the lumen is defined by  1_lm = 1_cd * sr, Orpie drops the steridian because it is  a dimensionless unit and therefore is of questionable use to a calculator.

String Volume Unit  
ozfl fluid ounce (US)  
cup cup (US)  
pt pint (US)  
qt quart (US)  
gal gallon (US)  
L liter  

All units are defined in the Orpie run-configuration file; consult  the orpierc(5) manpage  if you wish to define your own units or change the existing definitions.

Licensing

Orpie is Free Software; you can redistribute it and/or modify it under the  terms of the GNU General Public License (GPL), Version 2, as published by the  Free Software Foundation. You should have received a copy of the GPL along  with this program, in the file “COPYING”.

Credits

Orpie includes portions of the  ocamlgsl [1]  bindings supplied by Olivier Andrieu, as well as the curses bindings from the  OCaml Text Mode Kit [2]  written by Nicolas George. I would like to thank these authors for helping to  make Orpie possible.

Contact Info

Orpie author: Paul Pelzl <pelzlpj@gmail.com>
Orpie website: http://pessimization.com/software/orpie

Feel free to contact me if you have bugs, feature requests, patches, etc. I  would also welcome volunteers interested in packaging Orpie for various platforms.

References

[1] http://oandrieu.nerim.net/ocaml/gsl/
[2] http://www.nongnu.org/ocaml-tmk/
[3] http://www.gnu.org/software/gnu-arch/.

See Also

orpierc(5), orpie-curses-keys(1)

Referenced By

orpie-curses-keys(1), orpierc(5).

11 April 2014 a console-based RPN calculator