xrpn 1.1

Sign up to get free protection for your applications and to get access to all the features.
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: