Index: branches/2014/dev_r4650_UKMO7_STARTHOUR/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c
===================================================================
--- branches/2014/dev_r4650_UKMO7_STARTHOUR/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c	(revision 5985)
+++ branches/2014/dev_r4650_UKMO7_STARTHOUR/NEMOGCM/EXTERNAL/AGRIF/LIB/WorkWithlistvarindoloop.c	(revision 5987)
@@ -34,6 +34,6 @@
 /******************************************************************************/
 #include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+//#include <stdlib.h>
+//#include <string.h>
 
 #include "decl.h"
@@ -47,5 +47,5 @@
 /*                                                                            */
 /******************************************************************************/
-void Add_UsedInSubroutine_Var_1 (char *ident)
+void Add_UsedInSubroutine_Var_1 (const char *ident)
 {
   listvar *newvar;
@@ -59,6 +59,6 @@
   if ( !List_UsedInSubroutine_Var )
   {
-      newvar=(listvar *)malloc(sizeof(listvar));
-      newvar->var=(variable *)malloc(sizeof(variable));
+      newvar=(listvar *)calloc(1,sizeof(listvar));
+      newvar->var=(variable *)calloc(1,sizeof(variable));
       /*                                                                      */
       Init_Variable(newvar->var);
@@ -66,17 +66,9 @@
       newvar->suiv = NULL;
       strcpy(newvar->var->v_nomvar,ident);
-
-      Save_Length(ident,4);
       strcpy(newvar->var->v_modulename,curmodulename);
-      Save_Length(curmodulename,6);
-     printf("ICI %d\n",newvar->var->v_module);
-
-      strcpy(newvar->var->v_commoninfile,mainfile);
-      Save_Length(mainfile,10);
+      strcpy(newvar->var->v_commoninfile,cur_filename);
       strcpy(newvar->var->v_subroutinename,subroutinename);
-      Save_Length(subroutinename,11);
       newvar->var->v_pointedvar=pointedvar;
       List_UsedInSubroutine_Var = newvar ;
-       printf("jaoute %s\n",newvar->var->v_nomvar);
   }
   else
@@ -94,23 +86,16 @@
       if ( out == 0 )
       {
-         newvar=(listvar *)malloc(sizeof(listvar));
-         newvar->var=(variable *)malloc(sizeof(variable));
+         newvar=(listvar *)calloc(1,sizeof(listvar));
+         newvar->var=(variable *)calloc(1,sizeof(variable));
          /*                                                                   */
          Init_Variable(newvar->var);
          /*                                                                   */
          strcpy(newvar->var->v_nomvar,ident);
-
-         Save_Length(ident,4);
-         strcpy(newvar->var->v_commoninfile,mainfile);
-         Save_Length(mainfile,10);
+         strcpy(newvar->var->v_commoninfile,cur_filename);
          strcpy(newvar->var->v_modulename,curmodulename);
-         Save_Length(curmodulename,6);
-       printf("ICI %d\n",newvar->var->v_module);
          strcpy(newvar->var->v_subroutinename,subroutinename);
-         Save_Length(subroutinename,11);
          newvar->var->v_pointedvar=pointedvar;
          newvar->suiv = List_UsedInSubroutine_Var;
-         printf("jaoute %s\n",newvar->var->v_nomvar);
-         List_UsedInSubroutine_Var = newvar;        
+         List_UsedInSubroutine_Var = newvar;
       }
   }
@@ -134,6 +119,6 @@
   if ( !List_UsedInSubroutine_Var )
   {
-      newvar=(listvar *)malloc(sizeof(listvar));
-      newvar->var=(variable *)malloc(sizeof(variable));
+      newvar=(listvar *)calloc(1,sizeof(listvar));
+      newvar->var=(variable *)calloc(1,sizeof(variable));
       /*                                                                      */
       Init_Variable(newvar->var);
@@ -141,12 +126,7 @@
       newvar->suiv = NULL;
       strcpy(newvar->var->v_nomvar,name);
-
-      Save_Length(name,4);
       strcpy(newvar->var->v_modulename,curmodulename);
-      Save_Length(curmodulename,6);
-      strcpy(newvar->var->v_commoninfile,mainfile);
-      Save_Length(mainfile,10);
+      strcpy(newvar->var->v_commoninfile,cur_filename);
       strcpy(newvar->var->v_subroutinename,subroutinename);
-      Save_Length(subroutinename,11);
       newvar->var->v_pointedvar=pointedvar;
       List_UsedInSubroutine_Var = newvar ;
@@ -183,18 +163,13 @@
       if ( out == 2 || out == 0 )
       {
-         newvar=(listvar *)malloc(sizeof(listvar));
-         newvar->var=(variable *)malloc(sizeof(variable));
+         newvar=(listvar *)calloc(1,sizeof(listvar));
+         newvar->var=(variable *)calloc(1,sizeof(variable));
          /*                                                                   */
          Init_Variable(newvar->var);
          /*                                                                   */
          strcpy(newvar->var->v_nomvar,name);
-
-         Save_Length(name,4);
          strcpy(newvar->var->v_modulename,curmodulename);
-         Save_Length(curmodulename,6);
-         strcpy(newvar->var->v_commoninfile,mainfile);
-         Save_Length(mainfile,10);
+         strcpy(newvar->var->v_commoninfile,cur_filename);
          strcpy(newvar->var->v_subroutinename,subroutinename);
-         Save_Length(subroutinename,11);
          newvar->var->v_pointedvar=pointedvar;
 
@@ -254,163 +229,172 @@
 void  CompleteThelistvarindoloop()
 {
-  listvar *newvar;
-  listvarpointtovar *pointtmplist;
-  listcouple *coupletmp;
-  int outvar;
-
-  pointtmplist = List_CouplePointed_Var;
-  while ( pointtmplist )
-  {
-      coupletmp = pointtmplist->t_couple;
-      while ( coupletmp )
-      {
-         newvar = List_UsedInSubroutine_Var;
-         outvar = 0 ;
-         while ( newvar && outvar == 0)
-         {
-           /* we should find the same variable name in the same subroutine    */
-           if ( !strcasecmp(newvar->var->v_nomvar,coupletmp->c_namevar) &&
-                !strcasecmp(newvar->var->v_subroutinename,
-                                       pointtmplist->t_cursubroutine) &&
-                 strcasecmp(coupletmp->c_namepointedvar,"")
-              )
-           {
-              outvar = 1;
-              strcpy(newvar->var->v_oldname,newvar->var->v_nomvar);
-              strcpy(newvar->var->v_nomvar,coupletmp->c_namepointedvar);
-           }
-           else
-           {
-              newvar = newvar->suiv;
-           }
-         }
-         coupletmp = coupletmp->suiv;
-     }
-     pointtmplist = pointtmplist->suiv;
-  }
-}
-
-/******************************************************************************/
-/*                             CopyRecord                                     */
+    listvar *newvar;
+    listvarpointtovar *pointtmplist;
+    listcouple *coupletmp;
+    int outvar;
+
+    pointtmplist = List_CouplePointed_Var;
+    while ( pointtmplist )
+    {
+        coupletmp = pointtmplist->t_couple;
+        while ( coupletmp )
+        {
+            newvar = List_UsedInSubroutine_Var;
+            outvar = 0 ;
+            while ( newvar && outvar == 0)
+            {
+                /* we should find the same variable name in the same subroutine    */
+                if ( !strcasecmp(newvar->var->v_nomvar, coupletmp->c_namevar) &&
+                     !strcasecmp(newvar->var->v_subroutinename, pointtmplist->t_cursubroutine) &&
+                      strcasecmp(coupletmp->c_namepointedvar, "") )
+                {
+                    outvar = 1;
+                    strcpy(newvar->var->v_oldname, newvar->var->v_nomvar);
+                    strcpy(newvar->var->v_nomvar, coupletmp->c_namepointedvar);
+                }
+                else
+                {
+                    newvar = newvar->suiv;
+                }
+            }
+            coupletmp = coupletmp->suiv;
+        }
+        pointtmplist = pointtmplist->suiv;
+    }
+}
+
+/******************************************************************************/
+/*                             Merge_Variables                                */
 /******************************************************************************/
 /*                                                                            */
 /******************************************************************************/
-void CopyRecord(variable *var1,variable *var2)
-{
-   if ( !strcasecmp(var1->v_typevar,"") )
-                                        strcpy(var1->v_typevar,var2->v_typevar);
-   else strcpy(var2->v_typevar,var1->v_typevar);
-
-   if ( !strcasecmp(var1->v_oldname,"") )
-                                        strcpy(var1->v_oldname,var2->v_oldname);
-   else strcpy(var2->v_oldname,var1->v_oldname);
-
-   if ( !strcasecmp(var1->v_dimchar,"") )
-                                        strcpy(var1->v_dimchar,var2->v_dimchar);
-   else strcpy(var2->v_dimchar,var1->v_dimchar);
-
-   if ( !strcasecmp(var1->v_commonname,"") )
-                                  strcpy(var1->v_commonname,var2->v_commonname);
-   else strcpy(var2->v_commonname,var1->v_commonname);
-   
-   printf("modulenameII = %s %s %d %s\n",var1->v_modulename,var2->v_modulename,var1->v_module,var1->v_nomvar);
-
-   if ( !strcasecmp(var1->v_modulename,"") || (var1->v_module ==0))
-                                  strcpy(var1->v_modulename,var2->v_modulename);
-   else strcpy(var2->v_modulename,var1->v_modulename);
-
-   if ( !strcasecmp(var1->v_vallengspec,"") )
-                                strcpy(var1->v_vallengspec,var2->v_vallengspec);
-   else strcpy(var2->v_vallengspec,var1->v_vallengspec);
-
-   if ( !strcasecmp(var1->v_nameinttypename,"") )
-                        strcpy(var1->v_nameinttypename,var2->v_nameinttypename);
-   else strcpy(var2->v_nameinttypename,var1->v_nameinttypename);
-          
-   if ( !strcasecmp(var1->v_commoninfile,"") )
-                              strcpy(var1->v_commoninfile,var2->v_commoninfile);
-   else strcpy(var2->v_commoninfile,var1->v_commoninfile);
-
-   if ( !strcasecmp(var1->v_precision,"") )
-                                    strcpy(var1->v_precision,var2->v_precision);
-   else strcpy(var2->v_precision,var1->v_precision);
-
-   if ( !strcasecmp(var1->v_initialvalue,"") )
-                              strcpy(var1->v_initialvalue,var2->v_initialvalue);
-   else strcpy(var2->v_initialvalue,var1->v_initialvalue);
-
-   if ( !strcasecmp(var1->v_IntentSpec,"") )
-                                  strcpy(var1->v_IntentSpec,var2->v_IntentSpec);
-   else strcpy(var2->v_IntentSpec,var1->v_IntentSpec);
-
-   if ( !strcasecmp(var1->v_readedlistdimension,"") )
-                strcpy(var1->v_readedlistdimension,var2->v_readedlistdimension);
-   else strcpy(var2->v_readedlistdimension,var1->v_readedlistdimension);
-
-   if ( var1->v_dimension ) var2->v_dimension = var1->v_dimension ;
-   else var1->v_dimension = var2->v_dimension ;
-
-   if ( var1->v_nbdim == 0 ) var1->v_nbdim = var2->v_nbdim ;
-   else var2->v_nbdim = var1->v_nbdim ;
-
-   if ( var1->v_common == 0 ) var1->v_common = var2->v_common ;
-   else var2->v_common = var1->v_common ;
-
-   if ( var1->v_positioninblock == 0 ) var1->v_positioninblock =
-                                                       var2->v_positioninblock ;
-   else var2->v_positioninblock = var1->v_positioninblock ;
-
-   if ( var1->v_module == 0 ) var1->v_module = var2->v_module ;
-   else var2->v_module = var1->v_module ;
-
-   if ( var1->v_save == 0 ) var1->v_save = var2->v_save ;
-   else var2->v_save = var1->v_save ;
-   
-   if ( var1->v_VariableIsParameter == 0 )
-                     var1->v_VariableIsParameter = var2->v_VariableIsParameter ;
-                    
-   else var2->v_VariableIsParameter = var1->v_VariableIsParameter ;
-   if ( var1->v_indicetabvars == 0 )
-   {
-   
-                                 var1->v_indicetabvars = var2->v_indicetabvars ;
-       printf("HERHEHR %s mm %s mm %d\n",var1->v_nomvar,var2->v_modulename,var2->v_indicetabvars);
-                                 }
-   else var2->v_indicetabvars = var1->v_indicetabvars ;
-
-   if ( var1->v_ExternalDeclare == 0 )
-                             var1->v_ExternalDeclare = var2->v_ExternalDeclare ;
-   else var2->v_ExternalDeclare = var1->v_ExternalDeclare ;
-
-   if ( var1->v_pointedvar == 0 ) var1->v_pointedvar = var2->v_pointedvar ;
-   else var2->v_pointedvar = var1->v_pointedvar ;
-
-   if ( var1->v_dimensiongiven == 0 )
-                                var1->v_dimensiongiven = var2->v_dimensiongiven;
-   else var2->v_dimensiongiven = var1->v_dimensiongiven ;
-
-   if ( var1->v_c_star == 0 ) var1->v_c_star = var2->v_c_star;
-   else var2->v_c_star = var1->v_c_star ;
-
-   if ( var1->v_pointerdeclare == 0 )
-                               var1->v_pointerdeclare = var2->v_pointerdeclare ;
-   else var2->v_pointerdeclare = var1->v_pointerdeclare ;
-
-
-   if ( var1->v_notgrid == 0 ) var1->v_notgrid = var2->v_notgrid ;
-   else var2->v_notgrid = var1->v_notgrid;
-
-   if ( var1->v_optionaldeclare == 0 )
-                              var1->v_optionaldeclare = var2->v_optionaldeclare;
-   else var2->v_optionaldeclare = var1->v_optionaldeclare ;
-
-   if ( var1->v_allocatable == 0 ) var1->v_allocatable = var2->v_allocatable ;
-   else var2->v_allocatable = var1->v_allocatable ;
-   
-   if ( var1->v_target == 0 ) var1->v_target = var2->v_target ;
-   else var2->v_target = var1->v_target ;
-
-   if ( var1->v_dimsempty == 0 ) var1->v_dimsempty = var2->v_dimsempty ;
-   else var2->v_dimsempty = var1->v_dimsempty ;
+void Merge_Variables(variable *var1, variable *var2)
+{
+    if ( !strcasecmp(var1->v_typevar,"") )
+            strcpy(var1->v_typevar,var2->v_typevar);
+    else
+      {
+      strcpy(var2->v_typevar,var1->v_typevar);
+      }
+
+    if ( !strcasecmp(var1->v_oldname,"") )
+            strcpy(var1->v_oldname,var2->v_oldname);
+    else    strcpy(var2->v_oldname,var1->v_oldname);
+
+    if ( !strcasecmp(var1->v_dimchar,"") )
+            strcpy(var1->v_dimchar,var2->v_dimchar);
+    else    strcpy(var2->v_dimchar,var1->v_dimchar);
+
+    if ( !strcasecmp(var1->v_commonname,"") )
+            strcpy(var1->v_commonname,var2->v_commonname);
+    else    strcpy(var2->v_commonname,var1->v_commonname);
+
+    if ( !strcasecmp(var1->v_modulename,"") || (var1->v_module ==0))
+            strcpy(var1->v_modulename,var2->v_modulename);
+    else    strcpy(var2->v_modulename,var1->v_modulename);
+
+    if ( !strcasecmp(var1->v_vallengspec,"") )
+            strcpy(var1->v_vallengspec,var2->v_vallengspec);
+    else    strcpy(var2->v_vallengspec,var1->v_vallengspec);
+
+    if ( !strcasecmp(var1->v_nameinttypename,"") )
+            strcpy(var1->v_nameinttypename,var2->v_nameinttypename);
+    else    strcpy(var2->v_nameinttypename,var1->v_nameinttypename);
+
+    if ( !strcasecmp(var1->v_commoninfile,"") )
+            strcpy(var1->v_commoninfile,var2->v_commoninfile);
+    else    strcpy(var2->v_commoninfile,var1->v_commoninfile);
+
+    if ( !strcasecmp(var1->v_precision,"") )
+            strcpy(var1->v_precision,var2->v_precision);
+    else    strcpy(var2->v_precision,var1->v_precision);
+
+    if ( !strcasecmp(var1->v_initialvalue,"") )
+            strcpy(var1->v_initialvalue,var2->v_initialvalue);
+    else    strcpy(var2->v_initialvalue,var1->v_initialvalue);
+
+    if ( !strcasecmp(var1->v_IntentSpec,"") )
+            strcpy(var1->v_IntentSpec,var2->v_IntentSpec);
+    else    strcpy(var2->v_IntentSpec,var1->v_IntentSpec);
+
+    if ( !strcasecmp(var1->v_readedlistdimension,"") )
+            strcpy(var1->v_readedlistdimension,var2->v_readedlistdimension);
+    else    strcpy(var2->v_readedlistdimension,var1->v_readedlistdimension);
+
+    if ( var1->v_dimension )
+            var2->v_dimension = var1->v_dimension ;
+    else    var1->v_dimension = var2->v_dimension ;
+
+    if ( var1->v_nbdim == 0 )
+            var1->v_nbdim = var2->v_nbdim ;
+    else    var2->v_nbdim = var1->v_nbdim ;
+
+    if ( var1->v_common == 0 )
+            var1->v_common = var2->v_common ;
+    else    var2->v_common = var1->v_common ;
+
+    if ( var1->v_positioninblock == 0 )
+            var1->v_positioninblock = var2->v_positioninblock ;
+    else    var2->v_positioninblock = var1->v_positioninblock ;
+
+    if ( var1->v_module == 0 )
+            var1->v_module = var2->v_module ;
+    else    var2->v_module = var1->v_module ;
+
+    if ( var1->v_save == 0 )
+            var1->v_save = var2->v_save ;
+    else    var2->v_save = var1->v_save ;
+
+    if ( var1->v_VariableIsParameter == 0 )
+            var1->v_VariableIsParameter = var2->v_VariableIsParameter ;
+    else    var2->v_VariableIsParameter = var1->v_VariableIsParameter ;
+
+    if ( var1->v_indicetabvars == 0 )
+            var1->v_indicetabvars = var2->v_indicetabvars ;
+    else    var2->v_indicetabvars = var1->v_indicetabvars ;
+
+    if ( var1->v_ExternalDeclare == 0 )
+            var1->v_ExternalDeclare = var2->v_ExternalDeclare ;
+    else    var2->v_ExternalDeclare = var1->v_ExternalDeclare ;
+
+    if ( var1->v_pointedvar == 0 )
+            var1->v_pointedvar = var2->v_pointedvar ;
+    else    var2->v_pointedvar = var1->v_pointedvar ;
+
+    if ( var1->v_dimensiongiven == 0 )
+            var1->v_dimensiongiven = var2->v_dimensiongiven;
+    else    var2->v_dimensiongiven = var1->v_dimensiongiven ;
+
+    if ( var1->v_c_star == 0 )
+            var1->v_c_star = var2->v_c_star;
+    else    var2->v_c_star = var1->v_c_star ;
+
+    if ( var1->v_catvar == 0 )
+            var1->v_catvar = var2->v_catvar;
+    else    var2->v_catvar = var1->v_catvar ;
+
+    if ( var1->v_pointerdeclare == 0 )
+            var1->v_pointerdeclare = var2->v_pointerdeclare ;
+    else    var2->v_pointerdeclare = var1->v_pointerdeclare ;
+
+    if ( var1->v_notgrid == 0 )
+            var1->v_notgrid = var2->v_notgrid ;
+    else    var2->v_notgrid = var1->v_notgrid;
+
+    if ( var1->v_optionaldeclare == 0 )
+            var1->v_optionaldeclare = var2->v_optionaldeclare;
+    else    var2->v_optionaldeclare = var1->v_optionaldeclare ;
+
+    if ( var1->v_allocatable == 0 )
+            var1->v_allocatable = var2->v_allocatable ;
+    else    var2->v_allocatable = var1->v_allocatable ;
+
+    if ( var1->v_target == 0 )
+            var1->v_target = var2->v_target ;
+    else    var2->v_target = var1->v_target ;
+
+    if ( var1->v_dimsempty == 0 )
+            var1->v_dimsempty = var2->v_dimsempty ;
+    else    var2->v_dimsempty = var1->v_dimsempty ;
 }
 
@@ -437,10 +421,7 @@
       while ( parcours1 && out == 0 )
       {
-         if ( !strcasecmp(parcours->var->v_nomvar,
-                          parcours1->var->v_nomvar)         &&
-              !strcasecmp(parcours->var->v_subroutinename,
-                          parcours1->var->v_subroutinename) &&
-              !strcasecmp(parcours->var->v_modulename,
-                          parcours1->var->v_modulename)
+         if ( !strcasecmp(parcours->var->v_nomvar,         parcours1->var->v_nomvar)         &&
+              !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) &&
+              !strcasecmp(parcours->var->v_modulename,     parcours1->var->v_modulename)
             ) out = 1;
          else parcours1 = parcours1->suiv;
@@ -448,6 +429,6 @@
       /* if variable has been found                                           */
 
-      if ( out == 1 ) CopyRecord(parcours->var,parcours1->var);
-      
+      if ( out == 1 ) Merge_Variables(parcours->var,parcours1->var);
+
       /* looking in List_Dimension_Var                                        */
       if (out == 0 )
@@ -471,8 +452,8 @@
         }
         /* if variable has been found                                         */
-        
+
         if ( out == 1 )
         {
-           CopyRecord(parcours->var,parcours1->var);
+           Merge_Variables(parcours->var,parcours1->var);
            /* we should remove this record from the List_Dimension_Var        */
            if ( parcours1 == List_Dimension_Var )
@@ -495,5 +476,5 @@
    listvar *parcours;
    listvar *newvar;
-   char ligne[LONG_C];
+   char tmpname[LONG_VNAME];
 
    parcours = List_Save_Var;
@@ -503,18 +484,17 @@
       /* Save in subroutine which is not defined in a module                  */
       {
-         newvar = (listvar *)malloc(sizeof(listvar));
-         newvar->var = (variable *)malloc(sizeof(variable));
+         newvar = (listvar *)calloc(1,sizeof(listvar));
+         newvar->var = (variable *)calloc(1,sizeof(variable));
          /*                                                                   */
          Init_Variable(newvar->var);
          /*                                                                   */
          newvar->suiv = NULL;
-         CopyRecord(parcours->var,newvar->var);
+         Merge_Variables(parcours->var,newvar->var);
          strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename);
          strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar);
-
-         sprintf(ligne,"save_%s",parcours->var->v_subroutinename);
-         Add_NameOfCommon_1(ligne,parcours->var->v_subroutinename);
-         strcpy(newvar->var->v_commonname,ligne);
-         Save_Length(ligne,7);
+         newvar->var->v_catvar=parcours->var->v_catvar;
+         sprintf(tmpname,"save_%s",parcours->var->v_subroutinename);
+         Add_NameOfCommon_1(tmpname,parcours->var->v_subroutinename);
+         strcpy(newvar->var->v_commonname,tmpname);
          List_Common_Var = AddListvarToListvar(newvar,List_Common_Var,1);
       }
@@ -522,6 +502,6 @@
       /* Save in subroutine which is defined in a module                      */
       {
-         newvar = (listvar *)malloc(sizeof(listvar));
-         newvar->var = (variable *)malloc(sizeof(variable));
+         newvar = (listvar *)calloc(1,sizeof(listvar));
+         newvar->var = (variable *)calloc(1,sizeof(variable));
          /*                                                                   */
          Init_Variable(newvar->var);
@@ -529,9 +509,10 @@
          newvar->suiv = NULL;
 
-         CopyRecord(parcours->var,newvar->var);
+         Merge_Variables(parcours->var,newvar->var);
          strcpy(newvar->var->v_subroutinename,parcours->var->v_subroutinename);
 
          strcpy(newvar->var->v_nomvar,parcours->var->v_nomvar);
 
+         newvar->var->v_catvar=parcours->var->v_catvar;
          strcpy(newvar->var->v_modulename,parcours->var->v_modulename);
          List_Global_Var = AddListvarToListvar(newvar,List_Global_Var,1);
@@ -560,11 +541,9 @@
       {
 
-         if ( !strcasecmp(parcours->var->v_nomvar,
-                          parcours1->var->v_nomvar)         &&
-              !strcasecmp(parcours->var->v_subroutinename,
-                          parcours1->var->v_subroutinename)
-            ) {
-            out = 1;     
-            }
+         if ( !strcasecmp(parcours->var->v_nomvar,         parcours1->var->v_nomvar) &&
+              !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) )
+         {
+            out = 1;
+         }
          else parcours1 = parcours1->suiv;
       }
@@ -573,6 +552,6 @@
       {
          strcpy(parcours->var->v_commoninfile,parcours1->var->v_commoninfile);
-             
-         CopyRecord(parcours->var,parcours1->var);
+
+         Merge_Variables(parcours->var,parcours1->var);
       }
       parcours = parcours->suiv;
@@ -587,103 +566,77 @@
 void Update_List_Var(listvar *list_to_modify)
 {
-   listvar *parcours;
-   listvar *parcours1;
-   int out;
-   int out2;
-   
-   parcours = list_to_modify;
-
-   while( parcours )
-   {
-     printf("LE NOM EST %s\n",parcours->var->v_nomvar);
-      /* looking in List_Global_Var                                           */
-      
-      out = 0;
-      
-//       if (list_to_modify != List_SubroutineDeclaration_Var && list_to_modify != List_UsedInSubroutine_Var) {
-//       parcours1 = List_Global_Var;
-//       while ( parcours1 && out == 0 )
-//       {
-//          if ( !strcasecmp(parcours->var->v_nomvar,
-//                           parcours1->var->v_nomvar)         &&
-//               !strcasecmp(parcours->var->v_modulename,
-//                           parcours1->var->v_modulename)
-//             ) out = 1;
-//          else parcours1 = parcours1->suiv;
-//       }
-//       }
-      
-  //    if (list_to_modify == List_UsedInSubroutine_Var) {
-      parcours1 = List_Global_Var;
-      while ( parcours1 && out == 0 )
-      {
-      printf("lenombis est %s\n",parcours1->var->v_nomvar);
-         if ( !strcasecmp(parcours->var->v_nomvar,
-                          parcours1->var->v_nomvar)         &&
-                 !strcasecmp(parcours->var->v_subroutinename,
-                             parcours1->var->v_subroutinename) &&
-              !strcasecmp(parcours->var->v_modulename,
-                          parcours1->var->v_modulename)
-            ) {
-            out = 1;
+    listvar *parcours;
+    listvar *parcours1;
+    int out;
+
+    parcours = list_to_modify;
+
+    while( parcours )
+    {
+        /*printf("LE NOM EST %s\n",parcours->var->v_nomvar);*/
+        /* looking in List_Global_Var                                           */
+        out = 0;
+        parcours1 = List_Global_Var;
+
+        while ( parcours1 && out == 0 )
+        {
+            if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)         &&
+                 !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) &&
+                 !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) )
+            {
+                out = 1;
             }
-         else parcours1 = parcours1->suiv;
-      }
-//      }      
-
-      /* if variable has been found                                           */
-      if ( out == 1 ) {
-      CopyRecord(parcours->var,parcours1->var);
-      }
-      /* looking in List_SubroutineDeclaration_Var                            */
-      else
-      {
-         parcours1 = List_SubroutineDeclaration_Var ;
-         out = 0;
-         while ( parcours1)
-         {
-            if ( !strcasecmp(parcours->var->v_nomvar,
-                             parcours1->var->v_nomvar)         &&
-                 !strcasecmp(parcours->var->v_subroutinename,
-                             parcours1->var->v_subroutinename) &&
-                 !strcasecmp(parcours->var->v_modulename,
-                             parcours1->var->v_modulename)
-               ) {
-
-               out = 1;
-               break;
-               }
             else parcours1 = parcours1->suiv;
-         }
-             
-         /* if variable has been found                                        */
-         if ( out == 1 ) {
-         CopyRecord(parcours->var,parcours1->var);
-        
-         }
-         else
-         {
-            parcours1 = List_Common_Var ;
+        }
+
+        /* if variable has been found                                           */
+        if ( out == 1 )
+        {
+            Merge_Variables(parcours->var,parcours1->var);
+        }
+        /* looking in List_SubroutineDeclaration_Var                            */
+        else
+        {
+            parcours1 = List_SubroutineDeclaration_Var ;
             out = 0;
-            while ( parcours1 && out == 0 )
+            while ( parcours1 )
             {
-               if ( !strcasecmp(parcours->var->v_nomvar,
-                                parcours1->var->v_nomvar)         &&
-                    !strcasecmp(parcours->var->v_subroutinename,
-                                parcours1->var->v_subroutinename) &&
-                    !strcasecmp(parcours->var->v_modulename,
-                                parcours1->var->v_modulename)
-                  ) out = 1;
-               else parcours1 = parcours1->suiv;
+                if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)                 &&
+                     !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) &&
+                     !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) )
+                {
+                    out = 1;
+                    break;
+                }
+                else parcours1 = parcours1->suiv;
             }
-            /* if variable has been found                                     */
-            if ( out == 1 ) {
-            CopyRecord(parcours->var,parcours1->var);       
-         }
-      }
-      }
-      parcours = parcours->suiv;
-   }
-   
+            /* if variable has been found                                        */
+            if ( out == 1 )
+            {
+                Merge_Variables(parcours->var,parcours1->var);
+            }
+            else
+            {
+                parcours1 = List_Common_Var ;
+                out = 0;
+                while ( parcours1 && out == 0 )
+                {
+                    if ( !strcasecmp(parcours->var->v_nomvar, parcours1->var->v_nomvar)                 &&
+                         !strcasecmp(parcours->var->v_subroutinename, parcours1->var->v_subroutinename) &&
+                         !strcasecmp(parcours->var->v_modulename, parcours1->var->v_modulename) )
+                    {
+                        out = 1;
+                    }
+                    else parcours1 = parcours1->suiv;
+                }
+                /* if variable has been found                                     */
+                if ( out == 1 )
+                {
+                    Merge_Variables(parcours->var,parcours1->var);
+                }
+            }
+        }
+        parcours = parcours->suiv;
+    }
 }
 
@@ -696,20 +649,16 @@
    int out;
 
-   
+
    parcours = List_UsedInSubroutine_Var;
    while( parcours )
    {
       out = 0 ;
-      printf("OIEROZEIR %s %s\n",parcours->var->v_nomvar,parcours->var->v_modulename);
       if ( parcours->var->v_indicetabvars == 0 )
       {
-       printf("OIEROZEIR %s\n",parcours->var->v_nomvar);
          parcours2 = List_NameOfModuleUsed;
          while( parcours2 )
          {
-            if ( !strcasecmp(parcours2->u_cursubroutine,"") &&
-                 !strcasecmp(parcours2->u_modulename,
-                             parcours->var->v_modulename)
-               )
+            if ( !strcasecmp(parcours2->u_cursubroutine, "") &&
+                 !strcasecmp(parcours2->u_modulename, parcours->var->v_modulename) )
             {
                parcours3 = List_Global_Var;
@@ -722,11 +671,8 @@
                   else parcours3 = parcours3->suiv;
                }
-               if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+               if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var);
             }
-            else if ( !strcasecmp(parcours2->u_cursubroutine,
-                             parcours->var->v_subroutinename) &&
-                 !strcasecmp(parcours2->u_modulename,
-                             parcours->var->v_modulename)
-               )
+            else if ( !strcasecmp(parcours2->u_cursubroutine, parcours->var->v_subroutinename) &&
+                      !strcasecmp(parcours2->u_modulename,    parcours->var->v_modulename) )
             {
                parcours3 = List_Global_Var;
@@ -739,5 +685,5 @@
                   else parcours3 = parcours3->suiv;
                }
-               if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+               if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var);
             }
             parcours2 = parcours2->suiv;
@@ -755,5 +701,5 @@
                else parcours3 = parcours3->suiv;
             }
-            if ( out == 1 ) CopyRecord(parcours->var,parcours3->var);
+            if ( out == 1 ) Merge_Variables(parcours->var,parcours3->var);
          }
          /*                                                                   */
@@ -792,5 +738,5 @@
       if ( out == 1 )
       {
-         CopyRecord(parcours->var,parcours1->var);
+         Merge_Variables(parcours->var,parcours1->var);
          strcpy(parcours->var->v_subroutinename,
                 parcours1->var->v_subroutinename);
@@ -841,5 +787,5 @@
 }
 
-int LookingForVariableInListName(listvar *listin,char *name)
+int LookingForVariableInListName(listvar *listin,const char *name)
 {
    listvar *parcours1;
@@ -860,4 +806,22 @@
 }
 
+variable *get_variable_in_list_from_name( listvar *listin, const char *name )
+{
+    listvar *parcours = listin;
+    variable *var = NULL;
+
+    while ( parcours && (!var) )
+    {
+        if ( !strcasecmp(name,parcours->var->v_nomvar) &&
+           ( !strcasecmp(subroutinename,parcours->var->v_subroutinename) ||
+             !strcasecmp(subroutinename,"") ) )
+        {
+            var = parcours->var;
+        }
+        else parcours = parcours -> suiv;
+   }
+   return var;
+}
+
 int LookingForVariableInListGlob(listvar *listin,variable *var)
 {
@@ -897,6 +861,5 @@
 void UpdateListDeclarationWithDimensionList()
 {
-   List_SubroutineDeclaration_Var = AddListvarToListvar(List_Dimension_Var,
-                                              List_SubroutineDeclaration_Var,1);
+   List_SubroutineDeclaration_Var = AddListvarToListvar(List_Dimension_Var, List_SubroutineDeclaration_Var,1);
 }
 
@@ -915,32 +878,20 @@
    listvar *parcoursprec;
    int remove;
-    
-        
+
    parcoursprec = (listvar *)NULL;
    parcours = List_UsedInSubroutine_Var;
    while ( parcours )
    {
-      /*                                                                      */
-      remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var,
-                                                                 parcours->var);
+      remove = LookingForVariableInListGlobal(List_SubroutineArgument_Var,   parcours->var);
       if ( remove == 0 )
-           remove = LookingForVariableInList(List_SubroutineDeclaration_Var,
-                                                                 parcours->var);
-
+           remove = LookingForVariableInList(List_SubroutineDeclaration_Var, parcours->var);
       if ( remove == 0 )
-           remove = LookingForVariableInList(List_Parameter_Var,
-                                                                 parcours->var);
+           remove = LookingForVariableInList(List_Parameter_Var, parcours->var);
       if ( remove == 0 )
-           remove = LookingForVariableInList(List_FunctionType_Var,
-                                                                 parcours->var);
+           remove = LookingForVariableInList(List_FunctionType_Var, parcours->var);
       if ( remove == 0 )
-           remove = LookingForVariableInListGlob(List_GlobalParameter_Var,
-                                                                 parcours->var);
-      
+           remove = LookingForVariableInListGlob(List_GlobalParameter_Var, parcours->var);
       if ( remove == 0 )
-           remove = LookingForVariableInListParamGlob(
-                                    List_GlobParamModuleUsed_Var,parcours->var);
-
-  
+           remove = LookingForVariableInListParamGlob(List_GlobParamModuleUsed_Var, parcours->var);
       if ( remove == 0 )
       {
@@ -976,6 +927,4 @@
       }
    }
-   
-
 }
 
@@ -1023,5 +972,4 @@
       }
    }
-
 }
 
@@ -1032,5 +980,5 @@
    listvar *parcoursprec;
    int out ;
-           
+
    parcoursprec = (listvar *)NULL;
    parcours = List_SubroutineDeclaration_Var;
@@ -1041,8 +989,6 @@
       while ( parcours1 && out == 0 )
       {
-         if ( !strcasecmp(parcours->var->v_subroutinename,
-                          parcours1->var->v_subroutinename) &&
-              !strcasecmp(parcours->var->v_nomvar,
-                          parcours1->var->v_nomvar)
+         if ( !strcasecmp(parcours->var->v_subroutinename,parcours1->var->v_subroutinename) &&
+              !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar)
             ) out = 1;
          else parcours1 = parcours1->suiv;
@@ -1054,8 +1000,6 @@
          while ( parcours1 && out == 0 )
          {
-            if ( !strcasecmp(parcours->var->v_subroutinename,
-                             parcours1->var->v_subroutinename) &&
-                 !strcasecmp(parcours->var->v_nomvar,
-                             parcours1->var->v_nomvar)
+            if ( !strcasecmp(parcours->var->v_subroutinename,parcours1->var->v_subroutinename) &&
+                 !strcasecmp(parcours->var->v_nomvar,parcours1->var->v_nomvar)
                ) out = 1;
             else parcours1 = parcours1->suiv;
@@ -1083,5 +1027,4 @@
       }
    }
-       
 }
 
@@ -1133,5 +1076,5 @@
                          parcours2->var->v_modulename) )
          {
-            CopyRecord(parcours->var,parcours2->var);
+            Merge_Variables(parcours->var,parcours2->var);
             /* remove var from the parcours2                                  */
             parcours2prec ->suiv = parcours2->suiv;
@@ -1160,5 +1103,5 @@
    Clean_List_UsedInSubroutine_Var();
    Clean_List_SubroutineDeclaration_Var();
-   
+
    newvar = (listvar *)NULL;
 /*   newvar = List_Common_Var;*/
@@ -1184,39 +1127,35 @@
 void ListUpdate()
 {
-   listvar *newvar;
-        
-   Update_List_Subroutine_Var(List_SubroutineArgument_Var);
-
-
-       
-   Update_List_Subroutine_Var(List_FunctionType_Var);
-   Update_List_Var(List_Parameter_Var);
-   Update_List_Var(List_Dimension_Var);
-   Update_List_Var(List_Data_Var);
-   Update_List_Var(List_Save_Var);
-   Update_List_Var(List_GlobalParameter_Var);
-   Update_List_Var(List_Common_Var);
-   Update_List_Var(List_SubroutineDeclaration_Var);
-   Update_List_Var(List_UsedInSubroutine_Var);
-   Update_List_From_Common_Var(List_UsedInSubroutine_Var);
-   Update_List_From_Common_Var(List_SubroutineDeclaration_Var);
-   Update_NotGridDepend_Var(List_NotGridDepend_Var);
-    
-   newvar =(listvar * )NULL;
-/*   newvar = List_Common_Var;*/
-/*   newvar = List_UsedInSubroutine_Var;*/
-/*   newvar = List_Data_Var;*/
-   while ( newvar )
-   {
-      printf("++++ %s - %d - %s - %s - %s - %s\n",
-      newvar->var->v_nomvar,
-      newvar->var->v_VariableIsParameter,
-      newvar->var->v_subroutinename,
-      newvar->var->v_modulename,
-      newvar->var->v_typevar,
-      newvar->var->v_initialvalue      
-            );
-      newvar = newvar->suiv;
-   }
+    listvar *newvar;
+
+    Update_List_Subroutine_Var(List_SubroutineArgument_Var);
+    Update_List_Subroutine_Var(List_FunctionType_Var);
+    Update_List_Var(List_Parameter_Var);
+    Update_List_Var(List_Dimension_Var);
+    Update_List_Var(List_Data_Var);
+    Update_List_Var(List_Save_Var);
+    Update_List_Var(List_GlobalParameter_Var);
+    Update_List_Var(List_Common_Var);
+    Update_List_Var(List_SubroutineDeclaration_Var);
+    Update_List_Var(List_UsedInSubroutine_Var);
+    Update_List_From_Common_Var(List_UsedInSubroutine_Var);
+    Update_List_From_Common_Var(List_SubroutineDeclaration_Var);
+    Update_NotGridDepend_Var(List_NotGridDepend_Var);
+
+    newvar = (listvar * ) NULL;
+//   newvar = List_Common_Var;
+//   newvar = List_UsedInSubroutine_Var;
+//   newvar = List_Data_Var;
+    while ( newvar )
+    {
+        printf("++++ %s - %s - %s - %d - %s - %s\n",
+                newvar->var->v_modulename,
+                newvar->var->v_subroutinename,
+                newvar->var->v_nomvar,
+                newvar->var->v_VariableIsParameter,
+                newvar->var->v_typevar,
+                newvar->var->v_initialvalue );
+        newvar = newvar->suiv;
+    }
 }
 
@@ -1273,5 +1212,5 @@
       parcours = parcours -> suiv ;
    }
-       
+
 }
 
@@ -1284,5 +1223,5 @@
    int position;
    int out;
-   char name_sub[LONG_C];
+   char name_sub[LONG_M];
 
    parcours = List_SubroutineArgument_Var;
@@ -1343,5 +1282,5 @@
       parcours = parcours->suiv;
    }
-       
+
 }
 
@@ -1364,5 +1303,5 @@
    parcoursprec = (listvar *)NULL;
 
-   if ( mark == 1 ) printf("MODULE Treated %s \n",nom);
+   if ( todebug == 1 ) printf("MODULE Treated %s \n",nom);
 
    List_ModuleUsed_Var = (listvar *)NULL;
@@ -1389,5 +1328,5 @@
          if ( out == 1 )
          {
-            CopyRecord(parcours->var,parcours1->var);
+            Merge_Variables(parcours->var,parcours1->var);
             /* Remove this variable from the List_ModuleUsed_Var              */
             if ( parcours1 == List_ModuleUsed_Var )
@@ -1405,18 +1344,20 @@
          /* if we do not found the var Module name in the old list            */
          {
-            if ( Listofavailableindices )
-            {
-               parcours->var->v_indicetabvars = Listofavailableindices ->
-                                                                       i_indice;
-               if ( Listofavailableindices->suiv )
-                          Listofavailableindices = Listofavailableindices->suiv;
-               else
-                          Listofavailableindices = (listindice *)NULL;
-            }
-            else
-            {
-               indicemaxtabvars = indicemaxtabvars + 1 ;
-               parcours->var->v_indicetabvars = indicemaxtabvars;
-            }
+  //       update_indicemaxtabvars(parcours->var,Listofavailableindices);
+         update_indicemaxtabvars(parcours->var,Listofavailableindices_glob);
+  //          if ( Listofavailableindices )
+  //          {
+  //             parcours->var->v_indicetabvars = Listofavailableindices ->
+  //                                                                     i_indice;
+  //             if ( Listofavailableindices->suiv )
+  //                        Listofavailableindices = Listofavailableindices->suiv;
+  //             else
+  //                        Listofavailableindices = (listindice *)NULL;
+  //          }
+  //          else
+  //          {
+  //             indicemaxtabvars = indicemaxtabvars + 1 ;
+  //             parcours->var->v_indicetabvars = indicemaxtabvars;
+  //          }
          }
       }
@@ -1428,8 +1369,8 @@
   while ( parcours1 )
   {
-     newindice=(listindice *) malloc (sizeof (listindice));
+     newindice=(listindice *) calloc(1,sizeof(listindice));
      newindice -> i_indice = parcours1 -> var -> v_indicetabvars;
-     newindice -> suiv = Listofavailableindices;
-     Listofavailableindices = newindice;
+     newindice -> suiv = Listofavailableindices_glob[parcours1 -> var -> v_catvar];
+     Listofavailableindices_glob[parcours1 -> var -> v_catvar] = newindice;
      parcours1 = parcours1->suiv;
   }
@@ -1444,5 +1385,5 @@
    listvar *parcours;
 
-   if ( mark == 1 ) printf("MODULE No Treated %s \n",nom);
+   if ( todebug == 1 ) printf("MODULE No Treated %s \n",nom);
 
    parcours = List_Global_Var;
@@ -1454,6 +1395,6 @@
           )
       {
-         indicemaxtabvars = indicemaxtabvars + 1 ;
-         parcours->var->v_indicetabvars = indicemaxtabvars;
+         indicemaxtabvars[parcours->var->v_catvar] = indicemaxtabvars[parcours->var->v_catvar] + 1 ;
+         parcours->var->v_indicetabvars = indicemaxtabvars[parcours->var->v_catvar];
       }
       parcours = parcours->suiv;
@@ -1474,5 +1415,5 @@
       {
          strcpy(parcours->var->v_commoninfile,record->var->v_commoninfile);
-         CopyRecord(parcours->var,record->var);
+         Merge_Variables(parcours->var,record->var);
       }
       parcours = parcours -> suiv;
@@ -1490,5 +1431,4 @@
 {
    listvar *parcours;
-   listvar *parcoursprec;
    listvar *parcours1;
    listvar *List_CommonUsed_Var;
@@ -1496,7 +1436,5 @@
    int out;
 
-   parcoursprec = (listvar *)NULL;
-
-   if ( mark == 1 ) printf("COMMON Treated %s \n",nom);
+   if ( todebug == 1 ) printf("COMMON Treated %s \n",nom);
 
    List_CommonUsed_Var = (listvar *)NULL;
@@ -1518,5 +1456,4 @@
             else
             {
-               parcoursprec = parcours1 ;
                parcours1 = parcours1->suiv;
             }
@@ -1527,23 +1464,25 @@
             strcpy(parcours->var->v_commoninfile,
                    parcours1->var->v_commoninfile);
-            CopyRecord(parcours->var,parcours1->var);
+            Merge_Variables(parcours->var,parcours1->var);
          }
          else
          /* if we do not found the var common name in the old list            */
          {
-            if ( Listofavailableindices )
-            {
-               parcours->var->v_indicetabvars = Listofavailableindices ->
-                                                                       i_indice;
-               if ( Listofavailableindices->suiv )
-                          Listofavailableindices = Listofavailableindices->suiv;
-               else
-                          Listofavailableindices = (listindice *)NULL;
-            }
-            else
-            {
-               indicemaxtabvars = indicemaxtabvars + 1 ;
-               parcours->var->v_indicetabvars = indicemaxtabvars;
-            }
+    //     update_indicemaxtabvars(parcours->var,Listofavailableindices);
+         update_indicemaxtabvars(parcours->var,Listofavailableindices_glob);
+    //        if ( Listofavailableindices )
+    //        {
+    //           parcours->var->v_indicetabvars = Listofavailableindices ->
+    //                                                                   i_indice;
+    //           if ( Listofavailableindices->suiv )
+    //                      Listofavailableindices = Listofavailableindices->suiv;
+    //           else
+    //                      Listofavailableindices = (listindice *)NULL;
+    //        }
+    //        else
+    //        {
+    //           indicemaxtabvars = indicemaxtabvars + 1 ;
+    //           parcours->var->v_indicetabvars = indicemaxtabvars;
+    //        }
          }
          /* Look in the remaining list in the variable is define              */
@@ -1559,12 +1498,33 @@
      if ( parcours1 -> var -> v_indicetabvars == 0 )
      {
-        newindice=(listindice *) malloc (sizeof (listindice));
+        newindice=(listindice *) calloc(1,sizeof(listindice));
         newindice -> i_indice = parcours1 -> var -> v_indicetabvars;
-        newindice -> suiv = Listofavailableindices;
-        Listofavailableindices = newindice;
+        newindice -> suiv = Listofavailableindices_glob[parcours1 -> var -> v_catvar];
+        Listofavailableindices_glob[parcours1 -> var -> v_catvar] = newindice;
      }
      parcours1 = parcours1->suiv;
   }
 }
+
+void update_indicemaxtabvars(variable *var,listindice **Listofindices)
+{
+
+
+            if ( Listofindices[var->v_catvar] )
+            {
+               var->v_indicetabvars = Listofindices[var->v_catvar] -> i_indice;
+               if ( Listofindices[var->v_catvar]->suiv )
+                          Listofindices[var->v_catvar] = Listofindices[var->v_catvar]->suiv;
+               else
+                          Listofindices[var->v_catvar] = (listindice *)NULL;
+            }
+            else
+            {
+               indicemaxtabvars[var->v_catvar] = indicemaxtabvars[var->v_catvar] + 1 ;
+               var->v_indicetabvars = indicemaxtabvars[var->v_catvar];
+            }
+
+}
+
 /******************************************************************************/
 /*                     IndiceTabvars_Common_Var_No_Treated                    */
@@ -1577,5 +1537,5 @@
    listvar *parcours2;
 
-   if ( mark == 1 ) printf("COMMON No Treated %s \n",nom);
+   if ( todebug == 1 ) printf("COMMON No Treated %s \n",nom);
 
    parcours = List_Common_Var;
@@ -1587,6 +1547,6 @@
           )
       {
-         indicemaxtabvars = indicemaxtabvars + 1 ;
-         parcours->var->v_indicetabvars = indicemaxtabvars;
+         indicemaxtabvars[parcours->var->v_catvar] = indicemaxtabvars[parcours->var->v_catvar] + 1 ;
+         parcours->var->v_indicetabvars = indicemaxtabvars[parcours->var->v_catvar];
          parcours2 = parcours;
          while ( parcours2 )
@@ -1619,5 +1579,5 @@
    while ( parcours_nom )
    {
-      if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )
+      if ( is_dependfile_created(parcours_nom->o_nom) == 1 )
       {
          IndiceTabvars_Global_Var_Treated(parcours_nom->o_nom);
@@ -1633,5 +1593,5 @@
    while ( parcours_nom )
    {
-      if ( Did_module_common_treaded(parcours_nom->o_nom) == 1 )
+      if ( is_dependfile_created(parcours_nom->o_nom) == 1 )
       {
          IndiceTabvars_Common_Var_Treated(parcours_nom->o_nom);
@@ -1663,16 +1623,18 @@
               !strcasecmp(parcours->var->v_subroutinename,"")            &&
               parcours->var->v_VariableIsParameter == 0                  &&
-              (parcours->var->v_allocatable == 0  || !strcasecmp(parcours->var->v_typevar,"type"))      &&
+              ( parcours->var->v_allocatable == 0 || !strcasecmp(parcours->var->v_typevar,"type"))      &&
               parcours->var->v_notgrid == 0                              &&
-              ( parcours->var->v_nbdim != 0 ||
-                strcasecmp(parcours->var->v_initialvalue,"")
-              ) ) out = 1;
+              ( ( parcours->var->v_nbdim != 0 || !strcasecmp(parcours->var->v_typevar,"type") )
+              || strcasecmp(parcours->var->v_initialvalue,"") )
+            )
+         {
+            out = 1;
+         }
          else parcours = parcours -> suiv;
       }
-      if ( out == 1 )
+      if ( out )
       {
          parcours_nom->o_val = 1 ;
       }
-      /*                                                                      */
       parcours_nom = parcours_nom -> suiv;
    }
@@ -1688,5 +1650,4 @@
    while ( parcours_nom )
    {
-      /*                                                                      */
       parcours = List_Common_Var;
       out = 0 ;
@@ -1695,8 +1656,11 @@
          if ( !strcasecmp(parcours->var->v_commonname,parcours_nom->o_nom)  &&
               strcasecmp(parcours->var->v_subroutinename,"")                &&
-              !strcasecmp(parcours->var->v_commoninfile,mainfile)           &&
-              ( parcours->var->v_nbdim != 0 ||
-                strcasecmp(parcours->var->v_initialvalue,"")
-              ) ) out = 1;
+              !strcasecmp(parcours->var->v_commoninfile,cur_filename)       &&
+              ( ( parcours->var->v_nbdim != 0 || !strcasecmp(parcours->var->v_typevar,"type") )
+              || strcasecmp(parcours->var->v_initialvalue,"") )
+            )
+         {
+            out = 1;
+         }
          else parcours = parcours -> suiv;
       }
@@ -1705,5 +1669,4 @@
          parcours_nom->o_val = 1 ;
       }
-      /*                                                                      */
       parcours_nom = parcours_nom -> suiv;
    }
@@ -1713,48 +1676,26 @@
 {
    listnom *parcours_nom;
-   char ligne[LONG_C];
-   if ( firstpass == 0 )
-   {
-      parcours_nom = List_NameOfCommon;
-      while ( parcours_nom )
-      {
-         if ( parcours_nom->o_val == 1 )
-         {
-            strcpy(ligne,"");
-            tofich(fortranout,ligne,1);
-            sprintf (ligne, "module %s",parcours_nom->o_nom);
-            tofich(fortranout,ligne,1);
-            WriteUsemoduleDeclaration(parcours_nom->o_subroutinename);
-            strcpy(ligne,"implicit none");
-            tofich(fortranout,ligne,1);
-            sprintf (ligne, "public Alloc_agrif_%s",parcours_nom->o_nom);
-            tofich(fortranout,ligne,1);
-            strcpy (ligne, "contains");
-            tofich(fortranout,ligne,1);
-            sprintf (ligne, "subroutine Alloc_agrif_%s(Agrif_Gr)",
-                                                           parcours_nom->o_nom);
-            tofich(fortranout,ligne,1);
-            strcpy(ligne,"Use Agrif_Util");
-            tofich(fortranout,ligne,1);
-            strcpy (ligne, "Type(Agrif_grid), Pointer :: Agrif_Gr");
-            tofich(fortranout,ligne,1);
-            strcpy(ligne, "INTEGER :: i");
-            tofich (fortranout, ligne,1);
-            strcpy (ligne, "\n#include \"alloc_agrif_");
-            strcat (ligne, parcours_nom->o_nom);
-            strcat (ligne, ".h\"\n");
-            fprintf(fortranout,ligne);
-            strcpy (ligne, "Return");
-            tofich(fortranout,ligne,1);
-            sprintf (ligne, "end subroutine Alloc_agrif_%s",
-                                                           parcours_nom->o_nom);
-            tofich(fortranout,ligne,1);
-            sprintf (ligne, "end module %s",parcours_nom->o_nom);
-            tofich(fortranout,ligne,1);
-            /* List all Call Alloc_agrif                                      */
-            Add_Subroutine_For_Alloc(parcours_nom->o_nom);
-         }
-         parcours_nom = parcours_nom->suiv;
-      }
+
+   parcours_nom = List_NameOfCommon;
+   while ( parcours_nom )
+   {
+      if ( parcours_nom->o_val == 1 )
+      {
+         fprintf(fortran_out, "      module %s\n\n", parcours_nom->o_nom);
+         WriteUsemoduleDeclaration(parcours_nom->o_subroutinename);
+         fprintf(fortran_out, "        implicit none\n");
+         fprintf(fortran_out, "        public :: Alloc_agrif_%s\n", parcours_nom->o_nom);
+         fprintf(fortran_out, "      contains\n");
+         fprintf(fortran_out, "      subroutine Alloc_agrif_%s(Agrif_Gr)\n", parcours_nom->o_nom);
+         fprintf(fortran_out, "        use Agrif_Util\n");
+         fprintf(fortran_out, "        type(Agrif_grid), pointer :: Agrif_Gr\n");
+         fprintf(fortran_out, "        integer :: i\n");
+         fprintf(fortran_out, "#include \"alloc_agrif_%s.h\"\n", parcours_nom->o_nom);
+         fprintf(fortran_out, "      end subroutine Alloc_agrif_%s\n", parcours_nom->o_nom);
+         fprintf(fortran_out, "      end module %s\n", parcours_nom->o_nom);
+         /* List all Call Alloc_agrif                                      */
+         Add_Subroutine_For_Alloc(parcours_nom->o_nom);
+      }
+      parcours_nom = parcours_nom->suiv;
    }
 }
@@ -1768,54 +1709,50 @@
    listvar *parcours4;
    int out;
-   char name_module[LONG_C];
+   char name_module[LONG_M];
 
    /* We should integrate allocate and pointer variables                      */
-   parcours2 = List_Allocate_Var;
-   while ( parcours2 )
-   {
-      parcours4 = List_UsedInSubroutine_Var;
-      out = 0 ;
-      while ( parcours4 && out == 0 )
-      {
-         if ( !strcasecmp(parcours2->a_nomvar,parcours4->var->v_nomvar) )
-         {
-            Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
-                                           parcours4->var->v_modulename);
-            out = 1;
-         }
-         else parcours4 = parcours4 -> suiv ;
-      }
-      parcours2 = parcours2->suiv;
-   }
-   /*                                                                         */
-   parcours3 = List_Pointer_Var;
-   while ( parcours3 )
-   {
-      parcours4 = List_UsedInSubroutine_Var;
-      out = 0 ;
-      while ( parcours4 && out == 0 )
-      {
-         if ( !strcasecmp(parcours3->n_name,parcours4->var->v_nomvar) )
-         {
-            Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
-                                           parcours4->var->v_modulename);
-            out = 1;
-         }
-         else parcours4 = parcours4 -> suiv ;
-      }
-      parcours3 = parcours3 -> suiv;
-   }
-   /*                                                                         */
-   parcours4 = List_UsedInSubroutine_Var;
-   while ( parcours4 )
-   {
-      if ( parcours4->var->v_allocatable == 1 && strcasecmp(parcours4->var->v_typevar,"type"))
-      {
-         Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename,
-                                        parcours4->var->v_modulename);
-      }
-      parcours4 = parcours4 -> suiv ;
-   }
-   /*                                                                         */
+//    parcours2 = List_Allocate_Var;
+//    while ( parcours2 )
+//    {
+//       parcours4 = List_UsedInSubroutine_Var;
+//       out = 0 ;
+//       while ( parcours4 && out == 0 )
+//       {
+//          if ( !strcasecmp(parcours2->a_nomvar,parcours4->var->v_nomvar) )
+//          {
+//             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename);
+//             out = 1;
+//          }
+//          else parcours4 = parcours4 -> suiv ;
+//       }
+//       parcours2 = parcours2->suiv;
+//    }
+//
+//    parcours3 = List_Pointer_Var;
+//    while ( parcours3 )
+//    {
+//       parcours4 = List_UsedInSubroutine_Var;
+//       out = 0 ;
+//       while ( parcours4 && out == 0 )
+//       {
+//          if ( !strcasecmp(parcours3->n_name, parcours4->var->v_nomvar) )
+//          {
+//             Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename);
+//             out = 1;
+//          }
+//          else parcours4 = parcours4 -> suiv ;
+//       }
+//       parcours3 = parcours3 -> suiv;
+//    }
+//    parcours4 = List_UsedInSubroutine_Var;
+//    while ( parcours4 )
+//    {
+//       if ( parcours4->var->v_allocatable == 1 && strcasecmp(parcours4->var->v_typevar,"type"))
+//       {
+//          Add_SubroutineWhereAgrifUsed_1(parcours4->var->v_subroutinename, parcours4->var->v_modulename);
+//       }
+//       parcours4 = parcours4 -> suiv ;
+//    }
+
    parcours = List_SubroutineWhereAgrifUsed;
    while ( parcours )
@@ -1833,11 +1770,10 @@
             if ( !strcasecmp(parcours->o_nom,parcours1->u_cursubroutine) )
             {
-               strcpy(name_module,parcours->o_module);
+               strcpy(name_module, parcours->o_module);
             }
             parcours1 = parcours1->suiv;
          }
       }
-      /* if out == 0 we should look in the module declaration                 */
-      if ( out == 0 )
+      if ( out == 0 )   /* we should look in the module declaration */
       {
          parcours1 = List_NameOfModuleUsed;
@@ -1853,5 +1789,5 @@
       }
       if ( out == 0 ) parcours->o_val = 1;
-      /*                                                                      */
+
       parcours = parcours->suiv;
    }
@@ -1876,15 +1812,10 @@
 }
 
-void Affiche()
-{
-   listvar *parcours;
-
-   parcours = (listvar *)NULL;
+void Affiche(listvar *in_parcours)
+{
 /*   parcours = List_Global_Var;                  */
 /*   parcours = List_SubroutineDeclaration_Var;   */
-
 /*   parcours = List_SubroutineArgument_Var;      */
 /*   parcours = List_FunctionType_Var;            */
-
 /*   parcours = List_Data_Var;                    */
 /*   parcours = List_Save_Var;                    */
@@ -1893,34 +1824,33 @@
 /*   parcours = List_GlobalParameter_Var;         */
 /*   parcours = List_NotGridDepend_Var;           */
-
 /*   parcours = List_Common_Var;                  */
+   listvar *parcours = in_parcours;
 
    while( parcours )
    {
-      printf("module- %s \n",parcours->var->v_modulename);
-      printf("subroutine- %s  \n",parcours->var->v_subroutinename);
-      printf("nom- %s  \n",parcours->var->v_nomvar);
-      printf("common- %s  \n",parcours->var->v_commonname);
-      printf("type- %s  \n",parcours->var->v_typevar);
-      printf("indice- %d  \n",parcours->var->v_indicetabvars);
-      printf("variableisparameter- %d \n",parcours->var->v_VariableIsParameter);
-      printf("module1- %d  \n",parcours->var->v_module);
-      printf("save- %d  \n",parcours->var->v_save);
-      printf("notgrid- %d  \n",parcours->var->v_notgrid);
-      printf("nbdim- %d  \n",parcours->var->v_nbdim);
-      printf("common1- %d  \n",parcours->var->v_common);
-      printf("v_dimensiongiven- %d  \n",parcours->var->v_dimensiongiven);
-      printf("v_dimsempty- %d  \n",parcours->var->v_dimsempty);
-      printf("initialvalue- %s\n \n",parcours->var->v_initialvalue);
-      printf("dim- %s\n \n",parcours->var->v_readedlistdimension);
+      printf("modulename     - %s \n", parcours->var->v_modulename);
+      printf("subroutinename - %s \n", parcours->var->v_subroutinename);
+      printf("nomvar         - %s \n", parcours->var->v_nomvar);
+      printf("commonname     - %s \n", parcours->var->v_commonname);
+      printf("commoninfile   - %s \n", parcours->var->v_commoninfile);
+      printf("typevar        - %s \n", parcours->var->v_typevar);
+      printf("catvar         - %d \n", parcours->var->v_catvar);
+      printf("indicetabvars  - %d \n", parcours->var->v_indicetabvars);
+      printf("isparameter    - %d \n", parcours->var->v_VariableIsParameter);
+      printf("module         - %d \n", parcours->var->v_module);
+      printf("save           - %d \n", parcours->var->v_save);
+      printf("notgrid        - %d \n", parcours->var->v_notgrid);
+      printf("nbdim          - %d \n", parcours->var->v_nbdim);
+      printf("common         - %d \n", parcours->var->v_common);
+      printf("dimensiongiven - %d \n", parcours->var->v_dimensiongiven);
+      printf("dimsempty      - %d \n", parcours->var->v_dimsempty);
+      printf("initialvalue   - %s \n", parcours->var->v_initialvalue);
+      printf("readedlistdim  - %s \n", parcours->var->v_readedlistdimension);
+      printf("-------------------------------------\n");
 
       parcours = parcours -> suiv ;
    }
-   if ( mark == 1 ) printf("Indicemaxtabvars = %d \n",indicemaxtabvars);
-   
-}
-
-
-
+   if ( todebug == 1 ) printf("Indicemaxtabvars = %d \n",indicemaxtabvars[0]);
+}
 
 int SubInList_ContainsSubroutine()
