Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
RmScript - GLib

RmScript

Sommario | Admin | Forum | Bugs | Todo | Files

Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 12:03
Mercoledė, 04/07/2012
Ciao!

Visto che programmi su linux, ti consiglio di dare un occhio alle GLib, che sono comodissime e molto utili. Sicuramente puoi rendere molto pių gestibile il tuo progetto con poche righe in pių :k::k:

ciaociao


edit: ops, non pensavo che il post andasse nella home.... ;)

Ultima modifica effettuata da tasx il 04/07/2012 alle 12:07
PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 19:20
Mercoledė, 18/07/2012
Grazie mille controllo subito

PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 15:57
Domenica, 22/07/2012
Pensavo di scrivere prima tutti i comandi di base e poi riscriverlo con le glib cosa mi consigli ?

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 18:02
Domenica, 22/07/2012
Ciao, anch'io avevo iniziato a scrivere un interprete di base.
Utilizzavo un hashtable con chiave il nome della funzione e parametro il puntatore cosė non devi scriverti migliaia di righe per il confronto con tutte le funzioni. Puoi usare GString per le stringhe cosė da evitare seg fault.

es.:
Codice sorgente - presumibilmente C#

  1. /* array con le funzioni standard */
  2. gchar *stdfunc[] =
  3. {
  4.     "print", t_print,
  5.     NULL
  6. };
  7.  
  8. /**
  9. * carica la tabella delle istruzioni standard
  10. * in memoria
  11. **/
  12. void func_std_load_func(tobj *t)
  13. {
  14.     int i = 0;
  15.     while (stdfunc[i] != NULL)
  16.     {
  17.         tfunc *tf = g_try_malloc0(sizeof(tfunc));
  18.         tf->name = stdfunc[i];
  19.         tf->exec = (void*) stdfunc[i+1];
  20.  
  21.         /*
  22.          * inserisco nell'hashtable t->stdfunc
  23.          * con chiave il nome della funzione tf->name
  24.          * e la struttura relativa alla funzione
  25.          */
  26.         g_hash_table_insert(t->stdfunc, tf->name, tf);
  27.  
  28.         i += 2;
  29.     }
  30. }



inoltre puoi usare il caricamento dinamico di moduli in pochissime righe, quindi creare plugin.
Il codice che scrivi e cross platform senza nessuna modifica(o quasi) e tante altre cose ;)
qualunque problema sempre disponibile ;)

ciaociao :k::k:

PM Quote
Avatar
Umberto (Member)
Pro


Messaggi: 156
Iscritto: 27/09/2011

Segnala al moderatore
Postato alle 10:11
Lunedė, 23/07/2012
Scusa cosa e' tobj?

PM Quote
Avatar
tasx (Dev Team)
Expert


Messaggi: 439
Iscritto: 15/12/2008

Segnala al moderatore
Postato alle 15:09
Lunedė, 23/07/2012
tobj č una struttura definita cosė(č in fondo):
Codice sorgente - presumibilmente C++

  1. #ifndef TYPES_H_INCLUDED
  2. #define TYPES_H_INCLUDED
  3.  
  4. #include <glib.h>
  5.  
  6. #define SIZE_TOBJ               sizeof(tobj)
  7. #define SIZE_TOPT               sizeof(topt)
  8.  
  9. #define VARTYPE                 gint
  10. #define VARTYPE_UKNOW           0
  11. #define VARTYPE_INT             1
  12. #define VARTYPE_STRING          2
  13.  
  14. #define ISTRTYPE                gint
  15. #define ISTRTYPE_ALLOC          1
  16. #define ISTRTYPE_FUNC           2
  17. #define ISTRTYPE_CYCLE          3
  18. #define ISTRTYPE_UKNOW          4
  19.  
  20. static gchar *typesvar[] = {"int", "string", NULL};
  21.  
  22. typedef struct _var tvar;
  23. typedef struct _t_opt topt;
  24. typedef struct _istr tistr;
  25. typedef struct _func tfunc;
  26. typedef struct _mem tmem;
  27. typedef struct _t_obj tobj;
  28.  
  29. struct _var
  30. {
  31.     /* il tipo di variabile */
  32.     VARTYPE type_var;
  33.     /* il nome della variabile */
  34.     GString *name;
  35.     /* il valore della variabile */
  36.     gpointer *value;
  37. };
  38.  
  39. /**
  40. * questa struttura opsita tutte le funzioni
  41. * caricate durante l'interpretig del programma
  42. **/
  43. struct _mem
  44. {
  45.     GArray *mem;
  46.     gint ic;
  47. };
  48.  
  49. struct _t_opt
  50. {
  51.     GString *name_file;
  52. };
  53.  
  54. struct _istr
  55. {
  56.     /* il tipo di istruzione */
  57.     ISTRTYPE type;
  58.     /* Gstring */
  59.     GString *text;
  60.  
  61.     tfunc *tf;
  62.  
  63.     /* l'istruzione splittata, NULL terminated */
  64.     gchar **tokens;
  65.  
  66.     /* la lunghezza dell'array di tokens */
  67.     gint tokens_lenght;
  68. };
  69.  
  70. struct _func
  71. {
  72.     /* parametri della funzione */
  73.     GList *params;
  74.     /* nome della funzione */
  75.     gchar *name;
  76.     /* puntatore alla funzione */
  77.     void* (*exec) (void*);
  78. };
  79.  
  80. struct _t_obj
  81. {
  82.     /* le istruzioni del programma */
  83.     GList *istrs;
  84.  
  85.     /* le variabili dichiarate */
  86.     GHashTable *vars;
  87.  
  88.     /* standard func */
  89.     GHashTable *stdfunc;
  90.  
  91.     /* memoria con le istruzioni */
  92.     tmem *mem;
  93.  
  94.     /* opzioni di esecuzione */
  95.     topt *opt;
  96. };


PM Quote