xrpn 1.1.5 → 1.1.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/xrpn +1 -3
- data/lib/xrpn.rb +1 -1
- data/xcmd/abs +7 -0
- data/xcmd/acos +10 -0
- data/xcmd/adate +12 -0
- data/xcmd/adateiso +13 -0
- data/xcmd/add +9 -0
- data/xcmd/adv +7 -0
- data/xcmd/agsub +8 -0
- data/xcmd/aleng +8 -0
- data/xcmd/almcat +7 -0
- data/xcmd/almnow +7 -0
- data/xcmd/anum +10 -0
- data/xcmd/aoff +7 -0
- data/xcmd/aon +7 -0
- data/xcmd/appchr +13 -0
- data/xcmd/apprec +13 -0
- data/xcmd/arcl +22 -0
- data/xcmd/arcli +7 -0
- data/xcmd/arclrec +30 -0
- data/xcmd/arot +13 -0
- data/xcmd/ashf +7 -0
- data/xcmd/asin +10 -0
- data/xcmd/asroom +7 -0
- data/xcmd/asto +21 -0
- data/xcmd/asub +8 -0
- data/xcmd/atan +10 -0
- data/xcmd/atime +26 -0
- data/xcmd/atime24 +21 -0
- data/xcmd/atox +9 -0
- data/xcmd/aview +7 -0
- data/xcmd/aviewc +7 -0
- data/xcmd/beep +7 -0
- data/xcmd/bindec +8 -0
- data/xcmd/cat +26 -0
- data/xcmd/cf +7 -0
- data/xcmd/chs +7 -0
- data/xcmd/cla +7 -0
- data/xcmd/clalma +7 -0
- data/xcmd/clalmx +7 -0
- data/xcmd/cld +6 -0
- data/xcmd/clear +7 -0
- data/xcmd/clfl +13 -0
- data/xcmd/clk12 +7 -0
- data/xcmd/clk24 +7 -0
- data/xcmd/clkeys +7 -0
- data/xcmd/clock +7 -0
- data/xcmd/clp +8 -0
- data/xcmd/clralms +7 -0
- data/xcmd/clrg +7 -0
- data/xcmd/clrgx +12 -0
- data/xcmd/cls +12 -0
- data/xcmd/clst +10 -0
- data/xcmd/clx +8 -0
- data/xcmd/cmdadd +7 -0
- data/xcmd/cmddel +7 -0
- data/xcmd/correct +7 -0
- data/xcmd/cos +10 -0
- data/xcmd/crflas +9 -0
- data/xcmd/crfld +9 -0
- data/xcmd/cube +8 -0
- data/xcmd/d_r +8 -0
- data/xcmd/date +8 -0
- data/xcmd/dateplus +12 -0
- data/xcmd/ddate +11 -0
- data/xcmd/dec +7 -0
- data/xcmd/decbin +8 -0
- data/xcmd/dechex +8 -0
- data/xcmd/decoct +8 -0
- data/xcmd/deg +7 -0
- data/xcmd/degq +7 -0
- data/xcmd/delchr +14 -0
- data/xcmd/delrec +12 -0
- data/xcmd/divide +9 -0
- data/xcmd/dmy +7 -0
- data/xcmd/dot +7 -0
- data/xcmd/dow +9 -0
- data/xcmd/drop +7 -0
- data/xcmd/dropy +7 -0
- data/xcmd/dse +40 -0
- data/xcmd/ed +7 -0
- data/xcmd/emdir +7 -0
- data/xcmd/emdirx +14 -0
- data/xcmd/emroom +7 -0
- data/xcmd/end +9 -0
- data/xcmd/eng +9 -0
- data/xcmd/enter +8 -0
- data/xcmd/exp +9 -0
- data/xcmd/expx1 +9 -0
- data/xcmd/fact +9 -0
- data/xcmd/fc +7 -0
- data/xcmd/fcc +8 -0
- data/xcmd/fcs +8 -0
- data/xcmd/fix +9 -0
- data/xcmd/fixq +7 -0
- data/xcmd/flsize +7 -0
- data/xcmd/frc +8 -0
- data/xcmd/fs +7 -0
- data/xcmd/fsc +8 -0
- data/xcmd/fss +8 -0
- data/xcmd/geir +11 -0
- data/xcmd/getas +7 -0
- data/xcmd/getfile +12 -0
- data/xcmd/getfilea +11 -0
- data/xcmd/getkey +9 -0
- data/xcmd/getkeyx +10 -0
- data/xcmd/getp +13 -0
- data/xcmd/getr +13 -0
- data/xcmd/getrec +8 -0
- data/xcmd/getrx +17 -0
- data/xcmd/getsub +7 -0
- data/xcmd/getweb +12 -0
- data/xcmd/getx +12 -0
- data/xcmd/grad +7 -0
- data/xcmd/gsb +7 -0
- data/xcmd/gto +23 -0
- data/xcmd/help +14 -0
- data/xcmd/hexdec +8 -0
- data/xcmd/hms +12 -0
- data/xcmd/hmsminus +14 -0
- data/xcmd/hmsplus +13 -0
- data/xcmd/hr +11 -0
- data/xcmd/inschr +14 -0
- data/xcmd/insrec +12 -0
- data/xcmd/int +8 -0
- data/xcmd/invf +7 -0
- data/xcmd/isg +40 -0
- data/xcmd/lastx +8 -0
- data/xcmd/lbl +6 -0
- data/xcmd/lift +8 -0
- data/xcmd/ln +8 -0
- data/xcmd/ln1x +8 -0
- data/xcmd/log +8 -0
- data/xcmd/mdy +7 -0
- data/xcmd/mean +11 -0
- data/xcmd/mod +13 -0
- data/xcmd/multiply +9 -0
- data/xcmd/oct +7 -0
- data/xcmd/octdec +8 -0
- data/xcmd/off +8 -0
- data/xcmd/on +7 -0
- data/xcmd/p_r +13 -0
- data/xcmd/pack +7 -0
- data/xcmd/page +13 -0
- data/xcmd/pagedel +8 -0
- data/xcmd/pageq +7 -0
- data/xcmd/pageswap +8 -0
- data/xcmd/pasn +7 -0
- data/xcmd/pcat +14 -0
- data/xcmd/pclps +12 -0
- data/xcmd/percent +9 -0
- data/xcmd/percentch +9 -0
- data/xcmd/pi +8 -0
- data/xcmd/posa +23 -0
- data/xcmd/posfl +26 -0
- data/xcmd/pow +9 -0
- data/xcmd/pprg +27 -0
- data/xcmd/pprgx +33 -0
- data/xcmd/pra +7 -0
- data/xcmd/prflags +8 -0
- data/xcmd/prompt +8 -0
- data/xcmd/prp +7 -0
- data/xcmd/prregs +8 -0
- data/xcmd/prstk +10 -0
- data/xcmd/prx +7 -0
- data/xcmd/prxm +21 -0
- data/xcmd/pse +7 -0
- data/xcmd/psize +7 -0
- data/xcmd/purfl +14 -0
- data/xcmd/r_d +8 -0
- data/xcmd/r_p +18 -0
- data/xcmd/rad +7 -0
- data/xcmd/rand +10 -0
- data/xcmd/rcl +23 -0
- data/xcmd/rclaf +7 -0
- data/xcmd/rclflag +16 -0
- data/xcmd/rclpt +8 -0
- data/xcmd/rclpta +16 -0
- data/xcmd/rclsw +7 -0
- data/xcmd/rdn +7 -0
- data/xcmd/recip +8 -0
- data/xcmd/regmove +18 -0
- data/xcmd/regswap +19 -0
- data/xcmd/reload +7 -0
- data/xcmd/reszfl +7 -0
- data/xcmd/rnd +8 -0
- data/xcmd/root +9 -0
- data/xcmd/rtn +12 -0
- data/xcmd/rubycmd +7 -0
- data/xcmd/runsw +7 -0
- data/xcmd/rup +7 -0
- data/xcmd/saveas +7 -0
- data/xcmd/savep +7 -0
- data/xcmd/saver +24 -0
- data/xcmd/saverx +31 -0
- data/xcmd/savex +10 -0
- data/xcmd/savexm +7 -0
- data/xcmd/sci +9 -0
- data/xcmd/sdev +11 -0
- data/xcmd/seekpt +10 -0
- data/xcmd/seekpta +7 -0
- data/xcmd/sep +7 -0
- data/xcmd/setaf +7 -0
- data/xcmd/setsw +7 -0
- data/xcmd/sf +7 -0
- data/xcmd/shellcmd +7 -0
- data/xcmd/sign +19 -0
- data/xcmd/sin +10 -0
- data/xcmd/size +7 -0
- data/xcmd/sizeq +7 -0
- data/xcmd/sminus +20 -0
- data/xcmd/splus +20 -0
- data/xcmd/sqr +8 -0
- data/xcmd/sqrt +8 -0
- data/xcmd/sreg +7 -0
- data/xcmd/sregq +7 -0
- data/xcmd/stdivide +22 -0
- data/xcmd/stmultiply +22 -0
- data/xcmd/sto +21 -0
- data/xcmd/stoflag +13 -0
- data/xcmd/stop +7 -0
- data/xcmd/stopsw +7 -0
- data/xcmd/stplus +22 -0
- data/xcmd/stsubtract +22 -0
- data/xcmd/subtract +9 -0
- data/xcmd/sw +7 -0
- data/xcmd/swap +7 -0
- data/xcmd/swpt +7 -0
- data/xcmd/tan +10 -0
- data/xcmd/tenx +8 -0
- data/xcmd/time +8 -0
- data/xcmd/tx +7 -0
- data/xcmd/version +7 -0
- data/xcmd/view +7 -0
- data/xcmd/writefile +12 -0
- data/xcmd/xeq +21 -0
- data/xcmd/xeq0 +7 -0
- data/xcmd/xeqnn +9 -0
- data/xcmd/xeqy +7 -0
- data/xcmd/xf +20 -0
- data/xcmd/xgt0 +7 -0
- data/xcmd/xgteq0 +7 -0
- data/xcmd/xgteqnn +9 -0
- data/xcmd/xgteqy +7 -0
- data/xcmd/xgtnn +9 -0
- data/xcmd/xgty +7 -0
- data/xcmd/xlt0 +7 -0
- data/xcmd/xlteq0 +7 -0
- data/xcmd/xlteqnn +9 -0
- data/xcmd/xlteqy +7 -0
- data/xcmd/xltnn +9 -0
- data/xcmd/xlty +7 -0
- data/xcmd/xmexistq +15 -0
- data/xcmd/xmfileq +7 -0
- data/xcmd/xneq0 +7 -0
- data/xcmd/xneqnn +9 -0
- data/xcmd/xneqy +7 -0
- data/xcmd/xnn +21 -0
- data/xcmd/xtoa +7 -0
- data/xcmd/xy +7 -0
- data/xcmd/xyzalm +7 -0
- data/xlib/_xrpn_version +5 -0
- data/xlib/bei +18 -0
- data/xlib/check +26 -0
- data/xlib/conditional +10 -0
- data/xlib/convert_base +8 -0
- data/xlib/debug_mode +124 -0
- data/xlib/dtparse +10 -0
- data/xlib/error +10 -0
- data/xlib/fact +7 -0
- data/xlib/getpt +7 -0
- data/xlib/help +12 -0
- data/xlib/hp_41 +83 -0
- data/xlib/ind +21 -0
- data/xlib/load_xm +28 -0
- data/xlib/locate_prg +32 -0
- data/xlib/numeric +62 -0
- data/xlib/numformat +12 -0
- data/xlib/optparse +23 -0
- data/xlib/read_cmd +12 -0
- data/xlib/read_state +6 -0
- data/xlib/save_state +18 -0
- data/xlib/save_xm +5 -0
- data/xlib/setpt +5 -0
- data/xlib/string +28 -0
- data/xlib/theme +23 -0
- data/xlib/xrpn_class +34 -0
- data/xrpn.gemspec +2 -2
- metadata +287 -2
data/xcmd/gto
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class XRPN
|
2
|
+
def gto (l)
|
3
|
+
if l.match(/^\./)
|
4
|
+
@pc = l.sub(/^\./, "").to_i - 1
|
5
|
+
return
|
6
|
+
end
|
7
|
+
page, pos = locate_prg (l)
|
8
|
+
if pos == nil
|
9
|
+
if l.match(/".*"/)
|
10
|
+
return "Error: No such global label: #{l}"
|
11
|
+
else
|
12
|
+
return "Error: No such label: #{l}"
|
13
|
+
end
|
14
|
+
else
|
15
|
+
if @page != @pg
|
16
|
+
@pg = page
|
17
|
+
end
|
18
|
+
@pc = pos
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# vim:ft=ruby:
|
data/xcmd/help
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
class XRPN
|
2
|
+
def help
|
3
|
+
puts
|
4
|
+
puts "XRPN is a stack-based programming language. It uses Reverse Polish Notation for calculations."
|
5
|
+
puts "The language is a superset of FOCAL, implementing the full set of HP-41CX calculator commands."
|
6
|
+
puts "XRPN is on-the-fly extensible. Language functions can be upgraded or implemented while programs are running."
|
7
|
+
puts "It runs programs in text files or manually in debug mode (if no text file is supplied or when a program stops)"
|
8
|
+
puts "XRPN implements indirect adressing, self-modification and features well beyond the FOCAL language."
|
9
|
+
puts "For detailed information, visit the GitHub page: https://github.com/isene/xrpn"
|
10
|
+
puts
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
# vim:ft=ruby:
|
data/xcmd/hexdec
ADDED
data/xcmd/hms
ADDED
data/xcmd/hmsminus
ADDED
data/xcmd/hmsplus
ADDED
data/xcmd/hr
ADDED
data/xcmd/inschr
ADDED
data/xcmd/insrec
ADDED
data/xcmd/int
ADDED
data/xcmd/invf
ADDED
data/xcmd/isg
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
class XRPN
|
2
|
+
def isg (r)
|
3
|
+
case r.downcase
|
4
|
+
when "x"
|
5
|
+
c = @x
|
6
|
+
when "y"
|
7
|
+
c = @y
|
8
|
+
when "z"
|
9
|
+
c = @z
|
10
|
+
when "t"
|
11
|
+
c = @t
|
12
|
+
when "l"
|
13
|
+
c = @l
|
14
|
+
else
|
15
|
+
c = @reg[r]
|
16
|
+
end
|
17
|
+
b, e, i = x2bei(c)
|
18
|
+
i2 = i
|
19
|
+
i2 = 1 if i2 == 0
|
20
|
+
b -= i2
|
21
|
+
@pc += 1 if b > e
|
22
|
+
c = bei2x(b, e, i)
|
23
|
+
case r.downcase
|
24
|
+
when "x"
|
25
|
+
@x = c
|
26
|
+
when "y"
|
27
|
+
@y = c
|
28
|
+
when "z"
|
29
|
+
@z = c
|
30
|
+
when "t"
|
31
|
+
@t = c
|
32
|
+
when "l"
|
33
|
+
@l = c
|
34
|
+
else
|
35
|
+
@reg[r] = c
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# vim:ft=ruby:
|
data/xcmd/lastx
ADDED
data/xcmd/lbl
ADDED
data/xcmd/lift
ADDED
data/xcmd/ln
ADDED
data/xcmd/ln1x
ADDED
data/xcmd/log
ADDED
data/xcmd/mdy
ADDED
data/xcmd/mean
ADDED
data/xcmd/mod
ADDED
data/xcmd/multiply
ADDED
data/xcmd/oct
ADDED
data/xcmd/octdec
ADDED
data/xcmd/off
ADDED
data/xcmd/on
ADDED
data/xcmd/p_r
ADDED
data/xcmd/pack
ADDED
data/xcmd/page
ADDED
data/xcmd/pagedel
ADDED
data/xcmd/pageq
ADDED
data/xcmd/pageswap
ADDED
data/xcmd/pasn
ADDED
data/xcmd/pcat
ADDED
data/xcmd/pclps
ADDED
data/xcmd/percent
ADDED
data/xcmd/percentch
ADDED
data/xcmd/pi
ADDED
data/xcmd/posa
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
class XRPN
|
2
|
+
def posa
|
3
|
+
@l = @x
|
4
|
+
if @x.is_a? String
|
5
|
+
begin
|
6
|
+
@x = @a.index(@x) + 1
|
7
|
+
rescue
|
8
|
+
@x = 0.0
|
9
|
+
end
|
10
|
+
elsif @x.to_i.between?(0,255)
|
11
|
+
i = 1
|
12
|
+
@a.each_char do |c|
|
13
|
+
if c.ord == @x.to_i
|
14
|
+
@x = i
|
15
|
+
return
|
16
|
+
end
|
17
|
+
i += 1
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
# vim:ft=ruby:
|
data/xcmd/posfl
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
class XRPN
|
2
|
+
def posfl
|
3
|
+
if @xmcont[0][0] == ""
|
4
|
+
return
|
5
|
+
else
|
6
|
+
r = @xmcont[0][3].to_i + 1
|
7
|
+
p r
|
8
|
+
until r == @xmcont.length do
|
9
|
+
m = @xmcont[r] =~ Regexp.new(@a)
|
10
|
+
p m
|
11
|
+
if m
|
12
|
+
lift
|
13
|
+
@xmcont[0][0] = (r - 1) + (m / 1000.0)
|
14
|
+
@x = @xmcont[0][0]
|
15
|
+
savexm
|
16
|
+
return
|
17
|
+
end
|
18
|
+
r += 1
|
19
|
+
end
|
20
|
+
lift
|
21
|
+
@x = -1.0
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# vim:ft=ruby:
|
data/xcmd/pow
ADDED
data/xcmd/pprg
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
class XRPN
|
2
|
+
def pprg
|
3
|
+
page = @pg
|
4
|
+
pos = 0
|
5
|
+
if @a != ""
|
6
|
+
pr = "\"#{@a}\""
|
7
|
+
page, pos, prgm = locate_prg (pr)
|
8
|
+
if pos == nil
|
9
|
+
puts "No such program to print."
|
10
|
+
return
|
11
|
+
end
|
12
|
+
end
|
13
|
+
@prg[page].each_index do |i|
|
14
|
+
next if i < pos
|
15
|
+
print "#{format('%02d', i + 1)}"
|
16
|
+
if @prg[page][i].downcase.match(/lbl/)
|
17
|
+
print "◆"
|
18
|
+
else
|
19
|
+
print " "
|
20
|
+
end
|
21
|
+
puts "#{@prg[page][i]}"
|
22
|
+
break if @prg[page][i] == "END"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# vim:ft=ruby:
|
data/xcmd/pprgx
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
class XRPN
|
2
|
+
def pprgx
|
3
|
+
# Print current program from Y to X (relative to current line if Y is negative
|
4
|
+
s = @y.to_i
|
5
|
+
e = @x.to_i
|
6
|
+
if (s == 0 and e == 0)
|
7
|
+
e = @prg[@pg].length
|
8
|
+
end
|
9
|
+
if s < 0
|
10
|
+
s = @pc + s
|
11
|
+
e = @pc + e + 1
|
12
|
+
end
|
13
|
+
s = 0 if s < 0
|
14
|
+
e = @prg[@pg].length if e > @prg[@pg].length
|
15
|
+
out = ""
|
16
|
+
@prg[@pg].each_index do |i|
|
17
|
+
next if i < s
|
18
|
+
break if i > e - 1
|
19
|
+
out += "#{format('%02d', i + 1)}"
|
20
|
+
if @prg[@pg][i].downcase.match(/lbl/)
|
21
|
+
out += "◆"
|
22
|
+
else
|
23
|
+
out += " "
|
24
|
+
end
|
25
|
+
out += "#{@prg[@pg][i]}\n"
|
26
|
+
break if @prg[@pg][i] == "END"
|
27
|
+
end
|
28
|
+
puts out
|
29
|
+
File.write(Dir.home + "/.xrpn/print/" + @a, out) if @a != ""
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
# vim:ft=ruby:
|
data/xcmd/pra
ADDED
data/xcmd/prflags
ADDED
data/xcmd/prompt
ADDED
data/xcmd/prp
ADDED
data/xcmd/prregs
ADDED
data/xcmd/prstk
ADDED
@@ -0,0 +1,10 @@
|
|
1
|
+
class XRPN
|
2
|
+
def prstk
|
3
|
+
puts "T = ".c_t + numformat(@t).c_t(1) + " α = ".c_a + @a.to_s.c_a(1)
|
4
|
+
puts "Z = ".c_z + numformat(@z).c_z(1)
|
5
|
+
puts "Y = ".c_y + numformat(@y).c_y(1)
|
6
|
+
puts "X = ".c_x + numformat(@x).c_x(1) + " L = ".c_l + numformat(@l).c_l(1)
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
# vim:ft=ruby:
|