Accueil Ti-Gen Foire Aux Questions Chat sur le chan #tigcc sur IRC
Liste des membres Rechercher Aide
Bienvenue Invité !   Se connecter             Mes sujets   
Administrer
0 membre(s) et 1 visiteur(s) actif(s) durant les 5 dernières minutes Utilisateurs actifs : Aucun membre + 1 visiteur
Avant de poster sur le forum, il y a des régles de bases à respecter pour une bonne entente et un respect de tous.
Veuillez lire la charte du forum.
  :: Index » Forum Ti68K » Programmation C » Sauver et lire une array à une dimension (28 réponse(s))
./POST DE DEPART (post n°0)   Marquer comme non lu.
Supermario Ecrit le: Jeudi 12 août 2004 à 11:52 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

Voici une array à une dimension:
static int test[6] = {155, 0, 15, 60, 4, 42};
En language TIGCC évidemment lol; il me faudrait pouvoir la stocker dans un fichier quelconque et pouvoir la relire par la suite.
Merci BEAUCOUP d'avance
supermario
    
./Post n°1   Marquer comme non lu.
Lionel Debroux Ecrit le: Jeudi 12 août 2004 à 11:58 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

> En language TIGCC évidemment lol; il me faudrait pouvoir la stocker dans un fichier quelconque et pouvoir la relire par la suite.
Deux solutions: les fonctions standard de stdio.h (fopen, fwrite, fclose...), les fonctions natives de vat.h (memcpy([file],&test,6*sizeof(int))). Ces dernières génèreront du code plus rapide et plus petit. Divers tutorials ou exemples de programmes existent.

Au passage, utilise "short" plutôt qu'"int".
-Edité le Jeudi 12 août 2004 à 12:17 par Lionel Debroux-
Lionel Debroux - membre de TICT.
    
./Post n°2   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 août 2004 à 12:05 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Lionel Debroux :
les fonctions non natives de vat.h

Je suppose que tu voulais dire le contraire...

Au passage, utilise "short" plutôt qu'"int".

Non. Mauvais conseil. Utilise int qui est le format d'entiers le plus adapté pour la plateforme et qui dans le cas de TIGCC équivaut à short. TIGCCLIB utilise short partout pour que ça marche aussi si on compile avec -mlong, mais ça ne veut pas dire qu'il faut faire de même dans tous les programmes.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°3   Marquer comme non lu.
Supermario Ecrit le: Jeudi 12 août 2004 à 12:11 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

Donc si j'ai bien compris j'ai le choix entre:
-les fonctions standard de stdio.h (fopen, fwrite, fclose...),
-et les fonctions non natives de vat.h (memcpy([file],&test,6*sizeof(int))).
Mais quelqu'un peut-il me donner svp un exemple de programme simple où l'on enregistre
mon array dans un fichier, et où on le lis par la suite?
Cela m'avancerait énormément dans mon projet; merci d'avance.
Supermario
    
./Post n°4   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 août 2004 à 12:15 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Voilà comment on écrit dans un fichier avec les fonctions natives (pas "non natives") de vat.h:
        SYM_ENTRY *sym=SymFindPtr($(bgammsav),0);
        HANDLE handle;
        if (sym) {
          if (sym->flags.bits.archived) {
            if (!EM_moveSymFromExtMem($(bgammsav),HS_NULL)) break;
          }
          handle=HeapRealloc(sym->handle,47);
          sym=SymFindPtr($(bgammsav),0);
        } else {
          HSym hsym=SymAdd($(bgammsav));
          if (!*(unsigned long *)&hsym) break;
          handle=HeapAlloc(47);
          if (handle)
            sym=DerefSym(hsym);
          else
            SymDel($(bgammsav));
        }
        if (!handle) break;
        sym->handle=handle;
        short *fptr=HeapDeref(handle);
        *fptr=45;
        memcpy(fptr+1,&board,26);
        fptr[14]=firstturn;
        fptr[15]=turn;
        fptr[16]=die1;
        fptr[17]=die2;
        *(unsigned long *)(fptr+18)=__randseed; // hack to save random seed
        memcpy(fptr+20,(char [7]){0,'B','G','A','M',0,OTH_TAG},7);

-Edité le Jeudi 12 août 2004 à 12:15 par Kevin Kofler-
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°5   Marquer comme non lu.
Lionel Debroux Ecrit le: Jeudi 12 août 2004 à 12:16 Déconnecté(e)    Voir le profil de Lionel Debroux Envoyer un email à Lionel Debroux Visiter le site WEB de Lionel Debroux Envoyer un message privé à Lionel Debroux  

Grosse faute de ma part...
Lionel Debroux - membre de TICT.
    
./Post n°6   Marquer comme non lu.
Supermario Ecrit le: Jeudi 12 août 2004 à 12:39 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

Donc mon array peut être maintenant sauvée dans un fichier de mon choix.
Mais comment faire pour la lire à partir de ce fichier (en la stockant par exemple dans un pointer ou n'importe quoi), pourriez-vous svp me donner les lignes qui le permettent?

Le projet que je porte sur TI89 est la copie de celui que j'avais développé sur TI86, or le language asm86 permettait de stocker et de lire des données vers ou à partir d'une chaine;
le portage est actuellement impeccable et avance vite, mais impossible de trouver des exemples simples qui permettent de stocker et lire mon array.
Je vous remercie d'avance
Supermario
    
./Post n°7   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 août 2004 à 13:13 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


  SYM_ENTRY *savegame_sym=SymFindPtr($(bgammsav),0);

  if (savegame_sym) { // load saved game
    HANDLE handle=savegame_sym->handle;
    if (!handle) goto newgame;
    short *fptr=HeapDeref(handle);
    if (!fptr || *fptr!=45
        || memcmp(fptr+20,(char [7]){0,'B','G','A','M',0,OTH_TAG},7))
      goto newgame;
    memcpy(&board,fptr+1,26);
    firstturn=fptr[14];
    turn=fptr[15];
    die1=fptr[16];
    die2=fptr[17];
    srand(*(unsigned long *)(fptr+18));

    // now try to delete the savegame unless it is archived
    if (!savegame_sym->flags.bits.archived) SymDel($(bgammsav));

    goto loadgame; // skip die randomization
  } else { // new game
...
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°8   Marquer comme non lu.
Supermario Ecrit le: Jeudi 12 août 2004 à 14:55 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

ok merci c super ça marche très bien!
Mais j'ai encore un dernier service à demander:
SYM_ENTRY *sym=SymFindPtr($(bgammsav),0);
HANDLE handle;
if (sym) {
if (sym->flags.bits.archived) {
if (!EM_moveSymFromExtMem($(bgammsav),HS_NULL)) break;
}
handle=HeapRealloc(sym->handle,47);
sym=SymFindPtr($(bgammsav),0);
} else {
HSym hsym=SymAdd($(bgammsav));
if (!*(unsigned long *)&hsym) break;
handle=HeapAlloc(47);
if (handle)
sym=DerefSym(hsym);
else
SymDel($(bgammsav));
}
if (!handle) break;
sym->handle=handle;
short *fptr=HeapDeref(handle);
*fptr=45;
memcpy(fptr+1,&board,26);
fptr[14]=firstturn;
fptr[15]=turn;
fptr[16]=die1;
fptr[17]=die2;
*(unsigned long *)(fptr+18)=__randseed; // hack to save random seed
memcpy(fptr+20,(char [7]){0,'B','G','A','M',0,OTH_TAG},7);



Voilà; dans cette fonction le nom du fichier est invariablement bgammsav;
Ce que je voudrais savoir c'est comment faire pour que ce nom soit le contenu d'un CHAR;

char name[4]="YAHO";


voilà je voudrais que le YAHO puisse être le nom du fichier; faut-il remplacer quelque chose dans les syntaxes comme
SYM_ENTRY *sym=SymFindPtr($(bgammsav),0);
?


EDIT : smileys
-Edité le Jeudi 12 août 2004 à 16:41 par serioussam-
    
./Post n°9   Marquer comme non lu.
Kevin Kofler Ecrit le: Jeudi 12 août 2004 à 16:13 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu remplaces $(bgammsav) par SYMSTR(name).
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°10   Marquer comme non lu.
Supermario Ecrit le: Vendredi 13 août 2004 à 14:54 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

SYM_ENTRY *savegame_sym=SymFindPtr($(save)0);
HANDLE handle=savegame_sym->handle;
short *fptr=HeapDeref(handle);
memcpy(&comptes,fptr+1,200);

Voilà; ces quatres lignes me permettent de lire depuis un fichier (expression) nommé save
une array à une dimension nommée comptes telle que:

static int comptes[200] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

Il y a 200entrées dans "comptes".
Bon jusque là, ça marche.

Le problème, c'est que les 4 lignes plus haut ne me permettent que de charger les 100 premières entrés environ.
Qu'est-ce qui me permettrait de pouvoir entrer correctement les 200 entrées et pas que la moitié svp?
lol merci de votre patience
Supermario
    
./Post n°11   Marquer comme non lu.
Kevin Kofler Ecrit le: Vendredi 13 août 2004 à 20:07 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Il faut mettre 200*sizeof(int) dans ton memcpy.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°12   Marquer comme non lu.
Supermario Ecrit le: Samedi 14 août 2004 à 12:53 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

memcpy(&comptes,fptr+1,200*sizeof(int));

Voilà c'est le memcpy une fois modifié; mais cela ne semble pourtant pas fonctionner.
La fonction charge toujours les 100 premières entrées correctement, mais les entrées suivantes sont erronées; par exemple, le fichier que je veux lire contient:

static int comptes[200] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};


Et e fichier lu contiendra:

static int comptes[200] = {
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
1, 2, 4, 2, 2, 3, 4, 4, 5, 4, 6, 4,8, 1, 1, 9, 2, 1, 1, 7,
1, 2, 4, 2, 2, 3, 4, 4, 5, 4, 6, 4,8, 1, 1, 9, 2, 1, 1, 7,
1, 2, 4, 2, 2, 3, 4, 4, 5, 4, 6, 4,8, 1, 1, 9, 2, 1, 1, 7,
1, 2, 4, 2, 2, 3, 4, 4, 5, 4, 6, 4,8, 1, 1, 9, 2, 1, 1, 7,
1, 2, 4, 2, 2, 3, 4, 4, 5, 4, 6, 4,8, 1, 1, 9, 2, 1, 1, 7};

Evidemment ce n'es qu'un exemple, mais les entrés au-delà de 100 sont toujours incorrectes.
Aidez moi svp!!
En vous remerciant BCP
Supermario
    
./Post n°13   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 14 août 2004 à 16:02 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


Tu as probablement fait la même erreur à l'écriture.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°14   Marquer comme non lu.
Supermario Ecrit le: Samedi 14 août 2004 à 16:36 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

euh quand vous dites 200*sizeof(int), "int" il faut le remplacer par quelque chose ou c à mettre comme ça?
    
./Post n°15   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 14 août 2004 à 16:51 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


C'est à remplacer par le type de données en question. Mais comme dans ton cas, c'est static int comptes[200], c'est bien int qu'il faut mettre ici.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°16   Marquer comme non lu.
Benjy Ecrit le: Samedi 14 août 2004 à 17:14 Déconnecté(e)    Voir le profil de Benjy Envoyer un email à Benjy Visiter le site WEB de Benjy Envoyer un message privé à Benjy  


tien vu que ce post traite un petit peu de la creation de variable. Pourquoi aucun tuto existant parle de ca!! car moi ca m'interesse et beaucoup d'autres personne aimerais mais ca reste assez complexe
Le langage C y'a pas mieux!!!
    
./Post n°17   Marquer comme non lu.
Supermario Ecrit le: Samedi 14 août 2004 à 17:18 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

Ok.
SYM_ENTRY *sym=SymFindPtr(SYMSTR(name),0);
        HANDLE handle;
       if (sym) {
          if (sym->flags.bits.archived) {
          }
          handle=HeapRealloc(sym->handle,247);
          sym=SymFindPtr(SYMSTR(name),0);
        } else {
          HSym hsym=SymAdd(SYMSTR(name));
          handle=HeapAlloc(247);
          if (handle)
            sym=DerefSym(hsym);
          else
            SymDel(SYMSTR(name));
        }
        sym->handle=handle;
        int *fptr=HeapDeref(handle);
        *fptr=200;
        memcpy(fptr+1,&comptes,200*sizeof(int));
        fptr[200]=comptes;



Ca c'est la fonction qui me permet donc d'écrire un fichier; seulement cette fonction fait planter la calculette. Est-ce que vous pourriez m'aider svp à trouver ce qui ne va pas parce que j'ai essayé beaucoup de choses pour faire fonctionner cette fonction mais rien ne marche; soit le fichier fait 10 fois sa taille normale soit la calculatrice plante bêtement...
Aidez-moi svp
Supermario
-Edité le Samedi 14 août 2004 à 17:34 par benjy-
    
./Post n°18   Marquer comme non lu.
Kevin Kofler Ecrit le: Samedi 14 août 2004 à 18:28 Déconnecté(e)    Voir le profil de Kevin Kofler Envoyer un email à Kevin Kofler Visiter le site WEB de Kevin Kofler Envoyer un message privé à Kevin Kofler  


          if (sym->flags.bits.archived) {
          }

Là, il manque un EM_moveSymFromExtMem. Tu ne peux pas écrire dans un fichier archivé.

Il manque aussi le traîtement de la condition if (!handle). Si l'allocation du handle a échoué, tu ne peux pas continuer à écrire dedans.

Ensuite, pas la peine de mettre 247 octets, 202 suffisent.

Et enfin, fptr[200]=comptes; ne marchera pas, mais alors vraiment pas du tout:
1. Tu ne peux pas stocker un pointeur dans un fichier.
2. Tu ne peux pas stocker un pointeur (4 octets) dans un int (2 octets).
3. Tu écris par dessus le dernier élément de ton tableau.
Membre de l'équipe de TIGCC: http://tigcc.ticalc.org
Mainteneur du portage Linux/Unix de TIGCC: http://tigcc.ticalc.org/linux/
Membre de l'équipe de CalcForge: http://www.calcforge.org:70/

Participez à la reprise de Ti-Gen!
    
./Post n°19   Marquer comme non lu.
Supermario Ecrit le: Samedi 14 août 2004 à 18:57 Déconnecté(e)    Voir le profil de Supermario Envoyer un email à Supermario Envoyer un message privé à Supermario  

Voilà, j'ai tenu compte des modifications, mais la calculette plante dès qu'on vas dans le menu (var-link) ou dès que l'on veut sauvegarder les comptes une seconde fois.


SYM_ENTRY *sym=SymFindPtr(SYMSTR(name),0);
        HANDLE handle;
       if (sym) {
          if (sym->flags.bits.archived) {
          if (!EM_moveSymFromExtMem(SYMSTR(name),HS_NULL)) break;
          }
          handle=HeapRealloc(sym->handle,202);
          sym=SymFindPtr(SYMSTR(name),0);
        } else {
          HSym hsym=SymAdd(SYMSTR(name));
        if (!*(unsigned long *)&hsym) break;
          handle=HeapAlloc(202);
          if (handle)
            sym=DerefSym(hsym);
          else
            SymDel(SYMSTR(name));
        }
        if (!handle) break;
        sym->handle=handle;
        short *fptr=HeapDeref(handle);
        *fptr=200;
        memcpy(fptr+1,&comptes,200*sizeof(int));


Ouin j'ai même enlevé ftpr[200] (la honte au moins 3 raisons que ca plante rien que pour ça lol) et ça marche pas quand même!! J'ai besoin de votre aide svp!!
Merci beaucoup
supermario
[edit]: Met ton code comme ca!! c plus lisible merci c'est le bouton "#"
-Edité le Samedi 14 août 2004 à 19:29 par benjy-
    
  :: Index » Forum Ti68K » Programmation C » Sauver et lire une array à une dimension (28 réponse(s))
Pages : 1/2     « [1] 2 » »|

.Répondre à ce sujet
Les boutons de code
[B]old[I]talic[U]nderline[S]trikethrough[L]ine Flip Hori[Z]ontallyFlip [V]erticallySha[D]ow[G]low[S]poilerCode [G][C]ite
Bullet [L]istList Item [K] Link [H][E]mail[P]icture SmileysHelp
Couleurs :
Saisissez votre message
Activer les smileys
     

Forum de Ti-Gen v3.0 Copyright ©2004 by Geoffrey ANNEHEIM
Webmaster: Kevin KOFLER, Content Admins: list, Server Admins: Tyler CASSIDY and Kevin KOFLER, DNS Admin: squalyl
Page générée en 86.25ms avec 18 requetes