Un simulateur d’os, avec
un éditeur de fichier
un bloc note
paint
calculatrice
time
https://my.numworks.com/python/frablock/cfg
Marche avec Omega
from kandinsky import *;from ion import *;from time import sleep,localtime;from cfg import *;from turtle import * try:import os except:print("pas os") _B,_D="white","black" app=["file","note","cmd","time","calcul","paint"] #app+home icone=["100000011110011110011110011110000000","000000011110010010011110010010000000","000000011110010110011010010110000000","000000010110010110011000011110000000","101111000100101111010100101111010100","111111001100111111110011111111001100","110011100001000000100001100001100001"] speed(10) penup() fill_rect(0,0,320,225,"0") goto(-200,200) draw_string("GUD OS",110,100,_B,"0") for i in range(100): fill_rect(110,150,0+i,20,"green") sleep(0.05) sleep(0.1) def d_icone(x,y,g,ico): p=0 for py in range(6): for px in range(6): fill_rect(x+px*g,y+py*g,g,g,icone[ico][p]) p+=1 def i(im,pal,t=4,po=0,py=0,suppr="",bs=80): r,i=0,0 while r<len(im): s,n=im[r],'';r+=1 while r<len(im)and'9'>=im[r]>='0':n+=im[r];r+=1 nb=1 if n==''else int(n);c=pal[ord(s)-65] for j in range(nb): if str(s)!=str(suppr):fill_rect(po+t*(i%bs),py+t*(i//bs),t,t,(c[0],c[1],c[2])) i+=1 def gm_tp(txt,ma=32,st=""): a,b,A,d=list(txt)+[''],'','\n'+st,[" ","\'",",","."];l=len(a) if l>ma: mb=int(ma) for j in range(l//ma): nl=1 for i in range(1,ma//4): if d.count(a[mb-i])>=1:a[mb-i]=A;mb+=mb-i;nl=0;break if nl:a.insert(mb,A);mb+=mb for i in range(l):b+=a[i] else:b=str(txt) return b,l//ma def pu(a,c=_B,x=10,y=75,w=300,h=75):fill_rect(x,y,w,h,(0,0,0));fill_rect(x+1,y+1,w-2,h-2,c);draw_string(gm_tp(a,31," ")[0],x+2,y+2,_D,c);draw_string('[OK]',x+2,y+h-20,_D,c);gm_c(1,1,1,1,5,1);sleep(0.2) def gm_r():reset() def gm_e():pu("Une erreur est survenue") def background():i(bg[0],bg[1],bg[2],bg[3],bg[4],bg[5]) def gm_c(a,b,c,d,e,a5=0): while 1: if keydown(1)and e>=1:return a if keydown(2)and e>=2:return b if keydown(0)and e>=3:return c if keydown(3)and e>=4:return d if keydown(4)and e>=5:return a5 def gm_a(a,b,c,d,e,a5='#err:str?'): draw_string('[up]'+str(a),0,0) if e>=2:draw_string('[down]'+str(b),0,18) if e>=3:draw_string('[left]'+str(c),0,36) if e>=4:draw_string('[right]'+str(d),0,54) if e>=5:draw_string('[OK]'+str(a5),0,72) def pick_menu(x,y,m): global po,launch if keydown(KEY_UP): fill_rect(x,y+20*po,10,10,(80,80,80));po-=1 if 0>po:po=0 fill_rect(x,y+20*po,10,10,"red");sleep(0.1) if keydown(KEY_DOWN): fill_rect(x,y+20*po,10,10,(80,80,80));po+=1 if m<po:po=m fill_rect(x,y+20*po,10,10,"red");sleep(0.1) if keydown(KEY_OK):launch=1 def f_l(): gm_r();fill_rect(0,0,320,225,(80,80,80)) for i in range(len(os.listdir())):draw_string(os.listdir()[i],20,i*20,"1",(80,80,80)) sleep(0.2) def fichier(): sleep(0.2) global po,launch po,launch=0,0 f_l() while not keydown(KEY_HOME): pick_menu(0,0,len(os.listdir())-1) if launch: sleep(0.2) gm_a("Editer","Copier","Executer/Lire","Supprimer",5,"Revenir a la liste des fichiers") a=gm_c("e","c","r","s",5,"l") sp=os.listdir()[po] if a=="e": try: txt=input("Texte dans le fichier \n\\n pour passer une ligne\n") nfile=open(sp,"w") nfile.write(txt) nfile.close() pu(sp+" a ete modifie") except:gm_e() launch=0;f_l() elif a=="c": try: dst=input(sp+" sera copie dans :\n") with open(sp) as file: nfile=open(dst,"w") nfile.write(file.read()) nfile.close() pu(sp+" a ete copie dans "+dst) except:gm_e() launch=0;f_l() elif a=="r": gm_r() try: nfile=open(sp,"r") draw_string(nfile.read(),0,40) except:pu("Lecture imposible") gm_a("Executer","Retour",0,0,2) r_o_b=gm_c(1,0,0,0,2) if r_o_b: try: gm_r();draw_string(0,200,"Loading") nfile=open("file_runner_gudos.py","w") nfile.write("#fill_rectom "+sp.replace(".py","")+" import *") nfile.close() from file_runner_gudos import * except:gm_e() launch=0;f_l() elif a=="s": try:os.remove(sp);pu(sp+" a ete supprime") except:gm_e() launch=0;f_l() else:launch=0;f_l() def note(): try: nfile=open("note_gudos.noot","r") print(nfile.read()) txt=input("Nouveau contenu des notes :\n-exit pour sortir\n") if txt!="-exit": nfile=open("note_gudos.noot","w") nfile.write(txt) nfile.close() pu("Vos notes ont bien ete modifiee") except:open("note_gudos.noot","w").close();gm_e() def cmd(): i_=input("GUD OS TERMINAL\n>GUD>root>") while not "exit" in i_: j_=i_.split(" ") if j_[0]=="echo":print(i_.replace("echo ","")) elif j_[0]=="dir": for i in os.listdir():print(i) elif j_[0]=="rename": try: os.rename(j_[1],j_[2]);print(j_[1],"devient",j_[2]) except:print("Fichier introuvable") elif j_[0]=="mkfile": try:open(j_[1],"w").close();print(dst,"cree") except:print("Ce fichier existe deja") elif j_[0]=="cls":print("\n"*15) elif j_[0]=="cp": try: with open(j_[1]) as file: nfile=open(j_[2],"w") nfile.write(file.read()) nfile.close() print(j_[1],"a ete copie dans",j_[2]) except:print("Une erreur est survenue") elif j_[0]=="sysinfo": for i in list(os.uname().values()):print(i+"\n") elif j_[0]=="help":print("cls\ndir\nrename\nmkfile\ncp\nsysinfo\nhelp\nexit") else:print("Commande introuvable") i_=input(">GUD>root>") home() def time(): pu(str(ti[3])+":"+str(ti[4])+" "+str(ti[2])+"/"+str(ti[1])+"/"+str(ti[0])) def c_add(x,y):return x+y def c_sub(x,y):return x-y def c_mul(x,y):return x*y def c_div(x,y):return x/y def calcul(): q=0 while not keydown(5) or not q: sleep(0.2) gm_r() gm_a("Somme","Difference","Produit","Quotient",5,"Home");c_v=gm_c("+","-","*","/",5,"close") if c_v=="close":q=1 c_d={"+":c_add,"-":c_sub,"*":c_mul,"/":c_div} try: c_n1 = float(input("Premier nombre : ")) c_n2 = float(input("Second nombre: ")) except:print("nombre invalide");sleep(2);c_n1,c_n2=0,0 sleep(0.2) pu(str(c_n1)+str(c_v)+str(c_n2)+"="+str(c_d[c_v](c_n1,c_n2))) home() def paint(): fd=forward q=0 try:x=int(input("Precision : ")) except:x=5 reset() draw_string("P="+str(x),0,0) while not q: if keydown(KEY_RIGHT): setheading(0) fd(x) if keydown(KEY_UP): setheading(90) fd(x) if keydown(KEY_LEFT): setheading(180) fd(x) if keydown(KEY_DOWN): setheading(270) fd(x) if keydown(KEY_OK) or keydown(KEY_HOME):q=1 app_l=[fichier,note,cmd,time,calcul,paint] def home(): global po,launch gm_r() print("\n"*15) background() fill_rect(0,200,320,25,(80,80,80)) d_icone(0,205,2,6) draw_string("Menu",15,205,_B,(80,80,80)) draw_string(str(ti[3])+":"+str(ti[4]),270,205,_B,(80,80,80)) home_show_menu=0 po,launch=0,0 while 1: if keydown(KEY_HOME): if home_show_menu: gm_r() background() fill_rect(0,200,320,25,(80,80,80)) d_icone(0,205,2,6) draw_string("Menu",15,205,_B,(80,80,80)) home_show_menu=0 sleep(0.1) else: home_show_menu=1 fill_rect(0,80,100,120,(80,80,80)) for a in range(len(app)): draw_string(app[a],20,80+a*20,_B,(80,80,80)) d_icone(0,80+a*20,2,a) fill_rect(90,80+20*po,10,10,"red") sleep(0.1) if home_show_menu: pick_menu(90,80,5) if launch:sleep(0.1);app_l[po]();gm_r();home() if keydown(5):break home()