easycoder 250118.1__tar.gz → 250123.1__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 (176) hide show
  1. {easycoder-250118.1 → easycoder-250123.1}/PKG-INFO +1 -1
  2. {easycoder-250118.1 → easycoder-250123.1}/easycoder/__init__.py +1 -1
  3. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_core.py +31 -24
  4. easycoder-250123.1/easycoder/ec_graphics.py +645 -0
  5. easycoder-250123.1/easycoder/ec_gutils.py +144 -0
  6. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_program.py +2 -2
  7. {easycoder-250118.1 → easycoder-250123.1}/scripts/config.ecg +75 -69
  8. easycoder-250123.1/scripts/connect.ecg +62 -0
  9. easycoder-250123.1/scripts/findxr.ecs +26 -0
  10. easycoder-250118.1/easycoder/ec_graphics.py +0 -314
  11. easycoder-250118.1/easycoder/ec_gutils.py +0 -84
  12. {easycoder-250118.1 → easycoder-250123.1}/LICENSE +0 -0
  13. {easycoder-250118.1 → easycoder-250123.1}/README.md +0 -0
  14. {easycoder-250118.1 → easycoder-250123.1}/doc/README.md +0 -0
  15. {easycoder-250118.1 → easycoder-250123.1}/doc/core/README.md +0 -0
  16. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/boolean.md +0 -0
  17. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/empty.md +0 -0
  18. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/ends.md +0 -0
  19. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/even.md +0 -0
  20. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/exists.md +0 -0
  21. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/greater.md +0 -0
  22. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/hasProperty.md +0 -0
  23. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/includes.md +0 -0
  24. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/is.md +0 -0
  25. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/less.md +0 -0
  26. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/list.md +0 -0
  27. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/none.md +0 -0
  28. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/not.md +0 -0
  29. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/numeric.md +0 -0
  30. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/object.md +0 -0
  31. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/odd.md +0 -0
  32. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/starts.md +0 -0
  33. {easycoder-250118.1 → easycoder-250123.1}/doc/core/conditions/string.md +0 -0
  34. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/add.md +0 -0
  35. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/append.md +0 -0
  36. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/assert.md +0 -0
  37. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/begin.md +0 -0
  38. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/clear.md +0 -0
  39. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/close.md +0 -0
  40. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/create.md +0 -0
  41. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/debug.md +0 -0
  42. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/decrement.md +0 -0
  43. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/delete.md +0 -0
  44. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/divide.md +0 -0
  45. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/exit.md +0 -0
  46. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/file.md +0 -0
  47. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/fork.md +0 -0
  48. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/get.md +0 -0
  49. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/go.md +0 -0
  50. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/gosub.md +0 -0
  51. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/if.md +0 -0
  52. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/import.md +0 -0
  53. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/increment.md +0 -0
  54. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/index.md +0 -0
  55. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/init.md +0 -0
  56. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/input.md +0 -0
  57. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/load.md +0 -0
  58. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/lock.md +0 -0
  59. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/module.md +0 -0
  60. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/multiply.md +0 -0
  61. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/negate.md +0 -0
  62. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/open.md +0 -0
  63. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/pop.md +0 -0
  64. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/post.md +0 -0
  65. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/print.md +0 -0
  66. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/push.md +0 -0
  67. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/put.md +0 -0
  68. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/read.md +0 -0
  69. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/release.md +0 -0
  70. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/replace.md +0 -0
  71. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/return.md +0 -0
  72. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/run.md +0 -0
  73. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/save.md +0 -0
  74. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/script.md +0 -0
  75. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/set.md +0 -0
  76. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/split.md +0 -0
  77. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/stack.md +0 -0
  78. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/stop.md +0 -0
  79. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/system.md +0 -0
  80. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/take.md +0 -0
  81. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/toggle.md +0 -0
  82. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/truncate.md +0 -0
  83. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/unlock.md +0 -0
  84. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/variable.md +0 -0
  85. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/wait.md +0 -0
  86. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/while.md +0 -0
  87. {easycoder-250118.1 → easycoder-250123.1}/doc/core/keywords/write.md +0 -0
  88. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/arg.md +0 -0
  89. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/args.md +0 -0
  90. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/cos.md +0 -0
  91. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/datime.md +0 -0
  92. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/decode.md +0 -0
  93. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/element.md +0 -0
  94. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/elements.md +0 -0
  95. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/empty.md +0 -0
  96. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/encode.md +0 -0
  97. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/error.md +0 -0
  98. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/files.md +0 -0
  99. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/float.md +0 -0
  100. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/from.md +0 -0
  101. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/hash.md +0 -0
  102. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/index.md +0 -0
  103. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/integer.md +0 -0
  104. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/json.md +0 -0
  105. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/keys.md +0 -0
  106. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/left.md +0 -0
  107. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/length.md +0 -0
  108. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/lowercase.md +0 -0
  109. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/memory.md +0 -0
  110. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/modification.md +0 -0
  111. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/modulo.md +0 -0
  112. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/newline.md +0 -0
  113. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/now.md +0 -0
  114. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/position.md +0 -0
  115. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/property.md +0 -0
  116. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/random.md +0 -0
  117. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/right.md +0 -0
  118. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/sin.md +0 -0
  119. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/stringify.md +0 -0
  120. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/tab.md +0 -0
  121. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/tan.md +0 -0
  122. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/timestamp.md +0 -0
  123. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/today.md +0 -0
  124. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/trim.md +0 -0
  125. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/type.md +0 -0
  126. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/uppercase.md +0 -0
  127. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/value.md +0 -0
  128. {easycoder-250118.1 → easycoder-250123.1}/doc/core/values/weekday.md +0 -0
  129. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/README.md +0 -0
  130. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/attach.md +0 -0
  131. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/close.md +0 -0
  132. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/create.md +0 -0
  133. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/ellipse.md +0 -0
  134. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/image.md +0 -0
  135. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/move.md +0 -0
  136. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/on.md +0 -0
  137. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/rectangle.md +0 -0
  138. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/render.md +0 -0
  139. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/run.md +0 -0
  140. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/set.md +0 -0
  141. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/keywords/text.md +0 -0
  142. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/values/attribute.md +0 -0
  143. {easycoder-250118.1 → easycoder-250123.1}/doc/graphics/values/window.md +0 -0
  144. {easycoder-250118.1 → easycoder-250123.1}/easycoder/README.md +0 -0
  145. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_classes.py +0 -0
  146. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_compiler.py +0 -0
  147. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_condition.py +0 -0
  148. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_handler.py +0 -0
  149. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_timestamp.py +0 -0
  150. {easycoder-250118.1 → easycoder-250123.1}/easycoder/ec_value.py +0 -0
  151. {easycoder-250118.1 → easycoder-250123.1}/images/Semoigo Dawn.jpg +0 -0
  152. {easycoder-250118.1 → easycoder-250123.1}/json/graphics-demo.json +0 -0
  153. {easycoder-250118.1 → easycoder-250123.1}/plugins/ec_keyboard.py +0 -0
  154. {easycoder-250118.1 → easycoder-250123.1}/plugins/ec_p100.py +0 -0
  155. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/4-function.json +0 -0
  156. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/4-function.png +0 -0
  157. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-0.json +0 -0
  158. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-0.png +0 -0
  159. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-1.json +0 -0
  160. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-1.png +0 -0
  161. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-2.json +0 -0
  162. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-2.png +0 -0
  163. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-3.json +0 -0
  164. {easycoder-250118.1 → easycoder-250123.1}/plugins/keyboards/qwerty-3.png +0 -0
  165. {easycoder-250118.1 → easycoder-250123.1}/plugins/points.py +0 -0
  166. {easycoder-250118.1 → easycoder-250123.1}/pyproject.toml +0 -0
  167. {easycoder-250118.1 → easycoder-250123.1}/scripts/README.md +0 -0
  168. {easycoder-250118.1 → easycoder-250123.1}/scripts/benchmark.ecs +0 -0
  169. {easycoder-250118.1 → easycoder-250123.1}/scripts/ec_keyboard.py +0 -0
  170. {easycoder-250118.1 → easycoder-250123.1}/scripts/fizzbuzz.ecs +0 -0
  171. {easycoder-250118.1 → easycoder-250123.1}/scripts/hello.ecs +0 -0
  172. {easycoder-250118.1 → easycoder-250123.1}/scripts/points.ecs +0 -0
  173. {easycoder-250118.1 → easycoder-250123.1}/scripts/test.ecs +0 -0
  174. {easycoder-250118.1 → easycoder-250123.1}/scripts/testg.ecg +0 -0
  175. {easycoder-250118.1 → easycoder-250123.1}/scripts/tests.ecs +0 -0
  176. {easycoder-250118.1 → easycoder-250123.1}/test.ecs +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: easycoder
3
- Version: 250118.1
3
+ Version: 250123.1
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__ = "250118.1"
12
+ __version__ = "250123.1"
@@ -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
5
+ from .ec_classes import FatalError, RuntimeWarning, RuntimeError, AssertionError, Condition, Object
6
6
  from .ec_handler import Handler
7
7
  from .ec_timestamp import getTimestamp
8
8
 
@@ -729,6 +729,12 @@ class Core(Handler):
729
729
  target['locked'] = True
730
730
  return self.nextPC()
731
731
 
732
+ # Log a message
733
+ def k_log(self, command):
734
+ command['log'] = True
735
+ command['keyword'] = 'print'
736
+ return self.k_print(command)
737
+
732
738
  # Declare a module variable
733
739
  def k_module(self, command):
734
740
  return self.compileVariable(command)
@@ -996,10 +1002,9 @@ class Core(Handler):
996
1002
  program = command['program']
997
1003
  code = program.code[program.pc]
998
1004
  lino = code['lino'] + 1
999
- if value == None:
1000
- print(f'{lino}-> <empty>')
1001
- else:
1002
- print(f'{lino}-> {value}')
1005
+ if value == None: value = '<empty>'
1006
+ if 'log' in command: print(f'{datetime.now().time()}: {lino}-> {value}')
1007
+ else: print(value)
1003
1008
  return self.nextPC()
1004
1009
 
1005
1010
  # Push a value onto a stack
@@ -1147,6 +1152,7 @@ class Core(Handler):
1147
1152
  return self.stack.pop()
1148
1153
 
1149
1154
  # Compile and run a script
1155
+ # run {path} [as {module}] [with {variable} [and {variable}...]]
1150
1156
  def k_run(self, command):
1151
1157
  try:
1152
1158
  command['path'] = self.nextValue()
@@ -1157,20 +1163,24 @@ class Core(Handler):
1157
1163
  if self.nextIsSymbol():
1158
1164
  record = self.getSymbolRecord()
1159
1165
  if record['keyword'] == 'module':
1160
- command['module'] = record['name']
1161
- exports = []
1162
- if self.nextIs('with'):
1163
- while True:
1164
- name = self.nextToken()
1165
- record = self.getSymbolRecord()
1166
- exports.append(name)
1167
- if self.peek() != 'and':
1168
- break
1169
- self.nextToken()
1170
- command['exports'] = json.dumps(exports)
1171
- self.add(command)
1172
- return True
1173
- return False
1166
+ name = record['name']
1167
+ command['module'] = name
1168
+ else: RuntimeError(self.program, f'Symbol \'name\' is not a module')
1169
+ else: RuntimeError(self.program, 'Module name expected after \'as\'')
1170
+ else: RuntimeError(self.program, '\'as {module name}\' expected')
1171
+ exports = []
1172
+ if self.peek() == 'with':
1173
+ self.nextToken()
1174
+ while True:
1175
+ name = self.nextToken()
1176
+ record = self.getSymbolRecord()
1177
+ exports.append(name)
1178
+ if self.peek() != 'and':
1179
+ break
1180
+ self.nextToken()
1181
+ command['exports'] = json.dumps(exports)
1182
+ self.add(command)
1183
+ return True
1174
1184
 
1175
1185
  def r_run(self, command):
1176
1186
  module = self.getVariable(command['module'])
@@ -1734,10 +1744,7 @@ class Core(Handler):
1734
1744
  if symbolRecord['valueHolder']:
1735
1745
  value['target'] = symbolRecord['name']
1736
1746
  return value
1737
- else:
1738
- value['value'] = self.getValue()
1739
- return value
1740
- self.warning(f'Core.compileValue: Token \'{self.getToken()}\' does not hold a value')
1747
+ FatalError(self.program.compiler, 'Variable does not hold a value')
1741
1748
  return None
1742
1749
 
1743
1750
  if token == 'arg':
@@ -2503,7 +2510,7 @@ class Core(Handler):
2503
2510
  return not comparison if condition.negate else comparison
2504
2511
 
2505
2512
  def c_not(self, condition):
2506
- return not self.getRuntimeValue(condition.value1)
2513
+ return not self.getRuntimeValue(condition.value)
2507
2514
 
2508
2515
  def c_object(self, condition):
2509
2516
  comparison = type(self.getRuntimeValue(condition.value1)) is dict