xrpn 1.1

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 (289) hide show
  1. checksums.yaml +7 -0
  2. data/bin/xrpn +110 -0
  3. data/cmd/abs +7 -0
  4. data/cmd/acos +10 -0
  5. data/cmd/adate +12 -0
  6. data/cmd/adateiso +13 -0
  7. data/cmd/add +9 -0
  8. data/cmd/adv +7 -0
  9. data/cmd/agsub +8 -0
  10. data/cmd/aleng +8 -0
  11. data/cmd/almcat +7 -0
  12. data/cmd/almnow +7 -0
  13. data/cmd/anum +10 -0
  14. data/cmd/aoff +7 -0
  15. data/cmd/aon +7 -0
  16. data/cmd/appchr +13 -0
  17. data/cmd/apprec +13 -0
  18. data/cmd/arcl +22 -0
  19. data/cmd/arcli +7 -0
  20. data/cmd/arclrec +30 -0
  21. data/cmd/arot +13 -0
  22. data/cmd/ashf +7 -0
  23. data/cmd/asin +10 -0
  24. data/cmd/asroom +7 -0
  25. data/cmd/asto +21 -0
  26. data/cmd/asub +8 -0
  27. data/cmd/atan +10 -0
  28. data/cmd/atime +26 -0
  29. data/cmd/atime24 +21 -0
  30. data/cmd/atox +9 -0
  31. data/cmd/aview +7 -0
  32. data/cmd/aviewc +7 -0
  33. data/cmd/beep +7 -0
  34. data/cmd/bindec +8 -0
  35. data/cmd/cat +26 -0
  36. data/cmd/cf +7 -0
  37. data/cmd/chs +7 -0
  38. data/cmd/cla +7 -0
  39. data/cmd/clalma +7 -0
  40. data/cmd/clalmx +7 -0
  41. data/cmd/cld +6 -0
  42. data/cmd/clear +7 -0
  43. data/cmd/clfl +13 -0
  44. data/cmd/clk12 +7 -0
  45. data/cmd/clk24 +7 -0
  46. data/cmd/clkeys +7 -0
  47. data/cmd/clock +7 -0
  48. data/cmd/clp +8 -0
  49. data/cmd/clralms +7 -0
  50. data/cmd/clrg +7 -0
  51. data/cmd/clrgx +12 -0
  52. data/cmd/cls +12 -0
  53. data/cmd/clst +10 -0
  54. data/cmd/clx +8 -0
  55. data/cmd/cmdadd +7 -0
  56. data/cmd/cmddel +7 -0
  57. data/cmd/correct +7 -0
  58. data/cmd/cos +10 -0
  59. data/cmd/crflas +9 -0
  60. data/cmd/crfld +9 -0
  61. data/cmd/cube +8 -0
  62. data/cmd/d_r +8 -0
  63. data/cmd/date +8 -0
  64. data/cmd/dateplus +12 -0
  65. data/cmd/ddate +11 -0
  66. data/cmd/dec +7 -0
  67. data/cmd/decbin +8 -0
  68. data/cmd/dechex +8 -0
  69. data/cmd/decoct +8 -0
  70. data/cmd/deg +7 -0
  71. data/cmd/degq +7 -0
  72. data/cmd/delchr +14 -0
  73. data/cmd/delrec +12 -0
  74. data/cmd/divide +9 -0
  75. data/cmd/dmy +7 -0
  76. data/cmd/dot +7 -0
  77. data/cmd/dow +9 -0
  78. data/cmd/drop +7 -0
  79. data/cmd/dropy +7 -0
  80. data/cmd/dse +40 -0
  81. data/cmd/ed +7 -0
  82. data/cmd/emdir +7 -0
  83. data/cmd/emdirx +14 -0
  84. data/cmd/emroom +7 -0
  85. data/cmd/end +9 -0
  86. data/cmd/eng +9 -0
  87. data/cmd/enter +8 -0
  88. data/cmd/exp +9 -0
  89. data/cmd/expx1 +9 -0
  90. data/cmd/fact +9 -0
  91. data/cmd/fc +7 -0
  92. data/cmd/fcc +8 -0
  93. data/cmd/fcs +8 -0
  94. data/cmd/fix +9 -0
  95. data/cmd/fixq +7 -0
  96. data/cmd/flsize +7 -0
  97. data/cmd/frc +8 -0
  98. data/cmd/fs +7 -0
  99. data/cmd/fsc +8 -0
  100. data/cmd/fss +8 -0
  101. data/cmd/geir +11 -0
  102. data/cmd/getas +7 -0
  103. data/cmd/getfile +12 -0
  104. data/cmd/getfilea +11 -0
  105. data/cmd/getkey +9 -0
  106. data/cmd/getkeyx +10 -0
  107. data/cmd/getp +13 -0
  108. data/cmd/getr +13 -0
  109. data/cmd/getrec +8 -0
  110. data/cmd/getrx +17 -0
  111. data/cmd/getsub +7 -0
  112. data/cmd/getweb +12 -0
  113. data/cmd/getx +12 -0
  114. data/cmd/grad +7 -0
  115. data/cmd/gsb +7 -0
  116. data/cmd/gto +23 -0
  117. data/cmd/help +14 -0
  118. data/cmd/hexdec +8 -0
  119. data/cmd/hms +12 -0
  120. data/cmd/hmsminus +14 -0
  121. data/cmd/hmsplus +13 -0
  122. data/cmd/hr +11 -0
  123. data/cmd/inschr +14 -0
  124. data/cmd/insrec +12 -0
  125. data/cmd/int +8 -0
  126. data/cmd/invf +7 -0
  127. data/cmd/isg +40 -0
  128. data/cmd/lastx +8 -0
  129. data/cmd/lbl +6 -0
  130. data/cmd/lift +8 -0
  131. data/cmd/ln +8 -0
  132. data/cmd/ln1x +8 -0
  133. data/cmd/log +8 -0
  134. data/cmd/mdy +7 -0
  135. data/cmd/mean +11 -0
  136. data/cmd/mod +13 -0
  137. data/cmd/multiply +9 -0
  138. data/cmd/oct +7 -0
  139. data/cmd/octdec +8 -0
  140. data/cmd/off +8 -0
  141. data/cmd/on +7 -0
  142. data/cmd/p_r +13 -0
  143. data/cmd/pack +7 -0
  144. data/cmd/page +13 -0
  145. data/cmd/pagedel +8 -0
  146. data/cmd/pageq +7 -0
  147. data/cmd/pageswap +8 -0
  148. data/cmd/pasn +7 -0
  149. data/cmd/pcat +14 -0
  150. data/cmd/pclps +12 -0
  151. data/cmd/percent +9 -0
  152. data/cmd/percentch +9 -0
  153. data/cmd/pi +8 -0
  154. data/cmd/posa +23 -0
  155. data/cmd/posfl +26 -0
  156. data/cmd/pow +9 -0
  157. data/cmd/pprg +27 -0
  158. data/cmd/pprgx +33 -0
  159. data/cmd/pra +7 -0
  160. data/cmd/prflags +8 -0
  161. data/cmd/prompt +8 -0
  162. data/cmd/prp +7 -0
  163. data/cmd/prregs +8 -0
  164. data/cmd/prstk +10 -0
  165. data/cmd/prx +7 -0
  166. data/cmd/prxm +21 -0
  167. data/cmd/pse +7 -0
  168. data/cmd/psize +7 -0
  169. data/cmd/purfl +14 -0
  170. data/cmd/r_d +8 -0
  171. data/cmd/r_p +18 -0
  172. data/cmd/rad +7 -0
  173. data/cmd/rand +10 -0
  174. data/cmd/rcl +23 -0
  175. data/cmd/rclaf +7 -0
  176. data/cmd/rclflag +16 -0
  177. data/cmd/rclpt +8 -0
  178. data/cmd/rclpta +16 -0
  179. data/cmd/rclsw +7 -0
  180. data/cmd/rdn +7 -0
  181. data/cmd/recip +8 -0
  182. data/cmd/regmove +18 -0
  183. data/cmd/regswap +19 -0
  184. data/cmd/reload +7 -0
  185. data/cmd/reszfl +7 -0
  186. data/cmd/rnd +8 -0
  187. data/cmd/root +9 -0
  188. data/cmd/rtn +12 -0
  189. data/cmd/rubycmd +7 -0
  190. data/cmd/runsw +7 -0
  191. data/cmd/rup +7 -0
  192. data/cmd/saveas +7 -0
  193. data/cmd/savep +7 -0
  194. data/cmd/saver +24 -0
  195. data/cmd/saverx +31 -0
  196. data/cmd/savex +10 -0
  197. data/cmd/savexm +7 -0
  198. data/cmd/sci +9 -0
  199. data/cmd/sdev +11 -0
  200. data/cmd/seekpt +10 -0
  201. data/cmd/seekpta +7 -0
  202. data/cmd/sep +7 -0
  203. data/cmd/setaf +7 -0
  204. data/cmd/setsw +7 -0
  205. data/cmd/sf +7 -0
  206. data/cmd/shellcmd +7 -0
  207. data/cmd/sign +19 -0
  208. data/cmd/sin +10 -0
  209. data/cmd/size +7 -0
  210. data/cmd/sizeq +7 -0
  211. data/cmd/sminus +20 -0
  212. data/cmd/splus +20 -0
  213. data/cmd/sqr +8 -0
  214. data/cmd/sqrt +8 -0
  215. data/cmd/sreg +7 -0
  216. data/cmd/sregq +7 -0
  217. data/cmd/stdivide +22 -0
  218. data/cmd/stmultiply +22 -0
  219. data/cmd/sto +21 -0
  220. data/cmd/stoflag +13 -0
  221. data/cmd/stop +7 -0
  222. data/cmd/stopsw +7 -0
  223. data/cmd/stplus +22 -0
  224. data/cmd/stsubtract +22 -0
  225. data/cmd/subtract +9 -0
  226. data/cmd/sw +7 -0
  227. data/cmd/swap +7 -0
  228. data/cmd/swpt +7 -0
  229. data/cmd/tan +10 -0
  230. data/cmd/tenx +8 -0
  231. data/cmd/time +8 -0
  232. data/cmd/tx +7 -0
  233. data/cmd/version +7 -0
  234. data/cmd/view +7 -0
  235. data/cmd/writefile +12 -0
  236. data/cmd/xeq +21 -0
  237. data/cmd/xeq0 +7 -0
  238. data/cmd/xeqnn +9 -0
  239. data/cmd/xeqy +7 -0
  240. data/cmd/xf +20 -0
  241. data/cmd/xgt0 +7 -0
  242. data/cmd/xgteq0 +7 -0
  243. data/cmd/xgteqnn +9 -0
  244. data/cmd/xgteqy +7 -0
  245. data/cmd/xgtnn +9 -0
  246. data/cmd/xgty +7 -0
  247. data/cmd/xlt0 +7 -0
  248. data/cmd/xlteq0 +7 -0
  249. data/cmd/xlteqnn +9 -0
  250. data/cmd/xlteqy +7 -0
  251. data/cmd/xltnn +9 -0
  252. data/cmd/xlty +7 -0
  253. data/cmd/xmexistq +15 -0
  254. data/cmd/xmfileq +7 -0
  255. data/cmd/xneq0 +7 -0
  256. data/cmd/xneqnn +9 -0
  257. data/cmd/xneqy +7 -0
  258. data/cmd/xnn +21 -0
  259. data/cmd/xtoa +7 -0
  260. data/cmd/xy +7 -0
  261. data/cmd/xyzalm +7 -0
  262. data/lib/_xrpn_version +5 -0
  263. data/lib/bei +18 -0
  264. data/lib/check +26 -0
  265. data/lib/conditional +10 -0
  266. data/lib/convert_base +8 -0
  267. data/lib/debug_mode +124 -0
  268. data/lib/dtparse +10 -0
  269. data/lib/error +10 -0
  270. data/lib/fact +7 -0
  271. data/lib/getpt +7 -0
  272. data/lib/help +12 -0
  273. data/lib/hp_41 +83 -0
  274. data/lib/ind +21 -0
  275. data/lib/load_xm +28 -0
  276. data/lib/locate_prg +32 -0
  277. data/lib/numeric +62 -0
  278. data/lib/numformat +12 -0
  279. data/lib/optparse +23 -0
  280. data/lib/read_cmd +12 -0
  281. data/lib/read_state +6 -0
  282. data/lib/save_state +18 -0
  283. data/lib/save_xm +5 -0
  284. data/lib/setpt +5 -0
  285. data/lib/string +28 -0
  286. data/lib/theme_dark +10 -0
  287. data/lib/theme_light +10 -0
  288. data/lib/xrpn_class +34 -0
  289. metadata +348 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: ec611b098ae31061be5df9cb0d924ff76b84ecb71d606acd204775f7b3775a56
4
+ data.tar.gz: 62e8c735f5cffaa562ac2620d564d7b41b6841443d94819b63a4342c0ee2009b
5
+ SHA512:
6
+ metadata.gz: 6f030302c85ef1b7606c370b174a20e91cf1cc32fe28ecd992ffee376c5dcd69d827bc437287d7c40b76cc90cb1e4debe5cbde59c5f7d73530c70d7f5a69be1a
7
+ data.tar.gz: ba1c3c64c2f5d5e5aa7551dd991c7fbe89c2e778590df08feb12893ee95be4d6991967dbe66c9c91c0fa343f8c8fc9420940bf6709df28448216b5d5793d96cc
data/bin/xrpn ADDED
@@ -0,0 +1,110 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ # GET EXTENSIONS
5
+ begin
6
+ require 'xrpn'
7
+ rescue LoadError
8
+ puts "You may want to install xrpn via `gem install xrpn`"
9
+ end
10
+ require 'optparse'
11
+ require 'io/console'
12
+ require 'date'
13
+ require 'bigdecimal'
14
+ require 'open-uri'
15
+ require 'json'
16
+ require 'tty-prompt'
17
+
18
+ # ENSURE DIRs
19
+ Dir.mkdir(Dir.home + "/.xrpn") unless File.exist?(Dir.home + "/.xrpn")
20
+ ["cmd", "data", "extra", "lib", "print"].each do |d|
21
+ Dir.mkdir(Dir.home + "/.xrpn/" + d) unless File.exist?(Dir.home + "/.xrpn/" + d)
22
+ end
23
+
24
+ # INITIALIZE
25
+ @x, @y, @z, @t, @a = 0, 0, 0, 0, ""
26
+ Dir[Dir.home+"/.xrpn/lib/*"].each { |file| load file } # Read libraries
27
+ read_cmd # Read XRPN commands
28
+ @p = XRPN.new($rfile)
29
+ @p.x, @p.y, @p.z, @p.t, @p.a = @x, @y, @z, @t, @a
30
+ @p.prg[@p.pg] = ["LBL \"XRPN\"", "END"] unless $rfile # Put dummy program in page 0 if no file to run
31
+ @p.prg[@p.pg] = hp_41(@p.prg[@p.pg]) if $rfile # Substitute HP-41 commands with XRPN commands
32
+ if $lfile # Read file to load but not run if -l switch is used
33
+ $lfile.each_with_index do |f, i|
34
+ @p.prg[i] = File.read(f).split("\n")
35
+ @p.prg[i] = hp_41(@p.prg[i])
36
+ end
37
+ end
38
+ read_state($sfile) if $sfile # Read state file in ~.xrpn/ if -s switch is used
39
+ $debug = true if $lfile or $sfile # Do not run loaded program or program in state file
40
+ load(Dir.home+'/.xrpn/lib/theme_dark') if File.exist?(Dir.home+'/.xrpn/lib/theme_dark') # Read theme file
41
+ load(Dir.home+'/.xrpn/conf') if File.exist?(Dir.home+'/.xrpn/conf') # Read config file
42
+ load(Dir.home+'/.xrpn/lib/theme_light') if $theme == "light" and File.exist?(Dir.home+'/.xrpn/lib/theme_light') # Read theme file
43
+ load(Dir.home+'/.xrpn/theme') if File.exist?(Dir.home+'/.xrpn/theme') # Override theme if user theme file exists
44
+
45
+
46
+ # THE CORE OF THE RPN PROGRAM
47
+ @nl = false # Nolift set to false
48
+ @i = 0 # Counter to prevent infinite loops
49
+ until @p.pc == @p.prg[@p.pg].length do
50
+ # Enter debug mode if $debug or $prompt is set, else read next program line
51
+ ($debug or $prompt) ? debug_mode : @line = @p.prg[@p.pg][@p.pc]
52
+ @line = "" if @line == nil
53
+ if @line.match(/^-*[\d\.,e]+$/) # If a number is supplied
54
+ @line.sub!(/,/, '.')
55
+ @p.lift
56
+ @p.x = @line.to_f
57
+ @p.flg["22"] = true # Number has been entered
58
+ @p.flg["23"] = false
59
+ elsif @line.match(/^>?".*"/) # If an Alpha string is supplied
60
+ if @line.match(/^"\|/)
61
+ @p.a += @line.sub(/\|-?/, '').gsub(/\"/, '') # Append to Alpha if "|abc", "|-abc"
62
+ elsif @line.match(/^>"/)
63
+ @p.a += @line.sub(/>/, '').gsub(/\"/, '') # Append to Alpha if >"abc"
64
+ else
65
+ @p.a = @line.gsub(/\"/, '') # ...or set Alpha to the supplied string
66
+ end
67
+ @p.flg["22"] = false
68
+ @p.flg["23"] = true # String has been entered
69
+ else # Split command in maximum three words (e.g. STO IND 13)
70
+ l1, l2, l3 = @line.split[0], @line.split[1], @line.split[2]
71
+ l2 = "%02d" % [l2] if l2 == l2.to_i.to_s
72
+ l3 = "%02d" % [l3] if l3 == l3.to_i.to_s
73
+ l2 = ind(l3) if l3 # If middle word is "IND" (or anything actually - since IND is the only possibility)
74
+ l1 = "" if l1 == nil
75
+ if not $cmd.include?(l1.downcase) # Catch unknown command
76
+ puts "No such command: #{l1}"
77
+ @p.stop
78
+ elsif XRPN.method_defined?(l1.downcase) # Or execute the command with either 1 or 2 parts
79
+ begin
80
+ l2 ? ret = @p.send(l1.downcase, l2) : ret = @p.send(l1.downcase)
81
+ rescue ArgumentError
82
+ puts "Command needs an argument."
83
+ @p.stop
84
+ rescue TypeError
85
+ error("ERROR: Wrong type.")
86
+ rescue ZeroDivisionError
87
+ error("ERROR: Division by zero.")
88
+ rescue FloatDomainError
89
+ error("ERROR: Number out of range.")
90
+ rescue Math::DomainError
91
+ error("ERROR: Number out of domain.")
92
+ end
93
+ puts ret if $debug and ret.instance_of? String
94
+ puts ret if not $debug and ret.to_s.match(/Error:/)
95
+ @p.flg["22"] = false
96
+ @p.flg["23"] = false
97
+ end
98
+ end
99
+ @p.nolift = false if @nl
100
+ @p.nolift ? @nl = true : @nl = false
101
+ @p.pc += 1 unless ($debug or $prompt)
102
+ @i += 1 unless ($debug or @i < 0) # Handling of potential infinite loops
103
+ if @i > 1000
104
+ puts "Looped 1000 times. Press 'c' to continue indefinitely or any other key to stop."
105
+ ans = STDIN.getch
106
+ ans == "c" ? @i = -1 : $debug = true
107
+ end
108
+ end
109
+
110
+ # vim: set sw=2 sts=2 et ft=ruby fdm=syntax fdn=2 fcs=fold\:\ :
data/cmd/abs ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def abs
3
+ @x = @x.abs
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/acos ADDED
@@ -0,0 +1,10 @@
1
+ class XRPN
2
+ def acos
3
+ @l = @x
4
+ @x = Math::acos(@x)
5
+ @x = @x.to_deg if @deg == "deg"
6
+ @x = @x.to_grad if @deg == "grad"
7
+ end
8
+ end
9
+
10
+ # vim:ft=ruby:
data/cmd/adate ADDED
@@ -0,0 +1,12 @@
1
+ class XRPN
2
+ def adate
3
+ d = @x.to_s
4
+ if @flg["31"] # DMY
5
+ @a += d.sub(/(\d*)\.(\d\d)\d\d(\d\d)\d*/, '\1.\2.\3')
6
+ else # MDY
7
+ @a += d.sub(/(\d*)\.(\d\d)\d\d(\d\d)\d*/, '\1/\2/\3')
8
+ end
9
+ end
10
+ end
11
+
12
+ # vim:ft=ruby:
data/cmd/adateiso ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def adateiso
3
+ d = @x.to_s
4
+ d = "0" + d if d.match(/^\d\./)
5
+ if @flg["31"] # DMY
6
+ @a += d.sub(/(\d*)\.(\d\d)(\d\d\d\d)\d*/, '\3-\2-\1')
7
+ else # MDY
8
+ @a += d.sub(/(\d*)\.(\d\d)(\d\d\d\d)\d*/, '\3-\1-\2')
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/cmd/add ADDED
@@ -0,0 +1,9 @@
1
+ class XRPN
2
+ def +
3
+ @l = @x
4
+ @x = @y + @x
5
+ dropy
6
+ end
7
+ end
8
+
9
+ # vim:ft=ruby:
data/cmd/adv ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def adv
3
+ puts "\n"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/agsub ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def agsub
3
+ return unless (@x.is_a? String and @y.is_a? String)
4
+ @a.gsub!(Regexp.new(@x), @y)
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/cmd/aleng ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def aleng
3
+ lift
4
+ @x = @a.length
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/cmd/almcat ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def almcat
3
+ return "ALMCAT: No clock, alarm or stopwatch functions are implemented"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/almnow ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def almnow
3
+ return "ALMNOW: No clock, alarm or stopwatch functions are implemented"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/anum ADDED
@@ -0,0 +1,10 @@
1
+ class XRPN
2
+ def anum
3
+ lift
4
+ n = @a.scan(/[\d.,e]+/).first
5
+ n.sub!(/,/, '.') unless @dot
6
+ @x = n.to_f
7
+ end
8
+ end
9
+
10
+ # vim:ft=ruby:
data/cmd/aoff ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def aoff
3
+ return "AOFF: As with AON, no real need for that function"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/aon ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def aon
3
+ return "AON: No real need for that function"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/appchr ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def appchr
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ r = @xmcont[0][3].to_i + 1
7
+ @xmcont[r] += @a
8
+ savexm
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/cmd/apprec ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def apprec
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ @xmcont[0][3] = @xmcont[0][3].to_i + 1.0
7
+ @xmcont.insert(@xmcont[0][3].to_i + 1, @a)
8
+ savexm
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/cmd/arcl ADDED
@@ -0,0 +1,22 @@
1
+ class XRPN
2
+ def arcl (r)
3
+ a = false
4
+ case r.downcase
5
+ when "x"
6
+ a = @x
7
+ when "y"
8
+ a = @y
9
+ when "z"
10
+ a = @z
11
+ when "t"
12
+ a = @t
13
+ end
14
+ a ? @a += numformat(a) : @a += numformat(@reg[r])
15
+ if @a == nil
16
+ @reg[r] = ""
17
+ @a = ""
18
+ end
19
+ end
20
+ end
21
+
22
+ # vim:ft=ruby:
data/cmd/arcli ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def arcli
3
+ @a += @x.to_i.to_s
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/arclrec ADDED
@@ -0,0 +1,30 @@
1
+ class XRPN
2
+ def arclrec
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ if @xmcont[0][3] > @xmcont.length - 2
7
+ @xmcont[0][3] = 0.0
8
+ return "END OF FILE"
9
+ end
10
+ r, c = getpt
11
+ n = 24 - @a.length
12
+ n = 0 if n < 0
13
+ e = c + n
14
+ n > 0 ? s = @xmcont[r][c..e - 1] : s = ""
15
+ @a += s
16
+ if e > @xmcont[r].length - 2
17
+ setpt(r + 1, 0)
18
+ @flg["17"] = true
19
+ elsif n > 0
20
+ p c, n, @xmcont[0][3]
21
+ setpt(r, e + 1)
22
+ p "After", @xmcont[0][3]
23
+ @flg["17"] = false
24
+ end
25
+ savexm
26
+ end
27
+ end
28
+ end
29
+
30
+ # vim:ft=ruby:
data/cmd/arot ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def arot
3
+ if @x > 0
4
+ r = (@x - 1).to_i
5
+ @a = @a[(r + 1)..] + @a[0..r]
6
+ elsif @x < 0
7
+ r = (@x - 1).abs.to_i
8
+ @a = @a[(r - 1)..] + @a[0..(r - 2)]
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/cmd/ashf ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def ashf
3
+ @a = @a[6..]
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/asin ADDED
@@ -0,0 +1,10 @@
1
+ class XRPN
2
+ def asin
3
+ @l = @x
4
+ @x = Math::asin(@x)
5
+ @x = @x.to_deg if @deg == "deg"
6
+ @x = @x.to_grad if @deg == "grad"
7
+ end
8
+ end
9
+
10
+ # vim:ft=ruby:
data/cmd/asroom ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def asroom
3
+ return "ASROOM: There's always plenty of room"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/asto ADDED
@@ -0,0 +1,21 @@
1
+ class XRPN
2
+ def asto (r)
3
+ case r.downcase
4
+ when "x"
5
+ @l = @x
6
+ @x = @a
7
+ when "y"
8
+ @y = @a
9
+ when "z"
10
+ @z = @a
11
+ when "t"
12
+ @t = @a
13
+ when "l"
14
+ @l = @a
15
+ else
16
+ @reg[r] = @a
17
+ end
18
+ end
19
+ end
20
+
21
+ # vim:ft=ruby:
data/cmd/asub ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def asub
3
+ return unless (@x.is_a? String and @y.is_a? String)
4
+ @a.sub!(Regexp.new(@x), @y)
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/cmd/atan ADDED
@@ -0,0 +1,10 @@
1
+ class XRPN
2
+ def atan
3
+ @l = @x
4
+ @x = Math::atan(@x)
5
+ @x = @x.to_deg if @deg == "deg"
6
+ @x = @x.to_grad if @deg == "grad"
7
+ end
8
+ end
9
+
10
+ # vim:ft=ruby:
data/cmd/atime ADDED
@@ -0,0 +1,26 @@
1
+ class XRPN
2
+ def atime
3
+ t = @x.to_f
4
+ am = true
5
+ case t
6
+ when ..-12
7
+ t = t.abs
8
+ when -12..-1
9
+ t = t.abs
10
+ am = false
11
+ t += 12 if @clk24
12
+ when -1..0
13
+ t = t.abs
14
+ end
15
+ t = BigDecimal(t.to_s).truncate(@i).to_f
16
+ h = t.to_i
17
+ m = (100 * (t - h)).to_i
18
+ s = (100 * (100 * (t -h) - m)).round(@i)
19
+ @a += "#{h}:#{m}:#{s}"
20
+ if @clk24 == false
21
+ am ? @a += " AM" : @a += " PM"
22
+ end
23
+ end
24
+ end
25
+
26
+ # vim:ft=ruby:
data/cmd/atime24 ADDED
@@ -0,0 +1,21 @@
1
+ class XRPN
2
+ def atime24
3
+ t = @x.to_f
4
+ case t
5
+ when ..-12
6
+ t = t.abs
7
+ when -12..-1
8
+ t = t.abs
9
+ t += 12
10
+ when -1..0
11
+ t = t.abs
12
+ end
13
+ t = BigDecimal(t.to_s).truncate(@i).to_f
14
+ h = t.to_i
15
+ m = (100 * (t - h)).to_i
16
+ s = (100 * (100 * (t -h) - m)).round(@i)
17
+ @a += "#{h}:#{m}:#{s}"
18
+ end
19
+ end
20
+
21
+ # vim:ft=ruby:
data/cmd/atox ADDED
@@ -0,0 +1,9 @@
1
+ class XRPN
2
+ def atox
3
+ lift
4
+ @x = @a[0].ord
5
+ @a = @a[1..]
6
+ end
7
+ end
8
+
9
+ # vim:ft=ruby:
data/cmd/aview ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def aview
3
+ puts @a.c_a(1)
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/aviewc ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def aviewc
3
+ puts @a.color(@x.to_i)
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/beep ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def beep
3
+ `xdg-open ~/.xrpn/extra/beep41.wav`
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/bindec ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def bindec
3
+ @l = @x
4
+ @x = @x.to_s.convert_base(2, 10).to_f
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/cmd/cat ADDED
@@ -0,0 +1,26 @@
1
+ class XRPN
2
+ def cat (c)
3
+ case c.to_i
4
+ when 1
5
+ pcat
6
+ when 3
7
+ puts "Commands:"
8
+ i = 1
9
+ $cmd.each do |cm|
10
+ print cm.ljust(12)
11
+ print "\n" if i % 7 == 0
12
+ i += 1
13
+ end
14
+ print "\n"
15
+ when 4
16
+ Dir[Dir.home+"/.xrpn/data/*"].each do |file|
17
+ f = file.sub(/.*\/(.*)\...$/, '\1')
18
+ t = file.sub(/.*\.(..)$/, '\1').upcase
19
+ l = File.size(file) / 7
20
+ puts "#{f.ljust(12)} #{t} #{l.to_s.rjust(4)}"
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ # vim:ft=ruby:
data/cmd/cf ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def cf (r)
3
+ @flg[r] = false
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/chs ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def chs
3
+ @x = -@x
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/cla ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def cla
3
+ @a = ""
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clalma ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clalma
3
+ return "CLALMA: No clock, alarm or stopwatch functions are implemented"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clalmx ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clalmx
3
+ return "CLALMX: No clock, alarm or stopwatch functions are implemented"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/cld ADDED
@@ -0,0 +1,6 @@
1
+ class XRPN
2
+ def cld
3
+ end
4
+ end
5
+
6
+ # vim:ft=ruby:
data/cmd/clear ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clear
3
+ system("clear")
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clfl ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def clfl
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ @xmcont = [@xmcont[0]]
7
+ @xmcont[0][3] = 0.0
8
+ savexm
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/cmd/clk12 ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clk12
3
+ @clk24 = false
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clk24 ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clk24
3
+ @clk24 = true
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clkeys ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clkeys
3
+ return "CLKEYS: No need for this function as there is no calculator keyboard here."
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/cmd/clock ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def clock
3
+ return "CLOCK: Tick, tock... not implemented."
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby: