from pyscript import Element, display
import asyncio
registri = []
register_count = 1 # Contatore per il numero di registri
def add_register(event):
global register_count
registri = []
for i in range(register_count):
inp = Element(f"reg-input-{i}").element.value # Cambiato per ottenere il valore dall'elemento
if inp:
try:
value = int(inp)
except ValueError:
value = 0
else:
value = 0
if value < 0:
value = 0
registri.append(value)
new_input_div = Element('input-area')
new_input=""
for c, i in enumerate(registri):
if i==0:
new_input += f'''
'''
else:
new_input += f'''
'''
c+=1
new_input += f'''
'''
new_input_div.element.innerHTML = new_input
register_count += 1
async def finish_input(event):
Element("interrompi").element.style.display = "block"
global registri
global fine
fine=False
registri = [] # Reset registri
output = Element("output") # Sezione output
output.element.innerHTML = "" # Reset dell'output
# Leggi il codice dal textarea di CodeMirror
code = Element("code-input").element.value.strip() # Modifica qui per ottenere il valore
for i in range(register_count):
try:
inp = Element(f"reg-input-{i}").element.value # Cambiato per ottenere il valore dall'elemento
if inp:
value = int(inp)
else:
value = 0
if value < 0:
output.element.innerHTML += "è stato inserito un valore negativo "
else:
registri.append(value)
output.element.innerHTML += f"Registro {i}: {value} "
except ValueError:
output.element.innerHTML += "è stato inserito un valore non valido "
def get(index):
if index<0:
raise ValueError("maggiore o uguale a 0")
while len(registri) <= index:
registri.append(0)
return registri[index]
def increment(index):
if index<0:
raise ValueError("maggiore o uguale a 0")
while len(registri) <= index:
registri.append(0)
registri[index]+=1
def set(index, value):
if index<0:
raise ValueError("maggiore o uguale a 0")
while len(registri) <= index:
registri.append(0)
registri[index]=value
# Esecuzione del codice
code = code.upper()
code = code.replace(" ", "").replace("\t","").replace(" ","")
righe = code.split("\n")
if code=="":
output.element.innerHTML += "Non è stato inserito nessun codice "
else:
output.element.innerHTML += "Esecuzione: "
pc = 0
c=0
while pc < len(righe):
if fine:
output.element.innerHTML += "Programma interroto. "
break
await asyncio.sleep(0)
if c>10000:
output.element.innerHTML += "Sono state eseguite più di 10000 istruzioni, il programma è stato interroto. "
break
else:
if ":" in righe[pc]:
righe[pc]=righe[pc].split(":")[1]
output.element.innerHTML += "riga " + str(pc + 1) + ": " + righe[pc]
try:
bl=False
if righe[pc][0] == "#":
pass
elif righe[pc][0]=="S":
increment(int(righe[pc][2:-1]))
bl=True
elif righe[pc][0]=="Z":
set(int(righe[pc][2:-1]), 0)
bl=True
elif righe[pc][0]=="T":
x=righe[pc][2:-1].split(",")
set(int(x[1]), get(int(x[0])))
bl=True
elif righe[pc][0]=="J":
x=righe[pc][2:-1].split(",")
if get(int(x[0]))==get(int(x[1])):
pc=int(x[2])-2
if pc<-1:
output.element.innerHTML += ", Istruzione non riconosciuta Programma interrotto "
break
else:
output.element.innerHTML += ", Istruzione non riconosciuta Programma interrotto "
break
if Element("vehicle1").element.checked and bl:
output.element.innerHTML += " Registri: "+str(registri)
except:
output.element.innerHTML += ", Istruzione non riconosciuta Programma interrotto "
break
pc += 1
c+=1
output.element.innerHTML += " "
Element("interrompi").element.style.display = "none"
output.element.innerHTML += "Fine Numero istruzioni eseguite: "+str(c)+" Registri: " + str(registri)
def interrompi(event):
global fine
fine=True
Element("interrompi").element.style.display = "none"
Element("add-reg-btn").element.onclick = add_register
Element("finish-input-btn").element.onclick = finish_input
Element("interrompi").element.onclick = interrompi