xrpn 1.1.4 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
Files changed (291) hide show
  1. checksums.yaml +4 -4
  2. data/bin/xrpn +5 -5
  3. data/lib/{xrpn_load.rb → xrpn.rb} +1 -0
  4. data/xcmd/abs +7 -0
  5. data/xcmd/acos +10 -0
  6. data/xcmd/adate +12 -0
  7. data/xcmd/adateiso +13 -0
  8. data/xcmd/add +9 -0
  9. data/xcmd/adv +7 -0
  10. data/xcmd/agsub +8 -0
  11. data/xcmd/aleng +8 -0
  12. data/xcmd/almcat +7 -0
  13. data/xcmd/almnow +7 -0
  14. data/xcmd/anum +10 -0
  15. data/xcmd/aoff +7 -0
  16. data/xcmd/aon +7 -0
  17. data/xcmd/appchr +13 -0
  18. data/xcmd/apprec +13 -0
  19. data/xcmd/arcl +22 -0
  20. data/xcmd/arcli +7 -0
  21. data/xcmd/arclrec +30 -0
  22. data/xcmd/arot +13 -0
  23. data/xcmd/ashf +7 -0
  24. data/xcmd/asin +10 -0
  25. data/xcmd/asroom +7 -0
  26. data/xcmd/asto +21 -0
  27. data/xcmd/asub +8 -0
  28. data/xcmd/atan +10 -0
  29. data/xcmd/atime +26 -0
  30. data/xcmd/atime24 +21 -0
  31. data/xcmd/atox +9 -0
  32. data/xcmd/aview +7 -0
  33. data/xcmd/aviewc +7 -0
  34. data/xcmd/beep +7 -0
  35. data/xcmd/bindec +8 -0
  36. data/xcmd/cat +26 -0
  37. data/xcmd/cf +7 -0
  38. data/xcmd/chs +7 -0
  39. data/xcmd/cla +7 -0
  40. data/xcmd/clalma +7 -0
  41. data/xcmd/clalmx +7 -0
  42. data/xcmd/cld +6 -0
  43. data/xcmd/clear +7 -0
  44. data/xcmd/clfl +13 -0
  45. data/xcmd/clk12 +7 -0
  46. data/xcmd/clk24 +7 -0
  47. data/xcmd/clkeys +7 -0
  48. data/xcmd/clock +7 -0
  49. data/xcmd/clp +8 -0
  50. data/xcmd/clralms +7 -0
  51. data/xcmd/clrg +7 -0
  52. data/xcmd/clrgx +12 -0
  53. data/xcmd/cls +12 -0
  54. data/xcmd/clst +10 -0
  55. data/xcmd/clx +8 -0
  56. data/xcmd/cmdadd +7 -0
  57. data/xcmd/cmddel +7 -0
  58. data/xcmd/correct +7 -0
  59. data/xcmd/cos +10 -0
  60. data/xcmd/crflas +9 -0
  61. data/xcmd/crfld +9 -0
  62. data/xcmd/cube +8 -0
  63. data/xcmd/d_r +8 -0
  64. data/xcmd/date +8 -0
  65. data/xcmd/dateplus +12 -0
  66. data/xcmd/ddate +11 -0
  67. data/xcmd/dec +7 -0
  68. data/xcmd/decbin +8 -0
  69. data/xcmd/dechex +8 -0
  70. data/xcmd/decoct +8 -0
  71. data/xcmd/deg +7 -0
  72. data/xcmd/degq +7 -0
  73. data/xcmd/delchr +14 -0
  74. data/xcmd/delrec +12 -0
  75. data/xcmd/divide +9 -0
  76. data/xcmd/dmy +7 -0
  77. data/xcmd/dot +7 -0
  78. data/xcmd/dow +9 -0
  79. data/xcmd/drop +7 -0
  80. data/xcmd/dropy +7 -0
  81. data/xcmd/dse +40 -0
  82. data/xcmd/ed +7 -0
  83. data/xcmd/emdir +7 -0
  84. data/xcmd/emdirx +14 -0
  85. data/xcmd/emroom +7 -0
  86. data/xcmd/end +9 -0
  87. data/xcmd/eng +9 -0
  88. data/xcmd/enter +8 -0
  89. data/xcmd/exp +9 -0
  90. data/xcmd/expx1 +9 -0
  91. data/xcmd/fact +9 -0
  92. data/xcmd/fc +7 -0
  93. data/xcmd/fcc +8 -0
  94. data/xcmd/fcs +8 -0
  95. data/xcmd/fix +9 -0
  96. data/xcmd/fixq +7 -0
  97. data/xcmd/flsize +7 -0
  98. data/xcmd/frc +8 -0
  99. data/xcmd/fs +7 -0
  100. data/xcmd/fsc +8 -0
  101. data/xcmd/fss +8 -0
  102. data/xcmd/geir +11 -0
  103. data/xcmd/getas +7 -0
  104. data/xcmd/getfile +12 -0
  105. data/xcmd/getfilea +11 -0
  106. data/xcmd/getkey +9 -0
  107. data/xcmd/getkeyx +10 -0
  108. data/xcmd/getp +13 -0
  109. data/xcmd/getr +13 -0
  110. data/xcmd/getrec +8 -0
  111. data/xcmd/getrx +17 -0
  112. data/xcmd/getsub +7 -0
  113. data/xcmd/getweb +12 -0
  114. data/xcmd/getx +12 -0
  115. data/xcmd/grad +7 -0
  116. data/xcmd/gsb +7 -0
  117. data/xcmd/gto +23 -0
  118. data/xcmd/help +14 -0
  119. data/xcmd/hexdec +8 -0
  120. data/xcmd/hms +12 -0
  121. data/xcmd/hmsminus +14 -0
  122. data/xcmd/hmsplus +13 -0
  123. data/xcmd/hr +11 -0
  124. data/xcmd/inschr +14 -0
  125. data/xcmd/insrec +12 -0
  126. data/xcmd/int +8 -0
  127. data/xcmd/invf +7 -0
  128. data/xcmd/isg +40 -0
  129. data/xcmd/lastx +8 -0
  130. data/xcmd/lbl +6 -0
  131. data/xcmd/lift +8 -0
  132. data/xcmd/ln +8 -0
  133. data/xcmd/ln1x +8 -0
  134. data/xcmd/log +8 -0
  135. data/xcmd/mdy +7 -0
  136. data/xcmd/mean +11 -0
  137. data/xcmd/mod +13 -0
  138. data/xcmd/multiply +9 -0
  139. data/xcmd/oct +7 -0
  140. data/xcmd/octdec +8 -0
  141. data/xcmd/off +8 -0
  142. data/xcmd/on +7 -0
  143. data/xcmd/p_r +13 -0
  144. data/xcmd/pack +7 -0
  145. data/xcmd/page +13 -0
  146. data/xcmd/pagedel +8 -0
  147. data/xcmd/pageq +7 -0
  148. data/xcmd/pageswap +8 -0
  149. data/xcmd/pasn +7 -0
  150. data/xcmd/pcat +14 -0
  151. data/xcmd/pclps +12 -0
  152. data/xcmd/percent +9 -0
  153. data/xcmd/percentch +9 -0
  154. data/xcmd/pi +8 -0
  155. data/xcmd/posa +23 -0
  156. data/xcmd/posfl +26 -0
  157. data/xcmd/pow +9 -0
  158. data/xcmd/pprg +27 -0
  159. data/xcmd/pprgx +33 -0
  160. data/xcmd/pra +7 -0
  161. data/xcmd/prflags +8 -0
  162. data/xcmd/prompt +8 -0
  163. data/xcmd/prp +7 -0
  164. data/xcmd/prregs +8 -0
  165. data/xcmd/prstk +10 -0
  166. data/xcmd/prx +7 -0
  167. data/xcmd/prxm +21 -0
  168. data/xcmd/pse +7 -0
  169. data/xcmd/psize +7 -0
  170. data/xcmd/purfl +14 -0
  171. data/xcmd/r_d +8 -0
  172. data/xcmd/r_p +18 -0
  173. data/xcmd/rad +7 -0
  174. data/xcmd/rand +10 -0
  175. data/xcmd/rcl +23 -0
  176. data/xcmd/rclaf +7 -0
  177. data/xcmd/rclflag +16 -0
  178. data/xcmd/rclpt +8 -0
  179. data/xcmd/rclpta +16 -0
  180. data/xcmd/rclsw +7 -0
  181. data/xcmd/rdn +7 -0
  182. data/xcmd/recip +8 -0
  183. data/xcmd/regmove +18 -0
  184. data/xcmd/regswap +19 -0
  185. data/xcmd/reload +7 -0
  186. data/xcmd/reszfl +7 -0
  187. data/xcmd/rnd +8 -0
  188. data/xcmd/root +9 -0
  189. data/xcmd/rtn +12 -0
  190. data/xcmd/rubycmd +7 -0
  191. data/xcmd/runsw +7 -0
  192. data/xcmd/rup +7 -0
  193. data/xcmd/saveas +7 -0
  194. data/xcmd/savep +7 -0
  195. data/xcmd/saver +24 -0
  196. data/xcmd/saverx +31 -0
  197. data/xcmd/savex +10 -0
  198. data/xcmd/savexm +7 -0
  199. data/xcmd/sci +9 -0
  200. data/xcmd/sdev +11 -0
  201. data/xcmd/seekpt +10 -0
  202. data/xcmd/seekpta +7 -0
  203. data/xcmd/sep +7 -0
  204. data/xcmd/setaf +7 -0
  205. data/xcmd/setsw +7 -0
  206. data/xcmd/sf +7 -0
  207. data/xcmd/shellcmd +7 -0
  208. data/xcmd/sign +19 -0
  209. data/xcmd/sin +10 -0
  210. data/xcmd/size +7 -0
  211. data/xcmd/sizeq +7 -0
  212. data/xcmd/sminus +20 -0
  213. data/xcmd/splus +20 -0
  214. data/xcmd/sqr +8 -0
  215. data/xcmd/sqrt +8 -0
  216. data/xcmd/sreg +7 -0
  217. data/xcmd/sregq +7 -0
  218. data/xcmd/stdivide +22 -0
  219. data/xcmd/stmultiply +22 -0
  220. data/xcmd/sto +21 -0
  221. data/xcmd/stoflag +13 -0
  222. data/xcmd/stop +7 -0
  223. data/xcmd/stopsw +7 -0
  224. data/xcmd/stplus +22 -0
  225. data/xcmd/stsubtract +22 -0
  226. data/xcmd/subtract +9 -0
  227. data/xcmd/sw +7 -0
  228. data/xcmd/swap +7 -0
  229. data/xcmd/swpt +7 -0
  230. data/xcmd/tan +10 -0
  231. data/xcmd/tenx +8 -0
  232. data/xcmd/time +8 -0
  233. data/xcmd/tx +7 -0
  234. data/xcmd/version +7 -0
  235. data/xcmd/view +7 -0
  236. data/xcmd/writefile +12 -0
  237. data/xcmd/xeq +21 -0
  238. data/xcmd/xeq0 +7 -0
  239. data/xcmd/xeqnn +9 -0
  240. data/xcmd/xeqy +7 -0
  241. data/xcmd/xf +20 -0
  242. data/xcmd/xgt0 +7 -0
  243. data/xcmd/xgteq0 +7 -0
  244. data/xcmd/xgteqnn +9 -0
  245. data/xcmd/xgteqy +7 -0
  246. data/xcmd/xgtnn +9 -0
  247. data/xcmd/xgty +7 -0
  248. data/xcmd/xlt0 +7 -0
  249. data/xcmd/xlteq0 +7 -0
  250. data/xcmd/xlteqnn +9 -0
  251. data/xcmd/xlteqy +7 -0
  252. data/xcmd/xltnn +9 -0
  253. data/xcmd/xlty +7 -0
  254. data/xcmd/xmexistq +15 -0
  255. data/xcmd/xmfileq +7 -0
  256. data/xcmd/xneq0 +7 -0
  257. data/xcmd/xneqnn +9 -0
  258. data/xcmd/xneqy +7 -0
  259. data/xcmd/xnn +21 -0
  260. data/xcmd/xtoa +7 -0
  261. data/xcmd/xy +7 -0
  262. data/xcmd/xyzalm +7 -0
  263. data/xlib/_xrpn_version +5 -0
  264. data/xlib/bei +18 -0
  265. data/xlib/check +26 -0
  266. data/xlib/conditional +10 -0
  267. data/xlib/convert_base +8 -0
  268. data/xlib/debug_mode +124 -0
  269. data/xlib/dtparse +10 -0
  270. data/xlib/error +10 -0
  271. data/xlib/fact +7 -0
  272. data/xlib/getpt +7 -0
  273. data/xlib/help +12 -0
  274. data/xlib/hp_41 +83 -0
  275. data/xlib/ind +21 -0
  276. data/xlib/load_xm +28 -0
  277. data/xlib/locate_prg +32 -0
  278. data/xlib/numeric +62 -0
  279. data/xlib/numformat +12 -0
  280. data/xlib/optparse +23 -0
  281. data/xlib/read_cmd +12 -0
  282. data/xlib/read_state +6 -0
  283. data/xlib/save_state +18 -0
  284. data/xlib/save_xm +5 -0
  285. data/xlib/setpt +5 -0
  286. data/xlib/string +28 -0
  287. data/xlib/theme_dark +10 -0
  288. data/xlib/theme_light +10 -0
  289. data/xlib/xrpn_class +34 -0
  290. data/xrpn.gemspec +2 -2
  291. metadata +289 -3
data/xcmd/gsb ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def gsb (l)
3
+ xeq (l)
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
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
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def hexdec
3
+ @l = @x
4
+ @x = @x.to_s.convert_base(16, 10).to_f
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/hms ADDED
@@ -0,0 +1,12 @@
1
+ class XRPN
2
+ def hms
3
+ @l = @x
4
+ h = @x.to_i
5
+ st = @x * 3600
6
+ m = (st/60 - h * 60).to_i
7
+ s = (st - (m * 60 + h * 3600))
8
+ @x = @x.to_i + (m.to_f / 100) + (s / 10000)
9
+ end
10
+ end
11
+
12
+ # vim:ft=ruby:
data/xcmd/hmsminus ADDED
@@ -0,0 +1,14 @@
1
+ class XRPN
2
+ def hmsminus
3
+ lastx = @x
4
+ hr
5
+ xy
6
+ hr
7
+ xy
8
+ self.-
9
+ hms
10
+ @l = lastx
11
+ end
12
+ end
13
+
14
+ # vim:ft=ruby:
data/xcmd/hmsplus ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def hmsplus
3
+ lastx = @x
4
+ hr
5
+ xy
6
+ hr
7
+ self.+
8
+ hms
9
+ @l = lastx
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/xcmd/hr ADDED
@@ -0,0 +1,11 @@
1
+ class XRPN
2
+ def hr
3
+ @l = @x
4
+ s = @x.to_i * 3600
5
+ s += (@x.frc * 100).to_i * 60
6
+ s += ((@x * 100).frc * 100).round(4)
7
+ @x = s / 3600
8
+ end
9
+ end
10
+
11
+ # vim:ft=ruby:
data/xcmd/inschr ADDED
@@ -0,0 +1,14 @@
1
+ class XRPN
2
+ def inschr
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ r = @xmcont[0][3].to_i + 1
7
+ c = (@xmcont[0][3].frc * 1000).to_i
8
+ @xmcont[r][c - 1] += @a
9
+ savexm
10
+ end
11
+ end
12
+ end
13
+
14
+ # vim:ft=ruby:
data/xcmd/insrec ADDED
@@ -0,0 +1,12 @@
1
+ class XRPN
2
+ def insrec
3
+ if @xmcont[0][0] == ""
4
+ return
5
+ else
6
+ @xmcont.insert(@xmcont[0][3].to_i + 1, @a)
7
+ savexm
8
+ end
9
+ end
10
+ end
11
+
12
+ # vim:ft=ruby:
data/xcmd/int ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def int
3
+ @l = @x
4
+ @x = @x.to_i
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/invf ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def invf (f)
3
+ @flg[f] = !@flg[f]
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
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
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def lastx
3
+ @y, @z, @t = @x, @y, @z
4
+ @x = @l
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/lbl ADDED
@@ -0,0 +1,6 @@
1
+ class XRPN
2
+ def lbl (l)
3
+ end
4
+ end
5
+
6
+ # vim:ft=ruby:
data/xcmd/lift ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def lift
3
+ return if @nolift
4
+ @y, @z, @t = @x, @y, @z
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/ln ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def ln
3
+ @l = @x
4
+ @x = Math::log(@x)
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/ln1x ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def ln1x
3
+ @l = @x
4
+ @x = Math::log(1 + @x)
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/log ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def log
3
+ @l = @x
4
+ @x = Math::log10(@x)
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/mdy ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def mdy
3
+ @flg["31"] = false
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/mean ADDED
@@ -0,0 +1,11 @@
1
+ class XRPN
2
+ def mean
3
+ @l = @x
4
+ lift
5
+ lift
6
+ @x = @reg[@srg] / @reg[@srg + 5]
7
+ @y = @reg[@srg + 2] / @reg[@srg + 5]
8
+ end
9
+ end
10
+
11
+ # vim:ft=ruby:
data/xcmd/mod ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def mod
3
+ @l = @x
4
+ begin
5
+ @x = @y % @x
6
+ rescue ZeroDivisionError
7
+ @x = @y
8
+ end
9
+ dropy
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/xcmd/multiply 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/xcmd/oct ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def oct
3
+ decoct
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/octdec ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def octdec
3
+ @l = @x
4
+ @x = @x.to_s.convert_base(8, 10).to_f
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/off ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def off
3
+ @flg["44"] = false
4
+ exit
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/on ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def on
3
+ @flg["44"] = true
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/p_r ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def p_r
3
+ @l = @x
4
+ r = @x
5
+ t = @y
6
+ t = t * Math::PI / 180 if @deg == "deg"
7
+ t = t * Math::PI / 200 if @deg == "grad"
8
+ @x = r * Math::cos(t)
9
+ @y = r * Math::sin(t)
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/xcmd/pack ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def pack
3
+ return "PACK: No need for packing clothes or anything else."
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/page ADDED
@@ -0,0 +1,13 @@
1
+ class XRPN
2
+ def page (p)
3
+ if p.to_i >= @prg.length
4
+ return "Page number out of range."
5
+ else
6
+ @pg = p.to_i
7
+ @pc = 0
8
+ @rtn = []
9
+ end
10
+ end
11
+ end
12
+
13
+ # vim:ft=ruby:
data/xcmd/pagedel ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def pagedel (p)
3
+ @prg.delete_at(p)
4
+ return "Deleted page #{p}"
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/pageq ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def page?
3
+ return "Page = #{@pg}"
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/pageswap ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def pageswap
3
+ @prg[@x.to_i], @prg[@y.to_i] = @prg[@y.to_i], @prg[@x.to_i]
4
+ return "Pages #{@x.to_i} and #{@y.to_i} swapped"
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/pasn ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def pasn
3
+ return "PASN: This is not a calculator with keys to assign functions to."
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/pcat ADDED
@@ -0,0 +1,14 @@
1
+ class XRPN
2
+ def pcat
3
+ @prg.each_index do |i|
4
+ @prg[i].each do |l|
5
+ if l.match(/lbl ".*"/i)
6
+ lbl = l.sub(/lbl "(.*)"/i, '\1')
7
+ puts "Page #{i}: #{lbl}"
8
+ end
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ # vim:ft=ruby:
data/xcmd/pclps ADDED
@@ -0,0 +1,12 @@
1
+ class XRPN
2
+ def pclps
3
+ pr = "\"#{@a}\""
4
+ page, pos = locate_prg (pr)
5
+ until pos == @prg[page].length do
6
+ @prg[page].delete_at(pos)
7
+ end
8
+ @prg[page].push("END")
9
+ end
10
+ end
11
+
12
+ # vim:ft=ruby:
data/xcmd/percent ADDED
@@ -0,0 +1,9 @@
1
+ class XRPN
2
+ def %
3
+ @l = @x
4
+ @x = (@x * @y) / 100
5
+ dropy
6
+ end
7
+ end
8
+
9
+ # vim:ft=ruby:
data/xcmd/percentch ADDED
@@ -0,0 +1,9 @@
1
+ class XRPN
2
+ def perch
3
+ @l = @x
4
+ @x = 100*((@x - @y) / @y)
5
+ dropy
6
+ end
7
+ end
8
+
9
+ # vim:ft=ruby:
data/xcmd/pi ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def pi
3
+ lift
4
+ @x = Math::PI
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
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
@@ -0,0 +1,9 @@
1
+ class XRPN
2
+ def pow
3
+ @l = @x
4
+ @x = @y ** @x
5
+ dropy
6
+ end
7
+ end
8
+
9
+ # vim:ft=ruby:
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
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def pra
3
+ puts "α = \"#{@a}\""
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/prflags ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def prflags
3
+ @flg = @flg.sort.to_h
4
+ @flg.each_pair {|key, value| puts "#{key}: #{value}"}
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/prompt ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def prompt
3
+ puts @a.c_a(1)
4
+ $prompt = true
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
data/xcmd/prp ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def prp
3
+ pprg
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby:
data/xcmd/prregs ADDED
@@ -0,0 +1,8 @@
1
+ class XRPN
2
+ def prregs
3
+ @reg = @reg.sort.to_h
4
+ @reg.each_pair {|key, value| puts "#{key}: #{numformat(value)}"}
5
+ end
6
+ end
7
+
8
+ # vim:ft=ruby:
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:
data/xcmd/prx ADDED
@@ -0,0 +1,7 @@
1
+ class XRPN
2
+ def prx
3
+ puts "X = " + numformat(@x)
4
+ end
5
+ end
6
+
7
+ # vim:ft=ruby: