# Reverse Polish Notation language - This project plans to create a clone of **Hewlett Packard RPN calculator language**, including at least STACK, STORE, BRANCH, TEST, TRIG and LOGS commands of HP28S RPL implementation. - Inspired by Hewlett-Packard RPL language. **HP28S** user manual is provided as a reference. - Following objects are managed: numbers, binaries, symbols, strings, programs, plus keywords (ie langage commands and flow controls). - The special feature of this language is to make no difference between keywords and functions, even user functions. - Numbers (ie scalars) are in 128-bit quadruple precision format (long double). Binaries are 64-bits longwords format (long long int). - A GNU-readline-based interactive editor with autocompletion is provided. - Language extensions will soon be included: - file objects and functions, - date and time objects and functions, - shell-calling objects with return code, stdout and stderr treatment, - loading and saving stack, variables, programs from / to filesystem ## Implemented commands This commands list match HP28s reserved words. Commands marked as 'new' do not exist in HP28s. | category | command | new | implemented | tested | | -------- | ------- | --- | ----------- | ------ | | GENERAL | nop |yes| yes| yes| | GENERAL | help/h/? | yes | yes| | | GENERAL | quit/exit/q| yes| yes| | | GENERAL | test | yes | yes| | | GENERAL | verbose | yes | yes| | | GENERAL | std | | yes| | | GENERAL | fix | | yes| | | GENERAL | sci | | yes| | | GENERAL | version | yes | yes| | | GENERAL | uname | yes | yes| | | GENERAL | edit | | yes| | | REAL | + | | yes| | | REAL | - | | yes| | | REAL | neg | | yes| | | REAL | * | | yes| | | REAL | / | | yes| | | REAL | inv | | yes| | | REAL | % | | yes| | | REAL | %CH | | yes| | | REAL | ^ | | yes| | | REAL | sqrt | yes | yes| | | REAL | sq | yes | yes| | | REAL | mod |yes| yes| | | STACK | drop | | yes| | | STACK | swap | | yes| | | STACK | roll | | | | | STACK | dup | | yes| | | STACK | over | | | | | STACK | dup2 | | yes| | | STACK | drop2 | | yes| | | STACK | rot | | yes| | | STACK | list-> | | | | | STACK | rolld | | | | | STACK | pick | | yes| | | STACK | dupn | | | | | STACK | dropn | | | | | STACK | depth | | yes| | | STACK | ->list | | | | | STACK | load_store | yes | yes| | | STACK | save_store | yes | yes| | | STORE | sto | | yes | | | STORE | rcl | | yes | | | STORE | purge | | yes | | | STORE | sto+ | | | | | STORE | sto- | | | | | STORE | sto* | | | | | STORE | sto/ | | | | | STORE | sneg | | | | | STORE | sinv | | | | | STORE | sconj | | | | | STORE | erase | | yes | yes | | STORE | vars | | yes | yes | | STORE | include | | | | | STORE | load_vars | yes | | | | STORE | save_vars | yes | | | | PROGRAM | eval | | yes | | | PROGRAM | load_prog | yes | | | | PROGRAM | save_prog | yes | | | | ALGEBRA | neg | | yes | yes | | ALGEBRA | colct | | | | | ALGEBRA | expan | | | | | ALGEBRA | size | | | | | ALGEBRA | form | | | | | ALGEBRA | obsub | | | | | ALGEBRA | exsub | | | | | ALGEBRA | taylr | | | | | ALGEBRA | isol | | | | | ALGEBRA | quad | | | | | ALGEBRA | show | | | | | ALGEBRA | obget | | | | | ALGEBRA | exget | | | | | BINARY | + | | yes | yes | | BINARY | - | | yes | yes | | BINARY | * | | yes | yes | | BINARY | / | | yes | yes | | BINARY | dec | | yes | yes | | BINARY | hex | | yes | yes | | BINARY | oct | | yes | yes | | BINARY | bin | | yes | yes | | BINARY | stws | | | | | BINARY | rcws | | | | | BINARY | rl | | | | | BINARY | rr | | | | | BINARY | rlb | | | | | BINARY | rrb | | | | | BINARY | r->b | | yes | yes | | BINARY | b->r | | yes | yes | | BINARY | sl | | | | | BINARY | sr | | | | | BINARY | slb | | | | | BINARY | srb | | | | | BINARY | asr | | | | | BINARY | and | | yes | yes | | BINARY | or | | yes | yes | | BINARY | xor | | yes | yes | | BINARY | not | | yes | yes | | STRING | + | | yes | | | STRING | ->str | | yes | | | STRING | str-> | | yes | | | STRING | chr | | | | | STRING | num | | | | | STRING | ->lcd | | | | | STRING | lcd-> | | | | | STRING | pos | | | | | STRING | sub | | | | | STRING | size | | | | | STRING | disp | | | | | BRANCH | | BRANCH | if | | yes | yes | | BRANCH | then | | yes | yes | | BRANCH | else | | yes | yes | | BRANCH | end | | yes | yes | | BRANCH | start | | yes | yes | | BRANCH | for | | yes | yes | | BRANCH | next | | yes | yes | | BRANCH | step | | yes | yes | | BRANCH | ift | | | | | BRANCH | ifte | | | | | BRANCH | do | | | | | BRANCH | until | | | | | BRANCH | end | | | | | BRANCH | while | | | | | BRANCH | repeat | | | | | BRANCH | end | | | | | TEST | != | | yes | | | TEST | > | | yes | | | TEST | >= | | yes | | | TEST | < | | yes | | | TEST | <= | | yes | | | TEST | sf | | | | | TEST | cf | | | | | TEST | fs? | | | | | TEST | fc? | | | | | TEST | fs?c | | | | | TEST | fc?c | | | | | TEST | and | | yes | | | TEST | or | | yes | | | TEST | xor | | yes | | | TEST | not | | yes | | | TEST | same | | yes | | | TEST | == | | yes | | | TEST | stof | | | | | TEST | rclf | | | | | TEST | type | | | | | TRIG | pi | | yes | yes | | TRIG | sin | | yes | | | TRIG | asin | | yes | | | TRIG | cos | | yes | | | TRIG | acos | | yes | | | TRIG | tan | | yes | | | TRIG | atan | | yes | | | TRIG | p->r | | | | | TRIG | r->p | | | | | TRIG | r->c | | | | | TRIG | c->r | | | | | TRIG | arg | | | | | TRIG | ->hms | | | | | TRIG | hms-> | | | | | TRIG | hms+ | | | | | TRIG | hms- | | | | | TRIG | d->r | | yes | | | TRIG | r->d | | yes | | | LOGS | log | | yes | | | LOGS | alog | | yes | | | LOGS | ln | | yes | | | LOGS | exp | | yes | | | LOGS | lnp1 | | | | | LOGS | expm | | | | | LOGS | sinh | | yes | | | LOGS | asinh | | yes | | | LOGS | cosh | | yes | | | LOGS | acosh | | yes | | | LOGS | tanh | | yes | | | LOGS | atanh | | yes | | | ## HP28s commands which won't be implemented **MEMORY** mem, menu, order, path, home, crdir, clusr, **STAT** ∑dat, ∑par, ∑+, ∑-, n∑, cl∑, sto∑, rcl∑, tot, mean, sdev, var, max∑, min∑, col∑, corr, cov, lr, predev, utpc, utpf, utpn, utpt, comb, perm **PRINT** pr1, prst, prvar, prlcd, cr, trac, prstc, prusr, prmd **SOLV** steq, rceq, isol, quad, show, root, **PLOT** ppar, steq, rceq, pmin, pmax, indep, draw, res, axes, centr, \*w, \*h, sto∑, rcl∑, col∑, scl∑, drw∑, cllcd, digtiz **CURSOR** ins, del, ← → ↑ ↓, cmd, undo, last, ml, rdx, prmd **CONTRL** sst, halt, abort, kill, wait, key, bepp, cllcd, disp, clmf, errn, errm **CATALOG** next, prev, scan, use, fetch, quit **UNITS** convert **CUSTOM** menu, custom ## Notes Compiled with g++ Makefile generated by automake. External dependencies needed: automake, readline (libreadline-dev)