Advertisement
Guest User

Untitled

a guest
Jan 17th, 2017
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.74 KB | None | 0 0
  1. def Init():
  2. global Registers
  3. global Mem
  4. global Stack
  5. global StackPtr
  6. global PyCode
  7. Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
  8. Mem = {}
  9. Stack = [0]
  10. StackPtr = [0]
  11. PyCode = []
  12. def ConsolidateInput(i):
  13. x = 0
  14. k = ''
  15. for j in i:
  16. if (x > 1):
  17. k += str(j)
  18. k += ' '
  19. x += 1
  20. return k
  21. def ConsolidateOutput(i):
  22. x = 0
  23. k = ''
  24. for j in i:
  25. if (x > 0):
  26. k += str(j)
  27. k += ' '
  28. x += 1
  29. return k
  30. def ClearReg():
  31. global Registers
  32. Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
  33. def ClearMem():
  34. global Mem
  35. Mem = {}
  36. def ClearStack():
  37. global Stack
  38. global StackPtr
  39. Stack = [0]
  40. StackPtr = [0]
  41. SavedReg = []
  42. SavedMem = []
  43. SavedStack = []
  44. def SaveReg():
  45. SavedReg.append(Registers.copy())
  46. def LoadReg():
  47. global Registers
  48. Registers = SavedReg.pop()
  49. def SaveMem():
  50. SavedMem.append(Mem.copy())
  51. def LoadMem():
  52. global Mem
  53. Mem = SavedMem.pop()
  54. def SaveStack():
  55. SavedStack.append([Stack.copy(), StackPtr.copy()])
  56. def LoadStack():
  57. global Stack
  58. global StackPtr
  59. Stack, StackPtr = SavedStack.pop()
  60. def ExecuteInstruction(instruksi, input1, input2):
  61. instruksi = int(instruksi)
  62. input1 = int(input1)
  63. input2 = int(input2)
  64. if (instruksi == 1):
  65. if (input1 == input2):
  66. return 1
  67. else:
  68. return 0
  69. elif (instruksi == 2):
  70. return input1 + input2
  71. elif (instruksi == 3):
  72. return input1 - input2
  73. elif (instruksi == 4):
  74. return input1 * input2
  75. elif (instruksi == 5):
  76. return input1 / input2
  77. elif (instruksi == 6):
  78. return input1 % input2
  79. elif (instruksi == 7):
  80. if (input1 == 0):
  81. return 1
  82. else:
  83. return 0
  84. elif (instruksi == 8):
  85. if (input1 > input2):
  86. return 1
  87. else:
  88. return 0
  89. elif (instruksi == 9):
  90. if (input1 < input2):
  91. return 1
  92. else:
  93. return 0
  94. Registers = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
  95. Mem = {}
  96. def RegisterReadWrite(RegisterNumber, RequestType, OptionalInput):
  97. RegisterNumber = int(RegisterNumber)
  98. RequestType = int(RequestType)
  99. OptionalInput = int(OptionalInput)
  100. if (RequestType == 0):
  101. if (RegisterNumber < 16 and RegisterNumber > -1):
  102. return Registers[RegisterNumber]
  103. else:
  104. print("Error: Invalid read register number. Continuing execution.")
  105. return 0
  106. elif (RequestType == 1):
  107. if (RegisterNumber < 16 and RegisterNumber > -1):
  108. Registers[RegisterNumber] = OptionalInput
  109. return
  110. else:
  111. print("Error: Invalid write register number. Continuing execution.")
  112. return
  113. return
  114. Stack = [0]
  115. StackPtr = [0]
  116. def StackAccess(RequestType, OptionalInput):
  117. RequestType = int(RequestType)
  118. OptionalInput = int(OptionalInput)
  119. if (RequestType == 0):
  120. Stack.append(0)
  121. Stack[StackPtr[0]] = OptionalInput
  122. StackPtr[0] += 1
  123. return
  124. elif (RequestType == 1):
  125. StackPtr[0] -= 1
  126. return Stack[StackPtr[0]]
  127. elif (RequestType == 2):
  128. StackPtr[0] -= 1
  129. return
  130. def MemReadWrite(Address, RequestType, OptionalInput):
  131. Address = int(Address)
  132. RequestType = int(RequestType)
  133. OptionalInput = int(OptionalInput)
  134. if (RequestType == 0):
  135. try:
  136. return Mem[Address]
  137. except:
  138. return 0
  139. elif (RequestType == 1):
  140. Mem[Address] = OptionalInput
  141. return
  142. PyCode = []
  143. def PrePreExecute(string):
  144. string = string.split("pymodetoggle")
  145. nstring = ""
  146. j = 0
  147. cindex = 0
  148. for i in string:
  149. if j % 2 == 1:
  150. PyCode.append(i)
  151. nstring = nstring + """
  152. callpy """
  153. nstring = nstring + str(cindex)
  154. nstring = nstring + """
  155. """
  156. cindex += 1
  157. else:
  158. nstring = nstring + i
  159. j += 1
  160. return nstring
  161. def PreExecute(string):
  162. string = PrePreExecute(string)
  163. copystring = string
  164. string = string.split("\n")
  165. br = []
  166. j = 0
  167. processedstr = []
  168. for i in string:
  169. i = i.split(" ")
  170. if (i[0] == 'branchgtr'):
  171. br.append(int(j))
  172. elif (i[0] == 'storer' and len(i) > 2):
  173. if (i[2] == 'add'):
  174. i[2] = 2
  175. elif (i[2] == 'sub'):
  176. i[2] = 3
  177. elif (i[2] == 'mul'):
  178. i[2] = 4
  179. elif (i[2] == 'div'):
  180. i[2] = 5
  181. elif (i[2] == 'mod'):
  182. i[2] = 6
  183. elif (i[2] == 'equ'):
  184. i[2] = 1
  185. elif (i[2] == 'inv'):
  186. i[2] = 7
  187. elif (i[2] == 'lat'):
  188. i[2] = 8
  189. elif (i[2] == 'smt'):
  190. i[2] = 9
  191. processedstr.append(i)
  192. j += 1
  193. return br, processedstr, copystring
  194. def Execute(string):
  195. Init()
  196. br, processedstr, copystring = PreExecute(string)
  197. copystring = copystring.split("\n")
  198. x = 0
  199. for i in copystring:
  200. x += 1
  201. j = 0
  202. b = 0
  203. string = processedstr
  204. while (j < x and j > -1):
  205. i = string[j]
  206. if (i[0] == 'storer'):
  207. RegisterReadWrite(i[1], 1, ExecuteInstruction(i[2], RegisterReadWrite(i[3], 0, 0), RegisterReadWrite(i[4], 0, 0)))
  208. elif (i[0] == 'storec'):
  209. RegisterReadWrite(i[1], 1, i[2])
  210. elif (i[0] == 'storem'):
  211. MemReadWrite(i[1], 1, RegisterReadWrite(i[2], 0, 0))
  212. elif (i[0] == 'storei'):
  213. MemReadWrite(RegisterReadWrite(i[1], 0, 0), 1, RegisterReadWrite(i[2], 0, 0))
  214. elif (i[0] == 'readm'):
  215. RegisterReadWrite(i[1], 1, MemReadWrite(i[2], 0, 0))
  216. elif (i[0] == 'readi'):
  217. RegisterReadWrite(i[1], 1, MemReadWrite(RegisterReadWrite(i[2], 0, 0), 0, 0))
  218. elif (i[0] == 'jump'):
  219. j = i[1]
  220. elif (i[0] == 'jumpi'):
  221. j = RegisterReadWrite(i[1], 0, 0)
  222. elif (i[0] == 'jumpgt'):
  223. j = br[int(i[1])]
  224. elif (i[0] == 'jumpgti'):
  225. j = br[int(RegisterReadWrite(i[1], 0, 0))]
  226. elif (i[0] == 'jumpgtf'):
  227. j = br[int(i[1])-1]
  228. elif (i[0] == 'jumpgtfi'):
  229. j = br[int(RegisterReadWrite(i[1], 0, 0))-1]
  230. elif (i[0] == 'test'):
  231. b = ExecuteInstruction(1, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
  232. elif (i[0] == 'testlt'):
  233. b = ExecuteInstruction(8, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
  234. elif (i[0] == 'testst'):
  235. b = ExecuteInstruction(9, RegisterReadWrite(i[1], 0, 0), RegisterReadWrite(i[2], 0, 0))
  236. elif (i[0] == 'branch'):
  237. if (b == 1):
  238. j = i[1]
  239. elif (i[2] > -1):
  240. j = i[2]
  241. elif (i[0] == 'branchi'):
  242. if (b == 1):
  243. j = RegisterReadWrite(i[1], 0, 0)
  244. elif (i[2] > -1 and i[2] < 16):
  245. j = RegisterReadWrite(i[2], 0, 0)
  246. elif (i[0] == 'out'):
  247. print(RegisterReadWrite(i[1], 0, 0))
  248. elif (i[0] == 'branchst'):
  249. b = 1
  250. elif (i[0] == 'branchsf'):
  251. b = 0
  252. elif (i[0] == 'branchgt'):
  253. if (b == 1):
  254. j = br[int(i[1])]
  255. elif (i[0] == 'branchgti'):
  256. if (b == 1):
  257. j = br[int(RegisterReadWrite(i[1], 0, 0))]
  258. elif (i[0] == 'branchgtf'):
  259. if (b == 1):
  260. j = br[int(i[1])-1]
  261. elif (i[0] == 'branchgtfi'):
  262. if (b == 1):
  263. j = br[int(RegisterReadWrite(i[1], 0, 0))-1]
  264. elif (i[0] == 'branchgtr'):
  265. pass
  266. elif (i[0] == 'invt'):
  267. if (b == 1):
  268. b = 0
  269. else:
  270. b = 1
  271. elif (i[0] == 'stackw'):
  272. StackAccess(0, RegisterReadWrite(i[1], 0, 0))
  273. elif (i[0] == 'stackr'):
  274. RegisterReadWrite(i[1], 1, StackAccess(1, 0))
  275. elif (i[0] == 'stackp'):
  276. StackAccess(2, 0)
  277. elif (i[0] == 'callpy'):
  278. try:
  279. exec(PyCode[int(i[1])])
  280. except:
  281. print("An error occurred while executing code in python mode.")
  282. pass
  283. elif (i[0] == 'clearr'):
  284. ClearReg()
  285. elif (i[0] == 'clearm'):
  286. ClearMem()
  287. elif (i[0] == 'clears'):
  288. ClearStack()
  289. elif (i[0] == 'saver'):
  290. SaveReg()
  291. elif (i[0] == 'savem'):
  292. SaveMem()
  293. elif (i[0] == 'saves'):
  294. SaveStack()
  295. elif (i[0] == 'loadr'):
  296. LoadReg()
  297. elif (i[0] == 'loadm'):
  298. LoadMem()
  299. elif (i[0] == 'loads'):
  300. LoadStack()
  301. elif (i[0] == 'mov'):
  302. RegisterReadWrite(i[1], 1, RegisterReadWrite(i[2], 0, 0))
  303. elif (i[0] == 'xchg'):
  304. reg1temp = RegisterReadWrite(i[1], 0, 0)
  305. reg2temp = RegisterReadWrite(i[2], 0, 0)
  306. RegisterReadWrite(i[1], 1, reg2temp)
  307. RegisterReadWrite(i[2], 1, reg1temp)
  308. elif (i[0] == 'rnd'):
  309. from random import randint
  310. RegisterReadWrite(i[1], 1, randint(int(i[2]), int(i[3])))
  311. elif (i[0] == 'gin'):
  312. RegisterReadWrite(i[1], 1, input(ConsolidateInput(i)))
  313. elif (i[0] == 'ous'):
  314. print(ConsolidateOutput(i))
  315. elif (i[0] == 'rpc'):
  316. RegisterReadWrite(i[1], 1, j)
  317. elif (i[0] == 'wpc'):
  318. j = RegisterReadWrite(i[1], 0, 0)-1
  319. elif (i[0] == 'exit'):
  320. break
  321. elif (ARCH_RASPPI):
  322. if (i[0] == 'ARCH_RASPPI_GPIOOUT'):
  323. GPIO.setup(i[1], GPIO.OUT)
  324. GPIO.output(i[1], i[2])
  325. elif (i[0] == 'ARCH_RASPPI_GPIOCLEANUP'):
  326. GPIO.cleanup()
  327. j += 1
  328. def SafeExec(string):
  329. try:
  330. Execute(string)
  331. except:
  332. print("An error occurred. Check your code for mistakes. If no error messages were printed, check your code anyway.")
  333. #joke's on you, no error messages have been implemented whatsoever.
  334. #this whole shitty thing is the very definition of shitty design and implementation.
  335. try:
  336. import os
  337. ARCH_OS = True
  338. except:
  339. ARCH_OS = False
  340. try:
  341. import RPi.GPIO as GPIO
  342. GPIO.setmode(GPIO.BCM)
  343. ARCH_RASPPI = True
  344. except:
  345. ARCH_RASPPI = False
  346. try:
  347. import win32api
  348. ARCH_WINAPI = True
  349. except:
  350. ARCH_WINAPI = False
  351. try:
  352. import win32file
  353. ARCH_WINFILE = True
  354. except:
  355. ARCH_WINFILE = False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement