miércoles, 2 de enero de 2013

Crear estructuras en Okteta

Síntesis rápida
Necesita crear dos ficheros en el directorio /home/NOMBREDEUSUARIO/.kde/share/apps/okteta/structures/NOMBRE_X

- Un NOMBRE_X.osd donde guardará toda la información de la estructura
- Un NOMBRE_X.desktop para la presentación visual (No es tan importante).
(NOMBRE_X Es cualquier nombre que usted le quiera dar)
Ejemplo de como puede ser la estructura del fichero NOMBRE_X.osd: 

<?xml version="1.0" encoding="UTF-8"?>
<data>
     <struct name="NombreDeLaEstructura">
<primitive name="UnChar" type="Char"/>
<primitive name="UnEntero" type="Int32"/>
      </struct>
</data>

La anterior es una estructura que tiene dos campos primitivos: un carácter y un entero, que en C/C++ equivaldría a algo así:

struct NombreDeLaEstructura{
   char UnChar;
   int UnEntero;
}

El fichero NOMBRE_X.desktop puede ser algo así:

[Desktop Entry]
Encoding=UTF-8
Icon=code-context
Type=Service
ServiceTypes=KPluginInfo

Name[es]=Prueba

X-KDE-PluginInfo-Author=Hector Oliveros
X-KDE-PluginInfo-Email=hector.oliveros.leon@gmail.com
X-KDE-PluginInfo-Name=Prueba
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://www.plugin.org/
X-KDE-PluginInfo-Category=structure
X-KDE-PluginInfo-License=LGPL
X-KDE-PluginInfo-EnabledByDefault=true


Luego lo guarda y ya puede agregar la estructura 


Ejemplo:

Imaginemos que queremos analizar un fichero binario que contenga, internamente, varias de estas estructuras

struct BCP{ 
  int idControl;
  int pid;  
  pid_t ppid;  
  int gradoDePrioridad;  
  int consumoAcumuladoDeCPU;  
  int rafagasDeEjecucion[20]; 
 
  struct Bloqueo{    
    int idControlProceso;     
    uint tiempoDeBloqueo;    
    int idRecurso;    
  } bloqueos[20];    
  
  int instanteDeLlegada;

  enum TipoDeProceso{
    BATCH  = 0,
    TIEMPO_REAL  = 1,
    INTERACTIVOS = 2
  } tipoDeProceso;  
};


En este caso el fichero .osd sería algo así:


<?xml version="1.0" encoding="UTF-8" ?>
<data>  
  <enumDef name="Tipo_De_Proceso" type="Int32">
      <entry name="BATCH"        value="0" />
      <entry name="TIEMPO_REAL"  value="1" />
      <entry name="INTERACTIVOS" value="2" />      
   </enumDef>        
  <struct name="BCP">
    <primitive name="IDControl" type="Int32" />    
    <primitive name="PID" type="Int32" />    
    <primitive name="PPID" type="Int32" />        
    <primitive name="GradoDePrioridad" type="Int32" />    
    <primitive name="ConsumoAcumuladoDeCpu" type="Int32" />    
    <array name="RafagasDeEjecucion" length="20">
      <primitive type="Int32" />
    </array>    
    <array name="Bloqueos" length="20">
      <struct name="Bloqueo">
 <primitive name="IDControl" type="Int32" />
 <primitive name="TiempodeBloqueo" type="Int32" />
 <primitive name="IDRecurso" type="Int32" />
      </struct> 
    </array>    
    <primitive name="InstanteDeLlegada" type="Int32" />     
    <enum name="TipoDeProceso" enum="Tipo_De_Proceso" type="Int32" />    
  </struct> 
</data>



Aquí puede descargar este ejemplo completo

Solo debe pegarlo en la ruta: 
/home/NOMBREDEUSUARIO/.kde/share/apps/okteta/structures/


1 comentario: