xrpn 1.3.5 → 1.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +10 -3
  3. data/bin/xrpn +28 -5
  4. data/xlib/_xrpn_version +1 -1
  5. data/xrpn.gemspec +2 -2
  6. metadata +5 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a270f73ff7966f8a5f28def1881aca7cbccd491fbd17e6f8be18a0a8ad423319
4
- data.tar.gz: e1aa37a38e2ce9b9ebc7561053374fe0ed78b45c2a4e069047a5e96953f0700f
3
+ metadata.gz: 6eaeb18f29172b8e96f6f06ef04d3be02c30296f13b3f7f67a30fae7791ba464
4
+ data.tar.gz: d5807637849f72490dd5ec06357d3b7f8de1024850dd87954fdf2d69e1cdb6b8
5
5
  SHA512:
6
- metadata.gz: 17429308f52f6dc00b1b2ff7ce2ef8cb4fda18326e8eec0ba902c39b222d6b75792da79f6a5769dc1cd45925982204850ced2e1ccd91afcb6da771ed14a20ef0
7
- data.tar.gz: a65735d8ff489cc55567850697e4d7a9c7748a6de7e9a130886c6d4c858234496370fe5f18accd306df2306972c66bb948889100df9369b74f9f0e4795e04a30
6
+ metadata.gz: d150e537776c8ffb9a0e1324a132b9fece173abbea78b23b329b082774d07da3e80d028a0098edf59655a10b983cc65df063ff5c57e8795c28e75a86756bb530
7
+ data.tar.gz: ac92b3b15c37ddb86b921a4fbfa30ff3ac38237325747a1cd4b5ebcfce85bbd23634b284af332c76ebc7366457baa02ad86e9868fb5a879d726a1cc8d786a248
data/README.md CHANGED
@@ -1,4 +1,5 @@
1
1
  # XRPN
2
+ ![Ruby](https://img.shields.io/badge/language-Ruby-red) ![Unlicense](https://img.shields.io/badge/license-Unlicense-green) ![Stay Amazing](https://img.shields.io/badge/Stay-Amazing-important)
2
3
 
3
4
  ## Introduction
4
5
 
@@ -25,10 +26,11 @@ To run XRPN, make sure the program file ("bin/xrpn") is copied or linked to a di
25
26
  The full synopsis goes like this:
26
27
  ```
27
28
  Usage: xrpn [options]
28
- -f, --file XRPN-file Specify the file to process
29
- -l, --load XRPN-file Specify a file to load, but not run
29
+ -e, --execute string Interpret string as program and run
30
+ -f, --file program Specify the file to process
31
+ -l, --load program(s) File(s) to load, but not run
30
32
  -s, --state STATE Load a State file
31
- -c, --check program Program file to check for errors
33
+ -c, --check program Program file to check for errors
32
34
  -x, --X X-value Set initial value in the X register
33
35
  -y, --Y Y-value Set initial value in the Y register
34
36
  -z, --Z Z-value Set initial value in the Z register
@@ -38,6 +40,11 @@ Usage: xrpn [options]
38
40
  --help Display LONG help text
39
41
  -v, --version Display the XRPN version number
40
42
  ```
43
+ A program can be run by supplying a program file (option -f), by supplying a string with commands separated by commas (option -e) or by starting xrpn without any options and keying in the program manually.
44
+
45
+ Using the -eoption, you could do e.g. `xrpn -e "43, sin, 1/x, prx"`.
46
+
47
+ You can also pipe a string into xrpn like this: `echo "1,2,+,4,/,prx" | xrpn`.
41
48
 
42
49
  ## FOCAL and the HP-41 system
43
50
 
data/bin/xrpn CHANGED
@@ -1,5 +1,19 @@
1
1
  #!/usr/bin/env ruby
2
2
  # encoding: utf-8
3
+ #
4
+ # SCRIPT INFO
5
+ # Name: XRPN - eXtended Reverse Polish Notation programming language
6
+ # Language: Pure Ruby, best viewed in VIM
7
+ # Author: Geir Isene <g@isene.com>
8
+ # Web_site: http://isene.com/
9
+ # Github: https://github.com/isene/xrpn
10
+ # License: I release all copyright claims. This code is in the public domain.
11
+ # Permission is granted to use, copy modify, distribute, and sell
12
+ # this software for any purpose. I make no guarantee about the
13
+ # suitability of this software for any purpose and I am not liable
14
+ # for any damages resulting from its use. Further, I am under no
15
+ # obligation to maintain or extend this software. It is provided
16
+ # on an 'as is' basis without any expressed or implied warranty.
3
17
 
4
18
  # GET EXTENSIONS
5
19
  require 'optparse'
@@ -33,6 +47,7 @@ optparse = OptionParser.new do |opts|
33
47
  opts.banner = "Usage: xrpn [options]"
34
48
 
35
49
  # Define the options, and what they do
50
+ opts.on('-e', '--execute string', 'Interpret string as program and run') { |e| $exe = e }
36
51
  opts.on('-f', '--file program', 'Specify the file to process') { |f| $rfile = f }
37
52
  opts.on('-l', '--load program(s)', Array, 'File(s) to load, but not run') { |l| $lfile = l }
38
53
  opts.on('-s', '--state STATE', 'Load a State file') { |s| $sfile = s }
@@ -48,6 +63,10 @@ optparse = OptionParser.new do |opts|
48
63
  end
49
64
  optparse.parse!
50
65
 
66
+ # HANDLE INPUT FROM STDIN (PIPE) OR STRING VIA -e
67
+ input = (STDIN.tty?) ? '' : $stdin.read
68
+ $exe = input unless input == ''
69
+
51
70
  # INITIALIZE CLASS
52
71
  @p = XRPN.new($rfile)
53
72
 
@@ -58,7 +77,8 @@ load(Dir.home+'/.xrpn/conf') if File.exist?(Dir.home+'/.xrpn/conf')
58
77
  @p.x, @p.y, @p.z, @p.t, @p.a = @x, @y, @z, @t, @a
59
78
 
60
79
  # INITIALIZE XRPN PROGRAM
61
- @p.prg[@p.pg] = ["LBL \"XRPN\"", "END"] unless $rfile # Put dummy program in page 0 if no file to run
80
+ @p.prg[@p.pg] = ["LBL \"XRPN\"", "END"] # Put dummy program in page 0 if no file/string to run
81
+ @p.prg[@p.pg] = hp_41($exe.split(",")) if $exe # Read in string as program is supplied by -e/--execute
62
82
  @p.prg[@p.pg] = hp_41(@p.prg[@p.pg]) if $rfile # Substitute HP-41 commands with XRPN commands
63
83
  if $lfile # Read file to load but not run if -l switch is used
64
84
  $lfile.each_with_index do |f, i|
@@ -66,6 +86,8 @@ if $lfile # Read file to load but
66
86
  @p.prg[i] = hp_41(@p.prg[i])
67
87
  end
68
88
  end
89
+ @p.prg[@p.pg].push("END") unless @p.prg[@p.pg].last.upcase == "END"
90
+
69
91
  read_state($sfile) if $sfile # Read state file in ~.xrpn/ if -s switch is used
70
92
  $debug = true if $lfile or $sfile # Do not run loaded program or program in state file
71
93
 
@@ -88,13 +110,13 @@ until @p.pc == @p.prg[@p.pg].length do
88
110
  @p.x = @line.to_f
89
111
  @p.flg["22"] = true # Number has been entered
90
112
  @p.flg["23"] = false
91
- elsif @line.match(/^>?".*"/) # If an Alpha string is supplied
92
- if @line.match(/^"\|/)
113
+ elsif @line.match(/^>?["'].*["']/) # If an Alpha string is supplied
114
+ if @line.match(/^["']\|/)
93
115
  @p.a += @line.sub(/\|-?/, '').gsub(/\"/, '') # Append to Alpha if "|abc", "|-abc"
94
- elsif @line.match(/^>"/)
116
+ elsif @line.match(/^>["']/)
95
117
  @p.a += @line.sub(/>/, '').gsub(/\"/, '') # Append to Alpha if >"abc"
96
118
  else
97
- @p.a = @line.gsub(/\"/, '') # ...or set Alpha to the supplied string
119
+ @p.a = @line.gsub(/["']/, '') # ...or set Alpha to the supplied string
98
120
  end
99
121
  @p.flg["22"] = false
100
122
  @p.flg["23"] = true # String has been entered
@@ -106,6 +128,7 @@ until @p.pc == @p.prg[@p.pg].length do
106
128
  l1 = "" if l1 == nil
107
129
  if not $cmd.include?(l1.downcase) # Catch unknown command
108
130
  puts "No such command: #{l1}"
131
+ exit if $exe
109
132
  @p.stop
110
133
  elsif XRPN.method_defined?(l1.downcase) # Or execute the command with either 1 or 2 parts
111
134
  begin
data/xlib/_xrpn_version CHANGED
@@ -1,5 +1,5 @@
1
1
  def xrpn_version
2
- puts "XRPN version: 1.3"
2
+ puts "XRPN version: 1.6"
3
3
  end
4
4
 
5
5
  # vim:ft=ruby:
data/xrpn.gemspec CHANGED
@@ -1,9 +1,9 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'xrpn'
3
- s.version = '1.3.5'
3
+ s.version = '1.6'
4
4
  s.licenses = ['Unlicense']
5
5
  s.summary = "XRPN - The eXtended RPN (Reverse Polish Notation) programming language"
6
- s.description = "A full programming language and environment extending the features of the venerable HP calculator programmable calculators. With XRPN you can accomplish a wide range of modern programming tasks as well as running existing HP-41 FOCAL programs directly. XRPN gives modern life to tens of thousands of old HP calculator programs and opens the possibilities to many, many more. New in 1.3.5: Removed READ (already had that with GETFILE."
6
+ s.description = "A full programming language and environment extending the features of the venerable HP calculator programmable calculators. With XRPN you can accomplish a wide range of modern programming tasks as well as running existing HP-41 FOCAL programs directly. XRPN gives modern life to tens of thousands of old HP calculator programs and opens the possibilities to many, many more. New in 1.6: Added the option to use single-quotes for Alpha entry. Added the safety-catch of adding an END to programs that does not have and END as the last line."
7
7
 
8
8
  s.authors = ["Geir Isene"]
9
9
  s.email = 'g@isene.com'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xrpn
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.5
4
+ version: '1.6'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Geir Isene
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-16 00:00:00.000000000 Z
11
+ date: 2023-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: tty-prompt
@@ -28,8 +28,9 @@ description: 'A full programming language and environment extending the features
28
28
  the venerable HP calculator programmable calculators. With XRPN you can accomplish
29
29
  a wide range of modern programming tasks as well as running existing HP-41 FOCAL
30
30
  programs directly. XRPN gives modern life to tens of thousands of old HP calculator
31
- programs and opens the possibilities to many, many more. New in 1.3.5: Removed READ
32
- (already had that with GETFILE.'
31
+ programs and opens the possibilities to many, many more. New in 1.6: Added the option
32
+ to use single-quotes for Alpha entry. Added the safety-catch of adding an END to
33
+ programs that does not have and END as the last line.'
33
34
  email: g@isene.com
34
35
  executables:
35
36
  - xrpn