1

Salut,

Comment récupérer les données contenues dans une liste passée en paramètre d'un programme ?
Quand GetArgType (argptr) renvoie LIST_TAG, c'est bien mais ensuite ? J'aimerai recuperer ce qu'il y a dedans.

Comment faire ?

Merci
What kind of technology is this?

2

puisque les arguments sont enregistrés à l'envers (si je me souviens bien .. ?), tu remontes d'un octet par rapport à ton LIST_TAG et tu devrais tomber sur le tag du 1er element de ta liste, tu le read ou tu le saute avec next_expression_index(), et ainsi de suite jusqu'à tomber sur le END_TAG qui marque la fin de ta liste.

pour les matrices c'est pas très différent, puisqu'elles ne sont en mémoire que des listes de listes tu vas trouver deux LIST_TAG à la suite, puis le contenu, un END_TAG qui marque la fin de la 1ere liste, à nouveau un LIST_TAG, etc...
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

J'avais fait ça pour regarder comment ça marchait:

#include <tigcclib.h>

void _main(void)
{
  short lvl=0;
  ESI argptr;
  int argtype;
  long num;
  InitArgPtr(argptr);
  clrscr();
  FontSetSys(F_6x8);
  short k;
  do
  {
    //printf("\nptr:%u\n",(uint)argptr);
    argtype=GetArgType(argptr);
    if(argtype==LIST_TAG)
    {
      lvl++;
      printf("Liste");
      argptr--;
    }
    else if(argtype==END_TAG)
    {
      lvl--;
      printf("Fin Liste");
      argptr--;
    }
    else if(argtype==STR_TAG)
    {
      printf("  Chaine: ");
      printf(GetStrnArg(argptr));
    }
    else if(argtype==POSINT_TAG || argtype==NEGINT_TAG)
    {
      num = GetIntArg (argptr);
      if (argtype==NEGINT_TAG)
        num = -num;
      printf("  int: %ld",num);
    }
    else
    {
      printf("Argument inconnu");
      ngetchx();
      break;
    }
    k=ngetchx();
    printf("\n");
  }while(lvl!=0 && k!=264);


C'est pas du tout un programme complet ni rien du tout mais cétait l'affaire de 5 minutes.

Donc si par exemple tu veux sortir une matrice par ton programme:
|1,2,3|
|4,5,6|

push_END_TAG();
  push_END_TAG();
   push_longint(6);
   push_longint(5);
   push_longint(4);
  push_LIST_TAG();
  push_END_TAG();
   push_longint(3);
   push_longint(2);
   push_longint(1);
  push_LIST_TAG();
 push_LIST_TAG();
avatar
Combien de tas de bois une marmotte pourrait couper si une marmotte pouvait couper du bois ?

4

Absolument nickel !

Merci
What kind of technology is this?