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