Page 1 sur 1

Premiers tours de Pure_moulinette v0.0 !

Publié : lun. 06/nov./2006 22:51
par Huitbit
OBJECTIF : est de voir rapidemment la structure d'un programme.
La moulinette récolte les commentaires principaux et détecte les procédures ainsi lque les liens qui existent entre-elles.
Chaque zone du programme est repérée par ses numéros de lignes

PRINCIPE: avec la fonctions de STRING, je récupère tous les infos sur les procédures, puis je scanne le programme principal pour voir de quelle manière elles interviennent.

EXEMPLE: programme passé à la moulinette

Code : Tout sélectionner

Procedure p3()
EndProcedure
Procedure p4()
EndProcedure
Procedure p5()
EndProcedure
Procedure p2()
p3()
p4()
p5()
EndProcedure
Declare p6()
Procedure p1()
p2()
EndProcedure
Procedure p6()
p2()
p3()
p1()
EndProcedure

;programme principal
;action 1
;action 2
p1()
;action 3
;action 5
p6()
p2()
;action 6
RESULTAT:(aucun icône n'est actif pour le moment
Image

Code : Tout sélectionner

;**********************************
Enumeration
#spr_icones
#spr_code_var 
#spr_arbre
#spr_fermer 
#spr_souris 
#spr_panorama
#spr_bloc
#spr_sprite_final
EndEnumeration
#Longueur=128 ;longueur d'un bloc
#hbloc=18; hauteur d'un bloc
;**********************
Structure infos
nom.s
enfant.l
nom_enfant.s
ligne_debut_code.l
ligne_fin_code.l
occupe.b
visible.b
origine.s
descendance.s
decalage_y.d
delta.d ;grandeur de reference pour dessiner les branches

EndStructure 

;variables**********************
 ligne.l=0
ligne_max.l=0
compteur_procedure.l=0
arret_comptage.b=0
 branche.l=0
generation.l=0

 Global noeud.l, compteur_procedure_max.l,generation_max.l,enfant_max.l,noeud_max.l
 Global Largeur.l,Hauteur.l,delta.l,branche_max.l
 
 delta=#hbloc+1;ecart minimal entre deux blocs
  Largeur=48;dimensions du sprite qui sera "clipper" pour faire les icones 16*16
 Hauteur=32
;tableau********************************
Global Dim tableau(Largeur-1, Hauteur-1)
Global Dim info_procedure.infos(100); info_procedure.infos(compteur_procedure)
Global Dim bloc.infos(20,300,100);bloc.infos(generation,noeud,branche)
Global Dim memo_generation.l(20,300,100) 
Global Dim memo_noeud.l(20,300,100)
Global Dim memo_branche.l(20,300,100)

 ;procedures************************
 Procedure.l initialisation()
 For i=1 To generation_max
For j=1 To noeud_max
For k=1 To enfant_max
bloc(i,j,k)\enfant=0
bloc(i,j,k)\nom=""
bloc(i,j,k)\nom_enfant=""
Next k
Next j
Next i

For i=1 To generation_max
For j=1 To noeud_max
bloc(i,j,0)\occupe=0
Next j
Next i
EndProcedure
 
 Procedure dessin_icones()
 CreateSprite(#spr_icones, Largeur, Hauteur,0)
 StartDrawing(SpriteOutput(#spr_icones))
  ; mise en tableau ************
For i = 0 To Largeur -1
 For j = 0 To Hauteur -1 
  Read donnees.l 
  tableau(i, j)=donnees.l 
Next j
Next i
 ; dessin point par point**************************
For i = 0 To Largeur -1
 For j = 0 To Hauteur -1 
  Plot(i,j,tableau(i,j)) 
 Next j
Next i
 StopDrawing() 
EndProcedure
 Procedure dessin(nom.b,x.b,y.b,w.b,h.b)
  CopySprite(#spr_icones,nom,0)
  ClipSprite(nom,x,y,w,h)
 EndProcedure


Procedure.l detection_enfant(detect_gen.l,detect_noeud.l,detect_branche.l)

;variables de mémorisation des blocs testés
memo_generation(detect_gen,detect_noeud,detect_branche)=detect_gen
memo_noeud(detect_gen,detect_noeud,detect_branche)=detect_noeud
memo_branche(detect_gen,detect_noeud,detect_branche)=detect_branche
mgen.l=memo_generation(detect_gen,detect_noeud,detect_branche)
mnoeud.l=memo_noeud(detect_gen,detect_noeud,detect_branche)
mbranche.l=memo_branche(detect_gen,detect_noeud,detect_branche)

;on vérifie que les coordonnées du noeud de la generation suivante ne sont pas déjà attribuées
newnoeud.l=1
 While bloc(mgen+1,newnoeud,0)\occupe=1 
     newnoeud=newnoeud+1; on change de noeud si ce nom de noeud est déjà pris 
     If newnoeud>noeud_max;calcul du nombre max de noeuds
         noeud_max=newnoeud
     EndIf 
 Wend
 
 bloc(mgen+1,newnoeud,0)\occupe=1 ;validation des coordonnées du noeud
;création d'un nombre de blocs égal au nombre des descendants directs
For   i= 1 To bloc(mgen,mnoeud,mbranche)\enfant; i compteur de branches nouvelles

    bloc(mgen+1,newnoeud,i)\nom=StringField(bloc(mgen,mnoeud,mbranche)\nom_enfant,i,"|");récupération des noms des descendants(liste de noms séparés par "|")
            
    For j =1 To compteur_procedure_max;mise à jour des renseignements du bloc avec procedure_info
        If  bloc(mgen+1,newnoeud,i)\nom=info_procedure(j)\nom
            bloc(mgen+1,newnoeud,i)\enfant=info_procedure(j)\enfant
            bloc(mgen+1,newnoeud,i)\nom_enfant=info_procedure(j)\nom_enfant
       EndIf
    Next j      

    If  bloc(mgen+1,newnoeud,i)\enfant<>0 ;test du bloc crée(récursivité!)
        detection_enfant(mgen+1,newnoeud,i)   
    EndIf

Next i

EndProcedure


Procedure.l detectionbis_enfant(detect_gen.l,detect_noeud.l,detect_branche.l)

;variables de mémorisation des blocs testés
memo_generation(detect_gen,detect_noeud,detect_branche)=detect_gen
memo_noeud(detect_gen,detect_noeud,detect_branche)=detect_noeud
memo_branche(detect_gen,detect_noeud,detect_branche)=detect_branche
mgen.l=memo_generation(detect_gen,detect_noeud,detect_branche)
mnoeud.l=memo_noeud(detect_gen,detect_noeud,detect_branche)
mbranche.l=memo_branche(detect_gen,detect_noeud,detect_branche)

If bloc(mgen,mnoeud,mbranche)\enfant=0 And mgen<generation_max;gestion des blocs sans enfants

    ;on vérifie que les coordonnées du noeud de la generation suivante ne sont pas déjà attribuées
    newnoeud1.l=1
    While bloc(mgen+1,newnoeud1,0)\occupe=1
        newnoeud1=newnoeud1+1; on change de noeud si ce nom de noeud est déjà pris
    Wend

    bloc(mgen+1,newnoeud1,0)\occupe=1
    bloc(mgen+1,newnoeud1,0)\enfant=0
    bloc(mgen+1,newnoeud1,0)\nom=Str(mgen+1)+"#"+Str(newnoeud1)
    bloc(mgen+1,newnoeud1,0)\origine=bloc(mgen,mnoeud,0)\origine+bloc(mgen,mnoeud,0)\nom+"|"
 
    detectionbis_enfant(mgen+1,newnoeud1,0)
 
Else; si le bloc a des descendants
    ;on vérifie que les coordonnées du noeud de la generation suivante ne sont pas déjà attribuées
    newnoeud.l=1
    While bloc(mgen+1,newnoeud,0)\occupe=1 
        newnoeud=newnoeud+1; on change de noeud si ce nom de noeud est déjà pris 
    Wend

    bloc(mgen+1,newnoeud,0)\occupe=1 ;validation des coordonnées du noeud
    bloc(mgen+1,newnoeud,0)\enfant=bloc(mgen,mnoeud,mbranche)\enfant
    bloc(mgen+1,newnoeud,0)\nom=Str(mgen+1)+"#"+Str(newnoeud)
    bloc(mgen+1,newnoeud,0)\origine=bloc(mgen,mnoeud,0)\origine+bloc(mgen,mnoeud,0)\nom+"|"
    ;création d'un nombre de blocs égal au nombre des descendants directs
    For   i= 1 To bloc(mgen,mnoeud,mbranche)\enfant; i compteur de branches nouvelles
 
         bloc(mgen+1,newnoeud,i)\nom=StringField(bloc(mgen,mnoeud,mbranche)\nom_enfant,i,"|");récupération des noms des descendants(liste de noms séparés par "|")
         
         For j =1 To compteur_procedure_max;mise à jour des renseignements du bloc avec procedure_info
             If  bloc(mgen+1,newnoeud,i)\nom=info_procedure(j)\nom
                 bloc(mgen+1,newnoeud,i)\enfant=info_procedure(j)\enfant
                 bloc(mgen+1,newnoeud,i)\nom_enfant=info_procedure(j)\nom_enfant
                 bloc(mgen+1,newnoeud,i)\ligne_debut_code=info_procedure(j)\ligne_debut_code
                 bloc(mgen+1,newnoeud,i)\ligne_fin_code=info_procedure(j)\ligne_fin_code
             EndIf
         Next j      

  
        If mgen<generation_max
            detectionbis_enfant(mgen+1,newnoeud,i)   
        EndIf

    Next i
EndIf   

If mnoeud>noeud_max;calcul du nombre max de noeuds
    noeud_max=mnoeud
EndIf 

EndProcedure




 Procedure.l traitement_du_programme_choisi()
 fichier_choisi$=OpenFileRequester("prog_detection","C:\Documents and Settings\Ploucky\Bureau\programmation\programmation_PBv4.0","Fichiers Purebasic|*.pb",0)
a$="fichier_a_traiter.text"
CreateFile(0,a$);on crée le fichier .text  à partir du prog .pb choisi
CloseFile(0);fermer le fichier crée avant de le modifier!
CopyFile(fichier_choisi$,a$);on copie le fichier crée précedemment  pour pouvoir le manipuler sans risques

;premier passage pour detecter les procedures et leur emplacement(ligne de  debut de code)
ligne=0
OpenFile(0,a$)
While Eof(0)=0
    ligne=ligne+1
    texte$=LCase(Trim((ReadString(0,#PB_Ascii  ))));  lecture avec espace devant et derrière supprimés+tout en minuscule

    If  FindString(texte$,"endprocedure",1)=0 And FindString(texte$,";",1)=0  And FindString(texte$,"endprocedure",1)=0 And FindString(texte$,"_procedure",1)=0 And FindString(texte$,"procedure",1)<>0
        compteur_procedure+1
        info_procedure(compteur_procedure)\nom=StringField(texte$,2," ")
        info_procedure(compteur_procedure)\ligne_debut_code=ligne
    EndIf

Wend
ligne_max=ligne
compteur_procedure_max=compteur_procedure
CloseFile(0)

;deuxième passage pour trouver la descendance et la ligne de fin de code
For compteur_procedure=1 To compteur_procedure_max
ligne=0
arret_comptage=0
OpenFile(0,a$)
While Eof(0)=0
    ligne=ligne+1
    texte$=LCase(Trim((ReadString(0,#PB_Ascii  ))))
    
    ;detection de la ligne de  fin de code de la procedure  
    If ligne>=info_procedure(compteur_procedure)\ligne_debut_code  And arret_comptage=0
        info_procedure(compteur_procedure)\ligne_fin_code=ligne

        ;recherche des descendants directs dans la procedure
            For i=1 To compteur_procedure_max
                ;pour la recherche on prend le nom de la procedure débarassée de ses parenthèses
                If  i<> compteur_procedure And FindString(texte$,StringField(info_procedure(i)\nom,1,"("),1)<>0  
                    info_procedure(compteur_procedure)\enfant=info_procedure(compteur_procedure)\enfant+1
                   
                    ;listes des procedures filles séparées par un caractère "|"
                    info_procedure(compteur_procedure)\nom_enfant= info_procedure(compteur_procedure)\nom_enfant+info_procedure(i)\nom+"|"
                EndIf
            Next i

        If  FindString(texte$,"endprocedure",1)<>0
            arret_comptage=1 
        EndIf
    EndIf
Wend
CloseFile(0)
Next compteur_procedure
 
 ;troisième passage  pour détecter les bloc.infos(generation=0, noeud=1,branche )
 ligne=0
 generation=0
 noeud=1
 branche=0
 
OpenFile(0,a$)
While Eof(0)=0  
ligne=ligne+1
texte$=LCase(Trim((ReadString(0,#PB_Ascii  ))))


If ligne>info_procedure(compteur_procedure_max)\ligne_fin_code 

    If FindString(texte$,";",1)=1
        branche=branche+1
        bloc(generation,noeud,branche)\nom=texte$
        bloc(generation,noeud,branche)\ligne_debut_code=ligne
    EndIf

EndIf 
Wend
 CloseFile(0)
 branche_max=branche
 
  ;calcul des lignes de fin de blocs 
For branche=1 To branche_max-1 
    bloc(generation,noeud,branche)\ligne_fin_code=bloc(generation,noeud,branche+1)\ligne_debut_code-1
Next branche
bloc(generation,noeud,branche_max)\ligne_fin_code=ligne_max
  
 ;quatrième passage, detection des descendances des bloc(0,1,branche)
 generation=0
 noeud=1
For branche=1 To branche_max
    ligne=0
    OpenFile(0,a$)
    While Eof(0)=0  
        ligne=ligne+1
        texte$=LCase(Trim((ReadString(0,#PB_Ascii  ))))

        If  ligne>=bloc(generation,noeud,branche)\ligne_debut_code And ligne<=bloc(generation,noeud,branche)\ligne_fin_code
            For  i=1 To compteur_procedure_max
                chaine_de_recherche$=StringField(info_procedure(i)\nom,1,"(")+"("
                If FindString(texte$,chaine_de_recherche$,1)<>0
                    bloc(generation,noeud,branche)\enfant=bloc(generation,noeud,branche)\enfant+1
                    bloc(generation,noeud,branche)\nom_enfant=bloc(generation,noeud,branche)\nom_enfant+info_procedure(i)\nom+"|"
                EndIf
            Next i   
         EndIf  
    Wend
    CloseFile(0)

 Next branche
 
 ; remplissage des blocs, appel de la procedure detection_enfant
For branche = 1 To branche_max   
    If bloc(0,1,branche)\enfant<>0
        detection_enfant(0,1,branche)      
    EndIf     
Next branche 

;recherche du nombre max d'enfants
enfant_max=0
For compteur_procedure=1 To compteur_procedure_max
    If  info_procedure(compteur_procedure)\enfant>enfant_max
        enfant_max= info_procedure(compteur_procedure)\enfant
    EndIf        
Next compteur_procedure

;detection du nombre max de generations
generation_max=0
While bloc(generation_max,1,1)\nom<>""
    generation_max=generation_max+1
Wend; il y a (generation-1) noeuds!

;nouveau passage pour combler les branches vides jusqu'a generation_max=>renumérotation 
 initialisation()
 noeud_max=0
 bloc(0,1,0)\origine="0#1"
For branche = 1 To branche_max
    detectionbis_enfant(0,1,branche);gestion des blocs avec ou sans enfants dans la procedure  
Next branche 
EndProcedure

Procedure decalage_des_blocs()
;remplissage de la structure descendance 
For generation=0 To generation_max-1
    For noeud=0 To noeud_max
        bloc(generation,noeud,0)\descendance="|"
        If bloc(generation,noeud,0)\nom<>""
            nom$="|"+Str(generation)+"#"+Str(noeud)+"|"
            For i=0 To generation_max-1
                For j=0 To noeud_max
                    If FindString(bloc(i,j,0)\origine,nom$,1)<>0
                        bloc(generation,noeud,0)\descendance= bloc(generation,noeud,0)\descendance+Str(i)+"#"+Str(j)+"|"
                    EndIf
                Next j
            Next i
        EndIf
    Next noeud
Next generation
     
;decalage des noeuds de la derniere generation + remplissage des delta(voir plus loin)
generation_noeud.l=generation_max-1; il y a (generation-1) noeuds!
bloc(generation_noeud,1,0)\decalage_y=0
For noeud=2 To noeud_max; on decale les blocs de delta puis on tient compte des voisins du dessus et du dessous!
    If  bloc(generation_noeud,noeud,0)\nom<>""
        bloc(generation_noeud,noeud,0)\decalage_y=bloc(generation_noeud,noeud-1,0)\decalage_y+delta

        If bloc(generation_noeud,noeud-1,0)\enfant<>0
            bloc(generation_noeud,noeud,0)\decalage_y=bloc(generation_noeud,noeud,0)\decalage_y+(bloc(generation_noeud,noeud-1,0)\enfant-1)*delta/2
        EndIf
        If bloc(generation_noeud,noeud,0)\enfant<>0
            bloc(generation_noeud,noeud,0)\decalage_y=bloc(generation_noeud,noeud,0)\decalage_y+(bloc(generation_noeud,noeud,0)\enfant-1)*delta/2
        EndIf

    EndIf
    bloc(generation_noeud,noeud,0)\delta=delta
Next noeud

;decalage des noeuds 
For generation=generation_noeud-1 To 0 Step -1
    For noeud=1 To noeud_max
        If  bloc(generation,noeud,0)\nom<>""
            i=generation+1
            For j=1 To noeud_max
                If  bloc(i,j,0)\nom<>""
                    nom$="|"+Str(i)+"#"+Str(j)+"|"
                    If FindString(bloc(generation,noeud,0)\descendance,nom$,1)<>0
                        If bloc(generation,noeud,0)\enfant<>0
                            bloc(generation,noeud,0)\decalage_y=bloc(generation,noeud,0)\decalage_y+bloc(i,j,0)\decalage_y/bloc(generation,noeud,0)\enfant
                        Else
                            bloc(generation,noeud,0)\decalage_y=bloc(generation,noeud,0)\decalage_y+bloc(i,j,0)\decalage_y
                        EndIf
                    EndIf
                EndIf
            Next j
        EndIf
    Next noeud
Next generation

;calcul des delta  des noeuds(dimension de reference des branches pour les noeuds)
For generation=generation_noeud-1 To 1 Step -1
    For noeud=1 To noeud_max
        If  bloc(generation,noeud,0)\nom<>"" And bloc(generation,noeud,0)\enfant<>0
            noeudmin$="|"+StringField(bloc(generation,noeud,0)\descendance,2,"|")+"|";pour calculer delta on a besoin des branches extremes du noeud
            noeudmax$="|"+StringField(bloc(generation,noeud,0)\descendance,bloc(generation,noeud,0)\enfant+1,"|")+"|"

            i=generation+1;on s'interresse juste à la generation suivante
            For j=1 To noeud_max
                If  bloc(i,j,0)\nom<>"" And noeudmax$<>noeudmin$
                    If FindString("|"+bloc(i,j,0)\nom+"|",noeudmin$,1)<>0
                        bloc(generation,noeud,0)\delta=bloc(generation,noeud,0)\delta-bloc(i,j,0)\decalage_y/(bloc(generation,noeud,0)\enfant-1)
                    EndIf
                    If FindString("|"+bloc(i,j,0)\nom+"|",noeudmax$,1)<>0
                        bloc(generation,noeud,0)\delta=bloc(generation,noeud,0)\delta+bloc(i,j,0)\decalage_y/(bloc(generation,noeud,0)\enfant-1)
                    EndIf 
                EndIf
            Next j

        EndIf
    Next noeud
Next generation

;decalage des blocs de generation 0
For branche=1 To branche_max
    If  bloc(0,1,branche)\nom<>""
        bloc(0,1,branche)\decalage_y=bloc(1,branche,0)\decalage_y
    EndIf
Next branche

;decalage des autres blocs (prise en compte des enfants donc des bloc(g,n,0)\delta)
For generation=1 To generation_max
    For noeud=1 To noeud_max
        If bloc(generation,noeud,0)\enfant<>0
            For branche=1 To bloc(generation,noeud,0)\enfant
                bloc(generation,noeud,branche)\decalage_y=bloc(generation,noeud,0)\decalage_y+(2*(branche-1)-(bloc(generation,noeud,0)\enfant-1))*bloc(generation,noeud,0)\delta/2
            Next branche
        EndIf
    Next noeud
Next generation


EndProcedure


  Procedure dessin_bloc(nom_bloc.s,parent.b)
 CreateSprite(#spr_bloc,#Longueur,#hbloc)
 UseBuffer(#spr_bloc)
 StartDrawing(SpriteOutput(#spr_bloc))
 Box(0,0,128,18,RGB(255,255,0))
 DrawText(49,1,nom_bloc)
 StopDrawing()
 DisplayTransparentSprite(#spr_code_var ,1,1)
 Select  parent ;affichage d'icones differents en fonction de la variable "parent" 
     Case 1
     DisplayTransparentSprite(#spr_arbre ,33,1)
     Case 2 
     DisplayTransparentSprite(#spr_fermer ,33,1)
 EndSelect
 
 UseBuffer(#spr_sprite_final)
 EndProcedure
 
 Procedure dessin_final()
CreateSprite(#spr_sprite_final,1024,768)
UseBuffer(#spr_sprite_final)
For generation=0 To 20
    For noeud =0 To 300
        For branche=1 To 100
        
            If bloc(generation,noeud,branche)\nom<>""
        
                dessin_bloc(bloc(generation,noeud,branche)\nom,1)
                DisplaySprite(#spr_bloc,10+generation*3*#Longueur/2,bloc(generation,noeud,branche)\decalage_y)
        
                StartDrawing(SpriteOutput(#spr_sprite_final))
                    If generation<>0
                        Line(10+generation*3*#Longueur/2-#Longueur/4,bloc(generation,noeud,branche)\decalage_y+#hbloc/2,#Longueur/4,0,RGB(255,255,255))
                    EndIf
                    If bloc(generation,noeud,branche)\enfant<>0 And branche<>0
                        Line(10+generation*3*#Longueur/2+#Longueur,bloc(generation,noeud,branche)\decalage_y+#hbloc/2,#Longueur/4,0,RGB(255,255,255))
                    EndIf
                    If bloc(generation,noeud,0)\enfant<>0 
                        LineXY(10+generation*3*#Longueur/2-#Longueur/4,bloc(generation,noeud,1)\decalage_y+#hbloc/2,10+generation*3*#Longueur/2-#Longueur/4,bloc(generation,noeud,bloc(generation,noeud,0)\enfant)\decalage_y+#hbloc/2,RGB(255,255,255))
                    EndIf
                StopDrawing()

            EndIf


        Next branche
    Next noeud
Next generation

UseBuffer(-1)


 EndProcedure
 
 
;initialisation*******************************
InitSprite() 
InitMouse()

traitement_du_programme_choisi()
decalage_des_blocs()
;ouverture d'un écran 1024*768*********************
OpenScreen(1024,768,32,"icones")
TransparentSpriteColor(#PB_Default ,RGB(0,128,0))
;création du sprite #spr_icones***************************
dessin_icones()
;dessin des sprites
 dessin(#spr_code_var,0,0,32,16)
 dessin(#spr_arbre,0,16,16,16)
 dessin(#spr_fermer,16,16,16,16)
 dessin(#spr_souris,32,0,16,16)
 dessin(#spr_panorama,32,16,16,16)
;programme principal*******************
dessin_final()
Repeat; tant que bouton droit relaché*******************
    Delay(10)
    ExamineMouse()
    ;affichage des sprites******************************
  
    DisplaySprite(#spr_sprite_final,0,0)
    DisplayTransparentSprite(#spr_souris,MouseX(),MouseY())

    FlipBuffers()

Until MouseButton(#PB_MouseButton_Right )<>0
 

End

DataSection
Data.l 32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
Data.l 32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,12632256,8421504,8421376,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,16711680,8421376,8421376,8421376,8421376,8421376,16777215,16777215,16777215,16777215,16777215,16777215,8421376,8388608,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,12632256,8421504,8421376,8421376,8421376,8421376,8421376,8388608,32768
Data.l 32768,16711680,16777215,16777215,16777215,16777215,16777215,16777215,16777215,0,16777215,16777215,16777215,8421376,8388608,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,12632256,8421504,8421376,8421376,8421376,8421376,8421376,8388608,32768
Data.l 16711680,8421376,16777215,16777215,0,16777215,16777215,0,16777215,0,16777215,16777215,16777215,8421376,8421376,8388608,16711680,8421376,8421376,12632256,12632256,12632256,12632256,12632256,12632256,12632256,12632256,12632256,8421504,8421376,8421376,8388608
Data.l 16711680,8421376,16777215,16777215,0,16777215,16777215,0,16777215,0,16777215,12632256,12632256,8421376,8421376,8388608,16711680,8421376,8421376,12632256,8421504,8421376,8421376,12632256,8421504,8421376,8421376,12632256,8421504,8421376,8421376,8388608
Data.l 16711680,8421376,16777215,16777215,0,16777215,16777215,0,16777215,0,0,12632256,12632256,8421376,8421376,8388608,16711680,8421376,8421376,12632256,8421504,8421376,8421376,12632256,8421504,8421376,8421376,12632256,8421504,8421376,8421376,8388608
Data.l 16711680,8421376,12632256,12632256,0,12632256,12632256,16777215,12632256,16777215,0,16777215,16777215,12632256,8421376,8388608,16711680,8421376,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,8421376,8388608
Data.l 16711680,8421376,8421376,12632256,16777215,0,12632256,16777215,0,16777215,0,16777215,16777215,12632256,8421376,8388608,16711680,8421376,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,8421376,8388608
Data.l 16711680,8421376,8421376,16777215,16777215,0,12632256,16777215,0,16777215,16777215,16777215,16777215,12632256,8421376,8388608,16711680,8421376,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,16777215,16777215,16777215,8421504,8421376,8388608
Data.l 32768,16711680,8421376,16777215,16777215,16777215,16777215,16777215,16777215,16777215,12632256,12632256,12632256,12632256,8388608,32768,32768,16711680,8421376,16777215,16777215,8421376,8421376,16777215,16777215,8421376,8421376,16777215,16777215,8421376,8388608,32768
Data.l 32768,16711680,8421376,16777215,16777215,12632256,12632256,12632256,12632256,12632256,12632256,8421376,8421376,8421376,8388608,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,16711680,8421376,12632256,12632256,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
Data.l 32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
Data.l 32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,65535,65535,32896,8421376,8388608,8388608,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,16711680,8421376,8421376,65535,65535,65535,65535,32896,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768
Data.l 32768,16711680,8421376,65535,32896,8421376,8421376,65535,32896,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768,16711680,8421376,8421376,255,255,128,8421376,8421376,8421376,255,255,128,8421376,8388608,32768
Data.l 16711680,8421376,8421376,8421376,65535,65535,65535,65535,32896,8421376,8421376,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,255,255,128,8421376,8421376,255,255,255,128,8421376,8421376,8388608
Data.l 16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,65535,65535,32896,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,8421376,255,255,128,8421376,255,128,8421376,8421376,8421376,8421376,8388608
Data.l 16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,8421376,8421376,8421376,255,255,128,8421376,8421376,8421376,8421376,8421376,8388608
Data.l 16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,65535,32896,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,8421376,8421376,8421376,255,255,128,8421376,8421376,8421376,8421376,8421376,8388608
Data.l 16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,8421376,8421376,255,128,8421376,255,255,128,8421376,8421376,8421376,8388608
Data.l 16711680,8421376,8421376,8421376,8421376,65535,32896,8421376,65535,32896,8421376,8421376,8421376,8421376,8421376,8388608,16711680,8421376,8421376,8421376,255,255,255,128,8421376,8421376,255,255,128,8421376,8421376,8388608
Data.l 32768,16711680,8421376,8421376,8421376,65535,32896,65535,32896,65535,32896,8421376,8421376,8421376,8388608,32768,32768,16711680,8421376,8421376,255,255,128,8421376,8421376,8421376,255,255,128,8421376,8388608,32768
Data.l 32768,16711680,8421376,8421376,8421376,65535,32896,65535,32896,65535,32896,8421376,8421376,8421376,8388608,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,16711680,8421376,8421376,8421376,65535,65535,65535,65535,32896,8421376,8421376,8388608,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,8421376,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
Data.l 128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,128,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
Data.l 32768,128,255,255,255,255,255,255,255,255,255,255,255,255,255,128,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,0,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,128,255,255,255,255,255,255,255,255,255,255,255,128,32768,32768,32768,16711680,8421376,8421376,0,8421376,0,65535,0,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,32768,32768,128,255,255,255,255,255,255,255,255,255,128,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,0,65535,65535,65535,8421504,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,32768,32768,128,255,255,255,255,255,255,255,128,32768,32768,32768,32768,16711680,8421376,8421376,0,0,0,65535,16777215,16777215,8421504,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,32768,32768,32768,128,255,255,255,255,255,128,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,0,0,0,0,16777215,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,128,255,255,255,255,128,32768,32768,32768,32768,16711680,8421376,8421376,0,0,0,16777215,128,0,0,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,32768,128,255,255,255,128,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,0,128,16777215,128,0,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,128,255,255,128,32768,32768,32768,32768,16711680,8421376,8421376,0,0,0,16777215,128,0,0,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,128,255,128,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,0,0,0,0,0,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,128,128,32768,32768,32768,32768,16711680,8421376,8421376,8421376,0,0,0,0,0,16777215,16777215,8421504,8421376,8421376,8421376,8388608
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,8421376,8421376,8421376,0,0,65535,16777215,65535,8421504,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,8421376,8421376,0,8421376,0,65535,65535,65535,8421504,8421376,8421376,8421376,8388608,32768
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,8421376,8421376,8421376,8421376,0,65535,0,8421376,8421376,8421376,8388608,32768,32768
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,8421376,8421376,8421376,0,8421376,8421376,8388608,8388608,32768,32768,32768
Data.l 32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,32768,16711680,16711680,16711680,8388608,8388608,8388608,32768,32768,32768,32768,32768
 
 
EndDataSection