easycoder 250506.1__tar.gz → 250507.2__tar.gz

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.

Potentially problematic release.


This version of easycoder might be problematic. Click here for more details.

Files changed (186) hide show
  1. {easycoder-250506.1 → easycoder-250507.2}/PKG-INFO +1 -1
  2. {easycoder-250506.1 → easycoder-250507.2}/easycoder/__init__.py +1 -1
  3. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_classes.py +8 -0
  4. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_core.py +15 -15
  5. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_pyside.py +2 -3
  6. easycoder-250506.1/config.ecs → easycoder-250507.2/rbrconf.ecs +111 -63
  7. easycoder-250506.1/config.py → easycoder-250507.2/rbrconf.py +1 -1
  8. easycoder-250506.1/demo.ecs +0 -34
  9. easycoder-250506.1/group.py +0 -36
  10. easycoder-250506.1/temp.ecs +0 -1622
  11. easycoder-250506.1/test.ecs +0 -11
  12. easycoder-250506.1/test.py +0 -3
  13. {easycoder-250506.1 → easycoder-250507.2}/.gitignore +0 -0
  14. {easycoder-250506.1 → easycoder-250507.2}/LICENSE +0 -0
  15. {easycoder-250506.1 → easycoder-250507.2}/README.md +0 -0
  16. {easycoder-250506.1 → easycoder-250507.2}/doc/README.md +0 -0
  17. {easycoder-250506.1 → easycoder-250507.2}/doc/core/README.md +0 -0
  18. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/boolean.md +0 -0
  19. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/empty.md +0 -0
  20. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/ends.md +0 -0
  21. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/even.md +0 -0
  22. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/exists.md +0 -0
  23. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/greater.md +0 -0
  24. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/hasProperty.md +0 -0
  25. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/includes.md +0 -0
  26. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/is.md +0 -0
  27. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/less.md +0 -0
  28. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/list.md +0 -0
  29. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/none.md +0 -0
  30. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/not.md +0 -0
  31. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/numeric.md +0 -0
  32. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/object.md +0 -0
  33. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/odd.md +0 -0
  34. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/starts.md +0 -0
  35. {easycoder-250506.1 → easycoder-250507.2}/doc/core/conditions/string.md +0 -0
  36. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/add.md +0 -0
  37. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/append.md +0 -0
  38. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/assert.md +0 -0
  39. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/begin.md +0 -0
  40. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/clear.md +0 -0
  41. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/close.md +0 -0
  42. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/create.md +0 -0
  43. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/debug.md +0 -0
  44. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/decrement.md +0 -0
  45. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/delete.md +0 -0
  46. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/divide.md +0 -0
  47. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/exit.md +0 -0
  48. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/file.md +0 -0
  49. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/fork.md +0 -0
  50. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/get.md +0 -0
  51. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/go.md +0 -0
  52. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/gosub.md +0 -0
  53. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/if.md +0 -0
  54. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/import.md +0 -0
  55. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/increment.md +0 -0
  56. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/index.md +0 -0
  57. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/init.md +0 -0
  58. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/input.md +0 -0
  59. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/load.md +0 -0
  60. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/lock.md +0 -0
  61. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/log.md +0 -0
  62. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/module.md +0 -0
  63. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/multiply.md +0 -0
  64. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/negate.md +0 -0
  65. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/open.md +0 -0
  66. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/pop.md +0 -0
  67. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/post.md +0 -0
  68. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/print.md +0 -0
  69. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/push.md +0 -0
  70. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/put.md +0 -0
  71. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/read.md +0 -0
  72. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/release.md +0 -0
  73. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/replace.md +0 -0
  74. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/return.md +0 -0
  75. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/run.md +0 -0
  76. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/save.md +0 -0
  77. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/script.md +0 -0
  78. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/set.md +0 -0
  79. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/split.md +0 -0
  80. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/stack.md +0 -0
  81. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/stop.md +0 -0
  82. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/system.md +0 -0
  83. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/take.md +0 -0
  84. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/toggle.md +0 -0
  85. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/truncate.md +0 -0
  86. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/unlock.md +0 -0
  87. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/variable.md +0 -0
  88. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/wait.md +0 -0
  89. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/while.md +0 -0
  90. {easycoder-250506.1 → easycoder-250507.2}/doc/core/keywords/write.md +0 -0
  91. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/arg.md +0 -0
  92. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/args.md +0 -0
  93. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/cos.md +0 -0
  94. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/datime.md +0 -0
  95. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/decode.md +0 -0
  96. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/element.md +0 -0
  97. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/elements.md +0 -0
  98. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/empty.md +0 -0
  99. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/encode.md +0 -0
  100. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/error.md +0 -0
  101. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/files.md +0 -0
  102. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/float.md +0 -0
  103. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/from.md +0 -0
  104. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/hash.md +0 -0
  105. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/index.md +0 -0
  106. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/integer.md +0 -0
  107. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/json.md +0 -0
  108. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/keys.md +0 -0
  109. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/left.md +0 -0
  110. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/length.md +0 -0
  111. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/lowercase.md +0 -0
  112. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/memory.md +0 -0
  113. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/modification.md +0 -0
  114. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/modulo.md +0 -0
  115. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/newline.md +0 -0
  116. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/now.md +0 -0
  117. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/position.md +0 -0
  118. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/property.md +0 -0
  119. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/random.md +0 -0
  120. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/right.md +0 -0
  121. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/sin.md +0 -0
  122. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/stringify.md +0 -0
  123. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/tab.md +0 -0
  124. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/tan.md +0 -0
  125. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/timestamp.md +0 -0
  126. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/today.md +0 -0
  127. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/trim.md +0 -0
  128. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/type.md +0 -0
  129. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/uppercase.md +0 -0
  130. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/value.md +0 -0
  131. {easycoder-250506.1 → easycoder-250507.2}/doc/core/values/weekday.md +0 -0
  132. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/README.md +0 -0
  133. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/attach.md +0 -0
  134. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/close.md +0 -0
  135. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/create.md +0 -0
  136. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/ellipse.md +0 -0
  137. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/image.md +0 -0
  138. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/move.md +0 -0
  139. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/on.md +0 -0
  140. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/rectangle.md +0 -0
  141. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/render.md +0 -0
  142. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/run.md +0 -0
  143. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/set.md +0 -0
  144. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/keywords/text.md +0 -0
  145. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/values/attribute.md +0 -0
  146. {easycoder-250506.1 → easycoder-250507.2}/doc/graphics/values/window.md +0 -0
  147. {easycoder-250506.1 → easycoder-250507.2}/easycoder/README.md +0 -0
  148. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_compiler.py +0 -0
  149. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_condition.py +0 -0
  150. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_graphics.py +0 -0
  151. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_gutils.py +0 -0
  152. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_handler.py +0 -0
  153. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_program.py +0 -0
  154. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_timestamp.py +0 -0
  155. {easycoder-250506.1 → easycoder-250507.2}/easycoder/ec_value.py +0 -0
  156. {easycoder-250506.1 → easycoder-250507.2}/images/Semoigo Dawn.jpg +0 -0
  157. {easycoder-250506.1 → easycoder-250507.2}/json/graphics-demo.json +0 -0
  158. {easycoder-250506.1 → easycoder-250507.2}/plugins/ec_keyboard.py +0 -0
  159. {easycoder-250506.1 → easycoder-250507.2}/plugins/ec_p100.py +0 -0
  160. {easycoder-250506.1 → easycoder-250507.2}/plugins/ec_pyside6.py +0 -0
  161. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/4-function.json +0 -0
  162. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/4-function.png +0 -0
  163. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-0.json +0 -0
  164. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-0.png +0 -0
  165. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-1.json +0 -0
  166. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-1.png +0 -0
  167. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-2.json +0 -0
  168. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-2.png +0 -0
  169. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-3.json +0 -0
  170. {easycoder-250506.1 → easycoder-250507.2}/plugins/keyboards/qwerty-3.png +0 -0
  171. {easycoder-250506.1 → easycoder-250507.2}/plugins/points.py +0 -0
  172. {easycoder-250506.1 → easycoder-250507.2}/pyproject.toml +0 -0
  173. /easycoder-250506.1/q.py → /easycoder-250507.2/q1.py +0 -0
  174. {easycoder-250506.1 → easycoder-250507.2}/q2.py +0 -0
  175. {easycoder-250506.1 → easycoder-250507.2}/scripts/README.md +0 -0
  176. {easycoder-250506.1 → easycoder-250507.2}/scripts/benchmark.ecs +0 -0
  177. {easycoder-250506.1 → easycoder-250507.2}/scripts/config.ecg +0 -0
  178. {easycoder-250506.1 → easycoder-250507.2}/scripts/connect.ecg +0 -0
  179. {easycoder-250506.1 → easycoder-250507.2}/scripts/ec_keyboard.py +0 -0
  180. {easycoder-250506.1 → easycoder-250507.2}/scripts/findxr.ecs +0 -0
  181. {easycoder-250506.1 → easycoder-250507.2}/scripts/fizzbuzz.ecs +0 -0
  182. {easycoder-250506.1 → easycoder-250507.2}/scripts/hello.ecs +0 -0
  183. {easycoder-250506.1 → easycoder-250507.2}/scripts/points.ecs +0 -0
  184. {easycoder-250506.1 → easycoder-250507.2}/scripts/test.ecs +0 -0
  185. {easycoder-250506.1 → easycoder-250507.2}/scripts/testg.ecg +0 -0
  186. {easycoder-250506.1 → easycoder-250507.2}/scripts/tests.ecs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: easycoder
3
- Version: 250506.1
3
+ Version: 250507.2
4
4
  Summary: Rapid scripting in English
5
5
  Keywords: compiler,scripting,prototyping,programming,coding,python,low code,hypertalk,computer language,learn to code
6
6
  Author-email: Graham Trott <gtanyware@gmail.com>
@@ -9,4 +9,4 @@ from .ec_program import *
9
9
  from .ec_timestamp import *
10
10
  from .ec_value import *
11
11
 
12
- __version__ = "250506.1"
12
+ __version__ = "250507.2"
@@ -8,6 +8,10 @@ class FatalError:
8
8
  print(f'Compile error in {compiler.program.name} at line {lino + 1} ({script}): {message}')
9
9
  sys.exit()
10
10
 
11
+ class NoValueError(FatalError):
12
+ def __init__(self, compiler, record):
13
+ super().__init__(compiler, 'Variable {record["name"]} does not hold a value')
14
+
11
15
  class AssertionError:
12
16
  def __init__(self, program, msg=None):
13
17
  code = program.code[program.pc]
@@ -30,6 +34,10 @@ class RuntimeError:
30
34
  print(f'Runtime Error in {program.name} at line {lino + 1} ({script}): {message}')
31
35
  sys.exit()
32
36
 
37
+ class NoValueRuntimeError(RuntimeError):
38
+ def __init__(self, program, record):
39
+ super().__init__(program, 'Variable {record["name"]} does not hold a value')
40
+
33
41
  class RuntimeWarning:
34
42
  def __init__(self, program, message):
35
43
  if program == None:
@@ -2,7 +2,7 @@ import json, math, hashlib, threading, os, subprocess, sys, requests, time, numb
2
2
  from psutil import Process
3
3
  from datetime import datetime, timezone
4
4
  from random import randrange
5
- from .ec_classes import FatalError, RuntimeWarning, RuntimeError, AssertionError, Condition, Object
5
+ from .ec_classes import FatalError, RuntimeWarning, RuntimeError, AssertionError, NoValueError, NoValueRuntimeError, Condition, Object
6
6
  from .ec_handler import Handler
7
7
  from .ec_timestamp import getTimestamp
8
8
 
@@ -94,7 +94,7 @@ class Core(Handler):
94
94
  command['target'] = symbolRecord['name']
95
95
  self.add(command)
96
96
  return True
97
- self.warning(f'Core.append: Variable "{symbolRecord["name"]}" does not hold a value')
97
+ self.warning(f'Core.append: Variable {symbolRecord["name"]} does not hold a value')
98
98
  return False
99
99
 
100
100
  def r_append(self, command):
@@ -251,7 +251,7 @@ class Core(Handler):
251
251
  command['target'] = self.getToken()
252
252
  self.add(command)
253
253
  return True
254
- self.warning(f'Core.decrement: Variable "{symbolRecord["name"]}" does not hold a value')
254
+ self.warning(f'Core.decrement: Variable {symbolRecord["name"]} does not hold a value')
255
255
  return False
256
256
 
257
257
  def r_decrement(self, command):
@@ -277,7 +277,7 @@ class Core(Handler):
277
277
  command['var'] = record['name']
278
278
  self.add(command)
279
279
  return True
280
- FatalError(self.compiler, f'Variable {record['name']} does not hold a value')
280
+ NoValueError(self.compiler, record)
281
281
  self.warning(f'Core.delete: variable expected; got {self.getToken()}')
282
282
  else:
283
283
  self.warning(f'Core.delete: "file", "property" or "element" expected; got {token}')
@@ -418,7 +418,7 @@ class Core(Handler):
418
418
  if symbolRecord['hasValue']:
419
419
  command['target'] = self.getToken()
420
420
  else:
421
- FatalError(self.compiler, f'Variable "{symbolRecord["name"]}" does not hold a value')
421
+ NoValueError(self.compiler, symbolRecord)
422
422
  if self.nextIs('from'):
423
423
  if self.nextIs('url'):
424
424
  url = self.nextValue()
@@ -629,7 +629,7 @@ class Core(Handler):
629
629
  command['target'] = self.getToken()
630
630
  self.add(command)
631
631
  return True
632
- self.warning(f'Core.increment: Variable "{symbolRecord["name"]}" does not hold a value')
632
+ self.warning(f'Core.increment: Variable {symbolRecord["name"]} does not hold a value')
633
633
  return False
634
634
 
635
635
  def r_increment(self, command):
@@ -829,13 +829,13 @@ class Core(Handler):
829
829
  command['target'] = self.getToken()
830
830
  self.add(command)
831
831
  return True
832
- self.warning(f'Core.negate: Variable "{symbolRecord["name"]}" does not hold a value')
832
+ self.warning(f'Core.negate: Variable {symbolRecord["name"]} does not hold a value')
833
833
  return False
834
834
 
835
835
  def r_negate(self, command):
836
836
  symbolRecord = self.getVariable(command['target'])
837
837
  if not symbolRecord['hasValue']:
838
- RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
838
+ NoValueRuntimeError(self.program, symbolRecord)
839
839
  return None
840
840
  value = self.getSymbolValue(symbolRecord)
841
841
  if value == None:
@@ -937,7 +937,7 @@ class Core(Handler):
937
937
  def r_pop(self, command):
938
938
  symbolRecord = self.getVariable(command['target'])
939
939
  if not symbolRecord['hasValue']:
940
- RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
940
+ NoValueRuntimeError(self.program, symbolRecord)
941
941
  stackRecord = self.getVariable(command['from'])
942
942
  stack = self.getSymbolValue(stackRecord)
943
943
  v = stack.pop()
@@ -1091,7 +1091,7 @@ class Core(Handler):
1091
1091
  return -1
1092
1092
  symbolRecord = self.getVariable(command['target'])
1093
1093
  if not symbolRecord['hasValue']:
1094
- RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
1094
+ NoValueRuntimeError(self.program, symbolRecord)
1095
1095
  return -1
1096
1096
  self.putSymbolValue(symbolRecord, value)
1097
1097
  return self.nextPC()
@@ -1406,13 +1406,13 @@ class Core(Handler):
1406
1406
  command['target'] = self.getToken()
1407
1407
  self.add(command)
1408
1408
  return True
1409
- self.warning(f'Core.negate: Variable "{symbolRecord["name"]}" does not hold a value')
1409
+ self.warning(f'Core.negate: Variable {symbolRecord["name"]} does not hold a value')
1410
1410
  return False
1411
1411
 
1412
1412
  def r_shuffle(self, command):
1413
1413
  symbolRecord = self.getVariable(command['target'])
1414
1414
  if not symbolRecord['hasValue']:
1415
- RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
1415
+ NoValueRuntimeError(self.program, symbolRecord)
1416
1416
  return None
1417
1417
  value = self.getSymbolValue(symbolRecord)
1418
1418
  if value == None:
@@ -1735,7 +1735,7 @@ class Core(Handler):
1735
1735
  def incdec(self, command, mode):
1736
1736
  symbolRecord = self.getVariable(command['target'])
1737
1737
  if not symbolRecord['hasValue']:
1738
- RuntimeError(self.program, f'{symbolRecord["name"]} does not hold a value')
1738
+ NoValueRuntimeError(self.program, symbolRecord)
1739
1739
  value = self.getSymbolValue(symbolRecord)
1740
1740
  if value == None:
1741
1741
  RuntimeError(self.program, f'{symbolRecord["name"]} has not been initialised')
@@ -1805,7 +1805,7 @@ class Core(Handler):
1805
1805
  if symbolRecord['hasValue']:
1806
1806
  value['target'] = symbolRecord['name']
1807
1807
  return value
1808
- self.warning(f'Core.compileValue: Token \'{self.getToken()}\' does not hold a value')
1808
+ self.warning(f'Core.compileValue: Token {symbolRecord["name"]} does not hold a value')
1809
1809
  return None
1810
1810
 
1811
1811
  if token == 'property':
@@ -1816,7 +1816,7 @@ class Core(Handler):
1816
1816
  if symbolRecord['hasValue']:
1817
1817
  value['target'] = symbolRecord['name']
1818
1818
  return value
1819
- FatalError(self.compiler, 'Variable does not hold a value')
1819
+ NoValueError(self.compiler, symbolRecord)
1820
1820
  return None
1821
1821
 
1822
1822
  if token == 'arg':
@@ -1,5 +1,5 @@
1
1
  import sys
2
- from easycoder import Handler, FatalError, RuntimeError
2
+ from easycoder import Handler, RuntimeError
3
3
  from PySide6.QtCore import Qt, QTimer
4
4
  from PySide6.QtGui import QPixmap
5
5
  from PySide6.QtWidgets import (
@@ -690,7 +690,7 @@ class Graphics(Handler):
690
690
  command['index'] = self.nextValue()
691
691
  self.skip('of')
692
692
  else:
693
- command['name'] = self.nextValue()
693
+ command['name'] = self.getValue()
694
694
  self.skip('in')
695
695
  if self.nextIsSymbol():
696
696
  record = self.getSymbolRecord()
@@ -878,7 +878,6 @@ class Graphics(Handler):
878
878
 
879
879
  def r_start(self, command):
880
880
  def on_last_window_closed():
881
- print("Kill the application...")
882
881
  self.program.kill()
883
882
  def resume():
884
883
  self.program.flush(self.nextPC())
@@ -1,6 +1,6 @@
1
- ! config.ecs
1
+ ! rbrconf.ecs
2
2
 
3
- script Configurator
3
+ script RBRConfigurator
4
4
 
5
5
  use graphics
6
6
 
@@ -109,7 +109,6 @@
109
109
  create Layout type QHBoxLayout
110
110
  add Layout to Group
111
111
  create SystemsCombo
112
- on select SystemsCombo go to SystemsComboSelect
113
112
  add stretch SystemsCombo to Layout
114
113
  create ScanSystemsButton text `System Scan`
115
114
  disable ScanSystemsButton
@@ -294,6 +293,7 @@
294
293
  variable Pin
295
294
  variable D
296
295
  variable F
296
+ variable K
297
297
  variable N
298
298
  variable P
299
299
  variable S
@@ -319,6 +319,8 @@ Start:
319
319
  put empty into SystemIPAddr
320
320
  clear DeviceSelected
321
321
 
322
+ gosub to SetBusy
323
+
322
324
  ! Get the host SSID
323
325
  put `Getting host SSID...` into StatusMessage
324
326
  gosub to Working
@@ -352,17 +354,17 @@ Start:
352
354
  if the count of SystemsCombo is 0 put empty into SystemName
353
355
  else
354
356
  begin
355
- put the keys of Systems into Keys
356
- put element 0 of Keys into SystemName
357
- end
358
- set property `current-system` of Config to SystemName
359
- if SystemName is not empty
360
- begin
361
- select SystemName in SystemsCombo
362
- enable ClearSystemButton
357
+ put property `current-system` of Config into SystemName
358
+ if SystemName is not empty
359
+ begin
360
+ select SystemName in SystemsCombo
361
+ ! log prettify SystemConfig
362
+ gosub to SelectSystem
363
+ end
363
364
  end
364
365
 
365
366
  gosub to ManageButtonStates
367
+ on select SystemsCombo go to SystemsComboSelect
366
368
  stop
367
369
 
368
370
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -403,13 +405,13 @@ ScanSystemsClick:
403
405
  stop
404
406
 
405
407
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
406
- ! Scan the network for RBR system controllers
408
+ ! Scan the local network for RBR system controllers
407
409
  ScanSystems:
408
410
  log `Scan systems`
409
411
  put trim system `hostname -I` into MyIPAddr
410
412
  log MyIPAddr
411
- put 245 into N
412
- while N is less than 250
413
+ put 1 into N
414
+ while N is less than 255
413
415
  begin
414
416
  put the position of the last `.` in MyIPAddr into P
415
417
  increment P
@@ -420,7 +422,6 @@ ScanSystems:
420
422
  get Result from url `http://` cat IPAddr cat `:17348/cgi-bin/mac.py` timeout 1 or go to SS2
421
423
  increment Count
422
424
  put trim Result into Result
423
- log Result
424
425
  log IPAddr cat `: ` cat Result
425
426
  put the position of ` ` in Result into P
426
427
  put left P of Result into SystemMAC
@@ -438,15 +439,17 @@ ScanSystems:
438
439
  set property `password` of SystemConfig to SystemPassword
439
440
  set property `devices` of SystemConfig to json `{}`
440
441
  log `Adding ` cat SystemName cat ` to Systems`
441
- gosub UpdateSystems
442
- log prettify SystemConfig
443
442
  gosub to GetConfigData
443
+ ! log prettify SystemConfig
444
+ set property SystemName of Systems to SystemConfig
444
445
  SS2:
445
446
  wait 10 ticks
446
447
  increment N
447
448
  end
448
449
  set property `current-system` of Config to SystemName
449
- log `After scan: ` cat prettify Config
450
+ gosub to UpdateSystems
451
+ ! log `After scan: ` cat prettify Config
452
+ gosub to PostConfigData
450
453
  go to OK
451
454
 
452
455
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -454,8 +457,8 @@ ScanSystems:
454
457
  GetConfigData:
455
458
  gosub to SetBusy
456
459
  if SystemName is empty return
460
+ log prettify SystemConfig
457
461
  log `Get the config data for ` cat SystemName
458
- put property `devices` of SystemConfig into Devices
459
462
  get Value from url `https://rbrheating.com/ui/resources/php/rest.php/config/`
460
463
  cat SystemMAC cat `/` cat SystemPassword
461
464
  or
@@ -463,16 +466,30 @@ GetConfigData:
463
466
  put `Can't read the config file for ` cat SystemName cat `(` cat MAC cat `/` cat Password cat `)` into StatusMessage
464
467
  go to Error
465
468
  end
466
- ! If the server has data, use it instead of the local config
469
+ ! log Value
470
+ ! If the server has data, copy it into the local config
471
+ if Value is `""` put empty into Value
467
472
  if Value is empty put `{}` into Value
468
473
  if Value is not `{}`
469
474
  begin
470
- log `Use config data from the server`
471
- put json Value into SystemConfig
472
- gosub to UpdateSystems
475
+ log `Add config data from the server`
476
+ put json Value into Value
477
+ ! log prettify Value
478
+ put the keys of Value into Keys
479
+ put 0 into K
480
+ while K is less than the count of Keys
481
+ begin
482
+ put element K of Keys into Name
483
+ log `Adding ` cat Name cat ` ` cat property Name of Value
484
+ ! if Name is `ssid` set property `host-ssid` of SystemConfig to property Name of Value
485
+ ! else if Name is `password` set property `host-password` of SystemConfig to property Name of Value
486
+ ! else
487
+ set property Name of SystemConfig to property Name of Value
488
+ increment K
489
+ end
473
490
  end
474
- ! log prettify SystemConfig
475
- gosub to PostConfigData
491
+ gosub to UpdateSystems
492
+ put property `devices` of SystemConfig into Devices
476
493
  return
477
494
 
478
495
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
@@ -496,19 +513,25 @@ RefreshSystemsCombo:
496
513
  SystemsComboSelect:
497
514
  gosub to ResumeSystemController
498
515
  put SystemsCombo into SystemName
499
- if SystemName is not empty
500
- begin
501
- log `Select system ` cat SystemName
502
- set property `current-system` of Config to SystemName
503
- put property SystemName of Systems into SystemConfig
504
- put property `ipaddr` of SystemConfig into SystemIPAddr
505
- gosub to PopulateSystemInfo
506
- gosub to PauseSystemController
507
- end
516
+ if SystemName is not empty gosub to SelectSystem
508
517
  gosub to ManageButtonStates
509
518
  if not ErrorFlag gosub to OK
510
519
  stop
511
520
 
521
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
522
+ ! Select a system
523
+ SelectSystem:
524
+ log `Select system ` cat SystemName
525
+ set property `current-system` of Config to SystemName
526
+ put property SystemName of Systems into SystemConfig
527
+ put property `ipaddr` of SystemConfig into SystemIPAddr
528
+ put property `mac` of SystemConfig into SystemMAC
529
+ put property `password` of SystemConfig into SystemPassword
530
+ gosub to PopulateSystemInfo
531
+ gosub to PostConfigData
532
+ gosub to PauseSystemController
533
+ return
534
+
512
535
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
513
536
  ! Remove a system from the combo box
514
537
  RemoveSystemClick:
@@ -525,6 +548,9 @@ RemoveSystemClick:
525
548
  remove the current item from SystemsCombo
526
549
  delete property SystemName of Systems
527
550
  put empty into SystemName
551
+ put empty into SystemConfig
552
+ set the text of MasterDeviceButton to empty
553
+ clear SlaveList
528
554
  set property `current-system` of Config to SystemsCombo
529
555
  set property `systems` of Config to Systems
530
556
  put empty into SystemHostSSID
@@ -862,26 +888,48 @@ CreateDevice:
862
888
  PopulateSystemInfo:
863
889
  log `Populate fields for ` cat SystemName
864
890
  put property `host-ssid` of SystemConfig into SystemHostSSID
891
+ put property `host-password` of SystemConfig into Password
865
892
  if SystemHostSSID is not HostSSID
866
893
  begin
867
- put property SystemHostSSID of Hosts into Password
868
- put `Connect to host ` cat SystemHostSSID cat ` with password ` cat Password into StatusMessage
894
+ put `Different host SSID: ` cat SystemHostSSID into StatusMessage
869
895
  gosub to Working
870
- put system `nmcli dev wifi connect ` cat SystemHostSSID cat ` password ` cat Password into SystemCallResult
871
- split SystemCallResult on ` `
872
- if the elements of SystemCallResult is greater than 2
896
+ create MessageBox on Window
897
+ style question
898
+ title `Move system`
899
+ message `Shall I move the system to the current host (` cat HostSSID cat `)?`
900
+ show MessageBox giving Value
901
+ if Value is `Yes`
902
+ begin
903
+ put HostSSID into SystemHostSSID
904
+ set property `host-ssid` of SystemConfig to HostSSID
905
+ set property `host-password` of SystemConfig to HostPassword
906
+ gosub to UpdateSystems
907
+ end
908
+ else
873
909
  begin
874
- index SystemCallResult to 2
875
- if SystemCallResult is `successfully`
910
+ put SystemHostSSID into HostSSID
911
+ put Password into HostPassword
912
+ put system `nmcli dev wifi connect ` cat HostSSID cat ` password ` cat HostPassword into SystemCallResult
913
+ split SystemCallResult on ` `
914
+ if the elements of SystemCallResult is greater than 2
876
915
  begin
877
- put SystemHostSSID into HostSSID
878
- put HostSSID into CurrentSSID
879
- put `Connected to ` cat HostSSID into StatusMessage
880
- go to Idle
916
+ index SystemCallResult to 2
917
+ if SystemCallResult is `successfully`
918
+ begin
919
+ set property HostSSID of Hosts to HostPassword
920
+ set property `hosts` of Config to Hosts
921
+ gosub to PostConfigData
922
+ put HostSSID into CurrentSSID
923
+ put `Connected to ` cat HostSSID into StatusMessage
924
+ gosub to Working
925
+ end
926
+ else
927
+ begin
928
+ put `Failed to connect to ` cat HostSSID into StatusMessage
929
+ go to Error
930
+ end
881
931
  end
882
932
  end
883
- put `Failed to connect to ` cat HostSSID into StatusMessage
884
- go to Error
885
933
  end
886
934
  put property `mac` of SystemConfig into SystemMAC
887
935
  put property `password` of SystemConfig into SystemPassword
@@ -930,7 +978,6 @@ MasterDeviceClick:
930
978
  set DeviceSelected
931
979
  set IsMaster
932
980
  put MasterDevice into Device
933
- log prettify Device
934
981
  gosub to PopulateDeviceInfo
935
982
  end
936
983
  gosub to ManageButtonStates
@@ -960,7 +1007,7 @@ PopulateDeviceInfo:
960
1007
  enable UpdateFilesButton
961
1008
  enable DeleteFileButton
962
1009
  end
963
- return
1010
+ go to OK
964
1011
 
965
1012
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
966
1013
  ! Show information about a slave device
@@ -1193,10 +1240,9 @@ UpdateWidgetDataClick:
1193
1240
  UpdateFilesClick:
1194
1241
  if not DeviceSelected stop
1195
1242
  put property `ssid` of Device into SSID
1196
- split SSID on ` `
1197
1243
  put from 8 of SSID into MAC
1198
1244
 
1199
- put FirmwareDirectory cat `files.txt` into Path
1245
+ put FirmwareDirectory cat `/files.txt` into Path
1200
1246
  load Files from Path
1201
1247
  split Files
1202
1248
  put 0 into F
@@ -1222,7 +1268,7 @@ UpdateFilesClick:
1222
1268
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1223
1269
  ! Update a single file
1224
1270
  UpdateOneFile:
1225
- put FirmwareDirectory cat FileName into Path
1271
+ put FirmwareDirectory cat `/` cat FileName into Path
1226
1272
  if file Path exists begin end
1227
1273
  else
1228
1274
  begin
@@ -1252,7 +1298,7 @@ SendFileToDevice:
1252
1298
  put the length of Content into FileSize
1253
1299
  put `Update device file ` cat FileName cat ` (size=` cat FileSize cat ` chars)` into StatusMessage
1254
1300
  gosub to Working
1255
- wait 2
1301
+ wait 1
1256
1302
  put 0 into Sequence
1257
1303
  put 0 into Start
1258
1304
  put 0 into Total
@@ -1355,16 +1401,16 @@ CheckDevice:
1355
1401
  begin
1356
1402
  put `No response from ` cat Name into StatusMessage
1357
1403
  gosub to Error
1358
- put 0 into Uptime
1404
+ put `0` into Uptime
1359
1405
  end
1360
1406
  else put from 3 of Response into Uptime
1361
1407
 
1362
1408
  CheckDevice2:
1363
1409
  put the position of ` ` in Uptime into P
1364
- put left P of Uptime into Uptime
1410
+ if P is greater than 0 put left P of Uptime into Uptime
1365
1411
  log Name cat ` uptime: ` cat Uptime
1366
1412
  set the text of UptimeLabel to Uptime
1367
- return
1413
+ go to OK
1368
1414
 
1369
1415
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1370
1416
  ! Turn a relay OFF
@@ -1377,7 +1423,7 @@ RelayOffClick:
1377
1423
  begin
1378
1424
  put `No response from ` cat Name into StatusMessage
1379
1425
  gosub to Error
1380
- put 0 into Uptime
1426
+ put `0` into Uptime
1381
1427
  end
1382
1428
  begin
1383
1429
  put from 3 of Response into Uptime
@@ -1397,7 +1443,7 @@ RelayOnClick:
1397
1443
  begin
1398
1444
  put `No response from ` cat Name into StatusMessage
1399
1445
  gosub to Error
1400
- put 0 into Uptime
1446
+ put `0` into Uptime
1401
1447
  end
1402
1448
  else
1403
1449
  begin
@@ -1465,10 +1511,11 @@ SendMessageToDevice:
1465
1511
  put empty into Response
1466
1512
  return
1467
1513
  end
1514
+ ! log URL cat ` - ` cat Response
1468
1515
  return
1469
1516
 
1470
1517
  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
1471
- ! Get data from a device
1518
+ ! Get information about a device
1472
1519
  GetDeviceData:
1473
1520
  put property `name` of Device into Name
1474
1521
  put property `ssid` of Device into SSID
@@ -1485,14 +1532,15 @@ GetDeviceData:
1485
1532
  ! Post the config data
1486
1533
  PostConfigData:
1487
1534
  if CurrentSSID is not HostSSID gosub to ConnectToHost
1488
- if SystemMAC is empty return
1489
1535
  save prettify Config to ConfigFile
1490
1536
  ! log `Config: ` cat prettify Config
1537
+ if SystemMAC is empty return
1538
+ if SystemConfig is empty return
1491
1539
  put `https://rbrheating.com/ui/resources/php/rest.php/config/` cat SystemMAC cat `/` cat SystemPassword into URL
1492
- log `Posting SystemConfig to ` cat URL
1540
+ ! log URL cat ` ` cat prettify SystemConfig
1541
+ ! log `Posting SystemConfig to ` cat URL
1493
1542
  post stringify SystemConfig to URL
1494
- or
1495
- begin
1543
+ or begin
1496
1544
  put `I couldn't post the config file` into StatusMessage
1497
1545
  go to Error
1498
1546
  end
@@ -1,3 +1,3 @@
1
1
  from easycoder import Program
2
2
 
3
- Program('config.ecs').start()
3
+ Program('rbrconf.ecs').start()
@@ -1,34 +0,0 @@
1
- use graphics
2
-
3
- window Window
4
- layout MainPanel
5
- label Label
6
- pushbutton Button
7
-
8
- ! Initialize the graphics environment
9
- init graphics
10
-
11
- ! Create a main window
12
- create MainPanel type QVBoxLayout
13
-
14
- ! Create a label
15
- create Label text `Click the button!`
16
- add Label to MainPanel
17
-
18
- ! Create a button
19
- create Button text `Click Me`
20
- on click Button go to ButtonClick
21
- add Button to MainPanel
22
-
23
- ! Create and show the window
24
- create Window title `Example` size 400 300 layout MainPanel
25
- show Window
26
-
27
- start graphics
28
- stop
29
-
30
- ! Event handler for button click
31
- ButtonClick:
32
- set the text of Label to `Button clicked!`
33
- stop
34
-
@@ -1,36 +0,0 @@
1
- from PyQt6.QtWidgets import *
2
- import sys
3
-
4
- class GroupBox(QWidget):
5
-
6
- def __init__(self):
7
- QWidget.__init__(self)
8
-
9
- self.setWindowTitle("GroupBox")
10
- layout = QGridLayout()
11
- self.setLayout(layout)
12
-
13
- groupbox = QGroupBox("GroupBox Example")
14
- # groupbox.setCheckable(True)
15
- layout.addWidget(groupbox)
16
-
17
- vbox = QVBoxLayout()
18
- groupbox.setLayout(vbox)
19
-
20
- radiobutton = QRadioButton("RadioButton 1")
21
- vbox.addWidget(radiobutton)
22
-
23
- radiobutton = QRadioButton("RadioButton 2")
24
- vbox.addWidget(radiobutton)
25
-
26
- radiobutton = QRadioButton("RadioButton 3")
27
- vbox.addWidget(radiobutton)
28
-
29
- radiobutton = QRadioButton("RadioButton 4")
30
- vbox.addWidget(radiobutton)
31
-
32
-
33
- app = QApplication(sys.argv)
34
- screen = GroupBox()
35
- screen.show()
36
- sys.exit(app.exec())